64 lines
1.2 KiB
TypeScript
64 lines
1.2 KiB
TypeScript
const joiner = "<><>";
|
|
export const inlineTokens: {
|
|
rx: RegExp;
|
|
create: (
|
|
content: RegExpExecArray,
|
|
start: number,
|
|
end: number,
|
|
tokens: InlineTokenInsert[],
|
|
) => void;
|
|
replace: (line: string) => string;
|
|
}[] = [
|
|
{
|
|
rx: /(\*\*)(.*?)(\*\*)/g,
|
|
create(content, start, end, tokens) {
|
|
tokens.push({
|
|
content: this.replace(content[0]),
|
|
type: "bold",
|
|
end,
|
|
start,
|
|
});
|
|
},
|
|
replace(l) {
|
|
return l.replace(this.rx, (_, __, val) => val);
|
|
},
|
|
},
|
|
{
|
|
rx: /(?<!\!)\[(.*?)\]\((.*?)\)/g,
|
|
create(content, start, end, tokens) {
|
|
const [_, label, href] = content;
|
|
tokens.push({
|
|
content: label,
|
|
type: "anchor",
|
|
data: {
|
|
href,
|
|
},
|
|
start,
|
|
end,
|
|
});
|
|
},
|
|
replace(l) {
|
|
return l.replace(this.rx, (_, label, href) => [label, href].join(joiner));
|
|
// return l
|
|
},
|
|
},
|
|
{
|
|
rx: /!\[(.*?)\]\((.*?)\)/g,
|
|
create(content, start, end, tokens) {
|
|
const [_, alt, src] = content;
|
|
tokens.push({
|
|
content: alt,
|
|
end,
|
|
start,
|
|
type: "image",
|
|
data: {
|
|
src,
|
|
},
|
|
});
|
|
},
|
|
replace(l) {
|
|
return l;
|
|
},
|
|
},
|
|
];
|