" Vim syntax file " Language: Embryo " Maintainer: Viktor Kojouharov " Last Change: 2006 10 06 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded if version < 600 syntax clear elseif exists("b:current_syntax") finish endif " A bunch of useful keywords syn keyword embryoConditional if else switch syn keyword embryoRepeat while for do in syn keyword embryoBranch break continue syn keyword embryoOperator new syn keyword embryoType Float State_Param Msg_Type enum syn keyword embryoStatement return with native stock forward syn keyword embryoLabel case default syn keyword embryoReserved public syn keyword embryoEdjeKey PART PROGRAM syn keyword embryoTodo contained TODO FIXME XXX " embryoCommentGroup allows adding matches for special things in comments syn cluster embryoCommentGroup contains=embryoTodo " String and Character constants " Highlight special characters (those which have a backslash) differently syn match embryoSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)" syn region embryoString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=embryoSpecial syn match embryoFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained syn match embryoFormat display "%%" contained syn region embryoString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat syn match embryoCharacter "L\='[^\\]'" syn match embryoCharacter "L'[^']*'" contains=embryoSpecial syn match embryoSpecialError "L\='\\[^'\"?\\abfnrtv]'" syn match embryoSpecialCharacter "L\='\\['\"?\\abfnrtv]'" syn match embryoSpecialCharacter display "L\='\\\o\{1,3}'" syn match embryoSpecialCharacter display "'\\x\x\{1,2}'" syn match embryoSpecialCharacter display "L'\\x\x\+'" "when wanted, highlight trailing white space if exists("embryo_space_errors") if !exists("embryo_no_trail_space_error") syn match embryoSpaceError display excludenl "\s\+$" endif if !exists("embryo_no_tab_space_error") syn match embryoSpaceError display " \+\t"me=e-1 endif endif "catch errors caused by wrong parenthesis and brackets syn cluster embryoParenGroup contains=embryoParenError,embryoIncluded,embryoSpecial,embryoCommentSkip,embryoCommentString,embryoComment2String,@embryoCommentGroup,embryoCommentStartErr,embryoUserCont,embryoUserLabel,embryoBitField,embryoCommentSkip,embryoOctalZero,embryoFormat,embryoNumber,embryoFloat,embryoOctal,embryoOctalError,embryoNumbersCom if exists("embryo_no_bracket_error") syn region embryoParen transparent start='(' end=')' contains=ALLBUT,@embryoParenGroup syn match embryoParenError display ")" syn match embryoErrInParen display contained "[{}]" else syn region embryoParen transparent start='(' end=')' contains=ALLBUT,@embryoParenGroup,embryoErrInBracket syn match embryoParenError display "[\])]" syn match embryoErrInParen display contained "[\]{}]" syn region embryoBracket transparent start='\[' end=']' contains=ALLBUT,@embryoParenGroup,embryoErrInParen syn match embryoErrInBracket display contained "[);{}]" endif syn region embryoBrace start='{' end='}' transparent "integer number, or floating point number without a dot and with "f". syn case ignore syn match embryoNumbers display transparent "\<\d\|\.\d" contains=embryoNumber,embryoFloat,embryoOctalError,embryoOctal " Same, but without octal error (for comments) syn match embryoNumbersCom display contained transparent "\<\d\|\.\d" contains=embryoNumber,embryoFloat,embryoOctal syn match embryoNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" "hex number syn match embryoNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" " Flag the first zero of an octal number as something special syn match embryoOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=embryoOctalZero syn match embryoOctalZero display contained "\<0" syn match embryoFloat display contained "\d\+f" "floating point number, with dot, optional exponent syn match embryoFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" "floating point number, starting with a dot, optional exponent syn match embryoFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" "floating point number, without dot, with exponent syn match embryoFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" " flag an octal number with wrong digits syn match embryoOctalError display contained "0\o*[89]\d*" syn case match if exists("embryo_comment_strings") " A comment can contain embryoString, embryoCharacter and embryoNumber. " But a "*/" inside a embryoString in a embryoComment DOES end the comment! So we " need to use a special type of embryoString: embryoCommentString, 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 embryoCommentSkip contained "^\s*\*\($\|\s\+\)" syntax region embryoCommentString contained start=+L\=\\\@" skip="\\$" end="$" end="//"me=s-1 contains=embryoComment,embryoCharacter,embryoParenError,embryoNumbers,embryoCommentError,embryoSpaceError syn match embryoPreCondit display "^\s*#\s*\(else\|endif\)\>" syn region embryoIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ syn match embryoIncluded display contained "<[^>]*>" syn match embryoInclude display "^\s*#\s*include\>\s*["<]" contains=embryoIncluded syn cluster embryoPreProcGroup contains=embryoPreCondit,embryoIncluded,embryoInclude,embryoDefine,embryoErrInParen,embryoErrInBracket,embryoCommentSkip,embryoCommentString,embryoComment2String,@embryoCommentGroup,embryoCommentStartErr,embryoParen,embryoBracket,embryoMulti,embryoUserLabel syn cluster embryoAlphaNum contains=embryoSpecial,embryoOctalZero,embryoFormat,embryoNumber,embryoFloat,embryoOctal,embryoOctalError,embryoNumbersCom,embryoString syn region embryoDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@embryoPreProcGroup syn region embryoPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@embryoPreProcGroup syn match embryoUserLabel display "\I\i*" contained syn match embryoFunctionName "\h\w*\s*\%((\@=\)" if exists("embryo_minlines") let b:embryo_minlines = embryo_minlines else let b:embryo_minlines = 50 " #if 0 constructs can be long endif exec "syn sync ccomment embryoComment minlines=" . b:embryo_minlines "syn sync fromstart " Define the default highlighting. " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet if version >= 508 || !exists("did_embryo_syn_inits") if version < 508 let did_embryo_syn_inits = 1 command -nargs=+ HiLink hi link else command -nargs=+ HiLink hi def link endif HiLink embryoFormat embryoSpecial HiLink embryoCommentL embryoComment HiLink embryoCommentStart embryoComment HiLink embryoLabel Label HiLink embryoUserLabel Label HiLink embryoConditional Conditional HiLink embryoRepeat Repeat HiLink embryoBranch Conditional HiLink embryoReserved Keyword HiLink embryoCharacter Character HiLink embryoSpecialCharacter cSpecial HiLink embryoNumber Number HiLink embryoOctal Number HiLink embryoOctalZero PreProc " link this to Error if you want HiLink embryoFloat Float HiLink embryoOctalError embryoError HiLink embryoParenError embryoError HiLink embryoErrInParen embryoError HiLink embryoErrInBracket embryoError HiLink embryoCommentError embryoError HiLink embryoCommentStartErr embryoError HiLink embryoSpaceError embryoError HiLink embryoSpecialError embryoError HiLink embryoOperator Operator HiLink embryoStructure Structure HiLink embryoEdjeKey Structure HiLink embryoStorageClass StorageClass HiLink embryoInclude Include HiLink embryoPreProc PreProc HiLink embryoDefine Macro HiLink embryoIncluded embryoString HiLink embryoError Error HiLink embryoStatement Statement HiLink embryoPreCondit PreCondit HiLink embryoType Type HiLink embryoConstant Constant HiLink embryoCommentString embryoString HiLink embryoComment2String embryoString HiLink embryoCommentSkip embryoComment HiLink embryoString String HiLink embryoComment Comment HiLink embryoSpecial SpecialChar HiLink embryoTodo Todo HiLink embryoFunctionName Function delcommand HiLink endif let b:current_syntax = "embryo" " vim: ts=8