" 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 command -nargs=+ HiLink hi def link HiLink chillLabel Label HiLink chillUserLabel Label HiLink chillConditional Conditional " hi chillConditional term=bold ctermfg=red guifg=red gui=bold HiLink chillRepeat Repeat HiLink chillProcess Repeat HiLink chillSignal Repeat HiLink chillCharacter Character HiLink chillSpecialCharacter chillSpecial HiLink chillNumber Number HiLink chillFloat Float HiLink chillOctalError chillError HiLink chillParenError chillError HiLink chillInParen chillError HiLink chillCommentError chillError HiLink chillSpaceError chillError HiLink chillOperator Operator HiLink chillStructure Structure HiLink chillBlock Operator HiLink chillScope Operator "hi chillEDML term=underline ctermfg=DarkRed guifg=Red HiLink chillEDML PreProc "hi chillBoolConst term=bold ctermfg=brown guifg=brown HiLink chillBoolConst Constant "hi chillLogical term=bold ctermfg=brown guifg=brown HiLink chillLogical Constant HiLink chillStorageClass StorageClass HiLink chillInclude Include HiLink chillPreProc PreProc HiLink chillDefine Macro HiLink chillIncluded chillString HiLink chillError Error HiLink chillStatement Statement HiLink chillPreCondit PreCondit HiLink chillType Type HiLink chillCommentError chillError HiLink chillCommentString chillString HiLink chillComment2String chillString HiLink chillCommentSkip chillComment HiLink chillString String HiLink chillComment Comment " hi chillComment term=None ctermfg=lightblue guifg=lightblue HiLink chillSpecial SpecialChar HiLink chillTodo Todo HiLink chillBlock Statement "HiLink chillIdentifier Identifier HiLink chillBracket Delimiter delcommand HiLink let b:current_syntax = "chill" " vim: ts=8