docutils-ts
Version:
Port of the Python Docutils library to TypeScript
57 lines (56 loc) • 2.1 kB
JavaScript
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;