blob: c39faf28a5f77ab9f4233148d94c8d21c4bf1a1e [file] [log] [blame]
Jack Franklinfd72c072022-12-21 11:45:011import { Line, Spec } from '../primitives';
2import { seedSpec } from '../util';
3import { Tokenizer } from './tokenizers/index';
4
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}