3 " Maintainer: YoungSang Yoon <image@lgic.co.kr>
4 " Last change: 2004 Jan 21
7 " first created by image@lgic.co.kr & modified by paris@lgic.co.kr
9 " CHILL (CCITT High Level Programming Language) is used for
10 " developing software of ATM switch at LGIC (LG Information
11 " & Communications LTd.)
14 " For version 5.x: Clear all syntax items
15 " For version 6.x: Quit when a syntax file was already loaded
18 elseif exists("b:current_syntax")
22 " A bunch of useful CHILL keywords
23 syn keyword chillStatement goto GOTO return RETURN returns RETURNS
24 syn keyword chillLabel CASE case ESAC esac
25 syn keyword chillConditional if IF else ELSE elsif ELSIF switch SWITCH THEN then FI fi
26 syn keyword chillLogical NOT not
27 syn keyword chillRepeat while WHILE for FOR do DO od OD TO to
28 syn keyword chillProcess START start STACKSIZE stacksize PRIORITY priority THIS this STOP stop
29 syn keyword chillBlock PROC proc PROCESS process
30 syn keyword chillSignal RECEIVE receive SEND send NONPERSISTENT nonpersistent PERSISTENT peristent SET set EVER ever
32 syn keyword chillTodo contained TODO FIXME XXX
34 " String and Character constants
35 " Highlight special characters (those which have a backslash) differently
36 syn match chillSpecial contained "\\x\x\+\|\\\o\{1,3\}\|\\.\|\\$"
37 syn region chillString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=chillSpecial
38 syn match chillCharacter "'[^\\]'"
39 syn match chillSpecialCharacter "'\\.'"
40 syn match chillSpecialCharacter "'\\\o\{1,3\}'"
42 "when wanted, highlight trailing white space
43 if exists("chill_space_errors")
44 syn match chillSpaceError "\s*$"
45 syn match chillSpaceError " \+\t"me=e-1
48 "catch errors caused by wrong parenthesis
49 syn cluster chillParenGroup contains=chillParenError,chillIncluded,chillSpecial,chillTodo,chillUserCont,chillUserLabel,chillBitField
50 syn region chillParen transparent start='(' end=')' contains=ALLBUT,@chillParenGroup
51 syn match chillParenError ")"
52 syn match chillInParen contained "[{}]"
54 "integer number, or floating point number without a dot and with "f".
56 syn match chillNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
57 "floating point number, with dot, optional exponent
58 syn match chillFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
59 "floating point number, starting with a dot, optional exponent
60 syn match chillFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
61 "floating point number, without dot, with exponent
62 syn match chillFloat "\<\d\+e[-+]\=\d\+[fl]\=\>"
64 syn match chillNumber "\<0x\x\+\(u\=l\=\|lu\)\>"
65 "syn match chillIdentifier "\<[a-z_][a-z0-9_]*\>"
67 " flag an octal number with wrong digits
68 syn match chillOctalError "\<0\o*[89]"
70 if exists("chill_comment_strings")
71 " A comment can contain chillString, chillCharacter and chillNumber.
72 " But a "*/" inside a chillString in a chillComment DOES end the comment! So we
73 " need to use a special type of chillString: chillCommentString, which also ends on
74 " "*/", and sees a "*" at the start of the line as comment again.
75 " Unfortunately this doesn't very well work for // type of comments :-(
76 syntax match chillCommentSkip contained "^\s*\*\($\|\s\+\)"
77 syntax region chillCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=chillSpecial,chillCommentSkip
78 syntax region chillComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=chillSpecial
79 syntax region chillComment start="/\*" end="\*/" contains=chillTodo,chillCommentString,chillCharacter,chillNumber,chillFloat,chillSpaceError
80 syntax match chillComment "//.*" contains=chillTodo,chillComment2String,chillCharacter,chillNumber,chillSpaceError
82 syn region chillComment start="/\*" end="\*/" contains=chillTodo,chillSpaceError
83 syn match chillComment "//.*" contains=chillTodo,chillSpaceError
85 syntax match chillCommentError "\*/"
87 syn keyword chillOperator SIZE size
88 syn keyword chillType dcl DCL int INT char CHAR bool BOOL REF ref LOC loc INSTANCE instance
89 syn keyword chillStructure struct STRUCT enum ENUM newmode NEWMODE synmode SYNMODE
90 "syn keyword chillStorageClass
91 syn keyword chillBlock PROC proc END end
92 syn keyword chillScope GRANT grant SEIZE seize
93 syn keyword chillEDML select SELECT delete DELETE update UPDATE in IN seq SEQ WHERE where INSERT insert include INCLUDE exclude EXCLUDE
94 syn keyword chillBoolConst true TRUE false FALSE
96 syn region chillPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=chillComment,chillString,chillCharacter,chillNumber,chillCommentError,chillSpaceError
97 syn region chillIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
98 syn match chillIncluded contained "<[^>]*>"
99 syn match chillInclude "^\s*#\s*include\>\s*["<]" contains=chillIncluded
100 "syn match chillLineSkip "\\$"
101 syn cluster chillPreProcGroup contains=chillPreCondit,chillIncluded,chillInclude,chillDefine,chillInParen,chillUserLabel
102 syn region chillDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,@chillPreProcGroup
103 syn region chillPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,@chillPreProcGroup
105 " Highlight User Labels
106 syn cluster chillMultiGroup contains=chillIncluded,chillSpecial,chillTodo,chillUserCont,chillUserLabel,chillBitField
107 syn region chillMulti transparent start='?' end=':' contains=ALLBUT,@chillMultiGroup
108 " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
109 syn match chillUserCont "^\s*\I\i*\s*:$" contains=chillUserLabel
110 syn match chillUserCont ";\s*\I\i*\s*:$" contains=chillUserLabel
111 syn match chillUserCont "^\s*\I\i*\s*:[^:]"me=e-1 contains=chillUserLabel
112 syn match chillUserCont ";\s*\I\i*\s*:[^:]"me=e-1 contains=chillUserLabel
114 syn match chillUserLabel "\I\i*" contained
116 " Avoid recognizing most bitfields as labels
117 syn match chillBitField "^\s*\I\i*\s*:\s*[1-9]"me=e-1
118 syn match chillBitField ";\s*\I\i*\s*:\s*[1-9]"me=e-1
120 syn match chillBracket contained "[<>]"
121 if !exists("chill_minlines")
122 let chill_minlines = 15
124 exec "syn sync ccomment chillComment minlines=" . chill_minlines
126 " Define the default highlighting.
127 " For version 5.7 and earlier: only when not done already
128 " For version 5.8 and later: only when an item doesn't have highlighting yet
129 if version >= 508 || !exists("did_ch_syntax_inits")
131 let did_ch_syntax_inits = 1
132 command -nargs=+ HiLink hi link <args>
134 command -nargs=+ HiLink hi def link <args>
137 HiLink chillLabel Label
138 HiLink chillUserLabel Label
139 HiLink chillConditional Conditional
140 " hi chillConditional term=bold ctermfg=red guifg=red gui=bold
142 HiLink chillRepeat Repeat
143 HiLink chillProcess Repeat
144 HiLink chillSignal Repeat
145 HiLink chillCharacter Character
146 HiLink chillSpecialCharacter chillSpecial
147 HiLink chillNumber Number
148 HiLink chillFloat Float
149 HiLink chillOctalError chillError
150 HiLink chillParenError chillError
151 HiLink chillInParen chillError
152 HiLink chillCommentError chillError
153 HiLink chillSpaceError chillError
154 HiLink chillOperator Operator
155 HiLink chillStructure Structure
156 HiLink chillBlock Operator
157 HiLink chillScope Operator
158 "hi chillEDML term=underline ctermfg=DarkRed guifg=Red
159 HiLink chillEDML PreProc
160 "hi chillBoolConst term=bold ctermfg=brown guifg=brown
161 HiLink chillBoolConst Constant
162 "hi chillLogical term=bold ctermfg=brown guifg=brown
163 HiLink chillLogical Constant
164 HiLink chillStorageClass StorageClass
165 HiLink chillInclude Include
166 HiLink chillPreProc PreProc
167 HiLink chillDefine Macro
168 HiLink chillIncluded chillString
169 HiLink chillError Error
170 HiLink chillStatement Statement
171 HiLink chillPreCondit PreCondit
172 HiLink chillType Type
173 HiLink chillCommentError chillError
174 HiLink chillCommentString chillString
175 HiLink chillComment2String chillString
176 HiLink chillCommentSkip chillComment
177 HiLink chillString String
178 HiLink chillComment Comment
179 " hi chillComment term=None ctermfg=lightblue guifg=lightblue
180 HiLink chillSpecial SpecialChar
181 HiLink chillTodo Todo
182 HiLink chillBlock Statement
183 "HiLink chillIdentifier Identifier
184 HiLink chillBracket Delimiter
189 let b:current_syntax = "chill"