syn keyword naturalKeyword alarm text help eject index window base size
syn keyword naturalKeyword format printer skip lines
" functions
syn keyword naturalKeyword abs atn cos exp frac int log sgn sin sqrt tan val old
syn keyword naturalKeyword pos
" report mode keywords
syn keyword naturalRMKeyword same loop obtain indexed do doend
" Subroutine name
syn keyword naturalFlow perform subroutine nextgroup=naturalFunction skipwhite
syn match naturalFunction "\<[a-z][-_a-z0-9]*\>"
syn keyword naturalFlow using nextgroup=naturalKeyword,naturalObjName skipwhite
syn match naturalObjName "\<[a-z][-_a-z0-9]\{,7}\>"
" Labels
syn match naturalLabel "\<[+#a-z][-_#a-z0-9]*\."
syn match naturalRef "\<[+#a-z][-_#a-z0-9]*\>\.\<[+#a-z][*]\=[-_#a-z0-9]*\>"
" mark keyword special handling
syn keyword naturalKeyword mark nextgroup=naturalMark skipwhite
syn match naturalMark "\<\*[a-z][-_#.a-z0-9]*\>"
" System variables
syn match naturalSysVar "\<\*[a-z][-a-z0-9]*\>"
"integer number, or floating point number without a dot.
syn match naturalNumber "\<-\=\d\+\>"
"floating point number, with dot
syn match naturalNumber "\<-\=\d\+\.\d\+\>"
"floating point number, starting with a dot
syn match naturalNumber "\.\d\+"
" Formats in write statement
syn match naturalFormat "\<\d\+[TX]\>"
" String and Character contstants
syn match naturalString "H'\x\+'"
syn region naturalString start=+"+ end=+"+
syn region naturalString start=+'+ end=+'+
" Type definition
syn match naturalAttribute "\<[-a-z][a-z]=[-a-z0-9_\.,]\+\>"
syn match naturalType contained "\<[ABINP]\d\+\(,\d\+\)\=\>"
syn match naturalType contained "\<[CL]\>"
" "TODO" / other comments
syn keyword naturalTodo contained todo test
syn match naturalCommentMark contained "[a-z][^ \t/:|]*\(\s[^ \t/:'"|]\+\)*:\s"he=e-1
" comments
syn region naturalComment start="/\*" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
syn region naturalComment start="^\*[ *]" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
syn region naturalComment start="^\d\{4} \*[\ \*]"lc=5 end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
syn match naturalComment "^\*$"
syn match naturalComment "^\d\{4} \*$"lc=5
" /* is legal syntax in parentheses e.g. "#ident(label./*)"
syn region naturalPComment contained start="/\*\s*[^),]" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
" operators
syn keyword naturalOperator and or not eq ne gt lt ge le mask scan modified
" constants
syn keyword naturalBoolean true false
syn match naturalLineNo "^\d\{4}"
" identifiers
syn match naturalIdent "\<[+#a-z][-_#a-z0-9]*\>[^\.']"me=e-1
syn match naturalIdent "\<[+#a-z][-_#a-z0-9]*$"
syn match naturalLegalIdent "[+#a-z][-_#a-z0-9]*/[-_#a-z0-9]*"
" parentheses
syn region naturalPar matchgroup=naturalParGui start="(" end=")" contains=naturalLabel,naturalRef,naturalOperator,@naturalConstant,naturalType,naturalSysVar,naturalPar,naturalLineNo,naturalPComment