2 " Language: Nasal (FlightGear)
3 " Maintainer: Melchior FRANZ <mfranz # aon : at>
4 " URL: http://members.aon.at/mfranz/nasal.vim
5 " Last Change: 2008 Sep 29
7 " ________________________________CUSTOMIZATION______________________________
9 " :let nasal_no_fgfs=1 " turn off FlightGear extensions
10 " :hi nasalStatement ctermfg=Green " change statement color
11 " ___________________________________________________________________________
12 " for use in ~/.vimrc drop the initial colon
13 " type ":help new-filetype" in vim for installation instructions
16 if !exists("main_syntax")
19 elseif exists("b:current_syntax")
22 let main_syntax = 'nasal'
26 syn keyword nasalCommentTodo TODO FIXME XXX contained
27 syn match nasalComment "#.*$" contains=nasalCommentTodo
28 syn region nasalStringS start=+'+ skip=+\\'+ end=+'+ contains=nasalSpecialS
29 syn region nasalStringD start=+"+ skip=+\\"+ end=+"+ contains=nasalSpecialD,nasalSpecial
30 syn match nasalSpecialS contained "\\'"
31 syn match nasalSpecialD contained "\\[\\rnt\"]"
32 syn match nasalSpecial contained "\\x[[:xdigit:]][[:xdigit:]]"
34 syn match nasalError "``\="
35 syn match nasalError "`\\[^`\\rnt]`"
36 syn match nasalError "`[^`][^`]\+`"
37 syn match nasalCharConstant "`[^`\\]`"
38 syn match nasalCharConstant "`\\[`\\rnt]`"
39 syn match nasalCharConstant "`\\x[[:xdigit:]][[:xdigit:]]`"
41 syn match nasalNumber "-\=\<0x\x\+\>"
42 syn match nasalNumber "-\=\<\d\+\>"
43 syn match nasalNumber "-\=\.\d\+\([eE][+-]\=\d\+\)\=\>"
44 syn match nasalNumber "-\=\<\d\+\.\=\([eE][+-]\=\d\+\)\=\>"
45 syn match nasalNumber "-\=\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=\>"
47 syn keyword nasalStatement func return var
48 syn keyword nasalConditional if elsif else
49 syn keyword nasalRepeat while for foreach forindex
50 syn keyword nasalBranch break continue
51 syn keyword nasalVar me arg parents
52 syn keyword nasalType nil
53 syn keyword nasalOperator and or
54 syn match nasalFoo "\~"
56 syn match nasalFunction display "\<contains\>"
57 syn keyword nasalFunction size keys append pop setsize subvec delete int num streq substr
58 syn keyword nasalFunction chr typeof compile call die sprintf caller closure find cmp
59 syn keyword nasalFunction split rand bind sort ghosttype id
62 syn match nasalFunction "\<math\.\(sin\|cos\|exp\|ln\|sqrt\|atan2\)\>"
63 syn match nasalConstant "\<math\.\(e\|pi\)\>"
66 syn match nasalFunction "\<io\.\(close\|read\|write\|seek\|tell\|flush\|open\|readln\|stat\)\>"
67 syn match nasalVar "\<io\.\(SEEK_SET\|SEEK_CUR\|SEEK_END\|stdin\|stdout\|stderr\)\>"
70 syn match nasalFunction "\<bits\.\(sfld\|fld\|setfld\|buf\)\>"
76 syn match nasalParenError "[()]"
77 syn match nasalBraceError "[{}]"
78 syn match nasalBrackError "[\[\]]"
81 " FlightGear specific commands
82 if !exists("nasal_no_fgfs")
83 syn keyword nasalFGFSFunction getprop setprop print _fgcommand settimer _setlistener _cmdarg
84 syn keyword nasalFGFSFunction _interpolate rand srand directory removelistener systime
85 syn keyword nasalFGFSFunction geodtocart carttogeod geodinfo parsexml airportinfo abort
87 syn keyword nasalGlobalsFunction isa fgcommand cmdarg abs interpolate setlistener defined printlog
88 syn keyword nasalGlobalsFunction thisfunc printf values
90 syn keyword nasalPropsFunction getType getName getIndex getValue setValue setIntValue
91 syn keyword nasalPropsFunction setBoolValue setDoubleValue getParent getChild getChildren
92 syn keyword nasalPropsFunction getAttribute setAttribute alias unalias getAliasTarget clearValue
93 syn keyword nasalPropsFunction removeChild removeChildren getNode initNode
94 syn keyword nasalPropsFunction getPath getBoolValue setValues getValues
95 syn match nasalPropsFunction "\<props\.\(_\?globals\|Node\|nodeList\|condition\)\>\.\="
98 if expand("%:e") == "xml"
99 syn region nasalComment start="<!--" end="-->" contains=nasalCommentTodo
100 syn region nasalComment start="<?" end="?>" contains=nasalCommentTodo
101 syn match nasalComment "^\s*</\?[[:alnum:]!].*[[:alnum:]\"-]/\?>\s*$"
102 syn match nasalComment "^\s*<script>"
103 syn match nasalComment "</script>.*"
104 syn match nasalCDATA "<!\[CDATA\["
105 syn match nasalCDATA "\]\]>"
110 syn region nasalEncl transparent matchgroup=nasalParenEncl start="(" end=")" contains=ALLBUT,nasalParenError
111 syn region nasalEncl transparent matchgroup=nasalBrackEncl start="\[" end="\]" contains=ALLBUT,nasalBrackError
112 syn region nasalEncl transparent matchgroup=nasalBraceEncl start="{" end="}" contains=ALLBUT,nasalBraceError
115 if version >= 508 || !exists("did_nasal_syn_inits")
117 let did_nasal_syn_inits = 1
118 command -nargs=+ HiLink hi link <args>
120 command -nargs=+ HiLink hi def link <args>
122 HiLink nasalComment Comment
123 HiLink nasalCommentTodo Todo
124 HiLink nasalSpecial Special
125 HiLink nasalSpecialS Special
126 HiLink nasalSpecialD Special
127 HiLink nasalStringS String
128 HiLink nasalStringD String
129 HiLink nasalNumber Number
130 HiLink nasalConditional Conditional
132 HiLink nasalVar Macro
133 HiLink nasalType Type
134 HiLink nasalConstant Constant
135 HiLink nasalCharConstant Type
136 HiLink nasalFoo NonText
137 HiLink nasalCDATA Type
139 HiLink nasalRepeat Repeat
140 HiLink nasalBranch Conditional
141 HiLink nasalOperator Operator
142 HiLink nasalStatement Statement
143 HiLink nasalFunction Function
145 HiLink nasalFGFSFunction Function
146 HiLink nasalGlobalsFunction Function
147 HiLink nasalPropsFunction Function
149 HiLink nasalError Error
150 HiLink nasalParenError nasalError
151 HiLink nasalBrackError nasalError
152 HiLink nasalBraceError nasalError
156 let b:current_syntax = "nasal"
157 if main_syntax == 'nasal'