blob: b7d631572c1187b3206394b7c0d016b61157563c [file] [log] [blame]
Simon Zündaebbf4f2024-06-27 08:42:161import { Line, Spec } from '../primitives.js';
2import { seedSpec } from '../util.js';
3import { Tokenizer } from './tokenizers/index.js';
Jack Franklinfd72c072022-12-21 11:45:014
5export type Parser = (source: Line[]) => Spec;
6
7export interface Options {
8 tokenizers: Tokenizer[];
9}
10
11export default function getParser({ tokenizers }: Options): Parser {
12 return function parseSpec(source: Line[]): Spec {
13 let spec = seedSpec({ source });
14 for (const tokenize of tokenizers) {
15 spec = tokenize(spec);
16 if (spec.problems[spec.problems.length - 1]?.critical) break;
17 }
18 return spec;
19 };
20}