leex.vim (2701B)
1 " Vim syntax file 2 " Language: Leex (Erlang Lexical Analyzer Generator) 3 " Maintainer: Jon Parise <jon@indelible.org> 4 " Last Change: 2025 Nov 30 5 " Filenames: *.xrl 6 " 7 " References: 8 " - https://www.erlang.org/doc/apps/parsetools/leex.html 9 10 if exists('b:current_syntax') 11 finish 12 endif 13 14 syn include @leexErlang syntax/erlang.vim 15 unlet! b:current_syntax 16 17 syn match leexComment "%.*$" contains=@Spell display 18 19 syn match leexRegexOperator "[|*+?]" contained display 20 syn match leexRegexDelimiter "[()[\]]" contained display 21 syn match leexRegexSpecial "[.^$\\]" contained display 22 syn match leexRegexEscape '\\\%([bfnrtevsd]\|\o\{1,3}\|x\x\{2}\|x{\x\+}\|.\)' contained display 23 syn match leexRegexRange "\[[^\]]*\]" contains=leexRegexDelimiter,leexRegexEscape contained display 24 25 " Macro definitions: NAME = VALUE 26 syn match leexMacroName "^\s*\zs\h\w*\ze\s\+=\s\+" contained nextgroup=leexMacroEquals skipwhite display 27 syn match leexMacroEquals "=" contained nextgroup=leexMacroValue skipwhite display 28 syn match leexMacroValue "\S\+" contained contains=leexRegexOperator,leexRegexDelimiter,leexRegexSpecial,leexRegexEscape,leexRegexRange,leexMacroRef display 29 syn match leexMacroRef "{\h\w*}" contained display 30 31 " Rule definitions: <Regexp> : <Erlang code>. 32 syn match leexRuleRegex "^\s*\zs[^%].\{-}\ze\s\+:" contained contains=leexRegexOperator,leexRegexDelimiter,leexRegexSpecial,leexRegexEscape,leexRegexRange,leexMacroRef nextgroup=leexRuleColon skipwhite display 33 syn match leexRuleColon ":" contained nextgroup=leexRuleCode skipwhite skipnl display 34 syn region leexRuleCode start="" end="\.\s*\%(%.*\)\?$" skip="^\s*%.*$" contained contains=@leexErlang keepend skipnl skipwhite 35 36 " Sections 37 syn match leexHeading "^\%(Definitions\|Rules\|Erlang code\)\.$" contained display 38 syn region leexDefinitions start="^Definitions\.$" end="^[A-Z][A-Za-z ]*\.$"me=s-1 end="\%$" keepend fold 39 \ contains=leexHeading,leexComment,leexMacroName 40 syn region leexRules start="^Rules\.$" end="^[A-Z][A-Za-z ]*\.$"me=s-1 end="\%$" keepend fold 41 \ contains=leexHeading,leexComment,leexRuleRegex 42 syn region leexErlangCode start="^Erlang code\.$" end="^[A-Z][A-Za-z ]*\.$"me=s-1 end="\%$" keepend fold 43 \ contains=leexHeading,@leexErlang 44 45 hi def link leexComment Comment 46 hi def link leexHeading PreProc 47 48 hi def link leexRegexOperator Operator 49 hi def link leexRegexDelimiter Delimiter 50 hi def link leexRegexSpecial Special 51 hi def link leexRegexRange String 52 hi def link leexRegexEscape SpecialChar 53 54 hi def link leexMacroName Identifier 55 hi def link leexMacroEquals Operator 56 hi def link leexMacroValue String 57 hi def link leexMacroRef Macro 58 59 hi def link leexRuleColon Operator 60 61 syn sync fromstart 62 63 let b:current_syntax = 'leex'