flightgear/scripts/syntax/nasal.vim
2022-10-20 20:29:11 +08:00

162 lines
5.7 KiB
VimL

" Vim syntax file
" Language: Nasal (FlightGear)
" Maintainer: Melchior FRANZ <mfranz # aon : at>
" URL: http://members.aon.at/mfranz/nasal.vim
" Last Change: 2008 Sep 29
" ________________________________CUSTOMIZATION______________________________
"
" :let nasal_no_fgfs=1 " turn off FlightGear extensions
" :hi nasalStatement ctermfg=Green " change statement color
" ___________________________________________________________________________
" for use in ~/.vimrc drop the initial colon
" type ":help new-filetype" in vim for installation instructions
if !exists("main_syntax")
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
let main_syntax = 'nasal'
endif
syn keyword nasalCommentTodo TODO FIXME XXX contained
syn match nasalComment "#.*$" contains=nasalCommentTodo
syn region nasalStringS start=+'+ skip=+\\'+ end=+'+ contains=nasalSpecialS
syn region nasalStringD start=+"+ skip=+\\"+ end=+"+ contains=nasalSpecialD,nasalSpecial
syn match nasalSpecialS contained "\\'"
syn match nasalSpecialD contained "\\[\\rnt\"]"
syn match nasalSpecial contained "\\x[[:xdigit:]][[:xdigit:]]"
syn match nasalError "``\="
syn match nasalError "`\\[^`\\rnt]`"
syn match nasalError "`[^`][^`]\+`"
syn match nasalCharConstant "`[^`\\]`"
syn match nasalCharConstant "`\\[`\\rnt]`"
syn match nasalCharConstant "`\\x[[:xdigit:]][[:xdigit:]]`"
syn match nasalNumber "-\=\<0x\x\+\>"
syn match nasalNumber "-\=\<\d\+\>"
syn match nasalNumber "-\=\.\d\+\([eE][+-]\=\d\+\)\=\>"
syn match nasalNumber "-\=\<\d\+\.\=\([eE][+-]\=\d\+\)\=\>"
syn match nasalNumber "-\=\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=\>"
syn keyword nasalStatement func return var
syn keyword nasalConditional if elsif else
syn keyword nasalRepeat while for foreach forindex
syn keyword nasalBranch break continue
syn keyword nasalVar me arg parents
syn keyword nasalType nil
syn keyword nasalOperator and or
syn match nasalFoo "\~"
syn match nasalFunction display "\<contains\>"
syn keyword nasalFunction size keys append pop setsize subvec delete int num streq substr
syn keyword nasalFunction chr typeof compile call die sprintf caller closure find cmp
syn keyword nasalFunction split rand bind sort ghosttype id
" math lib
syn match nasalFunction "\<math\.\(sin\|cos\|exp\|ln\|sqrt\|atan2\)\>"
syn match nasalConstant "\<math\.\(e\|pi\)\>"
" io lib
syn match nasalFunction "\<io\.\(close\|read\|write\|seek\|tell\|flush\|open\|readln\|stat\)\>"
syn match nasalVar "\<io\.\(SEEK_SET\|SEEK_CUR\|SEEK_END\|stdin\|stdout\|stderr\)\>"
" bits lib
syn match nasalFunction "\<bits\.\(sfld\|fld\|setfld\|buf\)\>"
syn sync fromstart
syn sync maxlines=100
syn match nasalParenError "[()]"
syn match nasalBraceError "[{}]"
syn match nasalBrackError "[\[\]]"
" FlightGear specific commands
if !exists("nasal_no_fgfs")
syn keyword nasalFGFSFunction getprop setprop print _fgcommand settimer _setlistener _cmdarg
syn keyword nasalFGFSFunction _interpolate rand srand directory removelistener systime
syn keyword nasalFGFSFunction geodtocart carttogeod geodinfo parsexml airportinfo abort
syn keyword nasalGlobalsFunction isa fgcommand cmdarg abs interpolate setlistener defined printlog
syn keyword nasalGlobalsFunction thisfunc printf values
syn keyword nasalPropsFunction getType getName getIndex getValue setValue setIntValue
syn keyword nasalPropsFunction setBoolValue setDoubleValue getParent getChild getChildren
syn keyword nasalPropsFunction getAttribute setAttribute alias unalias getAliasTarget clearValue
syn keyword nasalPropsFunction removeChild removeChildren getNode initNode
syn keyword nasalPropsFunction getPath getBoolValue setValues getValues
syn match nasalPropsFunction "\<props\.\(_\?globals\|Node\|nodeList\|condition\)\>\.\="
" XML embedded mode
if expand("%:e") == "xml"
syn region nasalComment start="<!--" end="-->" contains=nasalCommentTodo
syn region nasalComment start="<?" end="?>" contains=nasalCommentTodo
syn match nasalComment "^\s*</\?[[:alnum:]!].*[[:alnum:]\"-]/\?>\s*$"
syn match nasalComment "^\s*<script>"
syn match nasalComment "</script>.*"
syn match nasalCDATA "<!\[CDATA\["
syn match nasalCDATA "\]\]>"
endif
endif
syn region nasalEncl transparent matchgroup=nasalParenEncl start="(" end=")" contains=ALLBUT,nasalParenError
syn region nasalEncl transparent matchgroup=nasalBrackEncl start="\[" end="\]" contains=ALLBUT,nasalBrackError
syn region nasalEncl transparent matchgroup=nasalBraceEncl start="{" end="}" contains=ALLBUT,nasalBraceError
if version >= 508 || !exists("did_nasal_syn_inits")
if version < 508
let did_nasal_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink nasalComment Comment
HiLink nasalCommentTodo Todo
HiLink nasalSpecial Special
HiLink nasalSpecialS Special
HiLink nasalSpecialD Special
HiLink nasalStringS String
HiLink nasalStringD String
HiLink nasalNumber Number
HiLink nasalConditional Conditional
HiLink nasalVar Macro
HiLink nasalType Type
HiLink nasalConstant Constant
HiLink nasalCharConstant Type
HiLink nasalFoo NonText
HiLink nasalCDATA Type
HiLink nasalRepeat Repeat
HiLink nasalBranch Conditional
HiLink nasalOperator Operator
HiLink nasalStatement Statement
HiLink nasalFunction Function
HiLink nasalFGFSFunction Function
HiLink nasalGlobalsFunction Function
HiLink nasalPropsFunction Function
HiLink nasalError Error
HiLink nasalParenError nasalError
HiLink nasalBrackError nasalError
HiLink nasalBraceError nasalError
delcommand HiLink
endif
let b:current_syntax = "nasal"
if main_syntax == 'nasal'
unlet main_syntax
endif
" vim: ts=8