Skip to content

Instantly share code, notes, and snippets.

@MattDMo
Created August 29, 2014 23:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MattDMo/95aa1c6951163e94efb7 to your computer and use it in GitHub Desktop.
Save MattDMo/95aa1c6951163e94efb7 to your computer and use it in GitHub Desktop.
Github Flavored Markdown.tmLanguage
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>fileTypes</key>
<array>
<string>mdown</string>
<string>markdown</string>
<string>markdn</string>
<string>md</string>
</array>
<key>foldingStartMarker</key>
<string>(?x)(&lt;(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)\b.*?&gt;|&lt;!--(?!.*--&gt;)|\{\s*($|\?&gt;\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/))))</string>
<key>foldingStopMarker</key>
<string>(?x)(&lt;/(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)&gt;|^\s*--&gt;|(^|\s)\})</string>
<key>keyEquivalent</key>
<string>^~M</string>
<key>name</key>
<string>Markdown (Github Flavored)</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(?x)^(?=[ ]{,3}&gt;.|([ ]{4}|\t)(?!$)|[#]{1,6}\s*+|[ ]{,3}(?&lt;marker&gt;[-*_])([ ]{,2}\k&lt;marker&gt;){2,}[ \t]*+$)</string>
<key>comment</key>
<string> We could also use an empty end match and set applyEndPatternLast, but then we must be sure that the begin pattern will only match stuff matched by the sub-patterns. </string>
<key>end</key>
<string>(?x)^(?![ ]{,3}&gt;.|([ ]{4}|\t)|[#]{1,6}\s*+|[ ]{,3}(?&lt;marker&gt;[-*_])([ ]{,2}\k&lt;marker&gt;){2,}[ \t]*+$)</string>
<key>name</key>
<string>meta.block-level.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#block_quote</string>
</dict>
<dict>
<key>include</key>
<string>#block_raw</string>
</dict>
<dict>
<key>include</key>
<string>#heading</string>
</dict>
<dict>
<key>include</key>
<string>#separator</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>^[ ]{0,3}([*+-])(?=\s)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.list_item.markdown</string>
</dict>
</dict>
<key>end</key>
<string>^(?=\S)</string>
<key>name</key>
<string>markup.list.unnumbered.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#list-paragraph</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>^[ ]{0,3}([0-9]+)(\.)(?=\s)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.list_item.markdown punctuation.definition.list_item.number.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.list_item.markdown</string>
</dict>
</dict>
<key>end</key>
<string>^(?=\S)</string>
<key>name</key>
<string>markup.list.numbered.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#list-paragraph</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>^(?=&lt;(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b)(?!.*?&lt;/\1&gt;)</string>
<key>comment</key>
<string>Markdown formatting is disabled inside block-level tags.</string>
<key>end</key>
<string>(?&lt;=^&lt;/\1&gt;$\n)</string>
<key>name</key>
<string>meta.disable-markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>^(?=&lt;(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b)</string>
<key>comment</key>
<string>Same rule but for one line disables.</string>
<key>end</key>
<string>$\n?</string>
<key>name</key>
<string>meta.disable-markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.constant.markdown</string>
</dict>
<key>10</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.markdown</string>
</dict>
<key>11</key>
<dict>
<key>name</key>
<string>string.other.link.description.title.markdown</string>
</dict>
<key>12</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.markdown</string>
</dict>
<key>13</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>constant.other.reference.link.markdown</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.constant.markdown</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.separator.key-value.markdown</string>
</dict>
<key>5</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.markdown</string>
</dict>
<key>6</key>
<dict>
<key>name</key>
<string>markup.underline.link.markdown</string>
</dict>
<key>7</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.markdown</string>
</dict>
<key>8</key>
<dict>
<key>name</key>
<string>string.other.link.description.title.markdown</string>
</dict>
<key>9</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.markdown</string>
</dict>
</dict>
<key>match</key>
<string>(?x:\s*(\[)(.+?)(\])(:)[ \t]*(&lt;?)(\S+?)(&gt;?)[ \t]*(?:((\().+?(\)))|((").+?(")))?\s*$)</string>
<key>name</key>
<string>meta.link.reference.def.markdown</string>
</dict>
<dict>
<key>begin</key>
<string>^(?=\S)(?![=-]{3,}(?=$))</string>
<key>end</key>
<string>^(?:\s*$|(?=[ ]{,3}&gt;.))|(?=[ \t]*\n)(?&lt;=^===|^====|=====|^---|^----|-----)[ \t]*\n|(?=^#)</string>
<key>name</key>
<string>meta.paragraph.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#inline</string>
</dict>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.heading.markdown</string>
</dict>
</dict>
<key>match</key>
<string>^(={3,})(?=[ \t]*$)</string>
<key>name</key>
<string>markup.heading.1.markdown</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.heading.markdown</string>
</dict>
</dict>
<key>match</key>
<string>^(-{3,})(?=[ \t]*$)</string>
<key>name</key>
<string>markup.heading.2.markdown</string>
</dict>
</array>
</dict>
</array>
<key>repository</key>
<dict>
<key>fenced-html</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(html|html5)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
</dict>
<key>fenced-xml</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(xml)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.xml</string>
</dict>
</array>
</dict>
<key>fenced-diff</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(diff)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.diff</string>
</dict>
</array>
</dict>
<key>fenced-perl</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(perl)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.perl</string>
</dict>
</array>
</dict>
<key>fenced-php</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(php)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.php</string>
</dict>
</array>
</dict>
<key>fenced-css</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(css)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.css</string>
</dict>
</array>
</dict>
<key>fenced-less</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(less)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.css.less</string>
</dict>
</array>
</dict>
<key>fenced-java</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(java)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.java</string>
</dict>
</array>
</dict>
<key>fenced-c</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(c)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.c</string>
</dict>
</array>
</dict>
<key>fenced-c++</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(c\+\+)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.c++</string>
</dict>
</array>
</dict>
<key>fenced-yaml</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(yaml)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.yaml</string>
</dict>
</array>
</dict>
<key>fenced-sql</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(sql)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.sql</string>
</dict>
</array>
</dict>
<key>fenced-shell</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(shell)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.shell</string>
</dict>
</array>
</dict>
<key>fenced-sass</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(sass|scss)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.sass</string>
</dict>
</array>
</dict>
<key>fenced-scala</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(scala)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.scala</string>
</dict>
</array>
</dict>
<key>fenced-obj-c</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(objective-c)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.objc</string>
</dict>
</array>
</dict>
<key>fenced-coffee</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(coffee)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.coffee</string>
</dict>
</array>
</dict>
<key>fenced-js</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(js|json|javascript)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.js</string>
</dict>
</array>
</dict>
<key>fenced-ruby</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(ruby)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.ruby</string>
</dict>
</array>
</dict>
<key>fenced-python</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(python)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.python</string>
</dict>
</array>
</dict>
<key>fenced-undefine</key>
<dict>
<key>begin</key>
<string>(\s*```)\s*(\w*)\s*$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.fenced.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.language.fenced.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
</dict>
<key>ampersand</key>
<dict>
<key>comment</key>
<string>Markdown will convert this for us. We match it so that the HTML grammar will not mark it up as invalid.</string>
<key>match</key>
<string>&amp;(?!([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+);)</string>
<key>name</key>
<string>meta.other.valid-ampersand.markdown</string>
</dict>
<key>block_quote</key>
<dict>
<key>begin</key>
<string>\G[ ]{,3}(&gt;)(?!$)[ ]?</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.blockquote.markdown</string>
</dict>
</dict>
<key>comment</key>
<string> We terminate the block quote when seeing an empty line, a separator or a line with leading &gt; characters. The latter is to “reset” the quote level for quoted lines. </string> <key>end</key>
<string>(?x)^(?=\s*$|[ ]{,3}(?&lt;marker&gt;[-*_])([ ]{,2}\k&lt;marker&gt;){2,}[ \t]*+$|[ ]{,3}&gt;.)</string>
<key>name</key>
<string>markup.quote.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(?x)\G(?=[ ]{,3}&gt;.)</string>
<key>end</key>
<string>^</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#block_quote</string>
</dict>
</array>
</dict>
<dict>
<key>applyEndPatternLast</key>
<integer>1</integer>
<key>begin</key>
<string>(?x)\G(?=([ ]{4}|\t)|[#]{1,6}\s*+|[ ]{,3}(?&lt;marker&gt;[-*_])([ ]{,2}\k&lt;marker&gt;){2,}[ \t]*+$)</string>
<key>end</key>
<string>^</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#block_raw</string>
</dict>
<dict>
<key>include</key>
<string>#heading</string>
</dict>
<dict>
<key>include</key>
<string>#separator</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(?x)\G(?!$|[ ]{,3}&gt;.|([ ]{4}|\t)|[#]{1,6}\s*+|[ ]{,3}(?&lt;marker&gt;[-*_])([ ]{,2}\k&lt;marker&gt;){2,}[ \t]*+$)</string>
<key>end</key>
<string>$|(?&lt;=\n)</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#inline</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>block_raw</key>
<dict>
<key>match</key>
<string>([ ]{4}|\t).*$\n?</string>
<key>name</key>
<string>markup.raw.block.markdown</string>
</dict>
<key>bracket</key>
<dict>
<key>comment</key>
<string> Markdown will convert this for us. We match it so that the HTML grammar will not mark it up as invalid. </string> <key>match</key>
<string>&lt;(?![a-z/?\$!])</string>
<key>name</key>
<string>meta.other.valid-bracket.markdown</string>
</dict>
<key>escape</key>
<dict>
<key>match</key>
<string>\\[-`*_#+.!(){}\[\]\\&gt;]</string>
<key>name</key>
<string>constant.character.escape.markdown</string>
</dict>
<key>heading</key>
<dict>
<key>begin</key>
<string>\G(#{1,6})(?!#)\s*(?=\S)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.heading.markdown</string>
</dict>
</dict>
<key>contentName</key>
<string>entity.name.section.markdown</string>
<key>end</key>
<string>\s*(#*)$\n?</string>
<key>name</key>
<string>markup.heading.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#inline</string>
</dict>
</array>
</dict>
<key>image-inline</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.markdown</string>
</dict>
<key>10</key>
<dict>
<key>name</key>
<string>string.other.link.description.title.markdown</string>
</dict>
<key>11</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.markdown</string>
</dict>
<key>12</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.markdown</string>
</dict>
<key>13</key>
<dict>
<key>name</key>
<string>string.other.link.description.title.markdown</string>
</dict>
<key>14</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.markdown</string>
</dict>
<key>15</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.markdown</string>
</dict>
<key>16</key>
<dict>
<key>name</key>
<string>punctuation.definition.metadata.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>string.other.link.description.markdown</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.markdown</string>
</dict>
<key>5</key>
<dict>
<key>name</key>
<string>invalid.illegal.whitespace.markdown</string>
</dict>
<key>6</key>
<dict>
<key>name</key>
<string>punctuation.definition.metadata.markdown</string>
</dict>
<key>7</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.markdown</string>
</dict>
<key>8</key>
<dict>
<key>name</key>
<string>markup.underline.link.image.markdown</string>
</dict>
<key>9</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.markdown</string>
</dict>
</dict>
<key>match</key>
<string>(?x:\!(\[)((?&lt;square&gt;[^\[\]\\]|\\.|\[\g&lt;square&gt;*+\])*+)(\])([ ])?(\()(&lt;?)(\S+?)(&gt;?)[ \t]*(?:((\().+?(\)))| ((").+?(")))?\s*(\)))</string>
<key>name</key>
<string>meta.image.inline.markdown</string>
</dict>
<key>image-ref</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>string.other.link.description.markdown</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.markdown</string>
</dict>
<key>5</key>
<dict>
<key>name</key>
<string>punctuation.definition.constant.markdown</string>
</dict>
<key>6</key>
<dict>
<key>name</key>
<string>constant.other.reference.link.markdown</string>
</dict>
<key>7</key>
<dict>
<key>name</key>
<string>punctuation.definition.constant.markdown</string>
</dict>
</dict>
<key>match</key>
<string>\!(\[)((?&lt;square&gt;[^\[\]\\]|\\.|\[\g&lt;square&gt;*+\])*+)(\])[ ]?(\[)(.*?)(\])</string>
<key>name</key>
<string>meta.image.reference.markdown</string>
</dict>
<key>inline</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#fenced-html</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-xml</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-diff</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-perl</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-php</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-css</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-less</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-java</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-c</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-c++</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-yaml</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-sql</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-shell</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-sass</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-scala</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-obj-c</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-coffee</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-js</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-ruby</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-python</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-undefine</string>
</dict>
<dict>
<key>include</key>
<string>#escape</string>
</dict>
<dict>
<key>include</key>
<string>#ampersand</string>
</dict>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
<dict>
<key>include</key>
<string>#raw</string>
</dict>
<dict>
<key>include</key>
<string>#bold</string>
</dict>
<dict>
<key>include</key>
<string>#italic</string>
</dict>
<dict>
<key>include</key>
<string>#line-break</string>
</dict>
<dict>
<key>include</key>
<string>#image-inline</string>
</dict>
<dict>
<key>include</key>
<string>#link-inline</string>
</dict>
<dict>
<key>include</key>
<string>#link-inet</string>
</dict>
<dict>
<key>include</key>
<string>#link-email</string>
</dict>
<dict>
<key>include</key>
<string>#image-ref</string>
</dict>
<dict>
<key>include</key>
<string>#link-ref-literal</string>
</dict>
<dict>
<key>include</key>
<string>#link-ref</string>
</dict>
<dict>
<key>include</key>
<string>#plain-uri</string>
</dict>
</array>
</dict>
<key>italic</key>
<dict>
<key>begin</key>
<string>(?x)(?:^|\s)(\*|_)(?=\S)(?=(&lt;[^&gt;]*+&gt;| (?&lt;raw&gt;`+)([^`]|(?!(?&lt;!`)\k&lt;raw&gt;(?!`))`)*+\k&lt;raw&gt;| \\[\\`*_{}\[\]()#.!+\-&gt;]?+| \[((?&lt;square&gt;[^\[\]\\]| \\.| \[ \g&lt;square&gt;*+ \])*+\](([ ]?\[[^\]]*+\])| (\([ \t]*+&lt;?(.*?)&gt;?[ \t]*+((?&lt;title&gt;['"])(.*?)\k&lt;title&gt;)?\))))| \1\1| (?!(?&lt;=\S)\1).)++(?&lt;=\S)\1(?:\s))</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.italic.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(?&lt;=\S)(\1)((?!\1)|(?=\1\1))</string>
<key>name</key>
<string>markup.italic.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>applyEndPatternLast</key>
<integer>1</integer>
<key>begin</key>
<string>(?=&lt;[^&gt;]*?&gt;)</string>
<key>end</key>
<string>(?&lt;=&gt;)</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>#escape</string>
</dict>
<dict>
<key>include</key>
<string>#ampersand</string>
</dict>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
<dict>
<key>include</key>
<string>#raw</string>
</dict>
<dict>
<key>include</key>
<string>#bold</string>
</dict>
<dict>
<key>include</key>
<string>#image-inline</string>
</dict>
<dict>
<key>include</key>
<string>#link-inline</string>
</dict>
<dict>
<key>include</key>
<string>#link-inet</string>
</dict>
<dict>
<key>include</key>
<string>#link-email</string>
</dict>
<dict>
<key>include</key>
<string>#image-ref</string>
</dict>
<dict>
<key>include</key>
<string>#link-ref-literal</string>
</dict>
<dict>
<key>include</key>
<string>#link-ref</string>
</dict>
</array>
</dict>
<key>line-break</key>
<dict>
<key>match</key>
<string> {2,}$</string>
<key>name</key>
<string>meta.dummy.line-break</string>
</dict>
<key>link-email</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>markup.underline.link.markdown</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.markdown</string>
</dict>
</dict>
<key>match</key>
<string>(&lt;)((?:mailto:)?[-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(&gt;)</string>
<key>name</key>
<string>meta.link.email.lt-gt.markdown</string>
</dict>
<key>link-inet</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>markup.underline.link.markdown</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.markdown</string>
</dict>
</dict>
<key>match</key>
<string>(&lt;)((?:https?|ftp)://.*?)(&gt;)</string>
<key>name</key>
<string>meta.link.inet.markdown</string>
</dict>
<key>link-inline</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.markdown</string>
</dict>
<key>10</key>
<dict>
<key>name</key>
<string>string.other.link.description.title.markdown</string>
</dict>
<key>11</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.markdown</string>
</dict>
<key>12</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.markdown</string>
</dict>
<key>13</key>
<dict>
<key>name</key>
<string>string.other.link.description.title.markdown</string>
</dict>
<key>14</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.markdown</string>
</dict>
<key>15</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.markdown</string>
</dict>
<key>16</key>
<dict>
<key>name</key>
<string>punctuation.definition.metadata.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>string.other.link.title.markdown</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.markdown</string>
</dict>
<key>5</key>
<dict>
<key>name</key>
<string>invalid.illegal.whitespace.markdown</string>
</dict>
<key>6</key>
<dict>
<key>name</key>
<string>punctuation.definition.metadata.markdown</string>
</dict>
<key>7</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.markdown</string>
</dict>
<key>8</key>
<dict>
<key>name</key>
<string>markup.underline.link.markdown</string>
</dict>
<key>9</key>
<dict>
<key>name</key>
<string>punctuation.definition.link.markdown</string>
</dict>
</dict>
<key>match</key>
<string>(?x:(\[)((?&lt;square&gt;[^\[\]\\]|\\.|\[\g&lt;square&gt;*+\])*+)(\])([ ])?(\()(&lt;?)(.*?)(&gt;?)[ \t]*(?:((\().+?(\)))| ((").+?(")))?\s*(\)))</string>
<key>name</key>
<string>meta.link.inline.markdown</string>
</dict>
<key>link-ref</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>string.other.link.title.markdown</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.markdown</string>
</dict>
<key>5</key>
<dict>
<key>name</key>
<string>punctuation.definition.constant.begin.markdown</string>
</dict>
<key>6</key>
<dict>
<key>name</key>
<string>constant.other.reference.link.markdown</string>
</dict>
<key>7</key>
<dict>
<key>name</key>
<string>punctuation.definition.constant.end.markdown</string>
</dict>
</dict>
<key>match</key>
<string>(\[)((?&lt;square&gt;[^\[\]\\]|\\.|\[\g&lt;square&gt;*+\])*+)(\])[ ]?(\[)([^\]]*+)(\])</string>
<key>name</key>
<string>meta.link.reference.markdown</string>
</dict>
<key>link-ref-literal</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>string.other.link.title.markdown</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.markdown</string>
</dict>
<key>5</key>
<dict>
<key>name</key>
<string>punctuation.definition.constant.begin.markdown</string>
</dict>
<key>6</key>
<dict>
<key>name</key>
<string>punctuation.definition.constant.end.markdown</string>
</dict>
</dict>
<key>match</key>
<string>(\[)((?&lt;square&gt;[^\[\]\\]|\\.|\[\g&lt;square&gt;*+\])*+)(\])[ ]?(\[)(\])</string>
<key>name</key>
<string>meta.link.reference.literal.markdown</string>
</dict>
<key>list-paragraph</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\G\s+(?=\S)</string>
<key>end</key>
<string>^\s*$</string>
<key>name</key>
<string>meta.paragraph.list.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>^[ ]{0,3}([*+-])(?=\s)</string>
<key>name</key>
<string>punctuation.definition.list_item.markdown</string>
</dict>
<dict>
<key>match</key>
<string>^[ ]{0,3}([0-9]+)(\.)(?=\s)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.list_item.markdown punctuation.definition.list_item.number.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.list_item.markdown</string>
</dict>
</dict>
</dict>
<dict>
<key>include</key>
<string>#inline</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>raw</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.raw.markdown</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.raw.markdown</string>
</dict>
</dict>
<key>match</key>
<string>(`+)([^`]|(?!(?&lt;!`)\1(?!`))`)*+(\1)</string>
<key>name</key>
<string>markup.raw.inline.markdown</string>
</dict>
<key>separator</key>
<dict>
<key>match</key>
<string>\G[ ]{,3}([-*_])([ ]{,2}\1){2,}[ \t]*$\n?</string>
<key>name</key>
<string>meta.separator.markdown</string>
</dict>
<key>bold</key>
<dict>
<key>begin</key>
<string>(?x)(?:^|\s|\G)(\*\*|__)(?=\S)(?=(&lt;[^&gt;]*+&gt;| (?&lt;raw&gt;`+)([^`]|(?!(?&lt;!`)\k&lt;raw&gt;(?!`))`)*+\k&lt;raw&gt;| \\[\\`*_{}\[\]()#.!+\-&gt;]?+| \[((?&lt;square&gt;[^\[\]\\]| \\.| \[ \g&lt;square&gt;*+ \])*+\](([ ]?\[[^\]]*+\])| (\([ \t]*+&lt;?(.*?)&gt;?[ \t]*+((?&lt;title&gt;['"])(.*?)\k&lt;title&gt;)?\))))| (?!(?&lt;=\S)\1).)++(?&lt;=\S)\1)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.bold.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(?&lt;=\S)(\1)</string>
<key>name</key>
<string>markup.bold.markdown</string>
<key>patterns</key>
<array>
<dict>
<key>applyEndPatternLast</key>
<integer>1</integer>
<key>begin</key>
<string>(?=&lt;[^&gt;]*?&gt;)</string>
<key>end</key>
<string>(?&lt;=&gt;)</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>#escape</string>
</dict>
<dict>
<key>include</key>
<string>#ampersand</string>
</dict>
<dict>
<key>include</key>
<string>#bracket</string>
</dict>
<dict>
<key>include</key>
<string>#raw</string>
</dict>
<dict>
<key>include</key>
<string>#italic</string>
</dict>
<dict>
<key>include</key>
<string>#image-inline</string>
</dict>
<dict>
<key>include</key>
<string>#link-inline</string>
</dict>
<dict>
<key>include</key>
<string>#link-inet</string>
</dict>
<dict>
<key>include</key>
<string>#link-email</string>
</dict>
<dict>
<key>include</key>
<string>#image-ref</string>
</dict>
<dict>
<key>include</key>
<string>#link-ref-literal</string>
</dict>
<dict>
<key>include</key>
<string>#link-ref</string>
</dict>
</array>
</dict>
<key>plain-uri</key>
<dict>
<key>match</key>
<string>(?xi)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()&lt;&gt;]+|\(([^\s()&lt;&gt;]+|(\([^\s()&lt;&gt;]+\)))*\))+(?:\(([^\s()&lt;&gt;]+|(\([^\s()&lt;&gt;]+\)))*\)|[^\s`!()\[\]{};:'".,&lt;&gt;?«»“”‘’]))</string>
<key>name</key>
<string>markup.underline.link</string>
</dict>
</dict>
<key>scopeName</key>
<string>text.html.markdown</string>
<key>uuid</key>
<string>0A1D9875-B448-11D9-BD50-000D93B6E43C</string>
</dict>
</plist>
@MattDMo
Copy link
Author

MattDMo commented Aug 29, 2014

Borrowed from knockdown, with a regex fix for image links.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment