1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: TADS 3071d4279SBram Moolenaar" Maintainer: Amir Karger <[email protected]> 45c73622aSBram Moolenaar" $Date: 2004/06/13 19:28:45 $ 55c73622aSBram Moolenaar" $Revision: 1.1 $ 6071d4279SBram Moolenaar" Stolen from: Bram Moolenaar's C language file 7071d4279SBram Moolenaar" Newest version at: http://www.hec.utah.edu/~karger/vim/syntax/tads.vim 8071d4279SBram Moolenaar" History info at the bottom of the file 9071d4279SBram Moolenaar 10071d4279SBram Moolenaar" TODO lots more keywords 11071d4279SBram Moolenaar" global, self, etc. are special *objects*, not functions. They should 12071d4279SBram Moolenaar" probably be a different color than the special functions 13071d4279SBram Moolenaar" Actually, should cvtstr etc. be functions?! (change tadsFunction) 14071d4279SBram Moolenaar" Make global etc. into Identifiers, since we don't have regular variables? 15071d4279SBram Moolenaar 1689bcfda6SBram Moolenaar" quit when a syntax file was already loaded 1789bcfda6SBram Moolenaarif exists("b:current_syntax") 18071d4279SBram Moolenaar finish 19071d4279SBram Moolenaarendif 20071d4279SBram Moolenaar 21071d4279SBram Moolenaar" A bunch of useful keywords 22071d4279SBram Moolenaarsyn keyword tadsStatement goto break return continue pass 23071d4279SBram Moolenaarsyn keyword tadsLabel case default 24071d4279SBram Moolenaarsyn keyword tadsConditional if else switch 25071d4279SBram Moolenaarsyn keyword tadsRepeat while for do 26071d4279SBram Moolenaarsyn keyword tadsStorageClass local compoundWord formatstring specialWords 27071d4279SBram Moolenaarsyn keyword tadsBoolean nil true 28071d4279SBram Moolenaar 29071d4279SBram Moolenaar" TADS keywords 30071d4279SBram Moolenaarsyn keyword tadsKeyword replace modify 31071d4279SBram Moolenaarsyn keyword tadsKeyword global self inherited 32071d4279SBram Moolenaar" builtin functions 33071d4279SBram Moolenaarsyn keyword tadsKeyword cvtstr cvtnum caps lower upper substr 34071d4279SBram Moolenaarsyn keyword tadsKeyword say length 35071d4279SBram Moolenaarsyn keyword tadsKeyword setit setscore 36071d4279SBram Moolenaarsyn keyword tadsKeyword datatype proptype 37071d4279SBram Moolenaarsyn keyword tadsKeyword car cdr 38071d4279SBram Moolenaarsyn keyword tadsKeyword defined isclass 39071d4279SBram Moolenaarsyn keyword tadsKeyword find firstobj nextobj 40071d4279SBram Moolenaarsyn keyword tadsKeyword getarg argcount 41071d4279SBram Moolenaarsyn keyword tadsKeyword input yorn askfile 42071d4279SBram Moolenaarsyn keyword tadsKeyword rand randomize 43071d4279SBram Moolenaarsyn keyword tadsKeyword restart restore quit save undo 44071d4279SBram Moolenaarsyn keyword tadsException abort exit exitobj 45071d4279SBram Moolenaar 46071d4279SBram Moolenaarsyn keyword tadsTodo contained TODO FIXME XXX 47071d4279SBram Moolenaar 48071d4279SBram Moolenaar" String and Character constants 49071d4279SBram Moolenaar" Highlight special characters (those which have a backslash) differently 50071d4279SBram Moolenaarsyn match tadsSpecial contained "\\." 51071d4279SBram Moolenaarsyn region tadsDoubleString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=tadsSpecial,tadsEmbedded 52071d4279SBram Moolenaarsyn region tadsSingleString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=tadsSpecial 53071d4279SBram Moolenaar" Embedded expressions in strings 54071d4279SBram Moolenaarsyn region tadsEmbedded contained start="<<" end=">>" contains=tadsKeyword 55071d4279SBram Moolenaar 56071d4279SBram Moolenaar" TADS doesn't have \xxx, right? 57071d4279SBram Moolenaar"syn match cSpecial contained "\\[0-7][0-7][0-7]\=\|\\." 58071d4279SBram Moolenaar"syn match cSpecialCharacter "'\\[0-7][0-7]'" 59071d4279SBram Moolenaar"syn match cSpecialCharacter "'\\[0-7][0-7][0-7]'" 60071d4279SBram Moolenaar 61071d4279SBram Moolenaar"catch errors caused by wrong parenthesis 62071d4279SBram Moolenaar"syn region cParen transparent start='(' end=')' contains=ALLBUT,cParenError,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel 63071d4279SBram Moolenaar"syn match cParenError ")" 64071d4279SBram Moolenaar"syn match cInParen contained "[{}]" 65071d4279SBram Moolenaarsyn region tadsBrace transparent start='{' end='}' contains=ALLBUT,tadsBraceError,tadsIncluded,tadsSpecial,tadsTodo 66071d4279SBram Moolenaarsyn match tadsBraceError "}" 67071d4279SBram Moolenaar 68071d4279SBram Moolenaar"integer number (TADS has no floating point numbers) 69071d4279SBram Moolenaarsyn case ignore 70071d4279SBram Moolenaarsyn match tadsNumber "\<[0-9]\+\>" 71071d4279SBram Moolenaar"hex number 72071d4279SBram Moolenaarsyn match tadsNumber "\<0x[0-9a-f]\+\>" 73071d4279SBram Moolenaarsyn match tadsIdentifier "\<[a-z][a-z0-9_$]*\>" 74071d4279SBram Moolenaarsyn case match 75071d4279SBram Moolenaar" flag an octal number with wrong digits 76071d4279SBram Moolenaarsyn match tadsOctalError "\<0[0-7]*[89]" 77071d4279SBram Moolenaar 78071d4279SBram Moolenaar" Removed complicated c_comment_strings 79071d4279SBram Moolenaarsyn region tadsComment start="/\*" end="\*/" contains=tadsTodo 80071d4279SBram Moolenaarsyn match tadsComment "//.*" contains=tadsTodo 81071d4279SBram Moolenaarsyntax match tadsCommentError "\*/" 82071d4279SBram Moolenaar 83071d4279SBram Moolenaarsyn region tadsPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=tadsComment,tadsString,tadsNumber,tadsCommentError 84071d4279SBram Moolenaarsyn region tadsIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ 85071d4279SBram Moolenaarsyn match tadsIncluded contained "<[^>]*>" 86071d4279SBram Moolenaarsyn match tadsInclude "^\s*#\s*include\>\s*["<]" contains=tadsIncluded 87071d4279SBram Moolenaarsyn region tadsDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInBrace,tadsIdentifier 88071d4279SBram Moolenaar 89071d4279SBram Moolenaarsyn region tadsPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInParen,tadsIdentifier 90071d4279SBram Moolenaar 91071d4279SBram Moolenaar" Highlight User Labels 92071d4279SBram Moolenaar" TODO labels for gotos? 93071d4279SBram Moolenaar"syn region cMulti transparent start='?' end=':' contains=ALLBUT,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel,cBitField 94071d4279SBram Moolenaar" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' 95071d4279SBram Moolenaar"syn match cUserCont "^\s*\I\i*\s*:$" contains=cUserLabel 96071d4279SBram Moolenaar"syn match cUserCont ";\s*\I\i*\s*:$" contains=cUserLabel 97071d4279SBram Moolenaar"syn match cUserCont "^\s*\I\i*\s*:[^:]" contains=cUserLabel 98071d4279SBram Moolenaar"syn match cUserCont ";\s*\I\i*\s*:[^:]" contains=cUserLabel 99071d4279SBram Moolenaar 100071d4279SBram Moolenaar"syn match cUserLabel "\I\i*" contained 101071d4279SBram Moolenaar 102071d4279SBram Moolenaar" identifier: class-name [, class-name [...]] [property-list] ; 103071d4279SBram Moolenaar" Don't highlight comment in class def 104071d4279SBram Moolenaarsyn match tadsClassDef "\<class\>[^/]*" contains=tadsObjectDef,tadsClass 105071d4279SBram Moolenaarsyn match tadsClass contained "\<class\>" 106071d4279SBram Moolenaarsyn 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*;\)\=" 107071d4279SBram Moolenaarsyn keyword tadsFunction contained function 108071d4279SBram Moolenaarsyn match tadsFunctionDef "\<[a-zA-Z][a-zA-Z0-9_$]*\s*:\s*function[^{]*" contains=tadsFunction 109071d4279SBram Moolenaar"syn region tadsObject transparent start = '[a-zA-Z][\i$]\s*:\s*' end=";" contains=tadsBrace,tadsObjectDef 110071d4279SBram Moolenaar 111071d4279SBram Moolenaar" How far back do we go to find matching groups 112071d4279SBram Moolenaarif !exists("tads_minlines") 113071d4279SBram Moolenaar let tads_minlines = 15 114071d4279SBram Moolenaarendif 115071d4279SBram Moolenaarexec "syn sync ccomment tadsComment minlines=" . tads_minlines 116071d4279SBram Moolenaarif !exists("tads_sync_dist") 117071d4279SBram Moolenaar let tads_sync_dist = 100 118071d4279SBram Moolenaarendif 119071d4279SBram Moolenaarexecute "syn sync maxlines=" . tads_sync_dist 120071d4279SBram Moolenaar 121071d4279SBram Moolenaar" Define the default highlighting. 12289bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet 123071d4279SBram Moolenaar 124071d4279SBram Moolenaar" The default methods for highlighting. Can be overridden later 125*f37506f6SBram Moolenaarhi def link tadsFunctionDef Function 126*f37506f6SBram Moolenaarhi def link tadsFunction Structure 127*f37506f6SBram Moolenaarhi def link tadsClass Structure 128*f37506f6SBram Moolenaarhi def link tadsClassDef Identifier 129*f37506f6SBram Moolenaarhi def link tadsObjectDef Identifier 130071d4279SBram Moolenaar" no highlight for tadsEmbedded, so it prints as normal text w/in the string 131071d4279SBram Moolenaar 132*f37506f6SBram Moolenaarhi def link tadsOperator Operator 133*f37506f6SBram Moolenaarhi def link tadsStructure Structure 134*f37506f6SBram Moolenaarhi def link tadsTodo Todo 135*f37506f6SBram Moolenaarhi def link tadsLabel Label 136*f37506f6SBram Moolenaarhi def link tadsConditional Conditional 137*f37506f6SBram Moolenaarhi def link tadsRepeat Repeat 138*f37506f6SBram Moolenaarhi def link tadsException Exception 139*f37506f6SBram Moolenaarhi def link tadsStatement Statement 140*f37506f6SBram Moolenaarhi def link tadsStorageClass StorageClass 141*f37506f6SBram Moolenaarhi def link tadsKeyWord Keyword 142*f37506f6SBram Moolenaarhi def link tadsSpecial SpecialChar 143*f37506f6SBram Moolenaarhi def link tadsNumber Number 144*f37506f6SBram Moolenaarhi def link tadsBoolean Boolean 145*f37506f6SBram Moolenaarhi def link tadsDoubleString tadsString 146*f37506f6SBram Moolenaarhi def link tadsSingleString tadsString 147071d4279SBram Moolenaar 148*f37506f6SBram Moolenaarhi def link tadsOctalError tadsError 149*f37506f6SBram Moolenaarhi def link tadsCommentError tadsError 150*f37506f6SBram Moolenaarhi def link tadsBraceError tadsError 151*f37506f6SBram Moolenaarhi def link tadsInBrace tadsError 152*f37506f6SBram Moolenaarhi def link tadsError Error 153071d4279SBram Moolenaar 154*f37506f6SBram Moolenaarhi def link tadsInclude Include 155*f37506f6SBram Moolenaarhi def link tadsPreProc PreProc 156*f37506f6SBram Moolenaarhi def link tadsDefine Macro 157*f37506f6SBram Moolenaarhi def link tadsIncluded tadsString 158*f37506f6SBram Moolenaarhi def link tadsPreCondit PreCondit 159071d4279SBram Moolenaar 160*f37506f6SBram Moolenaarhi def link tadsString String 161*f37506f6SBram Moolenaarhi def link tadsComment Comment 162071d4279SBram Moolenaar 163071d4279SBram Moolenaar 164071d4279SBram Moolenaar 165071d4279SBram Moolenaarlet b:current_syntax = "tads" 166071d4279SBram Moolenaar 167071d4279SBram Moolenaar" Changes: 168071d4279SBram Moolenaar" 11/18/99 Added a bunch of TADS functions, tadsException 169071d4279SBram Moolenaar" 10/22/99 Misspelled Moolenaar (sorry!), c_minlines to tads_minlines 170071d4279SBram Moolenaar" 171071d4279SBram Moolenaar" vim: ts=8 172