diff options
| author | Matěj Cepl <mcepl@cepl.eu> | 2023-08-11 01:27:32 +0200 |
|---|---|---|
| committer | Randy Palamar <randy@rnpnr.xyz> | 2024-03-27 06:04:21 -0600 |
| commit | 4c4392d29df777ff702dfe99b4f3c23142976e05 (patch) | |
| tree | 5355324abe18952f7d19d6cfc5dbeb5d6cb72b84 /lua/lexers/bibtex.lua | |
| parent | 95bf9f59f8a9a37148bdc0787db378d62c7cd032 (diff) | |
| download | vis-4c4392d29df777ff702dfe99b4f3c23142976e05.tar.gz vis-4c4392d29df777ff702dfe99b4f3c23142976e05.tar.xz | |
update lexers to orbitalquark/scintillua@b789dde
Rather than cherry pick patches from after 6.2 we will just grab
everything as is.
Diffstat (limited to 'lua/lexers/bibtex.lua')
| -rw-r--r-- | lua/lexers/bibtex.lua | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/lua/lexers/bibtex.lua b/lua/lexers/bibtex.lua index 06795e6..d9cf0d4 100644 --- a/lua/lexers/bibtex.lua +++ b/lua/lexers/bibtex.lua @@ -1,46 +1,48 @@ --- Copyright 2006-2022 Mitchell. See LICENSE. +-- Copyright 2006-2024 Mitchell. See LICENSE. -- Bibtex LPeg lexer. -local lexer = require('lexer') -local token, word_match = lexer.token, lexer.word_match +local lexer = lexer local P, S = lpeg.P, lpeg.S -local lex = lexer.new('bibtex') - --- Whitespace. -local ws = token(lexer.WHITESPACE, lexer.space^1) +local lex = lexer.new(...) -- Fields. -lex:add_rule('field', token('field', word_match{ - 'author', 'title', 'journal', 'year', 'volume', 'number', 'pages', 'month', 'note', 'key', - 'publisher', 'editor', 'series', 'address', 'edition', 'howpublished', 'booktitle', - 'organization', 'chapter', 'school', 'institution', 'type', 'isbn', 'issn', 'affiliation', - 'issue', 'keyword', 'url' -})) -lex:add_style('field', lexer.styles.constant) +lex:add_rule('field', lex:tag(lexer.VARIABLE_BUILTIN, lex:word_match(lexer.VARIABLE_BUILTIN, true))) -- Identifiers. -lex:add_rule('identifier', token(lexer.IDENTIFIER, lexer.word)) +lex:add_rule('identifier', lex:tag(lexer.IDENTIFIER, lexer.word)) -- Strings. local dq_str = lexer.range('"') local br_str = lexer.range('{', '}', false, false, true) -lex:add_rule('string', token(lexer.STRING, dq_str + br_str)) +lex:add_rule('string', lex:tag(lexer.STRING, dq_str + br_str)) -- Operators. -lex:add_rule('operator', token(lexer.OPERATOR, S(',='))) +lex:add_rule('operator', lex:tag(lexer.OPERATOR, S(',='))) -- Embedded in Latex. local latex = lexer.load('latex') -- Embedded Bibtex. -local entry = token('entry', '@' * word_match({ +local entry = lex:tag(lexer.PREPROCESSOR, '@' * lex:word_match('entry', true)) +local bibtex_start_rule = entry * lex:get_rule('whitespace')^0 * lex:tag(lexer.OPERATOR, '{') +local bibtex_end_rule = lex:tag(lexer.OPERATOR, '}') +latex:embed(lex, bibtex_start_rule, bibtex_end_rule) + +-- Word lists. +lex:set_word_list(lexer.VARIABLE_BUILTIN, { + 'author', 'title', 'journal', 'year', 'volume', 'number', 'pages', 'month', 'note', 'key', + 'publisher', 'editor', 'series', 'address', 'edition', 'howpublished', 'booktitle', + 'organization', 'chapter', 'school', 'institution', 'type', 'isbn', 'issn', 'affiliation', + 'issue', 'keyword', 'url' +}) + +lex:set_word_list('entry', { + 'string', -- 'book', 'article', 'booklet', 'conference', 'inbook', 'incollection', 'inproceedings', 'manual', 'mastersthesis', 'lambda', 'misc', 'phdthesis', 'proceedings', 'techreport', 'unpublished' -}, true)) -lex:add_style('entry', lexer.styles.preprocessor) -local bibtex_start_rule = entry * ws^0 * token(lexer.OPERATOR, '{') -local bibtex_end_rule = token(lexer.OPERATOR, '}') -latex:embed(lex, bibtex_start_rule, bibtex_end_rule) +}) + +lexer.property['scintillua.comment'] = '%' return lex |
