Skip to content
Snippets Groups Projects
Commit 4fe75b13 authored by marihachi's avatar marihachi
Browse files

wip

parent ae2296d6
No related branches found
No related tags found
No related merge requests found
...@@ -386,7 +386,7 @@ fnArg ...@@ -386,7 +386,7 @@ fnArg
// inline: text // inline: text
text text
= . { return createNode('text', { text: text() }); } = .
// //
// General // General
......
...@@ -30,45 +30,37 @@ export function groupContinuous<T>(arr: T[], predicate: (prev: T, current: T) => ...@@ -30,45 +30,37 @@ export function groupContinuous<T>(arr: T[], predicate: (prev: T, current: T) =>
return dest; return dest;
} }
export function mergeGroupedTrees(groupedTrees: MfmNode[][]): MfmNode[] { export function mergeGroupedTrees<T>(groupedTrees: T[][]): T[] {
return groupedTrees.reduce((acc, val) => acc.concat(val), ([] as MfmNode[])); return groupedTrees.reduce((acc, val) => acc.concat(val), ([] as T[]));
} }
export function mergeText(trees: MfmNode[] | undefined, recursive?: boolean): MfmNode[] | undefined { export function mergeText(trees: (MfmNode | string)[]): MfmNode[] {
let dest: MfmNode[];
let groupes: MfmNode[][];
if (trees == null) {
return trees;
}
// group trees // 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 // concatinate text
groupes = groupes.map((group) => { const concatGroupes = groupes.map((group) => {
if (group[0].type == 'text') { if (typeof group[0] == 'string') {
return [ return [
createNode('text', { 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 // merge groups
dest = mergeGroupedTrees(groupes); const dest = mergeGroupedTrees(concatGroupes);
if (recursive) { return dest;
return dest.map(tree => {
// apply recursively to children
return createNode(tree.type, tree.props, recursive ? mergeText(tree.children) : tree.children);
});
}
else {
return dest;
}
} }
export function stringifyNode(node: MfmNode): string { export function stringifyNode(node: MfmNode): string {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment