diff options
author | mitchell <unknown> | 2018-03-11 23:04:41 -0400 |
---|---|---|
committer | mitchell <unknown> | 2018-03-11 23:04:41 -0400 |
commit | 519b7328b66c4c84f03893a31e4be5ba6b1395f2 (patch) | |
tree | 2055cd79006357e94c185f341d0df17b9a8769eb /lexlua/latex.lua | |
parent | c0373e036e965a70045971e2abc582cb4bf12a4e (diff) | |
download | scintilla-mirror-519b7328b66c4c84f03893a31e4be5ba6b1395f2.tar.gz |
Added optional Lua lexer support.
This support is disabled by default and must be enabled via compile-time option.
Diffstat (limited to 'lexlua/latex.lua')
-rw-r--r-- | lexlua/latex.lua | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/lexlua/latex.lua b/lexlua/latex.lua new file mode 100644 index 000000000..a1a0f6eb4 --- /dev/null +++ b/lexlua/latex.lua @@ -0,0 +1,58 @@ +-- Copyright 2006-2018 Mitchell mitchell.att.foicica.com. See License.txt. +-- Latex LPeg lexer. +-- Modified by Brian Schott. +-- Modified by Robert Gieseke. + +local lexer = require('lexer') +local token, word_match = lexer.token, lexer.word_match +local P, R, S = lpeg.P, lpeg.R, lpeg.S + +local lex = lexer.new('latex') + +-- Whitespace. +lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1)) + +-- Comments. +local line_comment = '%' * lexer.nonnewline^0 +local block_comment = '\\begin' * P(' ')^0 * '{comment}' * + (lexer.any - '\\end' * P(' ')^0 * '{comment}')^0 * + P('\\end' * P(' ')^0 * '{comment}')^-1 +lex:add_rule('comment', token(lexer.COMMENT, line_comment + block_comment)) + +-- Math environments. +local math_word = word_match[[ + align displaymath eqnarray equation gather math multline +]] +local math_begin_end = (P('begin') + P('end')) * P(' ')^0 * + '{' * math_word * P('*')^-1 * '}' +lex:add_rule('math', token('math', '$' + '\\' * (S('[]()') + math_begin_end))) +lex:add_style('math', lexer.STYLE_FUNCTION) + +-- LaTeX environments. +lex:add_rule('environment', token('environment', '\\' * + (P('begin') + P('end')) * + P(' ')^0 * '{' * lexer.word * + P('*')^-1 * '}')) +lex:add_style('environment', lexer.STYLE_KEYWORD) + +-- Sections. +lex:add_rule('section', token('section', '\\' * word_match[[ + part chapter section subsection subsubsection paragraph subparagraph +]] * P('*')^-1)) +lex:add_style('section', lexer.STYLE_CLASS) + +-- Commands. +lex:add_rule('command', token('command', '\\' * + (lexer.alpha^1 + S('#$&~_^%{}')))) +lex:add_style('command', lexer.STYLE_KEYWORD) + +-- Operators. +lex:add_rule('operator', token(lexer.OPERATOR, S('&#{}[]'))) + +-- Fold points. +lex:add_fold_point(lexer.COMMENT, '\\begin', '\\end') +lex:add_fold_point(lexer.COMMENT, '%', lexer.fold_line_comments('%')) +lex:add_fold_point('environment', '\\begin', '\\end') +lex:add_fold_point(lexer.OPERATOR, '{', '}') + +return lex |