1
0
mirror of https://github.com/alecthomas/chroma.git synced 2025-01-22 03:10:16 +02:00
chroma/lexers/json.go
Alec Thomas a10fd0a23d Switch to github.com/dlclark/regexp2.
This makes translating Pygments lexers much much simpler (and possible).
2017-09-18 11:16:44 +10:00

55 lines
1.2 KiB
Go

package lexers
import (
. "github.com/alecthomas/chroma" // nolint
)
// Json lexer.
var Json = Register(MustNewLexer(
&Config{
Name: "JSON",
Aliases: []string{"json"},
Filenames: []string{"*.json"},
MimeTypes: []string{"application/json"},
NotMultiline: true,
DotAll: true,
},
Rules{
"whitespace": {
{`\s+`, Text, 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"),
{`"(\\\\|\\"|[^"])*"`, NameTag, Push("objectattribute")},
{`\}`, Punctuation, Pop(1)},
},
"arrayvalue": {
Include("whitespace"),
Include("value"),
{`,`, Punctuation, nil},
{`\]`, Punctuation, Pop(1)},
},
"value": {
Include("whitespace"),
Include("simplevalue"),
{`\{`, Punctuation, Push("objectvalue")},
{`\[`, Punctuation, Push("arrayvalue")},
},
"root": {
Include("value"),
},
},
))