in js/src/mf2-parse.ts [51:77]
function patternPart(part: string | MF2Expression | MF2Markup) {
if (typeof part === 'string') return part
if (part.type === 'expression') {
const expr = {} as Expression
if (part.arg) {
if (part.arg.type === 'literal') expr._ = part.arg.value
else expr.$ = part.arg.name
}
if (part.functionRef) {
expr.fn = part.functionRef.name
expr.opt = options(part.functionRef.options)
}
expr.attr = attributes(part.attributes)
return expr
} else {
const opt = options(part.options)
const attr = attributes(part.attributes)
switch (part.kind) {
case 'open':
return { open: part.name, opt, attr }
case 'close':
return { close: part.name, opt, attr }
default:
return { elem: part.name, opt, attr }
}
}
}