Skip to content
Snippets Groups Projects
unified.ts 1.62 KiB
Newer Older
James-Yu's avatar
James-Yu committed
import * as workerpool from 'workerpool'
import type * as Ast from '@unified-latex/unified-latex-types'
James Yu's avatar
James Yu committed
// import { getParser } from '@unified-latex/unified-latex-util-parse'
// import { attachMacroArgs } from '@unified-latex/unified-latex-util-arguments'
James-Yu's avatar
James-Yu committed
import { bibtexParser } from 'latex-utensils'

James Yu's avatar
James Yu committed
// @ts-expect-error Load unified.js from /out/src/...
import { getParser, attachMacroArgs } from '../../../../resources/unified.js'

James-Yu's avatar
James-Yu committed
type UnifiedParser = { parse: (content: string) => Ast.Root }
James Yu's avatar
James Yu committed

// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
let unifiedParser: UnifiedParser = getParser({ flags: { autodetectExpl3AndAtLetter: true } })
James-Yu's avatar
James-Yu committed

function parseLaTeX(content: string): Ast.Root {
    return unifiedParser.parse(content)
}

function parseArgs(ast: Ast.Root, macros: Ast.MacroInfoRecord) {
    // eslint-disable-next-line @typescript-eslint/no-unsafe-call
James Yu's avatar
James Yu committed
    attachMacroArgs(ast, macros)
James-Yu's avatar
James-Yu committed
}

function reset(macros: Ast.MacroInfoRecord, environments: Ast.EnvInfoRecord) {
James Yu's avatar
James Yu committed
    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
    unifiedParser = getParser({ macros, environments, flags: { autodetectExpl3AndAtLetter: true } })
function parseBibTeX(s: string): bibtexParser.BibtexAst | string | undefined {
        return bibtexParser.parse(s)
        if (bibtexParser.isSyntaxError(err)) {
            return JSON.stringify(err)
James-Yu's avatar
James-Yu committed
}

const worker = {
    parseLaTeX,
    parseArgs,
    reset,
    parseBibTeX
}

workerpool.worker(worker)

export type Worker = typeof worker