source: node_modules/refractor/lang/soy.js

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 3.1 KB
RevLine 
[d24f17c]1'use strict'
2var refractorMarkupTemplating = require('./markup-templating.js')
3module.exports = soy
4soy.displayName = 'soy'
5soy.aliases = []
6function soy(Prism) {
7 Prism.register(refractorMarkupTemplating)
8 ;(function (Prism) {
9 var stringPattern = /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/
10 var numberPattern = /\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-F]+\b/
11 Prism.languages.soy = {
12 comment: [
13 /\/\*[\s\S]*?\*\//,
14 {
15 pattern: /(\s)\/\/.*/,
16 lookbehind: true,
17 greedy: true
18 }
19 ],
20 'command-arg': {
21 pattern:
22 /(\{+\/?\s*(?:alias|call|delcall|delpackage|deltemplate|namespace|template)\s+)\.?[\w.]+/,
23 lookbehind: true,
24 alias: 'string',
25 inside: {
26 punctuation: /\./
27 }
28 },
29 parameter: {
30 pattern: /(\{+\/?\s*@?param\??\s+)\.?[\w.]+/,
31 lookbehind: true,
32 alias: 'variable'
33 },
34 keyword: [
35 {
36 pattern:
37 /(\{+\/?[^\S\r\n]*)(?:\\[nrt]|alias|call|case|css|default|delcall|delpackage|deltemplate|else(?:if)?|fallbackmsg|for(?:each)?|if(?:empty)?|lb|let|literal|msg|namespace|nil|@?param\??|rb|sp|switch|template|xid)/,
38 lookbehind: true
39 },
40 /\b(?:any|as|attributes|bool|css|float|html|in|int|js|list|map|null|number|string|uri)\b/
41 ],
42 delimiter: {
43 pattern: /^\{+\/?|\/?\}+$/,
44 alias: 'punctuation'
45 },
46 property: /\w+(?==)/,
47 variable: {
48 pattern: /\$[^\W\d]\w*(?:\??(?:\.\w+|\[[^\]]+\]))*/,
49 inside: {
50 string: {
51 pattern: stringPattern,
52 greedy: true
53 },
54 number: numberPattern,
55 punctuation: /[\[\].?]/
56 }
57 },
58 string: {
59 pattern: stringPattern,
60 greedy: true
61 },
62 function: [
63 /\w+(?=\()/,
64 {
65 pattern: /(\|[^\S\r\n]*)\w+/,
66 lookbehind: true
67 }
68 ],
69 boolean: /\b(?:false|true)\b/,
70 number: numberPattern,
71 operator: /\?:?|<=?|>=?|==?|!=|[+*/%-]|\b(?:and|not|or)\b/,
72 punctuation: /[{}()\[\]|.,:]/
73 } // Tokenize all inline Soy expressions
74 Prism.hooks.add('before-tokenize', function (env) {
75 var soyPattern = /\{\{.+?\}\}|\{.+?\}|\s\/\/.*|\/\*[\s\S]*?\*\//g
76 var soyLitteralStart = '{literal}'
77 var soyLitteralEnd = '{/literal}'
78 var soyLitteralMode = false
79 Prism.languages['markup-templating'].buildPlaceholders(
80 env,
81 'soy',
82 soyPattern,
83 function (match) {
84 // Soy tags inside {literal} block are ignored
85 if (match === soyLitteralEnd) {
86 soyLitteralMode = false
87 }
88 if (!soyLitteralMode) {
89 if (match === soyLitteralStart) {
90 soyLitteralMode = true
91 }
92 return true
93 }
94 return false
95 }
96 )
97 }) // Re-insert the tokens after tokenizing
98 Prism.hooks.add('after-tokenize', function (env) {
99 Prism.languages['markup-templating'].tokenizePlaceholders(env, 'soy')
100 })
101 })(Prism)
102}
Note: See TracBrowser for help on using the repository browser.