/** * @typedef {import('nlcst').Paragraph} Paragraph * @typedef {import('nlcst').Sentence} Sentence */ import {toString} from 'nlcst-to-string' import {modifyChildren} from 'unist-util-modify-children' // Break a sentence if a white space with more than one new-line is found. export const breakImplicitSentences = modifyChildren( /** * @type {import('unist-util-modify-children').Modifier} */ function (child, index, parent) { if (child.type !== 'SentenceNode') { return } const children = child.children // Ignore first and last child. let position = 0 while (++position < children.length - 1) { const node = children[position] if ( node.type !== 'WhiteSpaceNode' || toString(node).split(/\r\n|\r|\n/).length < 3 ) { continue } child.children = children.slice(0, position) /** @type {Sentence} */ const insertion = { type: 'SentenceNode', children: children.slice(position + 1) } const tail = children[position - 1] const head = children[position + 1] parent.children.splice(index + 1, 0, node, insertion) if (child.position && tail.position && head.position) { const end = child.position.end child.position.end = tail.position.end insertion.position = {start: head.position.start, end} } return index + 1 } } )