| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /**
- * @import {State} from 'mdast-util-to-markdown'
- * @import {FlowChildren, FlowParents, TrackFields} from '../types.js'
- */
- /**
- * @param {FlowParents} parent
- * Parent of flow nodes.
- * @param {State} state
- * Info passed around about the current state.
- * @param {TrackFields} info
- * Info on where we are in the document we are generating.
- * @returns {string}
- * Serialized children, joined by (blank) lines.
- */
- export function containerFlow(parent, state, info) {
- const indexStack = state.indexStack
- const children = parent.children || []
- const tracker = state.createTracker(info)
- /** @type {Array<string>} */
- const results = []
- let index = -1
- indexStack.push(-1)
- while (++index < children.length) {
- const child = children[index]
- indexStack[indexStack.length - 1] = index
- results.push(
- tracker.move(
- state.handle(child, parent, state, {
- before: '\n',
- after: '\n',
- ...tracker.current()
- })
- )
- )
- if (child.type !== 'list') {
- state.bulletLastUsed = undefined
- }
- if (index < children.length - 1) {
- results.push(
- tracker.move(between(child, children[index + 1], parent, state))
- )
- }
- }
- indexStack.pop()
- return results.join('')
- }
- /**
- * @param {FlowChildren} left
- * @param {FlowChildren} right
- * @param {FlowParents} parent
- * @param {State} state
- * @returns {string}
- */
- function between(left, right, parent, state) {
- let index = state.join.length
- while (index--) {
- const result = state.join[index](left, right, parent, state)
- if (result === true || result === 1) {
- break
- }
- if (typeof result === 'number') {
- return '\n'.repeat(1 + result)
- }
- if (result === false) {
- return '\n\n<!---->\n\n'
- }
- }
- return '\n\n'
- }
|