--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ gedit syntax highlighter for the Nasal scripting language.
+
+ Just drop it in the gtksourceview-X.X/lanugage-specs folder:
+ Linux: /usr/share/gtksourceview-X.X/language-specs/
+ Mac: Applications/gedit/Contents/Resources/share/gtksourceview-X.X/language specs
+
+ Copyright (C) 2013 Philosopher
+ Author: Philosopher (Flightgear forums)
+ http://forum.flightgear.org/viewtopic.php?f=30&t=17265#p164133
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+-->
+<language id="nasal" _name="Nasal" version="2.0" _section="Scripts">
+ <metadata>
+ <property name="globs">*.nas</property>
+ <property name="line-comment-start">#</property>
+ </metadata>
+
+ <styles>
+ <style id="module-handler" _name="Module Handler" map-to="def:preprocessor"/>
+ <style id="keyword" _name="Keyword" map-to="def:keyword"/>
+ <style id="blockoid" _name="Blockoid" map-to="def:keyword"/>
+ <style id="operator" _name="Operator" map-to="def:operator"/>
+
+ <style id="builtin-constant" _name="Builtin Constant" map-to="def:special-constant"/>
+ <style id="builtin-object" _name="Builtin Object" map-to="def:type"/>
+ <style id="node-object" _name="Flightgear Node" map-to="def:type"/>
+ <style id="builtin-function" _name="Builtin Function" map-to="def:builtin"/>
+
+ <style id="boolean" _name="Boolean" map-to="def:boolean"/>
+ <style id="floating-point" _name="Floating point number" map-to="def:floating-point"/>
+ <style id="decimal" _name="Decimal number" map-to="def:decimal"/>
+ <style id="base-n-integer" _name="Base-N number" map-to="def:base-n-integer"/>
+ <style id="special-variable" _name="Special Variable" map-to="def:preprocessor"/><!-- def:identifier -->
+ <style id="string-conversion" _name="String conversion numeric"/>
+
+ <style id="string" _name="String" map-to="def:string"/>
+ <style id="escaped-char" _name="Escaped Character" map-to="def:special-char"/>
+ <style id="format" _name="Format" map-to="def:special-char"/>
+ <style id="path" _name="Path" map-to="def:type"/>
+ <style id="types" _name="Type Object" map-to="def:type"/>
+ </styles>
+
+ <definitions>
+ <!-- Basic lexing constructs: -->
+ <define-regex id="identifier">[_a-zA-Z][_a-zA-Z0-9]*</define-regex>
+ <define-regex id="number">[1-9][0-9]*</define-regex>
+ <context id="number" style-ref="decimal">
+ <match>(?<![0-9a-zA-Z])(0x[0-9a-fA-F]+|([0-9]*\.)?[0-9]+([eE][-+]?[0-9]+)?)</match>
+ </context>
+
+ <!-- Builtin Nasal keyword-operators -->
+ <context id="keyword" style-ref="keyword">
+ <keyword>and</keyword>
+ <keyword>or</keyword>
+ <keyword>var</keyword>
+ <keyword>return</keyword>
+ <keyword>break(\s+[_a-zA-Z]\w*)?</keyword>
+ <keyword>continue(\s+[_a-zA-Z]\w*)?</keyword>
+ </context>
+
+ <!-- Builtin Nasal blockoids -->
+ <context id="blockoid" style-ref="blockoid">
+ <keyword>while</keyword>
+ <keyword>for</keyword>
+ <keyword>foreach</keyword>
+ <keyword>forindex</keyword>
+ <keyword>if</keyword>
+ <keyword>elsif</keyword>
+ <keyword>else</keyword>
+ <keyword>func</keyword>
+ </context>
+
+ <context id="builtin-constants" style-ref="builtin-constant">
+ <prefix>(?<![\w\.])</prefix> <!-- look behind for anything but a word or period as a prefix, e.g. a space or tab -->
+ <keyword>nil</keyword>
+ <keyword>math\.e</keyword>
+ <keyword>math\.pi</keyword>
+ <!-- Flightgear global constants from globals.nas -->
+ <keyword>D2R</keyword>
+ <keyword>R2D</keyword>
+ <keyword>FT2M</keyword>
+ <keyword>M2FT</keyword>
+ <keyword>IN2M</keyword>
+ <keyword>M2IN</keyword>
+ <keyword>NM2M</keyword>
+ <keyword>M2NM</keyword>
+ <keyword>KT2MPS</keyword>
+ <keyword>MPS2KT</keyword>
+ <keyword>LB2KG</keyword>
+ <keyword>KG2LB</keyword>
+ <keyword>GAL2L</keyword>
+ <keyword>L2GAL</keyword>
+ <!-- Non-official -->
+ <keyword>FG_ROOT</keyword>
+ <keyword>FG_HOME</keyword>
+ <keyword>MODEL_PATH</keyword>
+ </context>
+
+ <!-- Other operators -->
+ <context id="operators" style-ref="operator" extend-parent="false">
+ <match>[-~+*/!=?<>]</match>
+ </context>
+
+
+ <!-- Strings: -->
+
+ <context id="format" style-ref="format" extend-parent="false">
+ <match extended="true">
+ % # leading % sign
+ [#0\-\ \+]* # conversion flags
+ (\-?\%{number})? # minimum field width
+ (\.(\-?\%{number}))? # precision
+ [%sdicouxXeEfFgG] # conversion type
+ </match>
+ </context>
+ <context id="escaped-char" style-ref="escaped-char" extend-parent="true">
+ <match extended="true">
+ \\( # leading backslash
+ [\\"abfnrtv] | # single escaped char
+ N\{[A-Z\ ]+\} | # named unicode character
+ u[0-9A-Fa-f]{4} | # xxxx - character with 16-bit hex value xxxx
+ U[0-9A-Fa-f]{8} | # xxxxxxxx - character with 32-bit hex value xxxxxxxx
+ x[0-9A-Fa-f]{1,2} | # \xhh - character with hex value hh
+ [0-7]{1,3} # \ooo - character with octal value ooo
+ )
+ </match>
+ </context>
+ <context id="double-escaped-char" style-ref="escaped-char" extend-parent="true">
+ <match extended="true">
+ \\\\( # double leading backslash
+ \\" | # escaped quote (needs an extra backslash)
+ [\\abfnrtv] | # single escaped char
+ N\{[A-Z\ ]+\} | # named unicode character
+ u[0-9A-Fa-f]{4} | # xxxx - character with 16-bit hex value xxxx
+ U[0-9A-Fa-f]{8} | # xxxxxxxx - character with 32-bit hex value xxxxxxxx
+ x[0-9A-Fa-f]{1,2} | # \xhh - character with hex value hh
+ [0-7]{1,3} # \ooo - character with octal value ooo
+ )
+ </match>
+ </context>
+
+ <context id="object-types" style-ref="builtin-object">
+ <prefix>(?<=['"])</prefix> <!-- look behind for ' or " as a prefix -->
+ <suffix>(?=['"])</suffix> <!-- look ahead for ' or " as a suffix -->
+ <keyword>func</keyword>
+ <keyword>code</keyword><!-- not official -->
+ <keyword>hash</keyword>
+ <keyword>scalar</keyword>
+ <keyword>vector</keyword>
+ <keyword>nil</keyword>
+ <keyword>ghost</keyword>
+ <!-- GitHub/AndyRoss/Nasal or Gitorious/nasal-standalone -->
+ <keyword>iofile</keyword>
+ <keyword>cairo</keyword>
+ <keyword>cairo_surface</keyword>
+ <keyword>GObject</keyword>
+ <keyword>regex</keyword>
+ <keyword>sqlite_db</keyword>
+ <keyword>sqlite_statement</keyword>
+ <keyword>dir</keyword>
+ <!-- SimGear -->
+ <keyword>prop</keyword>
+ <!-- FlightGear -->
+ <keyword>positioned</keyword>
+ <keyword>airport</keyword>
+ <keyword>aircraft</keyword>
+ <keyword>helipad</keyword>
+ </context>
+
+ <define-regex id="property-path" extended="true">
+ ( # optional first (root) node
+ [a-zA-Z] # first character has to be an alpha
+ [-a-zA-Z0-9_]* # now it can be alpha, hyphen, or number, repeat this
+ (?:\[ # optional index specifier like this: [90]
+ (?:[0-9]+)
+ \])?
+ )?
+ / # require a slash
+ ( # middle node(s)
+ [a-zA-Z] # first character has to be an alpha
+ [-a-zA-Z0-9_]* # now it can be alpha, hyphen, or number, repeat this
+ (?:\[ # optional index specifier like this: [90]
+ (?:[0-9]+)
+ \])?
+ / # slash to separate nodes
+ )* # repeat or none
+ ( # last element, doesn't require a slash at the end
+ [a-zA-Z] # first character has to be an alpha
+ [-a-zA-Z0-9_]* # now it can be alpha, hyphen, or number, repeat this
+ (?:\[ # optional index specifier like this: [90]
+ (?:[0-9]+)
+ \])?
+ /?
+ )
+ </define-regex>
+ <define-regex id="system-path" extended="true">
+ [-a-zA-Z0-9_]* # valid characters, repeat this
+ / # require a slash
+ [-a-zA-Z0-9/_]+ # more valid characters, repeat this once or more
+ (.[a-zA-Z0-9]+)? # optional extension
+ </define-regex>
+
+ <context id="string-path" style-ref="path" once-only="true">
+ <match extended="true">
+ (?<=")
+ (?:
+ (\]/)?\%{property-path}\[? # a recognizeable property path
+ |((?:\]/)? # or a "simple" path that isn't covered by above
+ [a-zA-Z] # first character has to be an alpha
+ [-a-zA-Z0-9_]* # now it can be alpha, hyphen, or number, repeat this
+ (\[ # optional index specifier like this: [90]
+ (?:[0-9]+\]/?)? # this is the rest after the opening; optional, "node/foo[" is valid
+ |/ # or a slash if no opening: sim/
+ )
+ )
+ |\[|\]/? # or a single bracket (closing can have slash): "]", "[", or "]/"
+ |(?<=prop\(") [-a-zA-Z0-9_]+(?:\[([0-9]+)\])?\[? # or a word like in setprop("foo-bar");
+ |(?<=\.getNode\(") [-a-zA-Z0-9_]+(?:\[([0-9]+)\])?\[? # or a word like in props.globals.getNode("foo-bar["~index~"]");
+ |(?<=\.alias\(") [-a-zA-Z0-9_]+(?:\[([0-9]+)\])?\[? # etc.
+ |(?<=\.initNode\(") [-a-zA-Z0-9_]+(?:\[([0-9]+)\])?\[?
+ |(?<=\.getValue\(") [-a-zA-Z0-9_]+(?:\[([0-9]+)\])?\[?
+ |(?<=\.getBoolValue\(") [-a-zA-Z0-9_]+(?:\[([0-9]+)\])?\[?
+ |(?<=\.setValue\(") [-a-zA-Z0-9_]+(?:\[([0-9]+)\])?\[?
+ |(?<=\.setBoolValue\(") [-a-zA-Z0-9_]+(?:\[([0-9]+)\])?\[?
+ |(?<=\.setIntValue\(") [-a-zA-Z0-9_]+(?:\[([0-9]+)\])?\[?
+ |(?<=\.setDoubleValue\(")[-a-zA-Z0-9_]+(?:\[([0-9]+)\])?\[?
+ |(?<=\.getChild\(") [-a-zA-Z0-9_]+ # while these are simple names
+ |(?<=\.getChildren\(") [-a-zA-Z0-9_]+
+ |(?<=\.removeChild\(") [-a-zA-Z0-9_]+
+ |(?<=\.removeChildren\(")[-a-zA-Z0-9_]+
+ )
+ (?=")
+ </match>
+ </context>
+
+ <context id="double-quoted-string" style-ref="string" class="string" class-disabled="no-spell-check">
+ <start>"</start>
+ <end>"</end>
+ <include>
+ <context ref="format"/>
+ <context ref="escaped-char"/>
+ <context ref="string-path"/>
+ </include>
+ </context>
+
+ <context id="single-quoted-string" style-ref="string" class="string" class-disabled="no-spell-check">
+ <start>'</start>
+ <end>'</end>
+ <include>
+ <context ref="format"/>
+ <context id="escaped-single-quote" style-ref="escaped-char" extend-parent="true">
+ <match>\\'</match>
+ </context>
+ <context ref="object-types"/>
+ </include>
+ </context>
+
+ <context id="escaped-double-quoted-string" style-ref="string" class="string" class-disabled="no-spell-check">
+ <start>\\"</start>
+ <end>\\"</end>
+ <include>
+ <context ref="format"/>
+ <context ref="double-escaped-char"/>
+ <context ref="string-path"/>
+ </include>
+ </context>
+
+ <context id="escaped-single-quoted-string" style-ref="string" class="string" class-disabled="no-spell-check">
+ <start>\\'</start>
+ <end>\\'</end>
+ <include>
+ <context ref="format"/>
+ <context id="double-escaped-single-quote" style-ref="escaped-char" extend-parent="true">
+ <match>\\\\'</match>
+ </context>
+ <context ref="object-types"/>
+ </include>
+ </context>
+
+ <context id="string-conversion" style-ref="string-conversion">
+ <match extended="true">
+ `
+ (
+ [^`\\] # any single character except for backqote or backslash
+ | # or:
+ \\( # leading backslash
+ [\\`abfnrtv] | # single escaped char
+ N\{[A-Z\ ]+\} | # named unicode character
+ u[0-9A-Fa-f]{4} | # xxxx - character with 16-bit hex value xxxx
+ U[0-9A-Fa-f]{8} | # xxxxxxxx - character with 32-bit hex value xxxxxxxx
+ x[0-9A-Fa-f]{1,2} | # \xhh - character with hex value hh
+ [0-7]{1,3} # \ooo - character with octal value ooo
+ )
+ )
+ `
+ </match>
+ </context>
+
+ <!-- Variables (special, chosen between FlightGear/Nasal-Standalone) -->
+
+ <context id="special-variables" style-ref="special-variable">
+ <prefix>(?<![\w\.])</prefix>
+ <keyword>_?cmdarg</keyword>
+ <keyword>arg</keyword>
+ <keyword>me</keyword>
+ <keyword>parents</keyword>
+ <keyword>globals</keyword>
+ </context>
+ <context id="module-handler" style-ref="module-handler">
+ <prefix>(?<![\w\.])</prefix>
+ <!-- Nasal-standalone/lib/driver.nas -->
+ <keyword>import</keyword>
+ <!-- $FG_ROOT/nasal_boostrap.nas -->
+ <keyword>require</keyword>
+ </context>
+
+ <context id="builtin-function" style-ref="builtin-function">
+ <prefix>((?<![\w\.])|(?<=globals\.))</prefix> <!-- look behind for anything but a word or period as a prefix, e.g. a space or tab, or lookbehind for globals. (since it will result in the same path) -->
+
+ <!-- Builtin to Nasal -->
+ <keyword>append</keyword>
+ <keyword>setsize</keyword>
+ <keyword>subvec</keyword>
+ <keyword>contains</keyword>
+ <keyword>delete</keyword>
+ <keyword>num</keyword>
+ <keyword>keys</keyword>
+ <keyword>pop</keyword>
+ <keyword>size</keyword>
+ <keyword>streq</keyword>
+ <keyword>cmp</keyword>
+ <keyword>abs</keyword>
+ <keyword>chr</keyword>
+ <keyword>sort</keyword>
+ <keyword>substr</keyword>
+ <keyword>sprintf</keyword>
+ <keyword>find</keyword>
+ <keyword>split</keyword>
+ <keyword>rand</keyword>
+ <keyword>typeof</keyword>
+ <keyword>die</keyword>
+ <keyword>call</keyword>
+ <keyword>compile</keyword>
+ <keyword>closure</keyword>
+ <keyword>caller</keyword>
+ <keyword>bind</keyword>
+ <keyword>print</keyword>
+ <keyword>bits\.fld</keyword>
+ <keyword>bits\.sfld</keyword>
+ <keyword>bits\.setfld</keyword>
+ <keyword>bits\.buf</keyword>
+ <keyword>math\.sin</keyword>
+ <keyword>math\.cos</keyword>
+ <keyword>math\.exp</keyword>
+ <keyword>math\.ln</keyword>
+ <keyword>math\.sqrt</keyword>
+ <keyword>math\.atan2</keyword>
+ <keyword>io\.open</keyword>
+ <keyword>io\.close</keyword>
+ <keyword>io\.read</keyword>
+ <keyword>io\.write</keyword>
+ <keyword>io\.seek</keyword>
+ <keyword>io\.tell</keyword>
+ <keyword>io\.readln</keyword>
+ <keyword>io\.stat</keyword>
+ <keyword>utf8\.chstr</keyword>
+ <keyword>utf8\.strc</keyword>
+ <keyword>utf8\.substr</keyword>
+ <keyword>utf8\.size</keyword>
+ <keyword>utf8\.validate</keyword>
+ <keyword>thread\.newthread</keyword>
+ <keyword>thread\.newlock</keyword>
+ <keyword>thread\.lock</keyword>
+ <keyword>thread\.unlock</keyword>
+ <keyword>thread\.newsem</keyword>
+ <keyword>thread\.semdown</keyword>
+ <keyword>thread\.semup</keyword>
+ <keyword>unix\.pipe</keyword>
+ <keyword>unix\.fork</keyword>
+ <keyword>unix\.dup2</keyword>
+ <keyword>unix\.exec</keyword>
+ <keyword>unix\.waitpid</keyword>
+ <keyword>unix\.opendir</keyword>
+ <keyword>unix\.readdir</keyword>
+ <keyword>unix\.closedir</keyword>
+ <keyword>unix\.time</keyword>
+ <keyword>unix\.chdir</keyword>
+ <keyword>unix\.environ</keyword>
+ <keyword>regex\.comp</keyword>
+ <keyword>regex\.exec</keyword>
+ <keyword>sqlite\.open</keyword>
+ <keyword>sqlite\.close</keyword>
+ <keyword>sqlite\.prepare</keyword>
+ <keyword>sqlite\.finalize</keyword>
+ <keyword>readline</keyword>
+
+ <!-- Flightgear-specific -->
+ <!-- $FG_SRC/NasalSys.cxx -->
+ <keyword>getprop</keyword>
+ <keyword>setprop</keyword>
+ <keyword>print</keyword>
+ <keyword>logprint</keyword>
+ <keyword>_fgcommand</keyword>
+ <keyword>settimer</keyword>
+ <keyword>maketimer</keyword>
+ <keyword>_setlistener</keyword>
+ <keyword>removelistener</keyword>
+ <keyword>addcommand</keyword>
+ <keyword>removecommand</keyword>
+ <keyword>_interpolate</keyword>
+ <keyword>rand</keyword>
+ <keyword>srand</keyword>
+ <keyword>abort</keyword>
+ <keyword>directory</keyword>
+ <keyword>resolvepath</keyword>
+ <keyword>parsexml</keyword>
+ <keyword>systime</keyword>
+ <!-- globals.nas -->
+ <keyword>setlistener</keyword>
+ <keyword>fgcommand</keyword>
+ <keyword>interpolate</keyword>
+ <keyword>isa</keyword>
+ <keyword>abs</keyword>
+ <keyword>defined</keyword>
+ <keyword>thisfunc</keyword>
+ <keyword>printf</keyword>
+ <keyword>sprintf</keyword>
+ <keyword>values</keyword>
+ <keyword>printlog</keyword>
+ <!-- io.nas -->
+ <keyword>io\.readfile</keyword>
+ <keyword>io\.load_nasal</keyword>
+ <keyword>io\.read_properties</keyword>
+ <keyword>io\.read_airport_properties</keyword>
+ <keyword>io\.write_properties</keyword>
+ <keyword>io\.readxml</keyword>
+ <keyword>io\.writexml</keyword>
+ <!-- string.nas -->
+ <keyword>string\.match</keyword>
+ <keyword>string\.normpath</keyword>
+ <keyword>string\.join</keyword>
+ <keyword>string\.replace</keyword>
+ <keyword>string\.iscntrl</keyword>
+ <keyword>string\.isascii</keyword>
+ <keyword>string\.isupper</keyword>
+ <keyword>string\.islower</keyword>
+ <keyword>string\.isdigit</keyword>
+ <keyword>string\.isblank</keyword>
+ <keyword>string\.ispunct</keyword>
+ <keyword>string\.isxdigit</keyword>
+ <keyword>string\.isspace</keyword>
+ <keyword>string\.isalpha</keyword>
+ <keyword>string\.isalnum</keyword>
+ <keyword>string\.isgraph</keyword>
+ <keyword>string\.isprint</keyword>
+ <keyword>string\.toupper</keyword>
+ <keyword>string\.tolower</keyword>
+ <keyword>string\.isxspace</keyword>
+ <keyword>string\.trim</keyword>
+ <keyword>string\.uc</keyword>
+ <keyword>string\.lc</keyword>
+ <keyword>string\.icmp</keyword>
+ <keyword>string\.imatch</keyword>
+ <keyword>string\.scanf</keyword>
+ <keyword>string\.setcolors</keyword>
+ <keyword>string\.color</keyword>
+ <!-- gui.nas -->
+ <keyword>gui\.Dialog\.new</keyword>
+ <keyword>gui\.OverlaySelector\.new</keyword>
+ <keyword>gui\.FileSelector\.new</keyword>
+ <keyword>gui\.DirSelector\.new</keyword>
+ <keyword>gui\.findElementByName</keyword>
+ <keyword>gui\.popupTip</keyword>
+ <keyword>gui\.showDialog</keyword>
+ <keyword>gui\.showHelpDialog</keyword>
+ <keyword>gui\.menuEnable</keyword>
+ <keyword>gui\.menuBind</keyword>
+ <keyword>gui\.setCursor</keyword>
+ <keyword>gui\.save_flight</keyword>
+ <keyword>gui\.load_flight</keyword>
+ <keyword>gui\.set_screenshotdir</keyword>
+ <keyword>gui\.property_browser</keyword>
+ <keyword>gui\.dialog_apply</keyword>
+ <keyword>gui\.dialog_update</keyword>
+ <keyword>gui\.enable_widgets</keyword>
+ <!-- props.nas -->
+ <keyword>props\.Node\.new</keyword>
+ <keyword>props\.Node</keyword>
+ <keyword>props\.globals</keyword>
+ <keyword>props\.setAll</keyword>
+ <keyword>props\.wrap</keyword>
+ <keyword>props\.wrapNode</keyword>
+ <keyword>props\.copy</keyword>
+ <keyword>props\.dump</keyword>
+ <keyword>props\.nodeList</keyword>
+ <keyword>props\.condition</keyword>
+ <keyword>props\.runBinding</keyword>
+ <!-- nasal-props.cxx -->
+ <keyword>props\._new</keyword>
+ <keyword>props\._globals</keyword>
+ <keyword>props\._getNode</keyword>
+ <keyword>props\._getParent</keyword>
+ <keyword>props\._getChild</keyword>
+ <keyword>props\._getChildren</keyword>
+ <keyword>props\._removeChild</keyword>
+ <keyword>props\._removeChildren</keyword>
+ <keyword>props\._getAliasTarget</keyword>
+ <keyword>props\._getName</keyword>
+ <keyword>props\._getIndex</keyword>
+ <keyword>props\._getType</keyword>
+ <keyword>props\._getAttribute</keyword>
+ <keyword>props\._setAttribute</keyword>
+ <keyword>props\._getValue</keyword>
+ <keyword>props\._setValue</keyword>
+ <keyword>props\._setIntValue</keyword>
+ <keyword>props\._setBoolValue</keyword>
+ <keyword>props\._setDoubleValue</keyword>
+ <keyword>props\._unalias</keyword>
+ <keyword>props\._alias</keyword>
+ <!-- debug.nas -->
+ <keyword>debug\.dump</keyword>
+ <keyword>debug\.local</keyword>
+ <keyword>debug\.backtrace</keyword>
+ <keyword>debug\.bt</keyword>
+ <keyword>debug\.proptrace</keyword>
+ <keyword>debug\.tree</keyword>
+ <keyword>debug\.string</keyword>
+ <keyword>debug\.attributes</keyword>
+ <keyword>debug\.isnan</keyword>
+ <keyword>debug\.benchmark</keyword>
+ <keyword>debug\.printerror</keyword>
+ <keyword>debug\.warn</keyword>
+ <keyword>debug\.propify</keyword>
+ <!-- math.nas -->
+ <keyword>math\.abs</keyword>
+ <keyword>math\.sgn</keyword>
+ <keyword>math\.max</keyword>
+ <keyword>math\.min</keyword>
+ <keyword>math\.avg</keyword>
+ <keyword>math\.pow</keyword>
+ <keyword>math\.mod</keyword>
+ <keyword>math\.asin</keyword>
+ <keyword>math\.acos</keyword>
+ <keyword>math\.tan</keyword>
+ <keyword>math\.log10</keyword>
+ <keyword>math\.to_base</keyword>
+ <keyword>math\.print_base</keyword>
+ <!-- view.nas -->
+ <keyword>view\.panViewDir</keyword>
+ <keyword>view\.panViewPitch</keyword>
+ <keyword>view\.resetView</keyword>
+ <keyword>view\.manager\.register</keyword>
+ <!-- screen.nas -->
+ <keyword>screen\.log\.write</keyword>
+ <!-- controls.nas -->
+ <keyword>controls\.startEngine</keyword>
+ <keyword>controls\.selectEngine</keyword>
+ <keyword>controls\.stepMagnetos</keyword>
+ <keyword>controls\.centerFlightControls</keyword>
+ <keyword>controls\.throttleAxis</keyword>
+ <keyword>controls\.propellerAxis</keyword>
+ <keyword>controls\.mixtureAxis</keyword>
+ <keyword>controls\.carbHeatAxis</keyword>
+ <keyword>controls\.flapsDown</keyword>
+ <keyword>controls\.wingSweep</keyword>
+ <keyword>controls\.wingsDown</keyword>
+ <keyword>controls\.stepSpoilers</keyword>
+ <keyword>controls\.stepSlats</keyword>
+ <keyword>controls\.elevatorTrim</keyword>
+ <keyword>controls\.aileronTrim</keyword>
+ <keyword>controls\.rudderTrim</keyword>
+ <keyword>controls\.adjThrottle</keyword>
+ <keyword>controls\.adjMixture</keyword>
+ <keyword>controls\.adjCondition</keyword>
+ <keyword>controls\.adjPropeller</keyword>
+ <keyword>controls\.incThrottle</keyword>
+ <keyword>controls\.incAileron</keyword>
+ <keyword>controls\.incElevator</keyword>
+ <keyword>controls\.elevatorTrimAxis</keyword>
+ <keyword>controls\.aileronTrimAxis</keyword>
+ <keyword>controls\.rudderTrimAxis</keyword>
+ <keyword>controls\.gearDown</keyword>
+ <keyword>controls\.gearToggle</keyword>
+ <keyword>controls\.applyBrakes</keyword>
+ <keyword>controls\.applyParkingBrake</keyword>
+ <keyword>controls\.deployChute</keyword>
+ <keyword>controls\.trigger</keyword>
+ <keyword>controls\.ptt</keyword>
+ <keyword>controls\.toggleLights</keyword>
+ <!-- aircraft.nas -->
+ <keyword>aircraft\.door\.new</keyword>
+ <keyword>aircraft\.light\.new</keyword>
+ <keyword>aircraft\.lowpass\.new</keyword>
+ <keyword>aircraft\.angular_lowpass\.new</keyword>
+ <keyword>aircraft\.data\.init</keyword>
+ <keyword>aircraft\.data\.load</keyword>
+ <keyword>aircraft\.data\.save</keyword>
+ <keyword>aircraft\.data\.add</keyword>
+ <keyword>aircraft\.timer\.new</keyword>
+ <keyword>aircraft\.livery\.new</keyword>
+ <keyword>aircraft\.livery_update\.new</keyword>
+ <keyword>aircraft\.overlay_update\.new</keyword>
+ <keyword>aircraft\.steering\.init</keyword>
+ <keyword>aircraft\.steering\.setbrakes</keyword>
+ <keyword>aircraft\.autotrim\.init</keyword>
+ <keyword>aircraft\.autotrim\.start</keyword>
+ <keyword>aircraft\.autotrim\.stop</keyword>
+ <keyword>aircraft\.tyresmoke\.new</keyword>
+ <keyword>aircraft\.tyresmoke_system\.new</keyword>
+ <keyword>aircraft\.rain\.init</keyword>
+ <keyword>aircraft\.rain\.update</keyword>
+ <keyword>aircraft\.teleport</keyword>
+ <keyword>aircraft\.wind_speed_from</keyword>
+ <keyword>aircraft\.kias_to_ktas</keyword>
+ <keyword>aircraft\.HUD\.init</keyword>
+ <keyword>aircraft\.HUD\.cycle_color</keyword>
+ <keyword>aircraft\.HUD\.cycle_brightness</keyword>
+ <keyword>aircraft\.HUD\.normal_type</keyword>
+ <keyword>aircraft\.HUD\.cycle_type</keyword>
+ <keyword>aircraft\.HUD\.is_active</keyword>
+ <keyword>aircraft\.crossfeed_valve\.new</keyword>
+ <!-- screen.nas -->
+ <keyword>screen\.window\.new</keyword>
+ <keyword>screen\.display\.new</keyword>
+ <keyword>screen\.msg_repeat</keyword>
+ <!-- geo.nas -->
+ <keyword>geo\.Coord\.new</keyword>
+ <keyword>geo\.normdeg</keyword>
+ <keyword>geo\.tile_index</keyword>
+ <keyword>geo\.format</keyword>
+ <keyword>geo\.tile_path</keyword>
+ <keyword>geo\.put_model</keyword>
+ <keyword>geo\.click_position</keyword>
+ <keyword>geo\.aircraft_position</keyword>
+ <keyword>geo\.viewer_position</keyword>
+
+ <!-- Mine (ignore) -->
+ <keyword>setlocalprop</keyword>
+ <keyword>getlocalprop</keyword>
+ </context>
+
+ <!-- Flightgear props.Node methods -->
+ <context id="node-object" style-ref="builtin-function">
+ <prefix>(?<=\.)</prefix> <!-- look behind for . as a prefix-->
+ <keyword>initNode</keyword>
+ <keyword>getNode</keyword>
+ <keyword>getType</keyword>
+ <keyword>getName</keyword>
+ <keyword>getPath</keyword>
+ <keyword>getIndex</keyword>
+ <keyword>getValue</keyword>
+ <keyword>getBoolValue</keyword>
+ <keyword>getValues</keyword>
+ <keyword>getParent</keyword>
+ <keyword>getChildren</keyword>
+ <keyword>getChild</keyword>
+ <keyword>getAttribute</keyword>
+ <keyword>setIntValue</keyword>
+ <keyword>setBoolValue</keyword>
+ <keyword>setDoubleValue</keyword>
+ <keyword>setValues</keyword>
+ <keyword>setValue</keyword>
+ <keyword>setAttribute</keyword>
+ <keyword>addChildren</keyword>
+ <keyword>addChild</keyword>
+ <keyword>removeAllChildren</keyword>
+ <keyword>removeChildren</keyword>
+ <keyword>removeChild</keyword>
+ <keyword>remove</keyword>
+ <keyword>clearValue</keyword>
+ <keyword>unalias</keyword>
+ <keyword>alias</keyword>
+ </context>
+
+ <context id="nasal" class="no-spell-check">
+ <include>
+ <context ref="def:shebang"/>
+ <context ref="def:shell-like-comment"/>
+ <context ref="nasal-code-string-double"/>
+ <context ref="nasal-code-string-single"/>
+ <context ref="double-quoted-string"/>
+ <context ref="single-quoted-string"/>
+ <context ref="string-conversion"/>
+ <context ref="number"/>
+ <context ref="operators"/>
+ <context ref="keyword"/>
+ <context ref="blockoid"/>
+ <context ref="builtin-constants"/>
+ <context ref="builtin-function"/>
+ <context ref="node-object"/>
+ <context ref="special-variables"/>
+ <context ref="module-handler"/>
+ <context ref="escaped-char"/>
+ </include>
+ </context>
+ <context id="nasal-noextend" class="no-spell-check" extend-parent="false">
+ <start>.</start>
+ <end>.</end>
+ <include>
+ <context ref="def:shebang"/>
+ <context ref="def:shell-like-comment"/>
+ <context ref="nasal-code-string-double"/>
+ <context ref="nasal-code-string-single"/>
+ <context ref="double-quoted-string"/>
+ <context ref="single-quoted-string"/>
+ <context ref="string-conversion"/>
+ <context ref="number"/>
+ <context ref="operators"/>
+ <context ref="keyword"/>
+ <context ref="blockoid"/>
+ <context ref="builtin-constants"/>
+ <context ref="builtin-function"/>
+ <context ref="node-object"/>
+ <context ref="special-variables"/>
+ <context ref="module-handler"/>
+ <context ref="escaped-char"/>
+ </include>
+ </context>
+
+ <context id="nasal-code-string-double">
+ <start>"""</start>
+ <end>"""</end>
+ <include>
+ <!-- Highlight our delimiters -->
+ <context sub-pattern="0" where="start" style-ref="string"/>
+ <context sub-pattern="0" where="end" style-ref="string"/>
+ <context ref="def:shebang"/>
+ <context ref="def:shell-like-comment"/>
+ <context ref="escaped-double-quoted-string"/>
+ <context ref="single-quoted-string"/>
+ <context id="double-quote-error" style-ref="def:error">
+ <match>"(?! *~|"")</match>
+ </context>
+ <context id="non-string-double" extend-parent="false">
+ <start>"</start>
+ <end>"</end>
+ <include><context ref="nasal-noextend"/></include>
+ </context>
+ <context ref="string-conversion"/>
+ <context ref="number"/>
+ <context ref="operators"/>
+ <context ref="keyword"/>
+ <context ref="blockoid"/>
+ <context ref="builtin-constants"/>
+ <context ref="builtin-function"/>
+ <context ref="node-object"/>
+ <context ref="special-variables"/>
+ <context ref="module-handler"/>
+ </include>
+ </context>
+ <context id="nasal-code-string-single">
+ <start>'''</start>
+ <end>'''</end>
+ <include>
+ <!-- Highlight our delimiters -->
+ <context sub-pattern="0" where="start" style-ref="string"/>
+ <context sub-pattern="0" where="end" style-ref="string"/>
+ <context ref="def:shebang"/>
+ <context ref="def:shell-like-comment"/>
+ <context ref="double-quoted-string"/>
+ <context ref="escaped-single-quoted-string"/>
+ <context id="single-quote-error" style-ref="def:error">
+ <match>'(?! *~|'')</match>
+ </context>
+ <context id="non-string-single" extend-parent="false">
+ <start>'</start>
+ <end>'</end>
+ <include><context ref="nasal-noextend"/></include>
+ </context>
+ <context ref="string-conversion"/>
+ <context ref="number"/>
+ <context ref="operators"/>
+ <context ref="keyword"/>
+ <context ref="blockoid"/>
+ <context ref="builtin-constants"/>
+ <context ref="builtin-function"/>
+ <context ref="node-object"/>
+ <context ref="special-variables"/>
+ <context ref="module-handler"/>
+ </include>
+ </context>
+
+ <context id="xml-extras">
+ <include>
+ <context ref="xml:comment"/>
+ <context id="cdata">
+ <start><!\[CDATA\[</start>
+ <end>\]\]></end>
+ <include>
+ <!-- Highlight our delimiters -->
+ <context sub-pattern="0" where="start" style-ref="xml:cdata-delim" class="no-spell-check"/>
+ <context sub-pattern="0" where="end" style-ref="xml:cdata-delim"/>
+ <!-- And include regular Nasal (no XML extensions) -->
+ <context ref="nasal"/>
+ </include>
+ </context>
+ <context id="character-reference" style-ref="xml:entity">
+ <match>&(#([0-9]+|x[a-fA-F0-9]+)|lt|gt|amp|quot|apos);</match>
+ </context>
+ <context id="unallowed-chars" style-ref="xml:error" extend-parent="false">
+ <match>[&<>]</match>
+ </context>
+ </include>
+ </context>
+
+ <!-- For use when embedded in XML, e.g. in a <script> tag. -->
+ <context id="xml">
+ <include>
+ <context id="script">
+ <start>(?<=<script>)</start><!-- look behind for <script> as a start -->
+ <end>(?=</script>)</end><!-- look ahead for </script> as an end -->
+ <include>
+ <context ref="xml-extras"/>
+ <context ref="nasal"/>
+ </include>
+ </context>
+ <context id="dialog-open">
+ <start>(?<=<open>)</start><!-- look behind for <open> as a start -->
+ <end>(?=</open>)</end><!-- look ahead for </open> as an end -->
+ <include>
+ <context ref="xml-extras"/>
+ <context ref="nasal"/>
+ </include>
+ </context>
+ <context id="dialog-close">
+ <start>(?<=<close>)</start><!-- look behind for <close> as a start -->
+ <end>(?=</close>)</end><!-- look ahead for </close> as an end -->
+ <include>
+ <context ref="xml-extras"/>
+ <context ref="nasal"/>
+ </include>
+ </context>
+ <context id="model-load">
+ <start>(?<=<load>)</start><!-- look behind for <load> as a start -->
+ <end>(?=</load>)</end><!-- look ahead for </load> as an end -->
+ <include>
+ <context ref="xml-extras"/>
+ <context ref="nasal"/>
+ </include>
+ </context>
+ <context id="model-unload">
+ <start>(?<=<unload>)</start><!-- look behind for <unload> as a start -->
+ <end>(?=</unload>)</end><!-- look ahead for </unload> as an end -->
+ <include>
+ <context ref="xml-extras"/>
+ <context ref="nasal"/>
+ </include>
+ </context>
+ </include>
+ </context>
+ </definitions>
+</language>