<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>Tests/Percent-delimited literals test.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -59,7 +59,6 @@ TODO
     so very simple)
   - Hashes
   - Special method names that aren't simple symbols
-  - And the hard one: percent-delimited literals. No idea how to do this one.
   - `echoed shelling out`, as well as %x(the percent delimited variant)
   - More advanced heredoc support
     - Nesting, see Thomas' heredoc stuff in the Experimental Ruby tmbundle</diff>
      <filename>README.markdown</filename>
    </modified>
    <modified>
      <diff>@@ -16,13 +16,13 @@
     &lt;include collection=&quot;literal.string.heredoc&quot;/&gt;
     &lt;include collection=&quot;keyword.control&quot;/&gt;
     &lt;include collection=&quot;literal.keyword&quot;/&gt;
-    &lt;include collection=&quot;operator&quot;/&gt;
     &lt;include collection=&quot;container.block&quot;/&gt;
     &lt;include collection=&quot;container.function&quot;/&gt;
     &lt;include collection=&quot;identifier.variable&quot;/&gt;
     &lt;include collection=&quot;literal.string&quot;/&gt;
     &lt;include collection=&quot;literal.regex&quot;/&gt;
     &lt;include collection=&quot;literal.numeric&quot;/&gt;
+    &lt;include collection=&quot;operator&quot;/&gt;
   &lt;/zones&gt;
   &lt;library&gt;
     
@@ -42,12 +42,7 @@
           &lt;capture number=&quot;0&quot; name=&quot;end&quot;/&gt;
         &lt;/ends-with&gt;
         &lt;subzones&gt;
-          &lt;zone name=&quot;literal.escape.brief&quot;&gt;
-            &lt;!-- 'A single-quoted string with \'escape sequences\'' --&gt;
-            &lt;expression&gt;(\\)('|\\)&lt;/expression&gt;
-            &lt;capture number=&quot;1&quot; name=&quot;delimiter.seperator.escape&quot;/&gt;
-            &lt;capture number=&quot;2&quot; name=&quot;character&quot;/&gt;
-          &lt;/zone&gt;
+          &lt;include collection=&quot;subzones.literal.non-interpolated&quot;/&gt;
         &lt;/subzones&gt;
       &lt;/zone&gt;
       &lt;!-- &quot;A double-quoted string&quot; --&gt;
@@ -61,32 +56,281 @@
           &lt;capture number=&quot;0&quot; name=&quot;end&quot;/&gt;
         &lt;/ends-with&gt;
         &lt;subzones&gt;
-          &lt;!-- &quot;A double-quoted string with\nescape \&quot;sequences\&quot;&quot; --&gt;
-          &lt;zone name=&quot;literal.escape.extended&quot;&gt;
-            &lt;expression&gt;\\.&lt;/expression&gt;
-            &lt;capture number=&quot;1&quot; name=&quot;delimiter.seperator.escape&quot;/&gt;
-            &lt;capture number=&quot;2&quot; name=&quot;character&quot;/&gt;
-          &lt;/zone&gt;
-          &lt;!-- &quot;A double-quoted string with #{interpolations}&quot; --&gt;
-          &lt;zone name=&quot;string.interpolation&quot;&gt;
-            &lt;starts-with&gt;
-              &lt;expression&gt;#(\{)&lt;/expression&gt;
-              &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.curly-brace.begin&quot;/&gt;
-            &lt;/starts-with&gt;
-            &lt;ends-with&gt;
-              &lt;expression&gt;\}&lt;/expression&gt;
-              &lt;capture number=&quot;0&quot; name=&quot;delimiter.balanced.curly-brace.end&quot;/&gt;
-            &lt;/ends-with&gt;
-            &lt;subzones&gt;
-              &lt;include syntax=&quot;sourcecode.ruby&quot;/&gt;
-            &lt;/subzones&gt;
-          &lt;/zone&gt;
+          &lt;include collection=&quot;subzones.literal.interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      
+      &lt;!--
+        Again here, I can't really do this the &quot;right way&quot; without variable-
+        width look-behinds (to look behind and see if the starts-with
+        expression used the appropriate starting character). Thus, I'm going
+        to have to separately define each type of paired delimiter, and then
+        one more for the wildcard pairs.
+      --&gt;
+      
+      &lt;!-- %(A percent-delimited string) --&gt;
+      &lt;zone name=&quot;literal.string.percent-delimited.interpolated.parenthesis&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(Q)?(\()&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\))&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.interpolated&quot;/&gt;
         &lt;/subzones&gt;
       &lt;/zone&gt;
+      &lt;zone name=&quot;literal.string.percent-delimited.interpolated.square-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(Q)?(\[)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\])&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.string.percent-delimited.interpolated.curly-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(Q)?(\{)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\})&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.string.percent-delimited.interpolated.angle-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(Q)?(\&amp;lt;)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\&amp;gt;)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.string.percent-delimited.interpolated&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(Q)?([`~!@#$%^&amp;amp;*-_=+\|'&quot;;:.,/?])&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\3)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.string.percent-delimited.non-interpolated.parenthesis&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(q)(\()&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\))&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.non-interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.string.percent-delimited.non-interpolated.square-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(q)(\[)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\])&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.non-interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.string.percent-delimited.non-interpolated.curly-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(q)(\{)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\})&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.non-interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.string.percent-delimited.non-interpolated.angle-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(q)(\&amp;lt;)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\&amp;gt;)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.non-interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.string.percent-delimited.non-interpolated&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(q)?([`~!@#$%^&amp;amp;*-_=+\|'&quot;;:.,/?])&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\3)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.non-interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      
       &lt;zone name=&quot;literal.symbol&quot;&gt;
         &lt;expression&gt;:([A-Za-z0-9_]*[\?\!]?)&lt;/expression&gt;
         &lt;capture number=&quot;1&quot; name=&quot;symbol.name&quot;/&gt;
       &lt;/zone&gt;
+      &lt;!-- %s(percent_delimited_symbol) --&gt;
+      &lt;zone name=&quot;literal.symbol.percent-delimited.non-interpolated.parenthesis&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(s)(\()&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\))&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.symbol.non-interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.symbol.percent-delimited.non-interpolated.square-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(s)(\[)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\])&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.symbol.non-interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.symbol.percent-delimited.non-interpolated.curly-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(s)(\{)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\})&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.symbol.non-interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.symbol.percent-delimited.non-interpolated.angle-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(s)(\&amp;lt;)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\&amp;gt;)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.symbol.non-interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.symbol.percent-delimited.non-interpolated&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(s)?([`~!@#$%^&amp;amp;*-_=+\|'&quot;;:.,/?])&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\3)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include collection=&quot;subzones.literal.non-interpolated&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+    &lt;/collection&gt;
+    
+    &lt;collection name=&quot;subzones.literal.interpolated&quot;&gt;
+      &lt;!-- &quot;A double-quoted string with\nescape \&quot;sequences\&quot;&quot; --&gt;
+      &lt;zone name=&quot;literal.escape.extended&quot;&gt;
+        &lt;expression&gt;\\.&lt;/expression&gt;
+        &lt;capture number=&quot;1&quot; name=&quot;delimiter.seperator.escape&quot;/&gt;
+        &lt;capture number=&quot;2&quot; name=&quot;character&quot;/&gt;
+      &lt;/zone&gt;
+      &lt;!-- &quot;A double-quoted string with #{interpolations}&quot; --&gt;
+      &lt;zone name=&quot;string.interpolation&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;#(\{)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.curly-brace.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;\}&lt;/expression&gt;
+          &lt;capture number=&quot;0&quot; name=&quot;delimiter.balanced.curly-brace.end&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include syntax=&quot;sourcecode.ruby&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+    &lt;/collection&gt;
+    &lt;collection name=&quot;subzones.literal.non-interpolated&quot;&gt;
+      &lt;zone name=&quot;literal.escape.brief&quot;&gt;
+        &lt;!-- 'A single-quoted string with \'escape sequences\'' --&gt;
+        &lt;expression&gt;(\\)('|\\)&lt;/expression&gt;
+        &lt;capture number=&quot;1&quot; name=&quot;delimiter.seperator.escape&quot;/&gt;
+        &lt;capture number=&quot;2&quot; name=&quot;character&quot;/&gt;
+      &lt;/zone&gt;
     &lt;/collection&gt;
     
     &lt;collection name=&quot;literal.string.heredoc&quot;&gt;
@@ -135,6 +379,81 @@
           &lt;include syntax=&quot;expression.regex&quot;/&gt;
         &lt;/subzones&gt;
       &lt;/zone&gt;
+      &lt;zone name=&quot;literal.regex.percent-delimited.interpolated.parenthesis&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(r)(\()&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\))&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include syntax=&quot;expression.regex&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.regex.percent-delimited.interpolated.square-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(r)(\[)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\])&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include syntax=&quot;expression.regex&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.regex.percent-delimited.interpolated.curly-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(r)(\{)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\})&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include syntax=&quot;expression.regex&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.regex.percent-delimited.interpolated.angle-brace&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(r)(\&amp;lt;)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\&amp;gt;)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include syntax=&quot;expression.regex&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
+      &lt;zone name=&quot;literal.regex.percent-delimited.interpolated&quot;&gt;
+        &lt;starts-with&gt;
+          &lt;expression&gt;(%)(r)([`~!@#$%^&amp;amp;*-_=+\|'&quot;;:.,/?])&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.literal.percent-delimiter&quot;/&gt;
+          &lt;capture number=&quot;2&quot; name=&quot;delimiter.literal.percent-delimited.qualifier&quot;/&gt;
+          &lt;capture number=&quot;3&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/starts-with&gt;
+        &lt;ends-with&gt;
+          &lt;expression&gt;(\3)&lt;/expression&gt;
+          &lt;capture number=&quot;1&quot; name=&quot;delimiter.balanced.percent-delimited.begin&quot;/&gt;
+        &lt;/ends-with&gt;
+        &lt;subzones&gt;
+          &lt;include syntax=&quot;expression.regex&quot;/&gt;
+        &lt;/subzones&gt;
+      &lt;/zone&gt;
     &lt;/collection&gt;
     
     &lt;collection name=&quot;literal.numeric&quot;&gt;</diff>
      <filename>Syntaxes/RubySyntax.xml</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>c83f196afc52d9997cd9b4ff37ca1290c89a540c</id>
    </parent>
  </parents>
  <author>
    <name>elliottcable</name>
    <email>git@elliottcable.name</email>
  </author>
  <url>http://github.com/elliottcable/ruby.sugar/commit/2b0f31466ea981d9ef48b09653055f05fedd0c33</url>
  <id>2b0f31466ea981d9ef48b09653055f05fedd0c33</id>
  <committed-date>2009-03-31T12:58:39-07:00</committed-date>
  <authored-date>2009-03-31T12:19:35-07:00</authored-date>
  <message>A horrid, horrid, bloated stab at percent-delimited literals. If I only had variable-width lookbehinds Q_Q...</message>
  <tree>df63cb52fd6250cd132ac895b4ba30ca142d6379</tree>
  <committer>
    <name>elliottcable</name>
    <email>git@elliottcable.name</email>
  </committer>
</commit>
