Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim syntax file |
| 2 | " Language: Oracle Procedureal SQL (PL/SQL) |
| 3 | " Maintainer: Jeff Lanzarotta (jefflanzarotta at yahoo dot com) |
| 4 | " Original Maintainer: C. Laurence Gonsalves (clgonsal@kami.com) |
| 5 | " URL: http://lanzarotta.tripod.com/vim/syntax/plsql.vim.zip |
| 6 | " Last Change: September 18, 2002 |
| 7 | " History: Geoff Evans & Bill Pribyl (bill at plnet dot org) |
| 8 | " Added 9i keywords. |
| 9 | " Austin Ziegler (austin at halostatue dot ca) |
| 10 | " Added 8i+ features. |
| 11 | " |
| 12 | " For version 5.x, clear all syntax items. |
| 13 | " For version 6.x, quit when a syntax file was already loaded. |
| 14 | if version < 600 |
| 15 | syntax clear |
| 16 | elseif exists("b:current_syntax") |
| 17 | finish |
| 18 | endif |
| 19 | |
| 20 | " Todo. |
| 21 | syn keyword plsqlTodo TODO FIXME XXX DEBUG NOTE |
| 22 | syn cluster plsqlCommentGroup contains=plsqlTodo |
| 23 | |
| 24 | syn case ignore |
| 25 | |
| 26 | syn match plsqlGarbage "[^ \t()]" |
| 27 | syn match plsqlIdentifier "[a-z][a-z0-9$_#]*" |
| 28 | syn match plsqlHostIdentifier ":[a-z][a-z0-9$_#]*" |
| 29 | |
| 30 | " When wanted, highlight the trailing whitespace. |
| 31 | if exists("c_space_errors") |
| 32 | if !exists("c_no_trail_space_error") |
| 33 | syn match plsqlSpaceError "\s\+$" |
| 34 | endif |
| 35 | |
| 36 | if !exists("c_no_tab_space_error") |
| 37 | syn match plsqlSpaceError " \+\t"me=e-1 |
| 38 | endif |
| 39 | endif |
| 40 | |
| 41 | " Symbols. |
| 42 | syn match plsqlSymbol "\(;\|,\|\.\)" |
| 43 | |
| 44 | " Operators. |
| 45 | syn match plsqlOperator "\(+\|-\|\*\|/\|=\|<\|>\|@\|\*\*\|!=\|\~=\)" |
| 46 | syn match plsqlOperator "\(^=\|<=\|>=\|:=\|=>\|\.\.\|||\|<<\|>>\|\"\)" |
| 47 | |
| 48 | " Some of Oracle's SQL keywords. |
| 49 | syn keyword plsqlSQLKeyword ABORT ACCESS ACCESSED ADD AFTER ALL ALTER AND ANY |
| 50 | syn keyword plsqlSQLKeyword AS ASC ATTRIBUTE AUDIT AUTHORIZATION AVG BASE_TABLE |
| 51 | syn keyword plsqlSQLKeyword BEFORE BETWEEN BY CASCADE CAST CHECK CLUSTER |
| 52 | syn keyword plsqlSQLKeyword CLUSTERS COLAUTH COLUMN COMMENT COMPRESS CONNECT |
| 53 | syn keyword plsqlSQLKeyword CONSTRAINT CRASH CREATE CURRENT DATA DATABASE |
| 54 | syn keyword plsqlSQLKeyword DATA_BASE DBA DEFAULT DELAY DELETE DESC DISTINCT |
| 55 | syn keyword plsqlSQLKeyword DROP DUAL ELSE EXCLUSIVE EXISTS EXTENDS EXTRACT |
| 56 | syn keyword plsqlSQLKeyword FILE FORCE FOREIGN FROM GRANT GROUP HAVING HEAP |
| 57 | syn keyword plsqlSQLKeyword IDENTIFIED IDENTIFIER IMMEDIATE IN INCLUDING |
| 58 | syn keyword plsqlSQLKeyword INCREMENT INDEX INDEXES INITIAL INSERT INSTEAD |
| 59 | syn keyword plsqlSQLKeyword INTERSECT INTO INVALIDATE IS ISOLATION KEY LIBRARY |
| 60 | syn keyword plsqlSQLKeyword LIKE LOCK MAXEXTENTS MINUS MODE MODIFY MULTISET |
| 61 | syn keyword plsqlSQLKeyword NESTED NOAUDIT NOCOMPRESS NOT NOWAIT OF OFF OFFLINE |
| 62 | syn keyword plsqlSQLKeyword ON ONLINE OPERATOR OPTION OR ORDER ORGANIZATION |
| 63 | syn keyword plsqlSQLKeyword PCTFREE PRIMARY PRIOR PRIVATE PRIVILEGES PUBLIC |
| 64 | syn keyword plsqlSQLKeyword QUOTA RELEASE RENAME REPLACE RESOURCE REVOKE ROLLBACK |
| 65 | syn keyword plsqlSQLKeyword ROW ROWLABEL ROWS SCHEMA SELECT SEPARATE SESSION SET |
| 66 | syn keyword plsqlSQLKeyword SHARE SIZE SPACE START STORE SUCCESSFUL SYNONYM |
| 67 | syn keyword plsqlSQLKeyword SYSDATE TABLE TABLES TABLESPACE TEMPORARY TO TREAT |
| 68 | syn keyword plsqlSQLKeyword TRIGGER TRUNCATE UID UNION UNIQUE UNLIMITED UPDATE |
| 69 | syn keyword plsqlSQLKeyword USE USER VALIDATE VALUES VIEW WHENEVER WHERE WITH |
| 70 | |
| 71 | " PL/SQL's own keywords. |
| 72 | syn keyword plsqlKeyword AGENT AND ANY ARRAY ASSIGN AS AT AUTHID BEGIN BODY BY |
| 73 | syn keyword plsqlKeyword BULK C CASE CHAR_BASE CHARSETFORM CHARSETID CLOSE |
| 74 | syn keyword plsqlKeyword COLLECT CONSTANT CONSTRUCTOR CONTEXT CURRVAL DECLARE |
| 75 | syn keyword plsqlKeyword DVOID EXCEPTION EXCEPTION_INIT EXECUTE EXIT FETCH |
| 76 | syn keyword plsqlKeyword FINAL FUNCTION GOTO HASH IMMEDIATE IN INDICATOR |
| 77 | syn keyword plsqlKeyword INSTANTIABLE IS JAVA LANGUAGE LIBRARY MAP MAXLEN |
| 78 | syn keyword plsqlKeyword MEMBER NAME NEW NOCOPY NUMBER_BASE OBJECT OCICOLL |
| 79 | syn keyword plsqlKeyword OCIDATE OCIDATETIME OCILOBLOCATOR OCINUMBER OCIRAW |
| 80 | syn keyword plsqlKeyword OCISTRING OF OPAQUE OPEN OR ORDER OTHERS OUT |
| 81 | syn keyword plsqlKeyword OVERRIDING PACKAGE PARALLEL_ENABLE PARAMETERS |
| 82 | syn keyword plsqlKeyword PARTITION PIPELINED PRAGMA PROCEDURE RAISE RANGE REF |
| 83 | syn keyword plsqlKeyword RESULT RETURN REVERSE ROWTYPE SB1 SELF SHORT SIZE_T |
| 84 | syn keyword plsqlKeyword SQL SQLCODE SQLERRM STATIC STRUCT SUBTYPE TDO THEN |
| 85 | syn keyword plsqlKeyword TABLE TIMEZONE_ABBR TIMEZONE_HOUR TIMEZONE_MINUTE |
| 86 | syn keyword plsqlKeyword TIMEZONE_REGION TYPE UNDER UNSIGNED USING VARIANCE |
| 87 | syn keyword plsqlKeyword VARRAY VARYING WHEN WRITE |
| 88 | syn match plsqlKeyword "\<END\>" |
| 89 | syn match plsqlKeyword "\.COUNT\>"hs=s+1 |
| 90 | syn match plsqlKeyword "\.EXISTS\>"hs=s+1 |
| 91 | syn match plsqlKeyword "\.FIRST\>"hs=s+1 |
| 92 | syn match plsqlKeyword "\.LAST\>"hs=s+1 |
| 93 | syn match plsqlKeyword "\.DELETE\>"hs=s+1 |
| 94 | syn match plsqlKeyword "\.PREV\>"hs=s+1 |
| 95 | syn match plsqlKeyword "\.NEXT\>"hs=s+1 |
| 96 | |
| 97 | " PL/SQL functions. |
| 98 | syn keyword plsqlFunction ABS ACOS ADD_MONTHS ASCII ASCIISTR ASIN ATAN ATAN2 |
| 99 | syn keyword plsqlFunction BFILENAME BITAND CEIL CHARTOROWID CHR COALESCE |
| 100 | syn keyword plsqlFunction COMMIT COMMIT_CM COMPOSE CONCAT CONVERT COS COSH |
| 101 | syn keyword plsqlFunction COUNT CUBE CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP |
| 102 | syn keyword plsqlFunction DBTIMEZONE DECODE DECOMPOSE DEREF DUMP EMPTY_BLOB |
| 103 | syn keyword plsqlFunction EMPTY_CLOB EXISTS EXP FLOOR FROM_TZ GETBND GLB |
| 104 | syn keyword plsqlFunction GREATEST GREATEST_LB GROUPING HEXTORAW INITCAP |
| 105 | syn keyword plsqlFunction INSTR INSTR2 INSTR4 INSTRB INSTRC ISNCHAR LAST_DAY |
| 106 | syn keyword plsqlFunction LEAST LEAST_UB LENGTH LENGTH2 LENGTH4 LENGTHB LENGTHC |
| 107 | syn keyword plsqlFunction LN LOCALTIME LOCALTIMESTAMP LOG LOWER LPAD |
| 108 | syn keyword plsqlFunction LTRIM LUB MAKE_REF MAX MIN MOD MONTHS_BETWEEN |
| 109 | syn keyword plsqlFunction NCHARTOROWID NCHR NEW_TIME NEXT_DAY NHEXTORAW |
| 110 | syn keyword plsqlFunction NLS_CHARSET_DECL_LEN NLS_CHARSET_ID NLS_CHARSET_NAME |
| 111 | syn keyword plsqlFunction NLS_INITCAP NLS_LOWER NLSSORT NLS_UPPER NULLFN NULLIF |
| 112 | syn keyword plsqlFunction NUMTODSINTERVAL NUMTOYMINTERVAL NVL POWER |
| 113 | syn keyword plsqlFunction RAISE_APPLICATION_ERROR RAWTOHEX RAWTONHEX REF |
| 114 | syn keyword plsqlFunction REFTOHEX REPLACE ROLLBACK_NR ROLLBACK_SV ROLLUP ROUND |
| 115 | syn keyword plsqlFunction ROWIDTOCHAR ROWIDTONCHAR ROWLABEL RPAD RTRIM |
| 116 | syn keyword plsqlFunction SAVEPOINT SESSIONTIMEZONE SETBND SET_TRANSACTION_USE |
| 117 | syn keyword plsqlFunction SIGN SIN SINH SOUNDEX SQLCODE SQLERRM SQRT STDDEV |
| 118 | syn keyword plsqlFunction SUBSTR SUBSTR2 SUBSTR4 SUBSTRB SUBSTRC SUM |
| 119 | syn keyword plsqlFunction SYS_AT_TIME_ZONE SYS_CONTEXT SYSDATE SYS_EXTRACT_UTC |
| 120 | syn keyword plsqlFunction SYS_GUID SYS_LITERALTODATE SYS_LITERALTODSINTERVAL |
| 121 | syn keyword plsqlFunction SYS_LITERALTOTIME SYS_LITERALTOTIMESTAMP |
| 122 | syn keyword plsqlFunction SYS_LITERALTOTZTIME SYS_LITERALTOTZTIMESTAMP |
| 123 | syn keyword plsqlFunction SYS_LITERALTOYMINTERVAL SYS_OVER__DD SYS_OVER__DI |
| 124 | syn keyword plsqlFunction SYS_OVER__ID SYS_OVER_IID SYS_OVER_IIT |
| 125 | syn keyword plsqlFunction SYS_OVER__IT SYS_OVER__TI SYS_OVER__TT |
| 126 | syn keyword plsqlFunction SYSTIMESTAMP TAN TANH TO_ANYLOB TO_BLOB TO_CHAR |
| 127 | syn keyword plsqlFunction TO_CLOB TO_DATE TO_DSINTERVAL TO_LABEL TO_MULTI_BYTE |
| 128 | syn keyword plsqlFunction TO_NCHAR TO_NCLOB TO_NUMBER TO_RAW TO_SINGLE_BYTE |
| 129 | syn keyword plsqlFunction TO_TIME TO_TIMESTAMP TO_TIMESTAMP_TZ TO_TIME_TZ |
| 130 | syn keyword plsqlFunction TO_YMINTERVAL TRANSLATE TREAT TRIM TRUNC TZ_OFFSET UID |
| 131 | syn keyword plsqlFunction UNISTR UPPER UROWID USER USERENV VALUE VARIANCE |
| 132 | syn keyword plsqlFunction VSIZE WORK XOR |
| 133 | syn match plsqlFunction "\<SYS\$LOB_REPLICATION\>" |
| 134 | |
| 135 | " PL/SQL Exceptions |
| 136 | syn keyword plsqlException ACCESS_INTO_NULL CASE_NOT_FOUND COLLECTION_IS_NULL |
| 137 | syn keyword plsqlException CURSOR_ALREADY_OPEN DUP_VAL_ON_INDEX INVALID_CURSOR |
| 138 | syn keyword plsqlException INVALID_NUMBER LOGIN_DENIED NO_DATA_FOUND |
| 139 | syn keyword plsqlException NOT_LOGGED_ON PROGRAM_ERROR ROWTYPE_MISMATCH |
| 140 | syn keyword plsqlException SELF_IS_NULL STORAGE_ERROR SUBSCRIPT_BEYOND_COUNT |
| 141 | syn keyword plsqlException SUBSCRIPT_OUTSIDE_LIMIT SYS_INVALID_ROWID |
| 142 | syn keyword plsqlException TIMEOUT_ON_RESOURCE TOO_MANY_ROWS VALUE_ERROR |
| 143 | syn keyword plsqlException ZERO_DIVIDE |
| 144 | |
| 145 | " Oracle Pseudo Colums. |
| 146 | syn keyword plsqlPseudo CURRVAL LEVEL NEXTVAL ROWID ROWNUM |
| 147 | |
| 148 | if exists("plsql_highlight_triggers") |
| 149 | syn keyword plsqlTrigger INSERTING UPDATING DELETING |
| 150 | endif |
| 151 | |
| 152 | " Conditionals. |
| 153 | syn keyword plsqlConditional ELSIF ELSE IF |
| 154 | syn match plsqlConditional "\<END\s\+IF\>" |
| 155 | |
| 156 | " Loops. |
| 157 | syn keyword plsqlRepeat FOR LOOP WHILE FORALL |
| 158 | syn match plsqlRepeat "\<END\s\+LOOP\>" |
| 159 | |
| 160 | " Various types of comments. |
| 161 | if exists("c_comment_strings") |
| 162 | syntax match plsqlCommentSkip contained "^\s*\*\($\|\s\+\)" |
| 163 | syntax region plsqlCommentString contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=plsqlCommentSkip |
| 164 | syntax region plsqlComment2String contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end="$" |
| 165 | syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend contains=@plsqlCommentGroup,plsqlComment2String,plsqlCharLiteral,plsqlBooleanLiteral,plsqlNumbersCom,plsqlSpaceError |
| 166 | syntax region plsqlComment start="/\*" end="\*/" contains=@plsqlCommentGroup,plsqlComment2String,plsqlCharLiteral,plsqlBooleanLiteral,plsqlNumbersCom,plsqlSpaceError |
| 167 | else |
| 168 | syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend contains=@plsqlCommentGroup,plsqlSpaceError |
| 169 | syntax region plsqlComment start="/\*" end="\*/" contains=@plsqlCommentGroup,plsqlSpaceError |
| 170 | endif |
| 171 | |
| 172 | syn sync ccomment plsqlComment |
| 173 | syn sync ccomment plsqlCommentL |
| 174 | |
| 175 | " To catch unterminated string literals. |
| 176 | syn match plsqlStringError "'.*$" |
| 177 | |
| 178 | " Various types of literals. |
| 179 | syn match plsqlNumbers transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=plsqlIntLiteral,plsqlFloatLiteral |
| 180 | syn match plsqlNumbersCom contained transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=plsqlIntLiteral,plsqlFloatLiteral |
| 181 | syn match plsqlIntLiteral contained "[+-]\=\d\+" |
| 182 | syn match plsqlFloatLiteral contained "[+-]\=\d\+\.\d*" |
| 183 | syn match plsqlFloatLiteral contained "[+-]\=\d*\.\d*" |
| 184 | syn match plsqlCharLiteral "'[^']'" |
| 185 | syn match plsqlStringLiteral "'\([^']\|''\)*'" |
| 186 | syn keyword plsqlBooleanLiteral TRUE FALSE NULL |
| 187 | |
| 188 | " The built-in types. |
| 189 | syn keyword plsqlStorage ANYDATA ANYTYPE BFILE BINARY_INTEGER BLOB BOOLEAN |
| 190 | syn keyword plsqlStorage BYTE CHAR CHARACTER CLOB CURSOR DATE DAY DEC DECIMAL |
| 191 | syn keyword plsqlStorage DOUBLE DSINTERVAL_UNCONSTRAINED FLOAT HOUR |
| 192 | syn keyword plsqlStorage INT INTEGER INTERVAL LOB LONG MINUTE |
| 193 | syn keyword plsqlStorage MLSLABEL MONTH NATURAL NATURALN NCHAR NCHAR_CS NCLOB |
| 194 | syn keyword plsqlStorage NUMBER NUMERIC NVARCHAR PLS_INT PLS_INTEGER |
| 195 | syn keyword plsqlStorage POSITIVE POSITIVEN PRECISION RAW REAL RECORD |
| 196 | syn keyword plsqlStorage SECOND SIGNTYPE SMALLINT STRING SYS_REFCURSOR TABLE TIME |
| 197 | syn keyword plsqlStorage TIMESTAMP TIMESTAMP_UNCONSTRAINED |
| 198 | syn keyword plsqlStorage TIMESTAMP_TZ_UNCONSTRAINED |
| 199 | syn keyword plsqlStorage TIMESTAMP_LTZ_UNCONSTRAINED UROWID VARCHAR |
| 200 | syn keyword plsqlStorage VARCHAR2 YEAR YMINTERVAL_UNCONSTRAINED ZONE |
| 201 | |
| 202 | " A type-attribute is really a type. |
| 203 | syn match plsqlTypeAttribute "%\(TYPE\|ROWTYPE\)\>" |
| 204 | |
| 205 | " All other attributes. |
| 206 | syn match plsqlAttribute "%\(BULK_EXCEPTIONS\|BULK_ROWCOUNT\|ISOPEN\|FOUND\|NOTFOUND\|ROWCOUNT\)\>" |
| 207 | |
| 208 | " This'll catch mis-matched close-parens. |
| 209 | syn cluster plsqlParenGroup contains=plsqlParenError,@plsqlCommentGroup,plsqlCommentSkip,plsqlIntLiteral,plsqlFloatLiteral,plsqlNumbersCom |
| 210 | if exists("c_no_bracket_error") |
| 211 | syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup |
| 212 | syn match plsqlParenError ")" |
| 213 | syn match plsqlErrInParen contained "[{}]" |
| 214 | else |
| 215 | syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInBracket |
| 216 | syn match plsqlParenError "[\])]" |
| 217 | syn match plsqlErrInParen contained "[{}]" |
| 218 | syn region plsqlBracket transparent start='\[' end=']' contains=ALLBUT,@plsqlParenGroup,plsqlErrInParen |
| 219 | syn match plsqlErrInBracket contained "[);{}]" |
| 220 | endif |
| 221 | |
| 222 | " Syntax Synchronizing |
| 223 | syn sync minlines=10 maxlines=100 |
| 224 | |
| 225 | " Define the default highlighting. |
| 226 | " For version 5.x and earlier, only when not done already. |
| 227 | " For version 5.8 and later, only when an item doesn't have highlighting yet. |
| 228 | if version >= 508 || !exists("did_plsql_syn_inits") |
| 229 | if version < 508 |
| 230 | let did_plsql_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 plsqlAttribute Macro |
| 237 | HiLink plsqlBlockError Error |
| 238 | HiLink plsqlBooleanLiteral Boolean |
| 239 | HiLink plsqlCharLiteral Character |
| 240 | HiLink plsqlComment Comment |
| 241 | HiLink plsqlCommentL Comment |
| 242 | HiLink plsqlConditional Conditional |
| 243 | HiLink plsqlError Error |
| 244 | HiLink plsqlErrInBracket Error |
| 245 | HiLink plsqlErrInBlock Error |
| 246 | HiLink plsqlErrInParen Error |
| 247 | HiLink plsqlException Function |
| 248 | HiLink plsqlFloatLiteral Float |
| 249 | HiLink plsqlFunction Function |
| 250 | HiLink plsqlGarbage Error |
| 251 | HiLink plsqlHostIdentifier Label |
| 252 | HiLink plsqlIdentifier Normal |
| 253 | HiLink plsqlIntLiteral Number |
| 254 | HiLink plsqlOperator Operator |
| 255 | HiLink plsqlParen Normal |
| 256 | HiLink plsqlParenError Error |
| 257 | HiLink plsqlSpaceError Error |
| 258 | HiLink plsqlPseudo PreProc |
| 259 | HiLink plsqlKeyword Keyword |
| 260 | HiLink plsqlRepeat Repeat |
| 261 | HiLink plsqlStorage StorageClass |
| 262 | HiLink plsqlSQLKeyword Function |
| 263 | HiLink plsqlStringError Error |
| 264 | HiLink plsqlStringLiteral String |
| 265 | HiLink plsqlCommentString String |
| 266 | HiLink plsqlComment2String String |
| 267 | HiLink plsqlSymbol Normal |
| 268 | HiLink plsqlTrigger Function |
| 269 | HiLink plsqlTypeAttribute StorageClass |
| 270 | HiLink plsqlTodo Todo |
| 271 | |
| 272 | delcommand HiLink |
| 273 | endif |
| 274 | |
| 275 | let b:current_syntax = "plsql" |
| 276 | |
| 277 | " vim: ts=8 sw=2 |