'use strict' var convert = require('unist-util-is/convert') var element = require('hast-util-is-element') var whiteSpaceStart = require('./util/white-space-start') var after = require('./util/siblings').after var omission = require('./omission') var isComment = convert('comment') var optionGroup = 'optgroup' var options = ['option'].concat(optionGroup) var dataListItem = ['dt', 'dd'] var listItem = 'li' var menuContent = ['menuitem', 'hr', 'menu'] var ruby = ['rp', 'rt'] var tableContainer = ['tbody', 'tfoot'] var tableRow = 'tr' var tableCell = ['td', 'th'] var confusingParagraphParent = [ 'a', 'audio', 'del', 'ins', 'map', 'noscript', 'video' ] var clearParagraphSibling = [ 'address', 'article', 'aside', 'blockquote', 'details', 'div', 'dl', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'main', 'menu', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul' ] module.exports = omission({ html: html, head: headOrColgroupOrCaption, body: body, p: p, li: li, dt: dt, dd: dd, rt: rubyElement, rp: rubyElement, optgroup: optgroup, option: option, menuitem: menuitem, colgroup: headOrColgroupOrCaption, caption: headOrColgroupOrCaption, thead: thead, tbody: tbody, tfoot: tfoot, tr: tr, td: cells, th: cells }) // Macro for ``, ``, and ``. function headOrColgroupOrCaption(node, index, parent) { var next = after(parent, index, true) return !next || (!isComment(next) && !whiteSpaceStart(next)) } // Whether to omit ``. function html(node, index, parent) { var next = after(parent, index) return !next || !isComment(next) } // Whether to omit ``. function body(node, index, parent) { var next = after(parent, index) return !next || !isComment(next) } // Whether to omit `

`. function p(node, index, parent) { var next = after(parent, index) return next ? element(next, clearParagraphSibling) : !parent || !element(parent, confusingParagraphParent) } // Whether to omit ``. function li(node, index, parent) { var next = after(parent, index) return !next || element(next, listItem) } // Whether to omit ``. function dt(node, index, parent) { var next = after(parent, index) return next && element(next, dataListItem) } // Whether to omit ``. function dd(node, index, parent) { var next = after(parent, index) return !next || element(next, dataListItem) } // Whether to omit `` or ``. function rubyElement(node, index, parent) { var next = after(parent, index) return !next || element(next, ruby) } // Whether to omit ``. function optgroup(node, index, parent) { var next = after(parent, index) return !next || element(next, optionGroup) } // Whether to omit ``. function option(node, index, parent) { var next = after(parent, index) return !next || element(next, options) } // Whether to omit ``. function menuitem(node, index, parent) { var next = after(parent, index) return !next || element(next, menuContent) } // Whether to omit ``. function thead(node, index, parent) { var next = after(parent, index) return next && element(next, tableContainer) } // Whether to omit ``. function tbody(node, index, parent) { var next = after(parent, index) return !next || element(next, tableContainer) } // Whether to omit ``. function tfoot(node, index, parent) { return !after(parent, index) } // Whether to omit ``. function tr(node, index, parent) { var next = after(parent, index) return !next || element(next, tableRow) } // Whether to omit `` or ``. function cells(node, index, parent) { var next = after(parent, index) return !next || element(next, tableCell) }