neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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'