blob: bf7c32fd1c4d03dfd5a07c55a2fddb8f5a904f8b [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: PL/M
3" Maintainer: Philippe Coulonges <cphil@cphil.net>
4" Last change: 2003 May 11
5
6" For version 5.x: Clear all syntax items
7" For version 6.x: Quit when a syntax file was already loaded
8if version < 600
9 syntax clear
10elseif exists("b:current_syntax")
11 finish
12endif
13
14" PL/M is a case insensitive language
15syn case ignore
16
17syn keyword plmTodo contained TODO FIXME XXX
18
19" String
20syn region plmString start=+'+ end=+'+
21
22syn match plmOperator "[@=\+\-\*\/\<\>]"
23
24syn match plmIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>"
25
26syn match plmDelimiter "[();,]"
27
28syn region plmPreProc start="^\s*\$\s*" skip="\\$" end="$"
29
30" FIXME : No Number support for floats, as I'm working on an embedded
31" project that doesn't use any.
32syn match plmNumber "-\=\<\d\+\>"
33syn match plmNumber "\<[0-9a-fA-F]*[hH]*\>"
34
35" If you don't like tabs
36"syn match plmShowTab "\t"
37"syn match plmShowTabc "\t"
38
39"when wanted, highlight trailing white space
40if exists("c_space_errors")
41 syn match plmSpaceError "\s*$"
42 syn match plmSpaceError " \+\t"me=e-1
43endif
44
45"
46 " Use the same control variable as C language for I believe
47 " users will want the same behavior
48if exists("c_comment_strings")
49 " FIXME : don't work fine with c_comment_strings set,
50 " which I don't care as I don't use
51
52 " A comment can contain plmString, plmCharacter and plmNumber.
53 " But a "*/" inside a plmString in a plmComment DOES end the comment! So we
54 " need to use a special type of plmString: plmCommentString, which also ends on
55 " "*/", and sees a "*" at the start of the line as comment again.
56 syntax match plmCommentSkip contained "^\s*\*\($\|\s\+\)"
57 syntax region plmCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=plmSpecial,plmCommentSkip
58 syntax region plmComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=plmSpecial
59 syntax region plmComment start="/\*" end="\*/" contains=plmTodo,plmCommentString,plmCharacter,plmNumber,plmFloat,plmSpaceError
60 syntax match plmComment "//.*" contains=plmTodo,plmComment2String,plmCharacter,plmNumber,plmSpaceError
61else
62 syn region plmComment start="/\*" end="\*/" contains=plmTodo,plmSpaceError
63 syn match plmComment "//.*" contains=plmTodo,plmSpaceError
64endif
65
66syntax match plmCommentError "\*/"
67
68syn keyword plmReserved ADDRESS AND AT BASED BY BYTE CALL CASE
69syn keyword plmReserved DATA DECLARE DISABLE DO DWORD
70syn keyword plmReserved ELSE ENABLE END EOF EXTERNAL
71syn keyword plmReserved GO GOTO HALT IF INITIAL INTEGER INTERRUPT
72syn keyword plmReserved LABEL LITERALLY MINUS MOD NOT OR
73syn keyword plmReserved PLUS POINTER PROCEDURE PUBLIC
74syn keyword plmReserved REAL REENTRANT RETURN SELECTOR STRUCTURE
75syn keyword plmReserved THEN TO WHILE WORD XOR
76syn keyword plm386Reserved CHARINT HWORD LONGINT OFFSET QWORD SHORTINT
77
78syn keyword plmBuiltIn ABS ADJUSTRPL BLOCKINPUT BLOCKINWORD BLOCKOUTPUT
79syn keyword plmBuiltIn BLOCKOUTWORD BUILPTR CARRY CAUSEINTERRUPT CMPB
80syn keyword plmBuiltIn CMPW DEC DOUBLE FINDB FINDRB FINDRW FINDW FIX
81syn keyword plmBuiltIn FLAGS FLOAT GETREALERROR HIGH IABS INITREALMATHUNIT
82syn keyword plmBuiltIn INPUT INT INWORD LAST LOCKSET LENGTH LOW MOVB MOVE
83syn keyword plmBuiltIn MOVRB MOVRW MOVW NIL OUTPUT OUTWORD RESTOREREALSTATUS
84syn keyword plmBuiltIn ROL ROR SAL SAVEREALSTATUS SCL SCR SELECTOROF SETB
85syn keyword plmBuiltIn SETREALMODE SETW SHL SHR SIGN SIGNED SIZE SKIPB
86syn keyword plmBuiltIn SKIPRB SKIPRW SKIPW STACKBASE STACKPTR TIME SIZE
87syn keyword plmBuiltIn UNSIGN XLAT ZERO
88syn keyword plm386BuiltIn INTERRUPT SETINTERRUPT
89syn keyword plm286BuiltIn CLEARTASKSWITCHEDFLAG GETACCESSRIGHTS
90syn keyword plm286BuiltIn GETSEGMENTLIMIT LOCALTABLE MACHINESTATUS
91syn keyword plm286BuiltIn OFFSETOF PARITY RESTOREGLOBALTABLE
92syn keyword plm286BuiltIn RESTOREINTERRUPTTABLE SAVEGLOBALTABLE
93syn keyword plm286BuiltIn SAVEINTERRUPTTABLE SEGMENTREADABLE
94syn keyword plm286BuiltIn SEGMENTWRITABLE TASKREGISTER WAITFORINTERRUPT
95syn keyword plm386BuiltIn CONTROLREGISTER DEBUGREGISTER FINDHW
96syn keyword plm386BuiltIn FINDRHW INHWORD MOVBIT MOVRBIT MOVHW MOVRHW
97syn keyword plm386BuiltIn OUTHWORD SCANBIT SCANRBIT SETHW SHLD SHRD
98syn keyword plm386BuiltIn SKIPHW SKIPRHW TESTREGISTER
99syn keyword plm386w16BuiltIn BLOCKINDWORD BLOCKOUTDWORD CMPD FINDD
100syn keyword plm386w16BuiltIn FINDRD INDWORD MOVD MOVRD OUTDWORD
101syn keyword plm386w16BuiltIn SETD SKIPD SKIPRD
102
103syn sync lines=50
104
105" Define the default highlighting.
106" For version 5.7 and earlier: only when not done already
107" For version 5.8 and later: only when an item doesn't have highlighting yet
108if version >= 508 || !exists("did_plm_syntax_inits")
109 if version < 508
110 let did_plm_syntax_inits = 1
111 command -nargs=+ HiLink hi link <args>
112 else
113 command -nargs=+ HiLink hi def link <args>
114 endif
115
116 " The default methods for highlighting. Can be overridden later
117" HiLink plmLabel Label
118" HiLink plmConditional Conditional
119" HiLink plmRepeat Repeat
120 HiLink plmTodo Todo
121 HiLink plmNumber Number
122 HiLink plmOperator Operator
123 HiLink plmDelimiter Operator
124 "HiLink plmShowTab Error
125 "HiLink plmShowTabc Error
126 HiLink plmIdentifier Identifier
127 HiLink plmBuiltIn Statement
128 HiLink plm286BuiltIn Statement
129 HiLink plm386BuiltIn Statement
130 HiLink plm386w16BuiltIn Statement
131 HiLink plmReserved Statement
132 HiLink plm386Reserved Statement
133 HiLink plmPreProc PreProc
134 HiLink plmCommentError plmError
135 HiLink plmCommentString plmString
136 HiLink plmComment2String plmString
137 HiLink plmCommentSkip plmComment
138 HiLink plmString String
139 HiLink plmComment Comment
140
141 delcommand HiLink
142endif
143
144let b:current_syntax = "plm"
145
146" vim: ts=8 sw=2
147