blob: 2628151378a2407c7880ffbda9a22d4aa096f45b [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
4" Version: 2.1.0.3
5" Maintainer: Marko von Oppen <marko@von-oppen.com>
6" Last Changed: 2008-07-29 01:40:52
7" 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
20" NATURAL is case insensitive
21syntax case ignore
22
23" preprocessor
Bram Moolenaare37d50a2008-08-06 17:06:04 +000024syn keyword naturalInclude include nextgroup=naturalObjName skipwhite
Bram Moolenaar071d4272004-06-13 20:20:40 +000025
26" define data
Bram Moolenaare37d50a2008-08-06 17:06:04 +000027syn keyword naturalKeyword define data end-define
28syn keyword naturalKeyword independent global parameter local redefine view
29syn keyword naturalKeyword const[ant] init initial
Bram Moolenaar071d4272004-06-13 20:20:40 +000030
31" loops
Bram Moolenaare37d50a2008-08-06 17:06:04 +000032syn keyword naturalLoop read end-read end-work find end-find histogram end-histogram
33syn keyword naturalLoop end-all sort end-sort sorted descending ascending
34syn keyword naturalRepeat repeat end-repeat while until for step end-for
35syn keyword naturalKeyword in file with field starting from ending at thru by isn where
36syn keyword naturalError on error end-error
37syn keyword naturalKeyword accept reject end-enddata number unique retain as release
38syn keyword naturalKeyword start end-start break end-break physical page top sequence
39syn keyword naturalKeyword end-toppage end-endpage end-endfile before processing
40syn keyword naturalKeyword end-before
Bram Moolenaar071d4272004-06-13 20:20:40 +000041
42" conditionals
43syn keyword naturalConditional if then else end-if end-norec
44syn keyword naturalConditional decide end-decide value when condition none any
45
46" assignment / calculation
Bram Moolenaare37d50a2008-08-06 17:06:04 +000047syn keyword naturalKeyword reset assign move left right justified compress to into edited
48syn keyword naturalKeyword add subtract multiply divide compute name
49syn keyword naturalKeyword all giving remainder rounded leaving space numeric
50syn keyword naturalKeyword examine full replace giving separate delimiter modified
51syn keyword naturalKeyword suspend identical suppress
Bram Moolenaar071d4272004-06-13 20:20:40 +000052
53" program flow
Bram Moolenaare37d50a2008-08-06 17:06:04 +000054syn keyword naturalFlow callnat fetch return enter escape bottom top stack formatted
55syn keyword naturalFlow command call
56syn keyword naturalflow end-subroutine routine
Bram Moolenaar071d4272004-06-13 20:20:40 +000057
58" file operations
Bram Moolenaare37d50a2008-08-06 17:06:04 +000059syn keyword naturalKeyword update store get delete end transaction work once close
Bram Moolenaar071d4272004-06-13 20:20:40 +000060
61" other keywords
Bram Moolenaare37d50a2008-08-06 17:06:04 +000062syn keyword naturalKeyword first every of no record[s] found ignore immediate
63syn keyword naturalKeyword set settime key control stop terminate
Bram Moolenaar071d4272004-06-13 20:20:40 +000064
65" in-/output
Bram Moolenaare37d50a2008-08-06 17:06:04 +000066syn keyword naturalKeyword write display input reinput notitle nohdr map newpage
67syn keyword naturalKeyword alarm text help eject index window base size
68syn keyword naturalKeyword format printer skip lines
Bram Moolenaar071d4272004-06-13 20:20:40 +000069
70" functions
Bram Moolenaare37d50a2008-08-06 17:06:04 +000071syn keyword naturalKeyword abs atn cos exp frac int log sgn sin sqrt tan val old
72syn keyword naturalKeyword pos
Bram Moolenaar071d4272004-06-13 20:20:40 +000073
74" report mode keywords
75syn keyword naturalRMKeyword same loop obtain indexed do doend
76
77" Subroutine name
Bram Moolenaare37d50a2008-08-06 17:06:04 +000078syn keyword naturalFlow perform subroutine nextgroup=naturalFunction skipwhite
79syn match naturalFunction "\<[a-z][-_a-z0-9]*\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000080
Bram Moolenaare37d50a2008-08-06 17:06:04 +000081syn keyword naturalFlow using nextgroup=naturalKeyword,naturalObjName skipwhite
82syn match naturalObjName "\<[a-z][-_a-z0-9]\{,7}\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000083
84" Labels
Bram Moolenaare37d50a2008-08-06 17:06:04 +000085syn match naturalLabel "\<[+#a-z][-_#a-z0-9]*\."
86syn match naturalRef "\<[+#a-z][-_#a-z0-9]*\>\.\<[+#a-z][*]\=[-_#a-z0-9]*\>"
87
88" mark keyword special handling
89syn keyword naturalKeyword mark nextgroup=naturalMark skipwhite
90syn match naturalMark "\<\*[a-z][-_#.a-z0-9]*\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000091
92" System variables
Bram Moolenaare37d50a2008-08-06 17:06:04 +000093syn match naturalSysVar "\<\*[a-z][-a-z0-9]*\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000094
95"integer number, or floating point number without a dot.
Bram Moolenaare37d50a2008-08-06 17:06:04 +000096syn match naturalNumber "\<-\=\d\+\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000097"floating point number, with dot
Bram Moolenaare37d50a2008-08-06 17:06:04 +000098syn match naturalNumber "\<-\=\d\+\.\d\+\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000099"floating point number, starting with a dot
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000100syn match naturalNumber "\.\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101
102" Formats in write statement
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000103syn match naturalFormat "\<\d\+[TX]\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000104
105" String and Character contstants
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000106syn match naturalString "H'\x\+'"
107syn region naturalString start=+"+ end=+"+
108syn region naturalString start=+'+ end=+'+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109
110" Type definition
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000111syn match naturalAttribute "\<[-a-z][a-z]=[-a-z0-9_\.,]\+\>"
112syn match naturalType contained "\<[ABINP]\d\+\(,\d\+\)\=\>"
113syn match naturalType contained "\<[CL]\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000114
115" "TODO" / other comments
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000116syn keyword naturalTodo contained todo test
117syn match naturalCommentMark contained "[a-z][^ \t/:|]*\(\s[^ \t/:'"|]\+\)*:\s"he=e-1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000118
119" comments
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000120syn region naturalComment start="/\*" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
121syn region naturalComment start="^\*[ *]" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
122syn region naturalComment start="^\d\{4} \*[\ \*]"lc=5 end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
123syn match naturalComment "^\*$"
124syn match naturalComment "^\d\{4} \*$"lc=5
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125" /* is legal syntax in parentheses e.g. "#ident(label./*)"
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000126syn region naturalPComment contained start="/\*\s*[^),]" end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127
128" operators
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000129syn keyword naturalOperator and or not eq ne gt lt ge le mask scan modified
Bram Moolenaar071d4272004-06-13 20:20:40 +0000130
131" constants
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000132syn keyword naturalBoolean true false
133syn match naturalLineNo "^\d\{4}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134
135" identifiers
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000136syn match naturalIdent "\<[+#a-z][-_#a-z0-9]*\>[^\.']"me=e-1
137syn match naturalIdent "\<[+#a-z][-_#a-z0-9]*$"
138syn match naturalLegalIdent "[+#a-z][-_#a-z0-9]*/[-_#a-z0-9]*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139
140" parentheses
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000141syn region naturalPar matchgroup=naturalParGui start="(" end=")" contains=naturalLabel,naturalRef,naturalOperator,@naturalConstant,naturalType,naturalSysVar,naturalPar,naturalLineNo,naturalPComment
142syn match naturalLineRef "(\d\{4})"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143
144" build syntax groups
145syntax cluster naturalConstant contains=naturalString,naturalNumber,naturalAttribute,naturalBoolean
146
147" folding
148if v:version >= 600
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000149 set foldignore=*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150endif
151
152
153if v:version >= 508 || !exists("did_natural_syntax_inits")
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000154 if v:version < 508
155 let did_natural_syntax_inits = 1
156 command -nargs=+ HiLink hi link <args>
157 else
158 command -nargs=+ HiLink hi def link <args>
159 endif
160 " The default methods for highlighting. Can be overridden later
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000162 " Constants
163 HiLink naturalFormat Constant
164 HiLink naturalAttribute Constant
165 HiLink naturalNumber Number
166 HiLink naturalString String
167 HiLink naturalBoolean Boolean
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000169 " All kinds of keywords
170 HiLink naturalConditional Conditional
171 HiLink naturalRepeat Repeat
172 HiLink naturalLoop Repeat
173 HiLink naturalFlow Keyword
174 HiLink naturalError Keyword
175 HiLink naturalKeyword Keyword
176 HiLink naturalOperator Operator
177 HiLink naturalParGui Operator
Bram Moolenaar071d4272004-06-13 20:20:40 +0000178
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000179 " Labels
180 HiLink naturalLabel Label
181 HiLink naturalRefLabel Label
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000183 " Comments
184 HiLink naturalPComment Comment
185 HiLink naturalComment Comment
186 HiLink naturalTodo Todo
187 HiLink naturalCommentMark PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000188
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000189 HiLink naturalInclude Include
190 HiLink naturalSysVar Identifier
191 HiLink naturalLineNo LineNr
192 HiLink naturalLineRef Error
193 HiLink naturalSpecial Special
194 HiLink naturalComKey Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000196 " illegal things
197 HiLink naturalRMKeyword Error
198 HiLink naturalLegalIdent Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000200 HiLink naturalType Type
201 HiLink naturalFunction Function
202 HiLink naturalObjName PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000203
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000204 delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205endif
206
207let b:current_syntax = "natural"
208
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000209" vim:set ts=8 sw=8 noet ft=vim: