diff --git a/src/parser.pegjs b/src/parser.pegjs index 34dd956cf87f2574565a5de3ba8fb74f8f28f510..9a3d97768acf6b68e382f8fc76e2a0c36e3f5d10 100644 --- a/src/parser.pegjs +++ b/src/parser.pegjs @@ -386,7 +386,7 @@ fnArg // inline: text text - = . { return createNode('text', { text: text() }); } + = . // // General diff --git a/src/util.ts b/src/util.ts index 8b96d189672df8d8e189fc151f9f054ccc09e94b..d2865506b85f124286b55797145b72f893441008 100644 --- a/src/util.ts +++ b/src/util.ts @@ -30,45 +30,37 @@ export function groupContinuous<T>(arr: T[], predicate: (prev: T, current: T) => return dest; } -export function mergeGroupedTrees(groupedTrees: MfmNode[][]): MfmNode[] { - return groupedTrees.reduce((acc, val) => acc.concat(val), ([] as MfmNode[])); +export function mergeGroupedTrees<T>(groupedTrees: T[][]): T[] { + return groupedTrees.reduce((acc, val) => acc.concat(val), ([] as T[])); } -export function mergeText(trees: MfmNode[] | undefined, recursive?: boolean): MfmNode[] | undefined { - let dest: MfmNode[]; - let groupes: MfmNode[][]; - - if (trees == null) { - return trees; - } - +export function mergeText(trees: (MfmNode | string)[]): MfmNode[] { // group trees - groupes = groupContinuous(trees, (prev, current) => prev.type == current.type); + const groupes = groupContinuous(trees, (prev, current) => { + if (typeof prev == 'string' || typeof current == 'string') { + return (typeof prev == 'string' && typeof current == 'string'); + } + else { + return (prev.type == current.type); + } + }); // concatinate text - groupes = groupes.map((group) => { - if (group[0].type == 'text') { + const concatGroupes = groupes.map((group) => { + if (typeof group[0] == 'string') { return [ createNode('text', { - text: group.map(i => (i as MfmText).props.text).join('') + text: (group as string[]).join('') }) ]; } - return group; + return (group as MfmNode[]); }); // merge groups - dest = mergeGroupedTrees(groupes); + const dest = mergeGroupedTrees(concatGroupes); - if (recursive) { - return dest.map(tree => { - // apply recursively to children - return createNode(tree.type, tree.props, recursive ? mergeText(tree.children) : tree.children); - }); - } - else { - return dest; - } + return dest; } export function stringifyNode(node: MfmNode): string {