'use strict' var is = require('unist-util-is') var element = require('hast-util-is-element') var whiteSpaceLeft = require('./util/white-space-left') var after = require('./util/siblings').after var omission = require('./omission') 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 || (!is('comment', next) && !whiteSpaceLeft(next)) } /* Whether to omit ``. */ function html(node, index, parent) { var next = after(parent, index) return !next || !is('comment', next) } /* Whether to omit ``. */ function body(node, index, parent) { var next = after(parent, index) return !next || !is('comment', 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) }