diff options
Diffstat (limited to 'vendor/github.com/alecthomas/chroma/lexers/j/json.go')
-rw-r--r-- | vendor/github.com/alecthomas/chroma/lexers/j/json.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/vendor/github.com/alecthomas/chroma/lexers/j/json.go b/vendor/github.com/alecthomas/chroma/lexers/j/json.go new file mode 100644 index 000000000..daf6dc310 --- /dev/null +++ b/vendor/github.com/alecthomas/chroma/lexers/j/json.go @@ -0,0 +1,65 @@ +package j + +import ( + . "github.com/alecthomas/chroma" // nolint + "github.com/alecthomas/chroma/lexers/internal" +) + +// JSON lexer. +var JSON = internal.Register(MustNewLazyLexer( + &Config{ + Name: "JSON", + Aliases: []string{"json"}, + Filenames: []string{"*.json"}, + MimeTypes: []string{"application/json"}, + NotMultiline: true, + DotAll: true, + }, + jsonRules, +)) + +func jsonRules() Rules { + return Rules{ + "whitespace": { + {`\s+`, Text, nil}, + }, + "comment": { + {`//.*?\n`, CommentSingle, nil}, + }, + "simplevalue": { + {`(true|false|null)\b`, KeywordConstant, nil}, + {`-?(0|[1-9]\d*)(\.\d+[eE](\+|-)?\d+|[eE](\+|-)?\d+|\.\d+)`, LiteralNumberFloat, nil}, + {`-?(0|[1-9]\d*)`, LiteralNumberInteger, nil}, + {`"(\\\\|\\"|[^"])*"`, LiteralStringDouble, nil}, + }, + "objectattribute": { + Include("value"), + {`:`, Punctuation, nil}, + {`,`, Punctuation, Pop(1)}, + {`\}`, Punctuation, Pop(2)}, + }, + "objectvalue": { + Include("whitespace"), + Include("comment"), + {`"(\\\\|\\"|[^"])*"`, NameTag, Push("objectattribute")}, + {`\}`, Punctuation, Pop(1)}, + }, + "arrayvalue": { + Include("whitespace"), + Include("value"), + Include("comment"), + {`,`, Punctuation, nil}, + {`\]`, Punctuation, Pop(1)}, + }, + "value": { + Include("whitespace"), + Include("simplevalue"), + Include("comment"), + {`\{`, Punctuation, Push("objectvalue")}, + {`\[`, Punctuation, Push("arrayvalue")}, + }, + "root": { + Include("value"), + }, + } +} |