/jEdit/tags/jedit-4-3-pre14/modes/ruby.xml

# · XML · 458 lines · 389 code · 34 blank · 35 comment · 0 complexity · 7e65c4b6734559377afd524d3ded8d27 MD5 · raw file

  1. <?xml version="1.0"?>
  2. <!DOCTYPE MODE SYSTEM "xmode.dtd">
  3. <!-- Ruby mode by Ian Maclean (Ruby edit mode v0.7.4) -->
  4. <!-- tweakage by Chris Morris - clabs.org -->
  5. <!-- further tweakage by Christophe Grandsire -->
  6. <!-- further tweakage by Robert McKinnon 2004 -->
  7. <!-- Major overhaul by Karl von Laudermann -->
  8. <!-- More tweakage by Jim Morris (wolfmanjm), adds electric unindent for else, elsif, rescue, end -->
  9. <!-- More tweakage by Jim Morris (wolfmanjm), fixed when statements for most cases -->
  10. <!-- recommended mode catalog entry:
  11. <MODE NAME="ruby" FILE="ruby.xml" FILE_NAME_GLOB="*.{rb,rbw}" FIRST_LINE_GLOB="#!*/*ruby*" /> -->
  12. <MODE>
  13. <PROPS>
  14. <PROPERTY NAME="indentOpenBrackets" VALUE="{"/>
  15. <PROPERTY NAME="indentCloseBrackets" VALUE="}"/>
  16. <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
  17. <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
  18. <PROPERTY NAME="lineUpClosingBracket" VALUE="true"/>
  19. <PROPERTY NAME="commentStart" VALUE="=begin"/>
  20. <PROPERTY NAME="commentEnd" VALUE="=end"/>
  21. <PROPERTY NAME="lineComment" VALUE="#"/>
  22. <PROPERTY NAME="indentNextLines" VALUE="[^#]*\s+do(\s*|(\s+\|.+\|\s*))|\s*(if\s+.*|elsif.*|else.*|do(\s*|\s+.*)|case\s+.*|when\s+.*|while\s+.*|for\s+.*|until\s+.*|loop\s+.*|def\s+.*|class\s+.*|module\s+.*|begin.*|unless\s+.*|rescue.*|ensure.*)+"/>
  23. <PROPERTY NAME="unindentThisLine" VALUE="^\s*(else.*|end\s*|elsif.*|rescue.*|when.*|ensure.*)$" />
  24. <PROPERTY NAME="unindentNextLines" VALUE="^\s*(end\s*|else.*|rescue.*|elsif.*|when.*|ensure.*)$" />
  25. <PROPERTY NAME="indentNextLine" VALUE="^[^#]*([^$](:|\+|~|\*|-|%|&lt;|&gt;|&amp;|\^|\.|=)|\s(/|\!|\?|\|)|\b(not|and|or)|\\)\s*$" />
  26. <PROPERTY NAME="electricKeys" VALUE="edfn" />
  27. </PROPS>
  28. <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0b[01]([01_]*[01])?)|(0x[\p{XDigit}]([\p{XDigit}_]*[\p{XDigit}])?)|(0([0-7_]*[0-7])?)|(0d[0-9]([0-9_]*[0-9])?)|([1-9]([0-9_]*[0-9])?)|([0-9]([0-9_]*[0-9])?[Ee]([0-9]([0-9_]*[0-9])?)?)">
  29. <!-- ^ Binary literal | ^ Hex literal | ^ Octal literal | ^ "0d" Style Dec lit | ^ Normal Dec literal | ^ Float literal w/out dec point, with exp. -->
  30. <!-- Ruby comment (Inline Documentation ) -->
  31. <SPAN TYPE="COMMENT2">
  32. <BEGIN>=begin</BEGIN>
  33. <END>=end</END>
  34. </SPAN>
  35. <!-- Class and instance vars -->
  36. <MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>
  37. <!-- String literals -->
  38. <SPAN TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  39. <BEGIN>"</BEGIN>
  40. <END>"</END>
  41. </SPAN>
  42. <SPAN TYPE="LITERAL1" ESCAPE="\">
  43. <BEGIN>'</BEGIN>
  44. <END>'</END>
  45. </SPAN>
  46. <!-- %Q(Hello world) %(Hello world)-->
  47. <SPAN_REGEXP HASH_CHAR="%" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  48. <BEGIN>%Q?\(</BEGIN>
  49. <END>)</END>
  50. </SPAN_REGEXP>
  51. <!-- %q(Hello world) -->
  52. <SPAN TYPE="LITERAL1" ESCAPE="\">
  53. <BEGIN>%q(</BEGIN>
  54. <END>)</END>
  55. </SPAN>
  56. <!-- %Q{Hello world} %{Hello world} -->
  57. <SPAN_REGEXP HASH_CHAR="%" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  58. <BEGIN>%Q?\{</BEGIN>
  59. <END>}</END>
  60. </SPAN_REGEXP>
  61. <!-- %q{Hello world} -->
  62. <SPAN TYPE="LITERAL1" ESCAPE="\">
  63. <BEGIN>%q{</BEGIN>
  64. <END>}</END>
  65. </SPAN>
  66. <!-- %Q[Hello world] %[Hello world] -->
  67. <SPAN_REGEXP HASH_CHAR="%" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  68. <BEGIN>%Q?\[</BEGIN>
  69. <END>]</END>
  70. </SPAN_REGEXP>
  71. <!-- %q[Hello world] -->
  72. <SPAN TYPE="LITERAL1" ESCAPE="\">
  73. <BEGIN>%q[</BEGIN>
  74. <END>]</END>
  75. </SPAN>
  76. <!-- %Q<Hello world> %<Hello world> -->
  77. <SPAN_REGEXP HASH_CHAR="%" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  78. <BEGIN>%Q?&lt;</BEGIN>
  79. <END>&gt;</END>
  80. </SPAN_REGEXP>
  81. <!-- %q<Hello world> -->
  82. <SPAN TYPE="LITERAL1" ESCAPE="\">
  83. <BEGIN>%q&lt;</BEGIN>
  84. <END>&gt;</END>
  85. </SPAN>
  86. <!-- I made the next three forms as three instead of two, because the
  87. first two actually support whitespace as a delimiter, and the third
  88. one doesn't. -->
  89. <!-- %Q$Hello world$ -->
  90. <SPAN_REGEXP HASH_CHAR="%Q" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  91. <BEGIN>%Q([^\p{Alnum}])</BEGIN>
  92. <END>$1</END>
  93. </SPAN_REGEXP>
  94. <!-- %q$Hello world$ -->
  95. <SPAN_REGEXP HASH_CHAR="%q" TYPE="LITERAL1" ESCAPE="\">
  96. <BEGIN>%q([^\p{Alnum}])</BEGIN>
  97. <END>$1</END>
  98. </SPAN_REGEXP>
  99. <!-- %$Hello world$ -->
  100. <SPAN_REGEXP HASH_CHAR="%" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  101. <BEGIN>%([^\p{Alnum}\p{Space}])</BEGIN>
  102. <END>$1</END>
  103. </SPAN_REGEXP>
  104. <!-- %W(Array of strings) -->
  105. <SPAN TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  106. <BEGIN>%W(</BEGIN>
  107. <END>)</END>
  108. </SPAN>
  109. <!-- %w(Array of strings) -->
  110. <SPAN TYPE="LITERAL1" ESCAPE="\">
  111. <BEGIN>%w(</BEGIN>
  112. <END>)</END>
  113. </SPAN>
  114. <!-- %W{Array of strings} -->
  115. <SPAN TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  116. <BEGIN>%W{</BEGIN>
  117. <END>}</END>
  118. </SPAN>
  119. <!-- %w{Array of strings} -->
  120. <SPAN TYPE="LITERAL1" ESCAPE="\">
  121. <BEGIN>%w{</BEGIN>
  122. <END>}</END>
  123. </SPAN>
  124. <!-- %W[Array of strings] -->
  125. <SPAN TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  126. <BEGIN>%W[</BEGIN>
  127. <END>]</END>
  128. </SPAN>
  129. <!-- %w[Array of strings] -->
  130. <SPAN TYPE="LITERAL1" ESCAPE="\">
  131. <BEGIN>%w[</BEGIN>
  132. <END>]</END>
  133. </SPAN>
  134. <!-- %W<Array of strings> -->
  135. <SPAN TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  136. <BEGIN>%W&lt;</BEGIN>
  137. <END>&gt;</END>
  138. </SPAN>
  139. <!-- %w<Array of strings> -->
  140. <SPAN TYPE="LITERAL1" ESCAPE="\">
  141. <BEGIN>%w&lt;</BEGIN>
  142. <END>&gt;</END>
  143. </SPAN>
  144. <!-- %W$Array of strings$ -->
  145. <SPAN_REGEXP HASH_CHAR="%W" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  146. <BEGIN>%W([^\p{Alnum}\p{Space}])</BEGIN>
  147. <END>$1</END>
  148. </SPAN_REGEXP>
  149. <!-- %w@Array of strings@ -->
  150. <SPAN_REGEXP HASH_CHAR="%w" TYPE="LITERAL1" ESCAPE="\">
  151. <BEGIN>%w([^\p{Alnum}\p{Space}])</BEGIN>
  152. <END>$1</END>
  153. </SPAN_REGEXP>
  154. <!-- Here documents <<"FOO" <<-"FOO" -->
  155. <!-- Unfortunately, in a SPAN_REGEXP element only the <BEGIN> tag takes
  156. a regex, not the <END> tag. So an instance of FOO anywhere in the here
  157. document will terminate highlighting; I couldn't make it smarter. -->
  158. <SPAN_REGEXP HASH_CHAR="&lt;&lt;" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  159. <BEGIN>&lt;&lt;-?"([\p{Graph}]+)"</BEGIN>
  160. <END>$1</END>
  161. </SPAN_REGEXP>
  162. <!-- Here documents <<'FOO' <<-'FOO' -->
  163. <!-- Unfortunately, in a SPAN_REGEXP element only the <BEGIN> tag takes
  164. a regex, not the <END> tag. So an instance of FOO anywhere in the here
  165. document will terminate highlighting; I couldn't make it smarter. -->
  166. <SPAN_REGEXP HASH_CHAR="&lt;&lt;" TYPE="LITERAL1">
  167. <BEGIN>&lt;&lt;-?'([\p{Graph}]+)'</BEGIN>
  168. <END>$1</END>
  169. </SPAN_REGEXP>
  170. <!-- Here documents <<FOO <<-FOO -->
  171. <!-- Unfortunately, in a SPAN_REGEXP element only the <BEGIN> tag takes
  172. a regex, not the <END> tag. So an instance of FOO anywhere in the here
  173. document will terminate highlighting; I couldn't make it smarter. -->
  174. <SPAN_REGEXP HASH_CHAR="&lt;&lt;" TYPE="LITERAL1" DELEGATE="doubleQuoteLiteral">
  175. <BEGIN>&lt;&lt;-?([A-Za-z_]+)</BEGIN>
  176. <END>$1</END>
  177. </SPAN_REGEXP>
  178. <!-- Shell command strings -->
  179. <!-- `echo foo` -->
  180. <SPAN TYPE="LITERAL2" DELEGATE="BackquoteLiteral">
  181. <BEGIN>`</BEGIN>
  182. <END>`</END>
  183. </SPAN>
  184. <!-- %x(echo foo) -->
  185. <SPAN TYPE="LITERAL2" DELEGATE="BackquoteLiteral">
  186. <BEGIN>%x(</BEGIN>
  187. <END>)</END>
  188. </SPAN>
  189. <!-- %x{echo foo} -->
  190. <SPAN TYPE="LITERAL2" DELEGATE="BackquoteLiteral">
  191. <BEGIN>%x{</BEGIN>
  192. <END>}</END>
  193. </SPAN>
  194. <!-- %x[echo foo] -->
  195. <SPAN TYPE="LITERAL2" DELEGATE="BackquoteLiteral">
  196. <BEGIN>%x[</BEGIN>
  197. <END>]</END>
  198. </SPAN>
  199. <!-- %x<echo foo> -->
  200. <SPAN TYPE="LITERAL2" DELEGATE="BackquoteLiteral">
  201. <BEGIN>%x&lt;</BEGIN>
  202. <END>&gt;</END>
  203. </SPAN>
  204. <!-- %x$echo foo$ -->
  205. <SPAN_REGEXP HASH_CHAR="%x" TYPE="LITERAL2" DELEGATE="BackquoteLiteral">
  206. <BEGIN>%x([^\p{Alnum}\p{Space}])</BEGIN>
  207. <END>$1</END>
  208. </SPAN_REGEXP>
  209. <!-- Regular expressions -->
  210. <!-- /regexp?/ -->
  211. <!-- If a regexp begins with a whitespace (including a newline),
  212. the beginning "/" is wrongly treated as a division operator.
  213. But such regexp is rare enough and one can use %r notations
  214. or write like "/\ ..." to force jEdit to treat it as a
  215. regexp. -->
  216. <SEQ_REGEXP HASH_CHAR="/" TYPE="OPERATOR">/=?($|\s)</SEQ_REGEXP>
  217. <!-- AT_WORD_START is TRUE not to handle "a/b/c". -->
  218. <SPAN AT_WORD_START="TRUE" TYPE="LITERAL3" DELEGATE="RegexpLiteral">
  219. <BEGIN>/</BEGIN>
  220. <END>/</END>
  221. </SPAN>
  222. <!-- %r(regexp?) -->
  223. <SPAN TYPE="LITERAL3" DELEGATE="RegexpLiteral">
  224. <BEGIN>%r(</BEGIN>
  225. <END>)</END>
  226. </SPAN>
  227. <!-- %r{regexp?} -->
  228. <SPAN TYPE="LITERAL3" DELEGATE="RegexpLiteral">
  229. <BEGIN>%r{</BEGIN>
  230. <END>}</END>
  231. </SPAN>
  232. <!-- %r[regexp?] -->
  233. <SPAN TYPE="LITERAL3" DELEGATE="RegexpLiteral">
  234. <BEGIN>%r[</BEGIN>
  235. <END>]</END>
  236. </SPAN>
  237. <!-- %r<regexp?> -->
  238. <SPAN TYPE="LITERAL3" DELEGATE="RegexpLiteral">
  239. <BEGIN>%r&lt;</BEGIN>
  240. <END>&gt;</END>
  241. </SPAN>
  242. <!-- %r$regexp?$ -->
  243. <SPAN_REGEXP HASH_CHAR="%r" TYPE="LITERAL3" DELEGATE="RegexpLiteral">
  244. <BEGIN>%r([^\p{Alnum}\p{Space}])</BEGIN>
  245. <END>$1</END>
  246. </SPAN_REGEXP>
  247. <!-- Std Comment -->
  248. <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>
  249. <!-- Predefined global variables -->
  250. <SEQ_REGEXP HASH_CHAR="$-" TYPE="KEYWORD3" AT_WORD_START="TRUE">\$-[0adFiIKlpvw](?![\p{Alnum}_])</SEQ_REGEXP>
  251. <SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD3" AT_WORD_START="TRUE">\$[0-9!@&amp;\+`'=~/\\,\.;&lt;&gt;_\*"\$\?\:F](?![\p{Alnum}_])</SEQ_REGEXP>
  252. <!-- Because of the ? char, this can't be done as a KEYWORD element -->
  253. <SEQ TYPE="KEYWORD1" AT_WORD_START="TRUE">defined?</SEQ>
  254. <!-- Highlight "include" but not "include?" -->
  255. <SEQ_REGEXP HASH_CHAR="include" TYPE="KEYWORD2" AT_WORD_START="TRUE">include(?![\p{Alnum}_\?])</SEQ_REGEXP>
  256. <!-- Not Operators but like the syntax highlight to match operators -->
  257. <SEQ TYPE="OPERATOR">{</SEQ>
  258. <SEQ TYPE="OPERATOR">}</SEQ>
  259. <SEQ TYPE="OPERATOR">(</SEQ>
  260. <SEQ TYPE="OPERATOR">)</SEQ>
  261. <!-- Arithmetic operators -->
  262. <SEQ TYPE="OPERATOR">::</SEQ>
  263. <SEQ TYPE="OPERATOR">===</SEQ>
  264. <SEQ TYPE="OPERATOR">=</SEQ>
  265. <SEQ TYPE="OPERATOR">&gt;&gt;</SEQ>
  266. <SEQ TYPE="OPERATOR">&lt;&lt;</SEQ>
  267. <SEQ TYPE="OPERATOR">&lt;=</SEQ>
  268. <SEQ TYPE="OPERATOR">+</SEQ>
  269. <SEQ TYPE="OPERATOR">-</SEQ>
  270. <SEQ TYPE="OPERATOR">/</SEQ>
  271. <SEQ TYPE="OPERATOR">**</SEQ>
  272. <SEQ TYPE="OPERATOR">*</SEQ>
  273. <SEQ TYPE="OPERATOR">%</SEQ>
  274. <!-- Logical Operators -->
  275. <SEQ TYPE="OPERATOR">&amp;</SEQ>
  276. <SEQ TYPE="OPERATOR">|</SEQ>
  277. <SEQ TYPE="OPERATOR">!</SEQ>
  278. <SEQ TYPE="OPERATOR">&gt;</SEQ>
  279. <SEQ TYPE="OPERATOR">&lt;</SEQ>
  280. <SEQ TYPE="OPERATOR">^</SEQ>
  281. <SEQ TYPE="OPERATOR">~</SEQ>
  282. <!-- Range operators -->
  283. <SEQ TYPE="OPERATOR">...</SEQ>
  284. <SEQ TYPE="OPERATOR">..</SEQ>
  285. <SEQ TYPE="OPERATOR">]</SEQ>
  286. <SEQ TYPE="OPERATOR">[</SEQ>
  287. <SEQ TYPE="OPERATOR">?</SEQ>
  288. <!-- Symbols -->
  289. <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR=":" TYPE="LABEL">:[\p{Alpha}_][\p{Alnum}_]*[?]?</SEQ_REGEXP>
  290. <SEQ TYPE="OPERATOR">:</SEQ>
  291. <KEYWORDS>
  292. <KEYWORD1>BEGIN</KEYWORD1>
  293. <KEYWORD1>END</KEYWORD1>
  294. <KEYWORD1>alias</KEYWORD1>
  295. <KEYWORD1>begin</KEYWORD1>
  296. <KEYWORD1>break</KEYWORD1>
  297. <KEYWORD1>case</KEYWORD1>
  298. <KEYWORD1>class</KEYWORD1>
  299. <KEYWORD1>def</KEYWORD1>
  300. <KEYWORD1>do</KEYWORD1>
  301. <KEYWORD1>else</KEYWORD1>
  302. <KEYWORD1>elsif</KEYWORD1>
  303. <KEYWORD1>end</KEYWORD1>
  304. <KEYWORD1>ensure</KEYWORD1>
  305. <KEYWORD1>for</KEYWORD1>
  306. <KEYWORD1>if</KEYWORD1>
  307. <KEYWORD1>in</KEYWORD1>
  308. <KEYWORD1>module</KEYWORD1>
  309. <KEYWORD1>next</KEYWORD1>
  310. <KEYWORD1>redo</KEYWORD1>
  311. <KEYWORD1>rescue</KEYWORD1>
  312. <KEYWORD1>retry</KEYWORD1>
  313. <KEYWORD1>return</KEYWORD1>
  314. <KEYWORD1>then</KEYWORD1>
  315. <KEYWORD1>undef</KEYWORD1>
  316. <KEYWORD1>unless</KEYWORD1>
  317. <KEYWORD1>until</KEYWORD1>
  318. <KEYWORD1>when</KEYWORD1>
  319. <KEYWORD1>while</KEYWORD1>
  320. <KEYWORD1>yield</KEYWORD1>
  321. <KEYWORD2>load</KEYWORD2>
  322. <KEYWORD2>require</KEYWORD2>
  323. <OPERATOR>and</OPERATOR>
  324. <OPERATOR>not</OPERATOR>
  325. <OPERATOR>or</OPERATOR>
  326. <KEYWORD3>false</KEYWORD3>
  327. <KEYWORD3>nil</KEYWORD3>
  328. <KEYWORD3>self</KEYWORD3>
  329. <KEYWORD3>super</KEYWORD3>
  330. <KEYWORD3>true</KEYWORD3>
  331. <KEYWORD3>$defout</KEYWORD3>
  332. <KEYWORD3>$deferr</KEYWORD3>
  333. <KEYWORD3>$stderr</KEYWORD3>
  334. <KEYWORD3>$stdin</KEYWORD3>
  335. <KEYWORD3>$stdout</KEYWORD3>
  336. <KEYWORD3>$DEBUG</KEYWORD3>
  337. <KEYWORD3>$FILENAME</KEYWORD3>
  338. <KEYWORD3>$LOAD_PATH</KEYWORD3>
  339. <KEYWORD3>$SAFE</KEYWORD3>
  340. <KEYWORD3>$VERBOSE</KEYWORD3>
  341. <KEYWORD3>__FILE__</KEYWORD3>
  342. <KEYWORD3>__LINE__</KEYWORD3>
  343. <KEYWORD3>ARGF</KEYWORD3>
  344. <KEYWORD3>ARGV</KEYWORD3>
  345. <KEYWORD3>ENV</KEYWORD3>
  346. <KEYWORD3>DATA</KEYWORD3>
  347. <KEYWORD3>FALSE</KEYWORD3>
  348. <KEYWORD3>NIL</KEYWORD3>
  349. <KEYWORD3>RUBY_PLATFORM</KEYWORD3>
  350. <KEYWORD3>RUBY_RELEASE_DATE</KEYWORD3>
  351. <KEYWORD3>RUBY_VERSION</KEYWORD3>
  352. <KEYWORD3>STDERR</KEYWORD3>
  353. <KEYWORD3>STDIN</KEYWORD3>
  354. <KEYWORD3>STDOUT</KEYWORD3>
  355. <KEYWORD3>SCRIPT_LINES__</KEYWORD3>
  356. <KEYWORD3>TOPLEVEL_BINDING</KEYWORD3>
  357. <KEYWORD3>TRUE</KEYWORD3>
  358. </KEYWORDS>
  359. </RULES>
  360. <!-- Delegate contents of #{} expression in double quotes to MAIN so that
  361. it will be syntax highlighted as well -->
  362. <RULES DEFAULT="LITERAL1" SET="doubleQuoteLiteral" ESCAPE="\">
  363. <SPAN DELEGATE="MAIN" TYPE="OPERATOR">
  364. <BEGIN>#{</BEGIN>
  365. <END>}</END>
  366. </SPAN>
  367. <MARK_FOLLOWING TYPE="KEYWORD4">#@@</MARK_FOLLOWING>
  368. <MARK_FOLLOWING TYPE="KEYWORD4">#@</MARK_FOLLOWING>
  369. <MARK_FOLLOWING TYPE="NULL">#$</MARK_FOLLOWING>
  370. </RULES>
  371. <!-- Delegate contents of #{} expression in backquotes to MAIN so that
  372. it will be syntax highlighted as well -->
  373. <RULES DEFAULT="LITERAL2" SET="BackquoteLiteral" ESCAPE="\">
  374. <SPAN DELEGATE="MAIN" TYPE="OPERATOR">
  375. <BEGIN>#{</BEGIN>
  376. <END>}</END>
  377. </SPAN>
  378. <MARK_FOLLOWING TYPE="KEYWORD4">#@@</MARK_FOLLOWING>
  379. <MARK_FOLLOWING TYPE="KEYWORD4">#@</MARK_FOLLOWING>
  380. <MARK_FOLLOWING TYPE="NULL">#$</MARK_FOLLOWING>
  381. </RULES>
  382. <!-- Delegate contents of #{} expression in a regexp to MAIN so that
  383. it will be syntax highlighted as well -->
  384. <RULES DEFAULT="LITERAL3" SET="RegexpLiteral" ESCAPE="\">
  385. <SPAN DELEGATE="MAIN" TYPE="OPERATOR">
  386. <BEGIN>#{</BEGIN>
  387. <END>}</END>
  388. </SPAN>
  389. <MARK_FOLLOWING TYPE="KEYWORD4">#@@</MARK_FOLLOWING>
  390. <MARK_FOLLOWING TYPE="KEYWORD4">#@</MARK_FOLLOWING>
  391. <MARK_FOLLOWING TYPE="NULL">#$</MARK_FOLLOWING>
  392. </RULES>
  393. </MODE>