<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<!--
LUA (www.lua.org) syntax highlighting for Kate
CHANGES
[ Version 1.03 (2007-09-12) by Bruno Massa ]
- [=[ ]=] comment and string style is now working (thanks to Dominik and Sebastian)
- it uses DoxygenLua.xml to format the comments in a Doxygen style
[ Version 1.02 (2007-07-15) by Bruno Massa ]
- based on Lua 5.1
- highlight the Kepler function (cgilua, luasql, lfs, luazip)
- true, false and nil are highlighted in black
- table.foreach and foreachi are marked as alerts
[ Version 1.01 (2007-01-01) by Bruno Massa ]
- highlighting similar to PHP
- error detection on one-line strings and common mistakes from other languages like using "!=" "++"
- uppercase-only variables are highlighted as constants
- { } now is collapsable
[ Version 1.00 (2006-12-05) by Bruno Massa ]
- based on Lua 5.0.2 syntax
- strings "[[ ]]" and single quoted strings
- block comments
- function, if/elseif/else, do-end chunks, comment blocks, strings using [[ ]] collapsable
- nil, false and true consided pseudo-variables (displayed as numbers)
- NOTE, FIXME, TODO alerts added on comments
- improved highlighting
-->
<language name="Lua" version="2" indenter="lua" kateversion="3.4" section="Scripts" extensions="*.lua" mimetype="text/x-lua">
<highlighting>
<list name="keywords">
<item>and</item>
<item>function</item>
<item>in</item>
<item>local</item>
<item>not</item>
<item>or</item>
</list>
<list name="control">
<item>break</item>
<item>do</item>
<item>else</item>
<item>elseif</item>
<item>end</item>
<item>for</item>
<item>if</item>
<item>repeat</item>
<item>return</item>
<item>then</item>
<item>until</item>
<item>while</item>
</list>
<list name="pseudo-variables">
<item>nil</item>
<item>false</item>
<item>true</item>
</list>
<list name="basefunc">
<item>string.byte</item> <item>string.char</item>
<item>string.find</item> <item>string.len</item>
<item>string.lower</item> <item>string.rep</item>
<item>string.sub</item> <item>string.upper</item>
<item>string.format</item><item>string.gfind</item>
<item>string.gsub</item> <item>table.concat</item>
<item>table.getn</item> <item>table.sort</item>
<item>table.insert</item> <item>table.remove</item>
<item>table.setn</item> <item>math.abs</item>
<item>math.sin</item> <item>math.cos</item>
<item>math.tan</item> <item>math.asin</item>
<item>math.acos</item> <item>math.atan</item>
<item>math.atan2</item> <item>math.ceil</item>
<item>math.floor</item> <item>math.mod</item>
<item>math.frexp</item> <item>math.ldexp</item>
<item>math.squrt</item> <item>math.min</item>
<item>math.max</item> <item>math.log</item>
<item>math.log10</item> <item>math.exp</item>
<item>math.deg</item> <item>math.rad</item>
<item>math.random</item> <item>math.randomseed</item>
<item>io.close</item> <item>io.flush</item>
<item>io.input</item> <item>io.lines</item>
<item>io.open</item> <item>io.output</item>
<item>io.read</item> <item>io.stderr</item>
<item>io.stdin</item> <item>io.stdout</item>
<item>io.tmpfile</item> <item>io.write</item>
<item>os.clock</item> <item>os.date</item>
<item>os.difftime</item> <item>os.execute</item>
<item>os.exit</item> <item>os.getenv</item>
<item>os.remove</item> <item>os.rename</item>
<item>os.setlocale</item> <item>os.time</item>
<item>os.tmpname</item> <item>debug.getinfo</item>
<item>debug.getlocal</item><item>debug.setlocal</item>
<item>debug.sethook</item><item>debug.gethook</item>
<item>assert</item> <item>collectgarbage</item>
<item>dofile</item> <item>error</item>
<item>next</item> <item>print</item>
<item>rawget</item> <item>rawset</item>
<item>tonumber</item> <item>tostring</item>
<item>type</item> <item>_ALERT</item>
<item>_ERRORMESSAGE</item><item>call</item>
<item>getmetatable</item><item>gcinfo</item>
<item>ipairs</item> <item>loadfile</item>
<item>loadstring</item> <item>pairs</item>
<item>pcall</item> <item>require</item>
<item>LUA_PATH</item> <item>setmetatable</item>
<item>_LOADED</item> <item>_VERSION</item>
<item>gettagmethod</item><item>globals</item>
<item>newtag</item> <item>setglobal</item>
<item>settag</item> <item>settagmethod</item>
<item>setlinehook</item> <item>getglobals</item>
<item>copytagmethods</item><item>dostring</item>
<item>getglobal</item> <item>tag</item>
<item>setglobals</item> <item>unpack</item>
<item>exit</item> <item>readfrom</item>
<item>writeto</item> <item>appendto</item>
<item>read</item> <item>write</item>
<item>getinfo</item> <item>getlocal</item>
<item>setlocal</item> <item>setcallhook</item>
<item>tinsert</item> <item>tremove</item>
<item>flush</item> <item>seek</item>
<item>setlocale</item> <item>execute</item>
<item>remove</item> <item>rename</item>
<item>tmpname</item> <item>getenv</item>
<item>getn</item> <item>sort</item>
<item>table.foreach</item> <item>table.foreachi</item>
<item>foreach</item> <item>foreachi</item>
<item>abs</item> <item>sin</item>
<item>cos</item> <item>tan</item>
<item>asin</item> <item>acos</item>
<item>atan</item> <item>atan2</item>
<item>ceil</item> <item>floor</item>
<item>mod</item> <item>frexp</item>
<item>ldexp</item> <item>squrt</item>
<item>min</item> <item>max</item>
<item>log</item> <item>log10</item>
<item>exp</item> <item>deg</item>
<item>rad</item> <item>random</item>
<item>randomseed</item> <item>strlen</item>
<item>strsub</item> <item>strlower</item>
<item>strupper</item> <item>strchar</item>
<item>strrep</item> <item>ascii</item>
<item>strbyte</item> <item>format</item>
<item>strfind</item> <item>gsub</item>
<item>openfile</item> <item>closefile</item>
<item>date</item> <item>clock</item>
<item>cgilua</item> <item>cgilua.lp.translate</item>
<item>cgilua.contentheader</item> <item>cgilua.script_file</item>
<item>cgilua.header</item> <item>cgilua.script_path</item>
<item>cgilua.htmlheader</item> <item>cgilua.script_pdir</item>
<item>cgilua.redirect</item> <item>cgilua.script_vdir</item>
<item>cgilua.mkabsoluteurl</item> <item>cgilua.script_vpath</item>
<item>cgilua.mkurlpath</item> <item>cgilua.servervariable</item>
<item>cgilua.put</item> <item>cgilua.urlpath</item>
<item>cgilua.handlelp</item> <item>cgilua.errorlog</item>
<item>cgilua.lp.compile</item> <item>cgilua.seterrorhandler</item>
<item>cgilua.lp.include</item> <item>cgilua.seterroroutput</item>
<item>cgilua.lp.setcompatmode</item> <item>cgilua.addclosefunction</item>
<item>cgilua.lp.setoutfunc</item> <item>cgilua.addopenfunction</item>
<item>cgilua.addscripthandler</item> <item>cgilua.addscripthandler</item>
<item>cgilua.buildprocesshandler</item> <item>cgilua.setmaxfilesize</item>
<item>cgilua.setmaxinput</item> <item>cgilua.urlcode.encodetable</item>
<item>cgilua.urlcode.escape</item> <item>cgilua.urlcode.parsequery</item>
<item>cgilua.urlcode.unescape</item> <item>cgilua.urlcode.insertfield</item>
<item>cgilua.setoutfunc</item> <item>cgilua.addopenfunction</item>
<item>cgilua.doif</item> <item>cgilua.doscript</item>
<item>cgilua.pack</item> <item>cgilua.splitpath</item>
<item>cgilua.cookies.get</item> <item>cgilua.cookies.set</item>
<item>cgilua.cookies.sethtml</item> <item>cgilua.cookies.delete</item>
<item>cgilua.serialize</item> <item>cgilua.session.close</item>
<item>cgilua.session.data</item> <item>cgilua.session.load</item>
<item>cgilua.session.new</item> <item>cgilua.session.open</item>
<item>cgilua.session.save</item> <item>cgilua.session.setsessiondir</item>
<item>cgilua.session.delete</item> <item>cgilua.session</item>
<item>cgilua.cookies</item>
<item>numrows</item> <item>connect</item>
<item>close</item> <item>fetch</item>
<item>getcolnames</item> <item>getcoltypes</item>
<item>commit</item> <item>rollback</item>
<item>setautocommit</item>
<item>lfs</item> <item>lfs.attributes</item>
<item>lfs.chdir</item> <item>lfs.currentdir</item>
<item>lfs.dir</item> <item>lfs.lock</item>
<item>lfs.mkdir</item> <item>lfs.rmdir</item>
<item>lfs.touch</item> <item>lfs.unlock</item>
<item>zip</item> <item>zip.open</item>
<item>zip.openfile</item> <item>files</item>
<item>seek</item> <item>close</item>
<item>lines</item>
</list>
<list name="attention">
<item>TODO</item>
<item>FIXME</item>
<item>NOTE</item>
</list>
<list name="deprecated">
<item>table.foreach</item> <item>table.foreachi</item>
<item>foreach</item> <item>foreachi</item>
</list>
<contexts>
<context name="Normal" attribute="Normal Text" lineEndContext="#stay">
<IncludeRules context="##DoxygenLua" />
<keyword attribute="Error" context="#stay" String="deprecated" />
<DetectSpaces />
<RegExpr attribute="Comment" context="Block Comment" beginRegion="block comment" String="--\[(=*)\[" dynamic="true" />
<Detect2Chars attribute="Comment" context="Comment" char="-" char1="-"/>
<RegExpr attribute="Strings" context="String_block" String="\[(=*)\[" dynamic="true" />
<DetectChar attribute="Strings" context="String_single" char="'"/>
<DetectChar attribute="Strings" context="String_double" char="""/>
<keyword attribute="BFunc" context="#stay" String="basefunc"/>
<RegExpr attribute="Keyword" context="#stay" beginRegion="chunk" String="\bfunction\b" />
<keyword attribute="Keyword" context="#stay" String="keywords" />
<keyword attribute="Keyword" context="#stay" String="pseudo-variables" />
<RegExpr attribute="Control" context="#stay" endRegion="chunk" beginRegion="chunk" String="\belse\b" />
<RegExpr attribute="Control" context="#stay" endRegion="chunk" beginRegion="chunk" String="\belseif\b" />
<RegExpr attribute="Control" context="#stay" beginRegion="chunk" String="\bdo\b" />
<RegExpr attribute="Control" context="#stay" beginRegion="chunk" String="\bif\b" />
<RegExpr attribute="Control" context="#stay" endRegion="chunk" String="\bend\b" />
<keyword attribute="Control" context="#stay" String="control" />
<DetectChar attribute="Symbols" context="#stay" beginRegion="table" char="{" />
<DetectChar attribute="Symbols" context="#stay" endRegion="table" char="}" />
<RegExpr attribute="Numbers" context="#stay" String="\b\d*\.?\d*(e|e\-|e\+)?\d+\b"/>
<RegExpr attribute="Numbers" context="#stay" String="\b-?0[xX][0-9a-fA-F]+\b"/>
<RegExpr attribute="Normal Text" context="#stay" String="\b[a-zA-Z_][a-zA-Z0-9_]*(?=\s*([({'"]|\[\[))\b" />
<RegExpr attribute="Constant" context="#stay" String="\b[A-Z_][A-Z0-9_]*\b" />
<RegExpr attribute="Variable" context="#stay" String="\b[a-zA-Z_][a-zA-Z0-9_]*\b" />
<Detect2Chars attribute="Error" context="#stay" char="!" char1="="/>
<Detect2Chars attribute="Error" context="#stay" char="-" char1="="/>
<Detect2Chars attribute="Error" context="#stay" char="+" char1="="/>
<Detect2Chars attribute="Error" context="#stay" char="+" char1="+"/>
<Detect2Chars attribute="Error" context="#stay" char="." char1="="/>
<AnyChar attribute="Symbols" context="#stay" String="[]().,=~+-*/^><#;" />
</context>
<context name="Comment" attribute="Comment" lineEndContext="#pop">
<Detect2Chars attribute="Alerts" context="#stay" char="-" char1="-" />
<keyword attribute="Alerts" context="#stay" String="attention"/>
</context>
<context name="Block Comment" attribute="Comment" lineEndContext="#stay" dynamic="true" >
<RegExpr attribute="Comment" context="#pop" endRegion="block comment" String="\]%1\]" dynamic="true" />
<Detect2Chars attribute="Alerts" context="#stay" char="-" char1="-" />
<keyword attribute="Alerts" context="#stay" String="attention" />
</context>
<context name="String_single" attribute="Strings" lineEndContext="Error">
<RegExpr attribute="Symbols" context="#stay" String="\\(a|b|f|n|r|t|v|\\|"|\'|[|])" />
<DetectChar attribute="Strings" context="#pop" char="'"/>
</context>
<context name="String_double" attribute="Strings" lineEndContext="Error">
<RegExpr attribute="Symbols" context="#stay" String="\\[abfnrtv'"\\\[\]]" />
<DetectChar attribute="Strings" context="#pop" char="""/>
</context>
<context name="String_block" attribute="Strings" lineEndContext="#stay" dynamic="true">
<RegExpr attribute="Symbols" context="#stay" String="\\(a|b|f|n|r|t|v|\\|"|\'|[|])" />
<RegExpr attribute="Strings" context="#pop" String="\]%1\]" dynamic="true" />
</context>
<context name="Error" attribute="Error" lineEndContext="#stay">
</context>
</contexts>
<itemDatas>
<itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false"/>
<itemData name="Alerts" defStyleNum="dsAlert" spellChecking="false"/>
<itemData name="BFunc" defStyleNum="dsFunction" spellChecking="false"/>
<itemData name="Comment" defStyleNum="dsComment"/>
<itemData name="Constant" defStyleNum="dsNormal" /> <!-- JGM -->
<itemData name="Control" defStyleNum="dsKeyword" color="#A1A100" selColor="#ffffff" bold="0" italic="0" spellChecking="false"/>
<itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
<itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
<itemData name="Numbers" defStyleNum="dsDecVal" spellChecking="false"/>
<itemData name="Strings" defStyleNum="dsString"/>
<itemData name="Symbols" defStyleNum="dsOthers" spellChecking="false"/>
<itemData name="Variable" defStyleNum="dsNormal" /> <!-- JGM -->
</itemDatas>
</highlighting>
<general>
<comments>
<comment name="singleLine" start="--" />
<comment name="multiLine" start="--[[" end="]]" />
</comments>
<keywords casesensitive="1" weakDeliminator="." additionalDeliminator="""/>
</general>
</language>