UNPKG

@yozora/tokenizer-admonition

Version:
82 lines (74 loc) 2.9 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var FencedBlockTokenizer = require('@yozora/tokenizer-fenced-block'); var ast = require('@yozora/ast'); var character = require('@yozora/character'); var coreTokenizer = require('@yozora/core-tokenizer'); const match = function (api) { const hook = FencedBlockTokenizer.fencedBlockMatch.call(this, api); return { ...hook, isContainingBlock: true, onClose, }; function onClose(token) { const children = api.rollbackPhrasingLines(token.lines); token.children = children; } }; const parse = function (api) { return { parse: tokens => tokens.map(token => { const infoString = token.infoString; let i = 0; const keywordNodePoints = []; for (; i < infoString.length; ++i) { const p = infoString[i]; if (character.isUnicodeWhitespaceCharacter(p.codePoint)) break; keywordNodePoints.push(p); } i = coreTokenizer.eatOptionalWhitespaces(infoString, i, infoString.length); const title = (() => { if (i >= infoString.length) return []; const titleLines = [ { nodePoints: infoString, startIndex: i, endIndex: infoString.length, firstNonWhitespaceIndex: i, countOfPrecedeSpaces: 0, }, ]; const contents = coreTokenizer.mergeAndStripContentLines(titleLines); return api.processInlines(contents); })(); const keyword = character.calcEscapedStringFromNodePoints(keywordNodePoints, 0, keywordNodePoints.length, true); const children = api.parseBlockTokens(token.children); const node = api.shouldReservePosition ? { type: ast.AdmonitionType, position: token.position, keyword, title, children } : { type: ast.AdmonitionType, keyword, title, children }; return node; }), }; }; const uniqueName = '@yozora/tokenizer-admonition'; class AdmonitionTokenizer extends FencedBlockTokenizer { constructor(props = {}) { super({ name: props.name ?? uniqueName, priority: props.priority ?? coreTokenizer.TokenizerPriority.FENCED_BLOCK, nodeType: ast.AdmonitionType, markers: [character.AsciiCodePoint.COLON], markersRequired: 3, }); } match = match; parse = parse; } exports.AdmonitionTokenizer = AdmonitionTokenizer; exports.AdmonitionTokenizerName = uniqueName; exports.admonitionMatch = match; exports.admonitionParse = parse; exports.default = AdmonitionTokenizer;