mirror of
https://activitypub.software/TransFem-org/sfm-js
synced 2024-11-24 23:15:14 +00:00
wip
This commit is contained in:
parent
ae2296d6e1
commit
4fe75b1341
2 changed files with 18 additions and 26 deletions
|
@ -386,7 +386,7 @@ fnArg
|
|||
// inline: text
|
||||
|
||||
text
|
||||
= . { return createNode('text', { text: text() }); }
|
||||
= .
|
||||
|
||||
//
|
||||
// General
|
||||
|
|
40
src/util.ts
40
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;
|
||||
}
|
||||
}
|
||||
|
||||
export function stringifyNode(node: MfmNode): string {
|
||||
|
|
Loading…
Reference in a new issue