" Vim syntax file " Language: CHILL " Maintainer: YoungSang Yoon " Last change: 2004 Jan 21 " " first created by image@lgic.co.kr & modified by paris@lgic.co.kr " CHILL (CCITT High Level Programming Language) is used for " developing software of ATM switch at LGIC (LG Information " & Communications LTd.) " quit when a syntax file was already loaded if exists("b:current_syntax") finish endif " A bunch of useful CHILL keywords syn keyword chillStatement goto GOTO return RETURN returns RETURNS syn keyword chillLabel CASE case ESAC esac syn keyword chillConditional if IF else ELSE elsif ELSIF switch SWITCH THEN then FI fi syn keyword chillLogical NOT not syn keyword chillRepeat while WHILE for FOR do DO od OD TO to syn keyword chillProcess START start STACKSIZE stacksize PRIORITY priority THIS this STOP stop syn keyword chillBlock PROC proc PROCESS process syn keyword chillSignal RECEIVE receive SEND send NONPERSISTENT nonpersistent PERSISTENT peristent SET set EVER ever syn keyword chillTodo contained TODO FIXME XXX " String and Character constants " Highlight special characters (those which have a backslash) differently syn match chillSpecial contained "\\x\x\+\|\\\o\{1,3\}\|\\.\|\\$" syn region chillString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=chillSpecial syn match chillCharacter "'[^\\]'" syn match chillSpecialCharacter "'\\.'" syn match chillSpecialCharacter "'\\\o\{1,3\}'" "when wanted, highlight trailing white space if exists("chill_space_errors") syn match chillSpaceError "\s*$" syn match chillSpaceError " \+\t"me=e-1 endif "catch errors caused by wrong parenthesis syn cluster chillParenGroup contains=chillParenError,chillIncluded,chillSpecial,chillTodo,chillUserCont,chillUserLabel,chillBitField syn region chillParen transparent start='(' end=')' contains=ALLBUT,@chillParenGroup syn match chillParenError ")" syn match chillInParen contained "[{}]" "integer number, or floating point number without a dot and with "f". syn case ignore syn match chillNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" "floating point number, with dot, optional exponent syn match chillFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" "floating point number, starting with a dot, optional exponent syn match chillFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" "floating point number, without dot, with exponent syn match chillFloat "\<\d\+e[-+]\=\d\+[fl]\=\>" "hex number syn match chillNumber "\<0x\x\+\(u\=l\=\|lu\)\>" "syn match chillIdentifier "\<[a-z_][a-z0-9_]*\>" syn case match " flag an octal number with wrong digits syn match chillOctalError "\<0\o*[89]" if exists("chill_comment_strings") " A comment can contain chillString, chillCharacter and chillNumber. " But a "*/" inside a chillString in a chillComment DOES end the comment! So we " need to use a special type of chillString: chillCommentString, which also ends on " "*/", and sees a "*" at the start of the line as comment again. " Unfortunately this doesn't very well work for // type of comments :-( syntax match chillCommentSkip contained "^\s*\*\($\|\s\+\)" syntax region chillCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=chillSpecial,chillCommentSkip syntax region chillComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=chillSpecial syntax region chillComment start="/\*" end="\*/" contains=chillTodo,chillCommentString,chillCharacter,chillNumber,chillFloat,chillSpaceError syntax match chillComment "//.*" contains=chillTodo,chillComment2String,chillCharacter,chillNumber,chillSpaceError else syn region chillComment start="/\*" end="\*/" contains=chillTodo,chillSpaceError syn match chillComment "//.*" contains=chillTodo,chillSpaceError endif syntax match chillCommentError "\*/" syn keyword chillOperator SIZE size syn keyword chillType dcl DCL int INT char CHAR bool BOOL REF ref LOC loc INSTANCE instance syn keyword chillStructure struct STRUCT enum ENUM newmode NEWMODE synmode SYNMODE "syn keyword chillStorageClass syn keyword chillBlock PROC proc END end syn keyword chillScope GRANT grant SEIZE seize syn keyword chillEDML select SELECT delete DELETE update UPDATE in IN seq SEQ WHERE where INSERT insert include INCLUDE exclude EXCLUDE syn keyword chillBoolConst true TRUE false FALSE syn region chillPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=chillComment,chillString,chillCharacter,chillNumber,chillCommentError,chillSpaceError syn region chillIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ syn match chillIncluded contained "<[^>]*>" syn match chillInclude "^\s*#\s*include\>\s*["<]" contains=chillIncluded "syn match chillLineSkip "\\$" syn cluster chillPreProcGroup contains=chillPreCondit,chillIncluded,chillInclude,chillDefine,chillInParen,chillUserLabel syn region chillDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,@chillPreProcGroup syn region chillPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,@chillPreProcGroup " Highlight User Labels syn cluster chillMultiGroup contains=chillIncluded,chillSpecial,chillTodo,chillUserCont,chillUserLabel,chillBitField syn region chillMulti transparent start='?' end=':' contains=ALLBUT,@chillMultiGroup " Avoid matching foo::bar() in C++ by requiring that the next char is not ':' syn match chillUserCont "^\s*\I\i*\s*:$" contains=chillUserLabel syn match chillUserCont ";\s*\I\i*\s*:$" contains=chillUserLabel syn match chillUserCont "^\s*\I\i*\s*:[^:]"me=e-1 contains=chillUserLabel syn match chillUserCont ";\s*\I\i*\s*:[^:]"me=e-1 contains=chillUserLabel syn match chillUserLabel "\I\i*" contained " Avoid recognizing most bitfields as labels syn match chillBitField "^\s*\I\i*\s*:\s*[1-9]"me=e-1 syn match chillBitField ";\s*\I\i*\s*:\s*[1-9]"me=e-1 syn match chillBracket contained "[<>]" if !exists("chill_minlines") let chill_minlines = 15 endif exec "syn sync ccomment chillComment minlines=" . chill_minlines " Define the default highlighting. " Only when an item doesn't have highlighting yet hi def link chillLabel Label hi def link chillUserLabel Label hi def link chillConditional Conditional " hi def link chillConditional term=bold ctermfg=red guifg=red gui=bold hi def link chillRepeat Repeat hi def link chillProcess Repeat hi def link chillSignal Repeat hi def link chillCharacter Character hi def link chillSpecialCharacter chillSpecial hi def link chillNumber Number hi def link chillFloat Float hi def link chillOctalError chillError hi def link chillParenError chillError hi def link chillInParen chillError hi def link chillCommentError chillError hi def link chillSpaceError chillError hi def link chillOperator Operator hi def link chillStructure Structure hi def link chillBlock Operator hi def link chillScope Operator "hi def link chillEDML term=underline ctermfg=DarkRed guifg=Red hi def link chillEDML PreProc "hi def link chillBoolConst term=bold ctermfg=brown guifg=brown hi def link chillBoolConst Constant "hi def link chillLogical term=bold ctermfg=brown guifg=brown hi def link chillLogical Constant hi def link chillStorageClass StorageClass hi def link chillInclude Include hi def link chillPreProc PreProc hi def link chillDefine Macro hi def link chillIncluded chillString hi def link chillError Error hi def link chillStatement Statement hi def link chillPreCondit PreCondit hi def link chillType Type hi def link chillCommentError chillError hi def link chillCommentString chillString hi def link chillComment2String chillString hi def link chillCommentSkip chillComment hi def link chillString String hi def link chillComment Comment " hi def link chillComment term=None ctermfg=lightblue guifg=lightblue hi def link chillSpecial SpecialChar hi def link chillTodo Todo hi def link chillBlock Statement "hi def link chillIdentifier Identifier hi def link chillBracket Delimiter let b:current_syntax = "chill" " vim: ts=8