UNPKG

@flowscripter/mpeg-sdl-parser

Version:

ISO/IEC 14496-34 Syntactic Description Language (MPEG SDL) parser implemented in TypeScript

50 lines (44 loc) 1.45 kB
import type { Parser, Plugin, Printer, SupportLanguage } from "prettier"; import { printNode } from "./print_node"; import type { AbstractNode } from "../ast/node/AbstractNode"; import { createStrictSdlParser } from "../lezer/createSdlParser"; import { buildAst } from "../ast/buildAst"; import { SdlStringInput } from "../lezer/SdlStringInput"; const languages: SupportLanguage[] = [ { name: "sdl", parsers: ["sdl"], }, ]; const parsers: Record<string, Parser<AbstractNode>> = { sdl: { astFormat: "sdl", parse: (sdlSpecification: string) => { const sdlStringInput = new SdlStringInput(sdlSpecification); const sdlParser = createStrictSdlParser(); const parseTree = sdlParser.parse(sdlSpecification); return buildAst(parseTree, sdlStringInput); }, locStart: (node: AbstractNode) => { return node.startToken.leadingTrivia.length > 0 ? node.startToken.leadingTrivia[0].location.position : node.startToken.location.position; }, locEnd: (node: AbstractNode) => { return node.endToken.trailingTrivia.length > 0 ? node.endToken.trailingTrivia[node.endToken.trailingTrivia.length - 1] .location.position : node.endToken.location.position; }, }, }; const printers: Record<string, Printer<AbstractNode>> = { "sdl": { print: printNode, }, }; export const prettierPluginSdl: Plugin = { languages, parsers, printers, };