carta-md
Version:
A lightweight, fully customizable, Markdown editor
1,035 lines • 82.6 kB
JavaScript
import {} from 'shiki';
const lang = {
displayName: 'CartaMarkdown',
name: 'cartamd',
patterns: [{ include: '#frontMatter' }, { include: '#block' }],
repository: {
$self: {},
$base: {},
ampersand: {
// comment:
// 'Markdown will convert this for us. We match it so that the HTML grammar will not mark it up as invalid.',
match: '&(?!([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+);)',
name: 'meta.other.valid-ampersand.markdown'
},
block: {
patterns: [
{ include: '#separator' },
{ include: '#heading' },
{ include: '#blockquote' },
{ include: '#lists' },
{ include: '#fenced_code_block' },
{ include: '#raw_block' },
{ include: '#link-def' },
{ include: '#html' },
{ include: '#table' },
{ include: '#paragraph' }
]
},
blockquote: {
begin: '(^|\\G)[ ]{0,3}(>) ?',
captures: { '2': { name: 'punctuation.definition.quote.begin.markdown' } },
name: 'markup.quote.markdown',
patterns: [{ include: '#block' }],
while: '(^|\\G)\\s*(>) ?'
},
bold: {
begin: '(?x) (?<open>(\\*\\*(?=\\w)|(?<!\\w)\\*\\*|(?<!\\w)\\b__))(?=\\S) (?=\n(\n<[^>]*+>\n| (?<raw>`+)([^`]|(?!(?<!`)\\k<raw>(?!`))`)*+\\k<raw>\n\n| \\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+\n| \\[\n(\n(?<square>\n[^\\[\\]\\\\]\n| \\\\.\n| \\[ \\g<square>*+ \\]\n)*+\n\\]\n(\n(\n[ ]?\n\\[[^\\]]*+\\]\n)\n| (\n\\(\n[ \\t]*+\n<?(.*?)>?\n[ \\t]*+\n(\n(?<title>[\'"])\n(.*?)\n\\k<title>\n)?\n\\)\n)\n)\n)\n| (?!(?<=\\S)\\k<open>).\n\n)++\n(?<=\\S)(?=__\\b|\\*\\*)\\k<open>\n)\n',
captures: { '1': { name: 'punctuation.definition.bold.markdown' } },
end: '(?<=\\S)(\\1)',
name: 'markup.bold.markdown',
patterns: [
{
applyEndPatternLast: true,
begin: '(?=<[^>]*?>)',
end: '(?<=>)',
patterns: [{ include: 'text.html.derivative' }]
},
{ include: '#escape' },
{ include: '#ampersand' },
{ include: '#bracket' },
{ include: '#raw' },
{ include: '#bold' },
{ include: '#italic' },
{ include: '#image-inline' },
{ include: '#link-inline' },
{ include: '#link-inet' },
{ include: '#link-email' },
{ include: '#image-ref' },
{ include: '#link-ref-literal' },
{ include: '#link-ref' },
{ include: '#link-ref-shortcut' },
{ include: '#strikethrough' }
]
},
bracket: {
// comment:
// 'Markdown will convert this for us. We match it so that the HTML grammar will not mark it up as invalid.',
match: '<(?![a-zA-Z/?\\$!])',
name: 'meta.other.valid-bracket.markdown'
},
escape: { match: '\\\\[-`*_#+.!(){}\\[\\]\\\\>]', name: 'constant.character.escape.markdown' },
fenced_code_block: {
patterns: [
{ include: '#fenced_code_block_css' },
{ include: '#fenced_code_block_basic' },
{ include: '#fenced_code_block_ini' },
{ include: '#fenced_code_block_java' },
{ include: '#fenced_code_block_lua' },
{ include: '#fenced_code_block_makefile' },
{ include: '#fenced_code_block_perl' },
{ include: '#fenced_code_block_r' },
{ include: '#fenced_code_block_ruby' },
{ include: '#fenced_code_block_php' },
{ include: '#fenced_code_block_sql' },
{ include: '#fenced_code_block_vs_net' },
{ include: '#fenced_code_block_xml' },
{ include: '#fenced_code_block_xsl' },
{ include: '#fenced_code_block_yaml' },
{ include: '#fenced_code_block_dosbatch' },
{ include: '#fenced_code_block_clojure' },
{ include: '#fenced_code_block_coffee' },
{ include: '#fenced_code_block_c' },
{ include: '#fenced_code_block_cpp' },
{ include: '#fenced_code_block_diff' },
{ include: '#fenced_code_block_dockerfile' },
{ include: '#fenced_code_block_git_commit' },
{ include: '#fenced_code_block_git_rebase' },
{ include: '#fenced_code_block_go' },
{ include: '#fenced_code_block_groovy' },
{ include: '#fenced_code_block_pug' },
{ include: '#fenced_code_block_js' },
{ include: '#fenced_code_block_js_regexp' },
{ include: '#fenced_code_block_json' },
{ include: '#fenced_code_block_jsonc' },
{ include: '#fenced_code_block_less' },
{ include: '#fenced_code_block_objc' },
{ include: '#fenced_code_block_swift' },
{ include: '#fenced_code_block_scss' },
{ include: '#fenced_code_block_perl6' },
{ include: '#fenced_code_block_powershell' },
{ include: '#fenced_code_block_python' },
{ include: '#fenced_code_block_julia' },
{ include: '#fenced_code_block_regexp_python' },
{ include: '#fenced_code_block_rust' },
{ include: '#fenced_code_block_scala' },
{ include: '#fenced_code_block_shell' },
{ include: '#fenced_code_block_ts' },
{ include: '#fenced_code_block_tsx' },
{ include: '#fenced_code_block_csharp' },
{ include: '#fenced_code_block_fsharp' },
{ include: '#fenced_code_block_dart' },
{ include: '#fenced_code_block_handlebars' },
{ include: '#fenced_code_block_markdown' },
{ include: '#fenced_code_block_log' },
{ include: '#fenced_code_block_erlang' },
{ include: '#fenced_code_block_elixir' },
{ include: '#fenced_code_block_latex' },
{ include: '#fenced_code_block_tex' },
{ include: '#fenced_code_block_bibtex' },
{ include: '#fenced_code_block_twig' },
{ include: '#fenced_code_block_unknown' }
]
},
fenced_code_block_basic: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(html|htm|shtml|xhtml|inc|tmpl|tpl)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.html',
patterns: [{ include: 'text.html.basic' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_bibtex: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(bibtex)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.bibtex',
patterns: [{ include: 'text.bibtex' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_c: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(c|h)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.c',
patterns: [{ include: 'source.c' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_clojure: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(clj|cljs|clojure)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.clojure',
patterns: [{ include: 'source.clojure' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_coffee: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(coffee|Cakefile|coffee.erb)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.coffee',
patterns: [{ include: 'source.coffee' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_cpp: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(cpp|c\\+\\+|cxx)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.cpp source.cpp',
patterns: [{ include: 'source.cpp' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_csharp: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(cs|csharp|c#)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.csharp',
patterns: [{ include: 'source.cs' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_css: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(css|css.erb)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.css',
patterns: [{ include: 'source.css' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_dart: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(dart)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.dart',
patterns: [{ include: 'source.dart' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_diff: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(patch|diff|rej)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.diff',
patterns: [{ include: 'source.diff' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_dockerfile: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(dockerfile|Dockerfile)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.dockerfile',
patterns: [{ include: 'source.dockerfile' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_dosbatch: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(bat|batch)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.dosbatch',
patterns: [{ include: 'source.batchfile' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_elixir: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(elixir)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.elixir',
patterns: [{ include: 'source.elixir' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_erlang: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(erlang)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.erlang',
patterns: [{ include: 'source.erlang' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_fsharp: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(fs|fsharp|f#)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.fsharp',
patterns: [{ include: 'source.fsharp' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_git_commit: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(COMMIT_EDITMSG|MERGE_MSG)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.git_commit',
patterns: [{ include: 'text.git-commit' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_git_rebase: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(git-rebase-todo)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.git_rebase',
patterns: [{ include: 'text.git-rebase' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_go: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(go|golang)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.go',
patterns: [{ include: 'source.go' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_groovy: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(groovy|gvy)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.groovy',
patterns: [{ include: 'source.groovy' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_handlebars: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(handlebars|hbs)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.handlebars',
patterns: [{ include: 'text.html.handlebars' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_ini: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(ini|conf)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.ini',
patterns: [{ include: 'source.ini' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_java: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(java|bsh)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.java',
patterns: [{ include: 'source.java' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_js: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(js|jsx|javascript|es6|mjs|cjs|dataviewjs|\\{\\.js.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.javascript',
patterns: [{ include: 'source.js' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_js_regexp: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(regexp)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.js_regexp',
patterns: [{ include: 'source.js.regexp' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_json: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(json|json5|sublime-settings|sublime-menu|sublime-keymap|sublime-mousemap|sublime-theme|sublime-build|sublime-project|sublime-completions)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.json',
patterns: [{ include: 'source.json' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_jsonc: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(jsonc)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.jsonc',
patterns: [{ include: 'source.json.comments' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_julia: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(julia|\\{\\.julia.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.julia',
patterns: [{ include: 'source.julia' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_latex: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(latex)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.latex',
patterns: [{ include: 'text.tex.latex' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_tex: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(tex)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.tex',
patterns: [{ include: 'text.tex' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_less: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(less)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.less',
patterns: [{ include: 'source.css.less' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_log: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(log)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.log',
patterns: [{ include: 'text.log' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_lua: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(lua)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.lua',
patterns: [{ include: 'source.lua' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_makefile: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(Makefile|makefile|GNUmakefile|OCamlMakefile)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.makefile',
patterns: [{ include: 'source.makefile' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_markdown: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(markdown|md)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.markdown',
patterns: [{ include: 'text.html.markdown' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_objc: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(objectivec|objective-c|mm|objc|obj-c|m|h)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.objc',
patterns: [{ include: 'source.objc' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_perl: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(perl|pl|pm|pod|t|PL|psgi|vcl)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.perl',
patterns: [{ include: 'source.perl' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_perl6: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(perl6|p6|pl6|pm6|nqp)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.perl6',
patterns: [{ include: 'source.perl.6' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_php: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(php|php3|php4|php5|phpt|phtml|aw|ctp)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.php',
patterns: [{ include: 'text.html.basic' }, { include: 'source.php' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_powershell: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(powershell|ps1|psm1|psd1|pwsh)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.powershell',
patterns: [{ include: 'source.powershell' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_pug: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(jade|pug)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.pug',
patterns: [{ include: 'text.pug' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_python: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(python|py|py3|rpy|pyw|cpy|SConstruct|Sconstruct|sconstruct|SConscript|gyp|gypi|\\{\\.python.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.python',
patterns: [{ include: 'source.python' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_r: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(R|r|s|S|Rprofile|\\{\\.r.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.r',
patterns: [{ include: 'source.r' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_regexp_python: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(re)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.regexp_python',
patterns: [{ include: 'source.regexp.python' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_ruby: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(ruby|rb|rbx|rjs|Rakefile|rake|cgi|fcgi|gemspec|irbrc|Capfile|ru|prawn|Cheffile|Gemfile|Guardfile|Hobofile|Vagrantfile|Appraisals|Rantfile|Berksfile|Berksfile.lock|Thorfile|Puppetfile)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.ruby',
patterns: [{ include: 'source.ruby' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_rust: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(rust|rs|\\{\\.rust.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.rust',
patterns: [{ include: 'source.rust' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_scala: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(scala|sbt)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.scala',
patterns: [{ include: 'source.scala' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_scss: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(scss)((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdown' } },
name: 'markup.fenced_code.block.markdown',
patterns: [
{
begin: '(^|\\G)(\\s*)(.*)',
contentName: 'meta.embedded.block.scss',
patterns: [{ include: 'source.css.scss' }],
while: '(^|\\G)(?!\\s*([`~]{3,})\\s*$)'
}
]
},
fenced_code_block_shell: {
begin: '(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(shell|sh|bash|zsh|bashrc|bash_profile|bash_login|profile|bash_logout|.textmate_init|\\{\\.bash.+?\\})((\\s+|:|,|\\{|\\?)[^`]*)?$)',
beginCaptures: {
'3': { name: 'punctuation.definition.markdown' },
'4': { name: 'fenced_code.block.language.markdown' },
'5': { name: 'fenced_code.block.language.attributes.markdown' }
},
end: '(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$',
endCaptures: { '3': { name: 'punctuation.definition.markdow