neovim

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

rexx.vim (15331B)


      1 " Vim syntax file
      2 " Language:	Rexx
      3 " Maintainer:	Thomas Geulig <geulig@nentec.de>
      4 " Last Change:  2012 Sep 14, added support for new ooRexx 4.0 features
      5 " URL:		http://www.geulig.de/vim/rexx.vim
      6 " Special Thanks to Dan Sharp <dwsharp@hotmail.com> and Rony G. Flatscher
      7 " <Rony.Flatscher@wu-wien.ac.at> for comments and additions
      8 
      9 " quit when a syntax file was already loaded
     10 if exists("b:current_syntax")
     11  finish
     12 endif
     13 
     14 syn case ignore
     15 
     16 " add to valid identifier chars
     17 setlocal iskeyword+=.
     18 setlocal iskeyword+=!
     19 setlocal iskeyword+=?
     20 
     21 " ---rgf, position important: must be before comments etc. !
     22 syn match rexxOperator "[=|\/\\\+\*\[\],;:<>&\~%\-]"
     23 
     24 " rgf syn match rexxIdentifier        "\<[a-zA-Z\!\?_]\([a-zA-Z0-9._?!]\)*\>"
     25 syn match rexxIdentifier        "\<\K\k*\>"
     26 syn match rexxEnvironmentSymbol "\<\.\k\+\>"
     27 
     28 " A Keyword is the first symbol in a clause.  A clause begins at the start
     29 " of a line or after a semicolon.  THEN, ELSE, OTHERWISE, and colons are always
     30 " followed by an implied semicolon.
     31 syn match rexxClause "\(^\|;\|:\|then \|else \|when \|otherwise \)\s*\S*" contains=ALLBUT,rexxParse2,rexxRaise2,rexxForward2
     32 
     33 " Considered keywords when used together in a phrase and begin a clause
     34 syn match rexxParse "\<parse\s*\(\(upper\|lower\|caseless\)\s*\)\?\(arg\|linein\|pull\|source\|var\|\<value\>\|version\)\>" containedin=rexxClause contains=rexxParse2
     35 syn match rexxParse2 "\<with\>" containedin=rexxParse
     36 
     37 syn match rexxKeyword contained "\<numeric \(digits\|form \(scientific\|engineering\|value\)\|fuzz\)\>"
     38 syn match rexxKeyword contained "\<\(address\|trace\)\( value\)\?\>"
     39 syn match rexxKeyword contained "\<procedure\(\s*expose\)\?\>"
     40 
     41 syn match rexxKeyword contained "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\(\s\+forever\)\?\>"
     42 syn match rexxKeyword contained "\<use\>\s*\(strict\s*\)\?\<arg\>"
     43 
     44 " Another keyword phrase, separated to aid highlighting in rexxFunction
     45 syn match rexxRegularCallSignal contained "\<\(call\|signal\)\s\(\s*on\>\|\s*off\>\)\@!\(\k\+\ze\|\ze(\)\(\s*\|;\|$\|(\)"
     46 syn region rexxLabel contained start="\<\(call\|signal\)\>\s*\zs\(\k*\|(\)" end="\ze\(\s*\|;\|$\|(\)" containedin=rexxRegularCallSignal
     47 
     48 syn match rexxExceptionHandling contained "\<\(call\|signal\)\>\s\+\<\(on\|off\)\>.*\(;\|$\)" contains=rexxComment
     49 
     50 " hilite label given after keyword "name"
     51 syn match rexxLabel "name\s\+\zs\k\+\ze" containedin=rexxExceptionHandling
     52 " hilite condition name (serves as label)
     53 syn match rexxLabel "\<\(call\|signal\)\>\s\+\<\(on\|off\)\>\s*\zs\k\+\ze\s*\(;\|$\)" containedin=rexxExceptionHandling
     54 " user exception handling, hilite user defined name
     55 syn region rexxLabel contained start="user\s\+\zs\k" end="\ze\(\s\|;\|$\)" containedin=rexxExceptionHandling
     56 
     57 " Considered keywords when they begin a clause
     58 syn match rexxKeywordStatements "\<\(arg\|catch\|do\|drop\|end\|exit\|expose\|finally\|forward\|if\|interpret\|iterate\|leave\|loop\|nop\)\>"
     59 syn match rexxKeywordStatements "\<\(options\|pull\|push\|queue\|raise\|reply\|return\|say\|select\|trace\)\>"
     60 
     61 " Conditional keywords starting a new statement
     62 syn match rexxConditional "\<\(then\|else\|when\|otherwise\)\(\s*\|;\|\_$\|\)\>" contains=rexxKeywordStatements
     63 
     64 " Conditional phrases
     65 syn match rexxLoopKeywords "\<\(to\|by\|for\|until\|while\|over\)\>" containedin=doLoopSelectLabelRegion
     66 
     67 " must be after Conditional phrases!
     68 syn match doLoopSelectLabelRegion "\<\(do\|loop\|select\)\>\s\+\(label\s\+\)\?\(\s\+\k\+\s\+\zs\<over\>\)\?\k*\(\s\+forever\)\?\(\s\|;\|$\)" contains=doLoopSelectLabelRegion,rexxStartValueAssignment,rexxLoopKeywords
     69 
     70 " color label's name
     71 syn match rexxLabel2 "\<\(do\|loop\|select\)\>\s\+label\s\+\zs\k*\ze" containedin=doLoopSelectLabelRegion
     72 
     73 " make sure control variable is normal
     74 " TODO: re-activate ?
     75 "rgf syn match rexxControlVariable        "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\s\+\<over\>" containedin=doLoopSelectLabelRegion
     76 
     77 " make sure control variable assignment is normal
     78 syn match rexxStartValueAssignment       "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\(=.*\)\?\s\+\<to\>" containedin=doLoopSelectLabelRegion
     79 
     80 " highlight label name
     81 syn match endIterateLeaveLabelRegion "\<\(end\|leave\|iterate\)\>\(\s\+\K\k*\)" contains=rexxLabel2
     82 syn match rexxLabel2 "\<\(end\|leave\|iterate\)\>\s\+\zs\k*\ze" containedin=endIterateLeaveLabelRegion
     83 
     84 " Guard statement
     85 syn match rexxGuard "\(^\|;\|:\)\s*\<guard\>\s\+\<\(on\|off\)\>"
     86 
     87 " Trace statement
     88 syn match rexxTrace "\(^\|;\|:\)\s*\<trace\>\s\+\<\K\k*\>"
     89 
     90 " Raise statement
     91 " syn match rexxRaise "\(^\|;\|:\)\s\+\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
     92 syn match rexxRaise "\(^\|;\|:\)\s*\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
     93 syn match rexxRaise2 "\<\(additional\|array\|description\|exit\|propagate\|return\)\>" containedin=rexxRaise
     94 
     95 " Forward statement
     96 syn match rexxForward  "\(^\|;\|:\)\<forward\>\s*" contains=rexxForward2
     97 syn match rexxForward2 "\<\(arguments\|array\|continue\|message\|class\|to\)\>" contained
     98 
     99 " Functions/Procedures
    100 syn match rexxFunction 	"\<\<[a-zA-Z\!\?_]\k*\>("me=e-1
    101 syn match rexxFunction "[()]"
    102 
    103 " String constants
    104 syn region rexxString	start=+"+ skip=+""+ end=+"\(x\|b\)\?+ oneline
    105 syn region rexxString	start=+'+ skip=+''+ end=+'\(x\|b\)\?+ oneline
    106 
    107 syn region rexxParen transparent start='(' end=')' contains=ALLBUT,rexxParenError,rexxTodo,rexxLabel,rexxKeyword
    108 " Catch errors caused by wrong parenthesis
    109 syn match rexxParenError	 ")"
    110 syn match rexxInParen		"[\\[\\]{}]"
    111 
    112 " Comments
    113 syn region	rexxComment	start="/\*"	end="\*/" contains=rexxTodo,rexxComment
    114 syn match	rexxCommentError "\*/"
    115 syn region	rexxLineComment	start="--"	end="\_$" oneline
    116 
    117 " Highlight User Labels
    118 " check for labels between comments, labels stated in a statement in the middle of a line
    119 syn match rexxLabel		 "\(\_^\|;\)\s*\(\/\*.*\*\/\)*\s*\k\+\s*\(\/\*.*\*\/\)*\s*:"me=e-1 contains=rexxTodo,rexxComment
    120 
    121 syn keyword rexxTodo contained	TODO FIXME XXX
    122 
    123 " ooRexx messages
    124 syn region rexxMessageOperator start="\(\~\|\~\~\)" end="\(\S\|\s\)"me=e-1
    125 syn match rexxMessage "\(\~\|\~\~\)\s*\<\.*[a-zA-Z]\([a-zA-Z0-9._?!]\)*\>" contains=rexxMessageOperator
    126 
    127 " line continuations, take care of (line-)comments after it
    128 syn match rexxLineContinue ",\ze\s*\(--.*\|\/\*.*\)*$"
    129 
    130 " the following is necessary, otherwise three consecutive dashes will cause it to highlight the first one
    131 syn match rexxLineContinue "-\ze-\@!\s*\(--.*\|\s*\/\*.*\)\?$"
    132 
    133 " Special Variables
    134 syn keyword rexxSpecialVariable  sigl rc result self super
    135 syn keyword rexxSpecialVariable  .environment .error .input .local .methods .output .rs .stderr .stdin .stdout .stdque
    136 
    137 " Constants
    138 syn keyword rexxConst .true .false .nil .endOfLine .line .context
    139 
    140 " Rexx numbers
    141 " int like number
    142 syn match rexxNumber '\d\+' contained
    143 syn match rexxNumber '[-+]\s*\d\+' contained
    144 
    145 " Floating point number with decimal
    146 syn match rexxNumber '\d\+\.\d*' contained
    147 syn match rexxNumber '[-+]\s*\d\+\.\d*' contained
    148 
    149 " Floating point like number with E
    150 syn match rexxNumber '[-+]\s*\d*[eE][\-+]\d\+' contained
    151 syn match rexxNumber '\d*[eE][\-+]\d\+' contained
    152 
    153 " Floating point like number with E and decimal point (+,-)
    154 syn match rexxNumber '[-+]\s*\d*\.\d*[eE][\-+]\d\+' contained
    155 syn match rexxNumber '\d*\.\d*[eE][\-+]\d\+' contained
    156 
    157 
    158 " ooRexx builtin classes (as of version 3.2.0, fall 2007), first define dot to be o.k. in keywords
    159 syn keyword rexxBuiltinClass .Alarm .ArgUtil .Array .Bag .CaselessColumnComparator
    160 syn keyword rexxBuiltinClass .CaselessComparator .CaselessDescendingComparator .CircularQueue
    161 syn keyword rexxBuiltinClass .Class .Collection .ColumnComparator .Comparable .Comparator
    162 syn keyword rexxBuiltinClass .DateTime .DescendingComparator .Directory .File .InputOutputStream
    163 syn keyword rexxBuiltinClass .InputStream .InvertingComparator .List .MapCollection
    164 syn keyword rexxBuiltinClass .Message .Method .Monitor .MutableBuffer .Object
    165 syn keyword rexxBuiltinClass .OrderedCollection .OutputStream .Package .Properties .Queue
    166 syn keyword rexxBuiltinClass .RegularExpression .Relation .RexxContext .RexxQueue .Routine
    167 syn keyword rexxBuiltinClass .Set .SetCollection .Stem .Stream
    168 syn keyword rexxBuiltinClass .StreamSupplier .String .Supplier .Table .TimeSpan
    169 
    170 " Windows-only classes
    171 syn keyword rexxBuiltinClass .AdvancedControls .AnimatedButton .BaseDialog .ButtonControl
    172 syn keyword rexxBuiltinClass .CategoryDialog .CheckBox .CheckList .ComboBox .DialogControl
    173 syn keyword rexxBuiltinClass .DialogExtensions .DlgArea .DlgAreaU .DynamicDialog
    174 syn keyword rexxBuiltinClass .EditControl .InputBox .IntegerBox .ListBox .ListChoice
    175 syn keyword rexxBuiltinClass .ListControl .MenuObject .MessageExtensions .MultiInputBox
    176 syn keyword rexxBuiltinClass .MultiListChoice .OLEObject .OLEVariant
    177 syn keyword rexxBuiltinClass .PasswordBox .PlainBaseDialog .PlainUserDialog
    178 syn keyword rexxBuiltinClass .ProgressBar .ProgressIndicator .PropertySheet .RadioButton
    179 syn keyword rexxBuiltinClass .RcDialog .ResDialog .ScrollBar .SingleSelection .SliderControl
    180 syn keyword rexxBuiltinClass .StateIndicator .StaticControl .TabControl .TimedMessage
    181 syn keyword rexxBuiltinClass .TreeControl .UserDialog .VirtualKeyCodes .WindowBase
    182 syn keyword rexxBuiltinClass .WindowExtensions .WindowObject .WindowsClassesBase .WindowsClipboard
    183 syn keyword rexxBuiltinClass .WindowsEventLog .WindowsManager .WindowsProgramManager .WindowsRegistry
    184 
    185 " BSF4ooRexx classes
    186 syn keyword rexxBuiltinClass .BSF .bsf.dialog .bsf_proxy
    187 syn keyword rexxBuiltinClass .UNO .UNO_ENUM .UNO_CONSTANTS .UNO_PROPERTIES
    188 
    189 " ooRexx directives, ---rgf location important, otherwise directives in top of file not matched!
    190 syn region rexxClassDirective     start="::\s*class\s*"ms=e+1    end="\ze\(\s\|;\|$\)"
    191 syn region rexxMethodDirective    start="::\s*method\s*"ms=e+1   end="\ze\(\s\|;\|$\)"
    192 syn region rexxRequiresDirective  start="::\s*requires\s*"ms=e+1 end="\ze\(\s\|;\|$\)"
    193 syn region rexxRoutineDirective   start="::\s*routine\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
    194 syn region rexxAttributeDirective start="::\s*attribute\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
    195 " rgf, 2012-09-09
    196 syn region rexxOptionsDirective   start="::\s*options\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
    197 syn region rexxConstantDirective  start="::\s*constant\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
    198 
    199 syn region rexxDirective start="\(^\|;\)\s*::\s*\w\+"  end="\($\|;\)" contains=rexxString,rexxNumber,rexxComment,rexxLineComment,rexxClassDirective,rexxMethodDirective,rexxRoutineDirective,rexxRequiresDirective,rexxAttributeDirective,rexxOptionsDirective,rexxConstantDirective keepend
    200 
    201 syn match rexxOptionsDirective2 "\<\(digits\|form\|fuzz\|trace\)\>" containedin = rexxOptionsDirective3
    202 syn region rexxOptionsDirective3 start="\(^\|;\)\s*::\s*options\s"ms=e+1  end="\($\|;\)" contains=rexxString,rexxNumber,rexxVariable,rexxComment,rexxLineComment containedin = rexxDirective
    203 
    204 
    205 syn region rexxVariable start="\zs\<\(\.\)\@!\K\k\+\>\ze\s*\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)" end="\(\_$\|.\)"me=e-1
    206 syn match rexxVariable "\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)\s*\zs\K\k*\ze"
    207 
    208 " rgf, 2007-07-22: unfortunately, the entire region is colored (not only the
    209 " patterns), hence useless (vim 7.0)! (syntax-docs hint that that should work)
    210 " attempt: just colorize the parenthesis in matching colors, keep content
    211 "          transparent to keep the formatting already done to it!
    212 " TODO: test on 7.3
    213 " syn region par1 matchgroup=par1 start="(" matchgroup=par1 end=")" transparent contains=par2
    214 " syn region par2 matchgroup=par2 start="(" matchgroup=par2 end=")" transparent contains=par3 contained
    215 " syn region par3 matchgroup=par3 start="(" matchgroup=par3 end=")" transparent contains=par4 contained
    216 " syn region par4 matchgroup=par4 start="(" matchgroup=par4 end=")" transparent contains=par5 contained
    217 " syn region par5 matchgroup=par5 start="(" matchgroup=par5 end=")" transparent contains=par1 contained
    218 
    219 " this will colorize the entire region, removing any colorizing already done!
    220 " syn region par1 matchgroup=par1 start="(" end=")" contains=par2
    221 " syn region par2 matchgroup=par2 start="(" end=")" contains=par3 contained
    222 " syn region par3 matchgroup=par3 start="(" end=")" contains=par4 contained
    223 " syn region par4 matchgroup=par4 start="(" end=")" contains=par5 contained
    224 " syn region par5 matchgroup=par5 start="(" end=")" contains=par1 contained
    225 
    226 hi par1 ctermfg=red 		guifg=red          "guibg=grey
    227 hi par2 ctermfg=blue 		guifg=blue         "guibg=grey
    228 hi par3 ctermfg=darkgreen 	guifg=darkgreen    "guibg=grey
    229 hi par4 ctermfg=darkyellow	guifg=darkyellow   "guibg=grey
    230 hi par5 ctermfg=darkgrey 	guifg=darkgrey     "guibg=grey
    231 
    232 " line continuation (trailing comma or single dash)
    233 syn sync linecont "\(,\|-\ze-\@!\)\ze\s*\(--.*\|\/\*.*\)*$"
    234 
    235 " if !exists("rexx_minlines")
    236 "   let rexx_minlines = 500
    237 " endif
    238 " exec "syn sync ccomment rexxComment minlines=" . rexx_minlines
    239 
    240 " always scan from start, PCs have long become to be powerful enough for that
    241 exec "syn sync fromstart"
    242 
    243 " Define the default highlighting.
    244 " Only when an item doesn't have highlighting yet
    245 
    246 " make binary and hex strings stand out
    247 hi rexxStringConstant term=bold,underline ctermfg=5 cterm=bold guifg=darkMagenta gui=bold
    248 
    249 hi def link rexxLabel2		Function
    250 hi def link doLoopSelectLabelRegion	rexxKeyword
    251 hi def link endIterateLeaveLabelRegion	rexxKeyword
    252 hi def link rexxLoopKeywords	rexxKeyword " Todo
    253 
    254 hi def link rexxNumber		Normal "DiffChange
    255 "  hi def link rexxIdentifier		DiffChange
    256 
    257 hi def link rexxRegularCallSignal	Statement
    258 hi def link rexxExceptionHandling	Statement
    259 
    260 hi def link rexxLabel		Function
    261 hi def link rexxCharacter		Character
    262 hi def link rexxParenError		rexxError
    263 hi def link rexxInParen		rexxError
    264 hi def link rexxCommentError	rexxError
    265 hi def link rexxError		Error
    266 hi def link rexxKeyword		Statement
    267 hi def link rexxKeywordStatements	Statement
    268 
    269 hi def link rexxFunction		Function
    270 hi def link rexxString		String
    271 hi def link rexxComment		Comment
    272 hi def link rexxTodo		Todo
    273 hi def link rexxSpecialVariable	Special
    274 hi def link rexxConditional	rexxKeyword
    275 
    276 hi def link rexxOperator		Operator
    277 hi def link rexxMessageOperator	rexxOperator
    278 hi def link rexxLineComment	Comment
    279 
    280 hi def link rexxLineContinue	WildMenu
    281 
    282 hi def link rexxDirective		rexxKeyword
    283 hi def link rexxClassDirective	Type
    284 hi def link rexxMethodDirective	rexxFunction
    285 hi def link rexxAttributeDirective	rexxFunction
    286 hi def link rexxRequiresDirective	Include
    287 hi def link rexxRoutineDirective	rexxFunction
    288 
    289 " rgf, 2012-09-09
    290 hi def link rexxOptionsDirective	rexxFunction
    291 hi def link rexxOptionsDirective2  rexxOptionsDirective
    292 hi def link rexxOptionsDirective3  Normal " rexxOptionsDirective
    293 
    294 hi def link rexxConstantDirective	rexxFunction
    295 
    296 hi def link rexxConst		Constant
    297 hi def link rexxTypeSpecifier	Type
    298 hi def link rexxBuiltinClass	rexxTypeSpecifier
    299 
    300 hi def link rexxEnvironmentSymbol  rexxConst
    301 hi def link rexxMessage		rexxFunction
    302 
    303 hi def link rexxParse              rexxKeyword
    304 hi def link rexxParse2             rexxParse
    305 
    306 hi def link rexxGuard              rexxKeyword
    307 hi def link rexxTrace              rexxKeyword
    308 
    309 hi def link rexxRaise              rexxKeyword
    310 hi def link rexxRaise2             rexxRaise
    311 
    312 hi def link rexxForward            rexxKeyword
    313 hi def link rexxForward2           rexxForward
    314 
    315 
    316 let b:current_syntax = "rexx"
    317 
    318 "vim: ts=8