xref: /vim-8.2.3635/runtime/syntax/natural.vim (revision 00a927d6)
1" Vim syntax file
2"
3" Language:	NATURAL
4" Version:	2.1.0.3
5" Maintainer:	Marko von Oppen <[email protected]>
6" Last Changed:	2008-07-29 01:40:52
7" Support:	http://www.von-oppen.com/
8
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
12  syntax clear
13  set iskeyword+=-,*,#,+,_,/
14elseif exists("b:current_syntax")
15  finish
16else
17  setlocal iskeyword+=-,*,#,+,_,/
18endif
19
20" NATURAL is case insensitive
21syntax case ignore
22
23" preprocessor
24syn keyword naturalInclude	include nextgroup=naturalObjName skipwhite
25
26" define data
27syn keyword naturalKeyword	define data end-define
28syn keyword naturalKeyword	independent global parameter local redefine view
29syn keyword naturalKeyword	const[ant] init initial
30
31" loops
32syn 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
41
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
47syn 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
52
53" program flow
54syn keyword naturalFlow		callnat fetch return enter escape bottom top stack formatted
55syn keyword naturalFlow		command call
56syn keyword naturalflow		end-subroutine routine
57
58" file operations
59syn keyword naturalKeyword	update store get delete end transaction work once close
60
61" other keywords
62syn keyword naturalKeyword	first every of no record[s] found ignore immediate
63syn keyword naturalKeyword	set settime key control stop terminate
64
65" in-/output
66syn 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
69
70" functions
71syn keyword naturalKeyword	abs atn cos exp frac int log sgn sin sqrt tan val old
72syn keyword naturalKeyword	pos
73
74" report mode keywords
75syn keyword naturalRMKeyword	same loop obtain indexed do doend
76
77" Subroutine name
78syn keyword naturalFlow		perform subroutine nextgroup=naturalFunction skipwhite
79syn match   naturalFunction	"\<[a-z][-_a-z0-9]*\>"
80
81syn keyword naturalFlow		using nextgroup=naturalKeyword,naturalObjName skipwhite
82syn match   naturalObjName	"\<[a-z][-_a-z0-9]\{,7}\>"
83
84" Labels
85syn 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]*\>"
91
92" System variables
93syn match   naturalSysVar	"\<\*[a-z][-a-z0-9]*\>"
94
95"integer number, or floating point number without a dot.
96syn match   naturalNumber	"\<-\=\d\+\>"
97"floating point number, with dot
98syn match   naturalNumber	"\<-\=\d\+\.\d\+\>"
99"floating point number, starting with a dot
100syn match   naturalNumber	"\.\d\+"
101
102" Formats in write statement
103syn match   naturalFormat	"\<\d\+[TX]\>"
104
105" String and Character contstants
106syn match   naturalString	"H'\x\+'"
107syn region  naturalString	start=+"+ end=+"+
108syn region  naturalString	start=+'+ end=+'+
109
110" Type definition
111syn match   naturalAttribute	"\<[-a-z][a-z]=[-a-z0-9_\.,]\+\>"
112syn match   naturalType		contained "\<[ABINP]\d\+\(,\d\+\)\=\>"
113syn match   naturalType		contained "\<[CL]\>"
114
115" "TODO" / other comments
116syn keyword naturalTodo		contained todo test
117syn match   naturalCommentMark	contained "[a-z][^ \t/:|]*\(\s[^ \t/:'"|]\+\)*:\s"he=e-1
118
119" comments
120syn 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
125" /* is legal syntax in parentheses e.g. "#ident(label./*)"
126syn region  naturalPComment	contained start="/\*\s*[^),]"  end="$" contains=naturalTodo,naturalLineRef,naturalCommentMark
127
128" operators
129syn keyword naturalOperator	and or not eq ne gt lt ge le mask scan modified
130
131" constants
132syn keyword naturalBoolean	true false
133syn match   naturalLineNo	"^\d\{4}"
134
135" identifiers
136syn 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]*"
139
140" parentheses
141syn region  naturalPar		matchgroup=naturalParGui start="(" end=")" contains=naturalLabel,naturalRef,naturalOperator,@naturalConstant,naturalType,naturalSysVar,naturalPar,naturalLineNo,naturalPComment
142syn match   naturalLineRef	"(\d\{4})"
143
144" build syntax groups
145syntax cluster naturalConstant	contains=naturalString,naturalNumber,naturalAttribute,naturalBoolean
146
147" folding
148if v:version >= 600
149  set foldignore=*
150endif
151
152
153if v:version >= 508 || !exists("did_natural_syntax_inits")
154  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
161
162  " Constants
163  HiLink naturalFormat		Constant
164  HiLink naturalAttribute	Constant
165  HiLink naturalNumber		Number
166  HiLink naturalString		String
167  HiLink naturalBoolean		Boolean
168
169  " 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
178
179  " Labels
180  HiLink naturalLabel		Label
181  HiLink naturalRefLabel	Label
182
183  " Comments
184  HiLink naturalPComment	Comment
185  HiLink naturalComment		Comment
186  HiLink naturalTodo		Todo
187  HiLink naturalCommentMark	PreProc
188
189  HiLink naturalInclude		Include
190  HiLink naturalSysVar		Identifier
191  HiLink naturalLineNo		LineNr
192  HiLink naturalLineRef		Error
193  HiLink naturalSpecial		Special
194  HiLink naturalComKey		Todo
195
196  " illegal things
197  HiLink naturalRMKeyword	Error
198  HiLink naturalLegalIdent	Error
199
200  HiLink naturalType		Type
201  HiLink naturalFunction	Function
202  HiLink naturalObjName		PreProc
203
204  delcommand HiLink
205endif
206
207let b:current_syntax = "natural"
208
209" vim:set ts=8 sw=8 noet ft=vim:
210