Skip to content

Instantly share code, notes, and snippets.

@losinggeneration
Created January 15, 2014 06:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save losinggeneration/8431882 to your computer and use it in GitHub Desktop.
Save losinggeneration/8431882 to your computer and use it in GitHub Desktop.
A MoonScript syntax file for Kate
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<!--
By Harley Laue <losinggeneration@gmail.com>
Based on the CoffeeScript syntax file by Max Shawabkeh (max99x@gmail.com)
and the Lua syntax file by Bruno Massa
-->
<language name="MoonScript"
version="1.0"
kateversion="2.4"
section="Scripts"
extensions="*.moon"
mimetype="text/x-moonscript;application/x-moonscript"
indenter="python"
casesensitive="1"
author="Harley Laue (losinggeneration@gmail.com)"
license="MIT">
<highlighting>
<!-- Built-in constants. -->
<list name="value_keywords">
<item>false</item>
<item>true</item>
<item>nil</item>
</list>
<!-- Generic keywords. -->
<list name="keywords">
<item>return</item>
<item>break</item>
<item>continue</item>
<item>for</item>
<item>while</item>
<item>if</item>
<item>else</item>
<item>unless</item>
<item>switch</item>
<item>when</item>
<item>and</item>
<item>or</item>
<item>in</item>
<item>do</item>
<item>not</item>
<item>super</item>
<item>try</item>
<item>catch</item>
<item>with</item>
<item>export</item>
<item>import</item>
</list>
<!-- Keywords which are always followed by a class name. -->
<list name="class_keywords">
<item>class</item>
<item>extends</item>
<item>new</item>
</list>
<!-- Built-in globals provided in most contexts. -->
<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>dsAlert
<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>
</list>
<list name="attention">
<item> TODO </item>
<item> FIXME </item>
<item> NOTE </item>
</list>
<!-- Context-sensitive highlighting rules. -->
<contexts>
<!-- Generic code. -->
<context name="Normal" attribute="Normal" lineEndContext="#stay">
<DetectSpaces/>
<keyword attribute="BFunc"context="#stay" String="basefunc"/>
<!-- Numbers. -->
<Float attribute="Float" context="#stay"/>
<Int attribute="Decimal" context="#stay"/>
<HlCOct attribute="Oct" context="#stay"/>
<HlCHex attribute="Hex" context="#stay"/>
<!-- Keywords. -->
<keyword attribute="Keyword" context="#stay" String="keywords"/>
<keyword attribute="Keyword" context="Class" String="class_keywords"/>
<keyword attribute="Value Keywords" context="#stay" String="value_keywords"/>
<!-- Member accessors. -->
<RegExpr attribute="Accessor" context="#stay" String="(@[_$a-zA-Z][$\w]*|\bthis)\b" insensitive="false"/>
<!-- Function definitions. Matches an optional argument list followed by a function arrow (normal or fat). -->
<RegExpr attribute="Function" context="#stay" String="(\((\'[^']*'|&quot;[^&quot;]*&quot;|[^()])*\))?\s*(-|=)&gt;" insensitive="true"/>
<!-- Generic identifiers. -->
<RegExpr attribute="Identifier" context="#stay" String="[_$a-z][$\w]*\b" insensitive="true"/>
<!-- Strings. -->
<DetectChar attribute="String" context="String" char="'"/>
<DetectChar attribute="String" context="Rich String" char="&quot;"/>
<RegExpr attribute="String" context="String Block" String="\[(=*)\[" dynamic="true" />
<!-- Comments. -->
<Detect2Chars attribute="Comment" context="Comment" char="-" char1="-"/>
<!-- Operators and other non-alphanumeric symbols. -->
<AnyChar attribute="Symbol" context="#stay" String="\\#():!%&amp;+,-/.*&lt;=&gt;?[]|~^&#59;{}"/>
<DetectChar attribute="Symbols" context="#stay" beginRegion="table" char="{" />
<DetectChar attribute="Symbols" context="#stay" endRegion="table" char="}" />
</context>
<!-- Class names. -->
<context name="Class" attribute="Normal" lineEndContext="#stay">
<DetectSpaces/>
<RegExpr attribute="Class" context="#pop" String="[@$:.\w\[\]]+"/>
</context>
<!-- Comments. -->
<context name="Comment" attribute="Comment" lineEndContext="#pop">
<Detect2Chars attribute="Alerts" context="#stay" char="-" char1="-" />
<keyword attribute="Alerts" context="#stay" String="attention"/>
</context>
<context name="String Block" attribute="String" lineEndContext="#stay" dynamic="true">
<RegExpr attribute="Symbols" context="#stay" String="\\(a|b|f|n|r|t|v|\\|&quot;|\'|[|])" />
<RegExpr attribute="Strings" context="#pop" String="\]%1\]" dynamic="true" />
</context>
<!-- Single-line strings. -->
<context name="String" attribute="String" lineEndContext="#stay">
<HlCStringChar attribute="String" context="#stay"/>
<DetectChar attribute="String" context="#pop" char="'"/>
</context>
<context name="Rich String" attribute="String" lineEndContext="#stay">
<HlCStringChar attribute="String" context="#stay"/>
<Detect2Chars attribute="Embedding" context="Embedding" char="#" char1="{"/>
<DetectChar attribute="String" context="#pop" char="&quot;"/>
</context>
<!-- Expressions embedded in strings. -->
<context name="Embedding" attribute="Normal" lineEndContext="#stay">
<DetectChar attribute="Embedding" context="#pop" char="}"/>
</context>
</contexts>
<!-- Style mappings. -->
<itemDatas>
<itemData name="Normal" defStyleNum="dsNormal" spellChecking="false"/>
<itemData name="BFunc" defStyleNum="dsFunction" spellChecking="false"/>
<itemData name="Identifier" defStyleNum="dsNormal" spellChecking="false"/>
<itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
<itemData name="Function" defStyleNum="dsFunction" spellChecking="false"/>
<itemData name="Decimal" defStyleNum="dsDecVal" spellChecking="false"/>
<itemData name="Float" defStyleNum="dsFloat" spellChecking="false"/>
<itemData name="Oct" defStyleNum="dsBaseN" spellChecking="false"/>
<itemData name="Hex" defStyleNum="dsBaseN" spellChecking="false"/>
<itemData name="String" defStyleNum="dsString" spellChecking="false"/>
<itemData name="Comment" defStyleNum="dsComment" spellChecking="true"/>
<itemData name="Symbol" defStyleNum="dsKeyword" spellChecking="false"/>
<itemData name="Accessor" defStyleNum="dsDataType" spellChecking="false"/>
<itemData name="Class" defStyleNum="dsDataType" spellChecking="false" bold="1"/>
<itemData name="Alerts" defStyleNum="dsAlert" spellChecking="false"/>
<itemData name="Value Keywords" defStyleNum="dsOthers" spellChecking="false"/>
<itemData name="Embedding" defStyleNum="dsChar" spellChecking="false"/>
</itemDatas>
</highlighting>
<!-- Global settings. -->
<general>
<indentation mode="python"/>
<folding indentationsensitive="1"/>
<comments>
<comment name="singleLine" start="--"/>
</comments>
<keywords casesensitive="1" additionalDeliminator="#'"/>
<emptyLines>
<emptyLine regexpr="(?:\s+|\s*#.*)"/>
</emptyLines>
</general>
</language>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment