1" Vim syntax file: 2" Language: Clipper 5.2 & FlagShip 3" Maintainer: C R Zamana <[email protected]> 4" Some things based on c.vim by Bram Moolenaar and pascal.vim by Mario Eusebio 5" Last Change: 2011 Dec 29 by Thilo Six 6 7" For version 5.x: Clear all syntax items 8" For version 6.x: Quit when a syntax file was already loaded 9if version < 600 10 syntax clear 11elseif exists("b:current_syntax") 12 finish 13endif 14 15let s:cpo_save = &cpo 16set cpo&vim 17 18" Exceptions for my "Very Own" (TM) user variables naming style. 19" If you don't like this, comment it 20syn match clipperUserVariable "\<[a,b,c,d,l,n,o,u,x][A-Z][A-Za-z0-9_]*\>" 21syn match clipperUserVariable "\<[a-z]\>" 22 23" Clipper is case insensitive ( see "exception" above ) 24syn case ignore 25 26" Clipper keywords ( in no particular order ) 27syn keyword clipperStatement ACCEPT APPEND BLANK FROM AVERAGE CALL CANCEL 28syn keyword clipperStatement CLEAR ALL GETS MEMORY TYPEAHEAD CLOSE 29syn keyword clipperStatement COMMIT CONTINUE SHARED NEW PICT 30syn keyword clipperStatement COPY FILE STRUCTURE STRU EXTE TO COUNT 31syn keyword clipperStatement CREATE FROM NIL 32syn keyword clipperStatement DELETE FILE DIR DISPLAY EJECT ERASE FIND GO 33syn keyword clipperStatement INDEX INPUT VALID WHEN 34syn keyword clipperStatement JOIN KEYBOARD LABEL FORM LIST LOCATE MENU TO 35syn keyword clipperStatement NOTE PACK QUIT READ 36syn keyword clipperStatement RECALL REINDEX RELEASE RENAME REPLACE REPORT 37syn keyword clipperStatement RETURN FORM RESTORE 38syn keyword clipperStatement RUN SAVE SEEK SELECT 39syn keyword clipperStatement SKIP SORT STORE SUM TEXT TOTAL TYPE UNLOCK 40syn keyword clipperStatement UPDATE USE WAIT ZAP 41syn keyword clipperStatement BEGIN SEQUENCE 42syn keyword clipperStatement SET ALTERNATE BELL CENTURY COLOR CONFIRM CONSOLE 43syn keyword clipperStatement CURSOR DATE DECIMALS DEFAULT DELETED DELIMITERS 44syn keyword clipperStatement DEVICE EPOCH ESCAPE EXACT EXCLUSIVE FILTER FIXED 45syn keyword clipperStatement FORMAT FUNCTION INTENSITY KEY MARGIN MESSAGE 46syn keyword clipperStatement ORDER PATH PRINTER PROCEDURE RELATION SCOREBOARD 47syn keyword clipperStatement SOFTSEEK TYPEAHEAD UNIQUE WRAP 48syn keyword clipperStatement BOX CLEAR GET PROMPT SAY ? ?? 49syn keyword clipperStatement DELETE TAG GO RTLINKCMD TMP DBLOCKINFO 50syn keyword clipperStatement DBEVALINFO DBFIELDINFO DBFILTERINFO DBFUNCTABLE 51syn keyword clipperStatement DBOPENINFO DBORDERCONDINFO DBORDERCREATEINF 52syn keyword clipperStatement DBORDERINFO DBRELINFO DBSCOPEINFO DBSORTINFO 53syn keyword clipperStatement DBSORTITEM DBTRANSINFO DBTRANSITEM WORKAREA 54 55" Conditionals 56syn keyword clipperConditional CASE OTHERWISE ENDCASE 57syn keyword clipperConditional IF ELSE ENDIF IIF IFDEF IFNDEF 58 59" Loops 60syn keyword clipperRepeat DO WHILE ENDDO 61syn keyword clipperRepeat FOR TO NEXT STEP 62 63" Visibility 64syn keyword clipperStorageClass ANNOUNCE STATIC 65syn keyword clipperStorageClass DECLARE EXTERNAL LOCAL MEMVAR PARAMETERS 66syn keyword clipperStorageClass PRIVATE PROCEDURE PUBLIC REQUEST STATIC 67syn keyword clipperStorageClass FIELD FUNCTION 68syn keyword clipperStorageClass EXIT PROCEDURE INIT PROCEDURE 69 70" Operators 71syn match clipperOperator "$\|%\|&\|+\|-\|->\|!" 72syn match clipperOperator "\.AND\.\|\.NOT\.\|\.OR\." 73syn match clipperOperator ":=\|<\|<=\|<>\|!=\|#\|=\|==\|>\|>=\|@" 74syn match clipperOperator "*" 75 76" Numbers 77syn match clipperNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" 78 79" Includes 80syn region clipperIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ 81syn match clipperIncluded contained "<[^>]*>" 82syn match clipperInclude "^\s*#\s*include\>\s*["<]" contains=clipperIncluded 83 84" String and Character constants 85syn region clipperString start=+"+ end=+"+ 86syn region clipperString start=+'+ end=+'+ 87 88" Delimiters 89syn match ClipperDelimiters "[()]\|[\[\]]\|[{}]\|[||]" 90 91" Special 92syn match clipperLineContinuation ";" 93 94" This is from Bram Moolenaar: 95if exists("c_comment_strings") 96 " A comment can contain cString, cCharacter and cNumber. 97 " But a "*/" inside a cString in a clipperComment DOES end the comment! 98 " So we need to use a special type of cString: clipperCommentString, which 99 " also ends on "*/", and sees a "*" at the start of the line as comment 100 " again. Unfortunately this doesn't very well work for // type of comments :-( 101 syntax match clipperCommentSkip contained "^\s*\*\($\|\s\+\)" 102 syntax region clipperCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=clipperCommentSkip 103 syntax region clipperComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" 104 syntax region clipperComment start="/\*" end="\*/" contains=clipperCommentString,clipperCharacter,clipperNumber,clipperString 105 syntax match clipperComment "//.*" contains=clipperComment2String,clipperCharacter,clipperNumber 106else 107 syn region clipperComment start="/\*" end="\*/" 108 syn match clipperComment "//.*" 109endif 110syntax match clipperCommentError "\*/" 111 112" Lines beggining with an "*" are comments too 113syntax match clipperComment "^\*.*" 114 115 116" Define the default highlighting. 117" For version 5.7 and earlier: only when not done already 118" For version 5.8 and later: only when an item doesn't have highlighting yet 119if version >= 508 || !exists("did_clipper_syntax_inits") 120 if version < 508 121 let did_clipper_syntax_inits = 1 122 command -nargs=+ HiLink hi link <args> 123 else 124 command -nargs=+ HiLink hi def link <args> 125 endif 126 127 HiLink clipperConditional Conditional 128 HiLink clipperRepeat Repeat 129 HiLink clipperNumber Number 130 HiLink clipperInclude Include 131 HiLink clipperComment Comment 132 HiLink clipperOperator Operator 133 HiLink clipperStorageClass StorageClass 134 HiLink clipperStatement Statement 135 HiLink clipperString String 136 HiLink clipperFunction Function 137 HiLink clipperLineContinuation Special 138 HiLink clipperDelimiters Delimiter 139 HiLink clipperUserVariable Identifier 140 141 delcommand HiLink 142endif 143 144let b:current_syntax = "clipper" 145 146let &cpo = s:cpo_save 147unlet s:cpo_save 148" vim: ts=8 149