| " Vim syntax file |
| " Language: TADS |
| " Maintainer: Amir Karger <karger@post.harvard.edu> |
| " $Date: 2004/06/13 19:28:45 $ |
| " $Revision: 1.1 $ |
| " Stolen from: Bram Moolenaar's C language file |
| " Newest version at: http://www.hec.utah.edu/~karger/vim/syntax/tads.vim |
| " History info at the bottom of the file |
| |
| " TODO lots more keywords |
| " global, self, etc. are special *objects*, not functions. They should |
| " probably be a different color than the special functions |
| " Actually, should cvtstr etc. be functions?! (change tadsFunction) |
| " Make global etc. into Identifiers, since we don't have regular variables? |
| |
| " 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 tadsStatement goto break return continue pass |
| syn keyword tadsLabel case default |
| syn keyword tadsConditional if else switch |
| syn keyword tadsRepeat while for do |
| syn keyword tadsStorageClass local compoundWord formatstring specialWords |
| syn keyword tadsBoolean nil true |
| |
| " TADS keywords |
| syn keyword tadsKeyword replace modify |
| syn keyword tadsKeyword global self inherited |
| " builtin functions |
| syn keyword tadsKeyword cvtstr cvtnum caps lower upper substr |
| syn keyword tadsKeyword say length |
| syn keyword tadsKeyword setit setscore |
| syn keyword tadsKeyword datatype proptype |
| syn keyword tadsKeyword car cdr |
| syn keyword tadsKeyword defined isclass |
| syn keyword tadsKeyword find firstobj nextobj |
| syn keyword tadsKeyword getarg argcount |
| syn keyword tadsKeyword input yorn askfile |
| syn keyword tadsKeyword rand randomize |
| syn keyword tadsKeyword restart restore quit save undo |
| syn keyword tadsException abort exit exitobj |
| |
| syn keyword tadsTodo contained TODO FIXME XXX |
| |
| " String and Character constants |
| " Highlight special characters (those which have a backslash) differently |
| syn match tadsSpecial contained "\\." |
| syn region tadsDoubleString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=tadsSpecial,tadsEmbedded |
| syn region tadsSingleString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=tadsSpecial |
| " Embedded expressions in strings |
| syn region tadsEmbedded contained start="<<" end=">>" contains=tadsKeyword |
| |
| " TADS doesn't have \xxx, right? |
| "syn match cSpecial contained "\\[0-7][0-7][0-7]\=\|\\." |
| "syn match cSpecialCharacter "'\\[0-7][0-7]'" |
| "syn match cSpecialCharacter "'\\[0-7][0-7][0-7]'" |
| |
| "catch errors caused by wrong parenthesis |
| "syn region cParen transparent start='(' end=')' contains=ALLBUT,cParenError,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel |
| "syn match cParenError ")" |
| "syn match cInParen contained "[{}]" |
| syn region tadsBrace transparent start='{' end='}' contains=ALLBUT,tadsBraceError,tadsIncluded,tadsSpecial,tadsTodo |
| syn match tadsBraceError "}" |
| |
| "integer number (TADS has no floating point numbers) |
| syn case ignore |
| syn match tadsNumber "\<[0-9]\+\>" |
| "hex number |
| syn match tadsNumber "\<0x[0-9a-f]\+\>" |
| syn match tadsIdentifier "\<[a-z][a-z0-9_$]*\>" |
| syn case match |
| " flag an octal number with wrong digits |
| syn match tadsOctalError "\<0[0-7]*[89]" |
| |
| " Removed complicated c_comment_strings |
| syn region tadsComment start="/\*" end="\*/" contains=tadsTodo |
| syn match tadsComment "//.*" contains=tadsTodo |
| syntax match tadsCommentError "\*/" |
| |
| syn region tadsPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=tadsComment,tadsString,tadsNumber,tadsCommentError |
| syn region tadsIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ |
| syn match tadsIncluded contained "<[^>]*>" |
| syn match tadsInclude "^\s*#\s*include\>\s*["<]" contains=tadsIncluded |
| syn region tadsDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInBrace,tadsIdentifier |
| |
| syn region tadsPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInParen,tadsIdentifier |
| |
| " Highlight User Labels |
| " TODO labels for gotos? |
| "syn region cMulti transparent start='?' end=':' contains=ALLBUT,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel,cBitField |
| " Avoid matching foo::bar() in C++ by requiring that the next char is not ':' |
| "syn match cUserCont "^\s*\I\i*\s*:$" contains=cUserLabel |
| "syn match cUserCont ";\s*\I\i*\s*:$" contains=cUserLabel |
| "syn match cUserCont "^\s*\I\i*\s*:[^:]" contains=cUserLabel |
| "syn match cUserCont ";\s*\I\i*\s*:[^:]" contains=cUserLabel |
| |
| "syn match cUserLabel "\I\i*" contained |
| |
| " identifier: class-name [, class-name [...]] [property-list] ; |
| " Don't highlight comment in class def |
| syn match tadsClassDef "\<class\>[^/]*" contains=tadsObjectDef,tadsClass |
| syn match tadsClass contained "\<class\>" |
| syn match tadsObjectDef "\<[a-zA-Z][a-zA-Z0-9_$]*\s*:\s*[a-zA-Z0-9_$]\+\(\s*,\s*[a-zA-Z][a-zA-Z0-9_$]*\)*\(\s*;\)\=" |
| syn keyword tadsFunction contained function |
| syn match tadsFunctionDef "\<[a-zA-Z][a-zA-Z0-9_$]*\s*:\s*function[^{]*" contains=tadsFunction |
| "syn region tadsObject transparent start = '[a-zA-Z][\i$]\s*:\s*' end=";" contains=tadsBrace,tadsObjectDef |
| |
| " How far back do we go to find matching groups |
| if !exists("tads_minlines") |
| let tads_minlines = 15 |
| endif |
| exec "syn sync ccomment tadsComment minlines=" . tads_minlines |
| if !exists("tads_sync_dist") |
| let tads_sync_dist = 100 |
| endif |
| execute "syn sync maxlines=" . tads_sync_dist |
| |
| " 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_tads_syn_inits") |
| if version < 508 |
| let did_tads_syn_inits = 1 |
| command -nargs=+ HiLink hi link <args> |
| else |
| command -nargs=+ HiLink hi def link <args> |
| endif |
| |
| " The default methods for highlighting. Can be overridden later |
| HiLink tadsFunctionDef Function |
| HiLink tadsFunction Structure |
| HiLink tadsClass Structure |
| HiLink tadsClassDef Identifier |
| HiLink tadsObjectDef Identifier |
| " no highlight for tadsEmbedded, so it prints as normal text w/in the string |
| |
| HiLink tadsOperator Operator |
| HiLink tadsStructure Structure |
| HiLink tadsTodo Todo |
| HiLink tadsLabel Label |
| HiLink tadsConditional Conditional |
| HiLink tadsRepeat Repeat |
| HiLink tadsException Exception |
| HiLink tadsStatement Statement |
| HiLink tadsStorageClass StorageClass |
| HiLink tadsKeyWord Keyword |
| HiLink tadsSpecial SpecialChar |
| HiLink tadsNumber Number |
| HiLink tadsBoolean Boolean |
| HiLink tadsDoubleString tadsString |
| HiLink tadsSingleString tadsString |
| |
| HiLink tadsOctalError tadsError |
| HiLink tadsCommentError tadsError |
| HiLink tadsBraceError tadsError |
| HiLink tadsInBrace tadsError |
| HiLink tadsError Error |
| |
| HiLink tadsInclude Include |
| HiLink tadsPreProc PreProc |
| HiLink tadsDefine Macro |
| HiLink tadsIncluded tadsString |
| HiLink tadsPreCondit PreCondit |
| |
| HiLink tadsString String |
| HiLink tadsComment Comment |
| |
| delcommand HiLink |
| endif |
| |
| |
| let b:current_syntax = "tads" |
| |
| " Changes: |
| " 11/18/99 Added a bunch of TADS functions, tadsException |
| " 10/22/99 Misspelled Moolenaar (sorry!), c_minlines to tads_minlines |
| " |
| " vim: ts=8 |