blob: 4fbc916be26ef4d8082e5b4c90b901e63d31dc8e [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2"
Bram Moolenaare37d50a2008-08-06 17:06:04 +00003" Language: NATURAL
Bram Moolenaar5dc62522012-02-13 00:05:22 +01004" Version: 2.1.0.5
Bram Moolenaare37d50a2008-08-06 17:06:04 +00005" Maintainer: Marko von Oppen <marko@von-oppen.com>
Bram Moolenaar5dc62522012-02-13 00:05:22 +01006" Last Changed: 2012-02-05 18:50:43
Bram Moolenaare37d50a2008-08-06 17:06:04 +00007" Support: http://www.von-oppen.com/
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
9" For version 5.x: Clear all syntax items
10" For version 6.x: Quit when this syntax file was already loaded
11if v:version < 600
Bram Moolenaare37d50a2008-08-06 17:06:04 +000012 syntax clear
13 set iskeyword+=-,*,#,+,_,/
Bram Moolenaar071d4272004-06-13 20:20:40 +000014elseif exists("b:current_syntax")
Bram Moolenaare37d50a2008-08-06 17:06:04 +000015 finish
Bram Moolenaar071d4272004-06-13 20:20:40 +000016else
Bram Moolenaare37d50a2008-08-06 17:06:04 +000017 setlocal iskeyword+=-,*,#,+,_,/
Bram Moolenaar071d4272004-06-13 20:20:40 +000018endif
19
Bram Moolenaar5dc62522012-02-13 00:05:22 +010020let s:cpo_save = &cpo
21set cpo&vim
22
Bram Moolenaar071d4272004-06-13 20:20:40 +000023" NATURAL is case insensitive
24syntax case ignore
25
26" preprocessor
Bram Moolenaare37d50a2008-08-06 17:06:04 +000027syn keyword naturalInclude include nextgroup=naturalObjName skipwhite
Bram Moolenaar071d4272004-06-13 20:20:40 +000028
29" define data
Bram Moolenaare37d50a2008-08-06 17:06:04 +000030syn keyword naturalKeyword define data end-define
31syn keyword naturalKeyword independent global parameter local redefine view
32syn keyword naturalKeyword const[ant] init initial
Bram Moolenaar071d4272004-06-13 20:20:40 +000033
34" loops
Bram Moolenaare37d50a2008-08-06 17:06:04 +000035syn keyword naturalLoop read end-read end-work find end-find histogram end-histogram
36syn keyword naturalLoop end-all sort end-sort sorted descending ascending
37syn keyword naturalRepeat repeat end-repeat while until for step end-for
38syn keyword naturalKeyword in file with field starting from ending at thru by isn where
39syn keyword naturalError on error end-error
40syn keyword naturalKeyword accept reject end-enddata number unique retain as release
41syn keyword naturalKeyword start end-start break end-break physical page top sequence
42syn keyword naturalKeyword end-toppage end-endpage end-endfile before processing
43syn keyword naturalKeyword end-before
Bram Moolenaar071d4272004-06-13 20:20:40 +000044
45" conditionals
46syn keyword naturalConditional if then else end-if end-norec
47syn keyword naturalConditional decide end-decide value when condition none any
48
49" assignment / calculation
Bram Moolenaare37d50a2008-08-06 17:06:04 +000050syn keyword naturalKeyword reset assign move left right justified compress to into edited
51syn keyword naturalKeyword add subtract multiply divide compute name
52syn keyword naturalKeyword all giving remainder rounded leaving space numeric
53syn keyword naturalKeyword examine full replace giving separate delimiter modified
54syn keyword naturalKeyword suspend identical suppress
Bram Moolenaar071d4272004-06-13 20:20:40 +000055
56" program flow
Bram Moolenaare37d50a2008-08-06 17:06:04 +000057syn keyword naturalFlow callnat fetch return enter escape bottom top stack formatted
58syn keyword naturalFlow command call
59syn keyword naturalflow end-subroutine routine
Bram Moolenaar071d4272004-06-13 20:20:40 +000060
61" file operations
Bram Moolenaare37d50a2008-08-06 17:06:04 +000062syn keyword naturalKeyword update store get delete end transaction work once close
Bram Moolenaar071d4272004-06-13 20:20:40 +000063
64" other keywords
Bram Moolenaare37d50a2008-08-06 17:06:04 +000065syn keyword naturalKeyword first every of no record[s] found ignore immediate
66syn keyword naturalKeyword set settime key control stop terminate
Bram Moolenaar071d4272004-06-13 20:20:40 +000067
68" in-/output
Bram Moolenaare37d50a2008-08-06 17:06:04 +000069syn keyword naturalKeyword write display input reinput notitle nohdr map newpage
70syn keyword naturalKeyword alarm text help eject index window base size
71syn keyword naturalKeyword format printer skip lines
Bram Moolenaar071d4272004-06-13 20:20:40 +000072
73" functions
Bram Moolenaare37d50a2008-08-06 17:06:04 +000074syn keyword naturalKeyword abs atn cos exp frac int log sgn sin sqrt tan val old
75syn keyword naturalKeyword pos
Bram Moolenaar071d4272004-06-13 20:20:40 +000076
77" report mode keywords
78syn keyword naturalRMKeyword same loop obtain indexed do doend
79
80" Subroutine name
Bram Moolenaare37d50a2008-08-06 17:06:04 +000081syn keyword naturalFlow perform subroutine nextgroup=naturalFunction skipwhite
82syn match naturalFunction "\<[a-z][-_a-z0-9]*\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000083
Bram Moolenaare37d50a2008-08-06 17:06:04 +000084syn keyword naturalFlow using nextgroup=naturalKeyword,naturalObjName skipwhite
85syn match naturalObjName "\<[a-z][-_a-z0-9]\{,7}\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000086
87" Labels
Bram Moolenaare37d50a2008-08-06 17:06:04 +000088syn match naturalLabel "\<[+#a-z][-_#a-z0-9]*\."
89syn match naturalRef "\<[+#a-z][-_#a-z0-9]*\>\.\<[+#a-z][*]\=[-_#a-z0-9]*\>"
90
91" mark keyword special handling
92syn keyword naturalKeyword mark nextgroup=naturalMark skipwhite
93syn match naturalMark "\<\*[a-z][-_#.a-z0-9]*\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000094
95" System variables
Bram Moolenaare37d50a2008-08-06 17:06:04 +000096syn match naturalSysVar "\<\*[a-z][-a-z0-9]*\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000097
98"integer number, or floating point number without a dot.
Bram Moolenaare37d50a2008-08-06 17:06:04 +000099syn match naturalNumber "\<-\=\d\+\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100"floating point number, with dot
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000101syn match naturalNumber "\<-\=\d\+\.\d\+\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102"floating point number, starting with a dot
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000103syn match naturalNumber "\.\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000104
105" Formats in write statement
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000106syn match naturalFormat "\<\d\+[TX]\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000107
108" String and Character contstants
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000109syn match naturalString "H'\x\+'"
110syn region naturalString start=+"+ end=+"+
111syn region naturalString start=+'+ end=+'+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112
113" Type definition
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000114syn match naturalAttribute "\<[-a-z][a-z]=[-a-z0-9_\.,]\+\>"
115syn match naturalType contained "\<[ABINP]\d\+\(,\d\+\)\=\>"
116syn match naturalType contained "\<[CL]\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000117
118" "TODO" / other comments
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000119syn keyword naturalTodo contained todo test
120syn match naturalCommentMark contained "[a-z][^ \t/:|]*\(\s[^ \t/:'"|]\+\)*:\s"he=e-1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121
122" comments
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000123syn region naturalComment start="/\*" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
124syn region naturalComment start="^\*[ *]" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
125syn region naturalComment start="^\d\{4} \*[\ \*]"lc=5 end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
126syn match naturalComment "^\*$"
127syn match naturalComment "^\d\{4} \*$"lc=5
Bram Moolenaar071d4272004-06-13 20:20:40 +0000128" /* is legal syntax in parentheses e.g. "#ident(label./*)"
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000129syn region naturalPComment contained start="/\*\s*[^),]" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
Bram Moolenaar071d4272004-06-13 20:20:40 +0000130
131" operators
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000132syn keyword naturalOperator and or not eq ne gt lt ge le mask scan modified
Bram Moolenaar071d4272004-06-13 20:20:40 +0000133
134" constants
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000135syn keyword naturalBoolean true false
136syn match naturalLineNo "^\d\{4}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137
138" identifiers
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000139syn match naturalIdent "\<[+#a-z][-_#a-z0-9]*\>[^\.']"me=e-1
140syn match naturalIdent "\<[+#a-z][-_#a-z0-9]*$"
141syn match naturalLegalIdent "[+#a-z][-_#a-z0-9]*/[-_#a-z0-9]*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142
143" parentheses
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000144syn region naturalPar matchgroup=naturalParGui start="(" end=")" contains=naturalLabel,naturalRef,naturalOperator,@naturalConstant,naturalType,naturalSysVar,naturalPar,naturalLineNo,naturalPComment
145syn match naturalLineRef "(\d\{4})"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146
147" build syntax groups
148syntax cluster naturalConstant contains=naturalString,naturalNumber,naturalAttribute,naturalBoolean
149
150" folding
151if v:version >= 600
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000152 set foldignore=*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153endif
154
155
156if v:version >= 508 || !exists("did_natural_syntax_inits")
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000157 if v:version < 508
158 let did_natural_syntax_inits = 1
159 command -nargs=+ HiLink hi link <args>
160 else
161 command -nargs=+ HiLink hi def link <args>
162 endif
163 " The default methods for highlighting. Can be overridden later
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000165 " Constants
166 HiLink naturalFormat Constant
167 HiLink naturalAttribute Constant
168 HiLink naturalNumber Number
169 HiLink naturalString String
170 HiLink naturalBoolean Boolean
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000172 " All kinds of keywords
173 HiLink naturalConditional Conditional
174 HiLink naturalRepeat Repeat
175 HiLink naturalLoop Repeat
176 HiLink naturalFlow Keyword
177 HiLink naturalError Keyword
178 HiLink naturalKeyword Keyword
179 HiLink naturalOperator Operator
180 HiLink naturalParGui Operator
Bram Moolenaar071d4272004-06-13 20:20:40 +0000181
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000182 " Labels
183 HiLink naturalLabel Label
184 HiLink naturalRefLabel Label
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000186 " Comments
187 HiLink naturalPComment Comment
188 HiLink naturalComment Comment
189 HiLink naturalTodo Todo
190 HiLink naturalCommentMark PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000192 HiLink naturalInclude Include
193 HiLink naturalSysVar Identifier
194 HiLink naturalLineNo LineNr
195 HiLink naturalLineRef Error
196 HiLink naturalSpecial Special
197 HiLink naturalComKey Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000198
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000199 " illegal things
200 HiLink naturalRMKeyword Error
201 HiLink naturalLegalIdent Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000202
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000203 HiLink naturalType Type
204 HiLink naturalFunction Function
205 HiLink naturalObjName PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000207 delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000208endif
209
210let b:current_syntax = "natural"
211
Bram Moolenaar5dc62522012-02-13 00:05:22 +0100212let &cpo = s:cpo_save
213unlet s:cpo_save
214
215" vim:set ts=8 sw=8 noet ft=vim list: