UNPKG

@podlite/schema

Version:

AST tools for Podlite markup language

60 lines 2.65 kB
import * as fcparser from './grammarfc'; import makeTransformer from './helpers/makeTransformer'; import { isNamedBlock } from './helpers/makeTransformer'; import makeAttrs from './helpers/config'; const middle = () => tree => { const transformerBlocks = makeTransformer({ ':para': (n, ctx, visiter) => { return makeTransformer({ ':text': (n, ctx) => { return fcparser.parse(n.value); }, ':verbatim': (n, ctx) => { return fcparser.parse(n.value); }, })(n, { ...ctx }); return n; }, ':block': (n, ctx, visiter) => { // only =pod may have childs blocks if ('name' in n && n.name === 'pod') return { ...n, content: visiter(n.content, ctx, visiter), }; const conf = makeAttrs(n, ctx); const isCodeBlock = 'name' in n && n.name === 'code'; const isDataBlock = 'name' in n && n.name === 'data'; const isMarkdownBlock = 'name' in n && n.name === 'markdown'; const isPictureBlock = 'name' in n && n.name === 'picture'; const isFormulaBlock = 'name' in n && n.name === 'formula'; const allowValues = [...conf.getAllValues('allow'), ...(isCodeBlock ? ['NONE'] : [])]; if (isNamedBlock(n.name)) return n; // for code block not parse content by default if ((isCodeBlock || isDataBlock || isMarkdownBlock || isPictureBlock || isFormulaBlock) && allowValues.length == 0) return n; const allowed = allowValues.sort(); const transformer = makeTransformer({ ':verbatim': (n, ctx) => { // special case for code block, 'NONE' - flag disabled all markup codes // do not parse content by default if (allowed.length == 1 && allowed.includes('NONE')) return n; return fcparser.parse(n.value, { allowed }); }, ':text': (n, ctx) => { return fcparser.parse(n.value, { allowed }); }, ':block': (n, ctx) => { return transformerBlocks(n, { ...ctx }); }, }); return { ...n, content: transformer(n.content, { ...ctx }) }; }, }); return transformerBlocks(tree, {}); }; export default middle; //# sourceMappingURL=plugin-formatting-codes.js.map