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