64 lines
1.8 KiB
TypeScript
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>`;
|
|
}
|
|
}
|
|
];
|
|
} |