blob: 3ab5c2e66164899f15c7807b6ebcc71b66f6c62a [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar4c295022021-05-02 17:19:11 +02002" 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 Apr 23
Bram Moolenaar071d4272004-06-13 20:20:40 +00007
Bram Moolenaar009b2592004-10-24 19:18:58 +00008" Contributors: Tim Chase <tchase@csc.com>,
Bram Moolenaar4c295022021-05-02 17:19:11 +02009" 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>
Bram Moolenaar071d4272004-06-13 20:20:40 +000014
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020015" quit when a syntax file was already loaded
16if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000017 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
Bram Moolenaar4c295022021-05-02 17:19:11 +020028syn keyword pascalOperator and div downto in mod not of or packed
Bram Moolenaar071d4272004-06-13 20:20:40 +000029syn keyword pascalRepeat do for do repeat while to until
30syn keyword pascalStatement procedure function
Bram Moolenaar4c295022021-05-02 17:19:11 +020031syn keyword pascalStatement program begin end const var type with
Bram Moolenaar071d4272004-06-13 20:20:40 +000032syn keyword pascalStruct record
33syn keyword pascalType array boolean char integer file pointer real set
34syn keyword pascalType string text variant
35
36
Bram Moolenaar009b2592004-10-24 19:18:58 +000037 " 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")
Bram Moolenaar4c295022021-05-02 17:19:11 +020043 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
Bram Moolenaar009b2592004-10-24 19:18:58 +000049endif
50
Bram Moolenaar071d4272004-06-13 20:20:40 +000051
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\+\>"
Bram Moolenaar4c295022021-05-02 17:19:11 +0200101if !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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112syn match pascalFloat "-\=\<\d\+\.\d\+\>"
113syn match pascalFloat "-\=\<\d\+\.\d\+[eE]-\=\d\+\>"
Bram Moolenaar4c295022021-05-02 17:19:11 +0200114
115if !exists("pascal_traditional")
116 " allow leading zeros
117 syn match pascalControlCharacter "#\%([01]\=\d\=\d\|2[0-4]\d\|25[0-5]\)\>"
118endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000119
120if exists("pascal_no_tabs")
121 syn match pascalShowTab "\t"
122endif
123
Bram Moolenaar009b2592004-10-24 19:18:58 +0000124syn region pascalComment start="(\*\|{" end="\*)\|}" contains=pascalTodo,pascalSpaceError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125
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
Bram Moolenaar009b2592004-10-24 19:18:58 +0000143 syn keyword pascalFunction Get Page Put
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144 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
Bram Moolenaar009b2592004-10-24 19:18:58 +0000159 syn keyword pascalModifier interrupt near virtual
Bram Moolenaar4c295022021-05-02 17:19:11 +0200160 syn keyword pascalAccess private public strict
Bram Moolenaar009b2592004-10-24 19:18:58 +0000161 syn keyword pascalStruct object
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162 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
Bram Moolenaar4c295022021-05-02 17:19:11 +0200175 syn keyword pascalPredefined self
Bram Moolenaar071d4272004-06-13 20:20:40 +0000176
177 if !exists ("pascal_fpc")
178 syn keyword pascalPredefined Result
179 endif
180
181 if exists("pascal_fpc")
Bram Moolenaar009b2592004-10-24 19:18:58 +0000182 syn region pascalComment start="//" end="$" contains=pascalTodo,pascalSpaceError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183 syn keyword pascalStatement fail otherwise operator
184 syn keyword pascalDirective popstack
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185 syn keyword pascalType ShortString AnsiString WideString
186 endif
187
188 if exists("pascal_gpc")
Bram Moolenaar4c295022021-05-02 17:19:11 +0200189 syn region pascalComment start="//" end="$" contains=pascalTodo,pascalSpaceError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000190 syn keyword pascalType SmallInt
191 syn keyword pascalType AnsiChar
192 syn keyword pascalType PAnsiChar
193 endif
194
195 if exists("pascal_delphi")
Bram Moolenaar009b2592004-10-24 19:18:58 +0000196 syn region pascalComment start="//" end="$" contains=pascalTodo,pascalSpaceError
Bram Moolenaar4c295022021-05-02 17:19:11 +0200197 syn region pascalDocumentation start="///" end="$" contains=pascalTodo,pascalSpaceError
198 syn region pascalDocumentation start="{!" end="}" contains=pascalTodo,pascalSpaceError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199 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
Bram Moolenaar009b2592004-10-24 19:18:58 +0000209 syn keyword pascalStatement library package
Bram Moolenaar071d4272004-06-13 20:20:40 +0000210 syn keyword pascalStatement initialization finalization uses exports
211 syn keyword pascalStatement property out resourcestring threadvar
212 syn keyword pascalModifier contains
Bram Moolenaar4c295022021-05-02 17:19:11 +0200213 syn keyword pascalModifier overridden reintroduce abstract sealed
Bram Moolenaar071d4272004-06-13 20:20:40 +0000214 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
Bram Moolenaar4c295022021-05-02 17:19:11 +0200217 syn keyword pascalAccess protected published automated
Bram Moolenaar071d4272004-06-13 20:20:40 +0000218 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
Bram Moolenaar009b2592004-10-24 19:18:58 +0000281 syn keyword pascalPredefined TextChar
Bram Moolenaar071d4272004-06-13 20:20:40 +0000282
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.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200338" Only when an item doesn't have highlighting yet
Bram Moolenaar071d4272004-06-13 20:20:40 +0000339
Bram Moolenaar4c295022021-05-02 17:19:11 +0200340hi def link pascalAccess pascalStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200341hi def link pascalBoolean Boolean
342hi def link pascalComment Comment
Bram Moolenaar4c295022021-05-02 17:19:11 +0200343hi def link pascalDocumentation Comment
344hi def link pascalConditional Conditional
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200345hi def link pascalConstant Constant
Bram Moolenaar4c295022021-05-02 17:19:11 +0200346hi def link pascalControlCharacter Character
347hi def link pascalDelimiter Identifier
348hi def link pascalDirective pascalStatement
349hi def link pascalException Exception
350hi def link pascalFloat Float
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200351hi def link pascalFunction Function
Bram Moolenaar4c295022021-05-02 17:19:11 +0200352hi def link pascalLabel Label
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200353hi def link pascalMatrixDelimiter Identifier
354hi def link pascalModifier Type
355hi def link pascalNumber Number
Bram Moolenaar4c295022021-05-02 17:19:11 +0200356hi def link pascalExtendedNumber Number
357hi def link pascalBinNumber pascalNumber
358hi def link pascalHexNumber pascalNumber
359hi def link pascalOctNumber pascalNumber
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200360hi def link pascalOperator Operator
Bram Moolenaar4c295022021-05-02 17:19:11 +0200361hi def link pascalPredefined pascalStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200362hi def link pascalPreProc PreProc
363hi def link pascalRepeat Repeat
Bram Moolenaar4c295022021-05-02 17:19:11 +0200364hi def link pascalSpaceError Error
365hi def link pascalStatement Statement
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200366hi def link pascalString String
Bram Moolenaar4c295022021-05-02 17:19:11 +0200367hi def link pascalStringEscape Special
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200368hi def link pascalStringEscapeGPC Special
Bram Moolenaar4c295022021-05-02 17:19:11 +0200369hi def link pascalStringError Error
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200370hi def link pascalStruct pascalStatement
371hi def link pascalSymbolOperator pascalOperator
Bram Moolenaar4c295022021-05-02 17:19:11 +0200372hi def link pascalTodo Todo
373hi def link pascalType Type
374hi def link pascalUnclassified pascalStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200375" hi def link pascalAsm Assembler
Bram Moolenaar4c295022021-05-02 17:19:11 +0200376hi def link pascalError Error
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200377hi def link pascalAsmKey pascalStatement
378hi def link pascalShowTab Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000379
Bram Moolenaar071d4272004-06-13 20:20:40 +0000380
381
382let b:current_syntax = "pascal"
383
Bram Moolenaar4c295022021-05-02 17:19:11 +0200384" vim: nowrap sw=2 sts=2 ts=8 noet: