" Vim syntax file " Language: Small " Maintainer: Casey Zacek " Last Change: 2002 May 02 " Used c.vim as a template (by Bram Moolenaar) " 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 syn sync maxlines=100 syn sync fromstart syn keyword smaTodo contained TODO FIXME XXX " smaCommentGroup allows adding matches for special things in comments syn cluster smaCommentGroup contains=cTodo syn match smaFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained syn match smaFormat display "%%" contained syn region smaString start=+"+ skip=+\^"+ end=+"+ contains=smaSpecial,smaFormat syn match smaCharacter "'[^\^]'" syn match smaSpecialError "'\^[^\^'\"abefnrtv]'" syn match smaSpecialChar "'\^[\^'\"abefnrtv]'" syn match smaSpecialChar display "'\^\d\{3};\='" "when wanted, highlight trailing white space "if exists("sma_space_errors") if !exists("sma_no_trail_space_error") syn match smaSpaceError display excludenl "\s\+$" endif if !exists("sma_no_tab_space_error") syn match smaSpaceError display " \+\t"me=e-1 endif "endif "catch errors caused by wrong parenthesis and brackets syn cluster smaParenGroup contains=smaParenError,smaIncluded,smaSpecial,smaCommentSkip,smaCommentString,smaComment2String,@smaCommentGroup,smaCommentStartError,smaCommentSkip,smaFormat,smaNumber,smaNumbers if exists("sma_no_bracket_error") syn region smaParen transparent start='(' end=')' contains=ALLBUT,@smaParenGroup syn match smaParenError display ")" syn match smaErrInParen display contained "[{}]" else syn region smaParen transparent start='(' end=')' contains=ALLBUT,@smaParenGroup,smaErrInBracket syn match smaParenError display "[\])]" syn match smaErrInParen display contained "[\]{}]" syn region smaBracket transparent start='\[' end=']' contains=ALLBUT,@smaParenGroup,smaErrInParen syn match smaErrInBracket display contained "[);{}]" endif syn case ignore syn match smaNumbers display transparent "\<[0-9_]\|\.[0-9_]" contains=smaNumber " decimal number syn match smaNumber display contained "[0-9_]\+\>" " binary number syn match smaNumber display contained "0b[01_]\+\>" " hex number syn match smaNumber display contained "0x[0-9a-f_]\+\>" " floating point number with no dot or exponent syn match smaNumber display contained "[0-9_\.]\+" " floating point number, with dot, optional exponent syn match smaNumber display contained "[0-9_]\+\.[0-9_]*\(e[-+]\=[0-9_]\+\)\=" " floating point number, starting with a dot, optional exponent syn match smaNumber display contained "\.[0-9_]\+\(e[-+]\=[0-9_]\+\)\=\>" " floating point number, without dot, with exponent syn match smaNumber display contained "[0-9_]\+e[-+]\=[0-9_]\+\>" syn case match if exists("sma_comment_strings") " A comment can contain smaString, smaCharacter and smaNumber. " But a "*/" inside a smaString in a smaComment DOES end the comment! So we " need to use a special type of smaString: smaCommentString, 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 smaCommentSkip contained "^\s*\*\($\|\s\+\)" syntax region smaCommentString contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=smaSpecial,smaCommentSkip syntax region smaComment2String contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=smaSpecial syntax region smaCommentL start="//" skip="\\$" end="$" keepend contains=@smaCommentGroup,smaComment2String,smaCharacter,smaNumbers,smaSpaceError syntax region smaComment matchgroup=smaCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@smaCommentGroup,smaCommentStartError,smaCommentString,smaCharacter,smaNumbers,smaSpaceError else syn region smaCommentL start="//" skip="\\$" end="$" keepend contains=@smaCommentGroup,smaSpaceError syn region smaComment matchgroup=smaCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@smaCommentGroup,smaCommentStartError,smaSpaceError endif " keep a // comment separately, it terminates a preproc. conditional syntax match smaCommentError display "\*/" syntax match smaCommentStartError display "/\*"me=e-1 contained syn keyword smaOperator char defined sizeof syn keyword smaLabel case default syn keyword smaStatement assert break continue exit syn keyword smaStatement goto return sleep syn keyword smaConditional if else switch syn keyword smaRepeat while for do syn keyword smaStructure enum syn keyword smaStorageClass const forward native new syn keyword smaStorageClass operator public static stock syn keyword smaConstant false true cellbits cellmax cellmin charbits syn keyword smaConstant charmax charmin debug _Small bool fixed float syn region smaPreCondit start="^\s*#\s*if\>" skip="\\$" end="$" end="//"me=s-1 contains=smaComment,smaCharacter,smaParenError,smaNumbers,smaCommentError,smaSpaceError syn match smaPreCondit display "^\s*#\s*\(else\|endif\)\>" syn region smaIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ syn match smaIncluded display contained "<[^>]*>" syn match smaInclude display "^\s*#\s*include\>\s*["<]" contains=smaIncluded syn region smaEndScript start="^\s*#\s*endscript\>" skip="." end="." contains=@smaCommentGroup,smaCommentStartError,smaSpaceError fold "syn match smaLineSkip "\\$" syn cluster smaPreProcGroup contains=smaPreCondit,smaIncluded,smaInclude,smaDefine,smaErrInParen,smaErrInBracket,smaSpecial,smaFormat,smaNumber,smaNumbers,smaString,smaCommentSkip,smaCommentString,smaComment2String,@smaCommentGroup,smaCommentStartError,smaParen,smaBracket syn region smaDefine start="^\s*#\s*define\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@smaPreProcGroup syn region smaPreProc start="^\s*#\s*\(pragma\>\|assert\>\|emit\>\|endinput\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@smaPreProcGroup " 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_sma_syn_inits") if version < 508 let did_sma_syn_inits = 1 command -nargs=+ HiLink hi link else command -nargs=+ HiLink hi def link endif HiLink smaFormat smaSpecial HiLink smaCommentL smaComment HiLink smaCommentStart smaComment HiLink smaLabel Label HiLink smaConditional Conditional HiLink smaRepeat Repeat HiLink smaCharacter Character HiLink smaSpecialChar smaSpecial HiLink smaNumber Number HiLink smaParenError smaError HiLink smaErrInParen smaError HiLink smaErrInBracket smaError HiLink smaCommentError smaError HiLink smaCommentStartError smaError HiLink smaSpaceError smaError HiLink smaSpecialError smaError HiLink smaOperator Operator HiLink smaStructure Structure HiLink smaStorageClass StorageClass HiLink smaInclude Include HiLink smaPreProc PreProc HiLink smaDefine Macro HiLink smaIncluded smaString HiLink smaError Error HiLink smaStatement Statement HiLink smaPreCondit PreCondit HiLink smaConstant Constant HiLink smaCommentString cString HiLink smaComment2String smaString HiLink smaCommentSkip smaComment HiLink smaString String HiLink smaComment Comment HiLink smaEndScript Comment HiLink smaSpecial SpecialChar HiLink smaTodo Todo delcommand HiLink endif let b:current_syntax = "c" " vim: ts=8