UNPKG

@maniascript/api

Version:

Maniascript API generator

40 lines (39 loc) 1.45 kB
import { CharStream, CommonTokenStream, BaseErrorListener } from 'antlr4ng'; import { DocCommentLexer } from '../antlr/DocCommentLexer.js'; import { DocCommentParser } from '../antlr/DocCommentParser.js'; import { DocVisitor } from './doc-visitor.js'; class MSDocErrorListener extends BaseErrorListener { errors = []; syntaxError(_recognizer, _offendingSymbol, line, column, msg) { this.errors.push({ message: msg, line, column }); } } function parse(input = '') { const errorListener = new MSDocErrorListener(); const inputStream = CharStream.fromString(input); const lexer = new DocCommentLexer(inputStream); lexer.removeErrorListeners(); lexer.addErrorListener(errorListener); const tokenStream = new CommonTokenStream(lexer); const parser = new DocCommentParser(tokenStream); parser.removeErrorListeners(); parser.addErrorListener(errorListener); const tree = parser.documentation(); return { success: errorListener.errors.length === 0, errors: errorListener.errors, tree, chars: inputStream, lexer, tokens: tokenStream, parser: parser }; } function generateFromParseResult(result) { const visitor = new DocVisitor(); return visitor.visit(result.tree); } function generateFromInput(input = '') { return generateFromParseResult(parse(input)); } export { parse, generateFromParseResult, generateFromInput };