{"name":"Fantom","scopeName":"source.fan","patterns":[{"include":"#main"}],"repository":{"comments":{"patterns":[{"include":"#line-comment"},{"include":"#fandoc-comment"},{"include":"#multiline-comment"}]},"double-quoted-string":{"patterns":[{"name":"string.quoted.double.fan","begin":"(\")","end":"(\")","patterns":[{"include":"#escaped-unicode"},{"include":"#escaped-char"},{"include":"#interpolation"}]}]},"escaped-char":{"patterns":[{"name":"constant.character.escape.char.fan","match":"(\\\\[bfnrt\"'`$\\\\])"},{"name":"invalid.illegal.escape.char.fan","match":"(\\\\.)"}]},"escaped-unicode":{"patterns":[{"name":"constant.character.escape.unicode.fan","match":"(\\\\u[0-9A-Fa-f]{4})"},{"name":"invalid.illegal.escape.unicode.fan","match":"(\\\\u[0-9A-Fa-f]{0,3})"}]},"fandoc-comment":{"patterns":[{"name":"comment.line.fandoc.fan","match":"(^\\s*\\*\\*.*$)"}]},"interpolation":{"patterns":[{"name":"variable.other.interpolated-expr.fan","match":"(\\$\\{.+?\\})"},{"name":"variable.other.interpolated-dotcall.fan","match":"(\\$([A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)*))"},{"name":"invalid.illegal.interpolation.fan","match":"(\\$\\{\\w*)"}]},"keywords":{"patterns":[{"name":"constant.language.fan","match":"(\\b(true|false|null)\\b)"},{"name":"storage.modifier.fan","match":"(\\b(abstract|const|enum|facet|final|internal|native|once|override|private|protected|public|readonly|static|virtual|volatile)\\b)"},{"name":"keyword.control.block.fan","match":"(\\b(return|break|continue)\\b)"},{"name":"keyword.control.exceptions.fan","match":"(\\b(try|catch|finally|throw|assert)\\b)"},{"name":"keyword.control.loop.fan","match":"(\\b(for|while|do|foreach)\\b)"},{"name":"keyword.control.flow.fan","match":"(\\b(if|else|switch|case|default)\\b)"},{"name":"keyword.other.fan","match":"(\\b(new|void)\\b)"},{"name":"storage.modifier.global.fan","match":"(\\b(using)\\b)"},{"name":"variable.language.self.fan","match":"(\\b(this|super|it)\\b)"},{"name":"support.type.sys.fan","match":"(\\b(Void|Bool|Int|Float|Decimal|Duration|Str|Uri|Type|Slot|Range|List|Map|This)\\b)"}]},"line-comment":{"patterns":[{"name":"comment.line.double-slash.fan","match":"((//).*$)"}]},"main":{"patterns":[{"include":"#comments"},{"include":"#strings"},{"include":"#uris"},{"include":"#numbers"},{"include":"#keywords"},{"include":"#operators"},{"include":"#typedef"}]},"multiline-comment":{"patterns":[{"name":"comment.block","begin":"(/\\*)","end":"(\\*/)"}]},"numbers":{"patterns":[{"name":"constant.numeric.hex.fan","match":"(\\b0x[0-9A-Fa-f][_0-9A-Fa-f]*)"},{"name":"invalid.illegal.hex.fan","match":"(0x)"},{"name":"constant.numeric.escape.unicode.fan","match":"(\\\\u[0-9A-Fa-f]{4})"},{"name":"invalid.illegal.escape.unicode.fan","match":"(\\\\(u[0-9A-Fa-f]{0,3})?)"},{"name":"constant.numeric.escape.char.fan","match":"(\\'\\\\[bfnrt\"'$\\\\]\\')"},{"name":"constant.numeric.char.fan","match":"(\\'[^\\\\]\\')"},{"name":"constant.other.duration.fan","match":"((\\B\\.[0-9][0-9_]*|\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?)([eE][-+]?[0-9][0-9_]*)?(ns|ms|sec|min|hr|day))"},{"name":"constant.numeric.number.fan","match":"((\\B\\.[0-9][0-9_]*|\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?)([eE][-+]?[0-9][0-9_]*)?[fdFD]?)"}]},"operators":{"patterns":[{"name":"keyword.operator.equality.fan","match":"(===?|!==?)"},{"name":"keyword.operator.relational.symbol.fan","match":"(\u003c(=|=\u003e)?|\u003e=?)"},{"name":"keyword.operator.assign.fan","match":"(:?=)"},{"name":"keyword.operator.math.fan","match":"([+*/%-]=?)"},{"name":"keyword.operator.logical.fan","match":"(!|\u0026\u0026|(\\?\\:)|(\\|\\|))"},{"name":"keyword.operator.relational.named.fan","match":"(\\b(is|isnot|as)\\b)"},{"name":"keyword.operator.call.fan","match":"(\\-\u003e|\\?\\-\u003e|\\?\\.)"},{"name":"keyword.operator.inc-dec.fan","match":"(\\+\\+|\\-\\-)"},{"name":"keyword.operator.range.fan","match":"(\\.\\.\u003c?)"},{"name":"keyword.operator.tertiary.fan","match":"(\\?|:)"},{"name":"punctuation.terminator.fan","match":"(;)"}]},"string-dsl":{"patterns":[{"name":"string.quoted.other.fan","begin":"((Str)\u003c\\|)","end":"(\\|\u003e)","captures":{"1":{"name":"support.type.sys.fan"}}}]},"strings":{"patterns":[{"include":"#triple-quoted-string"},{"include":"#double-quoted-string"},{"include":"#string-dsl"}]},"triple-quoted-string":{"patterns":[{"name":"string.quoted.triple.fan","begin":"\"\"\"","end":"\"\"\"","patterns":[{"name":"invalid.illegal.escape.char.fan","match":"\\\\\""},{"include":"#escaped-unicode"},{"include":"#escaped-char"},{"include":"#interpolation"}]}]},"typedef":{"patterns":[{"name":"storage.modifier.fan","match":"(class|mixin)(?=\\s+([A-Za-z_][A-Za-z0-9_]*))"}]},"uris":{"patterns":[{"name":"string.quoted.other.uri.fan","begin":"(`)","end":"(`)","patterns":[{"include":"#escaped-unicode"},{"include":"#escaped-char"},{"include":"#interpolation"}]}]}}}