1" Vim syntax file 2" Language: PL/M 3" Maintainer: Philippe Coulonges <[email protected]> 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 148