message: Improve comment highlighting
  Outside macrocode environments, the '%' character can only appear in the
  first position. Any '%' appearing at an other position is not
  highlighted.
  Inside macrocode environments, '%' denotes the beginning of the comment.
  This is handled by a recursive pattern for groups {...}
diff: </dict>
  </dict>
  <key>end</key>
  - <string>^% (\\end\{macrocode\})(?:\s*\n)?</string>
  + <string>^% (\\end\{macrocode\})</string>
  <key>patterns</key>
  <array>
  <dict>
  <string>#guards</string>
  </dict>
  <dict>
  - <key>match</key>
  - <string>%.*$\n</string>
  - <key>name</key>
  - <string>comment.line.percentage.tex</string>
  + <key>include</key>
  + <string>#macrocode-comments</string>
  </dict>
  <dict>
  - <key>match</key>
  - <string>\^\^A.*\n$</string>
  + <key>include</key>
  + <string>#macrocode-braces</string>
  </dict>
  <dict>
  <key>include</key>
  - <string>$base</string>
  + <string>text.tex</string>
  </dict>
  </array>
  </dict>
  </dict>
  <dict>
  <key>match</key>
  - <string>%</string>
  + <string>^%</string>
  <key>name</key>
  <string>punctuation.definition.comment.tex</string>
  </dict>
  + <dict>
  + <key>match</key>
  + <string>([^%]+)%.*$\n?</string>
  + <key>name</key>
  + <string>invalid</string>
  + </dict>
  <dict>
  <key>begin</key>
  <string>\^\^A</string>
  <key>match</key>
  <string>^%(\<[^\>]*\>)</string>
  </dict>
  + <key>macrocode-comments</key>
  + <dict>
  + <key>patterns</key>
  + <array>
  + <dict>
  + <key>match</key>
  + <string>^\s*%.*$\n?</string>
  + <key>name</key>
  + <string>comment.line.percentage.tex</string>
  + </dict>
  + <dict>
  + <key>match</key>
  + <string>%.*$\n?</string>
  + <key>name</key>
  + <string>comment.line.percentage.tex</string>
  + </dict>
  + <dict>
  + <key>match</key>
  + <string>\^\^A.*\n$</string>
  + </dict>
  + </array>
  + </dict>
  + <key>macrocode-braces</key>
  + <dict>
  + <key>begin</key>
  + <string>\{</string>
  + <key>beginCaptures</key>
  + <dict>
  + <key>0</key>
  + <dict>
  + <key>name</key>
  + <string>punctuation.section.group.begin.tex</string>
  + </dict>
  + </dict>
  + <key>end</key>
  + <string>(\})|(?=^% (\\end\{macrocode\}))</string>
  + <key>endCaptures</key>
  + <dict>
  + <key>1</key>
  + <dict>
  + <key>name</key>
  + <string>punctuation.section.group.end.tex</string>
  + </dict>
  + </dict>
  + <key>name</key>
  + <string>meta.group.braces.tex</string>
  + <key>patterns</key>
  + <array>
  + <dict>
  + <key>include</key>
  + <string>#macrocode-comments</string>
  + </dict>
  + <dict>
  + <key>include</key>
  + <string>#macrocode-braces</string>
  + </dict>
  + <dict>
  + <key>include</key>
  + <string>$base</string>
  + </dict>
  + </array>
  + </dict>
  +
  </dict>
  <key>scopeName</key>
  <string>text.tex.dtx</string>
  