text: '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';
      }
    }
  ];
  