summaryrefslogtreecommitdiff
path: root/mnv/runtime/syntax/leex.mnv
diff options
context:
space:
mode:
authorMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-04 12:41:27 +0300
committerMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-04 12:41:27 +0300
commit4f2d36194b4f299aa7509d815c07121039ea833b (patch)
treef3ded014bad3a4c76ff6a22b8726ebaab68c3d13 /mnv/runtime/syntax/leex.mnv
parent5b578e70c314723a3cde5c9bfc2be0bf1dadc93b (diff)
downloadProject-Tick-4f2d36194b4f299aa7509d815c07121039ea833b.tar.gz
Project-Tick-4f2d36194b4f299aa7509d815c07121039ea833b.zip
NOISSUE change uvim folder name to mnv
Signed-off-by: Mehmet Samet Duman <yongdohyun@projecttick.org>
Diffstat (limited to 'mnv/runtime/syntax/leex.mnv')
-rw-r--r--mnv/runtime/syntax/leex.mnv63
1 files changed, 63 insertions, 0 deletions
diff --git a/mnv/runtime/syntax/leex.mnv b/mnv/runtime/syntax/leex.mnv
new file mode 100644
index 0000000000..31098daee4
--- /dev/null
+++ b/mnv/runtime/syntax/leex.mnv
@@ -0,0 +1,63 @@
+" MNV syntax file
+" Language: Leex (Erlang Lexical Analyzer Generator)
+" Maintainer: Jon Parise <jon@indelible.org>
+" Last Change: 2025 Nov 30
+" Filenames: *.xrl
+"
+" References:
+" - https://www.erlang.org/doc/apps/parsetools/leex.html
+
+if exists('b:current_syntax')
+ finish
+endif
+
+syn include @leexErlang syntax/erlang.mnv
+unlet! b:current_syntax
+
+syn match leexComment "%.*$" contains=@Spell display
+
+syn match leexRegexOperator "[|*+?]" contained display
+syn match leexRegexDelimiter "[()[\]]" contained display
+syn match leexRegexSpecial "[.^$\\]" contained display
+syn match leexRegexEscape '\\\%([bfnrtevsd]\|\o\{1,3}\|x\x\{2}\|x{\x\+}\|.\)' contained display
+syn match leexRegexRange "\[[^\]]*\]" contains=leexRegexDelimiter,leexRegexEscape contained display
+
+" Macro definitions: NAME = VALUE
+syn match leexMacroName "^\s*\zs\h\w*\ze\s\+=\s\+" contained nextgroup=leexMacroEquals skipwhite display
+syn match leexMacroEquals "=" contained nextgroup=leexMacroValue skipwhite display
+syn match leexMacroValue "\S\+" contained contains=leexRegexOperator,leexRegexDelimiter,leexRegexSpecial,leexRegexEscape,leexRegexRange,leexMacroRef display
+syn match leexMacroRef "{\h\w*}" contained display
+
+" Rule definitions: <Regexp> : <Erlang code>.
+syn match leexRuleRegex "^\s*\zs[^%].\{-}\ze\s\+:" contained contains=leexRegexOperator,leexRegexDelimiter,leexRegexSpecial,leexRegexEscape,leexRegexRange,leexMacroRef nextgroup=leexRuleColon skipwhite display
+syn match leexRuleColon ":" contained nextgroup=leexRuleCode skipwhite skipnl display
+syn region leexRuleCode start="" end="\.\s*\%(%.*\)\?$" skip="^\s*%.*$" contained contains=@leexErlang keepend skipnl skipwhite
+
+" Sections
+syn match leexHeading "^\%(Definitions\|Rules\|Erlang code\)\.$" contained display
+syn region leexDefinitions start="^Definitions\.$" end="^[A-Z][A-Za-z ]*\.$"me=s-1 end="\%$" keepend fold
+ \ contains=leexHeading,leexComment,leexMacroName
+syn region leexRules start="^Rules\.$" end="^[A-Z][A-Za-z ]*\.$"me=s-1 end="\%$" keepend fold
+ \ contains=leexHeading,leexComment,leexRuleRegex
+syn region leexErlangCode start="^Erlang code\.$" end="^[A-Z][A-Za-z ]*\.$"me=s-1 end="\%$" keepend fold
+ \ contains=leexHeading,@leexErlang
+
+hi def link leexComment Comment
+hi def link leexHeading PreProc
+
+hi def link leexRegexOperator Operator
+hi def link leexRegexDelimiter Delimiter
+hi def link leexRegexSpecial Special
+hi def link leexRegexRange String
+hi def link leexRegexEscape SpecialChar
+
+hi def link leexMacroName Identifier
+hi def link leexMacroEquals Operator
+hi def link leexMacroValue String
+hi def link leexMacroRef Macro
+
+hi def link leexRuleColon Operator
+
+syn sync fromstart
+
+let b:current_syntax = 'leex'