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-smarty.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-smarty.js')
| -rw-r--r-- | node_modules/prismjs/components/prism-smarty.js | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/node_modules/prismjs/components/prism-smarty.js b/node_modules/prismjs/components/prism-smarty.js new file mode 100644 index 00000000..630e4c5e --- /dev/null +++ b/node_modules/prismjs/components/prism-smarty.js @@ -0,0 +1,96 @@ +/* TODO + Add support for variables inside double quoted strings + Add support for {php} +*/ + +(function(Prism) { + + Prism.languages.smarty = { + 'comment': /\{\*[\s\S]*?\*\}/, + 'delimiter': { + pattern: /^\{|\}$/i, + alias: 'punctuation' + }, + 'string': /(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/, + 'number': /\b0x[\dA-Fa-f]+|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][-+]?\d+)?/, + 'variable': [ + /\$(?!\d)\w+/, + /#(?!\d)\w+#/, + { + pattern: /(\.|->)(?!\d)\w+/, + lookbehind: true + }, + { + pattern: /(\[)(?!\d)\w+(?=\])/, + lookbehind: true + } + ], + 'function': [ + { + pattern: /(\|\s*)@?(?!\d)\w+/, + lookbehind: true + }, + /^\/?(?!\d)\w+/, + /(?!\d)\w+(?=\()/ + ], + 'attr-name': { + // Value is made optional because it may have already been tokenized + pattern: /\w+\s*=\s*(?:(?!\d)\w+)?/, + inside: { + "variable": { + pattern: /(=\s*)(?!\d)\w+/, + lookbehind: true + }, + "operator": /=/ + } + }, + 'punctuation': [ + /[\[\]().,:`]|->/ + ], + 'operator': [ + /[+\-*\/%]|==?=?|[!<>]=?|&&|\|\|?/, + /\bis\s+(?:not\s+)?(?:div|even|odd)(?:\s+by)?\b/, + /\b(?:eq|neq?|gt|lt|gt?e|lt?e|not|mod|or|and)\b/ + ], + 'keyword': /\b(?:false|off|on|no|true|yes)\b/ + }; + + // Comments are inserted at top so that they can + // surround markup + Prism.languages.insertBefore('smarty', 'tag', { + 'smarty-comment': { + pattern: /\{\*[\s\S]*?\*\}/, + alias: ['smarty','comment'] + } + }); + + // Tokenize all inline Smarty expressions + Prism.hooks.add('before-tokenize', function(env) { + var smartyPattern = /\{\*[\s\S]*?\*\}|\{[\s\S]+?\}/g; + var smartyLitteralStart = '{literal}'; + var smartyLitteralEnd = '{/literal}'; + var smartyLitteralMode = false; + + Prism.languages['markup-templating'].buildPlaceholders(env, 'smarty', smartyPattern, function (match) { + // Smarty tags inside {literal} block are ignored + if(match === smartyLitteralEnd) { + smartyLitteralMode = false; + } + + if(!smartyLitteralMode) { + if(match === smartyLitteralStart) { + smartyLitteralMode = true; + } + + return true; + } + return false; + }); + }); + + // Re-insert the tokens after tokenizing + Prism.hooks.add('after-tokenize', function(env) { + Prism.languages['markup-templating'].tokenizePlaceholders(env, 'smarty'); + }); + +}(Prism));
\ No newline at end of file |
