/
parse-docs.ts
33 lines (29 loc) · 887 Bytes
/
parse-docs.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import { Document } from '../doc/Document'
import { Parser } from '../parse/parser'
import { composeDoc } from './compose-doc'
import { StreamDirectives } from './stream-directives'
export function parseDocs(source: string) {
const directives = new StreamDirectives()
const docs: Document.Parsed[] = []
const lines: number[] = []
const onError = (offset: number, message: string, warning?: boolean) => {
console.error(warning ? '???' : '!!!', { offset, message })
}
const parser = new Parser(
token => {
switch (token.type) {
case 'directive':
directives.add(token.source, onError)
break
case 'document':
docs.push(composeDoc(null, directives, token, onError))
break
default:
console.log('###', token)
}
},
n => lines.push(n)
)
parser.parse(source)
return docs
}