ttrpg-tools/src/markdown/columns.ts

64 lines
1.8 KiB
TypeScript

import {TokenizerAndRendererExtension} from "marked";
export default function markedColumns(): TokenizerAndRendererExtension[] {
return [{
name: 'col-divider',
level: 'block',
start(src: string) {
return src.match(/^-\|-+ *\n/)?.index;
},
tokenizer(src){
const match = src.match(/^-\|(-+) *\n/);
if(!match) return;
return {
type: 'col-divider',
raw: match[0],
tokens: []
};
},
renderer(token){
const extra = token.raw.match(/^-\|(-+) *\n/)?.[1].length || 0;
const sfx = extra > 1 ? '-' + (extra) : '';
return `</div><div class="col${sfx}">`;
}
},{
name: 'col-start',
level: 'block',
start(src: string) {
return src.match(/^\|--+ *\n/)?.index;
},
tokenizer(src){
const match = src.match(/^\|-(-+) *\n/);
if(!match) return;
return {
type: 'col-start',
raw: match[0],
tokens: []
};
},
renderer(token){
const extra = token.raw.match(/^\|-(-+) *\n/)?.[1].length || 0;
const sfx = extra > 1 ? '-' + (extra) : '';
return `<div class="cols"><div class="col${sfx}">`;
}
},{
name: 'col-end',
level: 'block',
start(src: string) {
return src.match(/^--\| *\n/)?.index;
},
tokenizer(src){
const match = src.match(/^--\| *\n/);
if(!match) return;
return {
type: 'col-end',
raw: match[0],
tokens: []
};
},
renderer(token){
return `</div></div>`;
}
}
];
}