3 " Maintainer: Amir Karger <karger@post.harvard.edu>
4 " $Date: 2004/06/13 19:28:45 $
6 " Stolen from: Bram Moolenaar's C language file
7 " Newest version at: http://www.hec.utah.edu/~karger/vim/syntax/tads.vim
8 " History info at the bottom of the file
10 " TODO lots more keywords
11 " global, self, etc. are special *objects*, not functions. They should
12 " probably be a different color than the special functions
13 " Actually, should cvtstr etc. be functions?! (change tadsFunction)
14 " Make global etc. into Identifiers, since we don't have regular variables?
16 " For version 5.x: Clear all syntax items
17 " For version 6.x: Quit when a syntax file was already loaded
20 elseif exists("b:current_syntax")
24 " A bunch of useful keywords
25 syn keyword tadsStatement goto break return continue pass
26 syn keyword tadsLabel case default
27 syn keyword tadsConditional if else switch
28 syn keyword tadsRepeat while for do
29 syn keyword tadsStorageClass local compoundWord formatstring specialWords
30 syn keyword tadsBoolean nil true
33 syn keyword tadsKeyword replace modify
34 syn keyword tadsKeyword global self inherited
36 syn keyword tadsKeyword cvtstr cvtnum caps lower upper substr
37 syn keyword tadsKeyword say length
38 syn keyword tadsKeyword setit setscore
39 syn keyword tadsKeyword datatype proptype
40 syn keyword tadsKeyword car cdr
41 syn keyword tadsKeyword defined isclass
42 syn keyword tadsKeyword find firstobj nextobj
43 syn keyword tadsKeyword getarg argcount
44 syn keyword tadsKeyword input yorn askfile
45 syn keyword tadsKeyword rand randomize
46 syn keyword tadsKeyword restart restore quit save undo
47 syn keyword tadsException abort exit exitobj
49 syn keyword tadsTodo contained TODO FIXME XXX
51 " String and Character constants
52 " Highlight special characters (those which have a backslash) differently
53 syn match tadsSpecial contained "\\."
54 syn region tadsDoubleString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=tadsSpecial,tadsEmbedded
55 syn region tadsSingleString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=tadsSpecial
56 " Embedded expressions in strings
57 syn region tadsEmbedded contained start="<<" end=">>" contains=tadsKeyword
59 " TADS doesn't have \xxx, right?
60 "syn match cSpecial contained "\\[0-7][0-7][0-7]\=\|\\."
61 "syn match cSpecialCharacter "'\\[0-7][0-7]'"
62 "syn match cSpecialCharacter "'\\[0-7][0-7][0-7]'"
64 "catch errors caused by wrong parenthesis
65 "syn region cParen transparent start='(' end=')' contains=ALLBUT,cParenError,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel
66 "syn match cParenError ")"
67 "syn match cInParen contained "[{}]"
68 syn region tadsBrace transparent start='{' end='}' contains=ALLBUT,tadsBraceError,tadsIncluded,tadsSpecial,tadsTodo
69 syn match tadsBraceError "}"
71 "integer number (TADS has no floating point numbers)
73 syn match tadsNumber "\<[0-9]\+\>"
75 syn match tadsNumber "\<0x[0-9a-f]\+\>"
76 syn match tadsIdentifier "\<[a-z][a-z0-9_$]*\>"
78 " flag an octal number with wrong digits
79 syn match tadsOctalError "\<0[0-7]*[89]"
81 " Removed complicated c_comment_strings
82 syn region tadsComment start="/\*" end="\*/" contains=tadsTodo
83 syn match tadsComment "//.*" contains=tadsTodo
84 syntax match tadsCommentError "\*/"
86 syn region tadsPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=tadsComment,tadsString,tadsNumber,tadsCommentError
87 syn region tadsIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
88 syn match tadsIncluded contained "<[^>]*>"
89 syn match tadsInclude "^\s*#\s*include\>\s*["<]" contains=tadsIncluded
90 syn region tadsDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInBrace,tadsIdentifier
92 syn region tadsPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,tadsPreCondit,tadsIncluded,tadsInclude,tadsDefine,tadsInParen,tadsIdentifier
94 " Highlight User Labels
95 " TODO labels for gotos?
96 "syn region cMulti transparent start='?' end=':' contains=ALLBUT,cIncluded,cSpecial,cTodo,cUserCont,cUserLabel,cBitField
97 " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
98 "syn match cUserCont "^\s*\I\i*\s*:$" contains=cUserLabel
99 "syn match cUserCont ";\s*\I\i*\s*:$" contains=cUserLabel
100 "syn match cUserCont "^\s*\I\i*\s*:[^:]" contains=cUserLabel
101 "syn match cUserCont ";\s*\I\i*\s*:[^:]" contains=cUserLabel
103 "syn match cUserLabel "\I\i*" contained
105 " identifier: class-name [, class-name [...]] [property-list] ;
106 " Don't highlight comment in class def
107 syn match tadsClassDef "\<class\>[^/]*" contains=tadsObjectDef,tadsClass
108 syn match tadsClass contained "\<class\>"
109 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*;\)\="
110 syn keyword tadsFunction contained function
111 syn match tadsFunctionDef "\<[a-zA-Z][a-zA-Z0-9_$]*\s*:\s*function[^{]*" contains=tadsFunction
112 "syn region tadsObject transparent start = '[a-zA-Z][\i$]\s*:\s*' end=";" contains=tadsBrace,tadsObjectDef
114 " How far back do we go to find matching groups
115 if !exists("tads_minlines")
116 let tads_minlines = 15
118 exec "syn sync ccomment tadsComment minlines=" . tads_minlines
119 if !exists("tads_sync_dist")
120 let tads_sync_dist = 100
122 execute "syn sync maxlines=" . tads_sync_dist
124 " Define the default highlighting.
125 " For version 5.7 and earlier: only when not done already
126 " For version 5.8 and later: only when an item doesn't have highlighting yet
127 if version >= 508 || !exists("did_tads_syn_inits")
129 let did_tads_syn_inits = 1
130 command -nargs=+ HiLink hi link <args>
132 command -nargs=+ HiLink hi def link <args>
135 " The default methods for highlighting. Can be overridden later
136 HiLink tadsFunctionDef Function
137 HiLink tadsFunction Structure
138 HiLink tadsClass Structure
139 HiLink tadsClassDef Identifier
140 HiLink tadsObjectDef Identifier
141 " no highlight for tadsEmbedded, so it prints as normal text w/in the string
143 HiLink tadsOperator Operator
144 HiLink tadsStructure Structure
146 HiLink tadsLabel Label
147 HiLink tadsConditional Conditional
148 HiLink tadsRepeat Repeat
149 HiLink tadsException Exception
150 HiLink tadsStatement Statement
151 HiLink tadsStorageClass StorageClass
152 HiLink tadsKeyWord Keyword
153 HiLink tadsSpecial SpecialChar
154 HiLink tadsNumber Number
155 HiLink tadsBoolean Boolean
156 HiLink tadsDoubleString tadsString
157 HiLink tadsSingleString tadsString
159 HiLink tadsOctalError tadsError
160 HiLink tadsCommentError tadsError
161 HiLink tadsBraceError tadsError
162 HiLink tadsInBrace tadsError
163 HiLink tadsError Error
165 HiLink tadsInclude Include
166 HiLink tadsPreProc PreProc
167 HiLink tadsDefine Macro
168 HiLink tadsIncluded tadsString
169 HiLink tadsPreCondit PreCondit
171 HiLink tadsString String
172 HiLink tadsComment Comment
178 let b:current_syntax = "tads"
181 " 11/18/99 Added a bunch of TADS functions, tadsException
182 " 10/22/99 Misspelled Moolenaar (sorry!), c_minlines to tads_minlines