first commit; migrate code from minimal/docs-server
This commit is contained in:
37
src/section.ts
Normal file
37
src/section.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
|
||||
import { marked } from 'marked';
|
||||
import { ParsedAttributes, parse_attributes } from './attrs';
|
||||
import { MarkdownOptions } from './render';
|
||||
|
||||
export interface SectionToken extends marked.Tokens.Generic {
|
||||
text: string;
|
||||
attrs: ParsedAttributes;
|
||||
}
|
||||
|
||||
export function section_ext(renderer: marked.Renderer, opts: MarkdownOptions) : marked.TokenizerExtension & marked.RendererExtension {
|
||||
return {
|
||||
name: 'section',
|
||||
level: 'block',
|
||||
start: (src) => src.match(/^!!!/)?.index,
|
||||
tokenizer(src, tokens) {
|
||||
const rule = /^!!!(!*)([^\n]+)?(?:\n)((?:[^!]|!!?(?!!\1))+)!!!\1/;
|
||||
const match = rule.exec(src);
|
||||
|
||||
if (match) {
|
||||
const token: SectionToken = {
|
||||
type: 'section',
|
||||
raw: match[0],
|
||||
text: match[3],
|
||||
attrs: parse_attributes(match[2] || ''),
|
||||
tokens: [ ],
|
||||
};
|
||||
|
||||
this.lexer.blockTokens(match[3], token.tokens);
|
||||
return token;
|
||||
}
|
||||
},
|
||||
renderer(token: SectionToken) {
|
||||
return `<section ${token.attrs.html_attrs.join(' ')}>${this.parser.parse(token.tokens)}</section>`;
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user