| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 'use strict'
- var visit = require('unist-util-visit')
- module.exports = compact
- // Make an mdast tree compact by merging adjacent text nodes.
- function compact(tree, commonmark) {
- visit(tree, visitor)
- return tree
- function visitor(child, index, parent) {
- var siblings = parent ? parent.children : []
- var prev = index && siblings[index - 1]
- if (
- prev &&
- child.type === prev.type &&
- mergeable(prev, commonmark) &&
- mergeable(child, commonmark)
- ) {
- if (child.value) {
- prev.value += child.value
- }
- if (child.children) {
- prev.children = prev.children.concat(child.children)
- }
- siblings.splice(index, 1)
- if (prev.position && child.position) {
- prev.position.end = child.position.end
- }
- return index
- }
- }
- }
- function mergeable(node, commonmark) {
- var start
- var end
- if (node.type === 'text') {
- if (!node.position) {
- return true
- }
- start = node.position.start
- end = node.position.end
- // Only merge nodes which occupy the same size as their `value`.
- return (
- start.line !== end.line || end.column - start.column === node.value.length
- )
- }
- return commonmark && node.type === 'blockquote'
- }
|