2097 lines
112 KiB
XML
2097 lines
112 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE language
|
|
[
|
|
<!--
|
|
identifier:
|
|
Alphabetic characters include characters with the Unicode General Category value Letter (L), and the underscore _.
|
|
Alphanumeric characters additionally include characters with the Unicode General Category value Number, Decimal Digit (Nd).
|
|
-->
|
|
<!-- Large values -->
|
|
<!ENTITY rangealnum "_\p{L}\p{N}">
|
|
<!ENTITY alnum "[_\p{L}\p{N}]">
|
|
<!ENTITY _ident "&alnum;*+(?:[-']&alnum;*+)*+">
|
|
<!ENTITY ident "(?:[_\p{L}]&_ident;)">
|
|
<!ENTITY datatype "(?:[_\p{Lu}\p{Lt}]&_ident;)">
|
|
|
|
<!-- 0 to 0x10FFFF -->
|
|
<!ENTITY unicode_hex_point "(?:0*+(?:10[0-9a-fA-F]{4}|[0-9a-fA-F]{1,5}+)|0++)">
|
|
<!-- 0 to 1114111 -->
|
|
<!ENTITY unicode_dec_point "(?:0*+(?:1(?:0[0-9]{5}|1(?:0[0-9]{4}|(?:1[0-3][0-9]{3}|4(?:0[0-9]{2}|1(?:0[0-9]|1[01]))))))|[0-9]{1,6}+|0++)">
|
|
<!-- 0 to 0o4177777 -->
|
|
<!ENTITY unicode_oct_point "(?:0*+(?:[0-3][0-7]{6}|4[01]|[0-7])[0-7]{0,5}+|0++)">
|
|
|
|
<!ENTITY prefixdollarvarname "(?:[_\p{L}0-9/!]|\(\))">
|
|
<!ENTITY dollarvarname "(?:&ident;|[0-9]+|[/!]|\(\))">
|
|
<!ENTITY twigils "*?!.^:=~">
|
|
|
|
<!ENTITY twigil_variable "[%&](?=[?*][_\p{L}])|[$@](?=[&twigils;][_\p{L}])">
|
|
<!ENTITY variable "[%@]?\$/|\$!|\$[0-9]+|[\\@%&$]&ident;">
|
|
|
|
<!ENTITY podfmt "BCEIKLMNPRTUVXZ">
|
|
<!ENTITY allnopodfmt "(?:[^&podfmt;]+|[&podfmt;](?![<«]))+">
|
|
<!ENTITY allnopodfmt1 "(?:[^&podfmt;<>]+|[&podfmt;](<(?:<*(?=<))|(?![<«])))+">
|
|
<!ENTITY allnopodfmt2 "(?:[^&podfmt;«»]+|[&podfmt;](?![<«]))+">
|
|
<!ENTITY allnopodfmt3 "(?:[^&podfmt;<>]+|[&podfmt;](?![<«])|>(?!>)|<(?!<))+">
|
|
|
|
<!ENTITY quotingform_q "(?:q?(?::?[xsahfcb]|:?ww?|:(?:v|exec|words|quotewords|scalar|array|hash|function|closure|backslash|to|heredoc)|)(?::[xsahfcbv]|ww?|exec|words|quotewords|scalar|array|hash|function|closure|backslash|to|heredoc)*)">
|
|
<!ENTITY quotingform_q_assert "(?:\s+(?=\()|\s*(?=[^()>」\]}a-zA-Z0-9]|$))">
|
|
<!ENTITY quotingconstruct "q"ingform_q;"ingform_q_assert;">
|
|
|
|
<!ENTITY int10 "(?:[0-9]++(?:_[0-9]++)*+)">
|
|
<!ENTITY exp "(?:[eE][+-]?&int10;)">
|
|
<!ENTITY intN "(?:[0-9a-zA-Z]++(?:_[0-9a-zA-Z]++)*+)">
|
|
|
|
<!-- https://docs.raku.org/language/operators -->
|
|
|
|
<!--
|
|
42.&f;
|
|
~~ access
|
|
expr.&?BLOCK
|
|
~ access
|
|
~~~~~~~~ variable
|
|
-->
|
|
<!ENTITY method_ops "\.([=^?+*:]|&(?![?][_\p{L}]))?">
|
|
|
|
<!ENTITY postfix_ops "⚛?(\+\+|\-\-)">
|
|
|
|
<!ENTITY prefix_unary_ops "(\+\+⚛?|\-\-⚛?|//|[+~?]\^|[-+~|?!^⚛]|\b(not|so)\b)">
|
|
|
|
<!ENTITY _infix_simple_ops "\*\*|%%|[+~][&<>|^]|\?[&^|]|=>|==>|<==|::?=|//|\^\^|\([-+&.|]\)|\^?…\^?|\^?\.\.\.\^?|[-+*/%~∘&∩⊍|∪⊎^⊖=]|\b(div|mod|gcd|lcm|xx?|min|max|minmax|andthen|notandthen|orelse|o)\b">
|
|
<!ENTITY _infix_chaining_ops "\((elem|cont|[=<>]=|[<>])\)|\.\.[\^]?|\^\.\.\^?|<=>|===|=:=|=~=|~~|[=<>]=|[⩵≠≤≥⩶∈∉≡≢∋∌⊂⊄⊆⊈⊃⊅⊇⊉]|<(?!<)|>(?!>)|&&|\|\||\b(eq|ne|gt|ge|lt|le|before|after|eqv|and|or|xor)\b">
|
|
<!-- "does" is an operator, but also a trait (separate treatment) -->
|
|
<!ENTITY _infix_structural "\b(but|cmp|coll|unicmp|leg)\b">
|
|
<!ENTITY _infix_other_ops "\^fff?\b|\bfff?\^|\bfff?\b|!!|\?\?">
|
|
<!ENTITY _infix_ops1 "(\b[RXZS]+)?((&_infix_simple_ops;)=?|⚛[-+]?=|\\(?=\s|$)|&_infix_structural;)">
|
|
<!ENTITY _infix_ops2 "\b[RXZS]+does">
|
|
<!ENTITY _infix_ops3 "((\b[RXZS]|!)[RXZS!]*+)?(&_infix_chaining_ops;|=)|[XZ]+">
|
|
<!ENTITY _infix_ops "&_infix_ops1;|&_infix_ops2;|&_infix_ops3;">
|
|
<!ENTITY infix_ops "(&_infix_ops;|&_infix_other_ops;|->)">
|
|
|
|
<!ENTITY list_ops "!!!|\?\?\?|\.\.\.">
|
|
|
|
<!-- <!ENTITY regadverb "(?!\()\s*(?::\w+\s*)*(?=[^\w\s])"> -->
|
|
<!ENTITY regadverb "(?!\()\s*(?=[^\p{L}\p{N}\s])">
|
|
]>
|
|
<language name="Raku" version="9" kateversion="5.62" section="Scripts" extensions="*.raku;*.rakumod;*.rakudoc;*.rakutest;*.pl6;*.PL6;*.p6;*.pm6;*.pod6" priority="6" author="Jonathan Poelen (jonathan.poelen@gmail.com)" license="MIT">
|
|
<highlighting>
|
|
|
|
<!-- https://docs.raku.org/routines -->
|
|
|
|
<list name="pod">
|
|
<item>begin</item>
|
|
<item>end</item>
|
|
<item>finish</item>
|
|
<item>for</item>
|
|
<include>podtypename</include>
|
|
</list>
|
|
|
|
<list name="podblocktypename">
|
|
<item>pod</item>
|
|
<include>podtypename</include>
|
|
</list>
|
|
|
|
<list name="pod values">
|
|
<item>True</item>
|
|
<item>False</item>
|
|
</list>
|
|
|
|
<list name="podtypename">
|
|
<item>head1</item>
|
|
<item>head2</item>
|
|
<item>head3</item>
|
|
<item>head4</item>
|
|
<item>head5</item>
|
|
<item>head6</item>
|
|
<item>item</item>
|
|
<item>item1</item>
|
|
<item>item2</item>
|
|
<item>item3</item>
|
|
<item>item4</item>
|
|
<item>item5</item>
|
|
<item>item6</item>
|
|
<item>para</item>
|
|
<item>code</item>
|
|
<item>defn</item>
|
|
<item>comment</item>
|
|
<item>table</item>
|
|
<item>input</item>
|
|
<item>output</item>
|
|
</list>
|
|
|
|
<list name="quoting">
|
|
<item>exec</item>
|
|
<item>words</item>
|
|
<item>quotewords</item>
|
|
<item>scalar</item>
|
|
<item>array</item>
|
|
<item>hash</item>
|
|
<item>function</item>
|
|
<item>closure</item>
|
|
<item>backslash</item>
|
|
<item>heredoc</item>
|
|
<item>val</item>
|
|
</list>
|
|
|
|
<list name="declare routine">
|
|
<item>macro</item>
|
|
<item>sub</item>
|
|
<item>submethod</item>
|
|
<item>method</item>
|
|
<item>multi</item>
|
|
<item>proto</item>
|
|
<item>only</item>
|
|
<item>category</item>
|
|
</list>
|
|
|
|
<!-- https://docs.raku.org/syntax/token -->
|
|
<list name="regex keywords">
|
|
<item>rule</item>
|
|
<item>token</item>
|
|
<item>regex</item>
|
|
</list>
|
|
|
|
<list name="values">
|
|
<include>pod values</include>
|
|
<item>self</item>
|
|
</list>
|
|
|
|
<list name="variable storages">
|
|
<item>my</item>
|
|
<item>our</item>
|
|
<item>has</item>
|
|
<item>state</item>
|
|
<item>anon</item>
|
|
<item>augment</item>
|
|
<item>supersede</item>
|
|
<item>let</item>
|
|
<item>temp</item>
|
|
<item>constant</item>
|
|
</list>
|
|
|
|
<!-- https://docs.raku.org/language/control -->
|
|
<list name="control flow">
|
|
<!-- conditional -->
|
|
<item>if</item>
|
|
<item>else</item>
|
|
<item>elsif</item>
|
|
<item>unless</item>
|
|
<item>when</item>
|
|
<item>with</item>
|
|
<item>orwith</item>
|
|
<item>without</item>
|
|
<item>given</item>
|
|
<item>default</item>
|
|
<!-- repeat -->
|
|
<item>for</item>
|
|
<item>loop</item>
|
|
<item>repeat</item>
|
|
<item>while</item>
|
|
<item>until</item>
|
|
<!-- control flow -->
|
|
<item>once</item>
|
|
<item>take</item>
|
|
<item>next</item>
|
|
<item>last</item>
|
|
<item>redo</item>
|
|
<item>return</item>
|
|
<item>return-rw</item>
|
|
<item>exit</item>
|
|
<item>goto</item>
|
|
<!-- exception -->
|
|
<item>die</item>
|
|
<item>fail</item>
|
|
<item>try</item>
|
|
<item>warn</item>
|
|
<!-- concurrency -->
|
|
<item>react</item>
|
|
<item>gather</item>
|
|
<item>proceed</item>
|
|
<item>succeed</item>
|
|
<item>whenever</item>
|
|
<item>supply</item>
|
|
<!-- asynchronous -->
|
|
<item>async</item>
|
|
<item>await</item>
|
|
<item>start</item>
|
|
<!-- phasers -->
|
|
<item>BEGIN</item>
|
|
<item>CHECK</item>
|
|
<item>QUIT</item>
|
|
<item>CLOSE</item>
|
|
<item>INIT</item>
|
|
<item>FIRST</item>
|
|
<item>ENTER</item>
|
|
<item>LEAVE</item>
|
|
<item>KEEP</item>
|
|
<item>UNDO</item>
|
|
<item>NEXT</item>
|
|
<item>LAST</item>
|
|
<item>END</item>
|
|
<item>CATCH</item>
|
|
<item>CONTROL</item>
|
|
</list>
|
|
|
|
<list name="keywords">
|
|
<item>do</item>
|
|
<item>no</item>
|
|
<item>use</item>
|
|
<item>require</item>
|
|
<!-- typeConstraint -->
|
|
<item>as</item>
|
|
<item>does</item>
|
|
<item>handles</item>
|
|
<item>is</item>
|
|
<item>of</item>
|
|
<item>trusts</item>
|
|
<item>where</item>
|
|
<!-- module -->
|
|
<item>module</item>
|
|
<item>class</item>
|
|
<item>role</item>
|
|
<item>package</item>
|
|
<item>enum</item>
|
|
<item>grammar</item>
|
|
<item>slang</item>
|
|
<item>subset</item>
|
|
<!-- phasers -->
|
|
<item>PRE</item>
|
|
<item>POST</item>
|
|
<item>COMPOSE</item>
|
|
<item>DOC</item>
|
|
</list>
|
|
|
|
<list name="properties">
|
|
<item>DEPRECATED</item>
|
|
<item>assoc</item>
|
|
<item>binary</item>
|
|
<item>built</item>
|
|
<item>cached</item>
|
|
<item>copy</item>
|
|
<item>deep</item>
|
|
<item>default</item>
|
|
<item>defequiv</item>
|
|
<item>dynamic</item>
|
|
<item>equiv</item>
|
|
<item>export</item>
|
|
<item>hidden-from-backtrace</item>
|
|
<item>inline</item>
|
|
<item>irs</item>
|
|
<item>looser</item>
|
|
<item>ofs</item>
|
|
<item>ors</item>
|
|
<item>parsed</item>
|
|
<item>prec</item>
|
|
<item>pure</item>
|
|
<item>raw</item>
|
|
<item>readonly</item>
|
|
<item>ref</item>
|
|
<item>reparsed</item>
|
|
<item>required</item>
|
|
<item>rw</item>
|
|
<item>test-assertion</item>
|
|
<item>tighter</item>
|
|
<item>unary</item>
|
|
<item>will</item>
|
|
</list>
|
|
|
|
<list name="number">
|
|
<item>NaN</item>
|
|
<item>Inf</item>
|
|
</list>
|
|
|
|
<list name="types">
|
|
<item>Any</item>
|
|
<item>Array</item>
|
|
<item>Associative</item>
|
|
<item>Bag</item>
|
|
<item>Blob</item>
|
|
<item>Block</item>
|
|
<item>Bool</item>
|
|
<item>Buf</item>
|
|
<item>Callable</item>
|
|
<item>Capture</item>
|
|
<item>Char</item>
|
|
<item>Class</item>
|
|
<item>Code</item>
|
|
<item>Complex</item>
|
|
<item>Cool</item>
|
|
<item>Exception</item>
|
|
<item>Failure</item>
|
|
<item>False</item>
|
|
<item>Grammar</item>
|
|
<item>Hash</item>
|
|
<item>IO</item>
|
|
<item>Int</item>
|
|
<item>Junction</item>
|
|
<item>Bag</item>
|
|
<item>List</item>
|
|
<item>Macro</item>
|
|
<item>Match</item>
|
|
<item>Method</item>
|
|
<item>Mu</item>
|
|
<item>Num</item>
|
|
<item>Numeric</item>
|
|
<item>Order</item>
|
|
<item>Pair</item>
|
|
<item>Positional</item>
|
|
<item>Proxy</item>
|
|
<item>Range</item>
|
|
<item>Rat</item>
|
|
<item>Rational</item>
|
|
<item>Real</item>
|
|
<item>Regex</item>
|
|
<item>Routine</item>
|
|
<item>Scalar</item>
|
|
<item>Seq</item>
|
|
<item>Set</item>
|
|
<item>Signature</item>
|
|
<item>Str</item>
|
|
<item>Sub</item>
|
|
<item>Submethod</item>
|
|
<item>True</item>
|
|
<item>UInt</item>
|
|
<item>Version</item>
|
|
<item>Whatever</item>
|
|
<item>buf8</item>
|
|
<item>buf16</item>
|
|
<item>buf32</item>
|
|
<item>buf64</item>
|
|
<item>int</item>
|
|
<item>int8</item>
|
|
<item>int16</item>
|
|
<item>int32</item>
|
|
<item>int64</item>
|
|
<item>num</item>
|
|
<item>uint</item>
|
|
<item>uint8</item>
|
|
<item>uint16</item>
|
|
<item>uint32</item>
|
|
<item>uint64</item>
|
|
<item>uint</item>
|
|
<item>utf8</item>
|
|
<item>utf16</item>
|
|
<item>utf32</item>
|
|
</list>
|
|
|
|
<list name="function operators">
|
|
<item>print</item>
|
|
<item>push</item>
|
|
<item>say</item>
|
|
<item>map</item>
|
|
<item>substr</item>
|
|
<item>die</item>
|
|
<item>any</item>
|
|
</list>
|
|
|
|
<list name="operators">
|
|
<item>X</item>
|
|
<item>gcd</item>
|
|
<item>ge</item>
|
|
<item>gt</item>
|
|
<item>lcm</item>
|
|
<item>le</item>
|
|
<item>leg</item>
|
|
<item>lt</item>
|
|
<item>max</item>
|
|
<item>min</item>
|
|
<item>minmax</item>
|
|
<item>mod</item>
|
|
<item>ne</item>
|
|
<item>not</item>
|
|
<item>notandthen</item>
|
|
<item>o</item>
|
|
<item>or</item>
|
|
<item>orelse</item>
|
|
<item>so</item>
|
|
<item>unicmp</item>
|
|
<item>x</item>
|
|
<item>xor</item>
|
|
<item>xx</item>
|
|
<item>Z</item>
|
|
<item>and</item>
|
|
<item>andthen</item>
|
|
<item>but</item>
|
|
<item>cmp</item>
|
|
<item>coll</item>
|
|
<item>div</item>
|
|
<item>does</item>
|
|
<item>eq</item>
|
|
<item>eqv</item>
|
|
<item>ff</item>
|
|
<item>fff</item>
|
|
</list>
|
|
|
|
<list name="unicode general categories">
|
|
<item>L</item> <item>Letter</item>
|
|
<item>LC</item> <item>Cased_Letter</item>
|
|
<item>Lu</item> <item>Uppercase_Letter</item>
|
|
<item>Ll</item> <item>Lowercase_Letter</item>
|
|
<item>Lt</item> <item>Titlecase_Letter</item>
|
|
<item>Lm</item> <item>Modifier_Letter</item>
|
|
<item>Lo</item> <item>Other_Letter</item>
|
|
<item>M</item> <item>Mark</item>
|
|
<item>Mn</item> <item>Nonspacing_Mark</item>
|
|
<item>Mc</item> <item>Spacing_Mark</item>
|
|
<item>Me</item> <item>Enclosing_Mark</item>
|
|
<item>N</item> <item>Number</item>
|
|
<item>Nd</item> <item>Decimal_Number</item> <item>digit</item>
|
|
<item>Nl</item> <item>Letter_Number</item>
|
|
<item>No</item> <item>Other_Number</item>
|
|
<item>P</item> <item>Punctuation</item> <item>punct</item>
|
|
<item>Pc</item> <item>Connector_Punctuation</item>
|
|
<item>Pd</item> <item>Dash_Punctuation</item>
|
|
<item>Ps</item> <item>Open_Punctuation</item>
|
|
<item>Pe</item> <item>Close_Punctuation</item>
|
|
<item>Pi</item> <item>Initial_Punctuation</item>
|
|
<item>Pf</item> <item>Final_Punctuation</item>
|
|
<item>Po</item> <item>Other_Punctuation</item>
|
|
<item>S</item> <item>Symbol</item>
|
|
<item>Sm</item> <item>Math_Symbol</item>
|
|
<item>Sc</item> <item>Currency_Symbol</item>
|
|
<item>Sk</item> <item>Modifier_Symbol</item>
|
|
<item>So</item> <item>Other_Symbol</item>
|
|
<item>Z</item> <item>Separator</item>
|
|
<item>Zs</item> <item>Space_Separator</item>
|
|
<item>Zl</item> <item>Line_Separator</item>
|
|
<item>Zp</item> <item>Paragraph_Separator</item>
|
|
<item>C</item> <item>Other</item>
|
|
<item>Cc</item> <item>Control</item> <item>cntrl</item>
|
|
<item>Cf</item> <item>Format</item>
|
|
<item>Cs</item> <item>Surrogate</item>
|
|
<item>Co</item> <item>Private_Use</item>
|
|
<item>Cn</item> <item>Unassigned</item>
|
|
</list>
|
|
|
|
<list name="assertion">
|
|
<item>before</item>
|
|
<item>after</item>
|
|
</list>
|
|
|
|
<contexts>
|
|
|
|
<context name="Shebang" attribute="Comment" lineEndContext="#pop!base" fallthroughContext="#pop!base">
|
|
<RegExpr attribute="Keyword" context="#pop!base" String="^#!\/.*" column="0"/>
|
|
</context>
|
|
|
|
<context name="base" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="term">
|
|
<DetectSpaces/>
|
|
<AnyChar String="{(" attribute="Symbol" beginRegion="block"/>
|
|
<AnyChar String="])" context="postfix_op" attribute="Symbol" endRegion="block"/>
|
|
<AnyChar String=",;" attribute="Separator Symbol"/>
|
|
<DetectChar char="}" endRegion="block" attribute="Symbol"/>
|
|
<DetectChar char="#" context="StartComment" attribute="Comment"/>
|
|
<DetectChar char="=" context="StartPod" attribute="Pod" firstNonSpace="1"/>
|
|
<IncludeRules context="find_boxed_op"/>
|
|
<RegExpr String="&prefix_unary_ops;(\s*&prefix_unary_ops;)*+|&list_ops;" context="postfix_hyper_op" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="find_boxed_op" attribute="Normal Text" lineEndContext="#pop">
|
|
<DetectChar char="[" context="boxed_op" attribute="Symbol" beginRegion="block"/>
|
|
<RegExpr String="(\b[RXZS]+)?(?=\\?\[)" context="start_boxed_op" attribute="Operator"/>
|
|
</context>
|
|
<context name="start_boxed_op" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop!boxed_op">
|
|
<DetectChar char="[" context="#pop!boxed_op" attribute="Symbol" beginRegion="block"/>
|
|
<DetectChar char="\" context="boxed_op"/>
|
|
</context>
|
|
|
|
<context name="boxed_op" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop!boxed_op2">
|
|
<RegExpr String="<(?![\]<])" context="boxed_op_string" attribute="String Delimiter" beginRegion="block"/>
|
|
</context>
|
|
<context name="boxed_op2" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
|
|
<DetectChar char="]" context="#pop" attribute="Symbol" endRegion="block"/>
|
|
<IncludeRules context="boxed_op_elem"/>
|
|
</context>
|
|
<!-- [<...>] -->
|
|
<context name="boxed_op_string" attribute="Normal Text" lineEndContext="#stay">
|
|
<DetectChar char=">" context="#pop#pop!postfix_op" attribute="String Delimiter"/>
|
|
<IncludeRules context="q_String<_common"/>
|
|
</context>
|
|
|
|
<context name="boxed_op_elem_before" attribute="Normal Text" lineEndContext="#pop">
|
|
<IncludeRules context="find_boxed_op"/>
|
|
<RegExpr String="(\b[RXZS]+)?(<<|>>|«|»)" context="hyper_op_dispatch" lookAhead="1"/>
|
|
<RegExpr String="[\\&]&ident;" attribute="Variable"/>
|
|
</context>
|
|
<context name="boxed_op_elem" attribute="Normal Text" lineEndContext="#pop">
|
|
<IncludeRules context="boxed_op_elem_before"/>
|
|
<RegExpr String="\bdoes\b|&infix_ops;" attribute="Operator"/>
|
|
<IncludeRules context="boxed_op_elem_after"/>
|
|
</context>
|
|
<context name="boxed_op_elem_after" attribute="Normal Text" lineEndContext="#pop">
|
|
<RegExpr String="&ident;"/>
|
|
</context>
|
|
|
|
<context name="postfix_hyper_op" attribute="Normal Text" lineEndContext="#pop!term" fallthroughContext="#pop!term">
|
|
<StringDetect String="<<" context="#pop!term" attribute="Hyper Operator"/>
|
|
<StringDetect String="«" context="#pop!term" attribute="Hyper Operator"/>
|
|
</context>
|
|
|
|
<context name="postfix_op" attribute="Normal Text" lineEndContext="#pop!infix_op" fallthroughContext="#pop!infix_op">
|
|
<StringDetect String="[" context="#pop" attribute="Symbol" beginRegion="block"/>
|
|
<StringDetect String="!" context="#pop" attribute="Member Operator"/>
|
|
<StringDetect String="<<" context="#pop" attribute="Hyper Operator"/>
|
|
<StringDetect String="«" context="#pop" attribute="Hyper Operator"/>
|
|
<StringDetect String="<" context="#pop!q_String<_term" attribute="String Delimiter"/>
|
|
<RegExpr String="&postfix_ops;" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="infix_op" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop">
|
|
<DetectSpaces/>
|
|
<DetectChar char="#" context="StartComment" attribute="Comment"/>
|
|
<WordDetect String="does" context="#pop" attribute="Keyword"/>
|
|
<IncludeRules context="infix_regular_op"/>
|
|
</context>
|
|
<context name="infix_regular_op" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop">
|
|
<RegExpr String="&infix_ops;(\s*&prefix_unary_ops;)*+" context="#pop!infix_postfix_hyper_op" attribute="Operator"/>
|
|
<RegExpr String="&method_ops;" context="#pop" attribute="Member Operator"/>
|
|
<RegExpr String="(\b[RXZS]+)?(<<|>>|«|»)" context="#pop!hyper_op_dispatch" lookAhead="1"/>
|
|
</context>
|
|
|
|
<!-- if infix operator is followed by hyper operator, then it is a postfix operator -->
|
|
<context name="infix_postfix_hyper_op" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
|
|
<IncludeRules context="postfix_hyper_op"/>
|
|
</context>
|
|
|
|
<context name="hyper_op_dispatch" attribute="Normal Text" lineEndContext="#pop">
|
|
<AnyChar String="RXZS" attribute="Operator"/>
|
|
<StringDetect String="<<" context="#pop!hyper_op1" attribute="Hyper Operator"/>
|
|
<StringDetect String=">>" context="#pop!hyper_op1" attribute="Hyper Operator"/>
|
|
<AnyChar String="«»" context="#pop!hyper_op2" attribute="Hyper Operator"/>
|
|
</context>
|
|
<context name="hyper_op1" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
|
|
<StringDetect String="<<" context="#pop" attribute="Hyper Operator"/>
|
|
<StringDetect String=">>" context="#pop" attribute="Hyper Operator"/>
|
|
<IncludeRules context="boxed_op_elem_before"/>
|
|
<!-- ignore > after infix operator -->
|
|
<RegExpr String="(\b[RXZS]+)?([+~][&>|^]?|[-=])=?|\bdoes\b|&infix_ops;" attribute="Operator"/>
|
|
<IncludeRules context="boxed_op_elem_after"/>
|
|
</context>
|
|
<context name="hyper_op2" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
|
|
<AnyChar String="«»" context="#pop" attribute="Hyper Operator"/>
|
|
<IncludeRules context="boxed_op_elem"/>
|
|
</context>
|
|
|
|
<context name="term" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop">
|
|
<DetectSpaces/>
|
|
<AnyChar String="{([])},;" context="#pop" lookAhead="1"/>
|
|
<DetectChar char="#" context="StartComment" attribute="Comment"/>
|
|
<DetectChar char=""" context="qq_RawString_term" attribute="String Delimiter"/>
|
|
<DetectChar char="'" context="q_RawString_term" attribute="String Delimiter"/>
|
|
<DetectChar char="«" context="qq_String«_term" attribute="String Delimiter"/>
|
|
<StringDetect String="<<" context="qq_String<<_term" attribute="String Delimiter"/>
|
|
<DetectChar char="<" context="q_String<_term" attribute="String Delimiter"/>
|
|
<DetectChar char="「" context="Q_String「_term" attribute="String Delimiter"/>
|
|
<DetectChar char="/" context="Pattern/" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
<DetectChar char=":" context="MaybeAttribute" attribute="Separator Symbol"/>
|
|
|
|
<RegExpr String="\b(?:s|S|tr|TR)®adverb;" context="RegexSubstitution" attribute="Pattern Delimiter"/>
|
|
<RegExpr String="\b(?:rx|m)®adverb;" context="Regex" attribute="Pattern Delimiter"/>
|
|
|
|
<RegExpr String="&twigil_variable;" context="Twigil_term" attribute="Variable"/>
|
|
<!-- '*' -> Whatever variable: (* + *)(1, 2) == 3 -->
|
|
<RegExpr String="&variable;|\$(<&ident;>)+|[$@](\(\))?|[*]" context="#pop!postfix_op" attribute="Variable"/>
|
|
|
|
<RegExpr String="\bQ(\s++(?=['(_]|$)|\s*+(?=[^()>」\]}'&rangealnum;]|$))" context="Q_String" attribute="String"/>
|
|
|
|
<RegExpr String="\.?\p{N}" context="Number" lookAhead="1" minimal="1"/>
|
|
|
|
<RegExpr attribute="Operator" context="q_QuotingForm" String="\bq(?="ingform_q;"ingform_q_assert;)"/>
|
|
|
|
<IncludeRules context="infix_regular_op"/>
|
|
|
|
<RegExpr String="(?<=[.])(unless|when|with|without|given|default|for|loop|repeat|while|until|once|next|last|redo|goto|proceed|succeed|start|proceed|succeed)\b" context="#pop" attribute="Normal Text"/>
|
|
|
|
<keyword String="control flow" context="#pop" attribute="Control Flow"/>
|
|
<keyword String="variable storages" context="#stay" attribute="Variable Storage"/>
|
|
<WordDetect String="is" context="Is" attribute="Keyword"/>
|
|
<keyword String="keywords" context="#pop" attribute="Keyword"/>
|
|
<keyword String="function operators" context="#pop" attribute="Function"/>
|
|
<keyword String="declare routine" context="#stay" attribute="Declare Routine"/>
|
|
<keyword String="regex keywords" context="RegexKeyword" attribute="Keyword"/>
|
|
<keyword String="values" context="#pop!postfix_op" attribute="Keyword Value"/>
|
|
<keyword String="number" context="#pop!postfix_op" attribute="Float"/>
|
|
<RegExpr String="\b(u?int(8|16|32|64)?|utf(8|16|32)|buf(8|16|32|64)|num|&datatype;)\b" context="#pop" attribute="Data Type"/>
|
|
<!-- <RegExpr String="&ident;\s*+(?=\()" context="#pop" attribute="Function"/> -->
|
|
<RegExpr String="!?&ident;" context="#pop" attribute="Normal Text"/>
|
|
|
|
<DetectChar char="\"/>
|
|
|
|
<RegExpr String="." context="#pop" attribute="Normal Text"/>
|
|
</context>
|
|
|
|
|
|
<context name="Is" attribute="Normal Text" lineEndContext="#pop#pop" fallthroughContext="#pop#pop!postfix_op">
|
|
<DetectSpaces/>
|
|
<keyword String="properties" context="#pop#pop!postfix_op" attribute="Property"/>
|
|
</context>
|
|
|
|
<context name="Interpolation" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="term">
|
|
<DetectChar char="}" context="#pop" attribute="Symbol" endRegion="block"/>
|
|
<IncludeRules context="base"/>
|
|
</context>
|
|
|
|
<context name="SubExpression(" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="term">
|
|
<DetectChar char=")" context="#pop" attribute="Symbol" endRegion="block"/>
|
|
<IncludeRules context="base"/>
|
|
</context>
|
|
|
|
<context name="Twigil" attribute="Variable" lineEndContext="#pop">
|
|
<AnyChar String="&twigils;" attribute="Twigil"/>
|
|
<RegExpr String="&ident;" context="#pop#pop" attribute="Variable"/>
|
|
</context>
|
|
|
|
<context name="Twigil_term" attribute="Variable" lineEndContext="#pop">
|
|
<AnyChar String="&twigils;" attribute="Twigil"/>
|
|
<RegExpr String="&ident;" context="#pop#pop!postfix_op" attribute="Variable"/>
|
|
</context>
|
|
|
|
<context name="RegexKeyword" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop">
|
|
<DetectSpaces/>
|
|
<DetectChar char="{" context="#pop!RegexKeyword-Pattern{" attribute="Symbol" beginRegion="regex"/>
|
|
<DetectChar char="#" context="StartComment" attribute="Comment"/>
|
|
<RegExpr String="&ident;"/>
|
|
</context>
|
|
<context name="RegexKeyword-Pattern{" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char="}" context="#pop" attribute="Symbol" endRegion="regex"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
|
|
<!-- Regex Substitution -->
|
|
|
|
<context name="RegexSubstitution" attribute="Pattern Delimiter" lineEndContext="#stay">
|
|
<DetectChar char="/" context="PatternSubstitution/" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
<IncludeRules context="find_RegexClosure"/>
|
|
<RegExpr String="([^\w\s])" context="PatternSubstitution" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
</context>
|
|
|
|
<context name="PatternSubstitution/" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char="/" context="SubstitutionString/" attribute="Pattern Delimiter" endRegion="regex" beginRegion="substitution"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="PatternSubstitution" attribute="Pattern" lineEndContext="#stay">
|
|
<RegExpr String="(%1)" dynamic="1" context="SubstitutionString" attribute="Pattern Delimiter" endRegion="regex" beginRegion="substitution"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="SubstitutionString/" attribute="String" lineEndContext="#stay">
|
|
<StringDetect String="/" context="#pop#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="substitution"/>
|
|
<StringDetect String="\/" attribute="String Special Character"/>
|
|
<RegExpr String="([^/\\]++|\\[^/])++" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="SubstitutionString" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="1" dynamic="1" context="#pop#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="substitution"/>
|
|
<StringDetect String="\%1" dynamic="1" attribute="String Special Character"/>
|
|
<RegExpr String="([^%1\\]++|\\[^%1])++" dynamic="1" attribute="String"/>
|
|
</context>
|
|
|
|
|
|
<!-- Regex -->
|
|
|
|
<context name="Regex" attribute="Pattern" lineEndContext="#stay" fallthroughContext="#pop">
|
|
<DetectChar char="/" context="Pattern/" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
<IncludeRules context="find_RegexClosure"/>
|
|
<RegExpr String="([^\w\s])" context="Pattern" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
</context>
|
|
|
|
<context name="find_RegexClosure" attribute="Pattern Delimiter" lineEndContext="#stay">
|
|
<DetectChar char=":" context="RegexModifier" attribute="Pattern Modifier"/>
|
|
<StringDetect String="[[" context="Pattern[[" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
<StringDetect String="{{" context="Pattern{{" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
<StringDetect String="<<" context="Pattern<<" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
<DetectChar char="[" context="Pattern[" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
<DetectChar char="{" context="Pattern{" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
<DetectChar char="<" context="Pattern<" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
<DetectChar char="(" context="Pattern(" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
<!-- some pairs are missing: https://github.com/Raku/roast/blob/aa4994a7f6b3f6b450a9d231bebd5fba172439b0/S02-literals/quoting-unicode.t#L49-L65 -->
|
|
<DetectSpaces/>
|
|
</context>
|
|
|
|
<context name="RegexModifier" attribute="Pattern Modifier" lineEndContext="#pop" fallthroughContext="#pop">
|
|
<StringDetect String="P5" context="RegexPerl5" attribute="Pattern Modifier"/>
|
|
<StringDetect String="Perl5" context="RegexPerl5" attribute="Pattern Modifier"/>
|
|
<DetectIdentifier context="RegexModifierCall" attribute="Pattern Modifier"/>
|
|
</context>
|
|
|
|
<!-- ':' adverb '(' expr ')' '('...')'
|
|
^ pattern delimiter
|
|
-->
|
|
<context name="RegexModifierCall" attribute="Pattern Modifier" fallthroughContext="#pop#pop">
|
|
<DetectSpaces/>
|
|
<DetectChar char="(" context="RegexModifier(" attribute="Symbol" beginRegion="block"/>
|
|
</context>
|
|
<context name="RegexModifier(" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="term">
|
|
<DetectChar char=")" context="RegexModifierPattern(" attribute="Symbol" endRegion="block"/>
|
|
<IncludeRules context="base"/>
|
|
</context>
|
|
<context name="RegexModifierPattern(" attribute="Pattern Delimiter" lineEndContext="#stay" fallthroughContext="#pop#pop#pop#pop">
|
|
<DetectSpaces/>
|
|
<StringDetect String="((" context="#pop#pop#pop#pop!Pattern((" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
<DetectChar char="(" context="#pop#pop#pop#pop!Pattern(" attribute="Pattern Delimiter" beginRegion="regex"/>
|
|
</context>
|
|
|
|
<context name="RegexPerl5" attribute="Pattern Modifier" lineEndContext="#pop#pop#pop" fallthroughContext="#pop#pop#pop!IsRegexPerl5">
|
|
<DetectSpaces/>
|
|
</context>
|
|
|
|
<context name="IsRegexPerl5" attribute="Pattern" lineEndContext="#stay">
|
|
<IncludeRules context="find_pattern##Perl"/>
|
|
</context>
|
|
|
|
<context name="Pattern/" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char="/" context="#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="regex"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="Pattern{" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char="}" context="#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="regex"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="Pattern{{" attribute="Pattern" lineEndContext="#stay">
|
|
<StringDetect String="}}" context="#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="regex"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="Pattern[" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char="[" context="PatternSub[" attribute="Symbol" beginRegion="block"/>
|
|
<DetectChar char="]" context="#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="regex"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
<context name="PatternSub[" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char="]" context="#pop" attribute="Symbol" endRegion="regex"/>
|
|
<DetectChar char="[" context="PatternSub[" attribute="Symbol" beginRegion="block"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="Pattern[[" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char="[" context="PatternSub[" attribute="Symbol" beginRegion="block"/>
|
|
<StringDetect String="]]" context="#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="regex"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="Pattern(" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char="(" context="PatternSub(" attribute="Symbol" beginRegion="block"/>
|
|
<DetectChar char=")" context="#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="regex"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
<context name="PatternSub(" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char=")" context="#pop" attribute="Symbol" endRegion="regex"/>
|
|
<DetectChar char="(" context="PatternSub(" attribute="Symbol" beginRegion="block"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="Pattern((" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char="(" context="PatternSub(" attribute="Symbol" beginRegion="block"/>
|
|
<StringDetect String="))" context="#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="regex"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="Pattern<" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char=">" context="#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="regex"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="Pattern<<" attribute="Pattern" lineEndContext="#stay">
|
|
<StringDetect String=">>" context="#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="regex"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="Pattern" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char="1" dynamic="1" context="#pop#pop!postfix_op" attribute="Pattern Delimiter" endRegion="regex"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<context name="find_Pattern" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectSpaces/>
|
|
<DetectChar char="." context="#stay" attribute="Pattern Special Character"/>
|
|
<DetectChar char=""" attribute="String Delimiter" context="qq_RawString"/>
|
|
<DetectChar char="'" attribute="String Delimiter" context="q_RawString"/>
|
|
<DetectChar char="\" context="PatternMetaChar" lookAhead="1"/>
|
|
<DetectChar char=":" context="PatternModifier" attribute="Pattern Modifier"/>
|
|
<DetectChar char="#" context="StartComment" attribute="Comment"/>
|
|
<DetectChar char="{" context="Interpolation" attribute="Symbol" beginRegion="block"/>
|
|
<StringDetect String="<<" attribute="Operator"/>
|
|
<StringDetect String=">>" attribute="Operator"/>
|
|
<StringDetect String="<(" context="PatternCaptureMarker" attribute="Pattern Meta Character"/>
|
|
<DetectChar char="<" context="RegexClass" attribute="Pattern Meta Character"/>
|
|
<StringDetect String="**" context="PatternRangeQuantifier" attribute="Pattern Quantifier"/>
|
|
<AnyChar String="?*+" context="PatternAfterQuantifier" attribute="Pattern Quantifier"/>
|
|
<AnyChar String="([" attribute="Symbol" beginRegion="block"/>
|
|
<AnyChar String=")]" attribute="Symbol" endRegion="block"/>
|
|
<StringDetect String="$(" context="PatternVariable(" attribute="Pattern Meta Character" beginRegion="block"/>
|
|
<StringDetect String="@(" context="PatternVariable(" attribute="Pattern Meta Character" beginRegion="block"/>
|
|
<AnyChar String="«»~" attribute="Operator"/>
|
|
<RegExpr String="&twigil_variable;" context="Twigil" attribute="Variable"/>
|
|
<RegExpr String="&variable;|@" attribute="Variable"/>
|
|
<RegExpr String="\$<&ident;>?" attribute="Pattern Named Capture"/>
|
|
<AnyChar String="&|^$" attribute="Pattern Control Flow"/>
|
|
<RegExpr String="[&alnum;\s]+" attribute="Pattern"/>
|
|
<AnyChar String=">)]" attribute="Error"/>
|
|
</context>
|
|
|
|
<context name="PatternVariable(" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="term">
|
|
<DetectChar char=")" context="#pop" attribute="Pattern Meta Character" endRegion="block"/>
|
|
<IncludeRules context="base"/>
|
|
</context>
|
|
|
|
|
|
<!-- Pattern :... -->
|
|
|
|
<context name="PatternModifier" attribute="Pattern Modifier" lineEndContext="#pop" fallthroughContext="#pop">
|
|
<DetectIdentifier context="#pop" attribute="Pattern Modifier"/>
|
|
</context>
|
|
|
|
|
|
<!-- Pattern \... -->
|
|
|
|
<context name="PatternMetaChar" attribute="Pattern" lineEndContext="#pop">
|
|
<RegExpr String="\\[nthvsdwNTHVSDW]|\\[xX](&unicode_hex_point;(?![0-9a-fA-F])|\[\s*&unicode_hex_point;\s*\])|\\[cC](&unicode_dec_point;(?![0-9])|\[[0-9a-zA-Z\s]+\])|[oO](&unicode_oct_point;(?![0-7])|\[\s*&unicode_oct_point;\s*\])" context="#pop" attribute="Pattern Character Class"/>
|
|
<RegExpr String="\\[^\p{L}\p{N}]" context="#pop" attribute="Pattern Character"/>
|
|
|
|
<StringDetect String="\x[" context="PatternMetaCharX" attribute="Pattern Character Class" insensitive="1"/>
|
|
<StringDetect String="\c[" context="PatternMetaCharC" attribute="Pattern Character Class" insensitive="1"/>
|
|
<StringDetect String="\o[" context="PatternMetaCharO" attribute="Pattern Character Class" insensitive="1"/>
|
|
|
|
<!-- error or incomplete -->
|
|
<RegExpr String="\\[xX]&unicode_hex_point;|\\[oO]&unicode_oct_point;|\\[cC]&unicode_dec_point;" context="PatternMetaCharError" attribute="Pattern Character Class"/>
|
|
<RegExpr String="\\[xXcCoO]?" context="#pop" attribute="Error"/>
|
|
</context>
|
|
|
|
<context name="PatternMetaCharError" attribute="Pattern" fallthroughContext="#pop#pop">
|
|
<RegExpr String=",?\s+\]?|&alnum;*(\s*,)?\s*\]?" context="#pop#pop" attribute="Error"/>
|
|
</context>
|
|
|
|
<context name="X[]" attribute="Pattern">
|
|
<RegExpr String="\s*\b&unicode_hex_point;\s*"/>
|
|
</context>
|
|
|
|
<context name="O[]" attribute="Pattern">
|
|
<RegExpr String="\s*\b&unicode_oct_point;\s*"/>
|
|
</context>
|
|
|
|
<context name="C[]" attribute="Pattern">
|
|
<RegExpr String="\s*(\b[0-9a-zA-Z]+\s*)+"/>
|
|
</context>
|
|
|
|
<context name="PatternMetaCharMultipleCommon" attribute="Pattern">
|
|
<DetectChar char="]" context="#pop#pop" attribute="Pattern Character Class"/>
|
|
<DetectChar char="," attribute="Separator Symbol"/>
|
|
</context>
|
|
|
|
<context name="PatternMetaCharX" attribute="Pattern Character Class">
|
|
<IncludeRules context="PatternMetaCharMultipleCommon"/>
|
|
<IncludeRules context="X[]"/>
|
|
<RegExpr String="[^0-9a-fA-F\],\s]+|[0-9a-fA-F]+|." attribute="Error"/>
|
|
</context>
|
|
|
|
<context name="PatternMetaCharO" attribute="Pattern Character Class">
|
|
<IncludeRules context="PatternMetaCharMultipleCommon"/>
|
|
<IncludeRules context="O[]"/>
|
|
<RegExpr String="[^0-7\],\s]+|[0-7]+|." attribute="Error"/>
|
|
</context>
|
|
|
|
<context name="PatternMetaCharC" attribute="Pattern Character Class">
|
|
<IncludeRules context="PatternMetaCharMultipleCommon"/>
|
|
<IncludeRules context="C[]"/>
|
|
<RegExpr String="[^0-9a-zA-Z\],\s]+|[0-9a-zA-Z]+|." attribute="Error"/>
|
|
</context>
|
|
|
|
|
|
<!-- Pattern Capture Markers: <(...)> -->
|
|
|
|
<context name="PatternCaptureMarker" attribute="Pattern">
|
|
<StringDetect String=")>" context="#pop" attribute="Pattern Meta Character"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
|
|
<!-- Pattern Character Classes : <...> -->
|
|
|
|
<context name="RegexClass" attribute="Pattern Unicode Property" lineEndContext="#stay">
|
|
<DetectChar char=">" context="#pop" attribute="Pattern Meta Character"/>
|
|
<AnyChar String=".:" attribute="Pattern Meta Character"/>
|
|
<AnyChar String="|+-" attribute="Pattern Quantifier"/>
|
|
<AnyChar String="!?" attribute="Pattern Control Flow" context="PatternAssertion"/>
|
|
<DetectIdentifier attribute="Pattern Unicode Property"/>
|
|
<DetectChar char="[" context="RegexClassRange" attribute="Pattern Bracket"/>
|
|
<DetectChar char="<" context="q_String<" attribute="String Delimiter"/>
|
|
<DetectChar char="«" context="qq_String«" attribute="String Delimiter"/>
|
|
<DetectChar char="{" context="Interpolation" attribute="Symbol" beginRegion="block"/>
|
|
<DetectChar char="(" context="SubExpression(" attribute="Symbol" beginRegion="block"/>
|
|
<DetectChar char="\" context="PatternMetaChar" lookAhead="1"/>
|
|
</context>
|
|
|
|
<!-- after <? or <! -->
|
|
<context name="PatternAssertion" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="PatternAssertionCond">
|
|
<DetectChar char=">" attribute="Pattern Meta Character" context="#pop#pop"/>
|
|
<WordDetect String="after" attribute="Pattern Meta Character" context="PatternAssertionCond"/>
|
|
<WordDetect String="before" attribute="Pattern Meta Character" context="PatternAssertionCond"/>
|
|
</context>
|
|
<context name="PatternAssertionCond" attribute="Pattern" lineEndContext="#stay">
|
|
<DetectChar char=">" attribute="Pattern Meta Character" context="#pop#pop#pop"/>
|
|
<IncludeRules context="find_Pattern"/>
|
|
</context>
|
|
|
|
<!-- Pattern <[...]> -->
|
|
<context name="RegexClassRange" attribute="Pattern Character" lineEndContext="#stay">
|
|
<DetectIdentifier/>
|
|
<DetectSpaces/>
|
|
<StringDetect String="]" context="#pop" attribute="Pattern Bracket"/>
|
|
<StringDetect String="\" context="PatternMetaChar" lookAhead="1"/>
|
|
<StringDetect String=".." attribute="Pattern Quantifier"/>
|
|
</context>
|
|
|
|
|
|
<context name="PatternAfterQuantifier" attribute="Pattern" lineEndContext="#stay" fallthroughContext="PatternModifierQuantifier">
|
|
<StringDetect String=":" context="PatternModifierQuantifier" attribute="Pattern Modifier"/>
|
|
<DetectSpaces context="PatternModifierQuantifier"/>
|
|
</context>
|
|
<context name="PatternModifierQuantifier" attribute="Pattern" lineEndContext="#stay" fallthroughContext="#pop#pop">
|
|
<DetectSpaces/>
|
|
<StringDetect String="%%" context="#pop#pop" attribute="Pattern Quantifier"/>
|
|
<StringDetect String="%" context="#pop#pop" attribute="Pattern Quantifier"/>
|
|
</context>
|
|
|
|
|
|
<!-- General quantifier: ** min..max -->
|
|
|
|
<context name="PatternRangeQuantifier" attribute="Pattern" lineEndContext="#stay" fallthroughContext="#pop">
|
|
<DetectSpaces/>
|
|
<Int context="#pop!PatternRangeQuantifierRng" attribute="Pattern"/>
|
|
<DetectChar char="^" context="PatternRangeQuantifierInt" attribute="Operator"/>
|
|
<AnyChar String=":!?" attribute="Pattern Quantifier"/>
|
|
</context>
|
|
|
|
<context name="PatternRangeQuantifierRng" attribute="Pattern" lineEndContext="#pop" fallthroughContext="#pop">
|
|
<StringDetect String="..^" context="PatternRangeQuantifierInt" attribute="Operator"/>
|
|
<StringDetect String=".." context="PatternRangeQuantifierInt" attribute="Operator"/>
|
|
<StringDetect String="^..^" context="PatternRangeQuantifierInt" attribute="Operator"/>
|
|
<StringDetect String="^.." context="PatternRangeQuantifierInt" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="PatternRangeQuantifierInt" attribute="Pattern" lineEndContext="#pop#pop" fallthroughContext="#pop#pop">
|
|
<DetectSpaces/>
|
|
<Int context="#pop#pop" attribute="Pattern"/>
|
|
</context>
|
|
|
|
|
|
<!-- Number -->
|
|
|
|
<context name="Number" attribute="Decimal" lineEndContext="#stay" fallthroughContext="#pop#pop!postfix_op">
|
|
<RegExpr String="&int10;(?:\.&int10;&exp;?|&exp;)|\.&int10;&exp;?" context="NumberSuffix" attribute="Float"/>
|
|
<Detect2Chars char="0" char1="x" context="HexNumber" attribute="Hex"/>
|
|
<Detect2Chars char="0" char1="o" context="OctalNumber" attribute="Octal"/>
|
|
<RegExpr String="\p{N}++(?:_\p{N}++)*+" context="NumberSuffix" attribute="Decimal"/>
|
|
</context>
|
|
|
|
<context name="HexNumber" attribute="Hex" lineEndContext="#pop#pop#pop!postfix_op" fallthroughContext="NumberCheckError">
|
|
<RegExpr String="[a-fA-F0-9]++(?:_[a-fA-F0-9]++)*+" context="#pop!NumberSuffix" attribute="Hex"/>
|
|
</context>
|
|
|
|
<context name="OctalNumber" attribute="Octal" lineEndContext="#pop#pop#pop!postfix_op" fallthroughContext="NumberCheckError">
|
|
<RegExpr String="[0-7]++(?:_[0-7]++)*+" context="#pop!NumberSuffix" attribute="Octal"/>
|
|
</context>
|
|
|
|
<context name="NumberSuffix" attribute="Decimal" lineEndContext="#pop#pop#pop!postfix_op" fallthroughContext="#pop#pop#pop!postfix_op">
|
|
<DetectChar char="i" context="#pop!NumberCheckError" attribute="Number Suffix"/>
|
|
<IncludeRules context="NumberCheckError"/>
|
|
</context>
|
|
<context name="NumberCheckError" attribute="Decimal" lineEndContext="#pop#pop#pop!postfix_op" fallthroughContext="#pop#pop#pop!postfix_op">
|
|
<RegExpr String="&alnum;+" context="#pop#pop#pop!postfix_op" attribute="Error"/>
|
|
</context>
|
|
|
|
|
|
<!-- Attribute or Key -->
|
|
|
|
<!--
|
|
:11a
|
|
:!false
|
|
:attr
|
|
-->
|
|
<context name="MaybeAttribute" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
|
|
<StringDetect String=":?" context="#pop" attribute="Separator Symbol"/>
|
|
<DetectChar char=":" attribute="Separator Symbol"/>
|
|
<DetectChar char="!" context="#pop" attribute="Operator"/>
|
|
<Int context="MaybeAttribute2" attribute="Decimal"/>
|
|
<RegExpr String="&datatype;" context="#pop" attribute="Data Type"/>
|
|
<RegExpr String="\\?&ident;" context="#pop#pop!postfix_op" attribute="Attribute"/>
|
|
</context>
|
|
|
|
<context name="MaybeAttribute2" attribute="Decimal" lineEndContext="#pop#pop" fallthroughContext="#pop#pop#pop!postfix_op">
|
|
<DetectChar char="<" context="NumberWithRadix" attribute="String Delimiter"/>
|
|
</context>
|
|
|
|
|
|
<!-- ':base<NNN>' -->
|
|
|
|
<context name="NumberWithRadix" attribute="Decimal" lineEndContext="#pop#pop#pop" fallthroughContext="#pop#pop#pop!postfix_op">
|
|
<DetectChar char=">" context="#pop#pop#pop#pop!postfix_op" attribute="Error"/>
|
|
<DetectSpaces context="#pop#pop#pop#pop!postfix_op" attribute="Error"/>
|
|
<RegExpr String="&intN;\.&intN;|\.&intN;" context="NumberWithRadixClose" attribute="Float"/>
|
|
<RegExpr String="&intN;" context="NumberWithRadixClose" attribute="Decimal"/>
|
|
</context>
|
|
<context name="NumberWithRadixClose" attribute="Decimal"
|
|
lineEndContext="#pop#pop#pop#pop#pop!postfix_op"
|
|
fallthroughContext="#pop#pop#pop#pop#pop!postfix_op">
|
|
<DetectChar char=">" context="NumberWithRadixSuffix" attribute="String Delimiter"/>
|
|
<RegExpr String=" +|&alnum;+" context="#pop#pop#pop#pop#pop!postfix_op" attribute="Error"/>
|
|
</context>
|
|
<context name="NumberWithRadixSuffix" attribute="Decimal"
|
|
lineEndContext="#pop#pop#pop#pop#pop#pop!postfix_op"
|
|
fallthroughContext="#pop#pop#pop#pop#pop#pop!postfix_op">
|
|
<WordDetect String="i" context="#pop#pop#pop#pop#pop#pop!postfix_op" attribute="Number Suffix"/>
|
|
</context>
|
|
|
|
|
|
<!-- Pod -->
|
|
|
|
<context name="StartPod" attribute="Pod Typename" lineEndContext="#pop" fallthroughContext="#pop">
|
|
<WordDetect String="begin" context="PodBegin" attribute="Pod Block"/>
|
|
<WordDetect String="for" context="PodFor" attribute="Pod Typename"/>
|
|
<keyword String="pod" context="PodTypenameValue" attribute="Pod Typename"/>
|
|
<RegExpr String="[_A-Z][-_A-Z0-9]*\b" context="PodTypenameValue" attribute="Pod Typename"/>
|
|
<RegExpr String="&ident;" context="PodTypenameValue" attribute="Pod Unknown"/>
|
|
</context>
|
|
|
|
<context name="PodTypenameValue" attribute="Pod Typename Value" lineEndContext="PodTypenameValueNextLine" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Typename Value" context="#stay" String="&allnopodfmt;"/>
|
|
</context>
|
|
|
|
<context name="PodTypenameValueNextLine" attribute="Pod Typename Value" lineEndContext="#stay" lineEmptyContext="#pop#pop#pop" fallthroughContext="#pop">
|
|
<DetectSpaces attribute="Normal Text" context="PodTypenameValueOrEmpty"/>
|
|
<DetectChar attribute="Pod" context="#pop#pop#pop" char="=" lookAhead="true"/>
|
|
</context>
|
|
|
|
<context name="PodTypenameValueOrEmpty" attribute="Pod Typename Value" lineEndContext="#pop#pop#pop#pop" fallthroughContext="#pop#pop">
|
|
<DetectChar attribute="Pod" context="#pop#pop#pop#pop" char="=" lookAhead="true"/>
|
|
</context>
|
|
|
|
|
|
<!-- Pod formatting -->
|
|
|
|
<context name="PodFormat" attribute="Pod Typename Value" lineEndContext="#stay">
|
|
<Detect2Chars char="B" char1="<" attribute="Pod Bold" context="#pop!PodFormatB"/>
|
|
<Detect2Chars char="B" char1="«" attribute="Pod Bold" context="#pop!PodFormatB2"/>
|
|
<Detect2Chars char="I" char1="<" attribute="Pod Italic" context="#pop!PodFormatI"/>
|
|
<Detect2Chars char="I" char1="«" attribute="Pod Italic" context="#pop!PodFormatI2"/>
|
|
<Detect2Chars char="L" char1="<" attribute="Pod Link" context="#pop!PodFormatL"/>
|
|
<Detect2Chars char="L" char1="«" attribute="Pod Link" context="#pop!PodFormatL2"/>
|
|
<Detect2Chars char="N" char1="<" attribute="Pod Note" context="#pop!PodFormatN"/>
|
|
<Detect2Chars char="N" char1="«" attribute="Pod Note" context="#pop!PodFormatN2"/>
|
|
<Detect2Chars char="P" char1="<" attribute="Pod Link" context="#pop!PodFormatL"/>
|
|
<Detect2Chars char="P" char1="«" attribute="Pod Link" context="#pop!PodFormatL2"/>
|
|
<Detect2Chars char="Z" char1="<" attribute="Pod Comment" context="#pop!PodFormatZ"/>
|
|
<Detect2Chars char="Z" char1="«" attribute="Pod Comment" context="#pop!PodFormatZ2"/>
|
|
<Detect2Chars char="U" char1="<" attribute="Pod Underline" context="#pop!PodFormatU"/>
|
|
<Detect2Chars char="U" char1="«" attribute="Pod Underline" context="#pop!PodFormatU2"/>
|
|
<Detect2Chars char="C" char1="<" attribute="Pod Verbatim" context="#pop!PodFormatVT"/>
|
|
<Detect2Chars char="C" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatVT2"/>
|
|
<Detect2Chars char="E" char1="<" attribute="Pod Unicode" context="#pop!PodFormatE"/>
|
|
<Detect2Chars char="E" char1="«" attribute="Pod Unicode" context="#pop!PodFormatE2"/>
|
|
<Detect2Chars char="K" char1="<" attribute="Pod Verbatim" context="#pop!PodFormatVT"/>
|
|
<Detect2Chars char="K" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatVT2"/>
|
|
<Detect2Chars char="R" char1="<" attribute="Pod Verbatim" context="#pop!PodFormatVT"/>
|
|
<Detect2Chars char="R" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatVT2"/>
|
|
<Detect2Chars char="T" char1="<" attribute="Pod Verbatim" context="#pop!PodFormatVT"/>
|
|
<Detect2Chars char="T" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatVT2"/>
|
|
<Detect2Chars char="V" char1="<" attribute="Pod Verbatim" context="#pop!PodFormatV"/>
|
|
<Detect2Chars char="V" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatV2"/>
|
|
<Detect2Chars char="X" char1="<" attribute="Pod Indexed Terms" context="#pop!PodFormatX"/>
|
|
<Detect2Chars char="X" char1="«" attribute="Pod Indexed Terms" context="#pop!PodFormatX2"/>
|
|
<Detect2Chars char="M" char1="<" attribute="Pod Verbatim" context="#pop!PodFormatVT"/>
|
|
<Detect2Chars char="M" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatVT2"/>
|
|
</context>
|
|
|
|
<context name="PodFormatB" attribute="Pod Bold" lineEndContext="#stay" fallthroughContext="#pop!PodFormatB1">
|
|
<DetectChar char="<" attribute="Pod Bold" context="#pop!PodFormatB3"/>
|
|
</context>
|
|
<context name="PodFormatB1" attribute="Pod Bold" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Bold" context="#stay" String="&allnopodfmt1;"/>
|
|
<DetectChar char="<" attribute="Pod Bold" context="PodFormatB1"/>
|
|
<DetectChar char=">" attribute="Pod Bold" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatB2" attribute="Pod Bold" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Bold" context="#stay" String="&allnopodfmt2;"/>
|
|
<DetectChar char="«" attribute="Pod Bold" context="PodFormatB2"/>
|
|
<DetectChar char="»" attribute="Pod Bold" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatB3" attribute="Pod Bold" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Bold" context="#stay" String="&allnopodfmt3;"/>
|
|
<Detect2Chars char="<" char1="<" attribute="Pod Bold" context="PodFormatB3"/>
|
|
<Detect2Chars char=">" char1=">" attribute="Pod Bold" context="#pop"/>
|
|
</context>
|
|
|
|
<context name="PodFormatE" attribute="Pod Unicode" lineEndContext="#stay" fallthroughContext="#pop!PodFormatE1">
|
|
<DetectChar char="<" attribute="Pod Unicode" context="#pop!PodFormatE3"/>
|
|
</context>
|
|
<context name="PodFormatE1" attribute="Pod Unicode" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Unicode" context="#stay" String="&allnopodfmt1;"/>
|
|
<DetectChar char="<" attribute="Pod Unicode" context="PodFormatE1"/>
|
|
<DetectChar char=">" attribute="Pod Unicode" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatE2" attribute="Pod Unicode" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Unicode" context="#stay" String="&allnopodfmt2;"/>
|
|
<DetectChar char="«" attribute="Pod Unicode" context="PodFormatE2"/>
|
|
<DetectChar char="»" attribute="Pod Unicode" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatE3" attribute="Pod Unicode" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Unicode" context="#stay" String="&allnopodfmt3;"/>
|
|
<Detect2Chars char="<" char1="<" attribute="Pod Unicode" context="PodFormatE3"/>
|
|
<Detect2Chars char=">" char1=">" attribute="Pod Unicode" context="#pop"/>
|
|
</context>
|
|
|
|
<context name="PodFormatI" attribute="Pod Italic" lineEndContext="#stay" fallthroughContext="#pop!PodFormatI1">
|
|
<DetectChar char="<" attribute="Pod Italic" context="#pop!PodFormatI3"/>
|
|
</context>
|
|
<context name="PodFormatI1" attribute="Pod Italic" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Italic" context="#stay" String="&allnopodfmt1;"/>
|
|
<DetectChar char="<" attribute="Pod Italic" context="PodFormatI1"/>
|
|
<DetectChar char=">" attribute="Pod Italic" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatI2" attribute="Pod Italic" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Italic" context="#stay" String="&allnopodfmt2;"/>
|
|
<DetectChar char="«" attribute="Pod Italic" context="PodFormatI2"/>
|
|
<DetectChar char="»" attribute="Pod Italic" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatI3" attribute="Pod Italic" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Italic" context="#stay" String="&allnopodfmt3;"/>
|
|
<Detect2Chars char="<" char1="<" attribute="Pod Italic" context="PodFormatI3"/>
|
|
<Detect2Chars char=">" char1=">" attribute="Pod Italic" context="#pop"/>
|
|
</context>
|
|
|
|
<context name="PodFormatL" attribute="Pod Link" lineEndContext="#stay" fallthroughContext="#pop!PodFormatL1">
|
|
<DetectChar char="<" attribute="Pod Link" context="#pop!PodFormatL3"/>
|
|
</context>
|
|
<context name="PodFormatL1" attribute="Pod Link" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;<>|]+|[&podfmt;](?![<«]))+"/>
|
|
<DetectChar char="|" attribute="Pod Operator" context="#stay"/>
|
|
<DetectChar char=">" attribute="Pod Link" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatL2" attribute="Pod Link" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;«»|]+|[&podfmt;](?![<«]))+"/>
|
|
<DetectChar char="|" attribute="Pod Operator" context="#stay"/>
|
|
<DetectChar char="»" attribute="Pod Link" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatL3" attribute="Pod Link" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;<>|]+|[&podfmt;](?![<«])|>(?!>)|<(?!<))+"/>
|
|
<DetectChar char="|" attribute="Pod Operator" context="#stay"/>
|
|
<Detect2Chars char=">" char1=">" attribute="Pod Link" context="#pop"/>
|
|
</context>
|
|
|
|
<context name="PodFormatN" attribute="Pod Note" lineEndContext="#stay" fallthroughContext="#pop!PodFormatN1">
|
|
<DetectChar char="<" attribute="Pod Note" context="#pop!PodFormatN3"/>
|
|
</context>
|
|
<context name="PodFormatN1" attribute="Pod Note" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Note" context="#stay" String="&allnopodfmt1;"/>
|
|
<DetectChar char="<" attribute="Pod Note" context="PodFormatN1"/>
|
|
<DetectChar char=">" attribute="Pod Note" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatN2" attribute="Pod Note" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Note" context="#stay" String="&allnopodfmt2;"/>
|
|
<DetectChar char="«" attribute="Pod Note" context="PodFormatN2"/>
|
|
<DetectChar char="»" attribute="Pod Note" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatN3" attribute="Pod Note" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Note" context="#stay" String="&allnopodfmt3;"/>
|
|
<Detect2Chars char="<" char1="<" attribute="Pod Note" context="PodFormatN3"/>
|
|
<Detect2Chars char=">" char1=">" attribute="Pod Note" context="#pop"/>
|
|
</context>
|
|
|
|
<context name="PodFormatU" attribute="Pod Underline" lineEndContext="#stay" fallthroughContext="#pop!PodFormatU1">
|
|
<DetectChar char="<" attribute="Pod Underline" context="#pop!PodFormatU3"/>
|
|
</context>
|
|
<context name="PodFormatU1" attribute="Pod Underline" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Underline" context="#stay" String="&allnopodfmt1;"/>
|
|
<DetectChar char="<" attribute="Pod Underline" context="PodFormatU1"/>
|
|
<DetectChar char=">" attribute="Pod Underline" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatU2" attribute="Pod Underline" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Underline" context="#stay" String="&allnopodfmt2;"/>
|
|
<DetectChar char="«" attribute="Pod Underline" context="PodFormatU2"/>
|
|
<DetectChar char="»" attribute="Pod Underline" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatU3" attribute="Pod Underline" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Underline" context="#stay" String="&allnopodfmt3;"/>
|
|
<Detect2Chars char="<" char1="<" attribute="Pod Underline" context="PodFormatU3"/>
|
|
<Detect2Chars char=">" char1=">" attribute="Pod Underline" context="#pop"/>
|
|
</context>
|
|
|
|
<context name="PodFormatV" attribute="Pod Verbatim" lineEndContext="#stay" fallthroughContext="#pop!PodFormatV1">
|
|
<DetectChar char="<" attribute="Pod Verbatim" context="#pop!PodFormatV3"/>
|
|
</context>
|
|
<context name="PodFormatV1" attribute="Pod Verbatim" lineEndContext="#stay">
|
|
<RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt1;"/>
|
|
<DetectChar char="<" attribute="Pod Verbatim" context="PodFormatV1"/>
|
|
<DetectChar char=">" attribute="Pod Verbatim" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatV2" attribute="Pod Verbatim" lineEndContext="#stay">
|
|
<RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt2;"/>
|
|
<DetectChar char="«" attribute="Pod Verbatim" context="PodFormatV2"/>
|
|
<DetectChar char="»" attribute="Pod Verbatim" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatV3" attribute="Pod Verbatim" lineEndContext="#stay">
|
|
<RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt3;"/>
|
|
<Detect2Chars char="<" char1="<" attribute="Pod Verbatim" context="PodFormatV3"/>
|
|
<Detect2Chars char=">" char1=">" attribute="Pod Verbatim" context="#pop"/>
|
|
</context>
|
|
|
|
<context name="PodFormatVT" attribute="Pod Verbatim" lineEndContext="#stay" fallthroughContext="#pop!PodFormatVT1">
|
|
<DetectChar char="<" attribute="Pod Verbatim" context="#pop!PodFormatVT3"/>
|
|
</context>
|
|
<context name="PodFormatVT1" attribute="Pod Verbatim" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt1;"/>
|
|
<DetectChar char="<" attribute="Pod Verbatim" context="PodFormatVT1"/>
|
|
<DetectChar char=">" attribute="Pod Verbatim" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatVT2" attribute="Pod Verbatim" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt2;"/>
|
|
<DetectChar char="«" attribute="Pod Verbatim" context="PodFormatVT2"/>
|
|
<DetectChar char="»" attribute="Pod Verbatim" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatVT3" attribute="Pod Verbatim" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt3;"/>
|
|
<Detect2Chars char="<" char1="<" attribute="Pod Verbatim" context="PodFormatVT3"/>
|
|
<Detect2Chars char=">" char1=">" attribute="Pod Verbatim" context="#pop"/>
|
|
</context>
|
|
|
|
<context name="PodFormatZ" attribute="Pod Comment" lineEndContext="#stay" fallthroughContext="#pop!PodFormatZ1">
|
|
<DetectChar char="<" attribute="Pod Comment" context="#pop!PodFormatZ3"/>
|
|
</context>
|
|
<context name="PodFormatZ1" attribute="Pod Comment" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Comment" context="#stay" String="&allnopodfmt1;"/>
|
|
<DetectChar char="<" attribute="Pod Comment" context="PodFormatZ1"/>
|
|
<DetectChar char=">" attribute="Pod Comment" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatZ2" attribute="Pod Comment" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Comment" context="#stay" String="&allnopodfmt2;"/>
|
|
<DetectChar char="«" attribute="Pod Comment" context="PodFormatZ2"/>
|
|
<DetectChar char="»" attribute="Pod Comment" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatZ3" attribute="Pod Comment" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Comment" context="#stay" String="&allnopodfmt3;"/>
|
|
<Detect2Chars char="<" char1="<" attribute="Pod Comment" context="PodFormatZ3"/>
|
|
<Detect2Chars char=">" char1=">" attribute="Pod Comment" context="#pop"/>
|
|
</context>
|
|
|
|
<context name="PodFormatX" attribute="Pod Indexed Terms" lineEndContext="#stay" fallthroughContext="#pop!PodFormatX1">
|
|
<DetectChar char="<" attribute="Pod Indexed Terms" context="#pop!PodFormatX3"/>
|
|
</context>
|
|
<context name="PodFormatX1" attribute="Pod Indexed Terms" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;<>|;,]+|[&podfmt;](?![<«]))+"/>
|
|
<AnyChar String="|;," attribute="Pod Operator" context="#stay"/>
|
|
<DetectChar char=">" attribute="Pod Indexed Terms" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatX2" attribute="Pod Indexed Terms" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;«»|;,]+|[&podfmt;](?![<«]))+"/>
|
|
<AnyChar String="|;," attribute="Pod Operator" context="#stay"/>
|
|
<DetectChar char="«" attribute="Pod Indexed Terms" context="PodFormatX2"/>
|
|
<DetectChar char="»" attribute="Pod Indexed Terms" context="#pop"/>
|
|
</context>
|
|
<context name="PodFormatX3" attribute="Pod Indexed Terms" lineEndContext="#stay" fallthroughContext="PodFormat">
|
|
<RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;<>|;,]+|[&podfmt;](?![<«])|>(?!>)|<(?!<))+"/>
|
|
<AnyChar String="|;," attribute="Pod Operator" context="#stay"/>
|
|
<Detect2Chars char="<" char1="<" attribute="Pod Indexed Terms" context="PodFormatX3"/>
|
|
<Detect2Chars char=">" char1=">" attribute="Pod Indexed Terms" context="#pop"/>
|
|
</context>
|
|
|
|
<!-- Pod =begin -->
|
|
|
|
<context name="PodBegin" attribute="Pod Typename Value" lineEndContext="#pop#pop!Error">
|
|
<DetectSpaces attribute="Normal Text"/>
|
|
<WordDetect String="code" context="PodBeginCode" attribute="Pod Typename Value" beginRegion="pod"/>
|
|
<WordDetect String="comment" context="PodBeginComment" attribute="Pod Typename Value" beginRegion="pod"/>
|
|
<RegExpr String="(&ident;)" context="PodBeginTypename" attribute="Pod Typename Value" beginRegion="pod"/>
|
|
</context>
|
|
|
|
<context name="PodBeginCode" attribute="Error" lineEndContext="PodInnerCode">
|
|
<DetectSpaces attribute="Normal Text"/>
|
|
<DetectChar char=":" context="PodBlockConfigKey" attribute="Pod Operator"/>
|
|
<DetectChar char="=" context="PodEndCode" attribute="Pod" firstNonSpace="1"/>
|
|
</context>
|
|
|
|
<context name="PodInnerCode" attribute="Pod Verbatim" lineEndContext="#stay" fallthroughContext="PodCode">
|
|
<RegExpr String="^\s*=end\s+code\s*$" context="#pop" attribute="Pod" column="0" lookAhead="1"/>
|
|
</context>
|
|
<context name="PodCode" attribute="Pod Verbatim" lineEndContext="#pop"/>
|
|
|
|
<context name="PodEndCode" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop">
|
|
<StringDetect String="end" context="PodEndCodeName" attribute="Pod Block" endRegion="pod"/>
|
|
</context>
|
|
<context name="PodEndCodeName" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop#pop" fallthroughContext="#pop#pop#pop#pop!Error">
|
|
<DetectSpaces attribute="Normal Text"/>
|
|
<StringDetect String="code" context="#pop#pop#pop#pop!Error" attribute="Pod Typename Value"/>
|
|
</context>
|
|
|
|
|
|
<context name="PodBeginComment" attribute="Error" lineEndContext="PodInnerComment">
|
|
<DetectSpaces attribute="Normal Text"/>
|
|
<DetectChar char="=" context="PodEndComment" attribute="Pod" firstNonSpace="1"/>
|
|
</context>
|
|
|
|
<context name="PodInnerComment" attribute="Comment" lineEndContext="#stay" fallthroughContext="PodComment">
|
|
<RegExpr String="^\s*=end\s+comment\s*$" context="#pop" attribute="Pod" column="0" lookAhead="1"/>
|
|
</context>
|
|
<context name="PodComment" attribute="Comment" lineEndContext="#pop"/>
|
|
|
|
<context name="PodEndComment" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop">
|
|
<StringDetect String="end" context="PodEndCommentName" attribute="Pod Block" endRegion="pod"/>
|
|
</context>
|
|
<context name="PodEndCommentName" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop#pop" fallthroughContext="#pop#pop#pop#pop!Error">
|
|
<DetectSpaces attribute="Normal Text"/>
|
|
<StringDetect String="comment" context="#pop#pop#pop#pop!Error" attribute="Pod Typename Value"/>
|
|
</context>
|
|
|
|
|
|
<context name="PodBeginTypename" attribute="Error" lineEndContext="PodInnerBlock">
|
|
<RegExpr String="^\s*=end\s+%1\b" dynamic="1" context="PodEnd" attribute="Pod" column="0" lookAhead="1"/>
|
|
<DetectSpaces attribute="Normal Text"/>
|
|
<DetectChar char=":" context="PodBlockConfigKey" attribute="Pod Operator"/>
|
|
<DetectChar char="=" context="PodEndError" attribute="Pod" firstNonSpace="1"/>
|
|
</context>
|
|
|
|
<context name="PodInnerBlock" attribute="Pod Paragraph" lineEndContext="#stay" fallthroughContext="PodInnerBlockFormat">
|
|
<RegExpr String="^\s*=end\b" context="#pop" attribute="Pod" column="0" lookAhead="1"/>
|
|
<DetectSpaces/>
|
|
<DetectChar char="=" context="StartPod" attribute="Pod" firstNonSpace="1"/>
|
|
<RegExpr attribute="Pod Paragraph" context="#stay" String="&allnopodfmt;"/>
|
|
</context>
|
|
|
|
<context name="PodInnerBlockFormat" attribute="Pod Paragraph" lineEndContext="#stay">
|
|
<IncludeRules context="PodFormat"/>
|
|
</context>
|
|
|
|
<context name="PodEnd" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop">
|
|
<DetectSpaces attribute="Normal Text"/>
|
|
<DetectChar char="=" context="#stay" attribute="Pod"/>
|
|
<StringDetect String="end" context="PodEndName" attribute="Pod Block" endRegion="pod"/>
|
|
</context>
|
|
<context name="PodEndName" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop#pop">
|
|
<DetectSpaces attribute="Normal Text"/>
|
|
<RegExpr String="&ident;" context="#pop#pop#pop#pop!Error" attribute="Pod Typename Value"/>
|
|
</context>
|
|
|
|
<context name="PodEndError" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop">
|
|
<StringDetect String="end" attribute="Pod Block" context="#pop#pop#pop!Error" endRegion="pod"/>
|
|
</context>
|
|
|
|
<!-- Pod configuration for =begin -->
|
|
|
|
<context name="PodBlockConfigError" attribute="Error" lineEndContext="#pop#pop!PodInnerBlock"/>
|
|
|
|
<context name="PodBlockConfigKey" attribute="Pod Key" lineEndContext="#pop!PodInnerBlock" fallthroughContext="PodBlockConfigError">
|
|
<DetectChar char="!" context="#pop!PodBlockConfigKeyName" attribute="Pod Operator"/>
|
|
<Int context="PodBlockConfigKeyIntName" attribute="Decimal"/>
|
|
<DetectIdentifier context="PodBlockConfigParam" attribute="Pod Key"/>
|
|
</context>
|
|
|
|
<context name="PodBlockConfigKeyName" attribute="Pod Key" lineEndContext="#pop!PodTypenameValue" fallthroughContext="PodBlockConfigError">
|
|
<DetectIdentifier context="PodBlockConfigParam" attribute="Pod Key"/>
|
|
</context>
|
|
|
|
<context name="PodBlockConfigKeyIntName" attribute="Pod Key" lineEndContext="#pop#pop!PodBlockConfigError" fallthroughContext="#pop!PodBlockConfigError">
|
|
<DetectIdentifier context="#pop#pop" attribute="Pod Key"/>
|
|
</context>
|
|
|
|
<context name="PodBlockConfigParam" attribute="Pod Key" lineEndContext="#pop#pop#pop" fallthroughContext="#pop">
|
|
<DetectChar char="<" context="PodParamSequence" attribute="Pod Operator"/>
|
|
<DetectChar char="{" context="PodParamHash" attribute="Pod Operator"/>
|
|
<AnyChar String="([" context="PodParamList" attribute="Pod Operator"/>
|
|
</context>
|
|
|
|
|
|
<!-- Pod =for -->
|
|
|
|
<context name="PodFor" attribute="Pod Typename" lineEndContext="#pop#pop!Error" fallthroughContext="#pop#pop!Error">
|
|
<DetectSpaces attribute="Normal Text"/>
|
|
<keyword String="podtypename" context="#pop!PodConfig" attribute="Pod Typename"/>
|
|
</context>
|
|
|
|
<!-- Pod configuration for =for -->
|
|
|
|
<context name="PodConfigError" attribute="Error" lineEndContext="#pop#pop!PodTypenameValue"/>
|
|
|
|
<context name="PodConfig" attribute="Normal Text" lineEndContext="#pop!PodTypenameValue" fallthroughContext="PodConfigError">
|
|
<DetectSpaces/>
|
|
<DetectChar char=":" context="PodConfigKey" attribute="Pod Operator"/>
|
|
</context>
|
|
|
|
<context name="PodConfigKey" attribute="Pod Key" lineEndContext="#pop#pop!PodTypenameValue" fallthroughContext="#pop!PodConfigError">
|
|
<DetectChar char="!" context="#pop!PodConfigKeyName" attribute="Pod Operator"/>
|
|
<Int context="PodConfigKeyIntName" attribute="Decimal"/>
|
|
<DetectIdentifier context="PodConfigParam" attribute="Pod Key"/>
|
|
</context>
|
|
|
|
<context name="PodConfigKeyName" attribute="Pod Key" lineEndContext="#pop#pop!PodTypenameValue" fallthroughContext="#pop!PodConfigError">
|
|
<DetectIdentifier context="PodConfigParam" attribute="Pod Key"/>
|
|
</context>
|
|
|
|
<context name="PodConfigKeyIntName" attribute="Pod Key" lineEndContext="#pop#pop#pop!PodConfigError" fallthroughContext="#pop#pop!PodConfigError">
|
|
<DetectIdentifier context="#pop#pop" attribute="Pod Key"/>
|
|
</context>
|
|
|
|
<context name="PodConfigParam" attribute="Pod Key" lineEndContext="#pop#pop#pop#pop" fallthroughContext="#pop#pop">
|
|
<DetectChar char="<" context="PodParamSequence" attribute="Pod Operator"/>
|
|
<DetectChar char="{" context="PodParamHash" attribute="Pod Operator"/>
|
|
<AnyChar String="([" context="PodParamList" attribute="Pod Operator"/>
|
|
</context>
|
|
|
|
<context name="find_PodNumber" attribute="Pod Config" lineEndContext="#stay">
|
|
<RegExpr String="\.?\p{N}" context="PodNumber" lookAhead="1" minimal="1"/>
|
|
</context>
|
|
|
|
<context name="PodParamSequence" attribute="Pod Config" lineEndContext="#stay">
|
|
<DetectSpaces/>
|
|
<keyword String="pod values" context="#stay" attribute="Data Type"/>
|
|
<DetectIdentifier/>
|
|
<IncludeRules context="find_PodNumber"/>
|
|
<DetectChar char=">" context="#pop#pop#pop" attribute="Pod Operator"/>
|
|
<DetectChar char="'" context="PodSQString" attribute="String"/>
|
|
<DetectChar char=""" context="PodQString" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="PodParamHash" attribute="Pod Config" lineEndContext="#stay">
|
|
<DetectSpaces/>
|
|
<Detect2Chars char="=" char1=">" context="#stay" attribute="Pod Operator"/>
|
|
<DetectChar char="," context="#stay" attribute="Pod Operator"/>
|
|
<keyword String="pod values" context="#stay" attribute="Data Type"/>
|
|
<DetectIdentifier/>
|
|
<DetectChar char="'" context="PodSQString" attribute="String"/>
|
|
<DetectChar char=""" context="PodQString" attribute="String"/>
|
|
<IncludeRules context="find_PodNumber"/>
|
|
<DetectChar char="}" context="#pop#pop#pop" attribute="Pod Operator"/>
|
|
</context>
|
|
|
|
<context name="PodParamList" attribute="Pod Config" lineEndContext="#stay">
|
|
<DetectSpaces/>
|
|
<DetectChar char="," context="#stay" attribute="Pod Operator"/>
|
|
<keyword String="pod values" context="#stay" attribute="Data Type"/>
|
|
<DetectIdentifier/>
|
|
<DetectChar char="'" context="PodSQString" attribute="String"/>
|
|
<DetectChar char=""" context="PodQString" attribute="String"/>
|
|
<IncludeRules context="find_PodNumber"/>
|
|
<AnyChar String="])" context="#pop#pop#pop" attribute="Pod Operator"/>
|
|
</context>
|
|
|
|
|
|
<!-- Pod Number (same as Number with different context pop) -->
|
|
|
|
<context name="PodNumber" attribute="Decimal" lineEndContext="#stay" fallthroughContext="#pop">
|
|
<RegExpr String="&int10;(?:\.&int10;&exp;?|&exp;)|\.&int10;&exp;?" context="PodNumberSuffix" attribute="Float"/>
|
|
<Detect2Chars char="0" char1="x" context="HexPodNumber" attribute="Hex"/>
|
|
<Detect2Chars char="0" char1="o" context="OctalPodNumber" attribute="Octal"/>
|
|
<RegExpr String="\p{N}++(?:_\p{N}++)*+" context="PodNumberSuffix" attribute="Decimal"/>
|
|
</context>
|
|
|
|
<context name="HexPodNumber" attribute="Hex" lineEndContext="#pop#pop" fallthroughContext="PodNumberCheckError">
|
|
<RegExpr String="[a-fA-F0-9]++(?:_[a-fA-F0-9]++)*+" context="#pop!PodNumberSuffix" attribute="Hex"/>
|
|
</context>
|
|
|
|
<context name="OctalPodNumber" attribute="Octal" lineEndContext="#pop#pop" fallthroughContext="PodNumberCheckError">
|
|
<RegExpr String="[0-7]++(?:_[0-7]++)*+" context="#pop!PodNumberSuffix" attribute="Octal"/>
|
|
</context>
|
|
|
|
<context name="PodNumberSuffix" attribute="Decimal" lineEndContext="#pop#pop" fallthroughContext="#pop#pop">
|
|
<DetectChar char="i" context="#pop!PodNumberCheckError" attribute="Number Suffix"/>
|
|
<IncludeRules context="PodNumberCheckError"/>
|
|
</context>
|
|
<context name="PodNumberCheckError" attribute="Decimal" lineEndContext="#pop#pop" fallthroughContext="#pop#pop">
|
|
<RegExpr String="&alnum;+" context="#pop#pop" attribute="Error"/>
|
|
</context>
|
|
|
|
|
|
<!-- Pod String -->
|
|
|
|
<context name="PodSQString" attribute="String" lineEndContext="#stay">
|
|
<Detect2Chars char="\" char1="'" context="#stay" attribute="String Special Character"/>
|
|
<DetectChar char="'" context="#pop" attribute="String Delimiter"/>
|
|
<RegExpr String="(?:[^\\']*|\\[^']|\\$)*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="PodQString" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char=""" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="\" context="SpecialChar" attribute="String Special Character"/>
|
|
<RegExpr String="(?:[^"\\]*|\\$)*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="SpecialCharPre" attribute="String Special Character" lineEndContext="#pop">
|
|
<RegExpr String="[abefnrtv]|x(&unicode_hex_point;(?![0-9a-fA-F])|\[\s*&unicode_hex_point;\s*\])|c(&unicode_dec_point;(?![0-9])|\[[a-zA-Z\s]+\])|o(&unicode_oct_point;(?![0-7])|\[\s*&unicode_oct_point;\s*\])" context="#pop" attribute="String Special Character"/>
|
|
</context>
|
|
<context name="SpecialChar" attribute="String Special Character" lineEndContext="#pop" fallthroughContext="#pop">
|
|
<IncludeRules context="SpecialCharPre"/>
|
|
<RegExpr String="[^xco]" context="#pop" attribute="String"/>
|
|
<IncludeRules context="SpecialCharPost"/>
|
|
</context>
|
|
<context name="SpecialCharPost" attribute="String Special Character" lineEndContext="#pop">
|
|
<StringDetect String="x[" context="SpecialCharX" attribute="String Special Character"/>
|
|
<StringDetect String="c[" context="SpecialCharC" attribute="String Special Character"/>
|
|
<StringDetect String="o[" context="SpecialCharO" attribute="String Special Character"/>
|
|
|
|
<RegExpr String="x&unicode_hex_point;|c&unicode_dec_point;|o&unicode_oct_point;" context="SpecialCharError" attribute="String Special Character"/>
|
|
|
|
<AnyChar String="xco" context="#pop" attribute="Error"/>
|
|
</context>
|
|
|
|
<context name="SpecialCharError" attribute="String Special Character" fallthroughContext="#pop#pop">
|
|
<AnyChar String="0123456789abcdefABCDEF" context="#pop#pop" attribute="Error"/>
|
|
</context>
|
|
|
|
<context name="SpecialCharPreCommon" attribute="String Special Character">
|
|
<DetectChar char="]" context="#pop#pop" attribute="String Special Character"/>
|
|
<DetectChar char="," attribute="Separator Symbol"/>
|
|
<DetectChar char=""" context="#pop#pop#pop" attribute="Error"/>
|
|
</context>
|
|
|
|
<context name="SpecialCharX" attribute="String Special Character">
|
|
<IncludeRules context="SpecialCharPreCommon"/>
|
|
<IncludeRules context="X[]"/>
|
|
<RegExpr String="[^0-9a-fA-F\],\s"]+|[0-9a-fA-F]+|." attribute="Error"/>
|
|
</context>
|
|
|
|
<context name="SpecialCharO" attribute="String Special Character">
|
|
<IncludeRules context="SpecialCharPreCommon"/>
|
|
<IncludeRules context="O[]"/>
|
|
<RegExpr String="[^0-7\],\s"]+|[0-7]+|." attribute="Error"/>
|
|
</context>
|
|
|
|
<context name="SpecialCharC" attribute="String Special Character">
|
|
<IncludeRules context="SpecialCharPreCommon"/>
|
|
<IncludeRules context="C[]"/>
|
|
<RegExpr String="[^0-9a-zA-Z\],\s"]+|[0-9a-zA-Z]+|." attribute="Error"/>
|
|
</context>
|
|
|
|
|
|
<!-- Q String -->
|
|
|
|
<context name="Q_String" attribute="String" lineEndContext="#stay" fallthroughContext="#pop">
|
|
<DetectSpaces attribute="String"/>
|
|
<DetectChar char=":" context="#pop!Q_StringModifier" attribute="Operator"/>
|
|
<DetectChar char="(" context="#pop!Q_String(" attribute="String Delimiter"/>
|
|
<DetectChar char="[" context="#pop!Q_String[" attribute="String Delimiter"/>
|
|
<DetectChar char="{" context="#pop!Q_String{" attribute="String Delimiter"/>
|
|
<DetectChar char="「" context="#pop!Q_String「" attribute="String Delimiter"/>
|
|
<DetectChar char="<" context="#pop!Q_String<" attribute="String Delimiter"/>
|
|
<RegExpr String="([^()>」\]}'&rangealnum;])" context="#pop!Q_StringAny" attribute="String Delimiter"/>
|
|
</context>
|
|
|
|
<context name="Q_String(" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char=")" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="(" context="Q_String(" attribute="String Delimiter"/>
|
|
<RegExpr String="[^()]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="Q_String[" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="]" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="[" context="Q_String[" attribute="String Delimiter"/>
|
|
<RegExpr String="[^\[\]]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="Q_String{" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="}" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="{" context="Q_String{" attribute="String Delimiter"/>
|
|
<RegExpr String="[^{}]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="Q_String「" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="」" context="#pop" attribute="String Delimiter"/>
|
|
<IncludeRules context="Q_String「_common"/>
|
|
</context>
|
|
<context name="Q_String「_term" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="」" context="#pop!postfix_op" attribute="String Delimiter"/>
|
|
<IncludeRules context="Q_String「_common"/>
|
|
</context>
|
|
<context name="Q_String「_common" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="「" context="Q_String「" attribute="String Delimiter"/>
|
|
<RegExpr String="[^「」]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="Q_String<" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char=">" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="<" context="Q_String<" attribute="String Delimiter"/>
|
|
<RegExpr String="[^<>]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="Q_StringAny" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="1" dynamic="1" context="#pop" attribute="String Delimiter"/>
|
|
<RegExpr String="[^%1]*" dynamic="1" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="q_Q_StringModifier" attribute="Operator" lineEndContext="#stay" fallthroughContext="#pop#pop!q_String">
|
|
<DetectChar char=":" context="#pop#pop!q_QuotingForm2" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="qq_Q_StringModifier" attribute="Operator" lineEndContext="#stay" fallthroughContext="#pop#pop!qq_String">
|
|
<DetectChar char=":" context="#pop!qq_QuotingForm" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="Q_StringModifier" attribute="Operator" lineEndContext="#stay" fallthroughContext="#pop!q_QuotingForm2">
|
|
<DetectChar char="q" context="#pop!q_QuotingForm" attribute="Operator"/>
|
|
<DetectChar char="'" context="q_Q_StringModifier" attribute="Operator"/>
|
|
<DetectChar char=""" context="qq_Q_StringModifier" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="q_QuotingForm" attribute="Operator" lineEndContext="#pop" fallthroughContext="#pop!q_QuotingForm2">
|
|
<DetectChar char="q" context="#pop!qq_QuotingForm" attribute="Operator"/>
|
|
<DetectChar char=":" context="#pop!q_QuotingForm2" attribute="Operator"/>
|
|
</context>
|
|
<context name="q_QuotingForm2" attribute="Operator" lineEndContext="#pop" fallthroughContext="q_String">
|
|
<WordDetect String="heredoc" context="q_Heredoc" attribute="Operator"/>
|
|
<keyword String="quoting" context="#stay" attribute="Operator"/>
|
|
<AnyChar String="wvx:sahfb" context="#stay" attribute="Operator"/>
|
|
<!-- :closure as qq -->
|
|
<DetectChar char="c" context="#pop!qq_QuotingForm" attribute="Operator"/>
|
|
<Detect2Chars char="t" char1="o" context="q_Heredoc" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="qq_QuotingForm" attribute="Operator" lineEndContext="#pop" fallthroughContext="qq_String">
|
|
<WordDetect String="heredoc" context="qq_Heredoc" attribute="Operator"/>
|
|
<keyword String="quoting" context="#stay" attribute="Operator"/>
|
|
<AnyChar String="wvx:sahfcb" context="#stay" attribute="Operator"/>
|
|
<Detect2Chars char="t" char1="o" context="qq_Heredoc" attribute="Operator"/>
|
|
</context>
|
|
|
|
|
|
<!-- q and qq Heredoc -->
|
|
|
|
<context name="q_Heredoc" attribute="String" lineEndContext="#pop#pop" fallthroughContext="#pop#pop">
|
|
<RegExpr String="/([^/]+)/" context="q_HeredocTerminator" attribute="String Delimiter"/>
|
|
</context>
|
|
<context name="q_HeredocTerminator" attribute="String" lineEndContext="#stay">
|
|
<DetectSpaces/>
|
|
<StringDetect String="%1" dynamic="1" context="#pop#pop#pop" attribute="String Delimiter" firstNonSpace="1"/>
|
|
<RegExpr String="(?:[^\\]*|\\(?![\\%1]|"ingconstruct;|$))*" dynamic="1" context="#stay" attribute="String"/>
|
|
<Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="qq_Heredoc" attribute="String" lineEndContext="#pop#pop" fallthroughContext="#pop#pop">
|
|
<RegExpr String="/([^/]+)/" context="qq_HeredocTerminator" attribute="String Delimiter"/>
|
|
</context>
|
|
<context name="qq_HeredocTerminator" attribute="String" lineEndContext="#stay">
|
|
<DetectSpaces/>
|
|
<StringDetect String="%1" dynamic="1" context="#pop#pop#pop" attribute="String Delimiter" firstNonSpace="1"/>
|
|
<IncludeRules context="find_qq_StringCommon"/>
|
|
<RegExpr String="[^\\${@&]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
|
|
<!-- q String -->
|
|
|
|
<context name="q_String" attribute="String" lineEndContext="#stay" fallthroughContext="#pop#pop">
|
|
<DetectSpaces/>
|
|
<DetectChar char="(" context="#pop#pop!q_String(" attribute="String Delimiter"/>
|
|
<DetectChar char="[" context="#pop#pop!q_String[" attribute="String Delimiter"/>
|
|
<DetectChar char="{" context="#pop#pop!q_String{" attribute="String Delimiter"/>
|
|
<DetectChar char="<" context="#pop#pop!q_String<" attribute="String Delimiter"/>
|
|
<RegExpr String="([^a-zA-Z0-9])" context="#pop#pop!q_StringAny" attribute="String Delimiter"/>
|
|
</context>
|
|
|
|
<context name="q_String(" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char=")" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="(" context="q_String(" attribute="String Delimiter"/>
|
|
<Detect2Chars char="\" char1="(" context="#stay" attribute="String Special Character"/>
|
|
<Detect2Chars char="\" char1=")" context="#stay" attribute="String Special Character"/>
|
|
<Detect2Chars char="\" char1="\" context="#stay" attribute="String Special Character"/>
|
|
<RegExpr String="(?:[^()\\]*|\\(?![()\\]|"ingconstruct;|$))*" context="#stay" attribute="String"/>
|
|
<Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="q_String[" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="]" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="[" context="q_String[" attribute="String Delimiter"/>
|
|
<Detect2Chars char="\" char1="[" context="#stay" attribute="String Special Character"/>
|
|
<Detect2Chars char="\" char1="]" context="#stay" attribute="String Special Character"/>
|
|
<Detect2Chars char="\" char1="\" context="#stay" attribute="String Special Character"/>
|
|
<RegExpr String="(?:[^\[\]\\]*|\\(?![\[\]\\]|"ingconstruct;|$))*" context="#stay" attribute="String"/>
|
|
<Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="q_String{" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="}" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="{" context="q_String{" attribute="String Delimiter"/>
|
|
<Detect2Chars char="\" char1="{" context="#stay" attribute="String Special Character"/>
|
|
<Detect2Chars char="\" char1="}" context="#stay" attribute="String Special Character"/>
|
|
<Detect2Chars char="\" char1="\" context="#stay" attribute="String Special Character"/>
|
|
<RegExpr String="(?:[^{}\\]*|\\(?![{}\\]|"ingconstruct;|$))*" context="#stay" attribute="String"/>
|
|
<Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="q_String<" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char=">" context="#pop" attribute="String Delimiter"/>
|
|
<IncludeRules context="q_String<_common"/>
|
|
</context>
|
|
<context name="q_String<_term" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char=">" context="#pop!postfix_op" attribute="String Delimiter"/>
|
|
<IncludeRules context="q_String<_common"/>
|
|
</context>
|
|
<context name="q_String<_common" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="<" context="q_String<" attribute="String Delimiter"/>
|
|
<Detect2Chars char="\" char1="<" context="#stay" attribute="String Special Character"/>
|
|
<Detect2Chars char="\" char1=">" context="#stay" attribute="String Special Character"/>
|
|
<Detect2Chars char="\" char1="\" context="#stay" attribute="String Special Character"/>
|
|
<RegExpr String="(?:[^<>\\]*|\\(?![<>\\]|"ingconstruct;|$))*" context="#stay" attribute="String"/>
|
|
<Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="q_StringAny" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="1" dynamic="1" context="#pop" attribute="String Delimiter"/>
|
|
<StringDetect String="\%1" dynamic="1" context="#stay" attribute="String Special Character"/>
|
|
<RegExpr String="(?:[^\\%1]*|\\(?![\\%1]|"ingconstruct;|$))*" dynamic="1" context="#stay" attribute="String"/>
|
|
<Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
|
|
</context>
|
|
|
|
<context name="q_RawString" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="'" context="#pop" attribute="String Delimiter"/>
|
|
<IncludeRules context="q_RawString_common"/>
|
|
</context>
|
|
<context name="q_RawString_term" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="'" context="#pop!postfix_op" attribute="String Delimiter"/>
|
|
<IncludeRules context="q_RawString_common"/>
|
|
</context>
|
|
<context name="q_RawString_common" attribute="String" lineEndContext="#stay">
|
|
<Detect2Chars char="\" char1="'" context="#stay" attribute="String Special Character"/>
|
|
<RegExpr String="(?:[^\\']*|\\(?![\\']|"ingconstruct;|$))*" context="#stay" attribute="String"/>
|
|
<Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
|
|
</context>
|
|
|
|
<!-- qq String -->
|
|
|
|
<context name="qq_String" attribute="String" lineEndContext="#stay" fallthroughContext="#pop#pop">
|
|
<DetectSpaces/>
|
|
<DetectChar char="(" context="#pop#pop!qq_String(" attribute="String Delimiter"/>
|
|
<DetectChar char="[" context="#pop#pop!qq_String[" attribute="String Delimiter"/>
|
|
<DetectChar char="{" context="#pop#pop!qq_String{" attribute="String Delimiter"/>
|
|
<DetectChar char="<" context="#pop#pop!qq_String<" attribute="String Delimiter"/>
|
|
<RegExpr String="([^a-zA-Z0-9])" context="#pop#pop!qq_StringAny" attribute="String Delimiter"/>
|
|
</context>
|
|
|
|
<context name="qq_String(" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char=")" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="(" context="qq_String(" attribute="String Delimiter"/>
|
|
<IncludeRules context="find_qq_StringCommon"/>
|
|
<RegExpr String="[^()\\${@&]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="qq_String[" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="]" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="[" context="qq_String[" attribute="String Delimiter"/>
|
|
<IncludeRules context="find_qq_StringCommon"/>
|
|
<RegExpr String="[^\[\]\\${@&]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="qq_String{" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="}" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="{" context="qq_String{" attribute="String Delimiter"/>
|
|
<IncludeRules context="find_qq_StringCommon"/>
|
|
<RegExpr String="[^{}\\$@&]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="qq_String<" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char=">" context="#pop" attribute="String Delimiter"/>
|
|
<DetectChar char="<" context="qq_String<" attribute="String Delimiter"/>
|
|
<IncludeRules context="find_qq_StringCommon"/>
|
|
<RegExpr String="[^<>\\${@&]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="qq_String«" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="»" context="#pop" attribute="String Delimiter"/>
|
|
<IncludeRules context="qq_String«_common"/>
|
|
</context>
|
|
<context name="qq_String«_term" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="»" context="#pop!postfix_op" attribute="String Delimiter"/>
|
|
<IncludeRules context="qq_String«_common"/>
|
|
</context>
|
|
<context name="qq_String«_common" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="«" context="qq_String«" attribute="String Delimiter"/>
|
|
<IncludeRules context="find_qq_StringCommon"/>
|
|
<RegExpr String="[^«»\\${@&]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="qq_String<<" attribute="String" lineEndContext="#stay">
|
|
<Detect2Chars char=">" char1=">" context="#pop" attribute="String Delimiter"/>
|
|
<IncludeRules context="qq_String<<_common"/>
|
|
</context>
|
|
<context name="qq_String<<_term" attribute="String" lineEndContext="#stay">
|
|
<Detect2Chars char=">" char1=">" context="#pop!postfix_op" attribute="String Delimiter"/>
|
|
<IncludeRules context="qq_String<<_common"/>
|
|
</context>
|
|
<context name="qq_String<<_common" attribute="String" lineEndContext="#stay">
|
|
<Detect2Chars char="<" char1="<" context="qq_String<<" attribute="String Delimiter"/>
|
|
<IncludeRules context="find_qq_StringCommon"/>
|
|
<RegExpr String="([^<>\\${@&]*|<(?!<)|>(?!>))" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="qq_StringAny" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="1" dynamic="1" context="#pop" attribute="String Delimiter"/>
|
|
<StringDetect String="\%1" dynamic="1" context="#stay" attribute="String Special Character"/>
|
|
<IncludeRules context="find_qq_StringCommon"/>
|
|
<RegExpr String="[^%1\\${@&]*" dynamic="1" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="qq_RawString" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char=""" context="#pop" attribute="String Delimiter"/>
|
|
<IncludeRules context="qq_RawString_common"/>
|
|
</context>
|
|
<context name="qq_RawString_term" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char=""" context="#pop!postfix_op" attribute="String Delimiter"/>
|
|
<IncludeRules context="qq_RawString_common"/>
|
|
</context>
|
|
<context name="qq_RawString_common" attribute="String" lineEndContext="#stay">
|
|
<IncludeRules context="find_qq_StringCommon"/>
|
|
<RegExpr String="[^\\"${@&]*" context="#stay" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="find_qq_StringCommon" attribute="String" lineEndContext="#stay">
|
|
<DetectChar char="\" context="qq_StringEscape" attribute="Operator" lookAhead="1"/>
|
|
<DetectChar char="{" context="qq_Interpolation" attribute="String (interpolated)"/>
|
|
<DetectChar char="$" context="qq_StringMaybeVar$" attribute="String" lookAhead="1"/>
|
|
<AnyChar String="@%" context="qq_StringMaybeVar" attribute="String" lookAhead="1"/>
|
|
<DetectChar char="&" context="qq_StringSigil" attribute="String" lookAhead="1"/>
|
|
</context>
|
|
|
|
<context name="qq_StringEscape" attribute="String Special Character" lineEndContext="#pop">
|
|
<Detect2Chars char="\" char1="q" context="#pop!q_QuotingForm" attribute="Operator"/>
|
|
<DetectChar char="\" context="#pop!qq_StringSpecialChar" attribute="String Special Character"/>
|
|
</context>
|
|
<context name="qq_StringSpecialChar" attribute="String Special Character" lineEndContext="#pop">
|
|
<IncludeRules context="SpecialCharPre"/>
|
|
<RegExpr String="[^xco]" context="#pop" attribute="String Special Character"/>
|
|
<IncludeRules context="SpecialCharPost"/>
|
|
</context>
|
|
|
|
<context name="qq_Interpolation" attribute="String (interpolated)" lineEndContext="#stay" fallthroughContext="term">
|
|
<DetectChar char="}" context="#pop" attribute="String (interpolated)"/>
|
|
<IncludeRules context="base"/>
|
|
</context>
|
|
|
|
<context name="qq_StringSigil" attribute="Function" lineEndContext="#stay">
|
|
<RegExpr String="&&ident;\(" context="#pop!FunctionParameters" attribute="Function"/>
|
|
<DetectChar char="&" context="#pop" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="qq_StringMaybeVar$" attribute="String" lineEndContext="#stay">
|
|
<RegExpr String="\$(?=[&twigils;]?&prefixdollarvarname;)" context="qq_InterpolationVar" attribute="Variable"/>
|
|
<DetectChar char="$" context="#pop" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="qq_StringMaybeVar" attribute="String" lineEndContext="#stay">
|
|
<RegExpr String="@\(\)|[%@]\$/|[@%]&ident;" context="qq_Interpolation1" attribute="Variable"/>
|
|
<AnyChar String="@%" context="#pop" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="qq_InterpolationVar" attribute="String" lineEndContext="#stay">
|
|
<AnyChar String="&twigils;" context="#stay" attribute="Twigil"/>
|
|
<RegExpr String="&dollarvarname;" context="#pop!qq_Interpolation1" attribute="Variable"/>
|
|
</context>
|
|
|
|
<context name="qq_Interpolation1" attribute="String" lineEndContext="#pop#pop" fallthroughContext="#pop#pop">
|
|
<DetectChar char="[" context="qq_InterpolationIndex" attribute="Function"/>
|
|
<DetectChar char="." context="qq_InterpolationFunction" attribute="Function" lookAhead="1"/>
|
|
</context>
|
|
|
|
<context name="qq_InterpolationIndex" attribute="String" lineEndContext="#stay" fallthroughContext="term">
|
|
<DetectChar char="]" context="#pop#pop#pop" attribute="Function"/>
|
|
<IncludeRules context="base"/>
|
|
</context>
|
|
|
|
<context name="qq_InterpolationFunction" attribute="String" lineEndContext="#stay">
|
|
<RegExpr String="(?:\.&ident;)*\.&ident;\(" context="#pop#pop#pop!FunctionParameters" attribute="Function"/>
|
|
<DetectChar char="." context="#pop#pop#pop" attribute="String"/>
|
|
</context>
|
|
|
|
<context name="FunctionParameters" attribute="String" lineEndContext="#stay" fallthroughContext="term">
|
|
<DetectChar char=")" context="#pop" attribute="Function"/>
|
|
<DetectChar char="(" context="FunctionParameters" attribute="Function"/>
|
|
<IncludeRules context="base"/>
|
|
</context>
|
|
|
|
|
|
<!-- Comment -->
|
|
|
|
<context name="StartComment" attribute="Comment" lineEndContext="#pop" fallthroughContext="SingleLineComment">
|
|
<DetectChar attribute="Comment" context="MultilineComment" char="`"/>
|
|
<AnyChar attribute="Pod Operator" context="MultilineComment" String="=|"/>
|
|
</context>
|
|
|
|
<context name="MultilineComment" attribute="Comment" lineEndContext="#pop#pop" fallthroughContext="#pop!SingleLineComment">
|
|
<!-- TODO a new rule is needed to find the corresponding closures -->
|
|
<StringDetect attribute="Comment" context="#pop#pop!MultilineComment(((" String="(((" beginRegion="comment"/>
|
|
<StringDetect attribute="Comment" context="#pop#pop!MultilineComment[[[" String="[[[" beginRegion="comment"/>
|
|
<StringDetect attribute="Comment" context="#pop#pop!MultilineComment{{{" String="{{{" beginRegion="comment"/>
|
|
<StringDetect attribute="Comment" context="#pop#pop!MultilineComment«««" String="«««" beginRegion="comment"/>
|
|
<StringDetect attribute="Comment" context="#pop#pop!MultilineComment<<<" String="<<<" beginRegion="comment"/>
|
|
<Detect2Chars attribute="Comment" context="#pop#pop!MultilineComment((" char="(" char1="(" beginRegion="comment"/>
|
|
<Detect2Chars attribute="Comment" context="#pop#pop!MultilineComment[[" char="[" char1="[" beginRegion="comment"/>
|
|
<Detect2Chars attribute="Comment" context="#pop#pop!MultilineComment{{" char="{" char1="{" beginRegion="comment"/>
|
|
<Detect2Chars attribute="Comment" context="#pop#pop!MultilineComment««" char="«" char1="«" beginRegion="comment"/>
|
|
<Detect2Chars attribute="Comment" context="#pop#pop!MultilineComment<<" char="<" char1="<" beginRegion="comment"/>
|
|
<DetectChar attribute="Comment" context="#pop#pop!MultilineComment(" char="(" beginRegion="comment"/>
|
|
<DetectChar attribute="Comment" context="#pop#pop!MultilineComment[" char="[" beginRegion="comment"/>
|
|
<DetectChar attribute="Comment" context="#pop#pop!MultilineComment{" char="{" beginRegion="comment"/>
|
|
<DetectChar attribute="Comment" context="#pop#pop!MultilineComment«" char="«" beginRegion="comment"/>
|
|
<DetectChar attribute="Comment" context="#pop#pop!MultilineComment<" char="<" beginRegion="comment"/>
|
|
<!-- etc -->
|
|
</context>
|
|
|
|
<context name="MultilineComment(((" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<StringDetect String=")))" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<StringDetect String="(((" attribute="Comment" context="MultilineComment(((" beginRegion="comment"/>
|
|
</context>
|
|
<context name="MultilineComment[[[" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<StringDetect String="]]]" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<StringDetect String="[[[" attribute="Comment" context="MultilineComment[[[" beginRegion="comment"/>
|
|
</context>
|
|
<context name="MultilineComment{{{" attribute="Comment" lineEndContext="#stay">
|
|
<StringDetect String="}}}" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<StringDetect String="{{{" attribute="Comment" context="MultilineComment{{{" beginRegion="comment"/>
|
|
<IncludeRules context="SingleLineComment"/>
|
|
</context>
|
|
<context name="MultilineComment«««" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<StringDetect String="»»»" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<StringDetect String="«««" attribute="Comment" context="MultilineComment«««" beginRegion="comment"/>
|
|
</context>
|
|
<context name="MultilineComment<<<" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<StringDetect String=">>>" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<StringDetect String="<<<" attribute="Comment" context="MultilineComment<<<" beginRegion="comment"/>
|
|
</context>
|
|
|
|
<context name="MultilineComment((" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<Detect2Chars char=")" char1=")" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<Detect2Chars char="(" char1="(" attribute="Comment" context="MultilineComment((" beginRegion="comment"/>
|
|
</context>
|
|
<context name="MultilineComment[[" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<Detect2Chars char="]" char1="]" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<Detect2Chars char="[" char1="[" attribute="Comment" context="MultilineComment[[" beginRegion="comment"/>
|
|
</context>
|
|
<context name="MultilineComment{{" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<Detect2Chars char="}" char1="}" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<Detect2Chars char="{" char1="{" attribute="Comment" context="MultilineComment{{" beginRegion="comment"/>
|
|
</context>
|
|
<context name="MultilineComment««" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<Detect2Chars char="»" char1="»" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<Detect2Chars char="«" char1="«" attribute="Comment" context="MultilineComment««" beginRegion="comment"/>
|
|
</context>
|
|
<context name="MultilineComment<<" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<Detect2Chars char=">" char1=">" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<Detect2Chars char="<" char1="<" attribute="Comment" context="MultilineComment<<" beginRegion="comment"/>
|
|
</context>
|
|
|
|
<context name="MultilineComment(" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<DetectChar char=")" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<DetectChar char="(" attribute="Comment" context="MultilineComment(" beginRegion="comment"/>
|
|
</context>
|
|
<context name="MultilineComment[" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<DetectChar char="]" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<DetectChar char="[" attribute="Comment" context="MultilineComment[" beginRegion="comment"/>
|
|
</context>
|
|
<context name="MultilineComment{" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<DetectChar char="}" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<DetectChar char="{" attribute="Comment" context="MultilineComment{" beginRegion="comment"/>
|
|
</context>
|
|
<context name="MultilineComment«" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<DetectChar char="»" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<DetectChar char="«" attribute="Comment" context="MultilineComment«" beginRegion="comment"/>
|
|
</context>
|
|
<context name="MultilineComment<" attribute="Comment" lineEndContext="#stay">
|
|
<IncludeRules context="SingleLineComment"/>
|
|
<DetectChar char=">" attribute="Comment" context="#pop" endRegion="comment"/>
|
|
<DetectChar char="<" attribute="Comment" context="MultilineComment<" beginRegion="comment"/>
|
|
</context>
|
|
|
|
<context name="SingleLineComment" attribute="Comment" lineEndContext="#pop#pop">
|
|
<DetectSpaces/>
|
|
<IncludeRules context="##Comments"/>
|
|
<DetectIdentifier/>
|
|
</context>
|
|
|
|
|
|
<!-- Error -->
|
|
|
|
<context name="Error" attribute="Error" lineEndContext="#pop"/>
|
|
|
|
</contexts>
|
|
|
|
<itemDatas>
|
|
<itemData name="Normal Text" defStyleNum="dsNormal"/>
|
|
<itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
|
|
<itemData name="Keyword Value" defStyleNum="dsKeyword" spellChecking="false"/>
|
|
<itemData name="Variable" defStyleNum="dsVariable" spellChecking="false"/>
|
|
<itemData name="Twigil" defStyleNum="dsAttribute" spellChecking="false"/>
|
|
<itemData name="Control Flow" defStyleNum="dsControlFlow" spellChecking="false"/>
|
|
<itemData name="Variable Storage" defStyleNum="dsKeyword" spellChecking="false" bold="1"/>
|
|
<itemData name="Property" defStyleNum="dsBuiltIn" spellChecking="false" italic="1"/>
|
|
<itemData name="Declare Routine" defStyleNum="dsBuiltIn" spellChecking="false"/>
|
|
<itemData name="Function" defStyleNum="dsFunction" spellChecking="false"/>
|
|
<itemData name="Symbol" defStyleNum="dsNormal" spellChecking="false"/>
|
|
<itemData name="Operator" defStyleNum="dsOperator" spellChecking="false"/>
|
|
<itemData name="Member Operator" defStyleNum="dsOperator" spellChecking="false"/>
|
|
<itemData name="Hyper Operator" defStyleNum="dsNormal" spellChecking="false"/>
|
|
<itemData name="Separator Symbol" defStyleNum="dsNormal" spellChecking="false"/>
|
|
<itemData name="Data Type" defStyleNum="dsDataType" spellChecking="false"/>
|
|
<itemData name="Attribute" defStyleNum="dsAttribute" spellChecking="false"/>
|
|
<itemData name="Number Suffix" defStyleNum="dsAttribute" 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="String" defStyleNum="dsString"/>
|
|
<itemData name="String Delimiter" defStyleNum="dsChar" spellChecking="false"/>
|
|
<itemData name="String (interpolated)" defStyleNum="dsString"/>
|
|
<itemData name="String Special Character" defStyleNum="dsChar"/>
|
|
<itemData name="Pattern" defStyleNum="dsOthers" spellChecking="false"/>
|
|
<itemData name="Pattern Delimiter" defStyleNum="dsVerbatimString" spellChecking="false"/>
|
|
<itemData name="Pattern Bracket" defStyleNum="dsExtension" spellChecking="false"/>
|
|
<itemData name="Pattern Meta Character" defStyleNum="dsChar" spellChecking="false"/>
|
|
<itemData name="Pattern Character Class" defStyleNum="dsBaseN" spellChecking="false"/>
|
|
<itemData name="Pattern Unicode Property" defStyleNum="dsBaseN" spellChecking="false"/>
|
|
<itemData name="Pattern Character" defStyleNum="dsSpecialString" spellChecking="false"/>
|
|
<itemData name="Pattern Modifier" defStyleNum="dsKeyword" spellChecking="false"/>
|
|
<itemData name="Pattern Quantifier" defStyleNum="dsControlFlow" spellChecking="false"/>
|
|
<itemData name="Pattern Control Flow" defStyleNum="dsControlFlow" spellChecking="false"/>
|
|
<itemData name="Pattern Special Character" defStyleNum="dsBuiltIn" spellChecking="false"/>
|
|
<itemData name="Pattern Named Capture" defStyleNum="dsAnnotation" spellChecking="false"/>
|
|
<itemData name="Comment" defStyleNum="dsComment"/>
|
|
<itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
|
|
<itemData name="Pod" defStyleNum="dsDocumentation" spellChecking="false"/>
|
|
<itemData name="Pod Paragraph" defStyleNum="dsDocumentation"/>
|
|
<itemData name="Pod Block" defStyleNum="dsRegionMarker" spellChecking="false"/>
|
|
<itemData name="Pod Typename" defStyleNum="dsAnnotation" spellChecking="false"/>
|
|
<itemData name="Pod Typename Value" defStyleNum="dsCommentVar" spellChecking="false"/>
|
|
<itemData name="Pod Unknown" defStyleNum="dsError" spellChecking="false"/>
|
|
<itemData name="Pod Operator" defStyleNum="dsOperator" spellChecking="false"/>
|
|
<itemData name="Pod Key" defStyleNum="dsAttribute" spellChecking="false"/>
|
|
<itemData name="Pod Config" defStyleNum="dsCommentVar" spellChecking="false"/>
|
|
<itemData name="Pod Bold" defStyleNum="dsDocumentation" bold="1"/>
|
|
<itemData name="Pod Italic" defStyleNum="dsDocumentation" italic="1"/>
|
|
<itemData name="Pod Underline" defStyleNum="dsDocumentation" underline="1"/>
|
|
<itemData name="Pod Link" defStyleNum="dsOthers" underline="1"/>
|
|
<itemData name="Pod Note" defStyleNum="dsInformation"/>
|
|
<itemData name="Pod Comment" defStyleNum="dsComment"/>
|
|
<itemData name="Pod Verbatim" defStyleNum="dsInformation" spellChecking="false"/>
|
|
<itemData name="Pod Unicode" defStyleNum="dsChar" spellChecking="false"/>
|
|
<itemData name="Pod Indexed Terms" defStyleNum="dsOthers" spellChecking="false"/>
|
|
</itemDatas>
|
|
</highlighting>
|
|
<general>
|
|
<comments>
|
|
<comment name="singleLine" start="#"/>
|
|
</comments>
|
|
<keywords casesensitive="1" weakDeliminator="-'"/>
|
|
</general>
|
|
</language>
|
|
<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->
|