Warning, /frameworks/syntax-highlighting/data/syntax/ruby.xml is written in an unsupported language. File is not indexed.

0001 <?xml version="1.0" encoding="UTF-8"?>
0002 <!DOCTYPE language>
0003 
0004 <!--
0005   Ruby syntax highlighting definition for Kate.
0006 
0007   Copyright (C) 2004  by Sebastian Vuorinen (sebastian dot vuorinen at helsinki dot fi)
0008   Copyright (C) 2004  by Stefan Lang (langstefan@gmx.at)
0009   Copyright (C) 2008  by Robin Pedersen (robinpeder@gmail.com)
0010   Copyright (C) 2011  by Miquel Sabaté (mikisabate@gmail.com)
0011 
0012   This library is free software; you can redistribute it and/or
0013   modify it under the terms of the GNU Library General Public
0014   License as published by the Free Software Foundation; either
0015   version 2 of the License, or (at your option) any later version.
0016 
0017   This library is distributed in the hope that it will be useful,
0018   but WITHOUT ANY WARRANTY; without even the implied warranty of
0019   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0020   Library General Public License for more details.
0021 
0022   You should have received a copy of the GNU Library General Public
0023   License along with this library; if not, write to the
0024   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0025   Boston, MA  02110-1301, USA.
0026 -->
0027 
0028 <!--
0029     TODO: Division after gdl contexts is interpreted as regexp
0030 -->
0031 
0032 <!-- Hold the "language" opening tag on a single line, as mentioned in "language.dtd". -->
0033 <language name="Ruby" section="Scripts"
0034           version="18" kateversion="5.0"
0035           extensions="*.rb;*.rjs;*.rxml;*.xml.erb;*.js.erb;*.rake;Rakefile;Gemfile;*.gemspec;Vagrantfile"
0036           mimetype="application/x-ruby"
0037           style="ruby" indenter="ruby"
0038           author="Stefan Lang (langstefan@gmx.at), Sebastian Vuorinen (sebastian.vuorinen@helsinki.fi), Robin Pedersen (robinpeder@gmail.com), Miquel Sabaté (mikisabate@gmail.com)" license="LGPLv2+">
0039 
0040         <highlighting>
0041 
0042                 <list name="keywords">
0043                         <item>BEGIN</item>
0044                         <item>END</item>
0045                         <item>and</item>
0046                         <item>begin</item>
0047                         <item>break</item>
0048                         <item>case</item>
0049                         <item>defined?</item>
0050                         <item>do</item>
0051                         <item>else</item>
0052                         <item>elsif</item>
0053                         <item>end</item>
0054                         <item>ensure</item>
0055                         <item>for</item>
0056                         <item>if</item>
0057                         <item>in</item>
0058                         <item>next</item>
0059                         <item>not</item>
0060                         <item>or</item>
0061                         <item>redo</item>
0062                         <item>rescue</item>
0063                         <item>retry</item>
0064                         <item>return</item>
0065                         <item>then</item>
0066                         <item>unless</item>
0067                         <item>until</item>
0068                         <item>when</item>
0069                         <item>yield</item>
0070                 </list>
0071 
0072                 <list name="access-control">
0073                         <item>private_class_method</item>
0074                         <item>private</item>
0075                         <item>protected</item>
0076                         <item>public_class_method</item>
0077                         <item>public</item>
0078                 </list>
0079 
0080                 <list name="attribute-definitions">
0081                         <item>attr_reader</item>
0082                         <item>attr_writer</item>
0083                         <item>attr_accessor</item>
0084                 </list>
0085 
0086                 <list name="definitions">
0087                         <item>alias</item>
0088                         <item>module</item>
0089                         <item>class</item>
0090                         <item>def</item>
0091                         <item>undef</item>
0092                 </list>
0093 
0094                 <list name="pseudo-variables">
0095                         <item>self</item>
0096                         <item>super</item>
0097                         <item>nil</item>
0098                         <item>false</item>
0099                         <item>true</item>
0100                         <item>caller</item>
0101                         <item>__FILE__</item>
0102                         <item>__LINE__</item>
0103                 </list>
0104 
0105                 <list name="default-globals">
0106                         <item>$stdout</item>
0107                         <item>$defout</item>
0108                         <item>$stderr</item>
0109                         <item>$deferr</item>
0110                         <item>$stdin</item>
0111                 </list>
0112 
0113                 <!-- Kernel module methods.
0114                         NOTE: Methods ending in ? or !
0115                                 are included below as regexes.
0116                 -->
0117                 <list name="kernel-methods">
0118                         <!-- backquote ` -->
0119                         <item>abort</item>
0120                         <item>at_exit</item>
0121                         <item>autoload</item>
0122                         <item>autoload?</item>
0123                         <item>binding</item>
0124                         <item>block_given?</item>
0125                         <item>callcc</item>
0126                         <item>caller</item>
0127                         <item>catch</item>
0128                         <item>chomp</item>
0129                         <item>chomp!</item>
0130                         <item>chop</item>
0131                         <item>chop!</item>
0132                         <item>eval</item>
0133                         <item>exec</item>
0134                         <item>exit</item>
0135                         <item>exit!</item>
0136                         <item>fail</item>
0137                         <item>fork</item>
0138                         <item>format</item>
0139                         <item>getc</item>
0140                         <item>gets</item>
0141                         <item>global_variables</item>
0142                         <item>gsub</item>
0143                         <item>gsub!</item>
0144                         <item>iterator?</item>
0145                         <item>lambda</item>
0146                         <item>load</item>
0147                         <item>local_variables</item>
0148                         <item>loop</item>
0149                         <item>method_missing</item>
0150                         <item>open</item>
0151                         <item>p</item>
0152                         <item>print</item>
0153                         <item>printf</item>
0154                         <item>proc</item>
0155                         <item>putc</item>
0156                         <item>puts</item>
0157                         <item>raise</item>
0158                         <item>rand</item>
0159                         <item>readline</item>
0160                         <item>readlines</item>
0161                         <item>require</item>
0162                         <item>require_relative</item>
0163                         <item>scan</item>
0164                         <item>select</item>
0165                         <item>set_trace_func</item>
0166                         <item>sleep</item>
0167                         <item>split</item>
0168                         <item>sprintf</item>
0169                         <item>srand</item>
0170                         <item>sub</item>
0171                         <item>sub!</item>
0172                         <item>syscall</item>
0173                         <item>system</item>
0174                         <item>test</item>
0175                         <item>throw</item>
0176                         <item>trace_var</item>
0177                         <item>trap</item>
0178                         <item>untrace_var</item>
0179                         <item>warn</item>
0180                 </list>
0181 
0182                 <list name="mixin-methods">
0183                         <item>extend</item>
0184                         <item>include</item>
0185                         <item>prepend</item>
0186                         <item>refine</item>
0187                         <item>using</item>
0188                 </list>
0189 
0190                 <contexts>
0191                         <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
0192                                 <!-- ruby ignores newline after \ -->
0193                                 <LineContinue attribute="Normal Text" context="Line Continue"/>
0194 
0195                                 <!-- __END__ token on own line. -->
0196                                 <RegExpr attribute="Keyword" String="^__END__$" context="DATA" column="0"/>
0197 
0198                                 <!-- "shebang" line -->
0199                                 <RegExpr attribute="Keyword" String="^#!\/.*" context="#stay" column="0"/>
0200 
0201                                 <!-- "def" - "end" blocks -->
0202                                 <!-- check for statement modifiers with regexes -->
0203                                 <DetectChar attribute="Operator" char="{" context="Find closing block brace" beginRegion="def block"/>
0204                                 <DetectChar attribute="Delimiter" char="}" context="check_div_1" endRegion="def block"/>
0205                                 <RegExpr attribute="Keyword" String="[=([]\s*(if|unless|while|until)\b|(while|until)\b(?!.*\bdo\b)|\;\s*(while|until)\b(?!.*\bdo\b)|\;\s*(if|unless)\b" context="#stay" beginRegion="def block"/>
0206                                 <RegExpr attribute="Keyword" String="(if|unless)\b" context="#stay" beginRegion="def block" firstNonSpace="true"/>
0207                                 <WordDetect attribute="Keyword" String="class" context="no_heredoc" beginRegion="def block"/>
0208                                 <WordDetect attribute="Keyword" String="module" context="#stay" beginRegion="def block"/>
0209                                 <WordDetect attribute="Keyword" String="begin" context="#stay" beginRegion="def block"/>
0210                                 <RegExpr attribute="Keyword" String="\bfor\b(?!.*\bdo\b)" context="#stay" beginRegion="def block"/>
0211                                 <WordDetect attribute="Keyword" String="case" context="#stay" beginRegion="def block"/>
0212                                 <WordDetect attribute="Keyword" String="do" context="#stay" beginRegion="def block"/>
0213                                 <WordDetect attribute="Keyword" String="def" context="#stay" beginRegion="def block"/>
0214                                 <WordDetect attribute="Keyword" String="end" context="#stay" endRegion="def block"/>
0215                                 <!-- elsif/else close the current block and start a new one -->
0216                                 <RegExpr attribute="Keyword" String="\b(else|elsif|rescue|ensure)\b" context="#stay" endRegion="def block" beginRegion="def block"/>
0217 
0218                                 <StringDetect attribute="Operator" String="..." context="#stay"/>
0219                                 <Detect2Chars attribute="Operator" char="." char1="." context="#stay"/>
0220 
0221                                 <!-- marks a message (being sent, not defined) -->
0222                                 <RegExpr attribute="Message" String="\.[_a-z][_a-zA-Z0-9]*(\?|\!|\b)" context="check_div_2"/>
0223 
0224                                 <!-- Check for "ASCII code operator". e.g.: ?a -->
0225                                 <RegExpr attribute="Dec" String="\s\?(\\M\-)?(\\C\-)?\\?\S" context="check_div_1"/>
0226 
0227                                 <keyword attribute="Keyword" String="keywords" context="#stay"/>
0228                                 <keyword attribute="Attribute Definition" String="attribute-definitions"  context="check_div_2"/>
0229                                 <keyword attribute="Access Control" String="access-control" context="check_div_2"/>
0230                                 <keyword attribute="Definition" String="definitions"  context="#stay" />
0231                                 <keyword attribute="Pseudo variable" String="pseudo-variables"  context="check_div_1"/>
0232                                 <keyword attribute="Default globals" String="default-globals" context="check_div_2"/>
0233                                 <keyword attribute="Kernel methods" String="kernel-methods" context="check_div_2"/>
0234                                 <keyword attribute="Module mixin methods" String="mixin-methods" context="check_div_2"/>
0235 
0236                                 <!-- (global) vars starting with $
0237                                                 Match them before $_.
0238                                 -->
0239                                 <RegExpr attribute="Global Variable" String="\$[a-zA-Z_0-9]+|\$\-[a-zA-Z_]\b" context="check_div_1"/>
0240                                 <!-- special-character globals -->
0241                                 <RegExpr attribute="Default globals" String="\$[\d_*`+@;,.~=\!\$:?'/\\\-\&amp;&quot;&gt;&lt;]" context="check_div_1"/>
0242                                 <RegExpr attribute="Global Constant" String="\b[_A-Z]+[A-Z_0-9]+\b" context="check_div_2"/>
0243                                 <!-- Generally a module or class name like "File", "MyModule_1", .. -->
0244                                 <RegExpr attribute="Constant" String="\b[A-Z]+_*([0-9]|[a-z])[_a-zA-Z0-9]*\b" context="check_div_2"/>
0245 
0246                                 <!-- Numeric values. Note that we have to allow underscores between two digits (thus the creepy regular expressions). -->
0247                                 <RegExpr attribute="Hex" String="\b\-?0[xX]([0-9a-fA-F]|_[0-9a-fA-F])+" context="check_div_1"/>
0248                                 <RegExpr attribute="Bin" String="\b\-?0[bB]([01]|_[01])+" context="check_div_1"/>
0249                                 <RegExpr attribute="Octal" String="\b\-?0[1-7]([0-7]|_[0-7])*" context="check_div_1"/>
0250                                 <RegExpr attribute="Float" String="\b\-?[0-9]([0-9]|_[0-9])*\.[0-9]([0-9]|_[0-9])*([eE]\-?[1-9]([0-9]|_[0-9])*(\.[0-9]*)?)?" context="check_div_1"/>
0251                                 <RegExpr attribute="Dec" String="\b\-?[1-9]([0-9]|_[0-9])*\b" context="check_div_1"/>
0252                                 <Int attribute="Dec" context="check_div_1"/>
0253                                 <HlCChar attribute="Char" context="check_div_1"/>
0254 
0255                                 <!-- Check for =begin before assignment operator. -->
0256                                 <RegExpr attribute="Blockcomment" String="^=begin(?:\s|$)" context="Embedded documentation" beginRegion="comment block" column="0"/>
0257 
0258                                 <!-- recognize the beginning of a HEREDOC
0259                                         This uses new features in Kate 2.3 and later
0260 
0261                                         There is no other chance of keeping heredoc apart from the
0262                                         push operator '<<' than requiring to put space between the operator
0263                                         and the string.
0264                                 -->
0265                                 <RegExpr attribute="Operator" context="find_indented_heredoc" String="\s*&lt;&lt;[-~](?=\w+|[&quot;'`])" beginRegion="HereDocument" />
0266                                 <RegExpr attribute="Operator" context="find_heredoc" String="\s*&lt;&lt;(?=\w+|[&quot;'`])" beginRegion="HereDocument" />
0267 
0268                                 <DetectChar attribute="Operator" char="." context="#stay"/>
0269                                 <Detect2Chars attribute="Operator" char="&amp;" char1="&amp;" context="#stay"/>
0270                                 <Detect2Chars attribute="Operator" char="|" char1="|" context="#stay"/>
0271                                 <!-- \s! is regexp hack -->
0272                                 <RegExpr attribute="Operator" String="\s[\?\:\%]\s|[|&amp;&lt;&gt;\^\+*~\-=]+|\s!|/=\s" context="#stay"/>
0273                                 <Detect2Chars attribute="Operator" char="%" char1="=" context="#stay"/>
0274                                 <Detect2Chars attribute="Operator" char=":" char1=":" context="Member Access"/>
0275 
0276                                 <RegExpr attribute="Symbol" String=":(@{1,2}|\$)?[a-zA-Z_][a-zA-Z0-9_]*[=?!]?|:\[\]=?" context="check_div_1"/>
0277 
0278                                 <!-- Do not send to "check_div_1" context!:
0279                                      after detecting these rules (": ") there can be a regular expression (see bug: #361875) -->
0280                                 <RegExpr attribute="Symbol" String="(@{1,2}|\$)?[a-zA-Z_][a-zA-Z0-9_]*[=?!]?: |\[\]=?: " context="#stay"/>
0281 
0282                                 <DetectChar attribute="String" char="&quot;" context="Quoted String"/>
0283                                 <DetectChar attribute="Raw String" char="'" context="Apostrophed String"/>
0284                                 <DetectChar attribute="Command" char="`" context="Command String"/>
0285 
0286                                 <Detect2Chars attribute="Normal Text" char="?" char1="#" context="#stay"/>
0287 
0288                                 <RegExpr attribute="Comment" String="^#\s*BEGIN.*$"  context="#stay" beginRegion="marker" column="0"/>
0289                                 <RegExpr attribute="Comment" String="^#\s*END.*$"  context="#stay" endRegion="marker" column="0"/>
0290                                 <DetectChar attribute="Comment" char="#" context="General Comment"/>
0291 
0292                                 <DetectChar attribute="Delimiter" char="["  context="#stay"/>
0293                                 <DetectChar attribute="Delimiter" char="]"  context="check_div_1"/>
0294 
0295                                 <RegExpr attribute="Instance Variable" String="@[a-zA-Z_0-9]+" context="check_div_1"/>
0296                                 <RegExpr attribute="Class Variable" String="@@[a-zA-Z_0-9]+" context="check_div_1"/>
0297 
0298                                 <!-- handle the different regular expression formats -->
0299                                 <DetectChar attribute="Regular Expression" char="/" context="RegEx 1"/>
0300 
0301                                 <!-- recognize the beginning of a general delimited input format -->
0302                                 <!-- this moves to the next context to separate out the exact nature of the GDL input -->
0303                                 <RegExpr attribute="GDL input" context="find_gdl_input" String="\s*[%](?=[QqxwW]?[^\s])" beginRegion="GdlInput" />
0304 
0305                                 <DetectChar attribute="Normal Text" char=")" context="check_div_1"/>
0306                                 <DetectIdentifier attribute="Normal Text" context="check_div_2"/>
0307 
0308                         </context>
0309 
0310                         <!-- In the following contexts, a slash character ('/') is a division operator -->
0311                         <!-- Everywhere else, it's a regular expression delimiter -->
0312 
0313                         <!-- A slash is always a division operator, even if preceeded by whitespace -->
0314                         <context name="check_div_1" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop" lineEndContext="#pop">
0315                                 <DetectSpaces attribute="Normal Text" context="#stay"/>
0316                                 <AnyChar attribute="Operator" String="/%" context="#pop"/>
0317                         </context>
0318 
0319                         <!-- Same as check_div_1, but with double pop to exit the surrounding context -->
0320                         <context name="check_div_1_pop" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop#pop" lineEndContext="#pop#pop">
0321                                 <DetectSpaces attribute="Normal Text" context="#stay"/>
0322                                 <AnyChar attribute="Operator" String="/%" context="#pop#pop"/>
0323                         </context>
0324 
0325                         <!-- A slash is division operator if it's the first character, or if preceeded and followed by whitespace -->
0326                         <context name="check_div_2" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop" lineEndContext="#pop">
0327                                 <AnyChar attribute="Operator" String="/%" context="#pop"/>
0328                                 <DetectSpaces attribute="Normal Text" context="check_div_2_internal"/>
0329                         </context>
0330 
0331                         <!-- Internal context used by check_div_2 -->
0332                         <context name="check_div_2_internal" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop#pop" lineEndContext="#pop#pop">
0333 <!--                            <DetectChar attribute="Operator" char="%" context="#pop#pop"/> -->
0334                                 <RegExpr attribute="Operator" String="[/%](?=\s)" context="#pop#pop"/>
0335                         </context>
0336 
0337                         <!-- Same as check_div_2, but with double pop to exit the surrounding context -->
0338                         <context name="check_div_2_pop" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop#pop" lineEndContext="#pop#pop">
0339                                 <AnyChar attribute="Operator" String="/%" context="#pop#pop"/>
0340                                 <DetectSpaces attribute="Normal Text" context="check_div_2_pop_internal"/>
0341                         </context>
0342 
0343                         <!-- Internal context used by check_div_2_pop -->
0344                         <context name="check_div_2_pop_internal" attribute="Normal Text" fallthrough="true" fallthroughContext="#pop#pop#pop" lineEndContext="#pop#pop#pop">
0345                                 <DetectChar attribute="Operator" char="%" context="#pop#pop#pop"/>
0346                                 <RegExpr attribute="Operator" String="/(?=\s)" context="#pop#pop#pop"/>
0347                         </context>
0348 
0349                         <context name="Line Continue" attribute="Normal Text" lineEndContext="#pop">
0350                                 <RegExpr attribute="Keyword" String="(while|until)\b(?!.*\bdo\b)|(if|unless)\b" context="#stay" firstNonSpace="true"/>
0351                                 <IncludeRules context="Normal"/>
0352                         </context>
0353 
0354                         <context name="Find closing block brace" attribute="Normal Text" lineEndContext="#stay">
0355                                 <DetectChar attribute="Operator" char="}" context="check_div_1_pop" endRegion="def block"/>
0356                                 <IncludeRules context="Normal"/>
0357                         </context>
0358 
0359                         <context name="Quoted String" attribute="String" lineEndContext="#stay">
0360                                 <Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
0361                                 <Detect2Chars attribute="String" char="\" char1="&quot;" context="#stay"/>
0362                                 <RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
0363                                 <Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
0364                                 <Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
0365                                 <DetectChar char="&quot;" attribute="String" context="check_div_1_pop"/>
0366                         </context>
0367 
0368                         <context name="Apostrophed String" attribute="Raw String" lineEndContext="#stay">
0369                                 <Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
0370                                 <Detect2Chars attribute="String" char="\" char1="'" context="#stay"/>
0371                                 <DetectChar char="'" attribute="Raw String" context="check_div_1_pop"/>
0372                         </context>
0373 
0374                         <context name="Command String" attribute="Command" lineEndContext="#stay">
0375                                 <Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
0376                                 <Detect2Chars attribute="String" char="\" char1="`" context="#stay"/>
0377                                 <RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
0378                                 <Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
0379                                 <Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
0380                                 <DetectChar char="`" attribute="Command" context="check_div_1_pop"/>
0381                         </context>
0382 
0383                         <context name="Embedded documentation" attribute="Blockcomment" lineEndContext="#stay">
0384                                 <RegExpr attribute="Comment" String="^=end(?:\s.*|$)" context="#pop" endRegion="comment block" column="0"/>
0385                                 <DetectSpaces />
0386                                 <IncludeRules context="##Comments" />
0387                         </context>
0388 
0389                         <context name="RegEx 1" attribute="Regular Expression" lineEndContext="#stay">
0390                                 <Detect2Chars attribute="Regular Expression" char="\" char1="/" context="#stay"/>
0391                                 <RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
0392                                 <Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
0393                                 <Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
0394                                 <RegExpr attribute="Regular Expression" String="/[uiomxn]*" context="check_div_1_pop"/>
0395                         </context>
0396 
0397                         <!-- Substitutions can be nested -->
0398                         <context name="Subst" attribute="Normal Text" lineEndContext="#stay">
0399                                 <DetectChar attribute="Substitution" char="}" context="#pop"/>
0400                                 <!-- Highlight substitution as code. -->
0401                                 <IncludeRules context="Normal"/>
0402                         </context>
0403 
0404                         <context name="Short Subst" attribute="Substitution" lineEndContext="#pop">
0405                                 <!-- Check for e.g.: "#@var#@@xy" -->
0406                                 <RegExpr attribute="Substitution" String="#@{1,2}" context="#stay"/>
0407                                 <Detect2Chars attribute="Substitution" char="#" char1="$" context="#stay"/>
0408                                 <RegExpr attribute="Substitution" String="\w(?!\w)" context="#pop"/>
0409                         </context>
0410 
0411                         <!-- This handles access of nested module classes and class methods -->
0412                         <context name="Member Access" attribute="Member" lineEndContext="#pop">
0413                                 <!-- marks a message (being sent, not defined) -->
0414                                 <RegExpr attribute="Message" String="\.?[_a-z]\w*(\?|\!)?(?=[^\w\d\.\:])" context="check_div_2_pop"/>
0415                                 <RegExpr attribute="Message" String="\.?[_a-z]\w*(\?|\!)?" context="#stay"/>
0416                                 <RegExpr attribute="Constant" String="[A-Z]+_*(\d|[a-z])\w*(?=[^\w\d\.\:])" context="check_div_2_pop"/>
0417                                 <RegExpr attribute="Constant" String="[A-Z]+_*([0-9]|[a-z])\w*" context="#stay"/>
0418                                 <RegExpr attribute="Constant Value" String="[_A-Z][_A-Z0-9]*(?=[^\w\d\.\:])" context="check_div_2_pop"/>
0419                                 <RegExpr attribute="Constant Value" String="[_A-Z][_A-Z0-9]*" context="#stay"/>
0420                                 <Detect2Chars attribute="Operator" char=":" char1=":" context="#stay"/>
0421                                 <DetectChar attribute="Member" char="." context="#stay"/>
0422 
0423                                 <AnyChar attribute="Operator" String="=+-*/%|&amp;[]{}~" context="#pop"/>
0424                                 <DetectChar attribute="Comment" char="#" context="#pop"/>
0425                                 <AnyChar attribute="Normal Text" String="()\" context="#pop"/>
0426                                 <RegExpr attribute="Member" String="\W" context="#pop"/>
0427                         </context>
0428 
0429                         <context name="General Comment" attribute="Comment" lineEndContext="#pop">
0430                                 <DetectSpaces />
0431                                 <IncludeRules context="##Comments" />
0432                         </context>
0433 
0434                         <!-- HEREDOC support
0435                                 The contexts below support both normal and indented heredocs
0436                          -->
0437                         <!-- here we markup the heredoc markers -->
0438                         <context name="find_heredoc" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
0439                                 <RegExpr attribute="Keyword" context="apostrophed_normal_heredoc" String="'(\w+)'" />
0440                                 <RegExpr attribute="Keyword" context="normal_heredoc" String="(?|(\w+)|&quot;(\w+)&quot;|`(\w+)`)" />
0441                         </context>
0442                         <context name="find_indented_heredoc" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
0443                                 <RegExpr attribute="Keyword" context="apostrophed_indented_heredoc" String="'(\w+)'" />
0444                                 <RegExpr attribute="Keyword" context="indented_heredoc" String="(?|(\w+)|&quot;(\w+)&quot;|`(\w+)`)" />
0445                         </context>
0446                         <!-- these are the real heredoc contexts -->
0447                         <context name="indented_heredoc" attribute="Here Document" lineEndContext="#stay" dynamic="true">
0448                                 <RegExpr attribute="Keyword" context="#pop#pop" String="%1$" dynamic="true" endRegion="HereDocument" firstNonSpace="true"/>
0449                                 <IncludeRules context="heredoc_rules" />
0450                         </context>
0451                         <context name="apostrophed_indented_heredoc" attribute="Here Document" lineEndContext="#stay" dynamic="true">
0452                                 <RegExpr attribute="Keyword" context="#pop#pop" String="%1$" dynamic="true" endRegion="HereDocument" firstNonSpace="true"/>
0453                         </context>
0454 
0455                         <context name="normal_heredoc" attribute="Here Document" lineEndContext="#stay" dynamic="true">
0456                                 <RegExpr attribute="Keyword" context="#pop#pop" String="^%1$" dynamic="true" endRegion="HereDocument" column="0"/>
0457                                 <IncludeRules context="heredoc_rules" />
0458                         </context>
0459                         <context name="apostrophed_normal_heredoc" attribute="Here Document" lineEndContext="#stay" dynamic="true">
0460                                 <RegExpr attribute="Keyword" context="#pop#pop" String="^%1$" dynamic="true" endRegion="HereDocument" column="0"/>
0461                         </context>
0462 
0463                         <!-- rules for heredoc types -->
0464                         <context name="heredoc_rules" attribute="Normal Text" lineEndContext="#stay">
0465                                 <RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
0466                                 <Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
0467                                 <Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
0468                         </context>
0469 
0470                         <!-- avoid highlighting heredoc markers, for example, in singleton class definition (see bug: #358273) -->
0471                         <context name="no_heredoc" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
0472                                 <DetectSpaces />
0473                                 <Detect2Chars attribute="Operator" char="&lt;" char1="&lt;" context="#pop"/>
0474                                 <!-- comments -->
0475                                 <RegExpr attribute="Comment" String="^#\s*BEGIN.*$"  context="#stay" beginRegion="marker" column="0"/>
0476                                 <RegExpr attribute="Comment" String="^#\s*END.*$"  context="#stay" endRegion="marker" column="0"/>
0477                                 <DetectChar attribute="Comment" char="#" context="General Comment"/>
0478                         </context>
0479 
0480                         <!-- General delimited input support
0481                                 The contexts below handle the various gdl formats
0482                          -->
0483                         <context name="find_gdl_input" attribute="Normal Text" lineEndContext="#pop">
0484 
0485                                 <!-- handle token arrays -->
0486                                 <Detect2Chars attribute="GDL input" context="gdl_token_array_1" char="w" char1="(" />
0487                                 <Detect2Chars attribute="GDL input" context="gdl_token_array_2" char="w" char1="{" />
0488                                 <Detect2Chars attribute="GDL input" context="gdl_token_array_3" char="w" char1="[" />
0489                                 <Detect2Chars attribute="GDL input" context="gdl_token_array_4" char="w" char1="&lt;" />
0490                                 <!-- then we handle the 'any char' format -->
0491                                 <RegExpr attribute="GDL input" context="gdl_token_array_5" String="w([^\s\w])" />
0492 
0493                                 <!-- handle token arrays -->
0494                                 <Detect2Chars attribute="GDL input" context="gdl_token_array_1" char="W" char1="(" />
0495                                 <Detect2Chars attribute="GDL input" context="gdl_token_array_2" char="W" char1="{" />
0496                                 <Detect2Chars attribute="GDL input" context="gdl_token_array_3" char="W" char1="[" />
0497                                 <Detect2Chars attribute="GDL input" context="gdl_token_array_4" char="W" char1="&lt;" />
0498                                 <!-- then we handle the 'any char' format -->
0499                                 <RegExpr attribute="GDL input" context="gdl_token_array_5" String="W([^\s\w])" />
0500 
0501                                 <!-- handle apostrophed strings -->
0502                                 <Detect2Chars attribute="GDL input" context="gdl_apostrophed_1" char="q" char1="(" />
0503                                 <Detect2Chars attribute="GDL input" context="gdl_apostrophed_2" char="q" char1="{" />
0504                                 <Detect2Chars attribute="GDL input" context="gdl_apostrophed_3" char="q" char1="[" />
0505                                 <Detect2Chars attribute="GDL input" context="gdl_apostrophed_4" char="q" char1="&lt;" />
0506                                 <!-- then we handle the 'any char' format -->
0507                                 <RegExpr attribute="GDL input" context="gdl_apostrophed_5" String="q([^\s\w])" />
0508 
0509                                 <!-- handle shell commands -->
0510                                 <Detect2Chars attribute="GDL input" context="gdl_shell_command_1" char="x" char1="(" />
0511                                 <Detect2Chars attribute="GDL input" context="gdl_shell_command_2" char="x" char1="{" />
0512                                 <Detect2Chars attribute="GDL input" context="gdl_shell_command_3" char="x" char1="[" />
0513                                 <Detect2Chars attribute="GDL input" context="gdl_shell_command_4" char="x" char1="&lt;" />
0514                                 <!-- then we handle the 'any char' format -->
0515                                 <RegExpr attribute="GDL input" context="gdl_shell_command_5" String="x([^\s\w])" />
0516 
0517                                 <!-- handle regular expressions -->
0518                                 <Detect2Chars attribute="GDL input" context="gdl_regexpr_1" char="r" char1="(" />
0519                                 <Detect2Chars attribute="GDL input" context="gdl_regexpr_2" char="r" char1="{" />
0520                                 <Detect2Chars attribute="GDL input" context="gdl_regexpr_3" char="r" char1="[" />
0521                                 <Detect2Chars attribute="GDL input" context="gdl_regexpr_4" char="r" char1="&lt;" />
0522                                 <!-- then we handle the 'any char' format -->
0523                                 <RegExpr attribute="GDL input" context="gdl_regexpr_5" String="r([^\s\w])" />
0524 
0525                                 <!-- handle double-quoted strings -->
0526                                 <!--
0527                                           be careful to make this the last GDL ruleset, because the rule for
0528                                           the short form %?foo? will otherwise catch any of the other formats
0529                                 -->
0530                                 <Detect2Chars attribute="GDL input" context="gdl_dq_string_1" char="Q" char1="(" />
0531                                 <Detect2Chars attribute="GDL input" context="gdl_dq_string_2" char="Q" char1="{" />
0532                                 <Detect2Chars attribute="GDL input" context="gdl_dq_string_3" char="Q" char1="[" />
0533                                 <Detect2Chars attribute="GDL input" context="gdl_dq_string_4" char="Q" char1="&lt;" />
0534                                 <DetectChar attribute="GDL input" context="gdl_dq_string_1" char="(" />
0535                                 <DetectChar attribute="GDL input" context="gdl_dq_string_2" char="{" />
0536                                 <DetectChar attribute="GDL input" context="gdl_dq_string_3" char="[" />
0537                                 <DetectChar attribute="GDL input" context="gdl_dq_string_4" char="&lt;" />
0538                                 <!-- then we handle the 'any char' format -->
0539                                 <RegExpr attribute="GDL input" context="gdl_dq_string_5" String="Q?([^\s\w])" />
0540 
0541                         </context>
0542                         <!-- double-quoted string specific contexts follow -->
0543                         <context name="gdl_dq_string_1" attribute="String" lineEndContext="#stay" >
0544                                 <IncludeRules context="dq_string_rules" />
0545                                 <Detect2Chars attribute="String" char="\" char1=")" context="#stay"/>
0546                                 <DetectChar attribute="String" context="gdl_dq_string_1_nested" char="(" />
0547                                 <DetectChar attribute="GDL input" context="#pop#pop" char=")" endRegion="GdlInput" />
0548                         </context>
0549                         <context name="gdl_dq_string_1_nested" attribute="String" lineEndContext="#stay" >
0550                                 <IncludeRules context="dq_string_rules" />
0551                                 <DetectChar attribute="String" context="gdl_dq_string_1_nested" char="(" />
0552                                 <DetectChar attribute="String" context="#pop" char=")" />
0553                         </context>
0554                         <!-- note that here substitution should win over nesting -->
0555                         <context name="gdl_dq_string_2" attribute="String" lineEndContext="#stay" >
0556                                 <IncludeRules context="dq_string_rules" />
0557                                 <Detect2Chars attribute="String" char="\" char1="}" context="#stay"/>
0558                                 <DetectChar attribute="GDL input" context="#pop#pop" char="}" endRegion="GdlInput" />
0559                                 <DetectChar attribute="String" context="gdl_dq_string_2_nested" char="{" />
0560                         </context>
0561                         <context name="gdl_dq_string_2_nested" attribute="String" lineEndContext="#stay" >
0562                                 <DetectChar attribute="String" context="gdl_dq_string_2_nested" char="{" />
0563                                 <DetectChar attribute="String" context="#pop" char="}" />
0564                                 <IncludeRules context="dq_string_rules" />
0565                         </context>
0566 
0567                         <context name="gdl_dq_string_3" attribute="String" lineEndContext="#stay" >
0568                                 <IncludeRules context="dq_string_rules" />
0569                                 <Detect2Chars attribute="String" char="\" char1="]" context="#stay"/>
0570                                 <DetectChar attribute="String" context="gdl_dq_string_3_nested" char="[" />
0571                                 <DetectChar attribute="GDL input" context="#pop#pop" char="]" endRegion="GdlInput" />
0572                         </context>
0573                         <context name="gdl_dq_string_3_nested" attribute="String" lineEndContext="#stay" >
0574                                 <DetectChar attribute="String" context="gdl_dq_string_3_nested" char="[" />
0575                                 <DetectChar attribute="String" context="#pop" char="]" />
0576                                 <IncludeRules context="dq_string_rules" />
0577                         </context>
0578 
0579                         <context name="gdl_dq_string_4" attribute="String" lineEndContext="#stay" >
0580                                 <IncludeRules context="dq_string_rules" />
0581                                 <Detect2Chars attribute="String" char="\" char1="&gt;" context="#stay"/>
0582                                 <DetectChar attribute="String" context="gdl_dq_string_4_nested" char="&lt;" />
0583                                 <DetectChar attribute="GDL input" context="#pop#pop" char="&gt;" endRegion="GdlInput" />
0584                         </context>
0585                         <context name="gdl_dq_string_4_nested" attribute="String" lineEndContext="#stay" >
0586                                 <DetectChar attribute="String" context="gdl_dq_string_4_nested" char="&lt;" />
0587                                 <DetectChar attribute="String" context="#pop" char="&gt;" />
0588                                 <IncludeRules context="dq_string_rules" />
0589                         </context>
0590 
0591                         <!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
0592                                 delimiter character
0593                          -->
0594                         <context name="gdl_dq_string_5" attribute="String" lineEndContext="#stay" dynamic="true">
0595                                 <IncludeRules context="dq_string_rules" />
0596                                 <StringDetect attribute="String" String="\%1" context="#stay" dynamic="true" />
0597                                 <RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
0598                         </context>
0599                         <!-- rules to be included in all dq_string contexts -->
0600                         <context name="dq_string_rules" attribute="String" lineEndContext="#stay" >
0601                                 <Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
0602                                 <RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
0603                                 <Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
0604                                 <Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
0605                         </context>
0606 
0607                         <!-- token array specific contexts -->
0608 
0609                         <context name="gdl_token_array_1" attribute="String" lineEndContext="#stay" >
0610                                 <IncludeRules context="token_array_rules" />
0611                                 <Detect2Chars attribute="String" char="\" char1=")" context="#stay"/>
0612                                 <DetectChar attribute="String" context="gdl_token_array_1_nested" char="(" />
0613                                 <DetectChar attribute="GDL input" context="#pop#pop" char=")" endRegion="GdlInput" />
0614                         </context>
0615                         <context name="gdl_token_array_1_nested" attribute="String" lineEndContext="#stay" >
0616                                 <IncludeRules context="token_array_rules" />
0617                                 <DetectChar attribute="String" context="gdl_token_array_1_nested" char="(" />
0618                                 <DetectChar attribute="String" context="#pop" char=")" />
0619                         </context>
0620 
0621                         <context name="gdl_token_array_2" attribute="String" lineEndContext="#stay" >
0622                                 <IncludeRules context="token_array_rules" />
0623                                 <Detect2Chars attribute="String" char="\" char1="}" context="#stay"/>
0624                                 <DetectChar attribute="GDL input" context="#pop#pop" char="}" endRegion="GdlInput" />
0625                                 <DetectChar attribute="String" context="gdl_token_array_2_nested" char="{" />
0626                         </context>
0627                         <context name="gdl_token_array_2_nested" attribute="String" lineEndContext="#stay" >
0628                                 <IncludeRules context="token_array_rules" />
0629                                 <DetectChar attribute="String" context="gdl_token_array_2_nested" char="{" />
0630                                 <DetectChar attribute="String" context="#pop" char="}" />
0631                         </context>
0632 
0633                         <context name="gdl_token_array_3" attribute="String" lineEndContext="#stay" >
0634                                 <IncludeRules context="token_array_rules" />
0635                                 <Detect2Chars attribute="String" char="\" char1="]" context="#stay"/>
0636                                 <DetectChar attribute="String" context="gdl_token_array_3_nested" char="[" />
0637                                 <DetectChar attribute="GDL input" context="#pop#pop" char="]" endRegion="GdlInput" />
0638                         </context>
0639                         <context name="gdl_token_array_3_nested" attribute="String" lineEndContext="#stay" >
0640                                 <IncludeRules context="token_array_rules" />
0641                                 <DetectChar attribute="String" context="gdl_token_array_3_nested" char="[" />
0642                                 <DetectChar attribute="String" context="#pop" char="]" />
0643                         </context>
0644 
0645                         <context name="gdl_token_array_4" attribute="String" lineEndContext="#stay" >
0646                                 <IncludeRules context="token_array_rules" />
0647                                 <Detect2Chars attribute="String" char="\" char1="&gt;" context="#stay"/>
0648                                 <DetectChar attribute="String" context="gdl_token_array_4_nested" char="&lt;" />
0649                                 <DetectChar attribute="GDL input" context="#pop#pop" char="&gt;" endRegion="GdlInput" />
0650                         </context>
0651                         <context name="gdl_token_array_4_nested" attribute="String" lineEndContext="#stay" >
0652                                 <IncludeRules context="token_array_rules" />
0653                                 <DetectChar attribute="String" context="gdl_token_array_4_nested" char="&lt;" />
0654                                 <DetectChar attribute="String" context="#pop" char="&gt;" />
0655                         </context>
0656 
0657                         <!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
0658                                 delimiter character
0659                          -->
0660                         <context name="gdl_token_array_5" attribute="String" lineEndContext="#stay" dynamic="true">
0661                                 <IncludeRules context="token_array_rules" />
0662                                 <StringDetect attribute="String" String="\%1" context="#stay" dynamic="true"/>
0663                                 <RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
0664                         </context>
0665 
0666                         <!-- rules to be included in all token_array contexts -->
0667                         <context name="token_array_rules" attribute="String" lineEndContext="#stay" >
0668                                 <Detect2Chars attribute="String" char="\" char1="\" context="#stay"/>
0669                         </context>
0670 
0671                         <!-- apostrophed string specific contexts -->
0672 
0673                         <context name="gdl_apostrophed_1" attribute="Raw String" lineEndContext="#stay" >
0674                                 <IncludeRules context="apostrophed_rules" />
0675                                 <Detect2Chars attribute="Raw String" char="\" char1=")" context="#stay"/>
0676                                 <DetectChar attribute="Raw String" context="gdl_apostrophed_1_nested" char="(" />
0677                                 <DetectChar attribute="GDL input" context="#pop#pop" char=")" endRegion="GdlInput" />
0678                         </context>
0679                         <context name="gdl_apostrophed_1_nested" attribute="Raw String" lineEndContext="#stay" >
0680                                 <IncludeRules context="apostrophed_rules" />
0681                                 <DetectChar attribute="Raw String" context="gdl_apostrophed_1_nested" char="(" />
0682                                 <DetectChar attribute="Raw String" context="#pop" char=")" />
0683                         </context>
0684 
0685                         <context name="gdl_apostrophed_2" attribute="Raw String" lineEndContext="#stay" >
0686                                 <IncludeRules context="apostrophed_rules" />
0687                                 <Detect2Chars attribute="Raw String" char="\" char1="}" context="#stay"/>
0688                                 <DetectChar attribute="GDL input" context="#pop#pop" char="}" endRegion="GdlInput" />
0689                                 <DetectChar attribute="Raw String" context="gdl_apostrophed_2_nested" char="{" />
0690                         </context>
0691                         <context name="gdl_apostrophed_2_nested" attribute="Raw String" lineEndContext="#stay" >
0692                                 <IncludeRules context="apostrophed_rules" />
0693                                 <DetectChar attribute="Raw String" context="gdl_apostrophed_2_nested" char="{" />
0694                                 <DetectChar attribute="Raw String" context="#pop" char="}" />
0695                         </context>
0696 
0697                         <context name="gdl_apostrophed_3" attribute="Raw String" lineEndContext="#stay" >
0698                                 <IncludeRules context="apostrophed_rules" />
0699                                 <Detect2Chars attribute="Raw String" char="\" char1="]" context="#stay"/>
0700                                 <DetectChar attribute="Raw String" context="gdl_apostrophed_3_nested" char="[" />
0701                                 <DetectChar attribute="GDL input" context="#pop#pop" char="]" endRegion="GdlInput" />
0702                         </context>
0703                         <context name="gdl_apostrophed_3_nested" attribute="Raw String" lineEndContext="#stay" >
0704                                 <IncludeRules context="apostrophed_rules" />
0705                                 <DetectChar attribute="Raw String" context="gdl_apostrophed_3_nested" char="[" />
0706                                 <DetectChar attribute="Raw String" context="#pop" char="]" />
0707                         </context>
0708 
0709                         <context name="gdl_apostrophed_4" attribute="Raw String" lineEndContext="#stay" >
0710                                 <IncludeRules context="apostrophed_rules" />
0711                                 <Detect2Chars attribute="Raw String" char="\" char1="&gt;" context="#stay"/>
0712                                 <DetectChar attribute="Raw String" context="gdl_apostrophed_4_nested" char="&lt;" />
0713                                 <DetectChar attribute="GDL input" context="#pop#pop" char="&gt;" endRegion="GdlInput" />
0714                         </context>
0715                         <context name="gdl_apostrophed_4_nested" attribute="Raw String" lineEndContext="#stay" >
0716                                 <IncludeRules context="apostrophed_rules" />
0717                                 <DetectChar attribute="Raw String" context="gdl_apostrophed_4_nested" char="&lt;" />
0718                                 <DetectChar attribute="Raw String" context="#pop" char="&gt;" />
0719                         </context>
0720 
0721                         <!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
0722                                 delimiter character
0723                          -->
0724                         <context name="gdl_apostrophed_5" attribute="Raw String" lineEndContext="#stay" dynamic="true">
0725                                 <IncludeRules context="apostrophed_rules" />
0726                                 <StringDetect attribute="Raw String" String="\%1" context="#stay" dynamic="true"/>
0727                                 <RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
0728                         </context>
0729 
0730                         <!-- rules to be included in all apostrophed contexts -->
0731                         <context name="apostrophed_rules" attribute="Raw String" lineEndContext="#stay" >
0732                                 <Detect2Chars attribute="Raw String" char="\" char1="\" context="#stay"/>
0733                         </context>
0734 
0735                         <!-- shell command specific contexts -->
0736 
0737                         <context name="gdl_shell_command_1" attribute="Command" lineEndContext="#stay" >
0738                                 <IncludeRules context="shell_command_rules" />
0739                                 <Detect2Chars attribute="Command" char="\" char1=")" context="#stay"/>
0740                                 <DetectChar attribute="Command" context="gdl_shell_command_1_nested" char="(" />
0741                                 <DetectChar attribute="GDL input" context="#pop#pop" char=")" endRegion="GdlInput" />
0742                         </context>
0743                         <context name="gdl_shell_command_1_nested" attribute="Command" lineEndContext="#stay" >
0744                                 <IncludeRules context="shell_command_rules" />
0745                                 <DetectChar attribute="Command" context="gdl_shell_command_1_nested" char="(" />
0746                                 <DetectChar attribute="Command" context="#pop" char=")" />
0747                         </context>
0748 
0749                         <context name="gdl_shell_command_2" attribute="Command" lineEndContext="#stay" >
0750                                 <IncludeRules context="shell_command_rules" />
0751                                 <Detect2Chars attribute="Command" char="\" char1="}" context="#stay"/>
0752                                 <DetectChar attribute="GDL input" context="#pop#pop" char="}" endRegion="GdlInput" />
0753                                 <DetectChar attribute="Command" context="gdl_shell_command_2_nested" char="{" />
0754                         </context>
0755                         <context name="gdl_shell_command_2_nested" attribute="Command" lineEndContext="#stay" >
0756                                 <IncludeRules context="shell_command_rules" />
0757                                 <DetectChar attribute="Command" context="gdl_shell_command_2_nested" char="{" />
0758                                 <DetectChar attribute="Command" context="#pop" char="}" />
0759                         </context>
0760 
0761                         <context name="gdl_shell_command_3" attribute="Command" lineEndContext="#stay" >
0762                                 <IncludeRules context="shell_command_rules" />
0763                                 <Detect2Chars attribute="Command" char="\" char1="]" context="#stay"/>
0764                                 <DetectChar attribute="Command" context="gdl_shell_command_3_nested" char="[" />
0765                                 <DetectChar attribute="GDL input" context="#pop#pop" char="]" endRegion="GdlInput" />
0766                         </context>
0767                         <context name="gdl_shell_command_3_nested" attribute="Command" lineEndContext="#stay" >
0768                                 <IncludeRules context="shell_command_rules" />
0769                                 <DetectChar attribute="Command" context="gdl_shell_command_3_nested" char="[" />
0770                                 <DetectChar attribute="Command" context="#pop" char="]" />
0771                         </context>
0772 
0773                         <context name="gdl_shell_command_4" attribute="Command" lineEndContext="#stay" >
0774                                 <IncludeRules context="shell_command_rules" />
0775                                 <Detect2Chars attribute="Command" char="\" char1="&gt;" context="#stay"/>
0776                                 <DetectChar attribute="Command" context="gdl_shell_command_4_nested" char="&lt;" />
0777                                 <DetectChar attribute="GDL input" context="#pop#pop" char="&gt;" endRegion="GdlInput" />
0778                         </context>
0779                         <context name="gdl_shell_command_4_nested" attribute="Command" lineEndContext="#stay" >
0780                                 <IncludeRules context="shell_command_rules" />
0781                                 <DetectChar attribute="Command" context="gdl_shell_command_4_nested" char="&lt;" />
0782                                 <DetectChar attribute="Command" context="#pop" char="&gt;" />
0783                         </context>
0784 
0785                         <!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
0786                                 delimiter character
0787                          -->
0788                         <context name="gdl_shell_command_5" attribute="Command" lineEndContext="#stay" dynamic="true">
0789                                 <IncludeRules context="shell_command_rules" />
0790                                 <StringDetect attribute="Command" String="\%1" context="#stay" dynamic="true" />
0791                                 <RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
0792                         </context>
0793 
0794                         <!-- rules to be included in all shell_command contexts -->
0795                         <context name="shell_command_rules" attribute="Command" lineEndContext="#stay" >
0796                                 <Detect2Chars attribute="Command" char="\" char1="\" context="#stay"/>
0797                                 <RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
0798                                 <Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
0799                                 <Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
0800                         </context>
0801 
0802                         <!-- regular expression specific contexts -->
0803 
0804                         <context name="gdl_regexpr_1" attribute="Regular Expression" lineEndContext="#stay" >
0805                                 <IncludeRules context="regexpr_rules" />
0806                                 <Detect2Chars attribute="Regular Expression" char="\" char1=")" context="#stay"/>
0807                                 <DetectChar attribute="Regular Expression" context="gdl_regexpr_1_nested" char="(" />
0808                                 <RegExpr attribute="GDL input" context="#pop#pop" String="\)[uiomxn]*" endRegion="GdlInput" />
0809                         </context>
0810                         <context name="gdl_regexpr_1_nested" attribute="Regular Expression" lineEndContext="#stay" >
0811                                 <IncludeRules context="regexpr_rules" />
0812                                 <DetectChar attribute="Regular Expression" context="gdl_regexpr_1_nested" char="(" />
0813                                 <DetectChar attribute="Regular Expression" context="#pop" char=")" />
0814                         </context>
0815 
0816                         <context name="gdl_regexpr_2" attribute="Regular Expression" lineEndContext="#stay" >
0817                                 <IncludeRules context="regexpr_rules" />
0818                                 <Detect2Chars attribute="Regular Expression" char="\" char1="}" context="#stay"/>
0819                                 <RegExpr attribute="GDL input" context="#pop#pop" String="\}[uiomxn]*" endRegion="GdlInput" />
0820                                 <DetectChar attribute="Regular Expression" context="gdl_regexpr_2_nested" char="{" />
0821                         </context>
0822                         <context name="gdl_regexpr_2_nested" attribute="Regular Expression" lineEndContext="#stay" >
0823                                 <IncludeRules context="regexpr_rules" />
0824                                 <DetectChar attribute="Regular Expression" context="gdl_regexpr_2_nested" char="{" />
0825                                 <DetectChar attribute="Regular Expression" context="#pop" char="}" />
0826                         </context>
0827 
0828                         <context name="gdl_regexpr_3" attribute="Regular Expression" lineEndContext="#stay" >
0829                                 <IncludeRules context="regexpr_rules" />
0830                                 <Detect2Chars attribute="Regular Expression" char="\" char1="]" context="#stay"/>
0831                                 <DetectChar attribute="Regular Expression" context="gdl_regexpr_3_nested" char="[" />
0832                                 <RegExpr attribute="GDL input" context="#pop#pop" String="\][uiomxn]*" endRegion="GdlInput" />
0833                         </context>
0834                         <context name="gdl_regexpr_3_nested" attribute="Regular Expression" lineEndContext="#stay" >
0835                                 <IncludeRules context="regexpr_rules" />
0836                                 <DetectChar attribute="Regular Expression" context="gdl_regexpr_3_nested" char="[" />
0837                                 <DetectChar attribute="Regular Expression" context="#pop" char="]" />
0838                         </context>
0839 
0840                         <context name="gdl_regexpr_4" attribute="Regular Expression" lineEndContext="#stay" >
0841                                 <IncludeRules context="regexpr_rules" />
0842                                 <Detect2Chars attribute="Regular Expression" char="\" char1="&gt;" context="#stay"/>
0843                                 <DetectChar attribute="Regular Expression" context="gdl_regexpr_4_nested" char="&lt;" />
0844                                 <RegExpr attribute="GDL input" context="#pop#pop" String="&gt;[uiomxn]*" endRegion="GdlInput" />
0845                         </context>
0846                         <context name="gdl_regexpr_4_nested" attribute="Regular Expression" lineEndContext="#stay" >
0847                                 <IncludeRules context="regexpr_rules" />
0848                                 <DetectChar attribute="Regular Expression" context="gdl_regexpr_4_nested" char="&lt;" />
0849                                 <DetectChar attribute="Regular Expression" context="#pop" char="&gt;" />
0850                         </context>
0851 
0852                         <!-- this format doesn't allow nesting. it is terminated by the next occurrence of the
0853                                 delimiter character
0854                          -->
0855                         <context name="gdl_regexpr_5" attribute="Regular Expression" lineEndContext="#stay" dynamic="true">
0856                                 <IncludeRules context="regexpr_rules" />
0857                                 <StringDetect attribute="Regular Expression" String="\%1" context="#stay" dynamic="true" />
0858                                 <RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1[uiomxn]*" dynamic="true" endRegion="GdlInput" />
0859                         </context>
0860 
0861                         <!-- rules to be included in all regexpr contexts -->
0862                         <context name="regexpr_rules" attribute="Regular Expression" lineEndContext="#stay" >
0863                                 <Detect2Chars attribute="Regular Expression" char="\" char1="\" context="#stay"/>
0864                                 <RegExpr attribute="Substitution" String="#@{1,2}" context="Short Subst"/>
0865                                 <Detect2Chars attribute="Substitution" char="#" char1="$" context="Short Subst"/>
0866                                 <Detect2Chars attribute="Substitution" char="#" char1="{" context="Subst"/>
0867                         </context>
0868 
0869                         <!-- END of General delimited input support -->
0870 
0871                         <!-- handle data in script -->
0872                         <context name="DATA" attribute="Data" lineEndContext="#stay"/>
0873                 </contexts>
0874 
0875                 <itemDatas>
0876                         <itemData name="Normal Text" defStyleNum="dsNormal"/>
0877 
0878                         <itemData name="Keyword" defStyleNum="dsControlFlow"/>
0879                         <itemData name="Attribute Definition" defStyleNum="dsOthers"/>
0880                         <itemData name="Access Control" defStyleNum="dsAttribute" bold="1"/> <!-- #0000FF -->
0881                         <itemData name="Definition" defStyleNum="dsKeyword"/>
0882                         <itemData name="Pseudo variable" defStyleNum="dsDecVal"/>
0883 
0884                         <itemData name="Dec" defStyleNum="dsDecVal"/>
0885                         <itemData name="Float" defStyleNum="dsFloat"/>
0886                         <itemData name="Char" defStyleNum="dsChar"/>
0887                         <itemData name="Octal" defStyleNum="dsBaseN"/>
0888                         <itemData name="Hex" defStyleNum="dsBaseN"/>
0889                         <itemData name="Bin" defStyleNum="dsBaseN"/>
0890 
0891                         <itemData name="Symbol" defStyleNum="dsWarning" bold="0" underline="0"/> <!-- #D40000 -->
0892                         <itemData name="String" defStyleNum="dsString"/>
0893                         <itemData name="Raw String" defStyleNum="dsVerbatimString" /> <!-- #DD4A4A -->
0894                         <itemData name="Command" defStyleNum="dsInformation"/> <!-- #AA3000 -->
0895                         <itemData name="Message" defStyleNum="dsAttribute" bold="0"/> <!-- #4000A7 -->
0896                         <itemData name="Regular Expression" defStyleNum="dsSpecialString"/> <!-- #4A5704 -->
0897                         <itemData name="Substitution"   defStyleNum="dsSpecialChar"/>
0898                         <itemData name="Data" defStyleNum="dsNormal"/>
0899                         <!-- short for 'general delimited input' -->
0900                         <itemData name="GDL input" defStyleNum="dsOthers" />
0901 
0902                         <itemData name="Default globals" defStyleNum="dsVariable" bold="1"/> <!-- #C00000 -->
0903                         <itemData name="Global Variable" defStyleNum="dsVariable"/> <!-- #C00000 -->
0904                         <itemData name="Global Constant" defStyleNum="dsConstant" bold="1"/> <!-- #bb1188 -->
0905                         <itemData name="Constant" defStyleNum="dsDataType"/>
0906                         <itemData name="Constant Value" defStyleNum="dsConstant" bold="0"/> <!-- #bb1188 -->
0907                         <itemData name="Kernel methods" defStyleNum="dsFunction" bold="1"/> <!-- #CC0E86 -->
0908                         <itemData name="Module mixin methods" defStyleNum="dsFunction" bold="1"/> <!-- #CC0E86 -->
0909                         <itemData name="Member" defStyleNum="dsNormal"/>
0910                         <itemData name="Instance Variable" defStyleNum="dsOthers"/>
0911                         <itemData name="Class Variable" defStyleNum="dsOthers"/>
0912 
0913                         <itemData name="Comment" defStyleNum="dsComment"/>
0914                         <itemData name="Blockcomment" defStyleNum="dsComment"/>
0915 
0916                         <itemData name="Here Document" defStyleNum="dsDocumentation"/>
0917 
0918                         <itemData name="Delimiter" defStyleNum="dsKeyword"/> <!-- #FF9FEC -->
0919                         <itemData name="Operator" defStyleNum="dsKeyword"/> <!-- #FF9FEC -->
0920                 </itemDatas>
0921         </highlighting>
0922         <general>
0923                 <comments>
0924                         <comment name="singleLine" start="#" position="afterwhitespace"/>
0925                 </comments>
0926                 <keywords casesensitive="1" weakDeliminator="!?"/>
0927         </general>
0928 </language>
0929 
0930 <!-- kate: replace-tabs off; -->