1" Vim syntax file
2" Language:		Pascal
3" Maintainer:		Doug Kearns <dougkearns@gmail.com>
4" Previous Maintainers:	Xavier Crégut <xavier.cregut@enseeiht.fr>
5"			Mario Eusebio <bio@dq.fct.unl.pt>
6" Last Change:		2021 May 20
7
8" Contributors: Tim Chase <tchase@csc.com>,
9"		Stas Grabois <stsi@vtrails.com>,
10"		Mazen NEIFER <mazen.neifer.2001@supaero.fr>,
11"		Klaus Hast <Klaus.Hast@arcor.net>,
12"		Austin Ziegler <austin@halostatue.ca>,
13"		Markus Koenig <markus@stber-koenig.de>
14
15" quit when a syntax file was already loaded
16if exists("b:current_syntax")
17  finish
18endif
19
20
21syn case ignore
22syn sync lines=250
23
24syn keyword pascalBoolean	true false
25syn keyword pascalConditional	if else then
26syn keyword pascalConstant	nil maxint
27syn keyword pascalLabel		case goto label
28syn keyword pascalOperator	and div downto in mod not of or packed
29syn keyword pascalRepeat	do for do repeat while to until
30syn keyword pascalStatement	procedure function
31syn keyword pascalStatement	program begin end const var type with
32syn keyword pascalStruct	record
33syn keyword pascalType		array boolean char integer file pointer real set
34syn keyword pascalType		string text variant
35
36
37    " 20011222az: Added new items.
38syn keyword pascalTodo contained	TODO FIXME XXX DEBUG NOTE
39
40    " 20010723az: When wanted, highlight the trailing whitespace -- this is
41    " based on c_space_errors; to enable, use "pascal_space_errors".
42if exists("pascal_space_errors")
43  if !exists("pascal_no_trail_space_error")
44    syn match pascalSpaceError "\s\+$"
45  endif
46  if !exists("pascal_no_tab_space_error")
47    syn match pascalSpaceError " \+\t"me=e-1
48  endif
49endif
50
51
52
53" String
54if !exists("pascal_one_line_string")
55  syn region  pascalString matchgroup=pascalString start=+'+ end=+'+ contains=pascalStringEscape
56  if exists("pascal_gpc")
57    syn region  pascalString matchgroup=pascalString start=+"+ end=+"+ contains=pascalStringEscapeGPC
58  else
59    syn region  pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ contains=pascalStringEscape
60  endif
61else
62  "wrong strings
63  syn region  pascalStringError matchgroup=pascalStringError start=+'+ end=+'+ end=+$+ contains=pascalStringEscape
64  if exists("pascal_gpc")
65    syn region  pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ end=+$+ contains=pascalStringEscapeGPC
66  else
67    syn region  pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ end=+$+ contains=pascalStringEscape
68  endif
69
70  "right strings
71  syn region  pascalString matchgroup=pascalString start=+'+ end=+'+ oneline contains=pascalStringEscape
72  " To see the start and end of strings:
73  " syn region  pascalString matchgroup=pascalStringError start=+'+ end=+'+ oneline contains=pascalStringEscape
74  if exists("pascal_gpc")
75    syn region  pascalString matchgroup=pascalString start=+"+ end=+"+ oneline contains=pascalStringEscapeGPC
76  else
77    syn region  pascalStringError matchgroup=pascalStringError start=+"+ end=+"+ oneline contains=pascalStringEscape
78  endif
79end
80syn match   pascalStringEscape		contained "''"
81syn match   pascalStringEscapeGPC	contained '""'
82
83
84" syn match   pascalIdentifier		"\<[a-zA-Z_][a-zA-Z0-9_]*\>"
85
86
87if exists("pascal_symbol_operator")
88  syn match   pascalSymbolOperator      "[+\-/*=]"
89  syn match   pascalSymbolOperator      "[<>]=\="
90  syn match   pascalSymbolOperator      "<>"
91  syn match   pascalSymbolOperator      ":="
92  syn match   pascalSymbolOperator      "[()]"
93  syn match   pascalSymbolOperator      "\.\."
94  syn match   pascalSymbolOperator       "[\^.]"
95  syn match   pascalMatrixDelimiter	"[][]"
96  "if you prefer you can highlight the range
97  "syn match  pascalMatrixDelimiter	"[\d\+\.\.\d\+]"
98endif
99
100syn match  pascalNumber		"-\=\<\d\+\>"
101if !exists("pascal_traditional")
102  syn match  pascalHexNumber	"\$\x\+\>"
103endif
104if exists("pascal_fpc")
105  syn match	pascalOctNumber "&\o\+\>"
106  syn match	pascalBinNumber	"%[01]\+\>"
107endif
108if exists("pascal_gpc")
109  syn match  pascalExtendedNumber	"\%([2-9]\|[12]\d\|3[0-6]\)#[[:alnum:]]\+\>"
110endif
111
112syn match  pascalFloat		"-\=\<\d\+\.\d\+\>"
113syn match  pascalFloat		"-\=\<\d\+\.\d\+[eE]-\=\d\+\>"
114
115if !exists("pascal_traditional")
116  " allow leading zeros
117  syn match pascalControlCharacter	"#\%([01]\=\d\=\d\|2[0-4]\d\|25[0-5]\)\>"
118endif
119
120if exists("pascal_no_tabs")
121  syn match pascalShowTab "\t"
122endif
123
124syn region pascalComment	start="(\*\|{"  end="\*)\|}" contains=pascalTodo,pascalSpaceError
125
126
127if !exists("pascal_no_functions")
128  " array functions
129  syn keyword pascalFunction	pack unpack
130
131  " memory function
132  syn keyword pascalFunction	Dispose New
133
134  " math functions
135  syn keyword pascalFunction	Abs Arctan Cos Exp Ln Sin Sqr Sqrt
136
137  " file functions
138  syn keyword pascalFunction	Eof Eoln Write Writeln
139  syn keyword pascalPredefined	Input Output
140
141  if exists("pascal_traditional")
142    " These functions do not seem to be defined in Turbo Pascal
143    syn keyword pascalFunction	Get Page Put
144  endif
145
146  " ordinal functions
147  syn keyword pascalFunction	Odd Pred Succ
148
149  " transfert functions
150  syn keyword pascalFunction	Chr Ord Round Trunc
151endif
152
153
154if !exists("pascal_traditional")
155
156  syn keyword pascalStatement	constructor destructor implementation inherited
157  syn keyword pascalStatement	interface unit uses
158  syn keyword pascalModifier	absolute assembler external far forward inline
159  syn keyword pascalModifier	interrupt near virtual
160  syn keyword pascalAccess	private public strict
161  syn keyword pascalStruct	object
162  syn keyword pascalOperator	shl shr xor
163
164  syn region pascalPreProc	start="(\*\$"  end="\*)" contains=pascalTodo
165  syn region pascalPreProc	start="{\$"  end="}"
166
167  syn region  pascalAsm		matchgroup=pascalAsmKey start="\<asm\>" end="\<end\>" contains=pascalComment,pascalPreProc
168
169  syn keyword pascalType	ShortInt LongInt Byte Word
170  syn keyword pascalType	ByteBool WordBool LongBool
171  syn keyword pascalType	Cardinal LongWord
172  syn keyword pascalType	Single Double Extended Comp
173  syn keyword pascalType	PChar
174
175  syn keyword pascalPredefined	self
176
177  if !exists ("pascal_fpc")
178    syn keyword pascalPredefined	Result
179  endif
180
181  if exists("pascal_fpc")
182    syn region pascalComment        start="//" end="$" contains=pascalTodo,pascalSpaceError
183    syn keyword pascalStatement	fail otherwise operator
184    syn keyword pascalDirective	popstack
185    syn keyword pascalType	ShortString AnsiString WideString
186  endif
187
188  if exists("pascal_gpc")
189    syn region pascalComment        start="//" end="$" contains=pascalTodo,pascalSpaceError
190    syn keyword pascalType	SmallInt
191    syn keyword pascalType	AnsiChar
192    syn keyword pascalType	PAnsiChar
193  endif
194
195  if exists("pascal_delphi")
196    syn region pascalComment	start="//"  end="$" contains=pascalTodo,pascalSpaceError
197    syn region pascalDocumentation	start="///" end="$" contains=pascalTodo,pascalSpaceError
198    syn region pascalDocumentation	start="{!"  end="}" contains=pascalTodo,pascalSpaceError
199    syn keyword pascalType	SmallInt Int64
200    syn keyword pascalType	Real48 Currency
201    syn keyword pascalType	AnsiChar WideChar
202    syn keyword pascalType	ShortString AnsiString WideString
203    syn keyword pascalType	PAnsiChar PWideChar
204    syn match  pascalFloat	"-\=\<\d\+\.\d\+[dD]-\=\d\+\>"
205    syn match  pascalStringEscape	contained "#[12][0-9]\=[0-9]\="
206    syn keyword pascalStruct	class dispinterface
207    syn keyword pascalException	try except raise at on finally
208    syn keyword pascalStatement	out
209    syn keyword pascalStatement	library package
210    syn keyword pascalStatement	initialization finalization uses exports
211    syn keyword pascalStatement	property out resourcestring threadvar
212    syn keyword pascalModifier	contains
213    syn keyword pascalModifier	overridden reintroduce abstract sealed
214    syn keyword pascalModifier	override export dynamic name message
215    syn keyword pascalModifier	dispid index stored default nodefault readonly
216    syn keyword pascalModifier	writeonly implements overload requires resident
217    syn keyword pascalAccess	protected published automated
218    syn keyword pascalDirective	register pascal cvar cdecl stdcall safecall
219    syn keyword pascalOperator	as is
220  endif
221
222  if exists("pascal_no_functions")
223    "syn keyword pascalModifier	read write
224    "may confuse with Read and Write functions.  Not easy to handle.
225  else
226    " control flow functions
227    syn keyword pascalFunction	Break Continue Exit Halt RunError
228
229    " ordinal functions
230    syn keyword pascalFunction	Dec Inc High Low
231
232    " math functions
233    syn keyword pascalFunction	Frac Int Pi
234
235    " string functions
236    syn keyword pascalFunction	Concat Copy Delete Insert Length Pos Str Val
237
238    " memory function
239    syn keyword pascalFunction	FreeMem GetMem MaxAvail MemAvail
240
241    " pointer and address functions
242    syn keyword pascalFunction	Addr Assigned CSeg DSeg Ofs Ptr Seg SPtr SSeg
243
244    " misc functions
245    syn keyword pascalFunction	Exclude FillChar Hi Include Lo Move ParamCount
246    syn keyword pascalFunction	ParamStr Random Randomize SizeOf Swap TypeOf
247    syn keyword pascalFunction	UpCase
248
249    " predefined variables
250    syn keyword pascalPredefined ErrorAddr ExitCode ExitProc FileMode FreeList
251    syn keyword pascalPredefined FreeZero HeapEnd HeapError HeapOrg HeapPtr
252    syn keyword pascalPredefined InOutRes OvrCodeList OvrDebugPtr OvrDosHandle
253    syn keyword pascalPredefined OvrEmsHandle OvrHeapEnd OvrHeapOrg OvrHeapPtr
254    syn keyword pascalPredefined OvrHeapSize OvrLoadList PrefixSeg RandSeed
255    syn keyword pascalPredefined SaveInt00 SaveInt02 SaveInt1B SaveInt21
256    syn keyword pascalPredefined SaveInt23 SaveInt24 SaveInt34 SaveInt35
257    syn keyword pascalPredefined SaveInt36 SaveInt37 SaveInt38 SaveInt39
258    syn keyword pascalPredefined SaveInt3A SaveInt3B SaveInt3C SaveInt3D
259    syn keyword pascalPredefined SaveInt3E SaveInt3F SaveInt75 SegA000 SegB000
260    syn keyword pascalPredefined SegB800 SelectorInc StackLimit Test8087
261
262    " file functions
263    syn keyword pascalFunction	Append Assign BlockRead BlockWrite ChDir Close
264    syn keyword pascalFunction	Erase FilePos FileSize Flush GetDir IOResult
265    syn keyword pascalFunction	MkDir Read Readln Rename Reset Rewrite RmDir
266    syn keyword pascalFunction	Seek SeekEof SeekEoln SetTextBuf Truncate
267
268    " crt unit
269    syn keyword pascalFunction	AssignCrt ClrEol ClrScr Delay DelLine GotoXY
270    syn keyword pascalFunction	HighVideo InsLine KeyPressed LowVideo NormVideo
271    syn keyword pascalFunction	NoSound ReadKey Sound TextBackground TextColor
272    syn keyword pascalFunction	TextMode WhereX WhereY Window
273    syn keyword pascalPredefined CheckBreak CheckEOF CheckSnow DirectVideo
274    syn keyword pascalPredefined LastMode TextAttr WindMin WindMax
275    syn keyword pascalFunction BigCursor CursorOff CursorOn
276    syn keyword pascalConstant Black Blue Green Cyan Red Magenta Brown
277    syn keyword pascalConstant LightGray DarkGray LightBlue LightGreen
278    syn keyword pascalConstant LightCyan LightRed LightMagenta Yellow White
279    syn keyword pascalConstant Blink ScreenWidth ScreenHeight bw40
280    syn keyword pascalConstant co40 bw80 co80 mono
281    syn keyword pascalPredefined TextChar
282
283    " DOS unit
284    syn keyword pascalFunction	AddDisk DiskFree DiskSize DosExitCode DosVersion
285    syn keyword pascalFunction	EnvCount EnvStr Exec Expand FindClose FindFirst
286    syn keyword pascalFunction	FindNext FSearch FSplit GetCBreak GetDate
287    syn keyword pascalFunction	GetEnv GetFAttr GetFTime GetIntVec GetTime
288    syn keyword pascalFunction	GetVerify Intr Keep MSDos PackTime SetCBreak
289    syn keyword pascalFunction	SetDate SetFAttr SetFTime SetIntVec SetTime
290    syn keyword pascalFunction	SetVerify SwapVectors UnPackTime
291    syn keyword pascalConstant	FCarry FParity FAuxiliary FZero FSign FOverflow
292    syn keyword pascalConstant	Hidden Sysfile VolumeId Directory Archive
293    syn keyword pascalConstant	AnyFile fmClosed fmInput fmOutput fmInout
294    syn keyword pascalConstant	TextRecNameLength TextRecBufSize
295    syn keyword pascalType	ComStr PathStr DirStr NameStr ExtStr SearchRec
296    syn keyword pascalType	FileRec TextBuf TextRec Registers DateTime
297    syn keyword pascalPredefined DosError
298
299    "Graph Unit
300    syn keyword pascalFunction	Arc Bar Bar3D Circle ClearDevice ClearViewPort
301    syn keyword pascalFunction	CloseGraph DetectGraph DrawPoly Ellipse
302    syn keyword pascalFunction	FillEllipse FillPoly FloodFill GetArcCoords
303    syn keyword pascalFunction	GetAspectRatio GetBkColor GetColor
304    syn keyword pascalFunction	GetDefaultPalette GetDriverName GetFillPattern
305    syn keyword pascalFunction	GetFillSettings GetGraphMode GetImage
306    syn keyword pascalFunction	GetLineSettings GetMaxColor GetMaxMode GetMaxX
307    syn keyword pascalFunction	GetMaxY GetModeName GetModeRange GetPalette
308    syn keyword pascalFunction	GetPaletteSize GetPixel GetTextSettings
309    syn keyword pascalFunction	GetViewSettings GetX GetY GraphDefaults
310    syn keyword pascalFunction	GraphErrorMsg GraphResult ImageSize InitGraph
311    syn keyword pascalFunction	InstallUserDriver InstallUserFont Line LineRel
312    syn keyword pascalFunction	LineTo MoveRel MoveTo OutText OutTextXY
313    syn keyword pascalFunction	PieSlice PutImage PutPixel Rectangle
314    syn keyword pascalFunction	RegisterBGIDriver RegisterBGIFont
315    syn keyword pascalFunction	RestoreCRTMode Sector SetActivePage
316    syn keyword pascalFunction	SetAllPallette SetAspectRatio SetBkColor
317    syn keyword pascalFunction	SetColor SetFillPattern SetFillStyle
318    syn keyword pascalFunction	SetGraphBufSize SetGraphMode SetLineStyle
319    syn keyword pascalFunction	SetPalette SetRGBPalette SetTextJustify
320    syn keyword pascalFunction	SetTextStyle SetUserCharSize SetViewPort
321    syn keyword pascalFunction	SetVisualPage SetWriteMode TextHeight TextWidth
322    syn keyword pascalType	ArcCoordsType FillPatternType FillSettingsType
323    syn keyword pascalType	LineSettingsType PaletteType PointType
324    syn keyword pascalType	TextSettingsType ViewPortType
325
326    " string functions
327    syn keyword pascalFunction	StrAlloc StrBufSize StrCat StrComp StrCopy
328    syn keyword pascalFunction	StrDispose StrECopy StrEnd StrFmt StrIComp
329    syn keyword pascalFunction	StrLCat StrLComp StrLCopy StrLen StrLFmt
330    syn keyword pascalFunction	StrLIComp StrLower StrMove StrNew StrPas
331    syn keyword pascalFunction	StrPCopy StrPLCopy StrPos StrRScan StrScan
332    syn keyword pascalFunction	StrUpper
333  endif
334
335endif
336
337" Define the default highlighting.
338" Only when an item doesn't have highlighting yet
339
340hi def link pascalAccess		pascalStatement
341hi def link pascalBoolean		Boolean
342hi def link pascalComment		Comment
343hi def link pascalDocumentation		Comment
344hi def link pascalConditional		Conditional
345hi def link pascalConstant		Constant
346hi def link pascalControlCharacter	Character
347hi def link pascalDelimiter		Identifier
348hi def link pascalDirective		pascalStatement
349hi def link pascalException		Exception
350hi def link pascalFloat			Float
351hi def link pascalFunction		Function
352hi def link pascalLabel			Label
353hi def link pascalMatrixDelimiter	Identifier
354hi def link pascalModifier		Type
355hi def link pascalNumber		Number
356hi def link pascalExtendedNumber	Number
357hi def link pascalBinNumber		pascalNumber
358hi def link pascalHexNumber		pascalNumber
359hi def link pascalOctNumber		pascalNumber
360hi def link pascalOperator		Operator
361hi def link pascalPredefined		pascalStatement
362hi def link pascalPreProc		PreProc
363hi def link pascalRepeat		Repeat
364hi def link pascalSpaceError		Error
365hi def link pascalStatement		Statement
366hi def link pascalString		String
367hi def link pascalStringEscape		Special
368hi def link pascalStringEscapeGPC	Special
369hi def link pascalStringError		Error
370hi def link pascalStruct		pascalStatement
371hi def link pascalSymbolOperator	pascalOperator
372hi def link pascalTodo			Todo
373hi def link pascalType			Type
374hi def link pascalUnclassified		pascalStatement
375"  hi def link pascalAsm		Assembler
376hi def link pascalError			Error
377hi def link pascalAsmKey		pascalStatement
378hi def link pascalShowTab		Error
379
380
381
382let b:current_syntax = "pascal"
383
384" vim: nowrap sw=2 sts=2 ts=8 noet:
385