| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- /* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Ajax.org B.V. nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
- /* This file was autogenerated from tm bundles\SoyTemplate\Syntaxes\SoyTemplate.tmLanguage (uuid: ) */
- /****************************************************************************************
- * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *
- * fileTypes *
- ****************************************************************************************/
- define(function(require, exports, module) {
- "use strict";
- var oop = require("../lib/oop");
- var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
- var SoyTemplateHighlightRules = function() {
- HtmlHighlightRules.call(this);
- // regexp must not have capturing parentheses. Use (?:) instead.
- // regexps are ordered -> the first match is used
- var soyRules = { start:
- [ { include: '#template' },
- { include: '#if' },
- { include: '#comment-line' },
- { include: '#comment-block' },
- { include: '#comment-doc' },
- { include: '#call' },
- { include: '#css' },
- { include: '#param' },
- { include: '#print' },
- { include: '#msg' },
- { include: '#for' },
- { include: '#foreach' },
- { include: '#switch' },
- { include: '#tag' },
- { include: 'text.html.basic' } ],
- '#call':
- [ { token:
- [ 'punctuation.definition.tag.begin.soy',
- 'meta.tag.call.soy' ],
- regex: '(\\{/?)(\\s*)(?=call|delcall)',
- push:
- [ { token: 'punctuation.definition.tag.end.soy',
- regex: '\\}',
- next: 'pop' },
- { include: '#string-quoted-single' },
- { include: '#string-quoted-double' },
- { token: ['entity.name.tag.soy', 'variable.parameter.soy'],
- regex: '(call|delcall)(\\s+[\\.\\w]+)'},
- { token:
- [ 'entity.other.attribute-name.soy',
- 'text',
- 'keyword.operator.soy' ],
- regex: '\\b(data)(\\s*)(=)' },
- { defaultToken: 'meta.tag.call.soy' } ] } ],
- '#comment-line':
- [ { token:
- [ 'comment.line.double-slash.soy',
- 'punctuation.definition.comment.soy',
- 'comment.line.double-slash.soy' ],
- regex: '(\\s+)(//)(.*$)' } ],
- '#comment-block':
- [ { token: 'punctuation.definition.comment.begin.soy',
- regex: '/\\*(?!\\*)',
- push:
- [ { token: 'punctuation.definition.comment.end.soy',
- regex: '\\*/',
- next: 'pop' },
- { defaultToken: 'comment.block.soy' } ] } ],
- '#comment-doc':
- [ { token: 'punctuation.definition.comment.begin.soy',
- regex: '/\\*\\*(?!/)',
- push:
- [ { token: 'punctuation.definition.comment.end.soy',
- regex: '\\*/',
- next: 'pop' },
- { token: [ 'support.type.soy', 'text', 'variable.parameter.soy' ],
- regex: '(@param|@param\\?)(\\s+)(\\w+)' },
- { defaultToken: 'comment.block.documentation.soy' } ] } ],
- '#css':
- [ { token:
- [ 'punctuation.definition.tag.begin.soy',
- 'meta.tag.css.soy',
- 'entity.name.tag.soy' ],
- regex: '(\\{/?)(\\s*)(css)\\b',
- push:
- [ { token: 'punctuation.definition.tag.end.soy',
- regex: '\\}',
- next: 'pop' },
- { token: 'support.constant.soy',
- regex: '\\b(?:LITERAL|REFERENCE|BACKEND_SPECIFIC|GOOG)\\b' },
- { defaultToken: 'meta.tag.css.soy' } ] } ],
- '#for':
- [ { token:
- [ 'punctuation.definition.tag.begin.soy',
- 'meta.tag.for.soy',
- 'entity.name.tag.soy' ],
- regex: '(\\{/?)(\\s*)(for)\\b',
- push:
- [ { token: 'punctuation.definition.tag.end.soy',
- regex: '\\}',
- next: 'pop' },
- { token: 'keyword.operator.soy', regex: '\\bin\\b' },
- { token: 'support.function.soy', regex: '\\brange\\b' },
- { include: '#variable' },
- { include: '#number' },
- { include: '#primitive' },
- { defaultToken: 'meta.tag.for.soy' } ] } ],
- '#foreach':
- [ { token:
- [ 'punctuation.definition.tag.begin.soy',
- 'meta.tag.foreach.soy',
- 'entity.name.tag.soy' ],
- regex: '(\\{/?)(\\s*)(foreach)\\b',
- push:
- [ { token: 'punctuation.definition.tag.end.soy',
- regex: '\\}',
- next: 'pop' },
- { token: 'keyword.operator.soy', regex: '\\bin\\b' },
- { include: '#variable' },
- { defaultToken: 'meta.tag.foreach.soy' } ] } ],
- '#function':
- [ { token: 'support.function.soy',
- regex: '\\b(?:isFirst|isLast|index|hasData|length|keys|round|floor|ceiling|min|max|randomInt)\\b' } ],
- '#if':
- [ { token:
- [ 'punctuation.definition.tag.begin.soy',
- 'meta.tag.if.soy',
- 'entity.name.tag.soy' ],
- regex: '(\\{/?)(\\s*)(if|elseif)\\b',
- push:
- [ { token: 'punctuation.definition.tag.end.soy',
- regex: '\\}',
- next: 'pop' },
- { include: '#variable' },
- { include: '#operator' },
- { include: '#function' },
- { include: '#string-quoted-single' },
- { include: '#string-quoted-double' },
- { defaultToken: 'meta.tag.if.soy' } ] } ],
- '#namespace':
- [ { token: [ 'entity.name.tag.soy', 'text', 'variable.parameter.soy' ],
- regex: '(namespace|delpackage)(\\s+)([\\w\\.]+)' } ],
- '#number': [ { token: 'constant.numeric', regex: '[\\d]+' } ],
- '#operator':
- [ { token: 'keyword.operator.soy',
- regex: '==|!=|\\band\\b|\\bor\\b|\\bnot\\b|-|\\+|/|\\?:' } ],
- '#param':
- [ { token:
- [ 'punctuation.definition.tag.begin.soy',
- 'meta.tag.param.soy',
- 'entity.name.tag.soy' ],
- regex: '(\\{/?)(\\s*)(param)',
- push:
- [ { token: 'punctuation.definition.tag.end.soy',
- regex: '\\}',
- next: 'pop' },
- { include: '#variable' },
- { token:
- [ 'entity.other.attribute-name.soy',
- 'text',
- 'keyword.operator.soy' ],
- regex: '\\b([\\w]*)(\\s*)((?::)?)' },
- { defaultToken: 'meta.tag.param.soy' } ] } ],
- '#primitive':
- [ { token: 'constant.language.soy',
- regex: '\\b(?:null|false|true)\\b' } ],
- '#msg':
- [ { token:
- [ 'punctuation.definition.tag.begin.soy',
- 'meta.tag.msg.soy',
- 'entity.name.tag.soy' ],
- regex: '(\\{/?)(\\s*)(msg)\\b',
- push:
- [ { token: 'punctuation.definition.tag.end.soy',
- regex: '\\}',
- next: 'pop' },
- { include: '#string-quoted-single' },
- { include: '#string-quoted-double' },
- { token:
- [ 'entity.other.attribute-name.soy',
- 'text',
- 'keyword.operator.soy' ],
- regex: '\\b(meaning|desc)(\\s*)(=)' },
- { defaultToken: 'meta.tag.msg.soy' } ] } ],
- '#print':
- [ { token:
- [ 'punctuation.definition.tag.begin.soy',
- 'meta.tag.print.soy',
- 'entity.name.tag.soy' ],
- regex: '(\\{/?)(\\s*)(print)\\b',
- push:
- [ { token: 'punctuation.definition.tag.end.soy',
- regex: '\\}',
- next: 'pop' },
- { include: '#variable' },
- { include: '#print-parameter' },
- { include: '#number' },
- { include: '#primitive' },
- { include: '#attribute-lookup' },
- { defaultToken: 'meta.tag.print.soy' } ] } ],
- '#print-parameter':
- [ { token: 'keyword.operator.soy', regex: '\\|' },
- { token: 'variable.parameter.soy',
- regex: 'noAutoescape|id|escapeHtml|escapeJs|insertWorkBreaks|truncate' } ],
- '#special-character':
- [ { token: 'support.constant.soy',
- regex: '\\bsp\\b|\\bnil\\b|\\\\r|\\\\n|\\\\t|\\blb\\b|\\brb\\b' } ],
- '#string-quoted-double': [ { token: 'string.quoted.double', regex: '"[^"]*"' } ],
- '#string-quoted-single': [ { token: 'string.quoted.single', regex: '\'[^\']*\'' } ],
- '#switch':
- [ { token:
- [ 'punctuation.definition.tag.begin.soy',
- 'meta.tag.switch.soy',
- 'entity.name.tag.soy' ],
- regex: '(\\{/?)(\\s*)(switch|case)\\b',
- push:
- [ { token: 'punctuation.definition.tag.end.soy',
- regex: '\\}',
- next: 'pop' },
- { include: '#variable' },
- { include: '#function' },
- { include: '#number' },
- { include: '#string-quoted-single' },
- { include: '#string-quoted-double' },
- { defaultToken: 'meta.tag.switch.soy' } ] } ],
- '#attribute-lookup':
- [ { token: 'punctuation.definition.attribute-lookup.begin.soy',
- regex: '\\[',
- push:
- [ { token: 'punctuation.definition.attribute-lookup.end.soy',
- regex: '\\]',
- next: 'pop' },
- { include: '#variable' },
- { include: '#function' },
- { include: '#operator' },
- { include: '#number' },
- { include: '#primitive' },
- { include: '#string-quoted-single' },
- { include: '#string-quoted-double' } ] } ],
- '#tag':
- [ { token: 'punctuation.definition.tag.begin.soy',
- regex: '\\{',
- push:
- [ { token: 'punctuation.definition.tag.end.soy',
- regex: '\\}',
- next: 'pop' },
- { include: '#namespace' },
- { include: '#variable' },
- { include: '#special-character' },
- { include: '#tag-simple' },
- { include: '#function' },
- { include: '#operator' },
- { include: '#attribute-lookup' },
- { include: '#number' },
- { include: '#primitive' },
- { include: '#print-parameter' } ] } ],
- '#tag-simple':
- [ { token: 'entity.name.tag.soy',
- regex: '{{\\s*(?:literal|else|ifempty|default)\\s*(?=\\})'} ],
- '#template':
- [ { token:
- [ 'punctuation.definition.tag.begin.soy',
- 'meta.tag.template.soy' ],
- regex: '(\\{/?)(\\s*)(?=template|deltemplate)',
- push:
- [ { token: 'punctuation.definition.tag.end.soy',
- regex: '\\}',
- next: 'pop' },
- { token: ['entity.name.tag.soy', 'text', 'entity.name.function.soy' ],
- regex: '(template|deltemplate)(\\s+)([\\.\\w]+)',
- originalRegex: '(?<=template|deltemplate)\\s+([\\.\\w]+)' },
- { token:
- [ 'entity.other.attribute-name.soy',
- 'text',
- 'keyword.operator.soy',
- 'text',
- 'string.quoted.double.soy' ],
- regex: '\\b(private)(\\s*)(=)(\\s*)("true"|"false")' },
- { token:
- [ 'entity.other.attribute-name.soy',
- 'text',
- 'keyword.operator.soy',
- 'text',
- 'string.quoted.single.soy' ],
- regex: '\\b(private)(\\s*)(=)(\\s*)(\'true\'|\'false\')' },
- { token:
- [ 'entity.other.attribute-name.soy',
- 'text',
- 'keyword.operator.soy',
- 'text',
- 'string.quoted.double.soy' ],
- regex: '\\b(autoescape)(\\s*)(=)(\\s*)("true"|"false"|"contextual")' },
- { token:
- [ 'entity.other.attribute-name.soy',
- 'text',
- 'keyword.operator.soy',
- 'text',
- 'string.quoted.single.soy' ],
- regex: '\\b(autoescape)(\\s*)(=)(\\s*)(\'true\'|\'false\'|\'contextual\')' },
- { defaultToken: 'meta.tag.template.soy' } ] } ],
- '#variable': [ { token: 'variable.other.soy', regex: '\\$[\\w\\.]+' } ] }
-
-
- for (var i in soyRules) {
- if (this.$rules[i]) {
- this.$rules[i].unshift.call(this.$rules[i], soyRules[i]);
- } else {
- this.$rules[i] = soyRules[i];
- }
- }
-
- this.normalizeRules();
- };
- SoyTemplateHighlightRules.metaData = { comment: 'SoyTemplate',
- fileTypes: [ 'soy' ],
- firstLineMatch: '\\{\\s*namespace\\b',
- foldingStartMarker: '\\{\\s*template\\s+[^\\}]*\\}',
- foldingStopMarker: '\\{\\s*/\\s*template\\s*\\}',
- name: 'SoyTemplate',
- scopeName: 'source.soy' }
- oop.inherits(SoyTemplateHighlightRules, HtmlHighlightRules);
- exports.SoyTemplateHighlightRules = SoyTemplateHighlightRules;
- });
|