vim-polyglot/syntax/chill.vim
2017-09-27 20:43:42 +02:00

183 lines
7.9 KiB
VimL

if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1
" Vim syntax file
" Language: CHILL
" Maintainer: YoungSang Yoon <image@lgic.co.kr>
" 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
endif