{
"name": "Creole",
"scopeName": "text.html.creole",
"patterns": [
{
"name": "meta.block-level.creole",
"patterns": [
{
"include": "#block_raw"
},
{
"include": "#heading"
},
{
"include": "#inline"
}
]
},
{
"name": "markup.list.unnumbered.creole",
"begin": "^ *([*])+(?=\\s)",
"end": "^(?=\\S)",
"patterns": [
{
"include": "#list-paragraph"
},
{
"include": "#inline"
}
],
"captures": {
"1": {
"name": "punctuation.definition.list_item.creole"
}
}
},
{
"name": "markup.list.numbered.creole",
"begin": "^[ ]*(#)(?=\\s)",
"end": "^(?=\\S)",
"patterns": [
{
"include": "#list-paragraph"
},
{
"include": "#inline"
}
],
"captures": {
"1": {
"name": "punctuation.definition.list_item.creole"
}
}
},
{
"name": "meta.disable-markdown",
"begin": "^(?=\u003c(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\\b)(?!.*?\u003c/\\1\u003e)",
"end": "(?\u003c=^\u003c/\\1\u003e$\\n)",
"patterns": [
{
"include": "text.html.basic"
}
]
},
{
"name": "meta.disable-markdown",
"begin": "^(?=\u003c(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\\b)",
"end": "$\\n?",
"patterns": [
{
"include": "text.html.basic"
}
]
},
{
"name": "punctuation.definition.horizonlal-rule.creole",
"match": "^ *-{4,} *$\\n?"
}
],
"repository": {
"ampersand": {
"name": "meta.other.valid-ampersand.markdown",
"match": "\u0026(?!([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+);)"
},
"block_raw": {
"patterns": [
{
"name": "markup.raw.block.creole",
"begin": "^(\\{\\{\\{)\\s*$\\n?",
"end": "^(\\}\\}\\})\\s*$\\n?",
"captures": {
"1": {
"name": "punctuation.definition.raw.creole"
}
}
}
]
},
"bold": {
"name": "markup.bold.creole",
"begin": "(?x)\n\t\t\t\t\t\t(?\u003c!\\*|^)(\\*\\*)(?=\\S)\t\t\t\t\t\t# opening **\n\t\t\t\t\t\t(?=\t\t\t\t\t\t\t\t\t\t\t\t# zero-width positive lookahead\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t \u003c[^\u003e]*+\u003e\t\t\t\t\t\t# match any HTML tag\n\t\t\t\t\t\t\t | ~[\\\\*{}\\[\\]#\\|/\u003e]?+\t\t\t\t\t# or escape characters\n\t\t\t\t\t\t\t | \\[\t\t\t\t\t\t\t\t\t\t# or literal [\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t (?\u003csquare\u003e\t\t\t\t# named group\n\t\t\t\t\t\t\t\t\t\t\t[^\\[\\]~]\t\t\t\t\t# don't match these\n\t\t\t\t\t\t\t\t | ~.\t\t\t\t\t\t\t# or escaped characters\n\t\t\t\t\t\t\t\t | \\[ \\g\u003csquare\u003e*+ \\]\t# or nested group\n\t\t\t\t\t\t\t\t )*+\n\t\t\t\t\t\t\t\t\t\\]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t | (?!(?\u003c=\\S)\\1).\t\t\t\t\t\t# or everything else\n\t\t\t\t\t\t\t)++\n\t\t\t\t\t\t\t(?\u003c=\\S)\\1\t\t\t\t\t\t\t\t# closing **\n\t\t\t\t\t\t)\t\t\t\t\t\t\t\t\t\t\t\t# close positive lookahead\n\t\t\t\t\t",
"end": "(?\u003c=\\S)(\\1)",
"patterns": [
{
"begin": "(?=\u003c[^\u003e]*?\u003e)",
"end": "(?\u003c=\u003e)",
"patterns": [
{
"include": "text.html.basic"
}
],
"applyEndPatternLast": true
},
{
"include": "#inline"
}
],
"captures": {
"1": {
"name": "punctuation.definition.bold.creole"
}
}
},
"bracket": {
"name": "meta.other.valid-bracket.creole",
"match": "\u003c(?![a-z/?\\$!])"
},
"escape": {
"name": "constant.character.escape.creole",
"match": "~[*#{}\\|\\[\\]\\\\/\u003e]+"
},
"heading": {
"name": "markup.heading.creole",
"contentName": "entity.name.section.creole",
"begin": "\\G(={1,6})(?!=)\\s*(?=\\S)",
"end": "\\s*(=*) *$\\n?",
"patterns": [
{
"include": "#inline"
}
],
"captures": {
"1": {
"name": "punctuation.definition.heading.creole"
}
}
},
"image-inline": {
"name": "meta.image.inline.creole",
"match": "(?x:\n\t\t\t\t(\\{\\{)\t\t\t\t\t\t# opening double curly bracket\n\t\t\t\t(\\s*[^\\s\\|]+[^\\|]+?)\t\t# the url; anything except pipe (at least 1 not whitespace)\n\t\t\t\t((\\|)\t\t\t\t\t\t# pipe separator\n\t\t\t\t(\\s*[^\\|\\s]+[^\\|]+)\t\t\t# title text\n\t\t\t\t\t)?\t\t\t\t\t\t# pipe and title are optional\n\t\t\t\t(\\}\\})\t\t\t\t\t\t# close double curly bracket (end image)\n\t\t\t )",
"captures": {
"1": {
"name": "punctuation.definition.image.creole"
},
"2": {
"name": "markup.underline.link.creole"
},
"4": {
"name": "punctuation.definition.image.creole"
},
"5": {
"name": "string.other.image.title.creole"
},
"6": {
"name": "punctuation.definition.image.creole"
}
}
},
"inline": {
"patterns": [
{
"include": "#inline_raw"
},
{
"include": "#link-inline"
},
{
"include": "#link-inet"
},
{
"include": "#link-email"
},
{
"include": "#line-break"
},
{
"include": "#image-inline"
},
{
"include": "#italic"
},
{
"include": "#bold"
},
{
"include": "#escape"
},
{
"include": "#bracket"
},
{
"include": "#ampersand"
}
]
},
"inline_raw": {
"patterns": [
{
"name": "markup.raw.inline.creole",
"match": "(\\{\\{\\{).*?(\\}\\}\\})",
"captures": {
"1": {
"name": "punctuation.definition.raw.creole"
},
"2": {
"name": "punctuation.definition.raw.creole"
}
}
}
]
},
"italic": {
"name": "markup.italic.creole",
"begin": "(?x)\n\t\t\t\t\t\t(\\/\\/)(?=\\S)\t\t\t\t\t\t\t\t\t# opening //\n\t\t\t\t\t\t(?=\t\t\t\t\t\t\t\t\t\t\t\t# zero-width positive lookahead\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t \u003c[^\u003e]*+\u003e\t\t\t\t\t\t# match any HTML tag\n\t\t\t\t\t\t\t | ~[\\\\*{}\\[\\]#\\|/\u003e]?+\t\t\t\t\t# or escape characters\n\t\t\t\t\t\t\t | \\[\t\t\t\t\t\t\t\t\t\t# or literal [\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t (?\u003csquare\u003e\t\t\t\t# named group\n\t\t\t\t\t\t\t\t\t\t\t[^\\[\\]~]\t\t\t\t\t# don't match these\n\t\t\t\t\t\t\t\t | ~.\t\t\t\t\t\t\t# or escaped characters\n\t\t\t\t\t\t\t\t | \\[ \\g\u003csquare\u003e*+ \\]\t# or nested group\n\t\t\t\t\t\t\t\t )*+\n\t\t\t\t\t\t\t\t\t\\]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t | (?!(?\u003c=\\S)\\1).\t\t\t\t\t\t# or everything else\n\t\t\t\t\t\t\t)++\n\t\t\t\t\t\t\t(?\u003c=\\S)\\1\t\t\t\t\t\t\t\t# closing //\n\t\t\t\t\t\t)\t\t\t\t\t\t\t\t\t\t\t\t# close positive lookahead\n\t\t\t\t\t",
"end": "(?\u003c=\\S)(\\1)((?!\\1)|(?=\\1\\1))",
"patterns": [
{
"begin": "(?=\u003c[^\u003e]*?\u003e)",
"end": "(?\u003c=\u003e)",
"patterns": [
{
"include": "text.html.basic"
}
],
"applyEndPatternLast": true
},
{
"include": "#inline"
}
],
"captures": {
"1": {
"name": "punctuation.definition.italic.creole"
}
}
},
"line-break": {
"name": "punctuation.definition.line-break.creole",
"match": " *(\\\\\\\\){1} *"
},
"link-email": {
"name": "meta.link.email.lt-gt.creole",
"match": "(\u003c)((?:mailto:)?[-.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)(\u003e)",
"captures": {
"1": {
"name": "invalid.illegal.punctuation.link.creole"
},
"2": {
"name": "markup.underline.link.creole"
},
"4": {
"name": "invalid.illegal.punctuation.link.creole"
}
}
},
"link-inet": {
"name": "meta.link.inet.creole",
"match": "(\u003c)?((?:https?|ftp)://[^\\s\u003e]+)(\u003e)?",
"captures": {
"1": {
"name": "invalid.illegal.punctuation.link.creole"
},
"2": {
"name": "markup.underline.link.creole"
},
"3": {
"name": "invalid.illegal.punctuation.link.creole"
}
}
},
"link-inline": {
"name": "meta.link.inline.creole",
"match": "(?x:\n\t\t\t\t(\\[\\[)\t\t\t\t\t\t# opening double square bracket\n\t\t\t\t(\\s*[^\\s\\|]+[^\\|]+?)\t\t# the url; anything except pipe (at least 1 not whitespace)\n\t\t\t\t((\\|)\t\t\t\t\t\t# pipe separator\n\t\t\t\t(\\s*[^\\|\\s]+[^\\|]+)\t\t\t# title text\n\t\t\t\t\t)?\t\t\t\t\t\t# pipe and title are optional\n\t\t\t\t(\\]\\])\t\t\t\t\t\t# close double square bracket (end link)\n\t\t\t )",
"captures": {
"1": {
"name": "punctuation.definition.link.creole"
},
"2": {
"name": "markup.underline.link.creole"
},
"4": {
"name": "punctuation.definition.link.creole"
},
"5": {
"name": "string.other.link.title.creole"
},
"6": {
"name": "punctuation.definition.link.creole"
}
}
},
"list-paragraph": {
"patterns": [
{
"name": "meta.paragraph.list.creole",
"begin": "\\G\\s+(?=\\S)",
"end": "^\\s*$",
"patterns": [
{
"include": "#inline"
}
]
}
]
}
}
}