28 lines
877 B
JavaScript
28 lines
877 B
JavaScript
import {modifyChildren} from 'unist-util-modify-children'
|
|
|
|
// Merge multiple words. This merges the children of adjacent words, something
|
|
// which should not occur naturally by parse-latin, but might happen when custom
|
|
// tokens were passed in.
|
|
export const mergeWords = modifyChildren(function (child, index, parent) {
|
|
const siblings = parent.children
|
|
|
|
if (child.type === 'WordNode') {
|
|
const next = siblings[index + 1]
|
|
|
|
if (next && next.type === 'WordNode') {
|
|
// Remove `next` from parent.
|
|
siblings.splice(index + 1, 1)
|
|
|
|
// Add the punctuation mark at the end of the previous node.
|
|
child.children = child.children.concat(next.children)
|
|
|
|
// Update position.
|
|
if (next.position && child.position) {
|
|
child.position.end = next.position.end
|
|
}
|
|
|
|
// Next, re-iterate the current node.
|
|
return index
|
|
}
|
|
}
|
|
})
|