diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/prismjs/components/prism-soy.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/prismjs/components/prism-soy.js')
| -rw-r--r-- | node_modules/prismjs/components/prism-soy.js | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/node_modules/prismjs/components/prism-soy.js b/node_modules/prismjs/components/prism-soy.js new file mode 100644 index 00000000..59080dc9 --- /dev/null +++ b/node_modules/prismjs/components/prism-soy.js @@ -0,0 +1,96 @@ +(function (Prism) { + var stringPattern = /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/; + var numberPattern = /\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b|\b0x[\dA-F]+\b/; + + Prism.languages.soy = { + 'comment': [ + /\/\*[\s\S]*?\*\//, + { + pattern: /(\s)\/\/.*/, + lookbehind: true, + greedy: true + } + ], + 'command-arg': { + pattern: /({+\/?\s*(?:alias|call|delcall|delpackage|deltemplate|namespace|template)\s+)\.?[\w.]+/, + lookbehind: true, + alias: 'string', + inside: { + 'punctuation': /\./ + } + }, + 'parameter': { + pattern: /({+\/?\s*@?param\??\s+)\.?[\w.]+/, + lookbehind: true, + alias: 'variable' + }, + 'keyword': [ + { + pattern: /({+\/?[^\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)/, + lookbehind: true + }, + /\b(?:any|as|attributes|bool|css|float|in|int|js|html|list|map|null|number|string|uri)\b/ + ], + 'delimiter': { + pattern: /^{+\/?|\/?}+$/, + alias: 'punctuation' + }, + 'property': /\w+(?==)/, + 'variable': { + pattern: /\$[^\W\d]\w*(?:\??(?:\.\w+|\[[^\]]+]))*/, + inside: { + 'string': { + pattern: stringPattern, + greedy: true + }, + 'number': numberPattern, + 'punctuation': /[\[\].?]/ + } + }, + 'string': { + pattern: stringPattern, + greedy: true + }, + 'function': [ + /\w+(?=\()/, + { + pattern: /(\|[^\S\r\n]*)\w+/, + lookbehind: true + } + ], + 'boolean': /\b(?:true|false)\b/, + 'number': numberPattern, + 'operator': /\?:?|<=?|>=?|==?|!=|[+*/%-]|\b(?:and|not|or)\b/, + 'punctuation': /[{}()\[\]|.,:]/ + }; + + // Tokenize all inline Soy expressions + Prism.hooks.add('before-tokenize', function (env) { + var soyPattern = /{{.+?}}|{.+?}|\s\/\/.*|\/\*[\s\S]*?\*\//g; + var soyLitteralStart = '{literal}'; + var soyLitteralEnd = '{/literal}'; + var soyLitteralMode = false; + + Prism.languages['markup-templating'].buildPlaceholders(env, 'soy', soyPattern, function (match) { + // Soy tags inside {literal} block are ignored + if (match === soyLitteralEnd) { + soyLitteralMode = false; + } + + if (!soyLitteralMode) { + if (match === soyLitteralStart) { + soyLitteralMode = true; + } + + return true; + } + return false; + }); + }); + + // Re-insert the tokens after tokenizing + Prism.hooks.add('after-tokenize', function (env) { + Prism.languages['markup-templating'].tokenizePlaceholders(env, 'soy'); + }); + +}(Prism));
\ No newline at end of file |
