/** * @typedef {import('hast').Element} Element * @typedef {import('hast').ElementContent} ElementContent * @typedef {import('hast').Properties} Properties * @typedef {import('mdast').Parents} Parents * @typedef {import('mdast').TableRow} TableRow * @typedef {import('../state.js').State} State */ // Make VS Code show references to the above types. '' /** * Turn an mdast `tableRow` node into hast. * * @param {State} state * Info passed around. * @param {TableRow} node * mdast node. * @param {Parents | undefined} parent * Parent of `node`. * @returns {Element} * hast node. */ export function tableRow(state, node, parent) { const siblings = parent ? parent.children : undefined // Generate a body row when without parent. const rowIndex = siblings ? siblings.indexOf(node) : 1 const tagName = rowIndex === 0 ? 'th' : 'td' // To do: option to use `style`? const align = parent && parent.type === 'table' ? parent.align : undefined const length = align ? align.length : node.children.length let cellIndex = -1 /** @type {Array} */ const cells = [] while (++cellIndex < length) { // Note: can also be undefined. const cell = node.children[cellIndex] /** @type {Properties} */ const properties = {} const alignValue = align ? align[cellIndex] : undefined if (alignValue) { properties.align = alignValue } /** @type {Element} */ let result = {type: 'element', tagName, properties, children: []} if (cell) { result.children = state.all(cell) state.patch(cell, result) result = state.applyData(cell, result) } cells.push(result) } /** @type {Element} */ const result = { type: 'element', tagName: 'tr', properties: {}, children: state.wrap(cells, true) } state.patch(node, result) return state.applyData(node, result) }