1" Vim syntax file 2" Modified from http://plnet.org/files/vim/ 3" using keywords from http://www.kednos.com/pli/docs/reference_manual/6291pro_contents.html 4" 2012-11-13 Alan Thompson 5 6if version < 600 7 syntax clear 8elseif exists("b:current_syntax") 9 finish 10endif 11 12syn case ignore 13 14" Todo. 15syn keyword pl1Todo TODO FIXME XXX DEBUG NOTE 16 17" pl1CommentGroup allows adding matches for special things in comments 18" 20010723az: Added this so that these could be matched in comments... 19syn cluster pl1CommentGroup contains=pl1Todo 20 21syn match pl1Garbage "[^ \t()]" 22syn match pl1Identifier "[a-z][a-z0-9$_#]*" 23syn match pl1HostIdentifier ":[a-z][a-z0-9$_#]*" 24 25" 20010723az: When wanted, highlight the trailing whitespace -- this is 26" based on c_space_errors 27if exists("c_space_errors") 28 if !exists("c_no_trail_space_error") 29 syn match pl1SpaceError "\s\+$" 30 endif 31 if !exists("c_no_tab_space_error") 32 syn match pl1SpaceError " \+\t"me=e-1 33 endif 34endif 35 36" Symbols. 37syn match pl1Symbol "\(;\|,\|\.\)" 38syn match pl1PreProcSym "%" 39 40" Operators. 41syn match pl1Operator "\(&\|:\|!\|+\|-\|\*\|/\|=\|<\|>\|@\|\*\*\|!=\|\~=\)" 42syn match pl1Operator "\(\^\|\^=\|<=\|>=\|:=\|=>\|\.\.\|||\|<<\|>>\|\"\)" 43 44" Attributes 45syn keyword pl1Attribute BACKWARDS BUFFERED BUF CONNECTED CONN CONSTANT EVENT 46syn keyword pl1Attribute EXCLUSIVE EXCL FORMAT GENERIC IRREDUCIBLE IRRED LOCAL 47syn keyword pl1Attribute REDUCIBLE RED TASK TRANSIENT UNBUFFERED UNBUF ALIGNED ANY 48syn keyword pl1Attribute AREA AUTOMATIC AUTO BASED BUILTIN CONDITION COND CONTROLLED 49syn keyword pl1Attribute CTL DEFINED DEF DIRECT ENVIRONMENT ENV EXTERNAL EXT FILE 50syn keyword pl1Attribute GLOBALDEF GLOBALREF INITIAL INIT INPUT INTERNAL INT KEYED 51syn keyword pl1Attribute LABEL LIKE LIST MEMBER NONVARYING NONVAR OPTIONAL OPTIONS 52syn keyword pl1Attribute OUTPUT PARAMETER PARM PICTURE PIC POSITION POS PRECISION 53syn keyword pl1Attribute PREC PRINT READONLY RECORD REFER RETURNS SEQUENTIAL SEQL 54syn keyword pl1Attribute STATIC STREAM STRUCTURE TRUNCATE UNALIGNED UNAL UNION UPDATE 55syn keyword pl1Attribute VARIABLE VARYING VAR COMPLEX CPLX REAL BINARY BIN BIT 56syn keyword pl1Attribute CHARACTER CHAR DECIMAL DEC DESCRIPTOR DESC DIMENSION DIM 57syn keyword pl1Attribute FIXED FLOAT OFFSET POINTER PTR REFERENCE VALUE VAL 58 59" Functions 60syn keyword pl1Function AFTER ALL ANY BEFORE COMPLETION CPLN CONJG COUNT 61syn keyword pl1Function CURRENTSTORAGE CSTG DATAFIELD DECAT DOT ERF ERFC IMAG 62syn keyword pl1Function ONCOUNT ONFIELD ONLOC POLY PRIORITY REPEAT SAMEKEY STATUS 63syn keyword pl1Function STORAGE STG ABS ACOS ACTUALCOUNT ADD ADDR ADDREL ALLOCATION 64syn keyword pl1Function ALLOCN ASIN ATAN ATAND ATANH BOOL BYTE BYTESIZE CEIL COLLATE 65syn keyword pl1Function COPY COS COSD COSH DATE DATETIME DECODE DISPLAY DIVIDE EMPTY 66syn keyword pl1Function ENCODE ERROR EVERY EXP EXTEND FLOOR FLUSH FREE HBOUND HIGH 67syn keyword pl1Function INDEX INFORM INT LBOUND LENGTH LINE LINENO LOG LOG10 LOG2 68syn keyword pl1Function LOW LTRIM MAX MAXLENGTH MIN MOD MULTIPLY NEXT_VOLUME NULL 69syn keyword pl1Function ONARGSLIST ONCHAR ONCODE ONFILE ONKEY ONSOURCE PAGENO POSINT 70syn keyword pl1Function PRESENT PROD RANK RELEASE RESIGNAL REVERSE REWIND ROUND 71syn keyword pl1Function RTRIM SEARCH SIGN SIN SIND SINH SIZE SOME SPACEBLOCK SQRT 72syn keyword pl1Function STRING SUBSTR SUBTRACT SUM TAN TAND TANH TIME TRANSLATE TRIM 73syn keyword pl1Function TRUNC UNSPEC VALID VARIANT VERIFY WARN 74 75" Other keywords 76syn keyword pl1Other ATTENTION ATTN C CONVERSION CONV DATA NAME NOCONVERSION 77syn keyword pl1Other NOCONV NOFIXEDOVERFLOW NOFOFL NOOVERFLOW NOSIZE 78syn keyword pl1Other NOSTRINGRANGE NOSTRG NOSTRINGSIZE NOSTRZ NOSUBSCRIPTRANGE 79syn keyword pl1Other NOSUBRG NOZERODIVIDE NOZDIV OVERFLOW OFL PENDING RECORD 80syn keyword pl1Other REENTRANT SIZE STRINGRANGE STRG STRINGSIZE STRZ 81syn keyword pl1Other SUBSCRIPTRANGE SUBRG TRANSMIT A ANYCONDITION APPEND B B1 B2 82syn keyword pl1Other B3 B4 BACKUP_DATE BATCH BLOCK_BOUNDARY_FORMAT BLOCK_IO 83syn keyword pl1Other BLOCK_SIZE BUCKET_SIZE BY CANCEL_CONTROL_O 84syn keyword pl1Other CARRIAGE_RETURN_FORMAT COLUMN COL CONTIGUOUS 85syn keyword pl1Other CONTIGUOUS_BEST_TRY CONVERSION CONV CREATION_DATE 86syn keyword pl1Other CURRENT_POSITION DEFAULT_FILE_NAME DEFERRED_WRITE E EDIT 87syn keyword pl1Other ENDFILE ENDPAGE EXPIRATION_DATE EXTENSION_SIZE F FAST_DELETE 88syn keyword pl1Other FILE_ID FILE_ID_TO FILE_SIZE FINISH FIXEDOVERFLOW FOFL 89syn keyword pl1Other FIXED_CONTROL_FROM FIXED_CONTROL_SIZE FIXED_CONTROL_SIZE_TO 90syn keyword pl1Other FIXED_CONTROL_TO FIXED_LENGTH_RECORDS FROM GROUP_PROTECTION 91syn keyword pl1Other IDENT IGNORE_LINE_MARKS IN INDEXED INDEX_NUMBER INITIAL_FILL 92syn keyword pl1Other INTO KEY KEYFROM KEYTO LINESIZE LOCK_ON_READ LOCK_ON_WRITE 93syn keyword pl1Other MAIN MANUAL_UNLOCKING MATCH_GREATER MATCH_GREATER_EQUAL 94syn keyword pl1Other MATCH_NEXT MATCH_NEXT_EQUAL MAXIMUM_RECORD_NUMBER 95syn keyword pl1Other MAXIMUM_RECORD_SIZE MULTIBLOCK_COUNT MULTIBUFFER_COUNT 96syn keyword pl1Other NOLOCK NONEXISTENT_RECORD NONRECURSIVE NO_ECHO NO_FILTER 97syn keyword pl1Other NO_SHARE OVERFLOW OFL OWNER_GROUP OWNER_ID OWNER_MEMBER 98syn keyword pl1Other OWNER_PROTECTION P PAGE PAGESIZE PRINTER_FORMAT PROMPT 99syn keyword pl1Other PURGE_TYPE_AHEAD R READ_AHEAD READ_CHECK READ_REGARDLESS 100syn keyword pl1Other RECORD_ID RECORD_ID_ACCESS RECORD_ID_TO RECURSIVE REPEAT 101syn keyword pl1Other RETRIEVAL_POINTERS REVISION_DATE REWIND_ON_CLOSE 102syn keyword pl1Other REWIND_ON_OPEN SCALARVARYING SET SHARED_READ SHARED_WRITE 103syn keyword pl1Other SKIP SPOOL STORAGE STRINGRANGE STRG SUBSCRIPTRANGE SUBRG 104syn keyword pl1Other SUPERSEDE SYSIN SYSPRINT SYSTEM_PROTECTION TAB TEMPORARY 105syn keyword pl1Other TIMEOUT_PERIOD TITLE TO UNDEFINEDFILE UNDF UNDERFLOW UFL 106syn keyword pl1Other UNTIL USER_OPEN VAXCONDITION WAIT_FOR_RECORD WHILE 107syn keyword pl1Other WORLD_PROTECTION WRITE_BEHIND WRITE_CHECK X ZERODIVIDE ZDIV 108 109" PreProcessor keywords 110syn keyword pl1PreProc ACTIVATE DEACTIVATE DECLARE DCL DICTIONARY DO END ERROR 111syn keyword pl1PreProc FATAL GOTO IF INCLUDE INFORM LIST NOLIST PAGE PROCEDURE PROC 112syn keyword pl1PreProc REPLACE RETURN SBTTL TITLE WARN THEN ELSE 113 114" Statements 115syn keyword pl1Statement CALL SUB ENTRY BY NAME CASE CHECK COPY DEFAULT DFT DELAY 116syn keyword pl1Statement DESCRIPTORS DISPLAY EXIT FETCH HALT IGNORE LIST LOCATE 117syn keyword pl1Statement NOCHECK NOLOCK NONE ORDER RANGE RELEASE REORDER REPLY SNAP 118syn keyword pl1Statement SYSTEM TAB UNLOCK WAIT ALLOCATE ALLOC BEGIN CALL CLOSE 119syn keyword pl1Statement DECLARE DCL DELETE DO ELSE END FORMAT GET GOTO GO TO IF 120syn keyword pl1Statement LEAVE NORESCAN ON OPEN OTHERWISE OTHER PROCEDURE PROC PUT 121syn keyword pl1Statement READ RESCAN RETURN REVERT REWRITE SELECT SIGNAL SNAP 122syn keyword pl1Statement STATEMENT STOP SYSTEM THEN WHEN WRITE 123 124" PL1's own keywords 125" syn match pl1Keyword "\<END\>" 126" syn match pl1Keyword "\.COUNT\>"hs=s+1 127" syn match pl1Keyword "\.EXISTS\>"hs=s+1 128" syn match pl1Keyword "\.FIRST\>"hs=s+1 129" syn match pl1Keyword "\.LAST\>"hs=s+1 130" syn match pl1Keyword "\.DELETE\>"hs=s+1 131" syn match pl1Keyword "\.PREV\>"hs=s+1 132" syn match pl1Keyword "\.NEXT\>"hs=s+1 133 134if exists("pl1_highlight_triggers") 135 syn keyword pl1Trigger INSERTING UPDATING DELETING 136endif 137 138" Conditionals. 139syn keyword pl1Conditional ELSIF ELSE IF 140syn match pl1Conditional "\<END\s\+IF\>" 141 142" Loops. 143syn keyword pl1Repeat FOR LOOP WHILE FORALL 144syn match pl1Repeat "\<END\s\+LOOP\>" 145 146" Various types of comments. 147" 20010723az: Added the ability to treat strings within comments just like 148" C does. 149if exists("c_comment_strings") 150 syntax match pl1CommentSkip contained "^\s*\*\($\|\s\+\)" 151 syntax region pl1CommentString contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=pl1CommentSkip 152 syntax region pl1Comment2String contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end="$" 153 syntax region pl1CommentL start="--" skip="\\$" end="$" keepend contains=@pl1CommentGroup,pl1Comment2String,pl1CharLiteral,pl1BooleanLiteral,pl1NumbersCom,pl1SpaceError 154 syntax region pl1Comment start="/\*" end="\*/" contains=@pl1CommentGroup,pl1Comment2String,pl1CharLiteral,pl1BooleanLiteral,pl1NumbersCom,pl1SpaceError 155else 156 syntax region pl1CommentL start="--" skip="\\$" end="$" keepend contains=@pl1CommentGroup,pl1SpaceError 157 syntax region pl1Comment start="/\*" end="\*/" contains=@pl1CommentGroup,pl1SpaceError 158endif 159 160" 20010723az: These are the old comment commands ... commented out. 161" syn match pl1Comment "--.*$" contains=pl1Todo 162" syn region pl1Comment start="/\*" end="\*/" contains=pl1Todo 163syn sync ccomment pl1Comment 164syn sync ccomment pl1CommentL 165 166" To catch unterminated string literals. 167syn match pl1StringError "'.*$" 168 169" Various types of literals. 170" 20010723az: Added stuff for comment matching. 171syn match pl1Numbers transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=pl1IntLiteral,pl1FloatLiteral 172syn match pl1NumbersCom contained transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=pl1IntLiteral,pl1FloatLiteral 173syn match pl1IntLiteral contained "[+-]\=\d\+" 174syn match pl1FloatLiteral contained "[+-]\=\d\+\.\d*" 175syn match pl1FloatLiteral contained "[+-]\=\d*\.\d*" 176"syn match pl1FloatLiteral "[+-]\=\([0-9]*\.[0-9]\+\|[0-9]\+\.[0-9]\+\)\(e[+-]\=[0-9]\+\)\=" 177syn match pl1CharLiteral "'[^']'" 178syn match pl1StringLiteral "'\([^']\|''\)*'" 179syn keyword pl1BooleanLiteral TRUE FALSE NULL 180 181" The built-in types. 182syn keyword pl1Storage ANYDATA ANYTYPE BFILE BINARY_INTEGER BLOB BOOLEAN 183syn keyword pl1Storage BYTE CHAR CHARACTER CLOB CURSOR DATE DAY DEC DECIMAL 184syn keyword pl1Storage DOUBLE DSINTERVAL_UNCONSTRAINED FLOAT HOUR 185syn keyword pl1Storage INT INTEGER INTERVAL LOB LONG MINUTE 186syn keyword pl1Storage MLSLABEL MONTH NATURAL NATURALN NCHAR NCHAR_CS NCLOB 187syn keyword pl1Storage NUMBER NUMERIC NVARCHAR PLS_INT PLS_INTEGER 188syn keyword pl1Storage POSITIVE POSITIVEN PRECISION RAW REAL RECORD 189syn keyword pl1Storage SECOND SIGNTYPE SMALLINT STRING SYS_REFCURSOR TABLE TIME 190syn keyword pl1Storage TIMESTAMP TIMESTAMP_UNCONSTRAINED 191syn keyword pl1Storage TIMESTAMP_TZ_UNCONSTRAINED 192syn keyword pl1Storage TIMESTAMP_LTZ_UNCONSTRAINED UROWID VARCHAR 193syn keyword pl1Storage VARCHAR2 YEAR YMINTERVAL_UNCONSTRAINED ZONE 194 195" A type-attribute is really a type. 196" 20020916bp: Removed leading part of pattern to avoid highlighting the 197" object 198syn match pl1TypeAttribute "%\(TYPE\|ROWTYPE\)\>" 199 200" All other attributes. 201syn match pl1Attribute "%\(BULK_EXCEPTIONS\|BULK_ROWCOUNT\|ISOPEN\|FOUND\|NOTFOUND\|ROWCOUNT\)\>" 202 203" Catch errors caused by wrong parentheses and brackets 204" 20010723az: significantly more powerful than the values -- commented out 205" below the replaced values. This adds the C functionality to PL/SQL. 206syn cluster pl1ParenGroup contains=pl1ParenError,@pl1CommentGroup,pl1CommentSkip,pl1IntLiteral,pl1FloatLiteral,pl1NumbersCom 207if exists("c_no_bracket_error") 208 syn region pl1Paren transparent start='(' end=')' contains=ALLBUT,@pl1ParenGroup 209 syn match pl1ParenError ")" 210 syn match pl1ErrInParen contained "[{}]" 211else 212 syn region pl1Paren transparent start='(' end=')' contains=ALLBUT,@pl1ParenGroup,pl1ErrInBracket 213 syn match pl1ParenError "[\])]" 214 syn match pl1ErrInParen contained "[{}]" 215 syn region pl1Bracket transparent start='\[' end=']' contains=ALLBUT,@pl1ParenGroup,pl1ErrInParen 216 syn match pl1ErrInBracket contained "[);{}]" 217endif 218" syn region pl1Paren transparent start='(' end=')' contains=ALLBUT,pl1ParenError 219" syn match pl1ParenError ")" 220 221" Syntax Synchronizing 222syn sync minlines=10 maxlines=100 223 224" Define the default highlighting. 225" For version 5.x and earlier, only when not done already. 226" For version 5.8 and later, only when and item doesn't have highlighting 227" yet. 228if version >= 508 || !exists("did_pl1_syn_inits") 229 if version < 508 230 let did_pl1_syn_inits = 1 231 command -nargs=+ HiLink hi link <args> 232 else 233 command -nargs=+ HiLink hi def link <args> 234 endif 235 236 HiLink pl1Attribute Macro 237 HiLink pl1BlockError Error 238 HiLink pl1BooleanLiteral Boolean 239 HiLink pl1CharLiteral Character 240 HiLink pl1Comment Comment 241 HiLink pl1CommentL Comment 242 HiLink pl1Conditional Conditional 243 HiLink pl1Error Error 244 HiLink pl1ErrInBracket Error 245 HiLink pl1ErrInBlock Error 246 HiLink pl1ErrInParen Error 247 HiLink pl1Exception Function 248 HiLink pl1FloatLiteral Float 249 HiLink pl1Function Function 250 HiLink pl1Garbage Error 251 HiLink pl1HostIdentifier Label 252 HiLink pl1Identifier Normal 253 HiLink pl1IntLiteral Number 254 HiLink pl1Operator Operator 255 HiLink pl1Paren Normal 256 HiLink pl1ParenError Error 257 HiLink pl1SpaceError Error 258 HiLink pl1Pseudo PreProc 259 HiLink pl1PreProc PreProc 260 HiLink pl1PreProcSym PreProc 261 HiLink pl1Keyword Keyword 262 HiLink pl1Other Keyword 263 HiLink pl1Repeat Repeat 264 HiLink pl1Statement Keyword 265 HiLink pl1Storage StorageClass 266 HiLink pl1StringError Error 267 HiLink pl1StringLiteral String 268 HiLink pl1CommentString String 269 HiLink pl1Comment2String String 270 HiLink pl1Symbol Normal 271 HiLink pl1Trigger Function 272 HiLink pl1TypeAttribute StorageClass 273 HiLink pl1Todo Todo 274 275 delcommand HiLink 276endif 277 278let b:current_syntax = "pl1" 279