| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | 'use strict'function cell (content, node) {  var index = Array.prototype.indexOf.call(node.parentNode.childNodes, node)  var prefix = ' '  if (index === 0) prefix = '| '  return prefix + content + ' |'}var highlightRegEx = /highlight highlight-(\S+)/module.exports = [  {    filter: 'br',    replacement: function () {      return '\n'    }  },  {    filter: ['del', 's', 'strike'],    replacement: function (content) {      return '~~' + content + '~~'    }  },  {    filter: function (node) {      return node.type === 'checkbox' && node.parentNode.nodeName === 'LI'    },    replacement: function (content, node) {      return (node.checked ? '[x]' : '[ ]') + ' '    }  },  {    filter: ['th', 'td'],    replacement: function (content, node) {      return cell(content, node)    }  },  {    filter: 'tr',    replacement: function (content, node) {      var borderCells = ''      var alignMap = { left: ':--', right: '--:', center: ':-:' }      if (node.parentNode.nodeName === 'THEAD') {        for (var i = 0; i < node.childNodes.length; i++) {          var align = node.childNodes[i].attributes.align          var border = '---'          if (align) border = alignMap[align.value] || border          borderCells += cell(border, node.childNodes[i])        }      }      return '\n' + content + (borderCells ? '\n' + borderCells : '')    }  },  {    filter: 'table',    replacement: function (content) {      return '\n\n' + content + '\n\n'    }  },  {    filter: ['thead', 'tbody', 'tfoot'],    replacement: function (content) {      return content    }  },  // Fenced code blocks  {    filter: function (node) {      return node.nodeName === 'PRE' &&      node.firstChild &&      node.firstChild.nodeName === 'CODE'    },    replacement: function (content, node) {      return '\n\n```\n' + node.firstChild.textContent + '\n```\n\n'    }  },  // Syntax-highlighted code blocks  {    filter: function (node) {      return node.nodeName === 'PRE' &&      node.parentNode.nodeName === 'DIV' &&      highlightRegEx.test(node.parentNode.className)    },    replacement: function (content, node) {      var language = node.parentNode.className.match(highlightRegEx)[1]      return '\n\n```' + language + '\n' + node.textContent + '\n```\n\n'    }  },  {    filter: function (node) {      return node.nodeName === 'DIV' &&      highlightRegEx.test(node.className)    },    replacement: function (content) {      return '\n\n' + content + '\n\n'    }  }]
 |