<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<!-- Author: Anders Lund <anders@alweb.dk> // -->
<!-- Minor changes: Joseph Wenninger <jowenn@kde.org> // -->
<!-- Full JavaScript 1.0 support by Whitehawk Stormchaser // -->
<language name= "JavaScript" version= "1.22" kateversion= "2.4" section= "Scripts" extensions= "*.js;*.kwinscript"
mimetype="text/x-javascript;application/x-javascript" indenter="cstyle"
author="Anders Lund (anders@alweb.dk), Joseph Wenninger (jowenn@kde.org), Whitehawk Stormchaser (zerokode@gmx.net)" license="">
<highlighting >
<list name= "keywords" >
<item > break </item>
<item > case </item>
<item > catch </item>
<item > const </item>
<item > continue </item>
<item > debugger </item>
<item > default </item>
<item > delete </item>
<item > do </item>
<item > else </item>
<item > finally </item>
<item > for </item>
<item > function </item>
<item > if </item>
<item > in </item>
<item > instanceof </item>
<item > new </item>
<item > return </item>
<item > switch </item>
<item > this </item>
<item > throw </item>
<item > try </item>
<item > typeof </item>
<item > var </item>
<item > void </item>
<item > while </item>
<item > with </item>
</list>
<list name= "reserved" >
<item > class </item>
<item > enum </item>
<item > export </item>
<item > extends </item>
<item > import </item>
<item > super </item>
<!-- The following keywords are reserved only in strict - mode -->
<item > implements </item>
<item > interface </item>
<item > let </item>
<item > package </item>
<item > private </item>
<item > protected </item>
<item > public </item>
<item > static </item>
<item > yield </item>
</list>
<list name= "primitives" >
<item > Infinity </item>
<item > NaN </item>
<item > false </item>
<item > null </item>
<item > true </item>
<item > undefined </item>
</list>
<contexts >
<!-- Shebang: ("#!") Detect shebang and fallthrough to Normal -->
<!-- Based on the similar clause from prolog.xml, which notes the following BUG:
If the file starts with whitespace and a shebang on a line other than the first line,
this rule will still match it as a shebang, even tough the shebang is only valid on
the very first line.
-->
<context name= "Shebang" lineEndContext= "Normal" attribute= "Syntax Error" fallthrough= "true" fallthroughContext= "Normal" >
<Detect2Chars column= "0" char= "#" char1= "!" context= "Comment" attribute= "Comment" />
</context>
<context attribute= "Normal Text" lineEndContext= "#stay" name= "Normal" >
<DetectSpaces />
<StringDetect attribute= "Region Marker" context= "region_marker" String= "//BEGIN" beginRegion= "Region1" />
<StringDetect attribute= "Region Marker" context= "region_marker" String= "//END" endRegion= "Region1" />
<Float attribute= "Float" context= "NoRegExp" />
<HlCOct attribute= "Octal" context= "NoRegExp" />
<HlCHex attribute= "Hex" context= "NoRegExp" />
<Int attribute= "Decimal" context= "NoRegExp" />
<AnyChar context= "NoRegExp" String= "])" />
<keyword attribute= "Keyword" String= "keywords" />
<keyword attribute= "Reserved" String= "reserved" />
<keyword attribute= "Keyword" context= "NoRegExp" String= "primitives" />
<!-- DetectIdentifier -->
<RegExpr attribute= "Objects" context= "Object Member" String= "[a-zA-Z_$][\w$]*(?=\s*\.)" />
<!-- DetectIdentifier -->
<RegExpr attribute= "Object Member" context= "NoRegExp" String= "[a-zA-Z_$][\w$]*(?=\s*\()" />
<DetectChar context= "Object Member" char= "." />
<!-- DetectIdentifier -->
<RegExpr context= "NoRegExp" String= "[a-zA-Z_$][\w$]*" />
<DetectChar attribute= "String" context= "String" char= """ />
<DetectChar attribute= "String" context= "String SQ" char= "'" />
<IncludeRules context= "##Doxygen" />
<Detect2Chars attribute= "Comment" context= "Comment" char= "/" char1= "/" />
<Detect2Chars attribute= "Comment" context= "Multi/inline Comment" char= "/" char1= "*" beginRegion= "Comment" />
<DetectChar attribute= "Regular Expression" context= "(regex caret first check)" char= "/" />
<DetectChar attribute= "Symbol" context= "Object" char= "{" beginRegion= "Brace" />
<DetectChar attribute= "Symbol" context= "Conditional Expression" char= "?" />
<AnyChar attribute= "Symbol" String= ":!%&+,-/.*<=>?|~^;" />
</context>
<context attribute= "Normal Text" lineEndContext= "#pop" fallthrough= "true" fallthroughContext= "#pop" name= "Object Member" >
<DetectChar char= "." />
<!-- DetectIdentifier -->
<RegExpr attribute= "Objects" context= "Object Member" String= "[a-zA-Z_$][\w$]*(?=\s*\.)" />
<!-- DetectIdentifier -->
<RegExpr attribute= "Object Member" String= "[a-zA-Z_$][\w$]*" />
<IncludeRules context= "NoRegExp" />
</context>
<context attribute= "Normal Text" lineEndContext= "#stay" fallthrough= "true" fallthroughContext= "#pop" name= "NoRegExp" >
<Detect2Chars context= "#pop" lookAhead= "true" char= "/" char1= "/" />
<Detect2Chars context= "#pop" lookAhead= "true" char= "/" char1= "*" />
<DetectChar context= "#pop" char= "/" />
<DetectSpaces />
</context>
<context attribute= "Normal Text" lineEndContext= "#stay" name= "Conditional Expression" >
<DetectChar context= "#pop" char= ":" />
<IncludeRules context= "Normal" />
</context>
<context attribute= "Normal Text" lineEndContext= "#stay" name= "Object" >
<!-- Mostly required for define: in switch blocks -->
<keyword attribute= "Keyword" String= "keywords" />
<!-- DetectIdentifier -->
<RegExpr attribute= "JSON" String= "[a-zA-Z_$][\w$]*\s*(?=:)" />
<DetectChar attribute= "Symbol" char= "}" endRegion= "Brace" context= "#pop" />
<IncludeRules context= "Normal" />
</context>
<context attribute= "String" lineEndContext= "#pop" name= "String" >
<HlCStringChar attribute= "Char" />
<LineContinue />
<DetectChar attribute= "String" context= "#pop" char= """ />
</context>
<context attribute= "String" lineEndContext= "#pop" name= "String SQ" >
<HlCStringChar attribute= "Char" />
<LineContinue />
<DetectChar attribute= "String" context= "#pop" char= "'" />
</context>
<context attribute= "Comment" lineEndContext= "#pop" name= "Comment" >
<IncludeRules context= "##Alerts" />
<IncludeRules context= "##Modelines" />
</context>
<context attribute= "Comment" lineEndContext= "#stay" name= "Multi/inline Comment" >
<IncludeRules context= "##Alerts" />
<IncludeRules context= "##Modelines" />
<Detect2Chars attribute= "Comment" context= "#pop" char= "*" char1= "/" endRegion= "Comment" />
</context>
<context attribute= "Regular Expression" lineEndContext= "#stay" name= "Regular Expression" >
<RegExpr attribute= "Regular Expression" context= "#pop#pop" String= "/\w*" />
<RegExpr attribute= "Pattern Internal Operator" String= "\{[\d, ]+\}" />
<RegExpr attribute= "Pattern Internal Operator" String= "\\[bB]" />
<RegExpr attribute= "Pattern Character Class" String= "\\[nrtvfDdSsWw]" />
<DetectChar attribute= "Pattern Character Class" context= "(charclass caret first check)" char= "[" />
<RegExpr attribute= "Pattern Internal Operator" String= "\\." />
<RegExpr attribute= "Pattern Internal Operator" String= "\$(?=/)" />
<AnyChar attribute= "Pattern Internal Operator" String= "?+*()|" />
</context>
<context attribute= "Pattern Character Class" lineEndContext= "#stay" name= "Regular Expression Character Class" >
<RegExpr String= "\\[\[\]]" />
<RegExpr attribute= "Pattern Internal Operator" String= "\\." />
<DetectChar attribute= "Pattern Character Class" context= "#pop#pop" char= "]" />
</context>
<context attribute= "Pattern Internal Operator" lineEndContext= "#pop" name= "(regex caret first check)" fallthrough= "true" fallthroughContext= "Regular Expression" >
<DetectChar attribute= "Pattern Internal Operator" context= "Regular Expression" char= "^" />
</context>
<context attribute= "Pattern Internal Operator" lineEndContext= "#pop" name= "(charclass caret first check)" fallthrough= "true" fallthroughContext= "Regular Expression Character Class" >
<DetectChar attribute= "Pattern Internal Operator" context= "Regular Expression Character Class" char= "^" />
</context>
<context name= "region_marker" attribute= "Region Marker" lineEndContext= "#pop" >
<DetectIdentifier />
<DetectSpaces />
</context>
</contexts>
<itemDatas >
<itemData name= "Normal Text" defStyleNum= "dsNormal" spellChecking= "false" />
<itemData name= "Keyword" defStyleNum= "dsKeyword" spellChecking= "false" />
<itemData name= "Reserved" defStyleNum= "dsKeyword" italic= "true" spellChecking= "false" />
<itemData name= "Function" defStyleNum= "dsFunction" spellChecking= "false" />
<itemData name= "Objects" defStyleNum= "dsOthers" spellChecking= "false" />
<itemData name= "Object Member" defStyleNum= "dsFunction" spellChecking= "false" />
<itemData name= "Decimal" defStyleNum= "dsDecVal" spellChecking= "false" />
<itemData name= "Octal" defStyleNum= "dsBaseN" spellChecking= "false" />
<itemData name= "Hex" defStyleNum= "dsBaseN" spellChecking= "false" />
<itemData name= "Float" defStyleNum= "dsFloat" spellChecking= "false" />
<itemData name= "Char" defStyleNum= "dsChar" spellChecking= "false" />
<itemData name= "String" defStyleNum= "dsString" />
<itemData name= "Comment" defStyleNum= "dsComment" />
<itemData name= "Symbol" defStyleNum= "dsNormal" spellChecking= "false" />
<itemData name= "Regular Expression" defStyleNum= "dsOthers" spellChecking= "false" />
<itemData name= "Pattern Internal Operator" defStyleNum= "dsFloat" spellChecking= "false" />
<itemData name= "Pattern Character Class" defStyleNum= "dsBaseN" spellChecking= "false" />
<itemData name= "Region Marker" defStyleNum= "dsRegionMarker" spellChecking= "false" />
<itemData name= "JSON" defStyleNum= "dsDataType" spellChecking= "false" />
</itemDatas>
</highlighting>
<general >
<comments >
<comment name= "singleLine" start= "//" />
<comment name= "multiLine" start= "/*" end= "*/" />
</comments>
<keywords casesensitive= "1" />
</general>
</language>