{"name":"Closure Templates","scopeName":"text.html.soy","patterns":[{"include":"#alias"},{"include":"#delpackage"},{"include":"#namespace"},{"include":"#template"},{"include":"#comment"}],"repository":{"alias":{"match":"{(alias)\\s+([\\w\\.]+)(?:\\s+(as)\\s+(\\w+))?}","captures":{"1":{"name":"storage.type.soy"},"2":{"name":"entity.name.type.soy"},"3":{"name":"storage.type.soy"},"4":{"name":"entity.name.type.soy"}}},"attribute":{"match":"(\\w+)=(\"(?:\\\\?.)*?\")","captures":{"1":{"name":"storage.other.attribute.soy"},"2":{"name":"string.double.quoted.soy"}}},"body":{"patterns":[{"include":"#comment"},{"include":"#let"},{"include":"#call"},{"include":"#css"},{"include":"#xid"},{"include":"#condition"},{"include":"#condition-control"},{"include":"#for"},{"include":"#literal"},{"include":"#msg"},{"include":"#special-character"},{"include":"#print"},{"include":"text.html.basic"}]},"boolean":{"name":"language.constant.boolean.soy","match":"true|false"},"call":{"patterns":[{"begin":"{((?:del)?call)\\s+([\\w\\.]+)(?=[^/]*?})","end":"{/(\\1)}","patterns":[{"include":"#comment"},{"include":"#variant"},{"include":"#attribute"},{"include":"#param"}],"beginCaptures":{"1":{"name":"storage.type.function.soy"},"2":{"name":"entity.name.function.soy"}},"endCaptures":{"1":{"name":"storage.type.function.soy"}}},{"begin":"{((?:del)?call)(\\s+[\\w\\.]+)","end":"/}","patterns":[{"include":"#variant"},{"include":"#attribute"}],"beginCaptures":{"1":{"name":"storage.type.function.soy"},"2":{"name":"entity.name.function.soy"}}}]},"comment":{"patterns":[{"name":"comment.block.documentation.soy","begin":"/\\*","end":"\\*/","patterns":[{"match":"(@param\\??)\\s+(\\S+)","captures":{"1":{"name":"keyword.parameter.soy"},"2":{"name":"variable.parameter.soy"}}}]},{"name":"comment.line.double-slash.soy","match":"^\\s*(\\/\\/.*)$"}]},"condition":{"begin":"{/?(if|elseif|switch|case)\\s*","end":"}","patterns":[{"include":"#attribute"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.soy"}}},"condition-control":{"match":"{(else|ifempty|default)}","captures":{"1":{"name":"keyword.control.soy"}}},"css":{"begin":"{(css)\\s+","end":"}","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.other.soy"}}},"delpackage":{"match":"{(delpackage)\\s+([\\w\\.]+)}","captures":{"1":{"name":"storage.type.soy"},"2":{"name":"entity.name.type.soy"}}},"expression":{"patterns":[{"include":"#boolean"},{"include":"#number"},{"include":"#function"},{"include":"#null"},{"include":"#string"},{"include":"#variable-ref"},{"include":"#operator"}]},"for":{"begin":"{/?(foreach|for)(?=\\s|})","end":"}","patterns":[{"name":"keyword.control.soy","match":"in"},{"include":"#expression"},{"include":"#body"}],"beginCaptures":{"1":{"name":"keyword.control.soy"}}},"function":{"begin":"(\\w+)\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"support.function.soy"}}},"let":{"patterns":[{"begin":"{(let)\\s+(\\$\\w+\\s*:)","end":"/}","patterns":[{"include":"#comment"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"storage.type.soy"},"2":{"name":"variable.soy"}}},{"begin":"{(let)\\s+(\\$\\w+)","end":"{/(\\1)}","patterns":[{"include":"#attribute"},{"include":"#body"}],"beginCaptures":{"1":{"name":"storage.type.soy"},"2":{"name":"variable.soy"}},"endCaptures":{"1":{"name":"storage.type.soy"}}}]},"literal":{"name":"meta.literal","begin":"{(literal)}","end":"{/(\\1)}","beginCaptures":{"1":{"name":"keyword.other.soy"}},"endCaptures":{"1":{"name":"keyword.other.soy"}}},"msg":{"match":"{/?(msg|fallbackmsg)","end":"}","patterns":[{"include":"#attribute"}],"captures":{"1":{"name":"keyword.other.soy"}}},"namespace":{"match":"{(namespace)\\s+([\\w\\.]+)}","captures":{"1":{"name":"storage.type.soy"},"2":{"name":"entity.name.type.soy"}}},"null":{"name":"language.constant.null.soy","match":"null"},"number":{"name":"language.constant.numeric","match":"-?\\.?\\d+|\\d[\\.\\d]*"},"operator":{"name":"keyword.operator.soy","match":"-|not|\\*|\\/|%|\\+|\u003c=|\u003e=|\u003c|\u003e|==|!=|and|or|\\?:|\\?|:"},"param":{"patterns":[{"begin":"{(param)\\s+(\\w+\\s*\\:)","end":"/}","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"storage.type.soy"},"2":{"name":"variable.parameter.soy"}}},{"begin":"{(param)\\s+(\\w+)","end":"{/(\\1)}","patterns":[{"include":"#attribute"},{"include":"#body"}],"beginCaptures":{"1":{"name":"storage.type.soy"},"2":{"name":"variable.parameter.soy"}},"endCaptures":{"1":{"name":"storage.type.soy"}}}]},"print":{"begin":"{(print)?\\s*","end":"}","patterns":[{"match":"\\|\\s*(changeNewlineToBr|truncate|bidiSpanWrap|bidiUnicodeWrap)","captures":{"1":{"name":"support.function.soy"}}},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.other.soy"}}},"special-character":{"match":"{(sp|nil|\\\\r|\\\\n|\\\\t|lb|rb)}","captures":{"1":{"name":"language.support.constant"}}},"string":{"name":"string.quoted.single.soy","begin":"'","end":"'","patterns":[{"name":"constant.character.escape.soy","match":"\\\\(?:[\\\\'\"nrtbf]|u[0-9a-fA-F]{4})"}]},"template":{"begin":"{(template|deltemplate)\\s([\\w\\.]+)","end":"{(/\\1)}","patterns":[{"name":"meta.parameter.soy","begin":"{(@param)(\\??)\\s+(\\S+\\s*:)","end":"}","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.parameter.soy"},"2":{"name":"storage.modifier.keyword.operator.soy"},"3":{"name":"variable.parameter.soy"}}},{"include":"#variant"},{"include":"#body"},{"include":"#attribute"}],"beginCaptures":{"1":{"name":"storage.type.soy"},"2":{"name":"entity.name.function.soy"}},"endCaptures":{"1":{"name":"storage.type.soy"}}},"type":{"patterns":[{"name":"support.type.soy","match":"any|null|\\?|string|bool|int|float|number|html|uri|js|css|attributes"},{"begin":"(list|map)(\u003c)","end":"(\u003e)","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"support.type.soy"},"2":{"name":"support.type.punctuation.soy"}},"endCaptures":{"1":{"name":"support.type.modifier.soy"}}}]},"variable-ref":{"name":"variable.other.soy","match":"\\$[\\a-zA-Z_][\\w\\.]*"},"variant":{"contentName":"string.double.quoted.soy","begin":"(variant)=(\")","end":"(\")","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"storage.other.attribute.soy"},"2":{"name":"string.double.quoted.soy"}},"endCaptures":{"1":{"name":"string.double.quoted.soy"}}},"xid":{"begin":"{(xid)\\s+","end":"}","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.other.soy"}}}},"injections":{"meta.tag":{"patterns":[{"include":"#body"}]}}}