scopeName: text.html.markdown name: Markdown keyEquivalent: ^~M repository:
link-email: name: meta.link.email.lt-gt.markdown captures: "1": name: punctuation.definition.link.markdown "2": name: markup.underline.link.markdown "4": name: punctuation.definition.link.markdown match: (<)((?:mailto:)?[-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(>) bracket: name: meta.other.valid-bracket.markdown comment: "\n\ \t\t\t\tMarkdown will convert this for us. We match it so that the\n\ \t\t\t\tHTML grammar will not mark it up as invalid.\n\ \t\t\t" match: <(?![a-z/?\$!]) list-paragraph: patterns: - name: meta.paragraph.list.markdown begin: \G\s+(?=\S) end: ^\s*$ patterns: - include: "#inline" - comment: Match the list punctuation captures: "1": name: punctuation.definition.list_item.markdown match: ^\s*([*+-]|[0-9]+\.) link-ref-literal: name: meta.link.reference.literal.markdown captures: "6": name: punctuation.definition.constant.end.markdown "1": name: punctuation.definition.string.begin.markdown "2": name: string.other.link.title.markdown "4": name: punctuation.definition.string.end.markdown "5": name: punctuation.definition.constant.begin.markdown match: (\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\])[ ]?(\[)(\]) image-inline: name: meta.image.inline.markdown captures: "6": name: punctuation.definition.metadata.markdown "11": name: punctuation.definition.string.markdown "7": name: punctuation.definition.link.markdown "12": name: punctuation.definition.string.markdown "8": name: markup.underline.link.image.markdown "13": name: string.other.link.description.title.markdown "9": name: punctuation.definition.link.markdown "14": name: punctuation.definition.string.markdown "15": name: punctuation.definition.string.markdown "16": name: punctuation.definition.metadata.markdown "1": name: punctuation.definition.string.begin.markdown "2": name: string.other.link.description.markdown "3": name: punctuation.definition.string.end.markdown "10": name: string.other.link.description.title.markdown "5": name: invalid.illegal.whitespace.markdown match: "(?x:\n\ \t\t\t\t\\!\t\t\t\t\t\t\t# Images start with !\n\ \t\t\t\t(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])\t\n\ \t\t\t\t\t\t\t\t\t\t\t# Match the link text.\n\ \t\t\t\t([ ])?\t\t\t\t\t\t# Space not allowed\n\ \t\t\t\t(\\()\t\t\t\t\t\t# Opening paren for url\n\ \t\t\t\t\t(<?)(\\S+?)(>?)\t\t\t# The url\n\ \t\t\t\t\t[ \\t]*\t\t\t\t\t# Optional whitespace\n\ \t\t\t\t\t(?:\n\ \t\t\t\t\t\t ((\\().+?(\\)))\t\t# Match title in parens\xE2\x80\xA6\n\ \t\t\t\t\t\t| ((\").+?(\"))\t\t# or in quotes.\n\ \t\t\t\t\t)?\t\t\t\t\t\t# Title is optional\n\ \t\t\t\t\t\\s*\t\t\t\t\t\t# Optional whitespace\n\ \t\t\t\t(\\))\n\ \t\t\t )" link-inline: name: meta.link.inline.markdown captures: "6": name: punctuation.definition.metadata.markdown "11": name: punctuation.definition.string.begin.markdown "7": name: punctuation.definition.link.markdown "12": name: punctuation.definition.string.end.markdown "8": name: markup.underline.link.markdown "13": name: string.other.link.description.title.markdown "9": name: punctuation.definition.link.markdown "14": name: punctuation.definition.string.begin.markdown "15": name: punctuation.definition.string.end.markdown "16": name: punctuation.definition.metadata.markdown "1": name: punctuation.definition.string.begin.markdown "2": name: string.other.link.title.markdown "4": name: punctuation.definition.string.end.markdown "10": name: string.other.link.description.title.markdown "5": name: invalid.illegal.whitespace.markdown match: "(?x:\n\ \t\t\t\t(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])\t\n\ \t\t\t\t\t\t\t\t\t\t\t# Match the link text.\n\ \t\t\t\t([ ])?\t\t\t\t\t\t# Space not allowed\n\ \t\t\t\t(\\()\t\t\t\t\t\t# Opening paren for url\n\ \t\t\t\t\t(<?)(.*?)(>?)\t\t\t# The url\n\ \t\t\t\t\t[ \\t]*\t\t\t\t\t# Optional whitespace\n\ \t\t\t\t\t(?:\n\ \t\t\t\t\t\t ((\\().+?(\\)))\t\t# Match title in parens\xE2\x80\xA6\n\ \t\t\t\t\t\t| ((\").+?(\"))\t\t# or in quotes.\n\ \t\t\t\t\t)?\t\t\t\t\t\t# Title is optional\n\ \t\t\t\t\t\\s*\t\t\t\t\t\t# Optional whitespace\n\ \t\t\t\t(\\))\n\ \t\t\t )" inline: patterns: - include: "#escape" - include: "#ampersand" - include: "#bracket" - include: "#raw" - include: "#bold" - include: "#italic" - include: "#line-break" - include: "#image-inline" - include: "#link-inline" - include: "#link-inet" - include: "#link-email" - include: "#image-ref" - include: "#link-ref-literal" - include: "#link-ref" image-ref: name: meta.image.reference.markdown captures: "6": name: constant.other.reference.link.markdown "7": name: punctuation.definition.constant.markdown "1": name: punctuation.definition.string.begin.markdown "2": name: string.other.link.description.markdown "4": name: punctuation.definition.string.begin.markdown "5": name: punctuation.definition.constant.markdown match: \!(\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\])[ ]?(\[)(.*?)(\]) escape: name: constant.character.escape.markdown match: \\[-`*_#+.!(){}\[\]\\>] block_quote: name: markup.quote.markdown comment: "\n\ \t\t\t\tWe terminate the block quote when seeing an empty line, a\n\ \t\t\t\tseparator or a line with leading > characters. The latter is\n\ \t\t\t\tto \xE2\x80\x9Creset\xE2\x80\x9D the quote level for quoted lines.\n\ \t\t\t" begin: \G[ ]{,3}(>)(?!$)[ ]? beginCaptures: "1": name: punctuation.definition.blockquote.markdown end: |- (?x)^ (?= \s*$ | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$ | [ ]{,3}>. ) patterns: - begin: !binary | KD94KVxHCgkJCQkJCSg/PQlbIF17LDN9Pi4KCQkJCQkJKQ== end: ^ patterns: - include: "#block_quote" - begin: |- (?x)\G (?= ([ ]{4}|\t) | [#]{1,6}\s*+ | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$ ) applyEndPatternLast: 1 end: ^ patterns: - include: "#block_raw" - include: "#heading" - include: "#separator" - begin: |- (?x)\G (?! $ | [ ]{,3}>. | ([ ]{4}|\t) | [#]{1,6}\s*+ | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$ ) end: $|(?<=\n) patterns: - include: "#inline" link-ref: name: meta.link.reference.markdown captures: "6": name: constant.other.reference.link.markdown "7": name: punctuation.definition.constant.end.markdown "1": name: punctuation.definition.string.begin.markdown "2": name: string.other.link.title.markdown "4": name: punctuation.definition.string.end.markdown "5": name: punctuation.definition.constant.begin.markdown match: (\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\])[ ]?(\[)([^\]]*+)(\]) block_raw: name: markup.raw.block.markdown match: \G([ ]{4}|\t).*$\n? bold: name: markup.bold.markdown begin: !binary | KD94KQoJCQkJCQkoXCpcKnxfXykoPz1cUykJCQkJCQkJCSMgT3BlbgoJCQkJ CQkoPz0KCQkJCQkJCSgKCQkJCQkJCSAgICA8W14+XSorPgkJCQkJCQkjIEhU TUwgdGFncwoJCQkJCQkJICB8ICg/PHJhdz5gKykoW15gXXwoPyEoPzwhYClc azxyYXc+KD8hYCkpYCkqK1xrPHJhdz4KCQkJCQkJCQkJCQkJCQkJCQkjIFJh dwoJCQkJCQkJICB8IFxcW1xcYCpfe31cW1xdKCkjLiErXC0+XT8rCQkJIyBF c2NhcGVzCgkJCQkJCQkgIHwgXFsKCQkJCQkJCQkoCQkJCQoJCQkJCQkJCSAg ICAgICAgKD88c3F1YXJlPgkJCQkJIyBOYW1lZCBncm91cAoJCQkJCQkJCQkJ CVteXFtcXVxcXQkJCQkjIE1hdGNoIG1vc3QgY2hhcnMKCQkJCQkJCQkgICAg ICAgICAgfCBcXC4JCQkJCQkjIEVzY2FwZWQgY2hhcnMKCQkJCQkJCQkgICAg ICAgICAgfCBcWyBcZzxzcXVhcmU+KisgXF0JCSMgTmVzdGVkIGJyYWNrZXRz CgkJCQkJCQkJICAgICAgICApKisKCQkJCQkJCQkJXF0KCQkJCQkJCQkJKAoJ CQkJCQkJCQkJKAkJCQkJCQkjIFJlZmVyZW5jZSBMaW5rCgkJCQkJCQkJCQkJ WyBdPwkJCQkJIyBPcHRpb25hbCBzcGFjZQoJCQkJCQkJCQkJCVxbW15cXV0q K1xdCQkJCSMgUmVmIG5hbWUKCQkJCQkJCQkJCSkKCQkJCQkJCQkJICB8ICgJ CQkJCQkJIyBJbmxpbmUgTGluawoJCQkJCQkJCQkJCVwoCQkJCQkJIyBPcGVu aW5nIHBhcmVuCgkJCQkJCQkJCQkJCVsgXHRdKisJCQkJIyBPcHRpb25hbCB3 aHRpZXNwYWNlCgkJCQkJCQkJCQkJCTw/KC4qPyk+PwkJCSMgVVJMCgkJCQkJ CQkJCQkJCVsgXHRdKisJCQkJIyBPcHRpb25hbCB3aHRpZXNwYWNlCgkJCQkJ CQkJCQkJCSgJCQkJCSMgT3B0aW9uYWwgVGl0bGUKCQkJCQkJCQkJCQkJCSg/ PHRpdGxlPlsnIl0pCgkJCQkJCQkJCQkJCQkoLio/KQoJCQkJCQkJCQkJCQkJ XGs8dGl0bGU+CgkJCQkJCQkJCQkJCSk/CgkJCQkJCQkJCQkJXCkKCQkJCQkJ CQkJCSkKCQkJCQkJCQkJKQoJCQkJCQkJCSkKCQkJCQkJCSAgfCAoPyEoPzw9 XFMpXDEpLgkJCQkJCSMgRXZlcnl0aGluZyBiZXNpZGVzCgkJCQkJCQkJCQkJ CQkJCQkJIyBzdHlsZSBjbG9zZXIKCQkJCQkJCSkrKwoJCQkJCQkJKD88PVxT KVwxCQkJCQkJCQkjIENsb3NlCgkJCQkJCSkKCQkJCQk= captures: "1": name: punctuation.definition.bold.markdown end: (?<=\S)(\1) patterns: - begin: (?=<[^>]*?>) applyEndPatternLast: 1 end: (?<=>) patterns: - include: text.html.basic - include: "#escape" - include: "#ampersand" - include: "#bracket" - include: "#raw" - include: "#italic" - include: "#image-inline" - include: "#link-inline" - include: "#link-inet" - include: "#link-email" - include: "#image-ref" - include: "#link-ref-literal" - include: "#link-ref" heading: name: markup.heading.markdown begin: \G(#{1,6})(?!#)\s*(?=\S) captures: "1": name: punctuation.definition.heading.markdown end: \s*(#*)$\n? contentName: entity.name.section.markdown patterns: - include: "#inline" separator: name: meta.separator.markdown match: \G[ ]{,3}([-*_])([ ]{,2}\1){2,}[ \t]*$\n? italic: name: markup.italic.markdown begin: !binary | KD94KQoJCQkJCQkoXCp8XykoPz1cUykJCQkJCQkJCSMgT3BlbgoJCQkJCQko Pz0KCQkJCQkJCSgKCQkJCQkJCSAgICA8W14+XSorPgkJCQkJCQkjIEhUTUwg dGFncwoJCQkJCQkJICB8ICg/PHJhdz5gKykoW15gXXwoPyEoPzwhYClcazxy YXc+KD8hYCkpYCkqK1xrPHJhdz4KCQkJCQkJCQkJCQkJCQkJCQkjIFJhdwoJ CQkJCQkJICB8IFxcW1xcYCpfe31cW1xdKCkjLiErXC0+XT8rCQkJIyBFc2Nh cGVzCgkJCQkJCQkgIHwgXFsKCQkJCQkJCQkoCQkJCQoJCQkJCQkJCSAgICAg ICAgKD88c3F1YXJlPgkJCQkJIyBOYW1lZCBncm91cAoJCQkJCQkJCQkJCVte XFtcXVxcXQkJCQkjIE1hdGNoIG1vc3QgY2hhcnMKCQkJCQkJCQkgICAgICAg ICAgfCBcXC4JCQkJCQkjIEVzY2FwZWQgY2hhcnMKCQkJCQkJCQkgICAgICAg ICAgfCBcWyBcZzxzcXVhcmU+KisgXF0JCSMgTmVzdGVkIGJyYWNrZXRzCgkJ CQkJCQkJICAgICAgICApKisKCQkJCQkJCQkJXF0KCQkJCQkJCQkJKAoJCQkJ CQkJCQkJKAkJCQkJCQkjIFJlZmVyZW5jZSBMaW5rCgkJCQkJCQkJCQkJWyBd PwkJCQkJIyBPcHRpb25hbCBzcGFjZQoJCQkJCQkJCQkJCVxbW15cXV0qK1xd CQkJCSMgUmVmIG5hbWUKCQkJCQkJCQkJCSkKCQkJCQkJCQkJICB8ICgJCQkJ CQkJIyBJbmxpbmUgTGluawoJCQkJCQkJCQkJCVwoCQkJCQkJIyBPcGVuaW5n IHBhcmVuCgkJCQkJCQkJCQkJCVsgXHRdKisJCQkJIyBPcHRpb25hbCB3aHRp ZXNwYWNlCgkJCQkJCQkJCQkJCTw/KC4qPyk+PwkJCSMgVVJMCgkJCQkJCQkJ CQkJCVsgXHRdKisJCQkJIyBPcHRpb25hbCB3aHRpZXNwYWNlCgkJCQkJCQkJ CQkJCSgJCQkJCSMgT3B0aW9uYWwgVGl0bGUKCQkJCQkJCQkJCQkJCSg/PHRp dGxlPlsnIl0pCgkJCQkJCQkJCQkJCQkoLio/KQoJCQkJCQkJCQkJCQkJXGs8 dGl0bGU+CgkJCQkJCQkJCQkJCSk/CgkJCQkJCQkJCQkJXCkKCQkJCQkJCQkJ CSkKCQkJCQkJCQkJKQoJCQkJCQkJCSkKCQkJCQkJCSAgfCBcMVwxCQkJCQkJ CQkjIE11c3QgYmUgYm9sZCBjbG9zZXIKCQkJCQkJCSAgfCAoPyEoPzw9XFMp XDEpLgkJCQkJCSMgRXZlcnl0aGluZyBiZXNpZGVzCgkJCQkJCQkJCQkJCQkJ CQkJIyBzdHlsZSBjbG9zZXIKCQkJCQkJCSkrKwoJCQkJCQkJKD88PVxTKVwx CQkJCQkJCQkjIENsb3NlCgkJCQkJCSkKCQkJCQk= captures: "1": name: punctuation.definition.italic.markdown end: (?<=\S)(\1)((?!\1)|(?=\1\1)) patterns: - begin: (?=<[^>]*?>) applyEndPatternLast: 1 end: (?<=>) patterns: - include: text.html.basic - include: "#escape" - include: "#ampersand" - include: "#bracket" - include: "#raw" - include: "#bold" - include: "#image-inline" - include: "#link-inline" - include: "#link-inet" - include: "#link-email" - include: "#image-ref" - include: "#link-ref-literal" - include: "#link-ref" raw: name: markup.raw.inline.markdown captures: "1": name: punctuation.definition.raw.markdown "3": name: punctuation.definition.raw.markdown match: (`+)([^`]|(?!(?<!`)\1(?!`))`)*+(\1) link-inet: name: meta.link.inet.markdown captures: "1": name: punctuation.definition.link.markdown "2": name: markup.underline.link.markdown "3": name: punctuation.definition.link.markdown match: (<)((?:https?|ftp)://.*?)(>) line-break: name: meta.dummy.line-break match: " {2,}$" ampersand: name: meta.other.valid-ampersand.markdown comment: "\n\ \t\t\t\tMarkdown will convert this for us. We match it so that the\n\ \t\t\t\tHTML grammar will not mark it up as invalid.\n\ \t\t\t" match: "&(?!([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+);)"
uuid: 0A1D9874-B448-11D9-BD50-000D93B6E43C patterns:
-
name: meta.block-level.markdown comment: “n\
\t\t\t\tWe could also use an empty end match and set\n\ \t\t\t\tapplyEndPatternLast, but then we must be sure that the begin\n\ \t\t\t\tpattern will only match stuff matched by the sub-patterns.\n\ \t\t\t"
begin: |-
(?x)^ (?= [ ]{,3}>. | ([ ]{4}|\t)(?!$) | [#]{1,6}\s*+ | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$ )
end: |-
(?x)^ (?! [ ]{,3}>. | ([ ]{4}|\t) | [#]{1,6}\s*+ | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$ )
patterns:
-
include: “#block_quote”
-
include: “#block_raw”
-
include: “#heading”
-
include: “#separator”
-
-
name: markup.list.unnumbered.markdown begin: ^[ ]{0,3}([*+-])(?=s) captures:
"1": name: punctuation.definition.list_item.markdown
end: ^(?=S) patterns:
-
include: “#list-paragraph”
-
-
name: markup.list.numbered.markdown begin: ^[ ]{0,3}([0-9]+.)(?=s) captures:
"1": name: punctuation.definition.list_item.markdown
end: ^(?=S) patterns:
-
include: “#list-paragraph”
-
-
name: meta.disable-markdown comment: “n\
\t\t\t\tMarkdown formatting is disabled inside block-level tags.\n\ \t\t\t"
begin: ^(?=<(p|div|h|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)b)(?!.*?</1>) end: (?<=^</1>$n) patterns:
-
include: text.html.basic
-
-
name: meta.disable-markdown comment: Same rule but for one line disables. begin: ^(?=<(p|div|h|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)b) end: $n? patterns:
-
include: text.html.basic
-
-
name: meta.link.reference.def.markdown captures:
"6": name: markup.underline.link.markdown "11": name: string.other.link.description.title.markdown "7": name: punctuation.definition.link.markdown "12": name: punctuation.definition.string.begin.markdown "8": name: string.other.link.description.title.markdown "13": name: punctuation.definition.string.end.markdown "9": name: punctuation.definition.string.begin.markdown "1": name: punctuation.definition.constant.markdown "2": name: constant.other.reference.link.markdown "3": name: punctuation.definition.constant.markdown "4": name: punctuation.separator.key-value.markdown "10": name: punctuation.definition.string.end.markdown "5": name: punctuation.definition.link.markdown
match: “(?x:n\
\t\t\t\t\\s*\t\t\t\t\t\t# Leading whitespace\n\ \t\t\t\t(\\[)(.+?)(\\])(:)\t\t# Reference name\n\ \t\t\t\t[ \\t]*\t\t\t\t\t# Optional whitespace\n\ \t\t\t\t(<?)(\\S+?)(>?)\t\t\t# The url\n\ \t\t\t\t[ \\t]*\t\t\t\t\t# Optional whitespace\n\ \t\t\t\t(?:\n\ \t\t\t\t\t ((\\().+?(\\)))\t\t# Match title in quotes\xE2\x80\xA6\n\ \t\t\t\t\t| ((\").+?(\"))\t\t# or in parens.\n\ \t\t\t\t)?\t\t\t\t\t\t# Title is optional\n\ \t\t\t\t\\s*\t\t\t\t\t\t# Optional whitespace\n\ \t\t\t\t$\n\ \t\t\t)"
-
name: meta.paragraph.markdown begin: ^(?=S)(?!{3,}(?=$)) end: ^(?:s*$|(?=[ ]{,3}>.))|(?=[ t]*n)(?<=^===|^====|=====|^—|^—-|—–)[ t]*n|(?=^#) patterns:
-
include: “#inline”
-
include: text.html.basic
-
name: markup.heading.1.markdown captures:
"1": name: punctuation.definition.heading.markdown
match: ^(={3,})(?=[ t]*$)
-
name: markup.heading.2.markdown captures:
"1": name: punctuation.definition.heading.markdown
match: ^(-{3,})(?=[ t]*$)
-
foldingStartMarker: |-
(?x) (<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)\b.*?> |<!--(?!.*-->) |\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/))) )
foldingStopMarker: |-
(?x) (</(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)> |^\s*--> |(^|\s)\} )
fileTypes:
-
mdown
-
markdown
-
markdn
-
md