12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package b
-
- import (
- . "github.com/alecthomas/chroma" // nolint
- "github.com/alecthomas/chroma/lexers/internal"
- )
-
- // Bibtex lexer.
- var Bibtex = internal.Register(MustNewLexer(
- &Config{
- Name: "BibTeX",
- Aliases: []string{"bib", "bibtex"},
- Filenames: []string{"*.bib"},
- MimeTypes: []string{"text/x-bibtex"},
- NotMultiline: true,
- CaseInsensitive: true,
- },
- Rules{
- "root": {
- Include("whitespace"),
- {`@comment`, Comment, nil},
- {`@preamble`, NameClass, Push("closing-brace", "value", "opening-brace")},
- {`@string`, NameClass, Push("closing-brace", "field", "opening-brace")},
- {"@[a-z_@!$&*+\\-./:;<>?\\[\\\\\\]^`|~][\\w@!$&*+\\-./:;<>?\\[\\\\\\]^`|~]*", NameClass, Push("closing-brace", "command-body", "opening-brace")},
- {`.+`, Comment, nil},
- },
- "opening-brace": {
- Include("whitespace"),
- {`[{(]`, Punctuation, Pop(1)},
- },
- "closing-brace": {
- Include("whitespace"),
- {`[})]`, Punctuation, Pop(1)},
- },
- "command-body": {
- Include("whitespace"),
- {`[^\s\,\}]+`, NameLabel, Push("#pop", "fields")},
- },
- "fields": {
- Include("whitespace"),
- {`,`, Punctuation, Push("field")},
- Default(Pop(1)),
- },
- "field": {
- Include("whitespace"),
- {"[a-z_@!$&*+\\-./:;<>?\\[\\\\\\]^`|~][\\w@!$&*+\\-./:;<>?\\[\\\\\\]^`|~]*", NameAttribute, Push("value", "=")},
- Default(Pop(1)),
- },
- "=": {
- Include("whitespace"),
- {`=`, Punctuation, Pop(1)},
- },
- "value": {
- Include("whitespace"),
- {"[a-z_@!$&*+\\-./:;<>?\\[\\\\\\]^`|~][\\w@!$&*+\\-./:;<>?\\[\\\\\\]^`|~]*", NameVariable, nil},
- {`"`, LiteralString, Push("quoted-string")},
- {`\{`, LiteralString, Push("braced-string")},
- {`[\d]+`, LiteralNumber, nil},
- {`#`, Punctuation, nil},
- Default(Pop(1)),
- },
- "quoted-string": {
- {`\{`, LiteralString, Push("braced-string")},
- {`"`, LiteralString, Pop(1)},
- {`[^\{\"]+`, LiteralString, nil},
- },
- "braced-string": {
- {`\{`, LiteralString, Push()},
- {`\}`, LiteralString, Pop(1)},
- {`[^\{\}]+`, LiteralString, nil},
- },
- "whitespace": {
- {`\s+`, Text, nil},
- },
- },
- ))
|