diff --git a/src/markdown/markdown.ts b/src/markdown/markdown.ts index 4b0653a8..9fa4dbca 100644 --- a/src/markdown/markdown.ts +++ b/src/markdown/markdown.ts @@ -57,6 +57,9 @@ export const language = { tokenizer: { root: [ + // markdown tables + [/^\s*\|/, '@rematch', '@table_header'], + // headers (with #) [/^(\s{0,3})(#+)((?:[^\\#]|@escapes)+)((?:#+)?)/, ['white', 'keyword', 'keyword', 'keyword']], @@ -88,6 +91,29 @@ export const language = { { include: '@linecontent' }, ], + table_header: [ + { include: '@table_common' }, + [/[^\|]+/, 'keyword.table.header'], // table header + ], + + table_body: [ + { include: '@table_common' }, + { include: '@linecontent' }, + ], + + table_common: [ + [/\s*[\-:]+\s*/, { token: 'keyword', switchTo: 'table_body' }], // header-divider + [/^\s*\|/, 'keyword.table.left'], // opening | + [/^\s*[^\|]/, '@rematch', '@pop'], // exiting + [/^\s*$/, '@rematch', '@pop'], // exiting + [/\|/, { + cases: { + '@eos': 'keyword.table.right', // closing | + '@default': 'keyword.table.middle', // inner | + } + }], + ], + codeblock: [ [/^\s*~~~\s*$/, { token: 'string', next: '@pop' }], [/^\s*```\s*$/, { token: 'string', next: '@pop' }],