UNPKG

docutils-ts

Version:

Port of the Python Docutils library to TypeScript

57 lines (56 loc) 2.1 kB
import SpecializedBody from './specializedBody.js'; import MarkupError from '../markupError.js'; /** * Second and subsequent explicit markup construct. */ class Explicit extends SpecializedBody { constructor() { super(...arguments); this.blank = () => { this.invalid_input(); }; } /** Footnotes, hyperlink targets, directives, comments. */ explicit_markup(match, context, nextState) { const [nodelist, blankFinish] = this.explicit_construct(match); this.parent.add(nodelist); this.blankFinish = blankFinish; return [[], nextState, []]; } /** Determine which explicit construct this is, parse & return it. */ explicit_construct(match) { const errors = []; if (this.explicit) { for (const [method, pattern] of this.explicit.constructs) { const expmatch = pattern.exec(match.result.input); if (expmatch) { try { const r = method(expmatch); // console.log(r); return r; } catch (error) { if (error instanceof MarkupError) { const lineno = this.rstStateMachine.absLineNumber(); const message = error.message; errors.push(this.reporter.warning(message, [], { line: lineno })); break; } throw error; } } } } const [nodelist, blankFinish] = this.comment(match); return [[...nodelist, ...errors], blankFinish]; } /** Anonymous hyperlink targets. */ anonymous(match, context, nextState) { const [nodelist, blankFinish] = this.anonymous_target(match); this.parent.add(nodelist); this.blankFinish = blankFinish; return [[], nextState, []]; } } Explicit.stateName = 'Explicit'; export default Explicit;