<?xml version="1.0" encoding="UTF-8"?> <!-- ==================================================================== Julia syntax highlighting file for the TDE editors Kate and Kwrite ==================================================================== This was adapted from the Matlab syntax highlighting file Most of this XML file is straightforward. Only the character ' (') needs nontrivial treatment, since it is both a postfix operator indicating complex conjugate transpose (adjoint) and a character delimiter. It is an adjoint operator in the following positions: 1) immediately after an identifier (variable, function, but not keyword) 2) immediately after a number literal 3) immediately after the closing parenthesis ), ] and } 4) immediately after a simple transpose operator .' 5) immediately after another adjoint operator ' Otherwise it is a character delimiter. This is implemented using look-ahead regexps. If one of the entities in the above cases 1-4 (identifier, number literal, ...) matches and look-ahead shows that it is followed by a ', the entity is highlighted and control is passed to the special context _adjoint, whose sole purpose is to correctly highlight a series of ' (thus covering case 5 as well). _adjoint immediately returns to the default context _normal. Author: Timothy E. Holy, Washington University in St. Louis --> <!DOCTYPE language SYSTEM "language.dtd"> <language name="Julia" section="Sources" version="2-1" kateversion="2.4" extensions="*.jl" casesensitive="1" priority="5" license="MIT"> <highlighting> <list name="block_begin"> <item>begin</item> <item>do</item> <item>for</item> <item>function</item> <item>if</item> <item>let</item> <item>quote</item> <item>try</item> <item>type</item> <item>while</item> </list> <list name="block_eb"> <item>catch</item> <item>else</item> <item>elseif</item> </list> <list name="block_end"> <item>end</item> </list> <list name="keywords"> <item>abstract</item> <item>bitstype</item> <item>break</item> <item>ccall</item> <item>const</item> <item>continue</item> <item>export</item> <item>global</item> <item>import</item> <item>in</item> <item>local</item> <item>macro</item> <item>module</item> <item>return</item> <item>typealias</item> </list> <list name="types"> <item>AbstractArray</item> <item>AbstractMatrix</item> <item>AbstractVector</item> <item>Any</item> <item>Array</item> <item>ASCIIString</item> <item>Associative</item> <item>Bool</item> <item>ByteString</item> <item>Char</item> <item>Complex</item> <item>Complex64</item> <item>Complex128</item> <item>ComplexPair</item> <item>DArray</item> <item>Dict</item> <item>Exception</item> <item>Expr</item> <item>Float</item> <item>Float32</item> <item>Float64</item> <item>Function</item> <item>ObjectIdDict</item> <item>Int</item> <item>Int8</item> <item>Int16</item> <item>Int32</item> <item>Int64</item> <item>Integer</item> <item>IntSet</item> <item>IO</item> <item>IOStream</item> <item>Matrix</item> <item>Nothing</item> <item>None</item> <item>NTuple</item> <item>Number</item> <item>Ptr</item> <item>Range</item> <item>Range1</item> <item>Ranges</item> <item>Rational</item> <item>Real</item> <item>Regex</item> <item>RegexMatch</item> <item>Set</item> <item>Signed</item> <item>StridedArray</item> <item>StridedMatrix</item> <item>StridedVecOrMat</item> <item>StridedVector</item> <item>String</item> <item>SubArray</item> <item>SubString</item> <item>Symbol</item> <item>Task</item> <item>Tuple</item> <item>Type</item> <item>Uint</item> <item>Uint8</item> <item>Uint16</item> <item>Uint32</item> <item>Uint64</item> <item>Union</item> <item>Unsigned</item> <item>UTF8String</item> <item>VecOrMat</item> <item>Vector</item> <item>Void</item> <item>WeakRef</item> </list> <contexts> <context name="_normal" attribute="Normal Text" lineEndContext="#stay"> <DetectSpaces /> <!-- Blocks --> <keyword context="#stay" attribute="Keyword" String="block_begin" beginRegion="block" /> <keyword context="#stay" attribute="Keyword" String="block_eb" endRegion="block" beginRegion="block" /> <keyword context="#stay" attribute="Keyword" String="block_end" endRegion="block" /> <StringDetect String="#BEGIN" context="region_marker" attribute="FoldingComment" beginRegion="user_region" /> <StringDetect String="#END" context="region_marker" attribute="FoldingComment" endRegion="user_region" /> <!-- Keywords, types, and comments --> <keyword context="#stay" attribute="Keyword" String="keywords" /> <keyword context="#stay" attribute="Data Type" String="types" /> <DetectChar char="#" context="1-comment" attribute="Comment"/> <!-- Lists and arrays --> <!-- <DetectChar char="(" context="nested" beginRegion="nested" attribute="Delimiter" /> <DetectChar char="[" context="squared" beginRegion="squared" attribute="Delimiter" /> <DetectChar char="{" context="curly" beginRegion="curly" attribute="Delimiter" /> --> <!-- Strings --> <DetectChar attribute="String" context="String" char="""/> <!-- Multi-character operators --> <StringDetect context="#stay" attribute="Operator" String="..."/> <StringDetect context="#stay" attribute="Operator" String="::"/> <StringDetect context="#stay" attribute="Operator" String=">>>"/> <StringDetect context="#stay" attribute="Operator" String=">>"/> <StringDetect context="#stay" attribute="Operator" String="<<"/> <StringDetect context="#stay" attribute="Operator" String="=="/> <StringDetect context="#stay" attribute="Operator" String="!="/> <StringDetect context="#stay" attribute="Operator" String="<="/> <StringDetect context="#stay" attribute="Operator" String=">="/> <StringDetect context="#stay" attribute="Operator" String="&&"/> <StringDetect context="#stay" attribute="Operator" String="||"/> <StringDetect context="#stay" attribute="Operator" String=".*"/> <StringDetect context="#stay" attribute="Operator" String=".^"/> <StringDetect context="#stay" attribute="Operator" String="./"/> <StringDetect context="#stay" attribute="Operator" String=".'"/> <StringDetect context="#stay" attribute="Operator" String="+="/> <StringDetect context="#stay" attribute="Operator" String="-="/> <StringDetect context="#stay" attribute="Operator" String="*="/> <StringDetect context="#stay" attribute="Operator" String="/="/> <StringDetect context="#stay" attribute="Operator" String="&="/> <StringDetect context="#stay" attribute="Operator" String="|="/> <StringDetect context="#stay" attribute="Operator" String="$="/> <StringDetect context="#stay" attribute="Operator" String=">>>="/> <StringDetect context="#stay" attribute="Operator" String=">>="/> <StringDetect context="#stay" attribute="Operator" String="<<="/> <!-- Look-ahead for adjoint ' after variable, number literal, closing braces and .' --> <RegExpr context="_adjoint" attribute="Variable" String="[a-zA-Z]\w*(?=')" /> <RegExpr context="_adjoint" attribute="Float" String="(\d+(\.\d+)?|\.\d+)([eE][+-]?\d+)?(im)?(?=')" /> <RegExpr context="_adjoint" attribute="Delimiter" String="[\)\]}](?=')" /> <RegExpr context="_adjoint" attribute="Operator" String="\.'(?=')" /> <!-- If ' is not the adjoint operator, it starts a character or an unterminated char --> <RegExpr context="#stay" attribute="Char" String="'[^']*(''[^']*)*'(?=[^']|$)" /> <RegExpr context="#stay" attribute="Incomplete Char" String="'[^']*(''[^']*)*" /> <!-- Identifiers, numbers and braces --> <!-- We can't use HlCHex, Int, and Float because we need to allow the "im" at the end of complex numbers --> <DetectIdentifier context="#stay" attribute="Variable" /> <RegExpr context="#stay" attribute="Hex" String="0x[0-9a-fA-F]+(im)?" /> <RegExpr context="#stay" attribute="Float" String="(\d+(\.\d+)?|\.\d+)([eE][+-]?\d+)?(im)?" /> <AnyChar context="#stay" attribute="Delimiter" String="()[]{}"/> <!-- Single-character operators --> <AnyChar context="#stay" attribute="Operator" String="*+-/\&|<>~$!^=,;:@"/> </context> <!-- Context for user block (#BEGIN...#END) --> <context name="region_marker" lineEndContext="#pop" attribute="FoldingComment" > <IncludeRules context="1-comment" /> </context> <!-- Contexts entered after beginning a list or array --> <context name="nested" attribute="Normal Text" lineEndContext="#stay"> <DetectChar char=")" context="#pop" endRegion="nested" attribute="Delimiter" /> </context> <context name="squared" attribute="Normal Text" lineEndContext="#stay"> <DetectChar char="]" context="#pop" endRegion="squared" attribute="Delimiter" /> </context> <context name="curly" attribute="Normal Text" lineEndContext="#stay"> <DetectChar char="}" context="#pop" endRegion="curly" attribute="Delimiter" /> </context> <!-- Context entered after encountering an ' adjoint operator --> <context name="_adjoint" attribute="Operator" lineEndContext="#pop"> <RegExpr context="#pop" attribute="Operator" String="'+" /> </context> <!-- Context entered after encountering an " (string) --> <context attribute="String" lineEndContext="#pop" name="String"> <DetectSpaces /> <DetectIdentifier /> <LineContinue attribute="String" context="#stay"/> <HlCStringChar attribute="String Char" context="#stay"/> <DetectChar attribute="String" context="#pop" char="""/> </context> <!-- 1-line comment: #pop@EOL --> <context name="1-comment" lineEndContext="#pop" attribute="Comment"> <DetectSpaces /> <DetectIdentifier /> </context> </contexts> <itemDatas> <itemData name="Normal Text" defStyleNum="dsNormal" /> <itemData name="Variable" defStyleNum="dsNormal" /> <itemData name="Operator" defStyleNum="dsNormal"/> <itemData name="Decimal" defStyleNum="dsDecVal" /> <itemData name="Float" defStyleNum="dsFloat" /> <itemData name="Hex" defStyleNum="dsBaseN" /> <itemData name="Delimiter" defStyleNum="dsNormal" /> <itemData name="String" defStyleNum="dsString"/> <itemData name="Char" defStyleNum="dsChar"/> <itemData name="Incomplete Char" defStyleNum="dsChar"/> <itemData name="System" defStyleNum="dsBaseN"/> <itemData name="Keyword" defStyleNum="dsKeyword"/> <itemData name="Data Type" defStyleNum="dsDataType"/> <itemData name="Comment" defStyleNum="dsComment"/> <itemData name="FoldingComment" defStyleNum="dsComment" /> </itemDatas> </highlighting> <general> <comments> <comment name="singleLine" start="#" /> </comments> <keywords casesensitive="1" weakDeliminator=""/> </general> </language> <!-- It's recommended to put the following line in the Variables field under Settings->Configure Kate->Open/Save->Modes&Filetypes --> <!-- kate: space-indent on; indent-width 4; mixed-indent off; indent-mode cstyle; -->