summaryrefslogtreecommitdiffstats
path: root/runtime/syntax/tads.vim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--runtime/syntax/tads.vim171
1 files changed, 171 insertions, 0 deletions
diff --git a/runtime/syntax/tads.vim b/runtime/syntax/tads.vim
new file mode 100644
index 0000000..23a65b9
--- /dev/null
+++ b/runtime/syntax/tads.vim
@@ -0,0 +1,171 @@
+" 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?
+
+" quit when a syntax file was already loaded
+if 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.
+" Only when an item doesn't have highlighting yet
+
+" The default methods for highlighting. Can be overridden later
+hi def link tadsFunctionDef Function
+hi def link tadsFunction Structure
+hi def link tadsClass Structure
+hi def link tadsClassDef Identifier
+hi def link tadsObjectDef Identifier
+" no highlight for tadsEmbedded, so it prints as normal text w/in the string
+
+hi def link tadsOperator Operator
+hi def link tadsStructure Structure
+hi def link tadsTodo Todo
+hi def link tadsLabel Label
+hi def link tadsConditional Conditional
+hi def link tadsRepeat Repeat
+hi def link tadsException Exception
+hi def link tadsStatement Statement
+hi def link tadsStorageClass StorageClass
+hi def link tadsKeyWord Keyword
+hi def link tadsSpecial SpecialChar
+hi def link tadsNumber Number
+hi def link tadsBoolean Boolean
+hi def link tadsDoubleString tadsString
+hi def link tadsSingleString tadsString
+
+hi def link tadsOctalError tadsError
+hi def link tadsCommentError tadsError
+hi def link tadsBraceError tadsError
+hi def link tadsInBrace tadsError
+hi def link tadsError Error
+
+hi def link tadsInclude Include
+hi def link tadsPreProc PreProc
+hi def link tadsDefine Macro
+hi def link tadsIncluded tadsString
+hi def link tadsPreCondit PreCondit
+
+hi def link tadsString String
+hi def link tadsComment Comment
+
+
+
+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