{"name":"Protocol Buffer Text Format","scopeName":"source.textproto","patterns":[{"include":"#comments"},{"include":"#string-single"},{"include":"#string-double"},{"include":"#key"},{"include":"#optional-key"},{"include":"#field"}],"repository":{"array":{"name":"meta.structure.array.textproto","begin":"\\[","end":"\\]","patterns":[{"include":"#comments"},{"include":"#value"},{"name":"punctuation.separator.array.textproto","match":","},{"name":"invalid.illegal.expected-array-separator.textproto","match":"[^\\s\\]]"}],"beginCaptures":{"0":{"name":"punctuation.definition.array.begin.textproto"}},"endCaptures":{"0":{"name":"punctuation.definition.array.end.textproto"}}},"comments":{"begin":"(^\\s+)?(?=#)","end":"(?!\\G)","patterns":[{"name":"comment.line.number-sign.textproto","begin":"#","end":"$","beginCaptures":{"0":{"name":"punctuation.definition.comment.textproto"}}}],"beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.textproto"}},"endCaptures":{"1":{"name":"punctuation.whitespace.comment.trailing.textproto"}}},"constant":{"patterns":[{"name":"constant.language.textproto","match":"\\b(?:true|false|null|Infinity|NaN)\\b"},{"name":"variable.other.readonly.textproto","match":"\\b[A-Z]+[A-Z0-9]*(?:_[A-Z0-9]+)*\\b"}]},"field":{"name":"support.type.property-name.textproto","begin":"\\[?[a-zA-Z0-9_\\.-]+\\]?(:)","end":"\\n","patterns":[{"include":"#value"}],"beginCaptures":{"0":{"name":"variable.textproto meta.structure.dictionary.value.textproto"},"1":{"name":"punctuation.separator.dictionary.key-value.textproto"}}},"heredoc":{"name":"string.unquoted.heredoc.no-indent.textproto","begin":"(\u003c\u003c)\\s*([_a-zA-Z]+)\\s*$","end":"^\\s*(\\2)\\s*$","beginCaptures":{"1":{"name":"keyword.operator.heredoc.textproto"},"2":{"name":"keyword.control.heredoc-token.textproto"}},"endCaptures":{"1":{"name":"keyword.control.heredoc-token.textproto"}}},"infinity":{"name":"constant.language.textproto","match":"(-)*\\b(?:Infinity|NaN)\\b"},"key":{"name":"support.type.property-name.textproto","begin":"[a-zA-Z0-9_\\.-]+(\\s+)","end":"\\n","patterns":[{"include":"#value"}],"beginCaptures":{"0":{"name":"entity.name.textproto meta.structure.dictionary.value.textproto"},"1":{"name":"punctuation.separator.dictionary.key-value.textproto"}}},"number":{"patterns":[{"name":"constant.numeric.hex.textproto","match":"(0x)[0-9a-fA-f]*"},{"name":"constant.numeric.textproto","match":"[+-.]?(?=[1-9]|0(?!\\d))\\d+(\\.\\d+)?([eE][+-]?\\d+)?"}]},"object":{"name":"meta.structure.dictionary.textproto","begin":"\\{","end":"\\}","patterns":[{"include":"#comments"},{"include":"#string-single"},{"include":"#string-double"},{"include":"#key"},{"include":"#optional-key"},{"include":"#field"}],"beginCaptures":{"0":{"name":"punctuation.definition.dictionary.begin.textproto"}},"endCaptures":{"0":{"name":"punctuation.definition.dictionary.end.textproto"}}},"optional-key":{"name":"support.type.property-name.textproto","begin":"\\[[a-zA-Z0-9_\\.-]+\\](\\s+)","end":"\\n","patterns":[{"include":"#value"}],"beginCaptures":{"0":{"name":"entity.name.textproto meta.structure.dictionary.value.textproto"},"1":{"name":"punctuation.separator.dictionary.key-value.textproto"}}},"string-double":{"name":"string.quoted.double.textproto","begin":"\"","end":"\"","patterns":[{"name":"constant.character.escape.textproto","match":"(?x:\\\\(?:[\"\\\\/bfnrt]|u[0-9a-fA-F]{4}))"},{"name":"invalid.illegal.unrecognized-string-escape.textproto","match":"\\\\."}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.textproto"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.textproto"}}},"string-single":{"name":"string.quoted.single.textproto","begin":"'","end":"'","patterns":[{"name":"constant.character.escape.textproto","match":"(?x:\\\\(?:[\\'\\\\/bfnrt]|u[0-9a-fA-F]{4}))"},{"name":"invalid.illegal.unrecognized-string-escape.textproto","match":"\\\\."}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.textproto"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.textproto"}}},"value":{"patterns":[{"include":"#constant"},{"include":"#infinity"},{"include":"#number"},{"include":"#string-double"},{"include":"#string-single"},{"include":"#heredoc"},{"include":"#array"},{"include":"#object"}]}}}
