Skip to content

Instantly share code, notes, and snippets.

@sliminality
Last active April 6, 2017 01:18
Show Gist options
  • Save sliminality/ad29df364c0a49f38db29a7da468d38f to your computer and use it in GitHub Desktop.
Save sliminality/ad29df364c0a49f38db29a7da468d38f to your computer and use it in GitHub Desktop.
Github-flavored Markdown with TeX syntax embedded
// LaTeX dollar sign encapsulation
{ "keys": ["$"], "command": "insert_snippet", "args": { "contents": "\\$${0:$SELECTION}\\$" }, "context": [
{ "key": "selector", "operator": "not_equal", "operand": "markup.raw", "match_all": true },
{ "key": "following_text", "operator": "not_regex_contains", "operand": "^(?:\t| |\\)|]|\\}|$)", "match_all": true },
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9$]$", "match_all": true },
{ "key": "selector", "operator": "equal", "operand": "text.html.markdown.gfm, text.html.markdown" },
{ "key": "selector", "operator": "not_equal", "operand": "string.other.math" },
{ "key": "setting.auto_match_enabled", "operand": true, "operator": "equal" },
{"key": "eol_selector", "match_all": true, "operand": "comment.line.percentage", "operator": "not_equal"},
{"key": "selection_empty", "match_all": true, "operand": false, "operator": "equal"},
{ "key": "setting.command_mode", "operand": false, "operator": "equal" }
]
},
{
"keys": ["$"],
"command": "insert_snippet", "args": {"contents": "\\$$0\\$"},
"context": [
{"key": "eol_selector", "match_all": true, "operand": "comment.line.percentage", "operator": "not_equal"},
{"key": "selection_empty", "match_all": true, "operand": true, "operator": "equal"},
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |,|\\)|]|\\}|$)", "match_all": true },
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9$]$", "match_all": true },
{ "key": "selector", "operator": "equal", "operand": "text.html.markdown.gfm, text.html.markdown" },
{"key": "setting.auto_match_enabled", "operand": true, "operator": "equal"},
{"key": "setting.command_mode", "operand": false, "operator": "equal"}
]
},
{ "keys": ["$"], "command": "move", "args": {"by": "characters", "forward": true},
"context": [
{"key": "following_text", "match_all": true, "operand": "^\\$", "operator": "regex_contains"},
{"key": "selection_empty", "match_all": true, "operand": true, "operator": "equal"},
{ "key": "selector", "operator": "not_equal", "operand": "markup.raw", "match_all": true },
// { "key": "selector", "operator": "equal", "operand": "text.html.markdown.gfm, text.html.markdown" },
{"key": "selector", "operand": "string.other.math", "operator": "equal"},
{ "key": "setting.auto_match_enabled", "operand": true, "operator": "equal" },
{ "key": "setting.command_mode", "operand": false, "operator": "equal" }
]
},
{
"keys": ["\\"],
"command": "insert_snippet", "args": {"contents": "\\$\\\\$0\\$"},
"context": [
{"key": "eol_selector", "match_all": true, "operand": "comment.line.percentage", "operator": "not_equal"},
{"key": "selection_empty", "match_all": true, "operand": true, "operator": "equal"},
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|$)", "match_all": true },
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9$]$", "match_all": true },
{ "key": "selector", "operator": "equal", "operand": "text.html.markdown.gfm, text.html.markdown" },
{ "key": "selector", "operator": "not_equal", "operand": "string.other.math" },
{"key": "setting.auto_match_enabled", "operand": true, "operator": "equal"},
{"key": "setting.command_mode", "operand": false, "operator": "equal"}
]
},
<?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 GFM</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>#fenced-code-blocks</string>
</dict>
<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</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>#fenced-code-blocks</string>
</dict>
<dict>
<key>include</key>
<string>#list-paragraph</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>#fenced-code-blocks</string>
</dict>
<dict>
<key>begin</key>
<string>^(?=&lt;(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|noscript|form|fieldset|iframe|math|ins|del)\b[^&gt;]*&gt;)(?!.*?&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>patterns</key>
<array>
<dict>
<key>include</key>
<string>#tag-kbd</string>
</dict>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
<key>name</key>
<string>meta.disable-markdown</string>
</dict>
<dict>
<key>begin</key>
<string>^(?=&lt;(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|noscript|form|fieldset|iframe|math|ins|del)\b[^&gt;]*&gt;)</string>
<key>comment</key>
<string>Same rule but for one line disables.</string>
<key>end</key>
<string>$\n?</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#tag-kbd</string>
</dict>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
<key>name</key>
<string>meta.disable-markdown</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.constant.begin.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.end.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>meta.paragraph.markdown</string>
</dict>
</dict>
<key>match</key>
<string>(?x:
\s* # Leading whitespace
(\[)(\^\d+?)(\])(:) # Reference name
[ \t]* # Optional whitespace
(.+?) # The footnote
[ \t]* # Optional whitespace
$
)</string>
<key>name</key>
<string>meta.link.reference.footnote.markdown</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.constant.begin.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.end.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* # Leading whitespace
(\[)(.+?)(\])(:) # Reference name
[ \t]* # Optional whitespace
(&lt;?)(\S+?)(&gt;?) # The url
[ \t]* # Optional whitespace
(?:
((\().+?(\))) # Match title in quotes…
| ((").+?(")) # or in parens.
)? # Title is optional
[ \t]* # Optional whitespace
$
)</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>texblock</key>
<dict>
<key>begin</key>
<string>(?x)
(?:\s*) # Optional whitespace
((\\)begin) # Marker - Function
(\{) # Open Bracket
(
(?:
align|equation|eqnarray # Argument
| multline|aligned|alignat
| split|gather|gathered
)
(?:\*)? # Optional Unnumbered
)
(\}) # Close Bracket
(\s*\n)? # Match to end of line absent of content
</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>support.function.be.latex</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.function.latex</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.arguments.begin.latex</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>variable.parameter.function.latex</string>
</dict>
<key>5</key>
<dict>
<key>name</key>
<string>punctuation.definition.arguments.end.latex</string>
</dict>
</dict>
<key>contentName</key>
<string>string.other.math.block.environment.latex</string>
<key>end</key>
<string>(?x)
(?:\s*) # Optional whitespace
((\\)end) # Marker - Function
(\{) # Open Bracket
(\4) # Previous capture from begin
(\}) # Close Bracket
(?:\s*\n)? # Match to end of line absent of content
</string>
<key>name</key>
<string>meta.function.environment.math.latex</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#tex</string>
</dict>
</array>
</dict>
<key>texmathblock</key>
<dict>
<key>begin</key>
<string>\\\[</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.tex</string>
</dict>
</dict>
<key>end</key>
<string>\\\]</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.tex</string>
</dict>
</dict>
<key>name</key>
<string>string.other.math.block.tex</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.tex.math</string>
</dict>
</array>
</dict>
<key>texsectiongroup</key>
<dict>
<key>begin</key>
<string>\{</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.group.tex</string>
</dict>
</dict>
<key>end</key>
<string>\}</string>
<key>name</key>
<string>meta.group.braces.tex</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#tex</string>
</dict>
</array>
</dict>
<key>texmath2block</key>
<dict>
<key>begin</key>
<string>\$\$</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.tex</string>
</dict>
</dict>
<key>end</key>
<string>\$\$</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.tex</string>
</dict>
</dict>
<key>name</key>
<string>string.other.math.block.tex</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.tex.math</string>
</dict>
<dict>
<key>include</key>
<string>#tex</string>
</dict>
</array>
</dict>
<key>texnewline</key>
<dict>
<key>match</key>
<string>\\\\</string>
<key>name</key>
<string>constant.character.newline.tex</string>
</dict>
<key>texinlinemath</key>
<dict>
<key>begin</key>
<string>\$</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.tex</string>
</dict>
</dict>
<key>end</key>
<string>\$</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.tex</string>
</dict>
</dict>
<key>name</key>
<string>string.other.math.tex</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\\$</string>
<key>name</key>
<string>constant.character.escape.tex</string>
</dict>
<dict>
<key>include</key>
<string>text.tex.math</string>
</dict>
<dict>
<key>include</key>
<string>#tex</string>
</dict>
</array>
</dict>
<key>texfunc</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.function.tex</string>
</dict>
</dict>
<key>match</key>
<string>(\\)[A-Za-z@]+</string>
<key>name</key>
<string>support.function.general.tex</string>
</dict>
<key>texkey</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.keyword.tex</string>
</dict>
</dict>
<key>match</key>
<string>(\\)[^a-zA-Z@]</string>
<key>name</key>
<string>constant.character.escape.tex</string>
</dict>
<key>tex</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#texblock</string>
</dict>
<dict>
<key>include</key>
<string>#texmathblock</string>
</dict>
<dict>
<key>include</key>
<string>#texsectiongroup</string>
</dict>
<dict>
<key>include</key>
<string>#texmath2block</string>
</dict>
<dict>
<key>include</key>
<string>#texnewline</string>
</dict>
<dict>
<key>include</key>
<string>#texinlinemath</string>
</dict>
<dict>
<key>include</key>
<string>#texfunc</string>
</dict>
<dict>
<key>include</key>
<string>#texkey</string>
</dict>
</array>
</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>#tex</string>
</dict>
<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>#tex</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>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>block_raw</key>
<dict>
<key>match</key>
<string>\G([ ]{4}|\t).*$\n?</string>
<key>name</key>
<string>markup.raw.block.markdown</string>
</dict>
<key>bold_italic</key>
<dict>
<key>begin</key>
<string>(?x)
(?&lt;!\w)(\*|_)(?=\1\1)(\1\1)(?=\S) # Open
(?=
(
&lt;[^&gt;]*+&gt; # HTML tags
| (?&lt;raw&gt;`+)([^`]|(?!(?&lt;!`)\k&lt;raw&gt;(?!`))`)*+\k&lt;raw&gt;
# Raw
| \\[\\`*_{}\[\]()#.!+\-&gt;]?+ # Escapes
| \[
(
(?&lt;square&gt; # Named group
[^\[\]\\] # Match most chars
| \\. # Escaped chars
| \[ \g&lt;square&gt;*+ \] # Nested brackets
)*+
\]
(
( # Reference Link
[ ]? # Optional space
\[[^\]]*+\] # Ref name
)
| ( # Inline Link
\( # Opening paren
[ \t]*+ # Optional whtiespace
&lt;?(.*?)&gt;? # URL
[ \t]*+ # Optional whtiespace
( # Optional Title
(?&lt;title&gt;['"])
(.*?)
\k&lt;title&gt;
)?
\)
)
)
)
| (?!(?&lt;=\S)\1{3}(?!\1)). # Everything besides
# style closer
)++
(?&lt;=\S)\1{3}(?!\1) # Close
)
</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.bold.markdown</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.bold.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(?&lt;=\S)(\1{3})(?!\1)</string>
<key>name</key>
<string>markup.bold_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>#tag-kbd</string>
</dict>
<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>#strikethrough</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>#link-footnote</string>
</dict>
</array>
</dict>
<key>bold</key>
<dict>
<key>begin</key>
<string>(?x)
(?&lt;!\w)(\*\*|__)(?=\S) # Open
(?=
(
&lt;[^&gt;]*+&gt; # HTML tags
| (?&lt;raw&gt;`+)([^`]|(?!(?&lt;!`)\k&lt;raw&gt;(?!`))`)*+\k&lt;raw&gt;
# Raw
| \\[\\`*_{}\[\]()#.!+\-&gt;]?+ # Escapes
| \[
(
(?&lt;square&gt; # Named group
[^\[\]\\] # Match most chars
| \\. # Escaped chars
| \[ \g&lt;square&gt;*+ \] # Nested brackets
)*+
\]
(
( # Reference Link
[ ]? # Optional space
\[[^\]]*+\] # Ref name
)
| ( # Inline Link
\( # Opening paren
[ \t]*+ # Optional whtiespace
&lt;?(.*?)&gt;? # URL
[ \t]*+ # Optional whtiespace
( # Optional Title
(?&lt;title&gt;['"])
(.*?)
\k&lt;title&gt;
)?
\)
)
)
)
| (?!(?&lt;=\S)\1). # Everything besides
# style closer
)++
(?&lt;=\S)\1 # Close
)
</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>#tag-kbd</string>
</dict>
<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_italic</string>
</dict>
<dict>
<key>include</key>
<string>#italic</string>
</dict>
<dict>
<key>include</key>
<string>#strikethrough</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>#link-footnote</string>
</dict>
</array>
</dict>
<key>strikethrough</key>
<dict>
<key>begin</key>
<string>(?x)
(?&lt;!\w)(~~)(?=[^\s~]) # Open
(?=
(
&lt;[^&gt;]*+&gt; # HTML tags
| (?&lt;raw&gt;`+)([^`]|(?!(?&lt;!`)\k&lt;raw&gt;(?!`))`)*+\k&lt;raw&gt;
# Raw
| \\[\\`*_{}\[\]()#.!+\-&gt;]?+ # Escapes
| \[
(
(?&lt;square&gt; # Named group
[^\[\]\\] # Match most chars
| \\. # Escaped chars
| \[ \g&lt;square&gt;*+ \] # Nested brackets
)*+
\]
(
( # Reference Link
[ ]? # Optional space
\[[^\]]*+\] # Ref name
)
| ( # Inline Link
\( # Opening paren
[ \t]*+ # Optional whtiespace
&lt;?(.*?)&gt;? # URL
[ \t]*+ # Optional whtiespace
( # Optional Title
(?&lt;title&gt;['"])
(.*?)
\k&lt;title&gt;
)?
\)
)
)
)
| (?!(?&lt;=\S)\1). # Everything besides
# style closer
)++
)
</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.strikethrough.markdown</string>
</dict>
</dict>
<key>end</key>
<string>(?&lt;=\S)(\1)(?!\w)</string>
<key>name</key>
<string>markup.strikethrough.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>#tag-kbd</string>
</dict>
<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_italic</string>
</dict>
<dict>
<key>include</key>
<string>#bold</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>
<dict>
<key>include</key>
<string>#link-footnote</string>
</dict>
</array>
</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>[ \t]*(#*)$</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:
\! # Images start with !
(\[)((?&lt;square&gt;[^\[\]\\]|\\.|\[\g&lt;square&gt;*+\])*+)(\])
# Match the link text.
([ ])? # Space not allowed
(\() # Opening paren for url
(&lt;?)(\S+?)(&gt;?) # The url
[ \t]* # Optional whitespace
(?:
((\().+?(\))) # Match title in parens…
| ((").+?(")) # or in quotes.
)? # Title is optional
\s* # Optional whitespace
(\))
)</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.end.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>#tex</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_italic</string>
</dict>
<dict>
<key>include</key>
<string>#bold</string>
</dict>
<dict>
<key>include</key>
<string>#italic</string>
</dict>
<dict>
<key>include</key>
<string>#strikethrough</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>#link-footnote</string>
</dict>
<dict>
<key>include</key>
<string>#tag-kbd</string>
</dict>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
</dict>
<key>italic</key>
<dict>
<key>begin</key>
<string>(?x)
(?&lt;!\w)(\*|_)(?=\S) # Open
(?=
(
&lt;[^&gt;]*+&gt; # HTML tags
| (?&lt;raw&gt;`+)([^`]|(?!(?&lt;!`)\k&lt;raw&gt;(?!`))`)*+\k&lt;raw&gt;
# Raw
| \\[\\`*_{}\[\]()#.!+\-&gt;]?+ # Escapes
| \[
(
(?&lt;square&gt; # Named group
[^\[\]\\] # Match most chars
| \\. # Escaped chars
| \[ \g&lt;square&gt;*+ \] # Nested brackets
)*+
\]
(
( # Reference Link
[ ]? # Optional space
\[[^\]]*+\] # Ref name
)
| ( # Inline Link
\( # Opening paren
[ \t]*+ # Optional whtiespace
&lt;?(.*?)&gt;? # URL
[ \t]*+ # Optional whtiespace
( # Optional Title
(?&lt;title&gt;['"])
(.*?)
\k&lt;title&gt;
)?
\)
)
)
)
| \1\1 # Must be bold closer
| (?!(?&lt;=\S)\1). # Everything besides
# style closer
)++
(?&lt;=\S)\1 # Close
)
</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>#tag-kbd</string>
</dict>
<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_italic</string>
</dict>
<dict>
<key>include</key>
<string>#bold</string>
</dict>
<dict>
<key>include</key>
<string>#strikethrough</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>#link-footnote</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;)?(\b(?:https?|ftp|file|git):///?[^\s()&lt;&gt;\[\]]+)(&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;*+\])*+)(\])
# Match the link text.
([ ])? # Space not allowed
(\() # Opening paren for url
(&lt;?)(.*?)(&gt;?) # The url
[ \t]* # Optional whitespace
(?:
((\().+?(\))) # Match title in parens…
| ((").+?(")) # or in quotes.
)? # Title is optional
\s* # Optional whitespace
(\))
)</string>
<key>name</key>
<string>meta.link.inline.markdown</string>
</dict>
<key>link-footnote</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.constant.begin.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.end.markdown</string>
</dict>
</dict>
<key>match</key>
<string>(\[)(\^[^\]]*+)(\])</string>
<key>name</key>
<string>meta.link.reference.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>include</key>
<string>#inline</string>
</dict>
<dict>
<key>match</key>
<string>\G\s*([*\-+]|[0-9]+\.)\s+</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.list_item.markdown</string>
</dict>
</dict>
</dict>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-code-blocks</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>2</key>
<dict>
<key>name</key>
<string>markup.raw.inline.content.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>fenced-html</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(html|html5)\s*$</string>
<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*[`~]{3,})\s*(xml)\s*$</string>
<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*[`~]{3,})\s*(diff|patch)\s*$</string>
<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*[`~]{3,})\s*(perl)\s*$</string>
<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*[`~]{3,})\s*(php)\s*$</string>
<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*[`~]{3,})\s*(css)\s*$</string>
<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*[`~]{3,})\s*(less)\s*$</string>
<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.less</string>
</dict>
</array>
</dict>
<key>fenced-java</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(java)\s*$</string>
<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*[`~]{3,})\s*(c)\s*$</string>
<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*[`~]{3,})\s*(c\+\+|cpp)\s*$</string>
<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*[`~]{3,})\s*(c(?:s|sharp|#))\s*$</string>
<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.cs</string>
</dict>
</array>
</dict>
<key>fenced-yaml</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(yaml)\s*$</string>
<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*[`~]{3,})\s*(sql)\s*$</string>
<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*[`~]{3,})\s*(sh|shell|bash)\s*$</string>
<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*[`~]{3,})\s*(sass)\s*$</string>
<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-scss</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(scss)\s*$</string>
<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.scss</string>
</dict>
</array>
</dict>
<key>fenced-scala</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(scala)\s*$</string>
<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*[`~]{3,})\s*(obj(ective-)?c)\s*$</string>
<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*[`~]{3,})\s*(coffee|cjsx)\s*$</string>
<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*[`~]{3,})\s*(js|jsx|json|javascript)\s*$</string>
<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-ts</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(ts|typescript)\s*$</string>
<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.ts</string>
</dict>
</array>
</dict>
<key>fenced-tsx</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(tsx)\s*$</string>
<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.tsx</string>
</dict>
</array>
</dict>
<key>fenced-ruby</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(ruby)\s*$</string>
<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*[`~]{3,})[{:#a-zA-Z-\s]*\s*\.?(py|python)\}?\s*$</string>
<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-lisp</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(lisp)\s*$</string>
<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.lisp</string>
</dict>
</array>
</dict>
<key>fenced-lua</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(lua)\s*$</string>
<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.lua</string>
</dict>
</array>
</dict>
<key>fenced-scheme</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(scheme)\s*$</string>
<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.scheme</string>
</dict>
</array>
</dict>
<key>fenced-swift</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,})\s*(swift)\s*$</string>
<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.swift</string>
</dict>
</array>
</dict>
<key>fenced-undefined</key>
<dict>
<key>begin</key>
<string>^(\s*[`~]{3,}).*$</string>
<key>end</key>
<string>^(\1)\n</string>
<key>name</key>
<string>markup.raw.block.markdown markup.raw.block.fenced.markdown</string>
</dict>
<key>fenced-code-blocks</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-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-scss</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-ts</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-tsx</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-lisp</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-lua</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-scheme</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-swift</string>
</dict>
<dict>
<key>include</key>
<string>#fenced-undefined</string>
</dict>
</array>
</dict>
<key>tag-kbd</key>
<dict>
<key>name</key>
<string>markup.kbd.markdown</string>
<key>match</key>
<string>((&lt;)(kbd)(&gt;))([^&lt;]+)((&lt;/)(kbd)(&gt;))</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>meta.tag.other.html</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.tag.begin.html</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>entity.name.tag.other.html</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.definition.tag.end.html</string>
</dict>
<key>5</key>
<dict>
<key>name</key>
<string>markup.kbd.content.markdown</string>
</dict>
<key>6</key>
<dict>
<key>name</key>
<string>meta.tag.other.html</string>
</dict>
<key>7</key>
<dict>
<key>name</key>
<string>punctuation.definition.tag.begin.html</string>
</dict>
<key>8</key>
<dict>
<key>name</key>
<string>entity.name.tag.other.html</string>
</dict>
<key>9</key>
<dict>
<key>name</key>
<string>punctuation.definition.tag.end.html</string>
</dict>
</dict>
</dict>
</dict>
<key>scopeName</key>
<string>text.html.markdown.gfm</string>
<key>uuid</key>
<string>423378C0-3E42-11E3-AA6E-0800200C9A66</string>
</dict>
</plist>
https://gist.githubusercontent.com/chaoxu/195ce33124f384a2f4e4/raw/2fae48bea746c2ed46c373754c2c0f5d4eb326b1/Markdown.tmLanguage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment