[
  {
    "path": ".gitignore",
    "content": ".*.swp\n.DS_Store\n/node_modules/\n/npm-debug.log\ndist\nlib/markdown.js\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\nnode_js:\n  - \"0.10\"\n  - \"0.11\"\n"
  },
  {
    "path": "Changes.md",
    "content": "# Changelog for markdown\n\n## vNEXT - ???\n\n- **Big change**: Drop official support for Node 0.8\n- Use JSHint to validate code style and fix numerous warnings it flagged up\n  ([#65]) Thanks [XhmikosR](https://github.com/XhmikosR)!\n- Fix (yet more! gah) global variable leaks ([#99])\n- Fix content tight between two `hr`'s disappearing ([#106])\n- Use [Grunt](http://gruntjs.com/) to build tailored versions including allowing\n  customizing of what dialects are included ([#113] - [Robin Ward](https://github.com/eviltrout))\n- Add in a bower.json for easier use in non-node environments ([#184])\n- Lots of small other fixes\n\n## v0.5.0 - 2013-07-26\n\nThere might be other bug fixes then the ones listed - I've been a bit lax at\nupdating the changes file, sorry :(\n\n- Fix \"undefined\" appearing in output for some cases with blockquotes\n- Fix (multiple) global variable leaks. Ooops\n- Allow spaces in img/link paths ([#48])\n- Handle windows line endings ([#58])\n- Fix IE8 issues ([#68], [#86], [#97])\n- Fix images inside links mistakenly requiring a title attribute to parse\n  correctly ([#71])\n- Add explicit text of the license to the readme ([#74])\n- Style tweaks by [XhmikosR](https://github.com/XhmikosR) ([#81], [#82], [#83])\n- Build now tested by TravisCI thanks to [sebs](https://github.com/sebs) ([#85])\n- Fix \"cuddled\" header parsing ([#94])\n- Add support for tables to Maruku dialect ([#66]) Thanks [redsun82](https://github.com/redsun82)!\n\n\n## v0.4.0 - 2012-06-09\n\n- Improve link parsing when multiple on a line ([#5])\n- `npm test` will now run the entire test suite cleanly\n  (switch tests over to [node-tap](https://github.com/isaacs/node-tap)) ([#21])\n- Fix blockquote merging/implicit conversion between string/String ([#24], [#44])\n- Allow inline elements to appear inside link text ([#27])\n- Fix to correctly render self-closing tags ([#28], [#35], [#40])\n- Actually render image references ([#36])\n- Make it work in IE7/8 ([#37])\n- Improve link parsing when link is inside parenthesis ([#38])\n- Fix JSLint warnings ([#42])\n- `md2html` can now process stdin ([#43])\n- Fix for anchors enclosed by parenthesis ([#46])\n\n\n\n[#5]: https://github.com/evilstreak/markdown-js/issues/5\n[#21]: https://github.com/evilstreak/markdown-js/issues/21\n[#24]: https://github.com/evilstreak/markdown-js/issues/24\n[#27]: https://github.com/evilstreak/markdown-js/issues/27\n[#28]: https://github.com/evilstreak/markdown-js/issues/28\n[#35]: https://github.com/evilstreak/markdown-js/issues/35\n[#36]: https://github.com/evilstreak/markdown-js/issues/36\n[#37]: https://github.com/evilstreak/markdown-js/issues/37\n[#38]: https://github.com/evilstreak/markdown-js/issues/38\n[#40]: https://github.com/evilstreak/markdown-js/issues/40\n[#42]: https://github.com/evilstreak/markdown-js/issues/42\n[#43]: https://github.com/evilstreak/markdown-js/issues/43\n[#44]: https://github.com/evilstreak/markdown-js/issues/44\n[#46]: https://github.com/evilstreak/markdown-js/issues/46\n[#48]: https://github.com/evilstreak/markdown-js/issues/48\n[#58]: https://github.com/evilstreak/markdown-js/issues/58\n[#65]: https://github.com/evilstreak/markdown-js/issues/65\n[#66]: https://github.com/evilstreak/markdown-js/issues/66\n[#68]: https://github.com/evilstreak/markdown-js/issues/68\n[#71]: https://github.com/evilstreak/markdown-js/issues/71\n[#74]: https://github.com/evilstreak/markdown-js/issues/74\n[#81]: https://github.com/evilstreak/markdown-js/issues/81\n[#82]: https://github.com/evilstreak/markdown-js/issues/82\n[#83]: https://github.com/evilstreak/markdown-js/issues/83\n[#85]: https://github.com/evilstreak/markdown-js/issues/85\n[#86]: https://github.com/evilstreak/markdown-js/issues/86\n[#94]: https://github.com/evilstreak/markdown-js/issues/94\n[#97]: https://github.com/evilstreak/markdown-js/issues/97\n[#99]: https://github.com/evilstreak/markdown-js/issues/99\n[#106]: https://github.com/evilstreak/markdown-js/issues/106\n[#113]: https://github.com/evilstreak/markdown-js/issues/113\n"
  },
  {
    "path": "Gruntfile.js",
    "content": "module.exports = function(grunt) {\n\n  var pkg = grunt.file.readJSON('package.json');\n\n  grunt.initConfig({\n    pkg: pkg,\n    env: process.env,\n\n    node_tap: {\n      default_options: {\n        options: {\n          outputType: 'failures',\n          outputTo: 'console'\n        },\n        files: {\n          'tests': ['./test/*.t.js']\n        }\n      }\n    },\n\n    jshint: {\n      files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],\n      options: {\n        \"browser\": false,\n        \"maxerr\": 100,\n        \"node\": true,\n        \"camelcase\": false,\n        \"curly\": false,\n        \"eqeqeq\": true,\n        \"eqnull\": true,\n        \"forin\": false,\n        \"globals\": {\n          \"define\": true,\n          \"print\": true,\n          \"uneval\": true,\n          \"window\": true\n        },\n        \"immed\": true,\n        \"indent\": 2,\n        \"latedef\": true,\n        \"laxbreak\": true,\n        \"laxcomma\": true,\n        \"lastsemic\": true,\n        \"loopfunc\": true,\n        \"noarg\": true,\n        \"newcap\": true,\n        \"plusplus\": false,\n        \"quotmark\": \"true\",\n        \"regexp\": true,\n        \"shadow\": true,\n        \"strict\": false,\n        \"sub\": true,\n        \"trailing\": true,\n        \"undef\": true,\n        \"unused\": false,\n        ignores: ['.git', 'node_modules']\n      }\n    },\n\n    build: {\n      web: {\n        dest: \"dist/markdown.js\",\n        minimum: [\"parser\"],\n        removeWith: ['dialects/gruber'],\n        startFile: \"inc/header.js\",\n        endFile: \"inc/footer-web.js\"\n      },\n      node: {\n        dest: \"lib/markdown.js\",\n        minimum: [\"parser\"],\n        removeWith: ['dialects/gruber'],\n        startFile: \"inc/header.js\",\n        endFile: \"inc/footer-node.js\"\n      }\n    },\n\n    uglify: {\n      my_target: {\n        options: {\n          compress: true,\n          mangle: true,\n          preserveComments: \"some\",\n          report: \"min\"\n        },\n        files: {\n          'dist/markdown.min.js': ['dist/markdown.js']\n        }\n      }\n    }\n\n  });\n\n  grunt.registerTask('all', ['test', 'build', 'uglify']);\n  grunt.registerTask('default', ['all']);\n  grunt.registerTask('test', 'Runs all tests and linting', ['node_tap', 'jshint']);\n  grunt.loadNpmTasks('grunt-node-tap');\n  grunt.loadNpmTasks('grunt-contrib-uglify');\n  grunt.loadNpmTasks('grunt-contrib-jshint');\n  grunt.loadTasks(\"inc/tasks\");\n};\n"
  },
  {
    "path": "README.md",
    "content": "[![NPM version](https://badge.fury.io/js/markdown.png)](http://badge.fury.io/js/markdown)\n[![Build Status](https://secure.travis-ci.org/evilstreak/markdown-js.png)](https://travis-ci.org/evilstreak/markdown-js)\n[![Dependency Status](https://gemnasium.com/evilstreak/markdown-js.png)](https://gemnasium.com/evilstreak/markdown-js)\n\n## Notice: Unmaintained\nThis repo is no longer maintained, however there are many alternatives:\n- [Markdown-It](https://github.com/markdown-it/markdown-it)\n- [Showdown](https://github.com/showdownjs/showdown)\n- [Marked](https://github.com/markedjs/marked)\n- and more...\n\n# markdown-js\n\nYet another Markdown parser, this time for JavaScript. There's a few\noptions that precede this project but they all treat Markdown to HTML\nconversion as a single step process. You pass Markdown in and get HTML\nout, end of story. We had some pretty particular views on how the\nprocess should actually look, which include:\n\n  * Producing well-formed HTML. This means that `em` and `strong` nesting\n    is important, as is the ability to output as both HTML and XHTML\n  * Having an intermediate representation to allow processing of parsed\n    data (we in fact have two, both [JsonML]: a markdown tree and an HTML tree)\n  * Being easily extensible to add new dialects without having to\n    rewrite the entire parsing mechanics\n  * Having a good test suite. The only test suites we could find tested\n    massive blocks of input, and passing depended on outputting the HTML\n    with exactly the same whitespace as the original implementation\n\n[JsonML]: http://jsonml.org/ \"JSON Markup Language\"\n\n## Installation\n\nJust the `markdown` library:\n\n    npm install markdown\n\nOptionally, install `md2html` into your path\n\n    npm install -g markdown\n\n### In the browser\n\nIf you want to use from the browser go to the [releases] page on GitHub and\ndownload the version you want (minified or not).\n\n[releases]: https://github.com/evilstreak/markdown-js/releases\n\n## Usage\n\nThe basic interface is:\n```js\nmd_content = \"Hello.\\n\\n* This is markdown.\\n* It is fun\\n* Love it or leave it.\"\nhtml_content = markdown.toHTML( md_content );\n```\n\ntoHTML also accepts a dialect argument:\n\n```js\nmd_content = \"Vessel     | Captain\\n-----------|-------------\\nNCC-1701   | James T Kirk\\nNCC-1701 A | James T Kirk\\nNCC-1701 D | Picard\";\nhtml_content = markdown.toHTML( md_content, 'Maruku');\n```\n\n### Node\n\nThe simple way to use it with Node is:\n\n```js\nvar markdown = require( \"markdown\" ).markdown;\nconsole.log( markdown.toHTML( \"Hello *World*!\" ) );\n```\n\n### ES6\n\n```js\nimport {markdown} from 'markdown';\nconsole.log( markdown.toHTML( \"Hello *World*!\" ) );\n```\n\n#### Older versions of node\n\nWe only officially support node >= 0.10 as the libraries we use for building\nand testing don't work on older versions of node. That said since this module\nis so simple and doesn't use any parts of the node API if you use the pre-built\nversion and find a bug let us know and we'll try and fix it.\n\n### Browser\n\nIt also works in a browser; here is a complete example:\n\n```html\n<!DOCTYPE html>\n<html>\n  <body>\n    <textarea id=\"text-input\" oninput=\"this.editor.update()\"\n              rows=\"6\" cols=\"60\">Type **Markdown** here.</textarea>\n    <div id=\"preview\"> </div>\n    <script src=\"lib/markdown.js\"></script>\n    <script>\n      function Editor(input, preview) {\n        this.update = function () {\n          preview.innerHTML = markdown.toHTML(input.value);\n        };\n        input.editor = this;\n        this.update();\n      }\n      var $ = function (id) { return document.getElementById(id); };\n      new Editor($(\"text-input\"), $(\"preview\"));\n    </script>\n  </body>\n</html>\n```\n\n### Command Line\n\nAssuming you've installed the `md2html` script (see Installation,\nabove), you can convert Markdown to HTML:\n\n```bash\n# read from a file\nmd2html /path/to/doc.md > /path/to/doc.html\n\n# or from stdin\necho 'Hello *World*!' | md2html\n```\n\n### More Options\n\nIf you want more control check out the documentation in\n[the .js files under src/][src_folder] which details all the methods and parameters\navailable (including examples!). One day we'll get the docs generated\nand hosted somewhere for nicer browsing.\n\n[src_folder]: https://github.com/evilstreak/markdown-js/blob/master/src\n\nMeanwhile, here's an example of using the multi-step processing to\nmake wiki-style linking work by filling in missing link references:\n\n```js\nvar md = require( \"markdown\" ).markdown,\n    text = \"[Markdown] is a simple text-based [markup language]\\n\" +\n           \"created by [John Gruber]\\n\\n\" +\n           \"[John Gruber]: http://daringfireball.net\";\n\n// parse the markdown into a tree and grab the link references\nvar tree = md.parse( text ),\n    refs = tree[ 1 ].references;\n\n// iterate through the tree finding link references\n( function find_link_refs( jsonml ) {\n  if ( jsonml[ 0 ] === \"link_ref\" ) {\n    var ref = jsonml[ 1 ].ref;\n\n    // if there's no reference, define a wiki link\n    if ( !refs[ ref ] ) {\n      refs[ ref ] = {\n        href: \"http://en.wikipedia.org/wiki/\" + ref.replace(/\\s+/, \"_\" )\n      };\n    }\n  }\n  else if ( Array.isArray( jsonml[ 1 ] ) ) {\n    jsonml[ 1 ].forEach( find_link_refs );\n  }\n  else if ( Array.isArray( jsonml[ 2 ] ) ) {\n    jsonml[ 2 ].forEach( find_link_refs );\n  }\n} )( tree );\n\n// convert the tree into html\nvar html = md.renderJsonML( md.toHTMLTree( tree ) );\nconsole.log( html );\n```\n\n## Intermediate Representation\n\nInternally the process to convert a chunk of Markdown into a chunk of\nHTML has three steps:\n\n1. Parse the Markdown into a JsonML tree. Any references found in the\n   parsing are stored in the attribute hash of the root node under the\n   key `references`.\n2. Convert the Markdown tree into an HTML tree. Rename any nodes that\n   need it (`bulletlist` to `ul` for example) and lookup any references\n   used by links or images. Remove the references attribute once done.\n3. Stringify the HTML tree being careful not to wreck whitespace where\n   whitespace is important (surrounding inline elements for example).\n\nEach step of this process can be called individually if you need to do\nsome processing or modification of the data at an intermediate stage.\nFor example, you may want to grab a list of all URLs linked to in the\ndocument before rendering it to HTML which you could do by recursing\nthrough the HTML tree looking for `a` nodes.\n\n## Building and Testing markdown-js\n\nWe use [Grunt](http://gruntjs.com/) to build and run markdown-js's tests.\nMake sure you run `npm install` to install the developer dependencies for\nthe project, then you can:\n\n    $ npm test\n\nTo run our test suite. If you'd like to build markdown-js, you can run:\n\n    $ ./node_modules/.bin/grunt all\n\nThis command will run all the tests, then output a concatenated markdown.js\nand markdown.min.js in the `dist/` directory for use in a browser application.\n\n## Building a custom markdown-js\n\nBy default, you will get the [Gruber] and [Maruku] dialects included when you\nrun `grunt all`. However, you can create a custom build using the following\nsyntax if you don't want to include Maruku support.\n\n    $ ./node_modules/.bin/grunt \"custom:-dialects/maruku\"\n\n[Gruber]: http://daringfireball.net/projects/markdown/syntax\n[Maruku]: http://maruku.rubyforge.org/maruku.html\n\n## Running Tests\n\nTo run the tests under Node you will need tap installed (it's listed as a\n`devDependencies` so `npm install` from the checkout should be enough), then do\n\n    $ npm test\n\n## Contributing\n\nDo the usual GitHub fork and pull request dance. Add yourself to the\ncontributors section of [package.json] too if you want to.\n\n[package.json]: https://github.com/evilstreak/markdown-js/blob/master/package.json\n\n## License\n\nReleased under the MIT license.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "bin/md2html.js",
    "content": "#!/usr/bin/env node\n(function () {\n  \"use strict\";\n\n  var fs = require(\"fs\"),\n    markdown = require(\"markdown\").markdown,\n    nopt = require(\"nopt\"),\n    stream,\n    opts,\n    buffer = \"\";\n\n  opts = nopt(\n    { \"dialect\": [ \"Gruber\", \"Maruku\"],\n      \"help\": Boolean\n    }\n  );\n\n  if (opts.help || process.argv.length === 2) {\n    var name = process.argv[1].split(\"/\").pop();\n    console.warn( require(\"util\").format(\n      \"usage: %s [--dialect=DIALECT] FILE\\n\\nValid dialects are Gruber (the default) or Maruku\",\n      name\n    ) );\n    process.exit(0);\n  }\n\n  var fullpath = opts.argv.remain[0];\n\n  if (fullpath && fullpath !== \"-\")\n    stream = fs.createReadStream(fullpath);\n  else\n    stream = process.stdin;\n  stream.resume();\n  stream.setEncoding(\"utf8\");\n\n  stream.on(\"error\", function(error) {\n    console.error(error.toString());\n    process.exit(1);\n  });\n\n  stream.on(\"data\", function(data) {\n    buffer += data;\n  });\n\n  stream.on(\"end\", function() {\n    var html = markdown.toHTML(buffer, opts.dialect);\n    console.log(html);\n  });\n\n}());\n"
  },
  {
    "path": "bower.json",
    "content": "{\n    \"name\": \"markdown\",\n    \"homepage\": \"https://github.com/evilstreak/markdown-js\",\n    \"_source\": \"git://github.com/evilstreak/markdown-js.git\",\n    \"_target\": \"master\",\n    \"_originalSource\": \"markdown\",\n    \"version\": \"v0.6.0-beta1\",\n    \"authors\": [\n        \"Dominic Baggott <dominic.baggott@gmail.com> (http://evilstreak.co.uk)\",\n        \"Ash Berlin <ash_markdownjs@firemirror.com> (http://ashberlin.com)\"\n    ],\n    \"description\": \"A sensible Markdown parser for javascript\",\n    \"main\": \"./lib/index.js\",\n    \"keywords\": [\n        \"markdown\",\n        \"text processing\",\n        \"ast\"\n    ],\n    \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "inc/footer-node.js",
    "content": "\n  expose.Markdown = Markdown;\n  expose.parse = Markdown.parse;\n  expose.toHTML = Markdown.toHTML;\n  expose.toHTMLTree = Markdown.toHTMLTree;\n  expose.renderJsonML = Markdown.renderJsonML;\n  expose.DialectHelpers = DialectHelpers;\n\n})(exports);\n"
  },
  {
    "path": "inc/footer-web.js",
    "content": "\n  expose.Markdown = Markdown;\n  expose.parse = Markdown.parse;\n  expose.toHTML = Markdown.toHTML;\n  expose.toHTMLTree = Markdown.toHTMLTree;\n  expose.renderJsonML = Markdown.renderJsonML;\n  expose.DialectHelpers = DialectHelpers;\n\n})(function() {\n  window.markdown = {};\n  return window.markdown;\n}());\n"
  },
  {
    "path": "inc/header.js",
    "content": "/*!\n * Markdown\n * Released under MIT license\n * Copyright (c) 2009-2010 Dominic Baggott\n * Copyright (c) 2009-2010 Ash Berlin\n * Copyright (c) 2011 Christoph Dorn <christoph@christophdorn.com> (http://www.christophdorn.com)\n * Version: @VERSION\n * Date: @DATE\n */\n\n(function(expose) {"
  },
  {
    "path": "inc/tasks/build_markdown.js",
    "content": "/**\n Tasks cribbed from jQuery to handle building custom markdown parsers.\n\n*/\n\nmodule.exports = function( grunt ) {\n\n  \"use strict\";\n\n  var fs = require( \"fs\" ),\n    srcFolder = __dirname + \"/../../src/\",\n    rdefineEnd = /\\}\\);[^}\\w]*$/,\n    // This is temporary until the skipSemiColonInsertion option makes it to NPM\n    requirejs = require( \"requirejs\" ),\n    config = {\n      baseUrl: \"src\",\n      name: \"markdown\",\n      // We have multiple minify steps\n      optimize: \"none\",\n      skipSemiColonInsertion: true,\n      onBuildWrite: convert\n    };\n\n  /**\n   * Strip all definitions generated by requirejs\n   * Convert \"var\" modules to var declarations\n   * \"var module\" means the module only contains a return statement that should be converted to a var declaration\n   * This is indicated by including the file in any \"var\" folder\n   * @param {String} name\n   * @param {String} path\n   * @param {String} contents The contents to be written (including their AMD wrappers)\n   */\n  function convert( name, path, contents ) {\n    // Convert var modules\n    if ( /.\\/var\\//.test( path ) ) {\n      contents = contents\n        .replace( /define\\([\\w\\W]*?return/, \"var \" + (/var\\/([\\w-]+)/.exec(name)[1]) + \" =\" )\n        .replace( rdefineEnd, \"\" );\n\n    } else {\n\n\n      contents = contents\n        .replace( /^\\s*return\\s+[^\\}]+(\\}\\);[^\\w\\}]*)$/m, \"$1\" );\n\n      // Remove define wrappers, closure ends, and empty declarations\n      contents = contents\n        .replace( /define\\([^{]*?{/, \"\" )\n        .replace( rdefineEnd, \"\" );\n\n      // Remove empty definitions\n      contents = contents\n        .replace( /define\\(\\[[^\\]]+\\]\\)[\\W\\n]+$/, \"\" );\n    }\n    return contents;\n  }\n\n  grunt.registerMultiTask(\n    \"build\",\n    \"Concatenate source, remove sub AMD definitions, (include/exclude modules with +/- flags), embed date/version\",\n  function() {\n    var flag, index,\n      done = this.async(),\n      flags = this.flags,\n      name = this.data.dest,\n      minimum = this.data.minimum,\n      removeWith = this.data.removeWith,\n      excluded = [],\n      included = [],\n      version = grunt.config( \"pkg.version\" ),\n      /**\n       * Recursively calls the excluder to remove on all modules in the list\n       * @param {Array} list\n       * @param {String} [prepend] Prepend this to the module name. Indicates we're walking a directory\n       */\n      excludeList = function( list, prepend ) {\n        if ( list ) {\n          prepend = prepend ? prepend + \"/\" : \"\";\n          list.forEach(function( module ) {\n            // Exclude var modules as well\n            if ( module === \"var\" ) {\n              excludeList( fs.readdirSync( srcFolder + prepend + module ), prepend + module );\n              return;\n            }\n            if ( prepend ) {\n              // Skip if this is not a js file and we're walking files in a dir\n              if ( !(module = /([\\w-\\/]+)\\.js$/.exec( module )) ) {\n                return;\n              }\n              // Prepend folder name if passed\n              // Remove .js extension\n              module = prepend + module[1];\n            }\n\n            // Avoid infinite recursion\n            if ( excluded.indexOf( module ) === -1 ) {\n              excluder( \"-\" + module );\n            }\n          });\n        }\n      },\n      /**\n       * Adds the specified module to the excluded or included list, depending on the flag\n       * @param {String} flag A module path relative to the src directory starting with + or - to indicate whether it should included or excluded\n       */\n      excluder = function( flag ) {\n        var m = /^(\\+|\\-|)([\\w\\/-]+)$/.exec( flag ),\n          exclude = m[ 1 ] === \"-\",\n          module = m[ 2 ];\n\n        if ( exclude ) {\n          // Can't exclude certain modules\n          if ( minimum.indexOf( module ) === -1 ) {\n            // Add to excluded\n            if ( excluded.indexOf( module ) === -1 ) {\n              grunt.log.writeln( flag );\n              excluded.push( module );\n              // Exclude all files in the folder of the same name\n              // These are the removable dependencies\n              // It's fine if the directory is not there\n              try {\n                excludeList( fs.readdirSync( srcFolder + module ), module );\n              } catch( e ) {\n                grunt.verbose.writeln( e );\n              }\n            }\n            // Check removeWith list\n            excludeList( removeWith[ module ] );\n          } else {\n            grunt.log.error( \"Module \\\"\" + module + \"\\\" is a mimimum requirement.\");\n            if ( module === \"selector\" ) {\n              grunt.log.error( \"If you meant to replace Sizzle, use -sizzle instead.\" );\n            }\n          }\n        } else {\n          grunt.log.writeln( flag );\n          included.push( module );\n        }\n      };\n\n    // append commit id to version\n    if ( process.env.COMMIT ) {\n      version += \" \" + process.env.COMMIT;\n    }\n\n    // figure out which files to exclude based on these rules in this order:\n    //  dependency explicit exclude\n    //  > explicit exclude\n    //  > explicit include\n    //  > dependency implicit exclude\n    //  > implicit exclude\n    // examples:\n    //  *                  none (implicit exclude)\n    //  *:*                all (implicit include)\n    //  *:*:-css           all except css and dependents (explicit > implicit)\n    //  *:*:-css:+effects  same (excludes effects because explicit include is trumped by explicit exclude of dependency)\n    //  *:+effects         none except effects and its dependencies (explicit include trumps implicit exclude of dependency)\n    for ( flag in flags ) {\n      if ( flag !== \"*\" ) {\n        excluder( flag );\n      }\n    }\n    grunt.verbose.writeflags( excluded, \"Excluded\" );\n    grunt.verbose.writeflags( included, \"Included\" );\n\n    // append excluded modules to version\n    if ( excluded.length ) {\n      version += \" -\" + excluded.join( \",-\" );\n      // set pkg.version to version with excludes, so minified file picks it up\n      grunt.config.set( \"pkg.version\", version );\n      grunt.verbose.writeln( \"Version changed to \" + version );\n      // Have to use shallow or core will get excluded since it is a dependency\n      config.excludeShallow = excluded;\n    }\n    config.include = included;\n\n    config.wrap = {\n      startFile: this.data.startFile,\n      endFile: this.data.endFile\n    };\n\n\n    /**\n     * Handle Final output from the optimizer\n     * @param {String} compiled\n     */\n    config.out = function( compiled ) {\n      compiled = compiled\n        // Remove any lone semi colons\n        .replace(/^;$/gm, '')\n        // Remove extra line breaks\n        .replace(/\\n\\n+/gm, \"\\n\\n\")\n        // Embed Version\n        .replace( /@VERSION/g, version )\n        // Embed Date\n        // yyyy-mm-ddThh:mmZ\n        .replace( /@DATE/g, ( new Date() ).toISOString().replace( /:\\d+\\.\\d+Z$/, \"Z\" ) );\n\n      // Write concatenated source to file\n      grunt.file.write( name, compiled );\n    };\n\n    // Trace dependencies and concatenate files\n    requirejs.optimize( config, function( response ) {\n      grunt.verbose.writeln( response );\n      grunt.log.ok( \"File '\" + name + \"' created.\" );\n      done();\n    }, function( err ) {\n      done( err );\n    });\n  });\n\n  // Special \"alias\" task to make custom build creation less grawlix-y\n  // Translation example\n  //\n  //   grunt custom:+ajax,-dimensions,-effects,-offset\n  //\n  // Becomes:\n  //\n  //   grunt build:*:*:+ajax:-dimensions:-effects:-offset\n  grunt.registerTask( \"custom\", function() {\n    var args = [].slice.call( arguments ),\n      modules = args.length ? args[ 0 ].replace( /,/g, \":\" ) : \"\";\n\n    grunt.log.writeln( \"Creating custom build...\\n\" );\n\n    grunt.task.run([ \"build:*:*:\" + modules, 'uglify']);\n  });\n};\n"
  },
  {
    "path": "lib/index.js",
    "content": "// super simple module for the most common nodejs use case.\nexports.markdown = require(\"./markdown\");\nexports.parse = exports.markdown.toHTML;\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"markdown\",\n  \"version\": \"0.6.0-beta1\",\n  \"description\": \"A sensible Markdown parser for javascript\",\n  \"keywords\": [\n    \"markdown\",\n    \"text processing\",\n    \"ast\"\n  ],\n  \"maintainers\": [\n    \"Dominic Baggott <dominic.baggott@gmail.com> (http://evilstreak.co.uk)\",\n    \"Ash Berlin <ash_markdownjs@firemirror.com> (http://ashberlin.com)\"\n  ],\n  \"contributors\": [\n    \"Dominic Baggott <dominic.baggott@gmail.com> (http://evilstreak.co.uk)\",\n    \"Ash Berlin <ash_markdownjs@firemirror.com> (http://ashberlin.com)\",\n    \"XhmikosR <xhmikosr@users.sourceforge.net>\",\n    \"Robin Ward <robin.ward@gmail.com> (http://eviltrout.com)\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/evilstreak/markdown-js/issues\"\n  },\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/evilstreak/markdown-js.git\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"bin\": {\n    \"md2html\": \"./bin/md2html.js\"\n  },\n  \"files\": [\n    \"bin\",\n    \"lib\",\n    \"Changes.md\",\n    \"README.md\"\n  ],\n  \"dependencies\": {\n    \"nopt\": \"~2.1.1\"\n  },\n  \"devDependencies\": {\n    \"amdefine\": \"~0.0.8\",\n    \"grunt\": \"~0.4.1\",\n    \"grunt-cli\": \"~0.1.9\",\n    \"grunt-contrib-jshint\": \"~0.6.4\",\n    \"grunt-contrib-uglify\": \"~0.2.4\",\n    \"grunt-node-tap\": \"0.1.46\",\n    \"requirejs\": \"~2.1.8\",\n    \"tap\": \"~0.3.3\"\n  },\n  \"scripts\": {\n    \"test\": \"grunt test\",\n    \"tap\": \"grunt node_tap\",\n    \"lint\": \"grunt jshint\",\n    \"prepublish\": \"grunt build\"\n  },\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  }\n}\n"
  },
  {
    "path": "seed.yml",
    "content": "---\n  name: markdown-js\n  description: JavaScript implementation of Markdown\n  tags: markdown parser\n  version: 0.1.2\n"
  },
  {
    "path": "src/core.js",
    "content": "if (typeof define !== 'function') { var define = require('amdefine')(module) }\n\ndefine([], function() {\n\n /**\n   *  class Markdown\n   *\n   *  Markdown processing in Javascript done right. We have very particular views\n   *  on what constitutes 'right' which include:\n   *\n   *  - produces well-formed HTML (this means that em and strong nesting is\n   *    important)\n   *\n   *  - has an intermediate representation to allow processing of parsed data (We\n   *    in fact have two, both as [JsonML]: a markdown tree and an HTML tree).\n   *\n   *  - is easily extensible to add new dialects without having to rewrite the\n   *    entire parsing mechanics\n   *\n   *  - has a good test suite\n   *\n   *  This implementation fulfills all of these (except that the test suite could\n   *  do with expanding to automatically run all the fixtures from other Markdown\n   *  implementations.)\n   *\n   *  ##### Intermediate Representation\n   *\n   *  *TODO* Talk about this :) Its JsonML, but document the node names we use.\n   *\n   *  [JsonML]: http://jsonml.org/ \"JSON Markup Language\"\n   **/\n  var Markdown = function(dialect) {\n    switch (typeof dialect) {\n    case \"undefined\":\n      this.dialect = Markdown.dialects.Gruber;\n      break;\n    case \"object\":\n      this.dialect = dialect;\n      break;\n    default:\n      if ( dialect in Markdown.dialects )\n        this.dialect = Markdown.dialects[dialect];\n      else\n        throw new Error(\"Unknown Markdown dialect '\" + String(dialect) + \"'\");\n      break;\n    }\n    this.em_state = [];\n    this.strong_state = [];\n    this.debug_indent = \"\";\n  };\n\n  /**\n   * Markdown.dialects\n   *\n   * Namespace of built-in dialects.\n   **/\n  Markdown.dialects = {};\n\n  return Markdown;\n\n});\n"
  },
  {
    "path": "src/dialects/dialect_helpers.js",
    "content": "if (typeof define !== 'function') { var define = require('amdefine')(module) }\ndefine([], function (w) {\n\n  var DialectHelpers = {};\n  DialectHelpers.inline_until_char = function( text, want ) {\n    var consumed = 0,\n        nodes = [];\n\n    while ( true ) {\n      if ( text.charAt( consumed ) === want ) {\n        // Found the character we were looking for\n        consumed++;\n        return [ consumed, nodes ];\n      }\n\n      if ( consumed >= text.length ) {\n        // No closing char found. Abort.\n        return [consumed, null, nodes];\n      }\n\n      var res = this.dialect.inline.__oneElement__.call(this, text.substr( consumed ) );\n      consumed += res[ 0 ];\n      // Add any returned nodes.\n      nodes.push.apply( nodes, res.slice( 1 ) );\n    }\n  };\n\n  // Helper function to make sub-classing a dialect easier\n  DialectHelpers.subclassDialect = function( d ) {\n    function Block() {}\n    Block.prototype = d.block;\n    function Inline() {}\n    Inline.prototype = d.inline;\n\n    return { block: new Block(), inline: new Inline() };\n  };\n\n  return DialectHelpers;\n});"
  },
  {
    "path": "src/dialects/gruber.js",
    "content": "if (typeof define !== 'function') { var define = require('amdefine')(module) }\ndefine(['../markdown_helpers', './dialect_helpers', '../parser'], function (MarkdownHelpers, DialectHelpers, Markdown) {\n\n\n  var forEach = MarkdownHelpers.forEach,\n      extract_attr = MarkdownHelpers.extract_attr,\n      mk_block = MarkdownHelpers.mk_block,\n      isEmpty = MarkdownHelpers.isEmpty,\n      inline_until_char = DialectHelpers.inline_until_char;\n\n  // A robust regexp for matching URLs. Thanks: https://gist.github.com/dperini/729294\n  var urlRegexp = /(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?/i.source;\n\n  /**\n   * Gruber dialect\n   *\n   * The default dialect that follows the rules set out by John Gruber's\n   * markdown.pl as closely as possible. Well actually we follow the behaviour of\n   * that script which in some places is not exactly what the syntax web page\n   * says.\n   **/\n  var Gruber = {\n    block: {\n      atxHeader: function atxHeader( block, next ) {\n        var m = block.match( /^(#{1,6})\\s*(.*?)\\s*#*\\s*(?:\\n|$)/ );\n\n        if ( !m )\n          return undefined;\n\n        var header = [ \"header\", { level: m[ 1 ].length } ];\n        Array.prototype.push.apply(header, this.processInline(m[ 2 ]));\n\n        if ( m[0].length < block.length )\n          next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) );\n\n        return [ header ];\n      },\n\n      setextHeader: function setextHeader( block, next ) {\n        var m = block.match( /^(.*)\\n([-=])\\2\\2+(?:\\n|$)/ );\n\n        if ( !m )\n          return undefined;\n\n        var level = ( m[ 2 ] === \"=\" ) ? 1 : 2,\n            header = [ \"header\", { level : level } ].concat( this.processInline(m[ 1 ]) );\n\n        if ( m[0].length < block.length )\n          next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) );\n\n        return [ header ];\n      },\n\n      code: function code( block, next ) {\n        // |    Foo\n        // |bar\n        // should be a code block followed by a paragraph. Fun\n        //\n        // There might also be adjacent code block to merge.\n\n        var ret = [],\n            re = /^(?: {0,3}\\t| {4})(.*)\\n?/;\n\n        // 4 spaces + content\n        if ( !block.match( re ) )\n          return undefined;\n\n        block_search:\n        do {\n          // Now pull out the rest of the lines\n          var b = this.loop_re_over_block(\n                    re, block.valueOf(), function( m ) { ret.push( m[1] ); } );\n\n          if ( b.length ) {\n            // Case alluded to in first comment. push it back on as a new block\n            next.unshift( mk_block(b, block.trailing) );\n            break block_search;\n          }\n          else if ( next.length ) {\n            // Check the next block - it might be code too\n            if ( !next[0].match( re ) )\n              break block_search;\n\n            // Pull how how many blanks lines follow - minus two to account for .join\n            ret.push ( block.trailing.replace(/[^\\n]/g, \"\").substring(2) );\n\n            block = next.shift();\n          }\n          else {\n            break block_search;\n          }\n        } while ( true );\n\n        return [ [ \"code_block\", ret.join(\"\\n\") ] ];\n      },\n\n      horizRule: function horizRule( block, next ) {\n        // this needs to find any hr in the block to handle abutting blocks\n        var m = block.match( /^(?:([\\s\\S]*?)\\n)?[ \\t]*([-_*])(?:[ \\t]*\\2){2,}[ \\t]*(?:\\n([\\s\\S]*))?$/ );\n\n        if ( !m )\n          return undefined;\n\n        var jsonml = [ [ \"hr\" ] ];\n\n        // if there's a leading abutting block, process it\n        if ( m[ 1 ] ) {\n          var contained = mk_block( m[ 1 ], \"\", block.lineNumber );\n          jsonml.unshift.apply( jsonml, this.toTree( contained, [] ) );\n        }\n\n        // if there's a trailing abutting block, stick it into next\n        if ( m[ 3 ] )\n          next.unshift( mk_block( m[ 3 ], block.trailing, block.lineNumber + 1 ) );\n\n        return jsonml;\n      },\n\n      // There are two types of lists. Tight and loose. Tight lists have no whitespace\n      // between the items (and result in text just in the <li>) and loose lists,\n      // which have an empty line between list items, resulting in (one or more)\n      // paragraphs inside the <li>.\n      //\n      // There are all sorts weird edge cases about the original markdown.pl's\n      // handling of lists:\n      //\n      // * Nested lists are supposed to be indented by four chars per level. But\n      //   if they aren't, you can get a nested list by indenting by less than\n      //   four so long as the indent doesn't match an indent of an existing list\n      //   item in the 'nest stack'.\n      //\n      // * The type of the list (bullet or number) is controlled just by the\n      //    first item at the indent. Subsequent changes are ignored unless they\n      //    are for nested lists\n      //\n      lists: (function( ) {\n        // Use a closure to hide a few variables.\n        var any_list = \"[*+-]|\\\\d+\\\\.\",\n            bullet_list = /[*+-]/,\n            // Capture leading indent as it matters for determining nested lists.\n            is_list_re = new RegExp( \"^( {0,3})(\" + any_list + \")[ \\t]+\" ),\n            indent_re = \"(?: {0,3}\\\\t| {4})\";\n\n        // TODO: Cache this regexp for certain depths.\n        // Create a regexp suitable for matching an li for a given stack depth\n        function regex_for_depth( depth ) {\n\n          return new RegExp(\n            // m[1] = indent, m[2] = list_type\n            \"(?:^(\" + indent_re + \"{0,\" + depth + \"} {0,3})(\" + any_list + \")\\\\s+)|\" +\n            // m[3] = cont\n            \"(^\" + indent_re + \"{0,\" + (depth-1) + \"}[ ]{0,4})\"\n          );\n        }\n        function expand_tab( input ) {\n          return input.replace( / {0,3}\\t/g, \"    \" );\n        }\n\n        // Add inline content `inline` to `li`. inline comes from processInline\n        // so is an array of content\n        function add(li, loose, inline, nl) {\n          if ( loose ) {\n            li.push( [ \"para\" ].concat(inline) );\n            return;\n          }\n          // Hmmm, should this be any block level element or just paras?\n          var add_to = li[li.length -1] instanceof Array && li[li.length - 1][0] === \"para\"\n                     ? li[li.length -1]\n                     : li;\n\n          // If there is already some content in this list, add the new line in\n          if ( nl && li.length > 1 )\n            inline.unshift(nl);\n\n          for ( var i = 0; i < inline.length; i++ ) {\n            var what = inline[i],\n                is_str = typeof what === \"string\";\n            if ( is_str && add_to.length > 1 && typeof add_to[add_to.length-1] === \"string\" )\n              add_to[ add_to.length-1 ] += what;\n            else\n              add_to.push( what );\n          }\n        }\n\n        // contained means have an indent greater than the current one. On\n        // *every* line in the block\n        function get_contained_blocks( depth, blocks ) {\n\n          var re = new RegExp( \"^(\" + indent_re + \"{\" + depth + \"}.*?\\\\n?)*$\" ),\n              replace = new RegExp(\"^\" + indent_re + \"{\" + depth + \"}\", \"gm\"),\n              ret = [];\n\n          while ( blocks.length > 0 ) {\n            if ( re.exec( blocks[0] ) ) {\n              var b = blocks.shift(),\n                  // Now remove that indent\n                  x = b.replace( replace, \"\");\n\n              ret.push( mk_block( x, b.trailing, b.lineNumber ) );\n            }\n            else\n              break;\n          }\n          return ret;\n        }\n\n        // passed to stack.forEach to turn list items up the stack into paras\n        function paragraphify(s, i, stack) {\n          var list = s.list;\n          var last_li = list[list.length-1];\n\n          if ( last_li[1] instanceof Array && last_li[1][0] === \"para\" )\n            return;\n\n          if ( i + 1 === stack.length ) {\n            // Last stack frame\n            // Keep the same array, but replace the contents\n            last_li.push( [\"para\"].concat( last_li.splice(1, last_li.length - 1) ) );\n          }\n          else {\n            var sublist = last_li.pop();\n            last_li.push( [\"para\"].concat( last_li.splice(1, last_li.length - 1) ), sublist );\n          }\n        }\n\n        // The matcher function\n        return function( block, next ) {\n          var m = block.match( is_list_re );\n          if ( !m )\n            return undefined;\n\n          function make_list( m ) {\n            var list = bullet_list.exec( m[2] )\n                     ? [\"bulletlist\"]\n                     : [\"numberlist\"];\n\n            stack.push( { list: list, indent: m[1] } );\n            return list;\n          }\n\n\n          var stack = [], // Stack of lists for nesting.\n              list = make_list( m ),\n              last_li,\n              loose = false,\n              ret = [ stack[0].list ],\n              i;\n\n          // Loop to search over block looking for inner block elements and loose lists\n          loose_search:\n          while ( true ) {\n            // Split into lines preserving new lines at end of line\n            var lines = block.split( /(?=\\n)/ );\n\n            // We have to grab all lines for a li and call processInline on them\n            // once as there are some inline things that can span lines.\n            var li_accumulate = \"\", nl = \"\";\n\n            // Loop over the lines in this block looking for tight lists.\n            tight_search:\n            for ( var line_no = 0; line_no < lines.length; line_no++ ) {\n              nl = \"\";\n              var l = lines[line_no].replace(/^\\n/, function(n) { nl = n; return \"\"; });\n\n\n              // TODO: really should cache this\n              var line_re = regex_for_depth( stack.length );\n\n              m = l.match( line_re );\n              //print( \"line:\", uneval(l), \"\\nline match:\", uneval(m) );\n\n              // We have a list item\n              if ( m[1] !== undefined ) {\n                // Process the previous list item, if any\n                if ( li_accumulate.length ) {\n                  add( last_li, loose, this.processInline( li_accumulate ), nl );\n                  // Loose mode will have been dealt with. Reset it\n                  loose = false;\n                  li_accumulate = \"\";\n                }\n\n                m[1] = expand_tab( m[1] );\n                var wanted_depth = Math.floor(m[1].length/4)+1;\n                //print( \"want:\", wanted_depth, \"stack:\", stack.length);\n                if ( wanted_depth > stack.length ) {\n                  // Deep enough for a nested list outright\n                  //print ( \"new nested list\" );\n                  list = make_list( m );\n                  last_li.push( list );\n                  last_li = list[1] = [ \"listitem\" ];\n                }\n                else {\n                  // We aren't deep enough to be strictly a new level. This is\n                  // where Md.pl goes nuts. If the indent matches a level in the\n                  // stack, put it there, else put it one deeper then the\n                  // wanted_depth deserves.\n                  var found = false;\n                  for ( i = 0; i < stack.length; i++ ) {\n                    if ( stack[ i ].indent !== m[1] )\n                      continue;\n\n                    list = stack[ i ].list;\n                    stack.splice( i+1, stack.length - (i+1) );\n                    found = true;\n                    break;\n                  }\n\n                  if (!found) {\n                    //print(\"not found. l:\", uneval(l));\n                    wanted_depth++;\n                    if ( wanted_depth <= stack.length ) {\n                      stack.splice(wanted_depth, stack.length - wanted_depth);\n                      //print(\"Desired depth now\", wanted_depth, \"stack:\", stack.length);\n                      list = stack[wanted_depth-1].list;\n                      //print(\"list:\", uneval(list) );\n                    }\n                    else {\n                      //print (\"made new stack for messy indent\");\n                      list = make_list(m);\n                      last_li.push(list);\n                    }\n                  }\n\n                  //print( uneval(list), \"last\", list === stack[stack.length-1].list );\n                  last_li = [ \"listitem\" ];\n                  list.push(last_li);\n                } // end depth of shenegains\n                nl = \"\";\n              }\n\n              // Add content\n              if ( l.length > m[0].length )\n                li_accumulate += nl + l.substr( m[0].length );\n            } // tight_search\n\n            if ( li_accumulate.length ) {\n\n              var contents = this.processBlock(li_accumulate, []),\n                  firstBlock = contents[0];\n\n              if (firstBlock) {\n                firstBlock.shift();\n                contents.splice.apply(contents, [0, 1].concat(firstBlock));\n                add( last_li, loose, contents, nl );\n\n                // Let's not creating a trailing \\n after content in the li\n                if(last_li[last_li.length-1] === \"\\n\") {\n                  last_li.pop();\n                }\n\n                // Loose mode will have been dealt with. Reset it\n                loose = false;\n                li_accumulate = \"\";\n              }\n            }\n\n            // Look at the next block - we might have a loose list. Or an extra\n            // paragraph for the current li\n            var contained = get_contained_blocks( stack.length, next );\n\n            // Deal with code blocks or properly nested lists\n            if ( contained.length > 0 ) {\n              // Make sure all listitems up the stack are paragraphs\n              forEach( stack, paragraphify, this);\n\n              last_li.push.apply( last_li, this.toTree( contained, [] ) );\n            }\n\n            var next_block = next[0] && next[0].valueOf() || \"\";\n\n            if ( next_block.match(is_list_re) || next_block.match( /^ / ) ) {\n              block = next.shift();\n\n              // Check for an HR following a list: features/lists/hr_abutting\n              var hr = this.dialect.block.horizRule.call( this, block, next );\n\n              if ( hr ) {\n                ret.push.apply(ret, hr);\n                break;\n              }\n\n              // Add paragraphs if the indentation level stays the same\n              if (stack[stack.length-1].indent === block.match(/^\\s*/)[0]) {\n                forEach( stack, paragraphify, this);\n              }\n\n              loose = true;\n              continue loose_search;\n            }\n            break;\n          } // loose_search\n\n          return ret;\n        };\n      })(),\n\n      blockquote: function blockquote( block, next ) {\n\n        // Handle quotes that have spaces before them\n        var m = /(^|\\n) +(\\>[\\s\\S]*)/.exec(block);\n        if (m && m[2] && m[2].length) {\n          var blockContents = block.replace(/(^|\\n) +\\>/, \"$1>\");\n          next.unshift(blockContents);\n          return [];\n        }\n\n        if ( !block.match( /^>/m ) )\n          return undefined;\n\n        var jsonml = [];\n\n        // separate out the leading abutting block, if any. I.e. in this case:\n        //\n        //  a\n        //  > b\n        //\n        if ( block[ 0 ] !== \">\" ) {\n          var lines = block.split( /\\n/ ),\n              prev = [],\n              line_no = block.lineNumber;\n\n          // keep shifting lines until you find a crotchet\n          while ( lines.length && lines[ 0 ][ 0 ] !== \">\" ) {\n            prev.push( lines.shift() );\n            line_no++;\n          }\n\n          var abutting = mk_block( prev.join( \"\\n\" ), \"\\n\", block.lineNumber );\n          jsonml.push.apply( jsonml, this.processBlock( abutting, [] ) );\n          // reassemble new block of just block quotes!\n          block = mk_block( lines.join( \"\\n\" ), block.trailing, line_no );\n        }\n\n\n        // if the next block is also a blockquote merge it in\n        while ( next.length && next[ 0 ][ 0 ] === \">\" ) {\n          var b = next.shift();\n          block = mk_block( block + block.trailing + b, b.trailing, block.lineNumber );\n        }\n\n        // Strip off the leading \"> \" and re-process as a block.\n        var input = block.replace( /^> ?/gm, \"\" ),\n            old_tree = this.tree,\n            processedBlock = this.toTree( input, [ \"blockquote\" ] ),\n            attr = extract_attr( processedBlock );\n\n        // If any link references were found get rid of them\n        if ( attr && attr.references ) {\n          delete attr.references;\n          // And then remove the attribute object if it's empty\n          if ( isEmpty( attr ) )\n            processedBlock.splice( 1, 1 );\n        }\n\n        jsonml.push( processedBlock );\n        return jsonml;\n      },\n\n      referenceDefn: function referenceDefn( block, next) {\n        var re = /^\\s*\\[([^\\[\\]]+)\\]:\\s*(\\S+)(?:\\s+(?:(['\"])(.*)\\3|\\((.*?)\\)))?\\n?/;\n        // interesting matches are [ , ref_id, url, , title, title ]\n\n        if ( !block.match(re) )\n          return undefined;\n\n        var attrs = create_attrs.call( this );\n\n        var b = this.loop_re_over_block(re, block, function( m ) {\n          create_reference(attrs, m);\n        } );\n\n        if ( b.length )\n          next.unshift( mk_block( b, block.trailing ) );\n\n        return [];\n      },\n\n      para: function para( block ) {\n        // everything's a para!\n        return [ [\"para\"].concat( this.processInline( block ) ) ];\n      }\n    },\n\n    inline: {\n\n      __oneElement__: function oneElement( text, patterns_or_re, previous_nodes ) {\n        var m,\n            res;\n\n        patterns_or_re = patterns_or_re || this.dialect.inline.__patterns__;\n        var re = new RegExp( \"([\\\\s\\\\S]*?)(\" + (patterns_or_re.source || patterns_or_re) + \")\" );\n\n        m = re.exec( text );\n        if (!m) {\n          // Just boring text\n          return [ text.length, text ];\n        }\n        else if ( m[1] ) {\n          // Some un-interesting text matched. Return that first\n          return [ m[1].length, m[1] ];\n        }\n\n        var res;\n        if ( m[2] in this.dialect.inline ) {\n          res = this.dialect.inline[ m[2] ].call(\n                    this,\n                    text.substr( m.index ), m, previous_nodes || [] );\n        }\n        // Default for now to make dev easier. just slurp special and output it.\n        res = res || [ m[2].length, m[2] ];\n        return res;\n      },\n\n      __call__: function inline( text, patterns ) {\n\n        var out = [],\n            res;\n\n        function add(x) {\n          //D:self.debug(\"  adding output\", uneval(x));\n          if ( typeof x === \"string\" && typeof out[out.length-1] === \"string\" )\n            out[ out.length-1 ] += x;\n          else\n            out.push(x);\n        }\n\n        while ( text.length > 0 ) {\n          res = this.dialect.inline.__oneElement__.call(this, text, patterns, out );\n          text = text.substr( res.shift() );\n          forEach(res, add );\n        }\n\n        return out;\n      },\n\n      // These characters are interesting elsewhere, so have rules for them so that\n      // chunks of plain text blocks don't include them\n      \"]\": function () {},\n      \"}\": function () {},\n\n      __escape__ : /^\\\\[\\\\`\\*_{}<>\\[\\]()#\\+.!\\-]/,\n\n      \"\\\\\": function escaped( text ) {\n        // [ length of input processed, node/children to add... ]\n        // Only esacape: \\ ` * _ { } [ ] ( ) # * + - . !\n        if ( this.dialect.inline.__escape__.exec( text ) )\n          return [ 2, text.charAt( 1 ) ];\n        else\n          // Not an esacpe\n          return [ 1, \"\\\\\" ];\n      },\n\n      \"![\": function image( text ) {\n\n        // Without this guard V8 crashes hard on the RegExp\n        if (text.indexOf('(') >= 0 && text.indexOf(')') === -1) { return; }\n\n        // Unlike images, alt text is plain text only. no other elements are\n        // allowed in there\n\n        // ![Alt text](/path/to/img.jpg \"Optional title\")\n        //      1          2            3       4         <--- captures\n        //\n        // First attempt to use a strong URL regexp to catch things like parentheses. If it misses, use the\n        // old one.\n        var m = text.match(new RegExp(\"^!\\\\[(.*?)][ \\\\t]*\\\\((\" + urlRegexp + \")\\\\)([ \\\\t])*([\\\"'].*[\\\"'])?\")) ||\n                text.match( /^!\\[(.*?)\\][ \\t]*\\([ \\t]*([^\")]*?)(?:[ \\t]+([\"'])(.*?)\\3)?[ \\t]*\\)/ );\n\n        if ( m ) {\n          if ( m[2] && m[2][0] === \"<\" && m[2][m[2].length-1] === \">\" )\n            m[2] = m[2].substring( 1, m[2].length - 1 );\n\n          m[2] = this.dialect.inline.__call__.call( this, m[2], /\\\\/ )[0];\n\n          var attrs = { alt: m[1], href: m[2] || \"\" };\n          if ( m[4] !== undefined)\n            attrs.title = m[4];\n\n          return [ m[0].length, [ \"img\", attrs ] ];\n        }\n\n        // ![Alt text][id]\n        m = text.match( /^!\\[(.*?)\\][ \\t]*\\[(.*?)\\]/ );\n\n        if ( m ) {\n          // We can't check if the reference is known here as it likely wont be\n          // found till after. Check it in md tree->hmtl tree conversion\n          return [ m[0].length, [ \"img_ref\", { alt: m[1], ref: m[2].toLowerCase(), original: m[0] } ] ];\n        }\n\n        // Just consume the '!['\n        return [ 2, \"![\" ];\n      },\n\n      \"[\": function link( text ) {\n\n        var open = 1;\n        for (var i=0; i<text.length; i++) {\n          var c = text.charAt(i);\n          if (c === '[') { open++; }\n          if (c === ']') { open--; }\n\n          if (open > 3) { return [1, \"[\"]; }\n        }\n\n        var orig = String(text);\n        // Inline content is possible inside `link text`\n        var res = inline_until_char.call( this, text.substr(1), \"]\" );\n\n        // No closing ']' found. Just consume the [\n        if ( !res[1] ) {\n          return [ res[0] + 1, text.charAt(0) ].concat(res[2]);\n        }\n\n        // empty link\n        if ( res[0] === 1 ) { return [ 2, \"[]\" ]; }\n\n        var consumed = 1 + res[ 0 ],\n            children = res[ 1 ],\n            link,\n            attrs;\n\n        // At this point the first [...] has been parsed. See what follows to find\n        // out which kind of link we are (reference or direct url)\n        text = text.substr( consumed );\n\n        // [link text](/path/to/img.jpg \"Optional title\")\n        //                 1            2       3         <--- captures\n        // This will capture up to the last paren in the block. We then pull\n        // back based on if there a matching ones in the url\n        //    ([here](/url/(test))\n        // The parens have to be balanced\n        var m = text.match( /^\\s*\\([ \\t]*([^\"']*)(?:[ \\t]+([\"'])(.*?)\\2)?[ \\t]*\\)/ );\n        if ( m ) {\n          var url = m[1].replace(/\\s+$/, '');\n          consumed += m[0].length;\n\n          if ( url && url[0] === \"<\" && url[url.length-1] === \">\" )\n            url = url.substring( 1, url.length - 1 );\n\n          // If there is a title we don't have to worry about parens in the url\n          if ( !m[3] ) {\n            var open_parens = 1; // One open that isn't in the capture\n            for ( var len = 0; len < url.length; len++ ) {\n              switch ( url[len] ) {\n              case \"(\":\n                open_parens++;\n                break;\n              case \")\":\n                if ( --open_parens === 0) {\n                  consumed -= url.length - len;\n                  url = url.substring(0, len);\n                }\n                break;\n              }\n            }\n          }\n\n          // Process escapes only\n          url = this.dialect.inline.__call__.call( this, url, /\\\\/ )[0];\n\n          attrs = { href: url || \"\" };\n          if ( m[3] !== undefined)\n            attrs.title = m[3];\n\n          link = [ \"link\", attrs ].concat( children );\n          return [ consumed, link ];\n        }\n\n        m = text.match(new RegExp(\"^\\\\((\" + urlRegexp + \")\\\\)\"));\n        if (m && m[1]) {\n          consumed += m[0].length;\n          link = [\"link\", {href: m[1]}].concat(children);\n          return [consumed, link];\n        }\n\n        // [Alt text][id]\n        // [Alt text] [id]\n        m = text.match( /^\\s*\\[(.*?)\\]/ );\n        if ( m ) {\n\n          consumed += m[ 0 ].length;\n\n          // [links][] uses links as its reference\n          attrs = { ref: ( m[ 1 ] || String(children) ).toLowerCase(),  original: orig.substr( 0, consumed ) };\n\n          if (children && children.length > 0) {\n            link = [ \"link_ref\", attrs ].concat( children );\n\n            // We can't check if the reference is known here as it likely wont be\n            // found till after. Check it in md tree->hmtl tree conversion.\n            // Store the original so that conversion can revert if the ref isn't found.\n            return [ consumed, link ];\n          }\n        }\n\n        // Another check for references\n        m = orig.match(/^\\s*\\[(.*?)\\]:\\s*(\\S+)(?:\\s+(?:(['\"])(.*?)\\3|\\((.*?)\\)))?\\n?/);\n        if (m) {\n          var attrs = create_attrs.call(this);\n          create_reference(attrs, m);\n          return [ m[0].length ];\n        }\n\n        // [id]\n        // Only if id is plain (no formatting.)\n        if ( children.length === 1 && typeof children[0] === \"string\" ) {\n\n          var normalized = children[0].toLowerCase().replace(/\\s+/, ' ');\n          attrs = { ref: normalized,  original: orig.substr( 0, consumed ) };\n          link = [ \"link_ref\", attrs, children[0] ];\n          return [ consumed, link ];\n        }\n\n        // Just consume the \"[\"\n        return [ 1, \"[\" ];\n      },\n\n\n      \"<\": function autoLink( text ) {\n        var m;\n\n        if ( ( m = text.match( /^<(?:((https?|ftp|mailto):[^>]+)|(.*?@.*?\\.[a-zA-Z]+))>/ ) ) !== null ) {\n          if ( m[3] )\n            return [ m[0].length, [ \"link\", { href: \"mailto:\" + m[3] }, m[3] ] ];\n          else if ( m[2] === \"mailto\" )\n            return [ m[0].length, [ \"link\", { href: m[1] }, m[1].substr(\"mailto:\".length ) ] ];\n          else\n            return [ m[0].length, [ \"link\", { href: m[1] }, m[1] ] ];\n        }\n\n        return [ 1, \"<\" ];\n      },\n\n      \"`\": function inlineCode( text ) {\n        // Inline code block. as many backticks as you like to start it\n        // Always skip over the opening ticks.\n        var m = text.match( /(`+)(([\\s\\S]*?)\\1)/ );\n\n        if ( m && m[2] )\n          return [ m[1].length + m[2].length, [ \"inlinecode\", m[3] ] ];\n        else {\n          // TODO: No matching end code found - warn!\n          return [ 1, \"`\" ];\n        }\n      },\n\n      \"  \\n\": function lineBreak() {\n        return [ 3, [ \"linebreak\" ] ];\n      }\n\n    }\n  };\n\n  // Meta Helper/generator method for em and strong handling\n  function strong_em( tag, md ) {\n\n    var state_slot = tag + \"_state\",\n        other_slot = tag === \"strong\" ? \"em_state\" : \"strong_state\";\n\n    function CloseTag(len) {\n      this.len_after = len;\n      this.name = \"close_\" + md;\n    }\n\n    return function ( text ) {\n\n      if ( this[state_slot][0] === md ) {\n        // Most recent em is of this type\n        //D:this.debug(\"closing\", md);\n        this[state_slot].shift();\n\n        // \"Consume\" everything to go back to the recursion in the else-block below\n        return[ text.length, new CloseTag(text.length-md.length) ];\n      }\n      else {\n        // Store a clone of the em/strong states\n        var other = this[other_slot].slice(),\n            state = this[state_slot].slice();\n\n        this[state_slot].unshift(md);\n\n        //D:this.debug_indent += \"  \";\n\n        // Recurse\n        var res = this.processInline( text.substr( md.length ) );\n        //D:this.debug_indent = this.debug_indent.substr(2);\n\n        var last = res[res.length - 1];\n\n        //D:this.debug(\"processInline from\", tag + \": \", uneval( res ) );\n\n        var check = this[state_slot].shift();\n        if ( last instanceof CloseTag ) {\n          res.pop();\n          // We matched! Huzzah.\n          var consumed = text.length - last.len_after;\n          return [ consumed, [ tag ].concat(res) ];\n        }\n        else {\n          // Restore the state of the other kind. We might have mistakenly closed it.\n          this[other_slot] = other;\n          this[state_slot] = state;\n\n          // We can't reuse the processed result as it could have wrong parsing contexts in it.\n          return [ md.length, md ];\n        }\n      }\n    }; // End returned function\n  }\n\n  // A helper function to create attributes\n  function create_attrs() {\n    if ( !extract_attr( this.tree ) ) {\n      this.tree.splice( 1, 0, {} );\n    }\n\n    var attrs = extract_attr( this.tree );\n\n    // make a references hash if it doesn't exist\n    if ( attrs.references === undefined ) {\n      attrs.references = {};\n    }\n\n    return attrs;\n  }\n\n  // Create references for attributes\n  function create_reference(attrs, m) {\n    if ( m[2] && m[2][0] === \"<\" && m[2][m[2].length-1] === \">\" )\n      m[2] = m[2].substring( 1, m[2].length - 1 );\n\n    var ref = attrs.references[ m[1].toLowerCase() ] = {\n      href: m[2]\n    };\n\n    if ( m[4] !== undefined )\n      ref.title = m[4];\n    else if ( m[5] !== undefined )\n      ref.title = m[5];\n  }\n\n  Gruber.inline[\"**\"] = strong_em(\"strong\", \"**\");\n  Gruber.inline[\"__\"] = strong_em(\"strong\", \"__\");\n  Gruber.inline[\"*\"]  = strong_em(\"em\", \"*\");\n  Gruber.inline[\"_\"]  = strong_em(\"em\", \"_\");\n\n  Markdown.dialects.Gruber = Gruber;\n  Markdown.buildBlockOrder ( Markdown.dialects.Gruber.block );\n  Markdown.buildInlinePatterns( Markdown.dialects.Gruber.inline );\n\n  return Gruber;\n});\n"
  },
  {
    "path": "src/dialects/maruku.js",
    "content": "if (typeof define !== 'function') { var define = require('amdefine')(module) }\ndefine(['../markdown_helpers', './dialect_helpers', './gruber', '../parser'], function (MarkdownHelpers, DialectHelpers, Gruber, Markdown) {\n\n  var Maruku = DialectHelpers.subclassDialect( Gruber ),\n      extract_attr = MarkdownHelpers.extract_attr,\n      forEach = MarkdownHelpers.forEach;\n\n  Maruku.processMetaHash = function processMetaHash( meta_string ) {\n    var meta = split_meta_hash( meta_string ),\n        attr = {};\n\n    for ( var i = 0; i < meta.length; ++i ) {\n      // id: #foo\n      if ( /^#/.test( meta[ i ] ) )\n        attr.id = meta[ i ].substring( 1 );\n      // class: .foo\n      else if ( /^\\./.test( meta[ i ] ) ) {\n        // if class already exists, append the new one\n        if ( attr[\"class\"] )\n          attr[\"class\"] = attr[\"class\"] + meta[ i ].replace( /./, \" \" );\n        else\n          attr[\"class\"] = meta[ i ].substring( 1 );\n      }\n      // attribute: foo=bar\n      else if ( /\\=/.test( meta[ i ] ) ) {\n        var s = meta[ i ].split( /\\=/ );\n        attr[ s[ 0 ] ] = s[ 1 ];\n      }\n    }\n\n    return attr;\n  };\n\n  function split_meta_hash( meta_string ) {\n    var meta = meta_string.split( \"\" ),\n        parts = [ \"\" ],\n        in_quotes = false;\n\n    while ( meta.length ) {\n      var letter = meta.shift();\n      switch ( letter ) {\n      case \" \" :\n        // if we're in a quoted section, keep it\n        if ( in_quotes )\n          parts[ parts.length - 1 ] += letter;\n        // otherwise make a new part\n        else\n          parts.push( \"\" );\n        break;\n      case \"'\" :\n      case '\"' :\n        // reverse the quotes and move straight on\n        in_quotes = !in_quotes;\n        break;\n      case \"\\\\\" :\n        // shift off the next letter to be used straight away.\n        // it was escaped so we'll keep it whatever it is\n        letter = meta.shift();\n        /* falls through */\n      default :\n        parts[ parts.length - 1 ] += letter;\n        break;\n      }\n    }\n\n    return parts;\n  }\n\n  Maruku.block.document_meta = function document_meta( block ) {\n    // we're only interested in the first block\n    if ( block.lineNumber > 1 )\n      return undefined;\n\n    // document_meta blocks consist of one or more lines of `Key: Value\\n`\n    if ( ! block.match( /^(?:\\w+:.*\\n)*\\w+:.*$/ ) )\n      return undefined;\n\n    // make an attribute node if it doesn't exist\n    if ( !extract_attr( this.tree ) )\n      this.tree.splice( 1, 0, {} );\n\n    var pairs = block.split( /\\n/ );\n    for ( var p in pairs ) {\n      var m = pairs[ p ].match( /(\\w+):\\s*(.*)$/ ),\n          key = m[ 1 ].toLowerCase(),\n          value = m[ 2 ];\n\n      this.tree[ 1 ][ key ] = value;\n    }\n\n    // document_meta produces no content!\n    return [];\n  };\n\n  Maruku.block.block_meta = function block_meta( block ) {\n    // check if the last line of the block is an meta hash\n    var m = block.match( /(^|\\n) {0,3}\\{:\\s*((?:\\\\\\}|[^\\}])*)\\s*\\}$/ );\n    if ( !m )\n      return undefined;\n\n    // process the meta hash\n    var attr = this.dialect.processMetaHash( m[ 2 ] ),\n        hash;\n\n    // if we matched ^ then we need to apply meta to the previous block\n    if ( m[ 1 ] === \"\" ) {\n      var node = this.tree[ this.tree.length - 1 ];\n      hash = extract_attr( node );\n\n      // if the node is a string (rather than JsonML), bail\n      if ( typeof node === \"string\" )\n        return undefined;\n\n      // create the attribute hash if it doesn't exist\n      if ( !hash ) {\n        hash = {};\n        node.splice( 1, 0, hash );\n      }\n\n      // add the attributes in\n      for ( var a in attr )\n        hash[ a ] = attr[ a ];\n\n      // return nothing so the meta hash is removed\n      return [];\n    }\n\n    // pull the meta hash off the block and process what's left\n    var b = block.replace( /\\n.*$/, \"\" ),\n        result = this.processBlock( b, [] );\n\n    // get or make the attributes hash\n    hash = extract_attr( result[ 0 ] );\n    if ( !hash ) {\n      hash = {};\n      result[ 0 ].splice( 1, 0, hash );\n    }\n\n    // attach the attributes to the block\n    for ( var a in attr )\n      hash[ a ] = attr[ a ];\n\n    return result;\n  };\n\n  Maruku.block.definition_list = function definition_list( block, next ) {\n    // one or more terms followed by one or more definitions, in a single block\n    var tight = /^((?:[^\\s:].*\\n)+):\\s+([\\s\\S]+)$/,\n        list = [ \"dl\" ],\n        i, m;\n\n    // see if we're dealing with a tight or loose block\n    if ( ( m = block.match( tight ) ) ) {\n      // pull subsequent tight DL blocks out of `next`\n      var blocks = [ block ];\n      while ( next.length && tight.exec( next[ 0 ] ) )\n        blocks.push( next.shift() );\n\n      for ( var b = 0; b < blocks.length; ++b ) {\n        var m = blocks[ b ].match( tight ),\n            terms = m[ 1 ].replace( /\\n$/, \"\" ).split( /\\n/ ),\n            defns = m[ 2 ].split( /\\n:\\s+/ );\n\n        // print( uneval( m ) );\n\n        for ( i = 0; i < terms.length; ++i )\n          list.push( [ \"dt\", terms[ i ] ] );\n\n        for ( i = 0; i < defns.length; ++i ) {\n          // run inline processing over the definition\n          list.push( [ \"dd\" ].concat( this.processInline( defns[ i ].replace( /(\\n)\\s+/, \"$1\" ) ) ) );\n        }\n      }\n    }\n    else {\n      return undefined;\n    }\n\n    return [ list ];\n  };\n\n  // splits on unescaped instances of @ch. If @ch is not a character the result\n  // can be unpredictable\n\n  Maruku.block.table = function table ( block ) {\n\n    var _split_on_unescaped = function( s, ch ) {\n      ch = ch || '\\\\s';\n      if ( ch.match(/^[\\\\|\\[\\]{}?*.+^$]$/) )\n        ch = '\\\\' + ch;\n      var res = [ ],\n          r = new RegExp('^((?:\\\\\\\\.|[^\\\\\\\\' + ch + '])*)' + ch + '(.*)'),\n          m;\n      while ( ( m = s.match( r ) ) ) {\n        res.push( m[1] );\n        s = m[2];\n      }\n      res.push(s);\n      return res;\n    };\n\n    var leading_pipe = /^ {0,3}\\|(.+)\\n {0,3}\\|\\s*([\\-:]+[\\-| :]*)\\n((?:\\s*\\|.*(?:\\n|$))*)(?=\\n|$)/,\n        // find at least an unescaped pipe in each line\n        no_leading_pipe = /^ {0,3}(\\S(?:\\\\.|[^\\\\|])*\\|.*)\\n {0,3}([\\-:]+\\s*\\|[\\-| :]*)\\n((?:(?:\\\\.|[^\\\\|])*\\|.*(?:\\n|$))*)(?=\\n|$)/,\n        i,\n        m;\n    if ( ( m = block.match( leading_pipe ) ) ) {\n      // remove leading pipes in contents\n      // (header and horizontal rule already have the leading pipe left out)\n      m[3] = m[3].replace(/^\\s*\\|/gm, '');\n    } else if ( ! ( m = block.match( no_leading_pipe ) ) ) {\n      return undefined;\n    }\n\n    var table = [ \"table\", [ \"thead\", [ \"tr\" ] ], [ \"tbody\" ] ];\n\n    // remove trailing pipes, then split on pipes\n    // (no escaped pipes are allowed in horizontal rule)\n    m[2] = m[2].replace(/\\|\\s*$/, '').split('|');\n\n    // process alignment\n    var html_attrs = [ ];\n    forEach (m[2], function (s) {\n      if (s.match(/^\\s*-+:\\s*$/))\n        html_attrs.push({align: \"right\"});\n      else if (s.match(/^\\s*:-+\\s*$/))\n        html_attrs.push({align: \"left\"});\n      else if (s.match(/^\\s*:-+:\\s*$/))\n        html_attrs.push({align: \"center\"});\n      else\n        html_attrs.push({});\n    });\n\n    // now for the header, avoid escaped pipes\n    m[1] = _split_on_unescaped(m[1].replace(/\\|\\s*$/, ''), '|');\n    for (i = 0; i < m[1].length; i++) {\n      table[1][1].push(['th', html_attrs[i] || {}].concat(\n        this.processInline(m[1][i].trim())));\n    }\n\n    // now for body contents\n    forEach (m[3].replace(/\\|\\s*$/mg, '').split('\\n'), function (row) {\n      var html_row = ['tr'];\n      row = _split_on_unescaped(row, '|');\n      for (i = 0; i < row.length; i++)\n        html_row.push(['td', html_attrs[i] || {}].concat(this.processInline(row[i].trim())));\n      table[2].push(html_row);\n    }, this);\n\n    return [table];\n  };\n\n  Maruku.inline[ \"{:\" ] = function inline_meta( text, matches, out ) {\n    if ( !out.length )\n      return [ 2, \"{:\" ];\n\n    // get the preceeding element\n    var before = out[ out.length - 1 ];\n\n    if ( typeof before === \"string\" )\n      return [ 2, \"{:\" ];\n\n    // match a meta hash\n    var m = text.match( /^\\{:\\s*((?:\\\\\\}|[^\\}])*)\\s*\\}/ );\n\n    // no match, false alarm\n    if ( !m )\n      return [ 2, \"{:\" ];\n\n    // attach the attributes to the preceeding element\n    var meta = this.dialect.processMetaHash( m[ 1 ] ),\n        attr = extract_attr( before );\n\n    if ( !attr ) {\n      attr = {};\n      before.splice( 1, 0, attr );\n    }\n\n    for ( var k in meta )\n      attr[ k ] = meta[ k ];\n\n    // cut out the string and replace it with nothing\n    return [ m[ 0 ].length, \"\" ];\n  };\n\n\n  Markdown.dialects.Maruku = Maruku;\n  Markdown.dialects.Maruku.inline.__escape__ = /^\\\\[\\\\`\\*_{}\\[\\]()#\\+.!\\-|:]/;\n  Markdown.buildBlockOrder ( Markdown.dialects.Maruku.block );\n  Markdown.buildInlinePatterns( Markdown.dialects.Maruku.inline );\n\n  return Maruku;\n});\n"
  },
  {
    "path": "src/markdown.js",
    "content": "if (typeof define !== 'function') { var define = require('amdefine')(module) }\n\n// Include all our dependencies and return the resulting library.\n\ndefine(['./parser', './markdown_helpers', './render_tree', './dialects/gruber', './dialects/maruku'], function(Markdown) {\n  return Markdown;\n});\n"
  },
  {
    "path": "src/markdown_helpers.js",
    "content": "if (typeof define !== 'function') { var define = require('amdefine')(module) }\n\ndefine([], function (w) {\n\n  var MarkdownHelpers = {};\n\n  // For Spidermonkey based engines\n  function mk_block_toSource() {\n    return \"Markdown.mk_block( \" +\n            uneval(this.toString()) +\n            \", \" +\n            uneval(this.trailing) +\n            \", \" +\n            uneval(this.lineNumber) +\n            \" )\";\n  }\n\n  // node\n  function mk_block_inspect() {\n    var util = require(\"util\");\n    return \"Markdown.mk_block( \" +\n            util.inspect(this.toString()) +\n            \", \" +\n            util.inspect(this.trailing) +\n            \", \" +\n            util.inspect(this.lineNumber) +\n            \" )\";\n\n  }\n\n  MarkdownHelpers.mk_block = function(block, trail, line) {\n    // Be helpful for default case in tests.\n    if ( arguments.length === 1 )\n      trail = \"\\n\\n\";\n\n    // We actually need a String object, not a string primitive\n    /* jshint -W053 */\n    var s = new String(block);\n    s.trailing = trail;\n    // To make it clear its not just a string\n    s.inspect = mk_block_inspect;\n    s.toSource = mk_block_toSource;\n\n    if ( line !== undefined )\n      s.lineNumber = line;\n\n    return s;\n  };\n\n\n  var isArray = MarkdownHelpers.isArray = Array.isArray || function(obj) {\n    return Object.prototype.toString.call(obj) === \"[object Array]\";\n  };\n\n  // Don't mess with Array.prototype. Its not friendly\n  if ( Array.prototype.forEach ) {\n    MarkdownHelpers.forEach = function forEach( arr, cb, thisp ) {\n      return arr.forEach( cb, thisp );\n    };\n  }\n  else {\n    MarkdownHelpers.forEach = function forEach(arr, cb, thisp) {\n      for (var i = 0; i < arr.length; i++)\n        cb.call(thisp || arr, arr[i], i, arr);\n    };\n  }\n\n  MarkdownHelpers.isEmpty = function isEmpty( obj ) {\n    for ( var key in obj ) {\n      if ( hasOwnProperty.call( obj, key ) )\n        return false;\n    }\n    return true;\n  };\n\n  MarkdownHelpers.extract_attr = function extract_attr( jsonml ) {\n    return isArray(jsonml)\n        && jsonml.length > 1\n        && typeof jsonml[ 1 ] === \"object\"\n        && !( isArray(jsonml[ 1 ]) )\n        ? jsonml[ 1 ]\n        : undefined;\n  };\n\n  return MarkdownHelpers;\n\n});"
  },
  {
    "path": "src/parser.js",
    "content": "if (typeof define !== 'function') { var define = require('amdefine')(module) }\n\ndefine(['./markdown_helpers', './core'], function(MarkdownHelpers, Markdown) {\n\n  // Imported functions\n  var mk_block = Markdown.mk_block = MarkdownHelpers.mk_block,\n      isArray = MarkdownHelpers.isArray;\n\n  /**\n   *  parse( markdown, [dialect] ) -> JsonML\n   *  - markdown (String): markdown string to parse\n   *  - dialect (String | Dialect): the dialect to use, defaults to gruber\n   *\n   *  Parse `markdown` and return a markdown document as a Markdown.JsonML tree.\n   **/\n  Markdown.parse = function( source, dialect ) {\n    // dialect will default if undefined\n    var md = new Markdown( dialect );\n    return md.toTree( source );\n  };\n\n  /**\n   *  count_lines( str ) -> count\n   *  - str (String): String whose lines we want to count\n   *\n   *  Counts the number of linebreaks in `str`\n   **/\n  function count_lines( str ) {\n    return str.split(\"\\n\").length - 1;\n  }\n\n  // Internal - split source into rough blocks\n  Markdown.prototype.split_blocks = function splitBlocks( input ) {\n    // Normalize linebreaks to \\n.\n    input = input.replace(/\\r\\n?/g, \"\\n\");\n    // Match until the end of the string, a newline followed by #, or two or more newlines.\n    // [\\s\\S] matches _anything_ (newline or space)\n    // [^] is equivalent but doesn't work in IEs.\n    var re = /([\\s\\S]+?)($|\\n#|\\n(?:\\s*\\n|$)+)/g,\n        blocks = [],\n        m;\n\n    var line_no = 1;\n\n    if ( ( m = /^(\\s*\\n)/.exec(input) ) !== null ) {\n      // skip (but count) leading blank lines\n      line_no += count_lines( m[0] );\n      re.lastIndex = m[0].length;\n    }\n\n    while ( ( m = re.exec(input) ) !== null ) {\n      if (m[2] === \"\\n#\") {\n        m[2] = \"\\n\";\n        re.lastIndex--;\n      }\n      blocks.push( mk_block( m[1], m[2], line_no ) );\n      line_no += count_lines( m[0] );\n    }\n\n    return blocks;\n  };\n\n  /**\n   *  Markdown#processBlock( block, next ) -> undefined | [ JsonML, ... ]\n   *  - block (String): the block to process\n   *  - next (Array): the following blocks\n   *\n   * Process `block` and return an array of JsonML nodes representing `block`.\n   *\n   * It does this by asking each block level function in the dialect to process\n   * the block until one can. Succesful handling is indicated by returning an\n   * array (with zero or more JsonML nodes), failure by a false value.\n   *\n   * Blocks handlers are responsible for calling [[Markdown#processInline]]\n   * themselves as appropriate.\n   *\n   * If the blocks were split incorrectly or adjacent blocks need collapsing you\n   * can adjust `next` in place using shift/splice etc.\n   *\n   * If any of this default behaviour is not right for the dialect, you can\n   * define a `__call__` method on the dialect that will get invoked to handle\n   * the block processing.\n   */\n  Markdown.prototype.processBlock = function processBlock( block, next ) {\n    var cbs = this.dialect.block,\n        ord = cbs.__order__;\n\n    if ( \"__call__\" in cbs )\n      return cbs.__call__.call(this, block, next);\n\n    for ( var i = 0; i < ord.length; i++ ) {\n      //D:this.debug( \"Testing\", ord[i] );\n      var res = cbs[ ord[i] ].call( this, block, next );\n      if ( res ) {\n\n        if ( !isArray(res) || ( res.length > 0 && !( isArray(res[0]) ) && ( typeof res[0] !== \"string\")) ) {\n          this.debug(ord[i], \"didn't return proper JsonML\");\n        }\n\n        return res;\n      }\n    }\n\n    // Uhoh! no match! Should we throw an error?\n    return [];\n  };\n\n  Markdown.prototype.processInline = function processInline( block ) {\n    return this.dialect.inline.__call__.call( this, String( block ) );\n  };\n\n  /**\n   *  Markdown#toTree( source ) -> JsonML\n   *  - source (String): markdown source to parse\n   *\n   *  Parse `source` into a JsonML tree representing the markdown document.\n   **/\n  // custom_tree means set this.tree to `custom_tree` and restore old value on return\n  Markdown.prototype.toTree = function toTree( source, custom_root ) {\n    var blocks = source instanceof Array ? source : this.split_blocks( source );\n\n    // Make tree a member variable so its easier to mess with in extensions\n    var old_tree = this.tree;\n    try {\n      this.tree = custom_root || this.tree || [ \"markdown\" ];\n\n      blocks_loop:\n      while ( blocks.length ) {\n        var b = this.processBlock( blocks.shift(), blocks );\n\n        // Reference blocks and the like won't return any content\n        if ( !b.length )\n          continue blocks_loop;\n\n        this.tree.push.apply( this.tree, b );\n      }\n      return this.tree;\n    }\n    finally {\n      if ( custom_root )\n        this.tree = old_tree;\n    }\n  };\n\n  // Noop by default\n  Markdown.prototype.debug = function () {\n    var args = Array.prototype.slice.call( arguments);\n    args.unshift(this.debug_indent);\n    if ( typeof print !== \"undefined\" )\n      print.apply( print, args );\n    if ( typeof console !== \"undefined\" && typeof console.log !== \"undefined\" )\n      console.log.apply( null, args );\n  };\n\n  Markdown.prototype.loop_re_over_block = function( re, block, cb ) {\n    // Dont use /g regexps with this\n    var m,\n        b = block.valueOf();\n\n    while ( b.length && (m = re.exec(b) ) !== null ) {\n      b = b.substr( m[0].length );\n      cb.call(this, m);\n    }\n    return b;\n  };\n\n  // Build default order from insertion order.\n  Markdown.buildBlockOrder = function(d) {\n    var ord = [];\n    for ( var i in d ) {\n      if ( i === \"__order__\" || i === \"__call__\" )\n        continue;\n      ord.push( i );\n    }\n    d.__order__ = ord;\n  };\n\n  // Build patterns for inline matcher\n  Markdown.buildInlinePatterns = function(d) {\n    var patterns = [];\n\n    for ( var i in d ) {\n      // __foo__ is reserved and not a pattern\n      if ( i.match( /^__.*__$/) )\n        continue;\n      var l = i.replace( /([\\\\.*+?^$|()\\[\\]{}])/g, \"\\\\$1\" )\n               .replace( /\\n/, \"\\\\n\" );\n      patterns.push( i.length === 1 ? l : \"(?:\" + l + \")\" );\n    }\n\n    patterns = patterns.join(\"|\");\n    d.__patterns__ = patterns;\n    //print(\"patterns:\", uneval( patterns ) );\n\n    var fn = d.__call__;\n    d.__call__ = function(text, pattern) {\n      if ( pattern !== undefined )\n        return fn.call(this, text, pattern);\n      else\n        return fn.call(this, text, patterns);\n    };\n  };\n\n  return Markdown;\n});\n"
  },
  {
    "path": "src/render_tree.js",
    "content": "if (typeof define !== 'function') { var define = require('amdefine')(module); }\n\ndefine(['./core', './markdown_helpers'], function(Markdown, MarkdownHelpers) {\n\n  var extract_attr = MarkdownHelpers.extract_attr;\n\n  /**\n   *  renderJsonML( jsonml[, options] ) -> String\n   *  - jsonml (Array): JsonML array to render to XML\n   *  - options (Object): options\n   *\n   *  Converts the given JsonML into well-formed XML.\n   *\n   *  The options currently understood are:\n   *\n   *  - root (Boolean): wether or not the root node should be included in the\n   *    output, or just its children. The default `false` is to not include the\n   *    root itself.\n   */\n  Markdown.renderJsonML = function( jsonml, options ) {\n    options = options || {};\n    // include the root element in the rendered output?\n    options.root = options.root || false;\n\n    jsonml = JSON.parse(JSON.stringify(jsonml)); // Clone to prevent mutation of original reference.\n    var content = [];\n\n    if ( options.root ) {\n      content.push( render_tree( jsonml ) );\n    }\n    else {\n      jsonml.shift(); // get rid of the tag\n      if ( jsonml.length && typeof jsonml[ 0 ] === \"object\" && !( jsonml[ 0 ] instanceof Array ) )\n        jsonml.shift(); // get rid of the attributes\n\n      while ( jsonml.length )\n        content.push( render_tree( jsonml.shift() ) );\n    }\n\n    return content.join( \"\\n\\n\" );\n  };\n\n\n  /**\n   *  toHTMLTree( markdown, [dialect] ) -> JsonML\n   *  toHTMLTree( md_tree ) -> JsonML\n   *  - markdown (String): markdown string to parse\n   *  - dialect (String | Dialect): the dialect to use, defaults to gruber\n   *  - md_tree (Markdown.JsonML): parsed markdown tree\n   *\n   *  Turn markdown into HTML, represented as a JsonML tree. If a string is given\n   *  to this function, it is first parsed into a markdown tree by calling\n   *  [[parse]].\n   **/\n  Markdown.toHTMLTree = function toHTMLTree( input, dialect , options ) {\n\n    // convert string input to an MD tree\n    if ( typeof input === \"string\" )\n      input = this.parse( input, dialect );\n\n    // Now convert the MD tree to an HTML tree\n\n    // remove references from the tree\n    var attrs = extract_attr( input ),\n        refs = {};\n\n    if ( attrs && attrs.references )\n      refs = attrs.references;\n\n    var html = convert_tree_to_html( input, refs , options );\n    merge_text_nodes( html );\n    return html;\n  };\n\n  /**\n   *  toHTML( markdown, [dialect]  ) -> String\n   *  toHTML( md_tree ) -> String\n   *  - markdown (String): markdown string to parse\n   *  - md_tree (Markdown.JsonML): parsed markdown tree\n   *\n   *  Take markdown (either as a string or as a JsonML tree) and run it through\n   *  [[toHTMLTree]] then turn it into a well-formated HTML fragment.\n   **/\n  Markdown.toHTML = function toHTML( source , dialect , options ) {\n    var input = this.toHTMLTree( source , dialect , options );\n\n    return this.renderJsonML( input );\n  };\n\n\n  function escapeHTML( text ) {\n    if (text && text.length > 0) {\n      return text.replace( /&/g, \"&amp;\" )\n                 .replace( /</g, \"&lt;\" )\n                 .replace( />/g, \"&gt;\" )\n                 .replace( /\"/g, \"&quot;\" )\n                 .replace( /'/g, \"&#39;\" );\n    } else {\n      return \"\";\n    }\n  }\n\n  function render_tree( jsonml ) {\n    // basic case\n    if ( typeof jsonml === \"string\" )\n      return escapeHTML( jsonml );\n\n    var tag = jsonml.shift(),\n        attributes = {},\n        content = [];\n\n    if ( jsonml.length && typeof jsonml[ 0 ] === \"object\" && !( jsonml[ 0 ] instanceof Array ) )\n      attributes = jsonml.shift();\n\n    while ( jsonml.length )\n      content.push( render_tree( jsonml.shift() ) );\n\n    var tag_attrs = \"\";\n    if (typeof attributes.src !== 'undefined') {\n      tag_attrs += ' src=\"' + escapeHTML( attributes.src ) + '\"';\n      delete attributes.src;\n    }\n\n    for ( var a in attributes ) {\n      var escaped = escapeHTML( attributes[ a ]);\n      if (escaped && escaped.length) {\n        tag_attrs += \" \" + a + '=\"' + escaped + '\"';\n      }\n    }\n\n    // be careful about adding whitespace here for inline elements\n    if ( tag === \"img\" || tag === \"br\" || tag === \"hr\" )\n      return \"<\"+ tag + tag_attrs + \"/>\";\n    else\n      return \"<\"+ tag + tag_attrs + \">\" + content.join( \"\" ) + \"</\" + tag + \">\";\n  }\n\n  function convert_tree_to_html( tree, references, options ) {\n    var i;\n    options = options || {};\n\n    // shallow clone\n    var jsonml = tree.slice( 0 );\n\n    if ( typeof options.preprocessTreeNode === \"function\" )\n      jsonml = options.preprocessTreeNode(jsonml, references);\n\n    // Clone attributes if they exist\n    var attrs = extract_attr( jsonml );\n    if ( attrs ) {\n      jsonml[ 1 ] = {};\n      for ( i in attrs ) {\n        jsonml[ 1 ][ i ] = attrs[ i ];\n      }\n      attrs = jsonml[ 1 ];\n    }\n\n    // basic case\n    if ( typeof jsonml === \"string\" )\n      return jsonml;\n\n    // convert this node\n    switch ( jsonml[ 0 ] ) {\n    case \"header\":\n      jsonml[ 0 ] = \"h\" + jsonml[ 1 ].level;\n      delete jsonml[ 1 ].level;\n      break;\n    case \"bulletlist\":\n      jsonml[ 0 ] = \"ul\";\n      break;\n    case \"numberlist\":\n      jsonml[ 0 ] = \"ol\";\n      break;\n    case \"listitem\":\n      jsonml[ 0 ] = \"li\";\n      break;\n    case \"para\":\n      jsonml[ 0 ] = \"p\";\n      break;\n    case \"markdown\":\n      jsonml[ 0 ] = \"html\";\n      if ( attrs )\n        delete attrs.references;\n      break;\n    case \"code_block\":\n      jsonml[ 0 ] = \"pre\";\n      i = attrs ? 2 : 1;\n      var code = [ \"code\" ];\n      code.push.apply( code, jsonml.splice( i, jsonml.length - i ) );\n      jsonml[ i ] = code;\n      break;\n    case \"inlinecode\":\n      jsonml[ 0 ] = \"code\";\n      break;\n    case \"img\":\n      jsonml[ 1 ].src = jsonml[ 1 ].href;\n      delete jsonml[ 1 ].href;\n      break;\n    case \"linebreak\":\n      jsonml[ 0 ] = \"br\";\n      break;\n    case \"link\":\n      jsonml[ 0 ] = \"a\";\n      break;\n    case \"link_ref\":\n      jsonml[ 0 ] = \"a\";\n\n      // grab this ref and clean up the attribute node\n      var ref = references[ attrs.ref ];\n\n      // if the reference exists, make the link\n      if ( ref ) {\n        delete attrs.ref;\n\n        // add in the href and title, if present\n        attrs.href = ref.href;\n        if ( ref.title )\n          attrs.title = ref.title;\n\n        // get rid of the unneeded original text\n        delete attrs.original;\n      }\n      // the reference doesn't exist, so revert to plain text\n      else {\n        return attrs.original;\n      }\n      break;\n    case \"img_ref\":\n      jsonml[ 0 ] = \"img\";\n\n      // grab this ref and clean up the attribute node\n      var ref = references[ attrs.ref ];\n\n      // if the reference exists, make the link\n      if ( ref ) {\n        delete attrs.ref;\n\n        // add in the href and title, if present\n        attrs.src = ref.href;\n        if ( ref.title )\n          attrs.title = ref.title;\n\n        // get rid of the unneeded original text\n        delete attrs.original;\n      }\n      // the reference doesn't exist, so revert to plain text\n      else {\n        return attrs.original;\n      }\n      break;\n    }\n\n    // convert all the children\n    i = 1;\n\n    // deal with the attribute node, if it exists\n    if ( attrs ) {\n      // if there are keys, skip over it\n      for ( var key in jsonml[ 1 ] ) {\n        i = 2;\n        break;\n      }\n      // if there aren't, remove it\n      if ( i === 1 )\n        jsonml.splice( i, 1 );\n    }\n\n    for ( ; i < jsonml.length; ++i ) {\n      jsonml[ i ] = convert_tree_to_html( jsonml[ i ], references, options );\n    }\n\n    return jsonml;\n  }\n\n\n  // merges adjacent text nodes into a single node\n  function merge_text_nodes( jsonml ) {\n    // skip the tag name and attribute hash\n    var i = extract_attr( jsonml ) ? 2 : 1;\n\n    while ( i < jsonml.length ) {\n      // if it's a string check the next item too\n      if ( typeof jsonml[ i ] === \"string\" ) {\n        if ( i + 1 < jsonml.length && typeof jsonml[ i + 1 ] === \"string\" ) {\n          // merge the second string into the first and remove it\n          jsonml[ i ] += jsonml.splice( i + 1, 1 )[ 0 ];\n        }\n        else {\n          ++i;\n        }\n      }\n      // if it's not a string recurse\n      else {\n        merge_text_nodes( jsonml[ i ] );\n        ++i;\n      }\n    }\n  }\n\n  return Markdown;\n});\n"
  },
  {
    "path": "test/features/blockquotes/contains_code.json",
    "content": "[\"html\",\n  [\"blockquote\",\n    [\"p\",\n      \"There's a code block in here:\"\n    ],\n    [\"pre\",\n      [\"code\",\n        \"SET foo = TRUE\\n\\nIF foo GOTO 10\"\n      ]\n    ],\n    [\"p\",\n      \"Wasn't that nice?\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/blockquotes/contains_code.text",
    "content": "> There's a code block in here:\n>\n>     SET foo = TRUE\n>\n>     IF foo GOTO 10\n>\n> Wasn't that nice?\n"
  },
  {
    "path": "test/features/blockquotes/lazy_wrapping.json",
    "content": "[\"html\",\n  [\"blockquote\",\n    [\"p\",\n      \"If you're too lazy\\nto wrap your code nicely\"\n    ],\n    [\"p\",\n      \"This will still work\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/blockquotes/lazy_wrapping.text",
    "content": "> If you're too lazy\nto wrap your code nicely\n\n> This will still work\n"
  },
  {
    "path": "test/features/blockquotes/leading_paras.json",
    "content": "[\"html\",\n  [\"p\",\n    \"Amy wrote:\"\n  ],\n  [\"blockquote\",\n    [\"p\",\n      \"No wai?\"\n    ]\n  ],\n  [\"p\",\n    \"Bob wrote:\"\n  ],\n  [\"blockquote\",\n    [\"p\",\n      \"Ya rly!\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/blockquotes/leading_paras.text",
    "content": "Amy wrote:\n> No wai?\n\nBob wrote:\n> Ya rly!\n"
  },
  {
    "path": "test/features/blockquotes/nested.json",
    "content": "[\"html\",\n  [\"blockquote\",\n    [\"p\",\n      \"One\"\n    ],\n    [\"blockquote\",\n      [\"p\",\n        \"Two\"\n      ]\n    ],\n    [\"p\",\n      \"Three\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/blockquotes/nested.text",
    "content": "> One\n>\n> > Two\n>\n> Three\n"
  },
  {
    "path": "test/features/blockquotes/simple.json",
    "content": "[\"html\",\n  [\"blockquote\",\n    [\"p\",\n      \"Blockquote\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/blockquotes/simple.text",
    "content": "> Blockquote\n"
  },
  {
    "path": "test/features/blockquotes/spaceless.json",
    "content": "[\"html\",\n  [\"blockquote\",\n    [\"p\",\n      \"blockquote\\nwithout spaces\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/blockquotes/spaceless.text",
    "content": ">blockquote\n>without spaces\n"
  },
  {
    "path": "test/features/blockquotes/spaces_before.json",
    "content": "[\"html\",\n  [\"blockquote\",\n    [\"p\",\n      \"evil\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/blockquotes/spaces_before.text",
    "content": "  > evil"
  },
  {
    "path": "test/features/blockquotes/threequotes.json",
    "content": "[ \"html\",\n  [ \"blockquote\",\n    [ \"p\", \"this is\" ],\n    [ \"p\", \"three\" ],\n    [ \"p\", \"quotes\" ]\n  ]\n]\n"
  },
  {
    "path": "test/features/blockquotes/threequotes.text",
    "content": "> this is\n\n> three\n\n> quotes\n"
  },
  {
    "path": "test/features/code/blank_lines.json",
    "content": "[\"html\",\n  [\"p\",\n    \"This block is composed of three lines:\"\n  ],\n  [\"pre\",\n    [\"code\",\n      \"one\\n\\nthree\"\n    ]\n  ],\n  [\"p\",\n    \"This block is composed of 5\"\n  ],\n  [\"pre\",\n    [\"code\",\n      \"one\\n\\n\\nfour\"\n    ]\n  ],\n  [\"p\",\n    \"This block is composed of 2\"\n  ],\n  [\"pre\",\n    [\"code\",\n      \"two\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/code/blank_lines.text",
    "content": "This block is composed of three lines:\n\n\tone\n\t\n\tthree\n\nThis block is composed of 5\n\n\t\n\tone\n\t\n\t\n\tfour\n\t\n\nThis block is composed of 2\n\n\t \n\ttwo\n\n\n\n"
  },
  {
    "path": "test/features/code/block.json",
    "content": "[\"html\",\n  [\"p\",\n    \"Here is an example of AppleScript:\"\n  ],\n  [\"pre\",\n    [\"code\",\n      \"tell application \\\"Foo\\\"\\n    beep\\nend tell\\n\\ttab\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/code/block.text",
    "content": "Here is an example of AppleScript:\n\n    tell application \"Foo\"\n        beep\n    end tell\n    \ttab\n\n"
  },
  {
    "path": "test/features/code/embedded_backtick.json",
    "content": "[\"html\",\n  [\"p\",\n    \"This is a \",\n    [\"code\",\n      \"code span with an `embedded` backtick\"],\n    \".\"\n  ]\n]\n"
  },
  {
    "path": "test/features/code/embedded_backtick.text",
    "content": "This is a ``code span with an `embedded` backtick``.\n"
  },
  {
    "path": "test/features/code/horizontal_rules.json",
    "content": "[\"html\",\n  [\"pre\",\n    [\"code\",\n      \"fsfsfsf\\n* * *\\n\\n***\\n\\n*****\\n\\n- - -\\n\\n---------------------------------------\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/code/horizontal_rules.text",
    "content": "    fsfsfsf\n    * * *\n\n    ***\n\n    *****\n\n    - - -\n\n    ---------------------------------------\n"
  },
  {
    "path": "test/features/code/in_lists.json",
    "content": "[\"html\",\n  [\"ul\",\n    [\"li\",\n      [\"p\",\n        \"Loose list\"\n      ],\n      [\"pre\",\n        [\"code\",\n          \"some code\\n\\nmore code\"\n        ]\n      ]\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/code/in_lists.text",
    "content": "  * Loose list\n\n        some code\n\n        more code\n"
  },
  {
    "path": "test/features/code/inline.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"code\",\n      \"This\"\n    ],\n    \" is a code span.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/code/inline.text",
    "content": "`This` is a code span.\n"
  },
  {
    "path": "test/features/code/inline_multiline.json",
    "content": "[\"html\",\n  [\"p\",\n    \"foo \",\n    [\"code\",\n      \"code\\ncode\"\n    ],\n    \" bar\"\n  ]\n]\n"
  },
  {
    "path": "test/features/code/inline_multiline.text",
    "content": "foo `code\ncode` bar\n"
  },
  {
    "path": "test/features/code/trailing_para.json",
    "content": "[\"html\",\n  [\"p\",\n    \"Paragraph above\"\n  ],\n  [\"pre\",\n    [\"code\",\n      \"Code block\"\n    ]\n  ],\n  [\"p\",\n    \"Paragraph below\"\n  ]\n]\n"
  },
  {
    "path": "test/features/code/trailing_para.text",
    "content": "Paragraph above\n\n    Code block\nParagraph below\n"
  },
  {
    "path": "test/features/code/with_greater_than.json",
    "content": "[\"html\",\n  [\"pre\",\n  \t[\"code\", \"> meep\"]\n  ]\n]\n"
  },
  {
    "path": "test/features/code/with_greater_than.text",
    "content": "    > meep"
  },
  {
    "path": "test/features/definition_lists/inline.json",
    "content": "[\"html\",\n  [\"dl\",\n    [\"dt\",\n      \"a term\"\n    ],\n    [\"dd\",\n      [\"em\",\n        \"emphasised\"\n      ],\n      \" definition.\"\n    ],\n    [\"dt\",\n      \"another term\"\n    ],\n    [\"dd\",\n      [\"strong\",\n        \"strong\"\n      ],\n      \" definition.\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/definition_lists/inline.text",
    "content": "a term\n: *emphasised* definition.\n\nanother term\n: **strong** definition.\n"
  },
  {
    "path": "test/features/definition_lists/long.json",
    "content": "[\"html\",\n  [\"dl\",\n    [\"dt\",\n      \"first term\"\n    ],\n    [\"dd\",\n      \"the quick brown fox jumps\\nover the lazy dog\"\n    ],\n    [\"dt\",\n      \"second term\"\n    ],\n    [\"dd\",\n      \"pack my box with five\\ndozen liquor jugs\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/definition_lists/long.text",
    "content": "first term\n:   the quick brown fox jumps\n    over the lazy dog\n\nsecond term\n: pack my box with five\ndozen liquor jugs\n"
  },
  {
    "path": "test/features/definition_lists/multiple_definitions.json",
    "content": "[\"html\",\n  [\"dl\",\n    [\"dt\",\n      \"fruit\"\n    ],\n    [\"dd\",\n      \"apple\"\n    ],\n    [\"dd\",\n      \"banana\"\n    ],\n    [\"dd\",\n      \"pear\"\n    ],\n    [\"dt\",\n      \"animal\"\n    ],\n    [\"dd\",\n      \"cow\"\n    ],\n    [\"dd\",\n      \"duck\"\n    ],\n    [\"dd\",\n      \"horse\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/definition_lists/multiple_definitions.text",
    "content": "fruit\n: apple\n: banana\n: pear\n\nanimal\n: cow\n: duck\n: horse\n"
  },
  {
    "path": "test/features/definition_lists/multiple_terms.json",
    "content": "[\"html\",\n  [\"dl\",\n    [\"dt\",\n      \"fruit\"\n    ],\n    [\"dt\",\n      \"vegetable\"\n    ],\n    [\"dd\",\n      \"tomato\"\n    ],\n    [\"dt\",\n      \"animal\"\n    ],\n    [\"dt\",\n      \"mineral\"\n    ],\n    [\"dd\",\n      \"pet rock\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/definition_lists/multiple_terms.text",
    "content": "fruit\nvegetable\n: tomato\n\nanimal\nmineral\n: pet rock\n"
  },
  {
    "path": "test/features/definition_lists/tight.json",
    "content": "[\"html\",\n  [\"dl\",\n    [\"dt\",\n      \"one\"\n    ],\n    [\"dd\",\n      \"alpha\"\n    ],\n    [\"dt\",\n      \"two\"\n    ],\n    [\"dd\",\n      \"beta\"\n    ],\n    [\"dt\",\n      \"three\"\n    ],\n    [\"dd\",\n      \"gamma\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/definition_lists/tight.text",
    "content": "one\n: alpha\n\ntwo\n: beta\n\nthree\n: gamma\n"
  },
  {
    "path": "test/features/emphasis/multiple_lines.json",
    "content": "[\"html\",\n  [\"p\",\n    \"You can \",\n    [\"em\",\n      \"start emphasis on one line,\\nand finish it\"\n    ],\n    \" on another.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/emphasis/multiple_lines.text",
    "content": "You can *start emphasis on one line,\nand finish it* on another.\n"
  },
  {
    "path": "test/features/emphasis/nested.json",
    "content": "[\"html\",\n  [\"p\",\n    \"You can \",\n    [\"strong\",\n      \"nest \",\n      [\"em\",\n        \"em\"\n      ],\n      \" inside strong\"\n    ],\n    \".\"\n  ],\n  [\"p\",\n    \"You can \",\n    [\"em\",\n      \"nest \",\n      [\"strong\",\n        \"strong\"\n      ],\n      \" inside em\"\n    ],\n    \".\"\n  ]\n]\n"
  },
  {
    "path": "test/features/emphasis/nested.text",
    "content": "You can **nest *em* inside strong**.\n\nYou can *nest **strong** inside em*.\n"
  },
  {
    "path": "test/features/emphasis/simple.json",
    "content": "[\"html\",\n  [\"p\",\n    \"Emphasis can be \",\n    [\"em\",\n      \"weak\"\n    ],\n    \" or \",\n    [\"strong\",\n      \"strong\"\n    ],\n    \".\"\n  ],\n  [\"p\",\n    \"It can \",\n    [\"em\",\n      \"even\"\n    ],\n    \" use \",\n    [\"strong\",\n      \"underscores\"\n    ],\n    \".\"\n  ]\n]\n"
  },
  {
    "path": "test/features/emphasis/simple.text",
    "content": "Emphasis can be *weak* or **strong**.\n\nIt can _even_ use __underscores__.\n"
  },
  {
    "path": "test/features/headers/atx.json",
    "content": "[\"html\",\n  [\"h1\",\n    \"One\"\n  ],\n  [\"h2\",\n    \"Two\"\n  ],\n  [\"h3\",\n    \"Three\"\n  ],\n  [\"h4\",\n    \"Four\"\n  ],\n  [\"h5\",\n    \"Five\"\n  ],\n  [\"h6\",\n    \"Six\"\n  ]\n]\n"
  },
  {
    "path": "test/features/headers/atx.text",
    "content": "# One\n\n## Two\n\n### Three\n\n#### Four\n\n##### Five\n\n###### Six\n"
  },
  {
    "path": "test/features/headers/atx_closing_hashes.json",
    "content": "[\"html\",\n  [\"h1\",\n    \"One\"\n  ],\n  [\"h2\",\n    \"Two\"\n  ],\n  [\"h3\",\n    \"Three\"\n  ]\n]\n"
  },
  {
    "path": "test/features/headers/atx_closing_hashes.text",
    "content": "# One #\n\n## Two #####\n\n### Three ##\n"
  },
  {
    "path": "test/features/headers/inline.json",
    "content": "[\"html\",\n  [\"h2\",\n    [\"strong\", \"Bold\"]\n  ]\n]\n"
  },
  {
    "path": "test/features/headers/inline.text",
    "content": "**Bold**\n--------"
  },
  {
    "path": "test/features/headers/setext.json",
    "content": "[\"html\",\n  [\"h1\",\n    \"One\"\n  ],\n  [\"h2\",\n    \"Two\"\n  ]\n]\n"
  },
  {
    "path": "test/features/headers/setext.text",
    "content": "One\n===\n\nTwo\n---\n"
  },
  {
    "path": "test/features/headers/trailing_paras.json",
    "content": "[\"html\",\n  [\"h1\",\n    \"Header\"\n  ],\n  [\"p\",\n    \"Paragraph\"\n  ],\n  [\"h2\",\n    \"Header\"\n  ],\n  [\"p\",\n    \"Paragraph\"\n  ],\n  [\"h3\",\n    \"Header\"\n  ],\n  [\"p\",\n    \"Paragraph\"\n  ]\n]\n"
  },
  {
    "path": "test/features/headers/trailing_paras.text",
    "content": "Header\n======\nParagraph\n\nHeader\n------\nParagraph\n\n### Header\nParagraph\n"
  },
  {
    "path": "test/features/horizontal_rules/abutting_blocks.json",
    "content": "[\"html\",\n  [\"p\",\n    \"para\"\n  ],\n  [\"hr\"],\n  [\"ul\",\n    [\"li\",\n      \"list\"\n    ]\n  ],\n  [\"hr\"],\n  [\"ul\",\n    [\"li\",\n      \"list before para\"\n    ]\n  ],\n  [\"p\",\n    \" para\"\n  ],\n  [\"hr\"],\n  [\"blockquote\",\n    [\"p\",\n      \"blockquote\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/horizontal_rules/abutting_blocks.text",
    "content": "para\n***\n* list\n - - -\n* list before para\n\n para\n - - -\n> blockquote\n"
  },
  {
    "path": "test/features/horizontal_rules/dashes.json",
    "content": "[\"html\",\n  [\"hr\"]\n]\n"
  },
  {
    "path": "test/features/horizontal_rules/dashes.text",
    "content": "---\n"
  },
  {
    "path": "test/features/horizontal_rules/front_matter.json",
    "content": "[\"html\",\n  [\"hr\"],\n  [\"p\",\n    \"layout: post\\ntitle: A title\"\n  ],\n  [\"hr\"],\n  [\"p\",\n    \"Pack my box with five dozen liquor jugs.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/horizontal_rules/front_matter.text",
    "content": "---\nlayout: post\ntitle: A title\n---\n\nPack my box with five dozen liquor jugs.\n"
  },
  {
    "path": "test/features/horizontal_rules/leading_spaces.json",
    "content": "[\"html\",\n  [\"hr\"]\n]\n"
  },
  {
    "path": "test/features/horizontal_rules/leading_spaces.text",
    "content": "  * * *\n"
  },
  {
    "path": "test/features/horizontal_rules/long.json",
    "content": "[\"html\",\n  [\"hr\"]\n]\n"
  },
  {
    "path": "test/features/horizontal_rules/long.text",
    "content": "*********************\n"
  },
  {
    "path": "test/features/horizontal_rules/long_loose.json",
    "content": "[\"html\",\n  [\"hr\"]\n]\n"
  },
  {
    "path": "test/features/horizontal_rules/long_loose.text",
    "content": "* * * * * * * * * * *\n"
  },
  {
    "path": "test/features/horizontal_rules/loose_dashes.json",
    "content": "[\"html\",\n  [\"hr\"]\n]\n"
  },
  {
    "path": "test/features/horizontal_rules/loose_dashes.text",
    "content": "- - -\n"
  },
  {
    "path": "test/features/horizontal_rules/loose_stars.json",
    "content": "[\"html\",\n  [\"hr\"]\n]\n"
  },
  {
    "path": "test/features/horizontal_rules/loose_stars.text",
    "content": "* * *\n"
  },
  {
    "path": "test/features/horizontal_rules/loose_underscores.json",
    "content": "[\"html\",\n  [\"hr\"]\n]\n"
  },
  {
    "path": "test/features/horizontal_rules/loose_underscores.text",
    "content": "_ _ _\n"
  },
  {
    "path": "test/features/horizontal_rules/stars.json",
    "content": "[\"html\",\n  [\"hr\"]\n]\n"
  },
  {
    "path": "test/features/horizontal_rules/stars.text",
    "content": "***\n"
  },
  {
    "path": "test/features/horizontal_rules/underscores.json",
    "content": "[\"html\",\n  [\"hr\"]\n]\n"
  },
  {
    "path": "test/features/horizontal_rules/underscores.text",
    "content": "___\n"
  },
  {
    "path": "test/features/images/basic.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"img\", {\n      \"src\": \"/path/to/img.jpg\",\n      \"alt\": \"Alt text\"\n    } ]\n  ]\n]\n"
  },
  {
    "path": "test/features/images/basic.text",
    "content": "![Alt text](/path/to/img.jpg)\n"
  },
  {
    "path": "test/features/images/crotcheted_url.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"img\", {\n      \"src\": \"/url/\",\n      \"alt\": \"alt text\"\n    } ]\n  ]\n]\n"
  },
  {
    "path": "test/features/images/crotcheted_url.text",
    "content": "![alt text](</url/>)\n"
  },
  {
    "path": "test/features/images/crotcheted_url_with_title.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"img\", {\n      \"src\": \"/url/\",\n      \"alt\": \"alt text\",\n      \"title\": \"with a title\"\n    } ]\n  ]\n]\n"
  },
  {
    "path": "test/features/images/crotcheted_url_with_title.text",
    "content": "![alt text](</url/> \"with a title\")\n"
  },
  {
    "path": "test/features/images/empty.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"img\", {\n      \"src\": \"\",\n      \"alt\": \"Empty\"\n    } ]\n  ]\n]\n"
  },
  {
    "path": "test/features/images/empty.text",
    "content": "![Empty]()\n"
  },
  {
    "path": "test/features/images/incomplete_image.json",
    "content": "[ \"html\",\n  [ \"p\",\n    \"![alert](http://cdn.eviltrout.com/images/trout.png\" ] ]\n\n"
  },
  {
    "path": "test/features/images/incomplete_image.text",
    "content": "![alert](http://cdn.eviltrout.com/images/trout.png\n\n"
  },
  {
    "path": "test/features/images/inside_link.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"a\",\n      { \"href\": \"https://link-url\" },\n      [\"img\", {\n        \"alt\": \"alt\",\n        \"src\": \"https://img-url\"\n      } ]\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/images/inside_link.text",
    "content": "[![alt](https://img-url)](https://link-url)\n"
  },
  {
    "path": "test/features/images/ref.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"img\", {\n      \"src\": \"/path/to/img.jpg\",\n      \"alt\": \"Alt text\"\n    } ]\n  ]\n]\n"
  },
  {
    "path": "test/features/images/ref.text",
    "content": "![Alt text] [img]\n\n[img]: /path/to/img.jpg\n"
  },
  {
    "path": "test/features/images/spaces_in_href.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"img\", {\n      \"src\": \"path to img.jpg\",\n      \"alt\": \"Alt text\"\n    } ]\n  ]\n]\n"
  },
  {
    "path": "test/features/images/spaces_in_href.text",
    "content": "![Alt text](path to img.jpg)\n"
  },
  {
    "path": "test/features/images/spaces_round_title.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"img\", {\n      \"src\": \"/url/\",\n      \"alt\": \"alt text\",\n      \"title\": \"title has spaces afterward\"\n    } ]\n  ]\n]\n"
  },
  {
    "path": "test/features/images/spaces_round_title.text",
    "content": "![alt text](/url/  \"title has spaces afterward\"  )\n"
  },
  {
    "path": "test/features/images/title.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"img\", {\n      \"src\": \"/path/to/img.jpg\",\n      \"alt\": \"Alt text\",\n      \"title\": \"Optional title\"\n    } ]\n  ]\n]\n"
  },
  {
    "path": "test/features/images/title.text",
    "content": "![Alt text](/path/to/img.jpg \"Optional title\")\n"
  },
  {
    "path": "test/features/linebreaks/simple.json",
    "content": "[\"html\",\n  [\"p\",\n    \"The quick brown fox\",\n    [\"br\"],\n    \"jumps over the lazy dog.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/linebreaks/simple.text",
    "content": "The quick brown fox  \njumps over the lazy dog.\n"
  },
  {
    "path": "test/features/links/apostrophe.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"a\",\n      { \"href\" : \"http://wiki.postgresql.org/wiki/What's_new_in_PostgreSQL_9.3\" },\n      \"Postgres 9.3\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/links/apostrophe.text",
    "content": "[Postgres 9.3](http://wiki.postgresql.org/wiki/What's_new_in_PostgreSQL_9.3)\n"
  },
  {
    "path": "test/features/links/autolink_email.json",
    "content": "[\"html\",\n  [\"p\",\n    \"Email addresses written like \",\n    [\"a\",\n      { \"href\" : \"mailto:bill@microsoft.com\" },\n      \"bill@microsoft.com\"\n    ],\n    \" get autolinkified.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/autolink_email.text",
    "content": "Email addresses written like <bill@microsoft.com> get autolinkified.\n"
  },
  {
    "path": "test/features/links/autolink_in_code.json",
    "content": "[\"html\",\n  [\"p\",\n    \"Autolinks don't happen inside code: \",\n    [\"code\",\n      \"<http://google.com>\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/links/autolink_in_code.text",
    "content": "Autolinks don't happen inside code: `<http://google.com>`\n"
  },
  {
    "path": "test/features/links/autolink_url.json",
    "content": "[\"html\",\n  [\"p\",\n    \"URLs like \",\n    [\"a\",\n      { \"href\" : \"http://google.com\" },\n      \"http://google.com\"\n    ],\n    \" get autolinkified.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/autolink_url.text",
    "content": "URLs like <http://google.com> get autolinkified.\n"
  },
  {
    "path": "test/features/links/broken_brackets.json",
    "content": "[\"html\",\n  [\"p\", \"[[][]\"]\n]\n"
  },
  {
    "path": "test/features/links/broken_brackets.text",
    "content": "[[][]\n"
  },
  {
    "path": "test/features/links/broken_link.json",
    "content": "[\"html\",\n  [\"p\", \"[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]\"]\n]\n"
  },
  {
    "path": "test/features/links/broken_link.text",
    "content": "[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]"
  },
  {
    "path": "test/features/links/case_insensitive.json",
    "content": "[\"html\",\n  [\"p\",\n    \"This is \",\n    [\"a\",\n      { \"href\" : \"http://google.com\" },\n      \"google\"\n    ],\n    \". \",\n    [\"a\",\n      { \"href\" : \"http://google.com\" },\n      \"Google\"\n    ],\n    \" and \",\n    [\"a\",\n      { \"href\" : \"http://google.com\" },\n      \"this\"\n    ],\n    \" are the same thing too\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/case_insensitive.text",
    "content": "This is [google]. [Google] and [this][GoOgLe] are the same thing too\n\n[GOOGLE]: http://google.com\n"
  },
  {
    "path": "test/features/links/escaped_broken_link.json",
    "content": "[\"html\",\n  [\"p\", \"[][][][][][][][][][][][][][][][][][][][][]\"]\n]\n"
  },
  {
    "path": "test/features/links/escaped_broken_link.text",
    "content": "[\\][\\][\\][\\][\\][\\][\\][\\][\\][\\][\\][\\][\\][\\][\\][\\][\\][\\][\\][\\][\\]"
  },
  {
    "path": "test/features/links/implicit.json",
    "content": "[\"html\",\n  [\"p\",\n    \"These \",\n    [\"a\",\n      { \"href\" : \"http://links.com\" },\n      \"links\"\n    ],\n    \" use \",\n    [\"a\",\n      { \"href\" : \"http://implicit.com\" },\n      \"implicit\"\n    ],\n    \" references.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/implicit.text",
    "content": "These [links][] use [implicit] references.\n\n[links]: http://links.com\n[implicit]: http://implicit.com\n"
  },
  {
    "path": "test/features/links/in_blockquotes.json",
    "content": "[\"html\",\n  [\"blockquote\",\n    [\"p\",\n      \"Let's fork this repo!\"\n    ],\n    [\"p\",\n      \"[markdown][]\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/links/in_blockquotes.text",
    "content": "> Let's fork this repo!\n>\n> [markdown][]\n>\n> [markdown]: https://github.com/evilstreak/markdown-js\n"
  },
  {
    "path": "test/features/links/in_brackets.json",
    "content": "[\"html\",\n  [\"p\",\n    \"Lorem ipsum (\",\n    [\"a\", {\"href\": \"http://www.lipsum.com/\"}, \"lorem ipsum\"],\n    \") dolar sit amut\"\n  ],\n  [\"p\",\n    \"(\",\n    [\"a\", {\"href\": \"/url()((test))\"}, \"Inline link\"],\n    \")\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/in_brackets.text",
    "content": "Lorem ipsum ([lorem ipsum](http://www.lipsum.com/)) dolar sit amut\n\n([Inline link](/url()((test))))\n"
  },
  {
    "path": "test/features/links/inline.json",
    "content": "[\"html\",\n  [\"p\",\n    \"An \",\n    [\"a\",\n      { \"href\" : \"http://inline.com\" },\n      \"inline\"\n    ],\n    \" link.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/inline.text",
    "content": "An [inline](http://inline.com) link.\n"
  },
  {
    "path": "test/features/links/inline_with_newline.json",
    "content": "[\"html\",\n  [\"p\",\n    \"An \",\n    [\"a\",\n      { \"href\" : \"http://inline.com\" },\n      \"inline\\nlink\"\n    ],\n    \" with a newline.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/inline_with_newline.text",
    "content": "An [inline\nlink](http://inline.com) with a newline.\n"
  },
  {
    "path": "test/features/links/inline_with_title.json",
    "content": "[\"html\",\n  [\"p\",\n    \"An \",\n    [\"a\",\n      { \"href\" : \"http://inline.com\",\n        \"title\" : \"le title\" },\n      \"inline link\"\n    ],\n    \" with a title.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/inline_with_title.text",
    "content": "An [inline link](http://inline.com \"le title\") with a title.\n"
  },
  {
    "path": "test/features/links/missing_references.json",
    "content": "[\"html\",\n  [\"p\",\n    \"Link with [missing][id] reference\"\n  ],\n  [\"p\",\n    \"Link with [empty][] reference\"\n  ],\n  [\"p\",\n    \"Link with [inferred] reference\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/missing_references.text",
    "content": "Link with [missing][id] reference\n\nLink with [empty][] reference\n\nLink with [inferred] reference\n"
  },
  {
    "path": "test/features/links/no_closing.json",
    "content": "[\"html\",\n  [\"p\",\n    \"[[1]\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/no_closing.text",
    "content": "[[1]\n"
  },
  {
    "path": "test/features/links/parens_escaped_inline.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"a\",\n      { \"href\": \"/url(test)\",\n        \"title\": \"title\" },\n      \"Inline link\"\n    ],\n    \" with escaped parens.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/parens_escaped_inline.text",
    "content": "[Inline link](/url\\(test\\) \"title\") with escaped parens.\n"
  },
  {
    "path": "test/features/links/parens_inline.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"a\",\n      { \"href\": \"/url(test)\",\n        \"title\": \"title\" },\n      \"Inline link\"\n    ],\n    \" with non-escaped parens.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/parens_inline.text",
    "content": "[Inline link](/url(test) \"title\") with non-escaped parens.\n"
  },
  {
    "path": "test/features/links/parens_reference.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"a\",\n      { \"href\": \"/url(test)\",\n        \"title\": \"title\" },\n      \"Reference link\"\n    ],\n    \" with non-escaped parens.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/parens_reference.text",
    "content": "[Reference link][1] with non-escaped parens.\n\n[1]: /url(test) \"title\"\n"
  },
  {
    "path": "test/features/links/ref_reuse.json",
    "content": "[\"html\",\n  [\"p\",\n    \"Two \",\n    [\"a\",\n      { \"href\" : \"http://google.com\" },\n      \"links\"\n    ],\n    \", one \",\n    [\"a\",\n      { \"href\" : \"http://google.com\" },\n      \"ref\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/links/ref_reuse.text",
    "content": "Two [links][id], one [ref][id]\n\n[id]: http://google.com\n"
  },
  {
    "path": "test/features/links/ref_with_image_ref.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"a\",\n     {\"href\": \"http://link_url\"},\n     [\"img\",\n      {\"src\": \"http://image_url\", \"alt\": \"alt text\"}\n     ]\n    ]\n  ]\n]"
  },
  {
    "path": "test/features/links/ref_with_image_ref.text",
    "content": "[![alt text][id_2]][id_1]\n\n[id_1]: http://link_url\n[id_2]: http://image_url"
  },
  {
    "path": "test/features/links/reference.json",
    "content": "[\"html\",\n  [\"p\",\n    \"A \",\n    [\"a\",\n      { \"href\" : \"http://reference.com\" },\n      \"link using a reference\"\n    ],\n    \".\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/reference.text",
    "content": "A [link using a reference][1].\n\n[1]: http://reference.com\n"
  },
  {
    "path": "test/features/links/reference_missing.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"a\",\n      { \"href\" : \"http://example.com\" },\n      \"hi\"\n    ]\n  ],\n  [\"ul\", [\"li\"]]\n]\n"
  },
  {
    "path": "test/features/links/reference_missing.text",
    "content": "[hi][link]\n\n  - [link]: http://example.com\n"
  },
  {
    "path": "test/features/links/reference_with_newline.json",
    "content": "[\"html\",\n  [\"p\",\n    \"This one has a \",\n    [\"a\",\n      { \"href\" : \"/foo\" },\n      \"line\\nbreak\"\n    ],\n    \".\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/reference_with_newline.text",
    "content": "This one has a [line\nbreak].\n\n[line break]: /foo\n"
  },
  {
    "path": "test/features/links/reference_with_newline_and_space.json",
    "content": "[\"html\",\n  [\"p\",\n    \"This one has a \",\n    [\"a\",\n      { \"href\" : \"/foo\" },\n      \"line \\nbreak\"\n    ],\n    \".\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/reference_with_newline_and_space.text",
    "content": "This one has a [line \nbreak].\n\n[line break]: /foo\n"
  },
  {
    "path": "test/features/links/reference_with_quote.json",
    "content": "[\"html\",\n  [\"p\",\n     \"Foo \", [ \"a\", {\"href\": \"/url/\", \"title\": \"Title with \\\"quotes\\\" inside\"}, \"bar\" ], \".\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/reference_with_quote.text",
    "content": "Foo [bar][].\n\n  [bar]: /url/ \"Title with \"quotes\" inside\"\n"
  },
  {
    "path": "test/features/links/reference_with_space.json",
    "content": "[\"html\",\n  [\"p\",\n    \"A \",\n    [\"a\",\n      { \"href\" : \"http://reference.com\" },\n      \"link using a reference\"\n    ],\n    \" separated by a space.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/links/reference_with_space.text",
    "content": "A [link using a reference] [1] separated by a space.\n\n[1]: http://reference.com\n"
  },
  {
    "path": "test/features/links/spaces_in_url.json",
    "content": "[\"html\",\n  [\"p\",\n    [\"a\",\n      { \"href\" : \"Link to file/Lorem Ipsum.txt\", \"title\" : \"Alt2\" },\n      \"link text\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/links/spaces_in_url.text",
    "content": "[link text](Link to file/Lorem Ipsum.txt \"Alt2\")\n"
  },
  {
    "path": "test/features/lists/bullet_types.json",
    "content": "[\"html\",\n  [\"p\",\n    \"Stars\"\n  ],\n  [\"ul\",\n    [\"li\",\n      \"star\"\n    ]\n  ],\n  [\"p\",\n    \"Dashes\"\n  ],\n  [\"ul\",\n    [\"li\",\n      \"dash\"\n    ]\n  ],\n  [\"p\",\n    \"Pluses\"\n  ],\n  [\"ul\",\n    [\"li\",\n      \"plus\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/lists/bullet_types.text",
    "content": "Stars\n\n* star\n\nDashes\n\n- dash\n\nPluses\n\n+ plus\n"
  },
  {
    "path": "test/features/lists/hr_abutting.json",
    "content": "[\"html\",\n  [\"ul\",\n    [ \"li\", \"foo\" ],\n    [ \"li\", \"bar\" ]\n  ],\n  [\"hr\"],\n  [\"p\", \"after\"]\n]\n\n"
  },
  {
    "path": "test/features/lists/hr_abutting.text",
    "content": "* foo\n* bar\n\n * * *\nafter\n\n"
  },
  {
    "path": "test/features/lists/hr_inside.json",
    "content": "[\"html\",\n  [\"ul\",\n    [ \"li\",\n      [\"p\", \"before\"],\n      [\"hr\"],\n      [\"p\", \"after\"]\n    ]\n  ]\n]\n\n"
  },
  {
    "path": "test/features/lists/hr_inside.text",
    "content": "* before\n\n    - - - -\n    after\n\n"
  },
  {
    "path": "test/features/lists/lazy_wrapping.json",
    "content": "[\"html\",\n  [\"ul\",\n    [\"li\",\n      \"If you're too\\nlazy to wrap your\"\n    ],\n    [\"li\",\n      \"Lists nicely, this\\nwill still work\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/lists/lazy_wrapping.text",
    "content": "* If you're too\nlazy to wrap your\n* Lists nicely, this\nwill still work\n"
  },
  {
    "path": "test/features/lists/leading_whitespace.json",
    "content": "[\"html\",\n  [\"ul\",\n    [\"li\",\n      \"white\"\n    ],\n    [\"li\",\n      \"space\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/lists/leading_whitespace.text",
    "content": "  * white\n  * space\n"
  },
  {
    "path": "test/features/lists/loose.json",
    "content": "[\"html\",\n  [\"ul\",\n    [\"li\",\n      [\"p\",\n        \"the quick brown fox jumps\\nover the lazy dog\"\n      ]\n    ],\n    [\"li\",\n      [\"p\",\n        \"pack my box with five\\ndozen liquor jugs\"\n      ],\n      [\"p\",\n        \"this item has a\\nsecond paragraph\"\n      ]\n    ],\n    [\"li\",\n      [\"p\",\n        \"this item has\\nonly one paragraph\"\n      ]\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/lists/loose.text",
    "content": "  * the quick brown fox jumps\n    over the lazy dog\n\n  * pack my box with five\n    dozen liquor jugs\n\n    this item has a\n    second paragraph\n\n  * this item has\n    only one paragraph\n"
  },
  {
    "path": "test/features/lists/loose_with_inline.json",
    "content": "[\"html\",\n  [\"ul\",\n    [\"li\",\n      [\"p\",\n        \"List item \",\n        [\"em\",\n          \"ending\"\n        ],\n        \"\\nwith \",\n        [\"em\",\n          \"emphasis\"\n        ],\n        \".\"\n      ]\n    ],\n    [\"li\",\n      [\"p\",\n        \"List item\\nwith \",\n        [\"strong\",\n          \"strong emphasis\"\n        ],\n        \".\"\n      ]\n    ],\n    [\"li\",\n      [\"p\",\n        \"List item\\nwith \",\n        [\"a\",\n          { \"href\" : \"http://google.com\" },\n          \"a link\"\n        ],\n        \".\"\n      ]\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/lists/loose_with_inline.text",
    "content": "  * List item _ending_\n  with _emphasis_.\n\n  * List item\n  with **strong emphasis**.\n\n  * List item\n  with [a link](http://google.com).\n"
  },
  {
    "path": "test/features/lists/multiline_inline.json",
    "content": "[\"html\",\n  [\"ul\",\n    [\"li\",\n      \"List items can have \",\n      [ \"em\", \"inline content\\nthat spans multiple lines\" ],\n      \". Pain\"\n    ]\n  ]\n]\n\n"
  },
  {
    "path": "test/features/lists/multiline_inline.text",
    "content": "* List items can have *inline content\n  that spans multiple lines*. Pain\n"
  },
  {
    "path": "test/features/lists/nested.json",
    "content": "[\"html\",\n  [\"ol\",\n    [\"li\",\n      \"one\",\n      [\"ul\",\n        [\"li\",\n          \"alpha\",\n          [\"ul\",\n            [\"li\",\n              \"almond\"\n            ],\n            [\"li\",\n              \"brazil\"\n            ]\n          ]\n        ],\n        [\"li\",\n          \"beta\",\n          [\"ul\",\n            [\"li\",\n              \"cashew\"\n            ]\n          ]\n        ]\n      ]\n    ],\n    [\"li\",\n      \"two\"\n    ],\n    [\"li\",\n      \"three\",\n      [\"ul\",\n        [\"li\",\n          \"gamma\"\n        ]\n      ]\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/lists/nested.text",
    "content": "1.  one\n    * alpha\n        - almond\n        - brazil\n    * beta\n        - cashew\n2.  two\n3.  three\n    * gamma\n"
  },
  {
    "path": "test/features/lists/nested_para.json",
    "content": "[\"html\",\n  [\"ol\",\n    [\"li\", [\"p\", \"First\"] ],\n    [\"li\",\n    \t[\"p\", \"Second:\"],\n    \t[\"ul\",\n    \t\t[\"li\", \"Fee\"],\n    \t\t[\"li\", \"Fie\"],\n    \t\t[\"li\", \"Foe\"]\n    \t]\n    ],\n    [\"li\", [\"p\", \"Third\"]]\n  ]\n]\n"
  },
  {
    "path": "test/features/lists/nested_para.text",
    "content": "1. First\n\n2. Second:\n\t* Fee\n\t* Fie\n\t* Foe\n\n3. Third\n\n"
  },
  {
    "path": "test/features/lists/numeric.json",
    "content": "[\"html\",\n  [\"ol\",\n    [\"li\",\n      \"one\"\n    ],\n    [\"li\",\n      \"two\"\n    ],\n    [\"li\",\n      \"three\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/lists/numeric.text",
    "content": "1. one\n2. two\n3. three\n"
  },
  {
    "path": "test/features/lists/quote_inside.json",
    "content": "[\"html\",\n  [\"ol\",\n    [ \"li\",\n      \"bar\",\n      [\"blockquote\", [\"p\", \"this should go under #1\"]]\n    ]\n  ]\n]\n\n"
  },
  {
    "path": "test/features/lists/quote_inside.text",
    "content": "1. bar\n  > this should go under #1\n"
  },
  {
    "path": "test/features/lists/references.json",
    "content": "[\"html\",\n  [\"ul\",\n    [\"li\",\n      [\"a\", {\"href\": \"http://eviltrout.com\"}, \"Evil Trout\"]\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/lists/references.text",
    "content": "* [Evil Trout][1]\n  [1]: http://eviltrout.com"
  },
  {
    "path": "test/features/lists/tight.json",
    "content": "[\"html\",\n  [\"ul\",\n    [\"li\",\n      \"alpha\"\n    ],\n    [\"li\",\n      \"beta\"\n    ],\n    [\"li\",\n      \"gamma\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/lists/tight.text",
    "content": "* alpha\n* beta\n* gamma\n"
  },
  {
    "path": "test/features/meta/attribute.json",
    "content": "[\"html\",\n  [\"p\",\n    { \"foo\" : \"bar\" },\n    \"A paragraph with an\\narbitrary attribute.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/meta/attribute.text",
    "content": "A paragraph with an\narbitrary attribute.\n{: foo=bar}\n"
  },
  {
    "path": "test/features/meta/class.json",
    "content": "[\"html\",\n  [\"p\",\n    { \"class\" : \"para\" },\n    \"This is a paragraph\\nwith an ID.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/meta/class.text",
    "content": "This is a paragraph\nwith an ID.\n{: .para}\n"
  },
  {
    "path": "test/features/meta/code.json",
    "content": "[\"html\",\n  [\"pre\",\n    { \"foo\" : \"bar\" },\n    [\"code\",\n      \"A pre with an\\narbitrary attribute.\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/meta/code.text",
    "content": "    A pre with an\n    arbitrary attribute.\n{: foo=bar}\n"
  },
  {
    "path": "test/features/meta/document.json",
    "content": "[\"html\",\n  {\n    \"key\" : \"value\",\n    \"anotherkey\" : \"another value\"\n  },\n  [\"p\",\n    \"A regular paragraph\"\n  ]\n]\n"
  },
  {
    "path": "test/features/meta/document.text",
    "content": "Key: value\nAnotherKey: another value\n\nA regular paragraph\n"
  },
  {
    "path": "test/features/meta/id.json",
    "content": "[\"html\",\n  [\"p\",\n    { \"id\" : \"para\" },\n    \"This is a paragraph\\nwith an ID.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/meta/id.text",
    "content": "This is a paragraph\nwith an ID.\n{: #para}\n"
  },
  {
    "path": "test/features/meta/inline.json",
    "content": "[\"html\",\n  [\"p\",\n    \"An \",\n    [\"em\",\n      { \"class\" : \"foo\" },\n      \"em\"\n    ],\n    \" and \",\n    [\"strong\",\n      { \"class\" : \"bar\" },\n      \"strong\"\n    ],\n    \"\\nwith attached attributes.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/meta/inline.text",
    "content": "An *em*{: .foo} and **strong**{: .bar}\nwith attached attributes.\n"
  },
  {
    "path": "test/features/meta/inner_whitespace.json",
    "content": "[\"html\",\n  [\"p\",\n    { \"id\" : \"none\" },\n    \"We can have no whitespace\"\n  ],\n  [\"p\",\n    { \"id\" : \"one\" },\n    \"Or a single whitespace\"\n  ],\n  [\"p\",\n    { \"id\" : \"lots\" },\n    \"And even lots of whitespace\"\n  ]\n]\n"
  },
  {
    "path": "test/features/meta/inner_whitespace.text",
    "content": "We can have no whitespace\n{:#none}\n\nOr a single whitespace\n{: #one }\n\nAnd even lots of whitespace\n{:      #lots      }\n"
  },
  {
    "path": "test/features/meta/leading_whitespace.json",
    "content": "[\"html\",\n  [\"p\",\n    { \"id\" : \"zero\" },\n    \"Zero\"\n  ],\n  [\"p\",\n    { \"id\" : \"one\" },\n    \"One\"\n  ],\n  [\"p\",\n    { \"id\" : \"two\" },\n    \"Two\"\n  ],\n  [\"p\",\n    { \"id\" : \"three\" },\n    \"Three\"\n  ],\n  [\"p\",\n    \"Four\\n    {: #four}\"\n  ]\n]\n"
  },
  {
    "path": "test/features/meta/leading_whitespace.text",
    "content": "Zero\n{: #zero}\n\nOne\n {: #one}\n\nTwo\n  {: #two}\n\nThree\n   {: #three}\n\nFour\n    {: #four}\n"
  },
  {
    "path": "test/features/meta/list.json",
    "content": "[\"html\",\n  [\"ul\",\n    { \"id\" : \"list\" },\n    [\"li\",\n      \"here's a\\nloose list\"\n    ],\n    [\"li\",\n      \"it might confuse the\\nblock_meta routine\"\n    ]\n  ]\n]\n"
  },
  {
    "path": "test/features/meta/list.text",
    "content": "  * here's a\n    loose list\n\n  * it might confuse the\n    block_meta routine\n  {: #list}\n"
  },
  {
    "path": "test/features/meta/list.todo",
    "content": ""
  },
  {
    "path": "test/features/meta/multiple_classes.json",
    "content": "[\"html\",\n  [\"p\",\n    { \"class\" : \"foo bar\" },\n    \"Here's a paragraph and\\nan \",\n    [\"em\",\n      { \"class\" : \"foo bar\" },\n      \"em\"\n    ],\n    \"\\nwith multiple classes\"\n  ]\n]\n"
  },
  {
    "path": "test/features/meta/multiple_classes.text",
    "content": "Here's a paragraph and\nan *em*{: .foo .bar}\nwith multiple classes\n{: .foo .bar}\n"
  },
  {
    "path": "test/features/meta/quoted.json",
    "content": "[\"html\",\n  [\"p\",\n    { \"foo\" : \"bar baz\" },\n    \"A paragraph with a\\nquoted attribute.\"\n  ]\n]\n"
  },
  {
    "path": "test/features/meta/quoted.text",
    "content": "A paragraph with a\nquoted attribute.\n{: foo=\"bar baz\"}\n"
  },
  {
    "path": "test/features/tables/align.json",
    "content": "[ \"html\",\n  [ \"table\",\n    [ \"thead\",\n      [ \"tr\",\n        [ \"th\",\n          { \"align\": \"left\" },\n          \"#\"\n        ],\n        [ \"th\",\n          { \"align\": \"center\" },\n          \"Item\"\n        ],\n        [ \"th\",\n          { \"align\": \"right\" },\n          \"Value\"\n        ]\n      ]\n    ],\n    [ \"tbody\",\n      [ \"tr\",\n        [ \"td\",\n          { \"align\": \"left\" },\n          \"1\"\n        ],\n        [ \"td\",\n          { \"align\": \"center\" },\n          \"Computer\"\n        ],\n        [ \"td\",\n          { \"align\": \"right\" },\n          \"$1600\"\n        ]\n      ],\n      [ \"tr\",\n        [ \"td\",\n          { \"align\": \"left\" },\n          \"2\"\n        ],\n        [ \"td\",\n          { \"align\": \"center\" },\n          \"Phone\"\n        ],\n        [ \"td\",\n          { \"align\": \"right\" },\n          \"$12\"\n        ]\n      ],\n      [ \"tr\",\n        [ \"td\",\n          { \"align\": \"left\" },\n          \"3\"\n        ],\n        [ \"td\",\n          { \"align\": \"center\" },\n          \"Pipe\"\n        ],\n        [ \"td\",\n          { \"align\": \"right\" },\n          \"$1\"\n        ]\n      ]\n    ]\n  ]\n]"
  },
  {
    "path": "test/features/tables/align.text",
    "content": "| #  |   Item    | Value |\n| :- | :-------: | -----:|\n| 1  | Computer  | $1600 |\n| 2  |  Phone    |   $12 |\n| 3  |   Pipe    |    $1 |\n"
  },
  {
    "path": "test/features/tables/compact.json",
    "content": "[ \"html\",\n  [ \"table\",\n    [ \"thead\",\n      [ \"tr\",\n        [ \"th\",\n          { \"align\": \"left\" },\n          \"#\"\n        ],\n        [ \"th\",\n          { \"align\": \"center\" },\n          \"Item\"\n        ],\n        [ \"th\",\n          { \"align\": \"right\" },\n          \"Value\"\n        ]\n      ]\n    ],\n    [ \"tbody\",\n      [ \"tr\",\n        [ \"td\",\n          { \"align\": \"left\" },\n          \"1\"\n        ],\n        [ \"td\",\n          { \"align\": \"center\" },\n          \"Computer\"\n        ],\n        [ \"td\",\n          { \"align\": \"right\" },\n          \"$1600\"\n        ]\n      ],\n      [ \"tr\",\n        [ \"td\",\n          { \"align\": \"left\" },\n          \"2\"\n        ],\n        [ \"td\",\n          { \"align\": \"center\" },\n          \"Phone\"\n        ],\n        [ \"td\",\n          { \"align\": \"right\" },\n          \"$12\"\n        ]\n      ],\n      [ \"tr\",\n        [ \"td\",\n          { \"align\": \"left\" },\n          \"3\"\n        ],\n        [ \"td\",\n          { \"align\": \"center\" },\n          \"Pipe\"\n        ],\n        [ \"td\",\n          { \"align\": \"right\" },\n          \"$1\"\n        ]\n      ]\n    ]\n  ]\n]"
  },
  {
    "path": "test/features/tables/compact.text",
    "content": "#|Item|Value\n:-|:-:|-:\n1|Computer|$1600\n2|Phone|$12\n3|Pipe|$1\n"
  },
  {
    "path": "test/features/tables/inline_formatting.json",
    "content": "[ \"html\",\n  [ \"table\",\n    [ \"thead\",\n      [ \"tr\",\n        [ \"th\",\n          \"Function name\"\n        ],\n        [ \"th\",\n          \"Description\"\n        ]\n      ]\n    ],\n    [ \"tbody\",\n      [ \"tr\",\n        [ \"td\",\n          [ \"code\",\n            \"help()\"\n          ]\n        ],\n        [ \"td\",\n          \"Display the help window.\"\n        ]\n      ],\n      [ \"tr\",\n        [ \"td\",\n          [ \"code\",\n            \"destroy()\"\n          ]\n        ],\n        [ \"td\",\n          [ \"strong\",\n            \"Destroy your computer!\"\n          ]\n        ]\n      ]\n    ]\n  ]\n]"
  },
  {
    "path": "test/features/tables/inline_formatting.text",
    "content": "| Function name | Description                    |\n| ------------- | ------------------------------ |\n| `help()`      | Display the help window.       |\n| `destroy()`   | **Destroy your computer!**     |\n"
  },
  {
    "path": "test/features/tables/pipe_escape.json",
    "content": "[ \"html\",\n  [ \"table\",\n    [ \"thead\",\n      [ \"tr\",\n        [ \"th\",\n          \"a|b\"\n        ],\n        [ \"th\",\n          \"c\"\n        ]\n      ]\n    ],\n    [ \"tbody\",\n      [ \"tr\",\n        [ \"td\",\n          \"1\"\n        ],\n        [ \"td\",\n          \"2|3\"\n        ]\n      ],\n      [ \"tr\",\n        [ \"td\",\n          \"4|5\"\n        ],\n        [ \"td\",\n          \"6\"\n        ]\n      ]\n    ]\n  ]\n]"
  },
  {
    "path": "test/features/tables/pipe_escape.text",
    "content": "| a\\|b | c    |\n| -----|------|\n| 1    | 2\\|3 |\n| 4\\|5 | 6    |\n"
  },
  {
    "path": "test/features/tables/simple_leading.json",
    "content": "[ \"html\",\n  [ \"table\",\n    [ \"thead\",\n      [ \"tr\",\n        [ \"th\",\n          \"First Header\"\n        ],\n        [ \"th\",\n          \"Second Header\"\n        ]\n      ]\n    ],\n    [ \"tbody\",\n      [ \"tr\",\n        [ \"td\",\n          \"Content 1\"\n        ],\n        [ \"td\",\n          \"Content 2\"\n        ]\n      ],\n      [ \"tr\",\n        [ \"td\",\n          \"Content 3\"\n        ],\n        [ \"td\",\n          \"Content 4\"\n        ]\n      ]\n    ]\n  ]\n]"
  },
  {
    "path": "test/features/tables/simple_leading.text",
    "content": "| First Header  | Second Header |\n| ------------- | ------------- |\n| Content 1     | Content 2     |\n| Content 3     | Content 4     |\n"
  },
  {
    "path": "test/features/tables/simple_no_leading.json",
    "content": "[ \"html\",\n  [ \"table\",\n    [ \"thead\",\n      [ \"tr\",\n        [ \"th\",\n          \"First Header\"\n        ],\n        [ \"th\",\n          \"Second Header\"\n        ]\n      ]\n    ],\n    [ \"tbody\",\n      [ \"tr\",\n        [ \"td\",\n          \"Content 1\"\n        ],\n        [ \"td\",\n          \"Content 2\"\n        ]\n      ],\n      [ \"tr\",\n        [ \"td\",\n          \"Content 3\"\n        ],\n        [ \"td\",\n          \"Content 4\"\n        ]\n      ]\n    ]\n  ]\n]"
  },
  {
    "path": "test/features/tables/simple_no_leading.text",
    "content": "First Header  | Second Header\n------------- | -------------\nContent 1     | Content 2\nContent 3     | Content 4\n"
  },
  {
    "path": "test/features/tables/spaces_tolerance.json",
    "content": "[ \"html\",\n  [ \"p\",\n    \"This is a table (look out, less than 4 spaces\\nbefore headers and rule).\"\n  ],\n  [ \"table\",\n    [ \"thead\",\n      [ \"tr\",\n        [ \"th\",\n          \"Header\"\n        ],\n        [ \"th\",\n          \"Header\"\n        ]\n      ]\n    ],\n    [ \"tbody\",\n      [ \"tr\",\n        [ \"td\",\n          \"1\"\n        ],\n        [ \"td\",\n          \"2\"\n        ]\n      ],\n      [ \"tr\",\n        [ \"td\",\n          \"3\"\n        ],\n        [ \"td\",\n          \"4\"\n        ]\n      ]\n    ]\n  ],\n  [ \"p\",\n    \"Yeah, right.\"\n  ]\n]"
  },
  {
    "path": "test/features/tables/spaces_tolerance.text",
    "content": "This is a table (look out, less than 4 spaces\nbefore headers and rule).\n\n   Header  |  Header\n  -------- | --------\n     1     |    2\n     3     |    4\n\nYeah, right.\n"
  },
  {
    "path": "test/features.t.js",
    "content": "var markdown = require(\"../src/markdown\");\n\nfunction test_dialect( dialect, features ) {\n  var fs = require(\"fs\"),\n      path = require(\"path\"),\n      tap = require(\"tap\");\n\n  var slurpFile = function slurpFile( path ) {\n    return fs.readFileSync( path, \"utf8\" );\n  };\n\n  var isFile = function isFile( f ) {\n    try {\n      return fs.statSync( f ).isFile();\n    }\n    catch (e) {\n      if ( e.code === \"ENOENT\" )\n        return false;\n      throw e;\n    }\n  };\n\n\n  tap.test( dialect, function(tap) {\n    for ( var f in features ) {\n      (function( feature ) {\n        tap.test( feature, function(tap) {\n          var test_path = path.join(__dirname, \"features\", feature);\n\n          // grab all the test files in this feature\n          var tests = fs.readdirSync( test_path );\n\n          // filter to only the raw files\n          tests = tests.filter( function( x ) {return x.match( /\\.text$/ ); } );\n\n          // remove the extensions\n          tests = tests.map( function( x ) {return x.replace( /\\.text$/, \"\" ); } );\n\n          for ( var t in tests ) {\n            // load the raw text\n            var testName = dialect + \"/\" + feature + \"/\" + tests[ t ].substring( tests[ t ].lastIndexOf( \"/\" ) + 1 ),\n                testFileBase = path.join(test_path, tests[ t ]),\n                text = slurpFile( testFileBase + \".text\" );\n\n            // load the target output\n            var json = JSON.parse( slurpFile( testFileBase + \".json\" ) );\n\n            var output = markdown.toHTMLTree( text, dialect );\n            tap.equivalent( output, json, testName, {todo: isFile( testFileBase + \".todo\" )} );\n          }\n          tap.end();\n        } );\n      } )( features[ f ] );\n    }\n  });\n}\n\n\n\nvar dialects = {};\ndialects.Gruber = [\n  \"blockquotes\",\n  \"code\",\n  \"emphasis\",\n  \"headers\",\n  \"horizontal_rules\",\n  \"images\",\n  \"linebreaks\",\n  \"links\",\n  \"lists\"\n];\n\ndialects.Maruku = dialects.Gruber.slice( 0 );\ndialects.Maruku.push( \"meta\", \"definition_lists\", \"tables\" );\n\n// TODO if dialects/features were passed on the command line, filter to them\n// if ( args.length )\n//   features = features.filter( function( x ) args.indexOf( x ) !== -1 );\n\nfor ( var d in dialects ) {\n  test_dialect( d, dialects[ d ] );\n}\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Amps_and_angle_encoding.json",
    "content": "[\"html\", [\"p\", \"AT&T has an ampersand in their name.\"],\n    [\"p\", \"AT&T is another way to write it.\"],\n    [\"p\", \"This & that.\"],\n    [\"p\", \"4 < 5.\"],\n    [\"p\", \"6 > 5.\"],\n    [\"p\", \"Here's a \", [\"a\", {\n        \"href\": \"http://example.com/?foo=1&bar=2\"\n    },\n    \"link\"], \" with an ampersand in the URL.\"],\n    [\"p\", \"Here's a link with an amersand in the link text: \", [\"a\", {\n        \"href\": \"http://att.com/\",\n        \"title\": \"AT&T\"\n    },\n    \"AT&T\"], \".\"],\n    [\"p\", \"Here's an inline \", [\"a\", {\n        \"href\": \"/script?foo=1&bar=2\"\n    },\n    \"link\"], \".\"],\n    [\"p\", \"Here's an inline \", [\"a\", {\n        \"href\": \"/script?foo=1&bar=2\"\n    },\n    \"link\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Amps_and_angle_encoding.text",
    "content": "AT&T has an ampersand in their name.\n\nAT&amp;T is another way to write it.\n\nThis & that.\n\n4 < 5.\n\n6 > 5.\n\nHere's a [link] [1] with an ampersand in the URL.\n\nHere's a link with an amersand in the link text: [AT&T] [2].\n\nHere's an inline [link](/script?foo=1&bar=2).\n\nHere's an inline [link](</script?foo=1&bar=2>).\n\n\n[1]: http://example.com/?foo=1&bar=2\n[2]: http://att.com/  \"AT&T\""
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Amps_and_angle_encoding.xhtml",
    "content": "<p>AT&amp;T has an ampersand in their name.</p>\n\n<p>AT&amp;T is another way to write it.</p>\n\n<p>This &amp; that.</p>\n\n<p>4 &lt; 5.</p>\n\n<p>6 > 5.</p>\n\n<p>Here's a <a href=\"http://example.com/?foo=1&amp;bar=2\">link</a> with an ampersand in the URL.</p>\n\n<p>Here's a link with an amersand in the link text: <a href=\"http://att.com/\" title=\"AT&amp;T\">AT&amp;T</a>.</p>\n\n<p>Here's an inline <a href=\"/script?foo=1&amp;bar=2\">link</a>.</p>\n\n<p>Here's an inline <a href=\"/script?foo=1&amp;bar=2\">link</a>.</p>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Auto_links.json",
    "content": "[\"html\", [\"p\", \"Link: \", [\"a\", {\n    \"href\": \"http://example.com/\"\n},\n\"http://example.com/\"], \".\"],\n    [\"p\", \"With an ampersand: \", [\"a\", {\n        \"href\": \"http://example.com/?foo=1&bar=2\"\n    },\n    \"http://example.com/?foo=1&bar=2\"]],\n    [\"ul\", [\"li\", \"In a list?\"],\n        [\"li\", [\"a\", {\n            \"href\": \"http://example.com/\"\n        },\n        \"http://example.com/\"]],\n        [\"li\", \"It should.\"]],\n    [\"blockquote\", [\"p\", \"Blockquoted: \", [\"a\", {\n        \"href\": \"http://example.com/\"\n    },\n    \"http://example.com/\"]]],\n    [\"p\", \"Auto-links should not occur here: \", [\"code\", \"<http://example.com/>\"]],\n    [\"pre\", [\"code\", \"or here: <http://example.com/>\\u000a\"]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Auto_links.text",
    "content": "Link: <http://example.com/>.\n\nWith an ampersand: <http://example.com/?foo=1&bar=2>\n\n* In a list?\n* <http://example.com/>\n* It should.\n\n> Blockquoted: <http://example.com/>\n\nAuto-links should not occur here: `<http://example.com/>`\n\n\tor here: <http://example.com/>"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Auto_links.xhtml",
    "content": "<p>Link: <a href=\"http://example.com/\">http://example.com/</a>.</p>\n\n<p>With an ampersand: <a href=\"http://example.com/?foo=1&amp;bar=2\">http://example.com/?foo=1&amp;bar=2</a></p>\n\n<ul>\n<li>In a list?</li>\n<li><a href=\"http://example.com/\">http://example.com/</a></li>\n<li>It should.</li>\n</ul>\n\n<blockquote>\n  <p>Blockquoted: <a href=\"http://example.com/\">http://example.com/</a></p>\n</blockquote>\n\n<p>Auto-links should not occur here: <code>&lt;http://example.com/&gt;</code></p>\n\n<pre><code>or here: &lt;http://example.com/&gt;\n</code></pre>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Backslash_escapes.json",
    "content": "[\"html\", [\"p\", \"These should all get escaped:\"],\n    [\"p\", \"Backslash: \\\\\"],\n    [\"p\", \"Backtick: `\"],\n    [\"p\", \"Asterisk: *\"],\n    [\"p\", \"Underscore: _\"],\n    [\"p\", \"Left brace: {\"],\n    [\"p\", \"Right brace: }\"],\n    [\"p\", \"Left bracket: [\"],\n    [\"p\", \"Right bracket: ]\"],\n    [\"p\", \"Left paren: (\"],\n    [\"p\", \"Right paren: )\"],\n    [\"p\", \"Greater-than: >\"],\n    [\"p\", \"Hash: #\"],\n    [\"p\", \"Period: .\"],\n    [\"p\", \"Bang: !\"],\n    [\"p\", \"Plus: +\"],\n    [\"p\", \"Minus: -\"],\n    [\"p\", \"These should not, because they occur within a code block:\"],\n    [\"pre\", [\"code\", \"Backslash: \\\\\\\\\\u000a\\u000aBacktick: \\\\`\\u000a\\u000aAsterisk: \\\\*\\u000a\\u000aUnderscore: \\\\_\\u000a\\u000aLeft brace: \\\\{\\u000a\\u000aRight brace: \\\\}\\u000a\\u000aLeft bracket: \\\\[\\u000a\\u000aRight bracket: \\\\]\\u000a\\u000aLeft paren: \\\\(\\u000a\\u000aRight paren: \\\\)\\u000a\\u000aGreater-than: \\\\>\\u000a\\u000aHash: \\\\#\\u000a\\u000aPeriod: \\\\.\\u000a\\u000aBang: \\\\!\\u000a\\u000aPlus: \\\\+\\u000a\\u000aMinus: \\\\-\\u000a\"]],\n    [\"p\", \"Nor should these, which occur in code spans:\"],\n    [\"p\", \"Backslash: \", [\"code\", \"\\\\\\\\\"]],\n    [\"p\", \"Backtick: \", [\"code\", \"\\\\`\"]],\n    [\"p\", \"Asterisk: \", [\"code\", \"\\\\*\"]],\n    [\"p\", \"Underscore: \", [\"code\", \"\\\\_\"]],\n    [\"p\", \"Left brace: \", [\"code\", \"\\\\{\"]],\n    [\"p\", \"Right brace: \", [\"code\", \"\\\\}\"]],\n    [\"p\", \"Left bracket: \", [\"code\", \"\\\\[\"]],\n    [\"p\", \"Right bracket: \", [\"code\", \"\\\\]\"]],\n    [\"p\", \"Left paren: \", [\"code\", \"\\\\(\"]],\n    [\"p\", \"Right paren: \", [\"code\", \"\\\\)\"]],\n    [\"p\", \"Greater-than: \", [\"code\", \"\\\\>\"]],\n    [\"p\", \"Hash: \", [\"code\", \"\\\\#\"]],\n    [\"p\", \"Period: \", [\"code\", \"\\\\.\"]],\n    [\"p\", \"Bang: \", [\"code\", \"\\\\!\"]],\n    [\"p\", \"Plus: \", [\"code\", \"\\\\+\"]],\n    [\"p\", \"Minus: \", [\"code\", \"\\\\-\"]],\n    [\"p\", \"These should get escaped, even though they're matching pairs for\\u000aother Markdown constructs:\"],\n    [\"p\", \"*asterisks*\"],\n    [\"p\", \"_underscores_\"],\n    [\"p\", \"`backticks`\"],\n    [\"p\", \"This is a code span with a literal backslash-backtick sequence: \", [\"code\", \"\\\\`\"]],\n    [\"p\", \"This is a tag with unescaped backticks \", [\"span\", {\n        \"attr\": \"`ticks`\"\n    },\n    \"bar\"], \".\"],\n    [\"p\", \"This is a tag with backslashes \", [\"span\", {\n        \"attr\": \"\\\\\\\\backslashes\\\\\\\\\"\n    },\n    \"bar\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Backslash_escapes.text",
    "content": "These should all get escaped:\n\nBackslash: \\\\\n\nBacktick: \\`\n\nAsterisk: \\*\n\nUnderscore: \\_\n\nLeft brace: \\{\n\nRight brace: \\}\n\nLeft bracket: \\[\n\nRight bracket: \\]\n\nLeft paren: \\(\n\nRight paren: \\)\n\nGreater-than: \\>\n\nHash: \\#\n\nPeriod: \\.\n\nBang: \\!\n\nPlus: \\+\n\nMinus: \\-\n\n\n\nThese should not, because they occur within a code block:\n\n\tBackslash: \\\\\n\n\tBacktick: \\`\n\n\tAsterisk: \\*\n\n\tUnderscore: \\_\n\n\tLeft brace: \\{\n\n\tRight brace: \\}\n\n\tLeft bracket: \\[\n\n\tRight bracket: \\]\n\n\tLeft paren: \\(\n\n\tRight paren: \\)\n\n\tGreater-than: \\>\n\n\tHash: \\#\n\n\tPeriod: \\.\n\n\tBang: \\!\n\n\tPlus: \\+\n\n\tMinus: \\-\n\n\nNor should these, which occur in code spans:\n\nBackslash: `\\\\`\n\nBacktick: `` \\` ``\n\nAsterisk: `\\*`\n\nUnderscore: `\\_`\n\nLeft brace: `\\{`\n\nRight brace: `\\}`\n\nLeft bracket: `\\[`\n\nRight bracket: `\\]`\n\nLeft paren: `\\(`\n\nRight paren: `\\)`\n\nGreater-than: `\\>`\n\nHash: `\\#`\n\nPeriod: `\\.`\n\nBang: `\\!`\n\nPlus: `\\+`\n\nMinus: `\\-`\n\n\nThese should get escaped, even though they're matching pairs for\nother Markdown constructs:\n\n\\*asterisks\\*\n\n\\_underscores\\_\n\n\\`backticks\\`\n\nThis is a code span with a literal backslash-backtick sequence: `` \\` ``\n\nThis is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.\n\nThis is a tag with backslashes <span attr='\\\\backslashes\\\\'>bar</span>.\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Backslash_escapes.xhtml",
    "content": "<p>These should all get escaped:</p>\n\n<p>Backslash: \\</p>\n\n<p>Backtick: `</p>\n\n<p>Asterisk: *</p>\n\n<p>Underscore: _</p>\n\n<p>Left brace: {</p>\n\n<p>Right brace: }</p>\n\n<p>Left bracket: [</p>\n\n<p>Right bracket: ]</p>\n\n<p>Left paren: (</p>\n\n<p>Right paren: )</p>\n\n<p>Greater-than: ></p>\n\n<p>Hash: #</p>\n\n<p>Period: .</p>\n\n<p>Bang: !</p>\n\n<p>Plus: +</p>\n\n<p>Minus: -</p>\n\n<p>These should not, because they occur within a code block:</p>\n\n<pre><code>Backslash: \\\\\n\nBacktick: \\`\n\nAsterisk: \\*\n\nUnderscore: \\_\n\nLeft brace: \\{\n\nRight brace: \\}\n\nLeft bracket: \\[\n\nRight bracket: \\]\n\nLeft paren: \\(\n\nRight paren: \\)\n\nGreater-than: \\&gt;\n\nHash: \\#\n\nPeriod: \\.\n\nBang: \\!\n\nPlus: \\+\n\nMinus: \\-\n</code></pre>\n\n<p>Nor should these, which occur in code spans:</p>\n\n<p>Backslash: <code>\\\\</code></p>\n\n<p>Backtick: <code>\\`</code></p>\n\n<p>Asterisk: <code>\\*</code></p>\n\n<p>Underscore: <code>\\_</code></p>\n\n<p>Left brace: <code>\\{</code></p>\n\n<p>Right brace: <code>\\}</code></p>\n\n<p>Left bracket: <code>\\[</code></p>\n\n<p>Right bracket: <code>\\]</code></p>\n\n<p>Left paren: <code>\\(</code></p>\n\n<p>Right paren: <code>\\)</code></p>\n\n<p>Greater-than: <code>\\&gt;</code></p>\n\n<p>Hash: <code>\\#</code></p>\n\n<p>Period: <code>\\.</code></p>\n\n<p>Bang: <code>\\!</code></p>\n\n<p>Plus: <code>\\+</code></p>\n\n<p>Minus: <code>\\-</code></p>\n\n\n<p>These should get escaped, even though they're matching pairs for\nother Markdown constructs:</p>\n\n<p>*asterisks*</p>\n\n<p>_underscores_</p>\n\n<p>`backticks`</p>\n\n<p>This is a code span with a literal backslash-backtick sequence: <code>\\`</code></p>\n\n<p>This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.</p>\n\n<p>This is a tag with backslashes <span attr='\\\\backslashes\\\\'>bar</span>.</p>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Blockquotes_with_code_blocks.json",
    "content": "[\"html\", [\"blockquote\", [\"p\", \"Example:\"],\n    [\"pre\", [\"code\", \"sub status {\\u000a    print \\\"working\\\";\\u000a}\\u000a\"]],\n    [\"p\", \"Or:\"],\n    [\"pre\", [\"code\", \"sub status {\\u000a    return \\\"working\\\";\\u000a}\\u000a\"]]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Blockquotes_with_code_blocks.text",
    "content": "> Example:\n> \n>     sub status {\n>         print \"working\";\n>     }\n> \n> Or:\n> \n>     sub status {\n>         return \"working\";\n>     }\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Blockquotes_with_code_blocks.xhtml",
    "content": "<blockquote>\n  <p>Example:</p>\n\n<pre><code>sub status {\n    print \"working\";\n}\n</code></pre>\n  \n  <p>Or:</p>\n\n<pre><code>sub status {\n    return \"working\";\n}\n</code></pre>\n</blockquote>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Code_Blocks.json",
    "content": "[\"html\", [\"pre\", [\"code\", \"code block on the first line\\u000a\"]],\n    [\"p\", \"Regular text.\"],\n    [\"pre\", [\"code\", \"code block indented by spaces\\u000a\"]],\n    [\"p\", \"Regular text.\"],\n    [\"pre\", [\"code\", \"the lines in this block  \\u000aall contain trailing spaces  \\u000a\"]],\n    [\"p\", \"Regular Text.\"],\n    [\"pre\", [\"code\", \"code block on the last line\\u000a\"]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Code_Blocks.text",
    "content": "\tcode block on the first line\n\t\nRegular text.\n\n    code block indented by spaces\n\nRegular text.\n\n\tthe lines in this block  \n\tall contain trailing spaces  \n\nRegular Text.\n\n\tcode block on the last line"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Code_Blocks.xhtml",
    "content": "<pre><code>code block on the first line\n</code></pre>\n\n<p>Regular text.</p>\n\n<pre><code>code block indented by spaces\n</code></pre>\n\n<p>Regular text.</p>\n\n<pre><code>the lines in this block  \nall contain trailing spaces  \n</code></pre>\n\n<p>Regular Text.</p>\n\n<pre><code>code block on the last line\n</code></pre>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Code_Spans.json",
    "content": "[\"html\", [\"p\", [\"code\", \"<test a=\\\"\"], \" content of attribute \", [\"code\", \"\\\">\"]],\n    [\"p\", \"Fix for backticks within HTML tag: \", [\"span\", {\n        \"attr\": \"`ticks`\"\n    },\n    \"like this\"]],\n    [\"p\", \"Here's how you put \", [\"code\", \"`backticks`\"], \" in a code span.\"]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Code_Spans.text",
    "content": "`<test a=\"` content of attribute `\">`\n\nFix for backticks within HTML tag: <span attr='`ticks`'>like this</span>\n\nHere's how you put `` `backticks` `` in a code span."
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Code_Spans.xhtml",
    "content": "<p><code>&lt;test a=\"</code> content of attribute <code>\"&gt;</code></p>\n\n<p>Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span></p>\n\n<p>Here's how you put <code>`backticks`</code> in a code span.</p>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Hard-wrapped_paragraphs_with_list-like_lines.json",
    "content": "[\"html\", [\"p\", \"In Markdown 1.0.0 and earlier. Version\\u000a8. This line turns into a list item.\\u000aBecause a hard-wrapped line in the\\u000amiddle of a paragraph looked like a\\u000alist item.\"],\n    [\"p\", \"Here's one with a bullet.\\u000a* criminey.\"]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Hard-wrapped_paragraphs_with_list-like_lines.text",
    "content": "In Markdown 1.0.0 and earlier. Version\n8. This line turns into a list item.\nBecause a hard-wrapped line in the\nmiddle of a paragraph looked like a\nlist item.\n\nHere's one with a bullet.\n* criminey.\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Hard-wrapped_paragraphs_with_list-like_lines.xhtml",
    "content": "<p>In Markdown 1.0.0 and earlier. Version\n8. This line turns into a list item.\nBecause a hard-wrapped line in the\nmiddle of a paragraph looked like a\nlist item.</p>\n\n<p>Here's one with a bullet.\n* criminey.</p>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Horizontal_rules.json",
    "content": "[\"html\", [\"p\", \"Dashes:\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"pre\", [\"code\", \"---\\u000a\"]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"pre\", [\"code\", \"- - -\\u000a\"]],\n    [\"p\", \"Asterisks:\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"pre\", [\"code\", \"***\\u000a\"]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"pre\", [\"code\", \"* * *\\u000a\"]],\n    [\"p\", \"Underscores:\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"pre\", [\"code\", \"___\\u000a\"]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"pre\", [\"code\", \"_ _ _\\u000a\"]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Horizontal_rules.text",
    "content": "Dashes:\n\n---\n\n ---\n \n  ---\n\n   ---\n\n\t---\n\n- - -\n\n - - -\n \n  - - -\n\n   - - -\n\n\t- - -\n\n\nAsterisks:\n\n***\n\n ***\n \n  ***\n\n   ***\n\n\t***\n\n* * *\n\n * * *\n \n  * * *\n\n   * * *\n\n\t* * *\n\n\nUnderscores:\n\n___\n\n ___\n \n  ___\n\n   ___\n\n    ___\n\n_ _ _\n\n _ _ _\n \n  _ _ _\n\n   _ _ _\n\n    _ _ _\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Horizontal_rules.xhtml",
    "content": "<p>Dashes:</p>\n\n<hr />\n\n<hr />\n\n<hr />\n\n<hr />\n\n<pre><code>---\n</code></pre>\n\n<hr />\n\n<hr />\n\n<hr />\n\n<hr />\n\n<pre><code>- - -\n</code></pre>\n\n<p>Asterisks:</p>\n\n<hr />\n\n<hr />\n\n<hr />\n\n<hr />\n\n<pre><code>***\n</code></pre>\n\n<hr />\n\n<hr />\n\n<hr />\n\n<hr />\n\n<pre><code>* * *\n</code></pre>\n\n<p>Underscores:</p>\n\n<hr />\n\n<hr />\n\n<hr />\n\n<hr />\n\n<pre><code>___\n</code></pre>\n\n<hr />\n\n<hr />\n\n<hr />\n\n<hr />\n\n<pre><code>_ _ _\n</code></pre>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Images.json",
    "content": "[\"html\", [\"p\", [\"img\", {\n    \"src\": \"/path/to/img.jpg\",\n    \"alt\": \"Alt text\"\n}]],\n    [\"p\", [\"img\", {\n        \"src\": \"/path/to/img.jpg\",\n        \"alt\": \"Alt text\",\n        \"title\": \"Optional title\"\n    }]],\n    [\"p\", \"Inline within a paragraph: \", [\"a\", {\n        \"href\": \"/url/\"\n    },\n    \"alt text\"], \".\"],\n    [\"p\", [\"img\", {\n        \"src\": \"/url/\",\n        \"alt\": \"alt text\",\n        \"title\": \"title preceded by two spaces\"\n    }]],\n    [\"p\", [\"img\", {\n        \"src\": \"/url/\",\n        \"alt\": \"alt text\",\n        \"title\": \"title has spaces afterward\"\n    }]],\n    [\"p\", [\"img\", {\n        \"src\": \"/url/\",\n        \"alt\": \"alt text\"\n    }]],\n    [\"p\", [\"img\", {\n        \"src\": \"/url/\",\n        \"alt\": \"alt text\",\n        \"title\": \"with a title\"\n    }], \".\"],\n    [\"p\", [\"img\", {\n        \"alt\": \"Empty\"\n    }]],\n    [\"p\", [\"img\", {\n        \"src\": \"http://example.com/(parens).jpg\",\n        \"alt\": \"this is a stupid URL\"\n    }]],\n    [\"p\", [\"img\", {\n        \"src\": \"/url/\",\n        \"alt\": \"alt text\"\n    }]],\n    [\"p\", [\"img\", {\n        \"src\": \"/url/\",\n        \"alt\": \"alt text\",\n        \"title\": \"Title here\"\n    }]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Images.text",
    "content": "![Alt text](/path/to/img.jpg)\n\n![Alt text](/path/to/img.jpg \"Optional title\")\n\nInline within a paragraph: [alt text](/url/).\n\n![alt text](/url/  \"title preceded by two spaces\")\n\n![alt text](/url/  \"title has spaces afterward\"  )\n\n![alt text](</url/>)\n\n![alt text](</url/> \"with a title\").\n\n![Empty]()\n\n![this is a stupid URL](http://example.com/(parens).jpg)\n\n\n![alt text][foo]\n\n  [foo]: /url/\n\n![alt text][bar]\n\n  [bar]: /url/ \"Title here\""
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Images.xhtml",
    "content": "<p><img src=\"/path/to/img.jpg\" alt=\"Alt text\" /></p>\n\n<p><img src=\"/path/to/img.jpg\" alt=\"Alt text\" title=\"Optional title\" /></p>\n\n<p>Inline within a paragraph: <a href=\"/url/\">alt text</a>.</p>\n\n<p><img src=\"/url/\" alt=\"alt text\" title=\"title preceded by two spaces\" /></p>\n\n<p><img src=\"/url/\" alt=\"alt text\" title=\"title has spaces afterward\" /></p>\n\n<p><img src=\"/url/\" alt=\"alt text\" /></p>\n\n<p><img src=\"/url/\" alt=\"alt text\" title=\"with a title\" />.</p>\n\n<p><img src=\"\" alt=\"Empty\" /></p>\n\n<p><img src=\"http://example.com/(parens).jpg\" alt=\"this is a stupid URL\" /></p>\n\n<p><img src=\"/url/\" alt=\"alt text\" /></p>\n\n<p><img src=\"/url/\" alt=\"alt text\" title=\"Title here\" /></p>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Advanced).json",
    "content": "[\"html\", [\"p\", \"Simple block on one line:\"], \"\\u000a\\u000a\", [\"div\", \"foo\"], \"\\u000a\\u000a\", [\"p\", \"And nested without indentation:\"], \"\\u000a\\u000a\", [\"div\", \"\\u000a\", [\"div\", \"\\u000a\", [\"div\", \"\\u000afoo\\u000a\"], \"\\u000a\", [\"div\", {\n    \"style\": \">\"\n}], \"\\u000a\"], \"\\u000a\", [\"div\", \"bar\"], \"\\u000a\"], \"\\u000a\\u000a\", [\"p\", \"And with attributes:\"], \"\\u000a\\u000a\", [\"div\", \"\\u000a    \", [\"div\", {\n    \"id\": \"foo\"\n}], \"\\u000a\"], \"\\u000a\\u000a\", [\"p\", \"This was broken in 1.0.2b7:\"], \"\\u000a\\u000a\", [\"div\", {\n    \"class\": \"inlinepage\"\n},\n\"\\u000a\", [\"div\", {\n    \"class\": \"toggleableend\"\n},\n\"\\u000afoo\\u000a\"], \"\\u000a\"], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Advanced).text",
    "content": "Simple block on one line:\n\n<div>foo</div>\n\nAnd nested without indentation:\n\n<div>\n<div>\n<div>\nfoo\n</div>\n<div style=\">\"/>\n</div>\n<div>bar</div>\n</div>\n\nAnd with attributes:\n\n<div>\n\t<div id=\"foo\">\n\t</div>\n</div>\n\nThis was broken in 1.0.2b7:\n\n<div class=\"inlinepage\">\n<div class=\"toggleableend\">\nfoo\n</div>\n</div>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Advanced).xhtml",
    "content": "<p>Simple block on one line:</p>\n\n<div>foo</div>\n\n<p>And nested without indentation:</p>\n\n<div>\n<div>\n<div>\nfoo\n</div>\n<div style=\">\"/>\n</div>\n<div>bar</div>\n</div>\n\n<p>And with attributes:</p>\n\n<div>\n    <div id=\"foo\">\n    </div>\n</div>\n\n<p>This was broken in 1.0.2b7:</p>\n\n<div class=\"inlinepage\">\n<div class=\"toggleableend\">\nfoo\n</div>\n</div>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Simple).html",
    "content": "<p>Here's a simple block:</p>\n\n<div>\n    foo\n</div>\n\n<p>This should be a code block, though:</p>\n\n<pre><code>&lt;div&gt;\n    foo\n&lt;/div&gt;\n</code></pre>\n\n<p>As should this:</p>\n\n<pre><code>&lt;div&gt;foo&lt;/div&gt;\n</code></pre>\n\n<p>Now, nested:</p>\n\n<div>\n    <div>\n        <div>\n            foo\n        </div>\n    </div>\n</div>\n\n<p>This should just be an HTML comment:</p>\n\n<!-- Comment -->\n\n<p>Multiline:</p>\n\n<!--\nBlah\nBlah\n-->\n\n<p>Code block:</p>\n\n<pre><code>&lt;!-- Comment --&gt;\n</code></pre>\n\n<p>Just plain comment, with trailing spaces on the line:</p>\n\n<!-- foo -->   \n\n<p>Code:</p>\n\n<pre><code>&lt;hr /&gt;\n</code></pre>\n\n<p>Hr's:</p>\n\n<hr>\n\n<hr/>\n\n<hr />\n\n<hr>   \n\n<hr/>  \n\n<hr /> \n\n<hr class=\"foo\" id=\"bar\" />\n\n<hr class=\"foo\" id=\"bar\"/>\n\n<hr class=\"foo\" id=\"bar\" >\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Simple).json",
    "content": "[\"html\", [\"p\", \"Here's a simple block:\"], \"\\u000a\\u000a\", [\"div\", \"\\u000a    foo\\u000a\"], \"\\u000a\\u000a\", [\"p\", \"This should be a code block, though:\"],\n    [\"pre\", [\"code\", \"<div>\\u000a    foo\\u000a</div>\\u000a\"]],\n    [\"p\", \"As should this:\"],\n    [\"pre\", [\"code\", \"<div>foo</div>\\u000a\"]],\n    [\"p\", \"Now, nested:\"], \"\\u000a\\u000a\", [\"div\", \"\\u000a    \", [\"div\", \"\\u000a        \", [\"div\", \"\\u000a            foo\\u000a        \"], \"\\u000a    \"], \"\\u000a\"], \"\\u000a\\u000a\", [\"p\", \"This should just be an HTML comment:\"], \"\\u000a\\u000a\", \"\\u000a\\u000a\", [\"p\", \"Multiline:\"], \"\\u000a\\u000a\", \"\\u000a\\u000a\", [\"p\", \"Code block:\"],\n    [\"pre\", [\"code\", \"<!-- Comment -->\\u000a\"]],\n    [\"p\", \"Just plain comment, with trailing spaces on the line:\"], \"\\u000a\\u000a\", \"   \\u000a\\u000a\", [\"p\", \"Code:\"],\n    [\"pre\", [\"code\", \"<hr />\\u000a\"]],\n    [\"p\", \"Hr's:\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"   \\u000a\\u000a\", [\"hr\"], \"  \\u000a\\u000a\", [\"hr\"], \" \\u000a\\u000a\", [\"hr\", {\n    \"class\": \"foo\",\n    \"id\": \"bar\"\n}], \"\\u000a\\u000a\", [\"hr\", {\n    \"class\": \"foo\",\n    \"id\": \"bar\"\n}], \"\\u000a\\u000a\", [\"hr\", {\n    \"class\": \"foo\",\n    \"id\": \"bar\"\n}], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Simple).text",
    "content": "Here's a simple block:\n\n<div>\n\tfoo\n</div>\n\nThis should be a code block, though:\n\n\t<div>\n\t\tfoo\n\t</div>\n\nAs should this:\n\n\t<div>foo</div>\n\nNow, nested:\n\n<div>\n\t<div>\n\t\t<div>\n\t\t\tfoo\n\t\t</div>\n\t</div>\n</div>\n\nThis should just be an HTML comment:\n\n<!-- Comment -->\n\nMultiline:\n\n<!--\nBlah\nBlah\n-->\n\nCode block:\n\n\t<!-- Comment -->\n\nJust plain comment, with trailing spaces on the line:\n\n<!-- foo -->   \n\nCode:\n\n\t<hr />\n\t\nHr's:\n\n<hr>\n\n<hr/>\n\n<hr />\n\n<hr>   \n\n<hr/>  \n\n<hr /> \n\n<hr class=\"foo\" id=\"bar\" />\n\n<hr class=\"foo\" id=\"bar\"/>\n\n<hr class=\"foo\" id=\"bar\" >\n\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Inline_HTML_comments.html",
    "content": "<p>Paragraph one.</p>\n\n<!-- This is a simple comment -->\n\n<!--\n    This is another comment.\n-->\n\n<p>Paragraph two.</p>\n\n<!-- one comment block -- -- with two comments -->\n\n<p>The end.</p>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Inline_HTML_comments.json",
    "content": "[\"html\", [\"p\", \"Paragraph one.\"], \"\\u000a\\u000a\", \"\\u000a\\u000a\", \"\\u000a\\u000a\", [\"p\", \"Paragraph two.\"], \"\\u000a\\u000a\", \"\\u000a\\u000a\", [\"p\", \"The end.\"]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Inline_HTML_comments.text",
    "content": "Paragraph one.\n\n<!-- This is a simple comment -->\n\n<!--\n\tThis is another comment.\n-->\n\nParagraph two.\n\n<!-- one comment block -- -- with two comments -->\n\nThe end.\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Links_inline_style.json",
    "content": "[\"html\", [\"p\", \"Just a \", [\"a\", {\n    \"href\": \"/url/\"\n},\n\"URL\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"title\"\n    },\n    \"URL and title\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"title preceded by two spaces\"\n    },\n    \"URL and title\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"title preceded by a tab\"\n    },\n    \"URL and title\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"title has spaces afterward\"\n    },\n    \"URL and title\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url/\"\n    },\n    \"URL wrapped in angle brackets\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"Here's the title\"\n    },\n    \"URL w/ angle brackets + title\"], \".\"],\n    [\"p\", [\"a\", \"Empty\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"http://en.wikipedia.org/wiki/WIMP_(computing)\"\n    },\n    \"With parens in the URL\"]],\n    [\"p\", \"(With outer parens and \", [\"a\", {\n        \"href\": \"/foo(bar)\"\n    },\n    \"parens in url\"], \")\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/foo(bar)\",\n        \"title\": \"and a title\"\n    },\n    \"With parens in the URL\"]],\n    [\"p\", \"(With outer parens and \", [\"a\", {\n        \"href\": \"/foo(bar)\",\n        \"title\": \"and a title\"\n    },\n    \"parens in url\"], \")\"]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Links_inline_style.text",
    "content": "Just a [URL](/url/).\n\n[URL and title](/url/ \"title\").\n\n[URL and title](/url/  \"title preceded by two spaces\").\n\n[URL and title](/url/\t\"title preceded by a tab\").\n\n[URL and title](/url/ \"title has spaces afterward\"  ).\n\n[URL wrapped in angle brackets](</url/>).\n\n[URL w/ angle brackets + title](</url/> \"Here's the title\").\n\n[Empty]().\n\n[With parens in the URL](http://en.wikipedia.org/wiki/WIMP_(computing))\n\n(With outer parens and [parens in url](/foo(bar)))\n\n\n[With parens in the URL](/foo(bar) \"and a title\")\n\n(With outer parens and [parens in url](/foo(bar) \"and a title\"))\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Links_inline_style.xhtml",
    "content": "<p>Just a <a href=\"/url/\">URL</a>.</p>\n\n<p><a href=\"/url/\" title=\"title\">URL and title</a>.</p>\n\n<p><a href=\"/url/\" title=\"title preceded by two spaces\">URL and title</a>.</p>\n\n<p><a href=\"/url/\" title=\"title preceded by a tab\">URL and title</a>.</p>\n\n<p><a href=\"/url/\" title=\"title has spaces afterward\">URL and title</a>.</p>\n\n<p><a href=\"/url/\">URL wrapped in angle brackets</a>.</p>\n\n<p><a href=\"/url/\" title=\"Here's the title\">URL w/ angle brackets + title</a>.</p>\n\n<p><a href=\"\">Empty</a>.</p>\n\n<p><a href=\"http://en.wikipedia.org/wiki/WIMP_(computing)\">With parens in the URL</a></p>\n\n<p>(With outer parens and <a href=\"/foo(bar)\">parens in url</a>)</p>\n\n<p><a href=\"/foo(bar)\" title=\"and a title\">With parens in the URL</a></p>\n\n<p>(With outer parens and <a href=\"/foo(bar)\" title=\"and a title\">parens in url</a>)</p>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Links_reference_style.json",
    "content": "[\"html\", [\"p\", \"Foo \", [\"a\", {\n    \"href\": \"/url/\",\n    \"title\": \"Title\"\n},\n\"bar\"], \".\"],\n    [\"p\", \"Foo \", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"Title\"\n    },\n    \"bar\"], \".\"],\n    [\"p\", \"Foo \", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"Title\"\n    },\n    \"bar\"], \".\"],\n    [\"p\", \"With \", [\"a\", {\n        \"href\": \"/url/\"\n    },\n    \"embedded [brackets]\"], \".\"],\n    [\"p\", \"Indented \", [\"a\", {\n        \"href\": \"/url\"\n    },\n    \"once\"], \".\"],\n    [\"p\", \"Indented \", [\"a\", {\n        \"href\": \"/url\"\n    },\n    \"twice\"], \".\"],\n    [\"p\", \"Indented \", [\"a\", {\n        \"href\": \"/url\"\n    },\n    \"thrice\"], \".\"],\n    [\"p\", \"Indented [four][] times.\"],\n    [\"pre\", [\"code\", \"[four]: /url\\u000a\"]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", [\"a\", {\n    \"href\": \"foo\"\n},\n\"this\"], \" should work\"],\n    [\"p\", \"So should \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \".\"],\n    [\"p\", \"And \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \".\"],\n    [\"p\", \"And \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \".\"],\n    [\"p\", \"And \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \".\"],\n    [\"p\", \"But not [that] [].\"],\n    [\"p\", \"Nor [that][].\"],\n    [\"p\", \"Nor [that].\"],\n    [\"p\", \"[Something in brackets like \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \" should work]\"],\n    [\"p\", \"[Same with \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \".]\"],\n    [\"p\", \"In this case, \", [\"a\", {\n        \"href\": \"/somethingelse/\"\n    },\n    \"this\"], \" points to something else.\"],\n    [\"p\", \"Backslashing should suppress [this] and [this].\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", \"Here's one where the \", [\"a\", {\n    \"href\": \"/url/\"\n},\n\"link\\u000abreaks\"], \" across lines.\"],\n    [\"p\", \"Here's another where the \", [\"a\", {\n        \"href\": \"/url/\"\n    },\n    \"link \\u000abreaks\"], \" across lines, but with a line-ending space.\"]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Links_reference_style.text",
    "content": "Foo [bar] [1].\n\nFoo [bar][1].\n\nFoo [bar]\n[1].\n\n[1]: /url/  \"Title\"\n\n\nWith [embedded [brackets]] [b].\n\n\nIndented [once][].\n\nIndented [twice][].\n\nIndented [thrice][].\n\nIndented [four][] times.\n\n [once]: /url\n\n  [twice]: /url\n\n   [thrice]: /url\n\n    [four]: /url\n\n\n[b]: /url/\n\n* * *\n\n[this] [this] should work\n\nSo should [this][this].\n\nAnd [this] [].\n\nAnd [this][].\n\nAnd [this].\n\nBut not [that] [].\n\nNor [that][].\n\nNor [that].\n\n[Something in brackets like [this][] should work]\n\n[Same with [this].]\n\nIn this case, [this](/somethingelse/) points to something else.\n\nBackslashing should suppress \\[this] and [this\\].\n\n[this]: foo\n\n\n* * *\n\nHere's one where the [link\nbreaks] across lines.\n\nHere's another where the [link \nbreaks] across lines, but with a line-ending space.\n\n\n[link breaks]: /url/\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Links_reference_style.xhtml",
    "content": "<p>Foo <a href=\"/url/\" title=\"Title\">bar</a>.</p>\n\n<p>Foo <a href=\"/url/\" title=\"Title\">bar</a>.</p>\n\n<p>Foo <a href=\"/url/\" title=\"Title\">bar</a>.</p>\n\n<p>With <a href=\"/url/\">embedded [brackets]</a>.</p>\n\n<p>Indented <a href=\"/url\">once</a>.</p>\n\n<p>Indented <a href=\"/url\">twice</a>.</p>\n\n<p>Indented <a href=\"/url\">thrice</a>.</p>\n\n<p>Indented [four][] times.</p>\n\n<pre><code>[four]: /url\n</code></pre>\n\n<hr />\n\n<p><a href=\"foo\">this</a> should work</p>\n\n<p>So should <a href=\"foo\">this</a>.</p>\n\n<p>And <a href=\"foo\">this</a>.</p>\n\n<p>And <a href=\"foo\">this</a>.</p>\n\n<p>And <a href=\"foo\">this</a>.</p>\n\n<p>But not [that] [].</p>\n\n<p>Nor [that][].</p>\n\n<p>Nor [that].</p>\n\n<p>[Something in brackets like <a href=\"foo\">this</a> should work]</p>\n\n<p>[Same with <a href=\"foo\">this</a>.]</p>\n\n<p>In this case, <a href=\"/somethingelse/\">this</a> points to something else.</p>\n\n<p>Backslashing should suppress [this] and [this].</p>\n\n<hr />\n\n<p>Here's one where the <a href=\"/url/\">link\nbreaks</a> across lines.</p>\n\n<p>Here's another where the <a href=\"/url/\">link \nbreaks</a> across lines, but with a line-ending space.</p>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Links_shortcut_references.json",
    "content": "[\"html\", [\"p\", \"This is the \", [\"a\", {\n    \"href\": \"/simple\"\n},\n\"simple case\"], \".\"],\n    [\"p\", \"This one has a \", [\"a\", {\n        \"href\": \"/foo\"\n    },\n    \"line\\u000abreak\"], \".\"],\n    [\"p\", \"This one has a \", [\"a\", {\n        \"href\": \"/foo\"\n    },\n    \"line \\u000abreak\"], \" with a line-ending space.\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/that\"\n    },\n    \"this\"], \" and the \", [\"a\", {\n        \"href\": \"/other\"\n    },\n    \"other\"]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Links_shortcut_references.text",
    "content": "This is the [simple case].\n\n[simple case]: /simple\n\n\n\nThis one has a [line\nbreak].\n\nThis one has a [line \nbreak] with a line-ending space.\n\n[line break]: /foo\n\n\n[this] [that] and the [other]\n\n[this]: /this\n[that]: /that\n[other]: /other\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Links_shortcut_references.xhtml",
    "content": "<p>This is the <a href=\"/simple\">simple case</a>.</p>\n\n<p>This one has a <a href=\"/foo\">line\nbreak</a>.</p>\n\n<p>This one has a <a href=\"/foo\">line \nbreak</a> with a line-ending space.</p>\n\n<p><a href=\"/that\">this</a> and the <a href=\"/other\">other</a></p>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Literal_quotes_in_titles.json",
    "content": "[\"html\", [\"p\", \"Foo \", [\"a\", {\n    \"href\": \"/url/\",\n    \"title\": \"Title with \\\"quotes\\\" inside\"\n},\n\"bar\"], \".\"],\n    [\"p\", \"Foo \", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"Title with \\\"quotes\\\" inside\"\n    },\n    \"bar\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Literal_quotes_in_titles.text",
    "content": "Foo [bar][].\n\nFoo [bar](/url/ \"Title with \"quotes\" inside\").\n\n\n  [bar]: /url/ \"Title with \"quotes\" inside\"\n\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Literal_quotes_in_titles.xhtml",
    "content": "<p>Foo <a href=\"/url/\" title=\"Title with &quot;quotes&quot; inside\">bar</a>.</p>\n\n<p>Foo <a href=\"/url/\" title=\"Title with &quot;quotes&quot; inside\">bar</a>.</p>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Markdown_Documentation_-_Basics.json",
    "content": "[\"html\", [\"h1\", \"Markdown: Basics\"], \"\\u000a\\u000a\", [\"ul\", {\n    \"id\": \"ProjectSubmenu\"\n},\n[\"li\", [\"a\", {\n    \"href\": \"/projects/markdown/\",\n    \"title\": \"Markdown Project Page\"\n},\n\"Main\"]],\n    [\"li\", [\"a\", {\n        \"class\": \"selected\",\n        \"title\": \"Markdown Basics\"\n    },\n    \"Basics\"]],\n    [\"li\", [\"a\", {\n        \"href\": \"/projects/markdown/syntax\",\n        \"title\": \"Markdown Syntax Documentation\"\n    },\n    \"Syntax\"]],\n    [\"li\", [\"a\", {\n        \"href\": \"/projects/markdown/license\",\n        \"title\": \"Pricing and License Information\"\n    },\n    \"License\"]],\n    [\"li\", [\"a\", {\n        \"href\": \"/projects/markdown/dingus\",\n        \"title\": \"Online Markdown Web Form\"\n    },\n    \"Dingus\"]]], \"\\u000a\\u000a\", [\"h2\", \"Getting the Gist of Markdown's Formatting Syntax\"], \"\\u000a\\u000a\", [\"p\", \"This page offers a brief overview of what it's like to use Markdown.\\u000aThe \", [\"a\", {\n    \"href\": \"/projects/markdown/syntax\",\n    \"title\": \"Markdown Syntax\"\n},\n\"syntax page\"], \" provides complete, detailed documentation for\\u000aevery feature, but Markdown should be very easy to pick up simply by\\u000alooking at a few examples of it in action. The examples on this page\\u000aare written in a before/after style, showing example syntax and the\\u000aHTML output produced by Markdown.\"],\n    [\"p\", \"It's also helpful to simply try Markdown out; the \", [\"a\", {\n        \"href\": \"/projects/markdown/dingus\",\n        \"title\": \"Markdown Dingus\"\n    },\n    \"Dingus\"], \" is a\\u000aweb application that allows you type your own Markdown-formatted text\\u000aand translate it to XHTML.\"],\n    [\"p\", [\"strong\", \"Note:\"], \" This document is itself written using Markdown; you\\u000acan \", [\"a\", {\n        \"href\": \"/projects/markdown/basics.text\"\n    },\n    \"see the source for it by adding '.text' to the URL\"], \".\"], \"\\u000a\\u000a\", [\"h2\", \"Paragraphs, Headers, Blockquotes\"], \"\\u000a\\u000a\", [\"p\", \"A paragraph is simply one or more consecutive lines of text, separated\\u000aby one or more blank lines. (A blank line is any line that looks like a\\u000ablank line -- a line containing nothing spaces or tabs is considered\\u000ablank.) Normal paragraphs should not be intended with spaces or tabs.\"],\n    [\"p\", \"Markdown offers two styles of headers: \", [\"em\", \"Setext\"], \" and \", [\"em\", \"atx\"], \".\\u000aSetext-style headers for \", [\"code\", \"<h1>\"], \" and \", [\"code\", \"<h2>\"], \" are created by\\u000a\\\"underlining\\\" with equal signs (\", [\"code\", \"=\"], \") and hyphens (\", [\"code\", \"-\"], \"), respectively.\\u000aTo create an atx-style header, you put 1-6 hash marks (\", [\"code\", \"#\"], \") at the\\u000abeginning of the line -- the number of hashes equals the resulting\\u000aHTML header level.\"],\n    [\"p\", \"Blockquotes are indicated using email-style '\", [\"code\", \">\"], \"' angle brackets.\"],\n    [\"p\", \"Markdown:\"],\n    [\"pre\", [\"code\", \"A First Level Header\\u000a====================\\u000a\\u000aA Second Level Header\\u000a---------------------\\u000a\\u000aNow is the time for all good men to come to\\u000athe aid of their country. This is just a\\u000aregular paragraph.\\u000a\\u000aThe quick brown fox jumped over the lazy\\u000adog's back.\\u000a\\u000a### Header 3\\u000a\\u000a> This is a blockquote.\\u000a> \\u000a> This is the second paragraph in the blockquote.\\u000a>\\u000a> ## This is an H2 in a blockquote\\u000a\"]],\n    [\"p\", \"Output:\"],\n    [\"pre\", [\"code\", \"<h1>A First Level Header</h1>\\u000a\\u000a<h2>A Second Level Header</h2>\\u000a\\u000a<p>Now is the time for all good men to come to\\u000athe aid of their country. This is just a\\u000aregular paragraph.</p>\\u000a\\u000a<p>The quick brown fox jumped over the lazy\\u000adog's back.</p>\\u000a\\u000a<h3>Header 3</h3>\\u000a\\u000a<blockquote>\\u000a    <p>This is a blockquote.</p>\\u000a\\u000a    <p>This is the second paragraph in the blockquote.</p>\\u000a\\u000a    <h2>This is an H2 in a blockquote</h2>\\u000a</blockquote>\\u000a\"]], \"\\u000a\\u000a\", [\"h3\", \"Phrase Emphasis\"], \"\\u000a\\u000a\", [\"p\", \"Markdown uses asterisks and underscores to indicate spans of emphasis.\"],\n    [\"p\", \"Markdown:\"],\n    [\"pre\", [\"code\", \"Some of these words *are emphasized*.\\u000aSome of these words _are emphasized also_.\\u000a\\u000aUse two asterisks for **strong emphasis**.\\u000aOr, if you prefer, __use two underscores instead__.\\u000a\"]],\n    [\"p\", \"Output:\"],\n    [\"pre\", [\"code\", \"<p>Some of these words <em>are emphasized</em>.\\u000aSome of these words <em>are emphasized also</em>.</p>\\u000a\\u000a<p>Use two asterisks for <strong>strong emphasis</strong>.\\u000aOr, if you prefer, <strong>use two underscores instead</strong>.</p>\\u000a\"]], \"\\u000a\\u000a\", [\"h2\", \"Lists\"], \"\\u000a\\u000a\", [\"p\", \"Unordered (bulleted) lists use asterisks, pluses, and hyphens (\", [\"code\", \"*\"], \",\\u000a\", [\"code\", \"+\"], \", and \", [\"code\", \"-\"], \") as list markers. These three markers are\\u000ainterchangable; this:\"],\n    [\"pre\", [\"code\", \"*   Candy.\\u000a*   Gum.\\u000a*   Booze.\\u000a\"]],\n    [\"p\", \"this:\"],\n    [\"pre\", [\"code\", \"+   Candy.\\u000a+   Gum.\\u000a+   Booze.\\u000a\"]],\n    [\"p\", \"and this:\"],\n    [\"pre\", [\"code\", \"-   Candy.\\u000a-   Gum.\\u000a-   Booze.\\u000a\"]],\n    [\"p\", \"all produce the same output:\"],\n    [\"pre\", [\"code\", \"<ul>\\u000a<li>Candy.</li>\\u000a<li>Gum.</li>\\u000a<li>Booze.</li>\\u000a</ul>\\u000a\"]],\n    [\"p\", \"Ordered (numbered) lists use regular numbers, followed by periods, as\\u000alist markers:\"],\n    [\"pre\", [\"code\", \"1.  Red\\u000a2.  Green\\u000a3.  Blue\\u000a\"]],\n    [\"p\", \"Output:\"],\n    [\"pre\", [\"code\", \"<ol>\\u000a<li>Red</li>\\u000a<li>Green</li>\\u000a<li>Blue</li>\\u000a</ol>\\u000a\"]],\n    [\"p\", \"If you put blank lines between items, you'll get \", [\"code\", \"<p>\"], \" tags for the\\u000alist item text. You can create multi-paragraph list items by indenting\\u000athe paragraphs by 4 spaces or 1 tab:\"],\n    [\"pre\", [\"code\", \"*   A list item.\\u000a\\u000a    With multiple paragraphs.\\u000a\\u000a*   Another item in the list.\\u000a\"]],\n    [\"p\", \"Output:\"],\n    [\"pre\", [\"code\", \"<ul>\\u000a<li><p>A list item.</p>\\u000a<p>With multiple paragraphs.</p></li>\\u000a<li><p>Another item in the list.</p></li>\\u000a</ul>\\u000a\"]], \"\\u000a\\u000a\", [\"h3\", \"Links\"], \"\\u000a\\u000a\", [\"p\", \"Markdown supports two styles for creating links: \", [\"em\", \"inline\"], \" and\\u000a\", [\"em\", \"reference\"], \". With both styles, you use square brackets to delimit the\\u000atext you want to turn into a link.\"],\n    [\"p\", \"Inline-style links use parentheses immediately after the link text.\\u000aFor example:\"],\n    [\"pre\", [\"code\", \"This is an [example link](http://example.com/).\\u000a\"]],\n    [\"p\", \"Output:\"],\n    [\"pre\", [\"code\", \"<p>This is an <a href=\\\"http://example.com/\\\">\\u000aexample link</a>.</p>\\u000a\"]],\n    [\"p\", \"Optionally, you may include a title attribute in the parentheses:\"],\n    [\"pre\", [\"code\", \"This is an [example link](http://example.com/ \\\"With a Title\\\").\\u000a\"]],\n    [\"p\", \"Output:\"],\n    [\"pre\", [\"code\", \"<p>This is an <a href=\\\"http://example.com/\\\" title=\\\"With a Title\\\">\\u000aexample link</a>.</p>\\u000a\"]],\n    [\"p\", \"Reference-style links allow you to refer to your links by names, which\\u000ayou define elsewhere in your document:\"],\n    [\"pre\", [\"code\", \"I get 10 times more traffic from [Google][1] than from\\u000a[Yahoo][2] or [MSN][3].\\u000a\\u000a[1]: http://google.com/        \\\"Google\\\"\\u000a[2]: http://search.yahoo.com/  \\\"Yahoo Search\\\"\\u000a[3]: http://search.msn.com/    \\\"MSN Search\\\"\\u000a\"]],\n    [\"p\", \"Output:\"],\n    [\"pre\", [\"code\", \"<p>I get 10 times more traffic from <a href=\\\"http://google.com/\\\"\\u000atitle=\\\"Google\\\">Google</a> than from <a href=\\\"http://search.yahoo.com/\\\"\\u000atitle=\\\"Yahoo Search\\\">Yahoo</a> or <a href=\\\"http://search.msn.com/\\\"\\u000atitle=\\\"MSN Search\\\">MSN</a>.</p>\\u000a\"]],\n    [\"p\", \"The title attribute is optional. Link names may contain letters,\\u000anumbers and spaces, but are \", [\"em\", \"not\"], \" case sensitive:\"],\n    [\"pre\", [\"code\", \"I start my morning with a cup of coffee and\\u000a[The New York Times][NY Times].\\u000a\\u000a[ny times]: http://www.nytimes.com/\\u000a\"]],\n    [\"p\", \"Output:\"],\n    [\"pre\", [\"code\", \"<p>I start my morning with a cup of coffee and\\u000a<a href=\\\"http://www.nytimes.com/\\\">The New York Times</a>.</p>\\u000a\"]], \"\\u000a\\u000a\", [\"h3\", \"Images\"], \"\\u000a\\u000a\", [\"p\", \"Image syntax is very much like link syntax.\"],\n    [\"p\", \"Inline (titles are optional):\"],\n    [\"pre\", [\"code\", \"![alt text](/path/to/img.jpg \\\"Title\\\")\\u000a\"]],\n    [\"p\", \"Reference-style:\"],\n    [\"pre\", [\"code\", \"![alt text][id]\\u000a\\u000a[id]: /path/to/img.jpg \\\"Title\\\"\\u000a\"]],\n    [\"p\", \"Both of the above examples produce the same output:\"],\n    [\"pre\", [\"code\", \"<img src=\\\"/path/to/img.jpg\\\" alt=\\\"alt text\\\" title=\\\"Title\\\" />\\u000a\"]], \"\\u000a\\u000a\", [\"h3\", \"Code\"], \"\\u000a\\u000a\", [\"p\", \"In a regular paragraph, you can create code span by wrapping text in\\u000abacktick quotes. Any ampersands (\", [\"code\", \"&\"], \") and angle brackets (\", [\"code\", \"<\"], \" or\\u000a\", [\"code\", \">\"], \") will automatically be translated into HTML entities. This makes\\u000ait easy to use Markdown to write about HTML example code:\"],\n    [\"pre\", [\"code\", \"I strongly recommend against using any `<blink>` tags.\\u000a\\u000aI wish SmartyPants used named entities like `&mdash;`\\u000ainstead of decimal-encoded entites like `&#8212;`.\\u000a\"]],\n    [\"p\", \"Output:\"],\n    [\"pre\", [\"code\", \"<p>I strongly recommend against using any\\u000a<code>&lt;blink&gt;</code> tags.</p>\\u000a\\u000a<p>I wish SmartyPants used named entities like\\u000a<code>&amp;mdash;</code> instead of decimal-encoded\\u000aentites like <code>&amp;#8212;</code>.</p>\\u000a\"]],\n    [\"p\", \"To specify an entire block of pre-formatted code, indent every line of\\u000athe block by 4 spaces or 1 tab. Just like with code spans, \", [\"code\", \"&\"], \", \", [\"code\", \"<\"], \",\\u000aand \", [\"code\", \">\"], \" characters will be escaped automatically.\"],\n    [\"p\", \"Markdown:\"],\n    [\"pre\", [\"code\", \"If you want your page to validate under XHTML 1.0 Strict,\\u000ayou've got to put paragraph tags in your blockquotes:\\u000a\\u000a    <blockquote>\\u000a        <p>For example.</p>\\u000a    </blockquote>\\u000a\"]],\n    [\"p\", \"Output:\"],\n    [\"pre\", [\"code\", \"<p>If you want your page to validate under XHTML 1.0 Strict,\\u000ayou've got to put paragraph tags in your blockquotes:</p>\\u000a\\u000a<pre><code>&lt;blockquote&gt;\\u000a    &lt;p&gt;For example.&lt;/p&gt;\\u000a&lt;/blockquote&gt;\\u000a</code></pre>\\u000a\"]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Markdown_Documentation_-_Basics.text",
    "content": "Markdown: Basics\n================\n\n<ul id=\"ProjectSubmenu\">\n    <li><a href=\"/projects/markdown/\" title=\"Markdown Project Page\">Main</a></li>\n    <li><a class=\"selected\" title=\"Markdown Basics\">Basics</a></li>\n    <li><a href=\"/projects/markdown/syntax\" title=\"Markdown Syntax Documentation\">Syntax</a></li>\n    <li><a href=\"/projects/markdown/license\" title=\"Pricing and License Information\">License</a></li>\n    <li><a href=\"/projects/markdown/dingus\" title=\"Online Markdown Web Form\">Dingus</a></li>\n</ul>\n\n\nGetting the Gist of Markdown's Formatting Syntax\n------------------------------------------------\n\nThis page offers a brief overview of what it's like to use Markdown.\nThe [syntax page] [s] provides complete, detailed documentation for\nevery feature, but Markdown should be very easy to pick up simply by\nlooking at a few examples of it in action. The examples on this page\nare written in a before/after style, showing example syntax and the\nHTML output produced by Markdown.\n\nIt's also helpful to simply try Markdown out; the [Dingus] [d] is a\nweb application that allows you type your own Markdown-formatted text\nand translate it to XHTML.\n\n**Note:** This document is itself written using Markdown; you\ncan [see the source for it by adding '.text' to the URL] [src].\n\n  [s]: /projects/markdown/syntax  \"Markdown Syntax\"\n  [d]: /projects/markdown/dingus  \"Markdown Dingus\"\n  [src]: /projects/markdown/basics.text\n\n\n## Paragraphs, Headers, Blockquotes ##\n\nA paragraph is simply one or more consecutive lines of text, separated\nby one or more blank lines. (A blank line is any line that looks like a\nblank line -- a line containing nothing spaces or tabs is considered\nblank.) Normal paragraphs should not be intended with spaces or tabs.\n\nMarkdown offers two styles of headers: *Setext* and *atx*.\nSetext-style headers for `<h1>` and `<h2>` are created by\n\"underlining\" with equal signs (`=`) and hyphens (`-`), respectively.\nTo create an atx-style header, you put 1-6 hash marks (`#`) at the\nbeginning of the line -- the number of hashes equals the resulting\nHTML header level.\n\nBlockquotes are indicated using email-style '`>`' angle brackets.\n\nMarkdown:\n\n    A First Level Header\n    ====================\n    \n    A Second Level Header\n    ---------------------\n\n    Now is the time for all good men to come to\n    the aid of their country. This is just a\n    regular paragraph.\n\n    The quick brown fox jumped over the lazy\n    dog's back.\n    \n    ### Header 3\n\n    > This is a blockquote.\n    > \n    > This is the second paragraph in the blockquote.\n    >\n    > ## This is an H2 in a blockquote\n\n\nOutput:\n\n    <h1>A First Level Header</h1>\n    \n    <h2>A Second Level Header</h2>\n    \n    <p>Now is the time for all good men to come to\n    the aid of their country. This is just a\n    regular paragraph.</p>\n    \n    <p>The quick brown fox jumped over the lazy\n    dog's back.</p>\n    \n    <h3>Header 3</h3>\n    \n    <blockquote>\n        <p>This is a blockquote.</p>\n        \n        <p>This is the second paragraph in the blockquote.</p>\n        \n        <h2>This is an H2 in a blockquote</h2>\n    </blockquote>\n\n\n\n### Phrase Emphasis ###\n\nMarkdown uses asterisks and underscores to indicate spans of emphasis.\n\nMarkdown:\n\n    Some of these words *are emphasized*.\n    Some of these words _are emphasized also_.\n    \n    Use two asterisks for **strong emphasis**.\n    Or, if you prefer, __use two underscores instead__.\n\nOutput:\n\n    <p>Some of these words <em>are emphasized</em>.\n    Some of these words <em>are emphasized also</em>.</p>\n    \n    <p>Use two asterisks for <strong>strong emphasis</strong>.\n    Or, if you prefer, <strong>use two underscores instead</strong>.</p>\n   \n\n\n## Lists ##\n\nUnordered (bulleted) lists use asterisks, pluses, and hyphens (`*`,\n`+`, and `-`) as list markers. These three markers are\ninterchangable; this:\n\n    *   Candy.\n    *   Gum.\n    *   Booze.\n\nthis:\n\n    +   Candy.\n    +   Gum.\n    +   Booze.\n\nand this:\n\n    -   Candy.\n    -   Gum.\n    -   Booze.\n\nall produce the same output:\n\n    <ul>\n    <li>Candy.</li>\n    <li>Gum.</li>\n    <li>Booze.</li>\n    </ul>\n\nOrdered (numbered) lists use regular numbers, followed by periods, as\nlist markers:\n\n    1.  Red\n    2.  Green\n    3.  Blue\n\nOutput:\n\n    <ol>\n    <li>Red</li>\n    <li>Green</li>\n    <li>Blue</li>\n    </ol>\n\nIf you put blank lines between items, you'll get `<p>` tags for the\nlist item text. You can create multi-paragraph list items by indenting\nthe paragraphs by 4 spaces or 1 tab:\n\n    *   A list item.\n    \n        With multiple paragraphs.\n\n    *   Another item in the list.\n\nOutput:\n\n    <ul>\n    <li><p>A list item.</p>\n    <p>With multiple paragraphs.</p></li>\n    <li><p>Another item in the list.</p></li>\n    </ul>\n    \n\n\n### Links ###\n\nMarkdown supports two styles for creating links: *inline* and\n*reference*. With both styles, you use square brackets to delimit the\ntext you want to turn into a link.\n\nInline-style links use parentheses immediately after the link text.\nFor example:\n\n    This is an [example link](http://example.com/).\n\nOutput:\n\n    <p>This is an <a href=\"http://example.com/\">\n    example link</a>.</p>\n\nOptionally, you may include a title attribute in the parentheses:\n\n    This is an [example link](http://example.com/ \"With a Title\").\n\nOutput:\n\n    <p>This is an <a href=\"http://example.com/\" title=\"With a Title\">\n    example link</a>.</p>\n\nReference-style links allow you to refer to your links by names, which\nyou define elsewhere in your document:\n\n    I get 10 times more traffic from [Google][1] than from\n    [Yahoo][2] or [MSN][3].\n\n    [1]: http://google.com/        \"Google\"\n    [2]: http://search.yahoo.com/  \"Yahoo Search\"\n    [3]: http://search.msn.com/    \"MSN Search\"\n\nOutput:\n\n    <p>I get 10 times more traffic from <a href=\"http://google.com/\"\n    title=\"Google\">Google</a> than from <a href=\"http://search.yahoo.com/\"\n    title=\"Yahoo Search\">Yahoo</a> or <a href=\"http://search.msn.com/\"\n    title=\"MSN Search\">MSN</a>.</p>\n\nThe title attribute is optional. Link names may contain letters,\nnumbers and spaces, but are *not* case sensitive:\n\n    I start my morning with a cup of coffee and\n    [The New York Times][NY Times].\n\n    [ny times]: http://www.nytimes.com/\n\nOutput:\n\n    <p>I start my morning with a cup of coffee and\n    <a href=\"http://www.nytimes.com/\">The New York Times</a>.</p>\n\n\n### Images ###\n\nImage syntax is very much like link syntax.\n\nInline (titles are optional):\n\n    ![alt text](/path/to/img.jpg \"Title\")\n\nReference-style:\n\n    ![alt text][id]\n\n    [id]: /path/to/img.jpg \"Title\"\n\nBoth of the above examples produce the same output:\n\n    <img src=\"/path/to/img.jpg\" alt=\"alt text\" title=\"Title\" />\n\n\n\n### Code ###\n\nIn a regular paragraph, you can create code span by wrapping text in\nbacktick quotes. Any ampersands (`&`) and angle brackets (`<` or\n`>`) will automatically be translated into HTML entities. This makes\nit easy to use Markdown to write about HTML example code:\n\n    I strongly recommend against using any `<blink>` tags.\n\n    I wish SmartyPants used named entities like `&mdash;`\n    instead of decimal-encoded entites like `&#8212;`.\n\nOutput:\n\n    <p>I strongly recommend against using any\n    <code>&lt;blink&gt;</code> tags.</p>\n    \n    <p>I wish SmartyPants used named entities like\n    <code>&amp;mdash;</code> instead of decimal-encoded\n    entites like <code>&amp;#8212;</code>.</p>\n\n\nTo specify an entire block of pre-formatted code, indent every line of\nthe block by 4 spaces or 1 tab. Just like with code spans, `&`, `<`,\nand `>` characters will be escaped automatically.\n\nMarkdown:\n\n    If you want your page to validate under XHTML 1.0 Strict,\n    you've got to put paragraph tags in your blockquotes:\n\n        <blockquote>\n            <p>For example.</p>\n        </blockquote>\n\nOutput:\n\n    <p>If you want your page to validate under XHTML 1.0 Strict,\n    you've got to put paragraph tags in your blockquotes:</p>\n    \n    <pre><code>&lt;blockquote&gt;\n        &lt;p&gt;For example.&lt;/p&gt;\n    &lt;/blockquote&gt;\n    </code></pre>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Markdown_Documentation_-_Basics.xhtml",
    "content": "<h1>Markdown: Basics</h1>\n\n<ul id=\"ProjectSubmenu\">\n    <li><a href=\"/projects/markdown/\" title=\"Markdown Project Page\">Main</a></li>\n    <li><a class=\"selected\" title=\"Markdown Basics\">Basics</a></li>\n    <li><a href=\"/projects/markdown/syntax\" title=\"Markdown Syntax Documentation\">Syntax</a></li>\n    <li><a href=\"/projects/markdown/license\" title=\"Pricing and License Information\">License</a></li>\n    <li><a href=\"/projects/markdown/dingus\" title=\"Online Markdown Web Form\">Dingus</a></li>\n</ul>\n\n<h2>Getting the Gist of Markdown's Formatting Syntax</h2>\n\n<p>This page offers a brief overview of what it's like to use Markdown.\nThe <a href=\"/projects/markdown/syntax\" title=\"Markdown Syntax\">syntax page</a> provides complete, detailed documentation for\nevery feature, but Markdown should be very easy to pick up simply by\nlooking at a few examples of it in action. The examples on this page\nare written in a before/after style, showing example syntax and the\nHTML output produced by Markdown.</p>\n\n<p>It's also helpful to simply try Markdown out; the <a href=\"/projects/markdown/dingus\" title=\"Markdown Dingus\">Dingus</a> is a\nweb application that allows you type your own Markdown-formatted text\nand translate it to XHTML.</p>\n\n<p><strong>Note:</strong> This document is itself written using Markdown; you\ncan <a href=\"/projects/markdown/basics.text\">see the source for it by adding '.text' to the URL</a>.</p>\n\n<h2>Paragraphs, Headers, Blockquotes</h2>\n\n<p>A paragraph is simply one or more consecutive lines of text, separated\nby one or more blank lines. (A blank line is any line that looks like a\nblank line -- a line containing nothing spaces or tabs is considered\nblank.) Normal paragraphs should not be intended with spaces or tabs.</p>\n\n<p>Markdown offers two styles of headers: <em>Setext</em> and <em>atx</em>.\nSetext-style headers for <code>&lt;h1&gt;</code> and <code>&lt;h2&gt;</code> are created by\n\"underlining\" with equal signs (<code>=</code>) and hyphens (<code>-</code>), respectively.\nTo create an atx-style header, you put 1-6 hash marks (<code>#</code>) at the\nbeginning of the line -- the number of hashes equals the resulting\nHTML header level.</p>\n\n<p>Blockquotes are indicated using email-style '<code>&gt;</code>' angle brackets.</p>\n\n<p>Markdown:</p>\n\n<pre><code>A First Level Header\n====================\n\nA Second Level Header\n---------------------\n\nNow is the time for all good men to come to\nthe aid of their country. This is just a\nregular paragraph.\n\nThe quick brown fox jumped over the lazy\ndog's back.\n\n### Header 3\n\n&gt; This is a blockquote.\n&gt; \n&gt; This is the second paragraph in the blockquote.\n&gt;\n&gt; ## This is an H2 in a blockquote\n</code></pre>\n\n<p>Output:</p>\n\n<pre><code>&lt;h1&gt;A First Level Header&lt;/h1&gt;\n\n&lt;h2&gt;A Second Level Header&lt;/h2&gt;\n\n&lt;p&gt;Now is the time for all good men to come to\nthe aid of their country. This is just a\nregular paragraph.&lt;/p&gt;\n\n&lt;p&gt;The quick brown fox jumped over the lazy\ndog's back.&lt;/p&gt;\n\n&lt;h3&gt;Header 3&lt;/h3&gt;\n\n&lt;blockquote&gt;\n    &lt;p&gt;This is a blockquote.&lt;/p&gt;\n\n    &lt;p&gt;This is the second paragraph in the blockquote.&lt;/p&gt;\n\n    &lt;h2&gt;This is an H2 in a blockquote&lt;/h2&gt;\n&lt;/blockquote&gt;\n</code></pre>\n\n<h3>Phrase Emphasis</h3>\n\n<p>Markdown uses asterisks and underscores to indicate spans of emphasis.</p>\n\n<p>Markdown:</p>\n\n<pre><code>Some of these words *are emphasized*.\nSome of these words _are emphasized also_.\n\nUse two asterisks for **strong emphasis**.\nOr, if you prefer, __use two underscores instead__.\n</code></pre>\n\n<p>Output:</p>\n\n<pre><code>&lt;p&gt;Some of these words &lt;em&gt;are emphasized&lt;/em&gt;.\nSome of these words &lt;em&gt;are emphasized also&lt;/em&gt;.&lt;/p&gt;\n\n&lt;p&gt;Use two asterisks for &lt;strong&gt;strong emphasis&lt;/strong&gt;.\nOr, if you prefer, &lt;strong&gt;use two underscores instead&lt;/strong&gt;.&lt;/p&gt;\n</code></pre>\n\n<h2>Lists</h2>\n\n<p>Unordered (bulleted) lists use asterisks, pluses, and hyphens (<code>*</code>,\n<code>+</code>, and <code>-</code>) as list markers. These three markers are\ninterchangable; this:</p>\n\n<pre><code>*   Candy.\n*   Gum.\n*   Booze.\n</code></pre>\n\n<p>this:</p>\n\n<pre><code>+   Candy.\n+   Gum.\n+   Booze.\n</code></pre>\n\n<p>and this:</p>\n\n<pre><code>-   Candy.\n-   Gum.\n-   Booze.\n</code></pre>\n\n<p>all produce the same output:</p>\n\n<pre><code>&lt;ul&gt;\n&lt;li&gt;Candy.&lt;/li&gt;\n&lt;li&gt;Gum.&lt;/li&gt;\n&lt;li&gt;Booze.&lt;/li&gt;\n&lt;/ul&gt;\n</code></pre>\n\n<p>Ordered (numbered) lists use regular numbers, followed by periods, as\nlist markers:</p>\n\n<pre><code>1.  Red\n2.  Green\n3.  Blue\n</code></pre>\n\n<p>Output:</p>\n\n<pre><code>&lt;ol&gt;\n&lt;li&gt;Red&lt;/li&gt;\n&lt;li&gt;Green&lt;/li&gt;\n&lt;li&gt;Blue&lt;/li&gt;\n&lt;/ol&gt;\n</code></pre>\n\n<p>If you put blank lines between items, you'll get <code>&lt;p&gt;</code> tags for the\nlist item text. You can create multi-paragraph list items by indenting\nthe paragraphs by 4 spaces or 1 tab:</p>\n\n<pre><code>*   A list item.\n\n    With multiple paragraphs.\n\n*   Another item in the list.\n</code></pre>\n\n<p>Output:</p>\n\n<pre><code>&lt;ul&gt;\n&lt;li&gt;&lt;p&gt;A list item.&lt;/p&gt;\n&lt;p&gt;With multiple paragraphs.&lt;/p&gt;&lt;/li&gt;\n&lt;li&gt;&lt;p&gt;Another item in the list.&lt;/p&gt;&lt;/li&gt;\n&lt;/ul&gt;\n</code></pre>\n\n<h3>Links</h3>\n\n<p>Markdown supports two styles for creating links: <em>inline</em> and\n<em>reference</em>. With both styles, you use square brackets to delimit the\ntext you want to turn into a link.</p>\n\n<p>Inline-style links use parentheses immediately after the link text.\nFor example:</p>\n\n<pre><code>This is an [example link](http://example.com/).\n</code></pre>\n\n<p>Output:</p>\n\n<pre><code>&lt;p&gt;This is an &lt;a href=\"http://example.com/\"&gt;\nexample link&lt;/a&gt;.&lt;/p&gt;\n</code></pre>\n\n<p>Optionally, you may include a title attribute in the parentheses:</p>\n\n<pre><code>This is an [example link](http://example.com/ \"With a Title\").\n</code></pre>\n\n<p>Output:</p>\n\n<pre><code>&lt;p&gt;This is an &lt;a href=\"http://example.com/\" title=\"With a Title\"&gt;\nexample link&lt;/a&gt;.&lt;/p&gt;\n</code></pre>\n\n<p>Reference-style links allow you to refer to your links by names, which\nyou define elsewhere in your document:</p>\n\n<pre><code>I get 10 times more traffic from [Google][1] than from\n[Yahoo][2] or [MSN][3].\n\n[1]: http://google.com/        \"Google\"\n[2]: http://search.yahoo.com/  \"Yahoo Search\"\n[3]: http://search.msn.com/    \"MSN Search\"\n</code></pre>\n\n<p>Output:</p>\n\n<pre><code>&lt;p&gt;I get 10 times more traffic from &lt;a href=\"http://google.com/\"\ntitle=\"Google\"&gt;Google&lt;/a&gt; than from &lt;a href=\"http://search.yahoo.com/\"\ntitle=\"Yahoo Search\"&gt;Yahoo&lt;/a&gt; or &lt;a href=\"http://search.msn.com/\"\ntitle=\"MSN Search\"&gt;MSN&lt;/a&gt;.&lt;/p&gt;\n</code></pre>\n\n<p>The title attribute is optional. Link names may contain letters,\nnumbers and spaces, but are <em>not</em> case sensitive:</p>\n\n<pre><code>I start my morning with a cup of coffee and\n[The New York Times][NY Times].\n\n[ny times]: http://www.nytimes.com/\n</code></pre>\n\n<p>Output:</p>\n\n<pre><code>&lt;p&gt;I start my morning with a cup of coffee and\n&lt;a href=\"http://www.nytimes.com/\"&gt;The New York Times&lt;/a&gt;.&lt;/p&gt;\n</code></pre>\n\n<h3>Images</h3>\n\n<p>Image syntax is very much like link syntax.</p>\n\n<p>Inline (titles are optional):</p>\n\n<pre><code>![alt text](/path/to/img.jpg \"Title\")\n</code></pre>\n\n<p>Reference-style:</p>\n\n<pre><code>![alt text][id]\n\n[id]: /path/to/img.jpg \"Title\"\n</code></pre>\n\n<p>Both of the above examples produce the same output:</p>\n\n<pre><code>&lt;img src=\"/path/to/img.jpg\" alt=\"alt text\" title=\"Title\" /&gt;\n</code></pre>\n\n<h3>Code</h3>\n\n<p>In a regular paragraph, you can create code span by wrapping text in\nbacktick quotes. Any ampersands (<code>&amp;</code>) and angle brackets (<code>&lt;</code> or\n<code>&gt;</code>) will automatically be translated into HTML entities. This makes\nit easy to use Markdown to write about HTML example code:</p>\n\n<pre><code>I strongly recommend against using any `&lt;blink&gt;` tags.\n\nI wish SmartyPants used named entities like `&amp;mdash;`\ninstead of decimal-encoded entites like `&amp;#8212;`.\n</code></pre>\n\n<p>Output:</p>\n\n<pre><code>&lt;p&gt;I strongly recommend against using any\n&lt;code&gt;&amp;lt;blink&amp;gt;&lt;/code&gt; tags.&lt;/p&gt;\n\n&lt;p&gt;I wish SmartyPants used named entities like\n&lt;code&gt;&amp;amp;mdash;&lt;/code&gt; instead of decimal-encoded\nentites like &lt;code&gt;&amp;amp;#8212;&lt;/code&gt;.&lt;/p&gt;\n</code></pre>\n\n<p>To specify an entire block of pre-formatted code, indent every line of\nthe block by 4 spaces or 1 tab. Just like with code spans, <code>&amp;</code>, <code>&lt;</code>,\nand <code>&gt;</code> characters will be escaped automatically.</p>\n\n<p>Markdown:</p>\n\n<pre><code>If you want your page to validate under XHTML 1.0 Strict,\nyou've got to put paragraph tags in your blockquotes:\n\n    &lt;blockquote&gt;\n        &lt;p&gt;For example.&lt;/p&gt;\n    &lt;/blockquote&gt;\n</code></pre>\n\n<p>Output:</p>\n\n<pre><code>&lt;p&gt;If you want your page to validate under XHTML 1.0 Strict,\nyou've got to put paragraph tags in your blockquotes:&lt;/p&gt;\n\n&lt;pre&gt;&lt;code&gt;&amp;lt;blockquote&amp;gt;\n    &amp;lt;p&amp;gt;For example.&amp;lt;/p&amp;gt;\n&amp;lt;/blockquote&amp;gt;\n&lt;/code&gt;&lt;/pre&gt;\n</code></pre>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Markdown_Documentation_-_Syntax.json",
    "content": "[\"html\", [\"h1\", \"Markdown: Syntax\"], \"\\u000a\\u000a\", [\"ul\", {\n    \"id\": \"ProjectSubmenu\"\n},\n[\"li\", [\"a\", {\n    \"href\": \"/projects/markdown/\",\n    \"title\": \"Markdown Project Page\"\n},\n\"Main\"]],\n    [\"li\", [\"a\", {\n        \"href\": \"/projects/markdown/basics\",\n        \"title\": \"Markdown Basics\"\n    },\n    \"Basics\"]],\n    [\"li\", [\"a\", {\n        \"class\": \"selected\",\n        \"title\": \"Markdown Syntax Documentation\"\n    },\n    \"Syntax\"]],\n    [\"li\", [\"a\", {\n        \"href\": \"/projects/markdown/license\",\n        \"title\": \"Pricing and License Information\"\n    },\n    \"License\"]],\n    [\"li\", [\"a\", {\n        \"href\": \"/projects/markdown/dingus\",\n        \"title\": \"Online Markdown Web Form\"\n    },\n    \"Dingus\"]]],\n    [\"ul\", [\"li\", [\"a\", {\n        \"href\": \"#overview\"\n    },\n    \"Overview\"], \"\\u000a\", [\"ul\", [\"li\", [\"a\", {\n        \"href\": \"#philosophy\"\n    },\n    \"Philosophy\"]],\n        [\"li\", [\"a\", {\n            \"href\": \"#html\"\n        },\n        \"Inline HTML\"]],\n        [\"li\", [\"a\", {\n            \"href\": \"#autoescape\"\n        },\n        \"Automatic Escaping for Special Characters\"]]]],\n        [\"li\", [\"a\", {\n            \"href\": \"#block\"\n        },\n        \"Block Elements\"], \"\\u000a\", [\"ul\", [\"li\", [\"a\", {\n            \"href\": \"#p\"\n        },\n        \"Paragraphs and Line Breaks\"]],\n            [\"li\", [\"a\", {\n                \"href\": \"#header\"\n            },\n            \"Headers\"]],\n            [\"li\", [\"a\", {\n                \"href\": \"#blockquote\"\n            },\n            \"Blockquotes\"]],\n            [\"li\", [\"a\", {\n                \"href\": \"#list\"\n            },\n            \"Lists\"]],\n            [\"li\", [\"a\", {\n                \"href\": \"#precode\"\n            },\n            \"Code Blocks\"]],\n            [\"li\", [\"a\", {\n                \"href\": \"#hr\"\n            },\n            \"Horizontal Rules\"]]]],\n        [\"li\", [\"a\", {\n            \"href\": \"#span\"\n        },\n        \"Span Elements\"], \"\\u000a\", [\"ul\", [\"li\", [\"a\", {\n            \"href\": \"#link\"\n        },\n        \"Links\"]],\n            [\"li\", [\"a\", {\n                \"href\": \"#em\"\n            },\n            \"Emphasis\"]],\n            [\"li\", [\"a\", {\n                \"href\": \"#code\"\n            },\n            \"Code\"]],\n            [\"li\", [\"a\", {\n                \"href\": \"#img\"\n            },\n            \"Images\"]]]],\n        [\"li\", [\"a\", {\n            \"href\": \"#misc\"\n        },\n        \"Miscellaneous\"], \"\\u000a\", [\"ul\", [\"li\", [\"a\", {\n            \"href\": \"#backslash\"\n        },\n        \"Backslash Escapes\"]],\n            [\"li\", [\"a\", {\n                \"href\": \"#autolink\"\n            },\n            \"Automatic Links\"]]]]],\n    [\"p\", [\"strong\", \"Note:\"], \" This document is itself written using Markdown; you\\u000acan \", [\"a\", {\n        \"href\": \"/projects/markdown/syntax.text\"\n    },\n    \"see the source for it by adding '.text' to the URL\"], \".\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"h2\", {\n    \"id\": \"overview\"\n},\n\"Overview\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"philosophy\"\n},\n\"Philosophy\"], \"\\u000a\\u000a\", [\"p\", \"Markdown is intended to be as easy-to-read and easy-to-write as is feasible.\"],\n    [\"p\", \"Readability, however, is emphasized above all else. A Markdown-formatted\\u000adocument should be publishable as-is, as plain text, without looking\\u000alike it's been marked up with tags or formatting instructions. While\\u000aMarkdown's syntax has been influenced by several existing text-to-HTML\\u000afilters -- including \", [\"a\", {\n        \"href\": \"http://docutils.sourceforge.net/mirror/setext.html\"\n    },\n    \"Setext\"], \", \", [\"a\", {\n        \"href\": \"http://www.aaronsw.com/2002/atx/\"\n    },\n    \"atx\"], \", \", [\"a\", {\n        \"href\": \"http://textism.com/tools/textile/\"\n    },\n    \"Textile\"], \", \", [\"a\", {\n        \"href\": \"http://docutils.sourceforge.net/rst.html\"\n    },\n    \"reStructuredText\"], \",\\u000a\", [\"a\", {\n        \"href\": \"http://www.triptico.com/software/grutatxt.html\"\n    },\n    \"Grutatext\"], \", and \", [\"a\", {\n        \"href\": \"http://ettext.taint.org/doc/\"\n    },\n    \"EtText\"], \" -- the single biggest source of\\u000ainspiration for Markdown's syntax is the format of plain text email.\"],\n    [\"p\", \"To this end, Markdown's syntax is comprised entirely of punctuation\\u000acharacters, which punctuation characters have been carefully chosen so\\u000aas to look like what they mean. E.g., asterisks around a word actually\\u000alook like *emphasis*. Markdown lists look like, well, lists. Even\\u000ablockquotes look like quoted passages of text, assuming you've ever\\u000aused email.\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"html\"\n},\n\"Inline HTML\"], \"\\u000a\\u000a\", [\"p\", \"Markdown's syntax is intended for one purpose: to be used as a\\u000aformat for \", [\"em\", \"writing\"], \" for the web.\"],\n    [\"p\", \"Markdown is not a replacement for HTML, or even close to it. Its\\u000asyntax is very small, corresponding only to a very small subset of\\u000aHTML tags. The idea is \", [\"em\", \"not\"], \" to create a syntax that makes it easier\\u000ato insert HTML tags. In my opinion, HTML tags are already easy to\\u000ainsert. The idea for Markdown is to make it easy to read, write, and\\u000aedit prose. HTML is a \", [\"em\", \"publishing\"], \" format; Markdown is a \", [\"em\", \"writing\"], \"\\u000aformat. Thus, Markdown's formatting syntax only addresses issues that\\u000acan be conveyed in plain text.\"],\n    [\"p\", \"For any markup that is not covered by Markdown's syntax, you simply\\u000ause HTML itself. There's no need to preface it or delimit it to\\u000aindicate that you're switching from Markdown to HTML; you just use\\u000athe tags.\"],\n    [\"p\", \"The only restrictions are that block-level HTML elements -- e.g. \", [\"code\", \"<div>\"], \",\\u000a\", [\"code\", \"<table>\"], \", \", [\"code\", \"<pre>\"], \", \", [\"code\", \"<p>\"], \", etc. -- must be separated from surrounding\\u000acontent by blank lines, and the start and end tags of the block should\\u000anot be indented with tabs or spaces. Markdown is smart enough not\\u000ato add extra (unwanted) \", [\"code\", \"<p>\"], \" tags around HTML block-level tags.\"],\n    [\"p\", \"For example, to add an HTML table to a Markdown article:\"],\n    [\"pre\", [\"code\", \"This is a regular paragraph.\\u000a\\u000a<table>\\u000a    <tr>\\u000a        <td>Foo</td>\\u000a    </tr>\\u000a</table>\\u000a\\u000aThis is another regular paragraph.\\u000a\"]],\n    [\"p\", \"Note that Markdown formatting syntax is not processed within block-level\\u000aHTML tags. E.g., you can't use Markdown-style \", [\"code\", \"*emphasis*\"], \" inside an\\u000aHTML block.\"],\n    [\"p\", \"Span-level HTML tags -- e.g. \", [\"code\", \"<span>\"], \", \", [\"code\", \"<cite>\"], \", or \", [\"code\", \"<del>\"], \" -- can be\\u000aused anywhere in a Markdown paragraph, list item, or header. If you\\u000awant, you can even use HTML tags instead of Markdown formatting; e.g. if\\u000ayou'd prefer to use HTML \", [\"code\", \"<a>\"], \" or \", [\"code\", \"<img>\"], \" tags instead of Markdown's\\u000alink or image syntax, go right ahead.\"],\n    [\"p\", \"Unlike block-level HTML tags, Markdown syntax \", [\"em\", \"is\"], \" processed within\\u000aspan-level tags.\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"autoescape\"\n},\n\"Automatic Escaping for Special Characters\"], \"\\u000a\\u000a\", [\"p\", \"In HTML, there are two characters that demand special treatment: \", [\"code\", \"<\"], \"\\u000aand \", [\"code\", \"&\"], \". Left angle brackets are used to start tags; ampersands are\\u000aused to denote HTML entities. If you want to use them as literal\\u000acharacters, you must escape them as entities, e.g. \", [\"code\", \"&lt;\"], \", and\\u000a\", [\"code\", \"&amp;\"], \".\"],\n    [\"p\", \"Ampersands in particular are bedeviling for web writers. If you want to\\u000awrite about 'AT&T', you need to write '\", [\"code\", \"AT&amp;T\"], \"'. You even need to\\u000aescape ampersands within URLs. Thus, if you want to link to:\"],\n    [\"pre\", [\"code\", \"http://images.google.com/images?num=30&q=larry+bird\\u000a\"]],\n    [\"p\", \"you need to encode the URL as:\"],\n    [\"pre\", [\"code\", \"http://images.google.com/images?num=30&amp;q=larry+bird\\u000a\"]],\n    [\"p\", \"in your anchor tag \", [\"code\", \"href\"], \" attribute. Needless to say, this is easy to\\u000aforget, and is probably the single most common source of HTML validation\\u000aerrors in otherwise well-marked-up web sites.\"],\n    [\"p\", \"Markdown allows you to use these characters naturally, taking care of\\u000aall the necessary escaping for you. If you use an ampersand as part of\\u000aan HTML entity, it remains unchanged; otherwise it will be translated\\u000ainto \", [\"code\", \"&amp;\"], \".\"],\n    [\"p\", \"So, if you want to include a copyright symbol in your article, you can write:\"],\n    [\"pre\", [\"code\", \"&copy;\\u000a\"]],\n    [\"p\", \"and Markdown will leave it alone. But if you write:\"],\n    [\"pre\", [\"code\", \"AT&T\\u000a\"]],\n    [\"p\", \"Markdown will translate it to:\"],\n    [\"pre\", [\"code\", \"AT&amp;T\\u000a\"]],\n    [\"p\", \"Similarly, because Markdown supports \", [\"a\", {\n        \"href\": \"#html\"\n    },\n    \"inline HTML\"], \", if you use\\u000aangle brackets as delimiters for HTML tags, Markdown will treat them as\\u000asuch. But if you write:\"],\n    [\"pre\", [\"code\", \"4 < 5\\u000a\"]],\n    [\"p\", \"Markdown will translate it to:\"],\n    [\"pre\", [\"code\", \"4 &lt; 5\\u000a\"]],\n    [\"p\", \"However, inside Markdown code spans and blocks, angle brackets and\\u000aampersands are \", [\"em\", \"always\"], \" encoded automatically. This makes it easy to use\\u000aMarkdown to write about HTML code. (As opposed to raw HTML, which is a\\u000aterrible format for writing about HTML syntax, because every single \", [\"code\", \"<\"], \"\\u000aand \", [\"code\", \"&\"], \" in your example code needs to be escaped.)\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"h2\", {\n    \"id\": \"block\"\n},\n\"Block Elements\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"p\"\n},\n\"Paragraphs and Line Breaks\"], \"\\u000a\\u000a\", [\"p\", \"A paragraph is simply one or more consecutive lines of text, separated\\u000aby one or more blank lines. (A blank line is any line that looks like a\\u000ablank line -- a line containing nothing but spaces or tabs is considered\\u000ablank.) Normal paragraphs should not be intended with spaces or tabs.\"],\n    [\"p\", \"The implication of the \\\"one or more consecutive lines of text\\\" rule is\\u000athat Markdown supports \\\"hard-wrapped\\\" text paragraphs. This differs\\u000asignificantly from most other text-to-HTML formatters (including Movable\\u000aType's \\\"Convert Line Breaks\\\" option) which translate every line break\\u000acharacter in a paragraph into a \", [\"code\", \"<br />\"], \" tag.\"],\n    [\"p\", \"When you \", [\"em\", \"do\"], \" want to insert a \", [\"code\", \"<br />\"], \" break tag using Markdown, you\\u000aend a line with two or more spaces, then type return.\"],\n    [\"p\", \"Yes, this takes a tad more effort to create a \", [\"code\", \"<br />\"], \", but a simplistic\\u000a\\\"every line break is a \", [\"code\", \"<br />\"], \"\\\" rule wouldn't work for Markdown.\\u000aMarkdown's email-style \", [\"a\", {\n        \"href\": \"#blockquote\"\n    },\n    \"blockquoting\"], \" and multi-paragraph \", [\"a\", {\n        \"href\": \"#list\"\n    },\n    \"list items\"], \"\\u000awork best -- and look better -- when you format them with hard breaks.\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"header\"\n},\n\"Headers\"], \"\\u000a\\u000a\", [\"p\", \"Markdown supports two styles of headers, \", [\"a\", {\n    \"href\": \"http://docutils.sourceforge.net/mirror/setext.html\"\n},\n\"Setext\"], \" and \", [\"a\", {\n    \"href\": \"http://www.aaronsw.com/2002/atx/\"\n},\n\"atx\"], \".\"],\n    [\"p\", \"Setext-style headers are \\\"underlined\\\" using equal signs (for first-level\\u000aheaders) and dashes (for second-level headers). For example:\"],\n    [\"pre\", [\"code\", \"This is an H1\\u000a=============\\u000a\\u000aThis is an H2\\u000a-------------\\u000a\"]],\n    [\"p\", \"Any number of underlining \", [\"code\", \"=\"], \"'s or \", [\"code\", \"-\"], \"'s will work.\"],\n    [\"p\", \"Atx-style headers use 1-6 hash characters at the start of the line,\\u000acorresponding to header levels 1-6. For example:\"],\n    [\"pre\", [\"code\", \"# This is an H1\\u000a\\u000a## This is an H2\\u000a\\u000a###### This is an H6\\u000a\"]],\n    [\"p\", \"Optionally, you may \\\"close\\\" atx-style headers. This is purely\\u000acosmetic -- you can use this if you think it looks better. The\\u000aclosing hashes don't even need to match the number of hashes\\u000aused to open the header. (The number of opening hashes\\u000adetermines the header level.) :\"],\n    [\"pre\", [\"code\", \"# This is an H1 #\\u000a\\u000a## This is an H2 ##\\u000a\\u000a### This is an H3 ######\\u000a\"]], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"blockquote\"\n},\n\"Blockquotes\"], \"\\u000a\\u000a\", [\"p\", \"Markdown uses email-style \", [\"code\", \">\"], \" characters for blockquoting. If you're\\u000afamiliar with quoting passages of text in an email message, then you\\u000aknow how to create a blockquote in Markdown. It looks best if you hard\\u000awrap the text and put a \", [\"code\", \">\"], \" before every line:\"],\n    [\"pre\", [\"code\", \"> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,\\u000a> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.\\u000a> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.\\u000a> \\u000a> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse\\u000a> id sem consectetuer libero luctus adipiscing.\\u000a\"]],\n    [\"p\", \"Markdown allows you to be lazy and only put the \", [\"code\", \">\"], \" before the first\\u000aline of a hard-wrapped paragraph:\"],\n    [\"pre\", [\"code\", \"> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,\\u000aconsectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.\\u000aVestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.\\u000a\\u000a> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse\\u000aid sem consectetuer libero luctus adipiscing.\\u000a\"]],\n    [\"p\", \"Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by\\u000aadding additional levels of \", [\"code\", \">\"], \":\"],\n    [\"pre\", [\"code\", \"> This is the first level of quoting.\\u000a>\\u000a> > This is nested blockquote.\\u000a>\\u000a> Back to the first level.\\u000a\"]],\n    [\"p\", \"Blockquotes can contain other Markdown elements, including headers, lists,\\u000aand code blocks:\"],\n    [\"pre\", [\"code\", \"> ## This is a header.\\u000a> \\u000a> 1.   This is the first list item.\\u000a> 2.   This is the second list item.\\u000a> \\u000a> Here's some example code:\\u000a> \\u000a>     return shell_exec(\\\"echo $input | $markdown_script\\\");\\u000a\"]],\n    [\"p\", \"Any decent text editor should make email-style quoting easy. For\\u000aexample, with BBEdit, you can make a selection and choose Increase\\u000aQuote Level from the Text menu.\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"list\"\n},\n\"Lists\"], \"\\u000a\\u000a\", [\"p\", \"Markdown supports ordered (numbered) and unordered (bulleted) lists.\"],\n    [\"p\", \"Unordered lists use asterisks, pluses, and hyphens -- interchangably\\u000a-- as list markers:\"],\n    [\"pre\", [\"code\", \"*   Red\\u000a*   Green\\u000a*   Blue\\u000a\"]],\n    [\"p\", \"is equivalent to:\"],\n    [\"pre\", [\"code\", \"+   Red\\u000a+   Green\\u000a+   Blue\\u000a\"]],\n    [\"p\", \"and:\"],\n    [\"pre\", [\"code\", \"-   Red\\u000a-   Green\\u000a-   Blue\\u000a\"]],\n    [\"p\", \"Ordered lists use numbers followed by periods:\"],\n    [\"pre\", [\"code\", \"1.  Bird\\u000a2.  McHale\\u000a3.  Parish\\u000a\"]],\n    [\"p\", \"It's important to note that the actual numbers you use to mark the\\u000alist have no effect on the HTML output Markdown produces. The HTML\\u000aMarkdown produces from the above list is:\"],\n    [\"pre\", [\"code\", \"<ol>\\u000a<li>Bird</li>\\u000a<li>McHale</li>\\u000a<li>Parish</li>\\u000a</ol>\\u000a\"]],\n    [\"p\", \"If you instead wrote the list in Markdown like this:\"],\n    [\"pre\", [\"code\", \"1.  Bird\\u000a1.  McHale\\u000a1.  Parish\\u000a\"]],\n    [\"p\", \"or even:\"],\n    [\"pre\", [\"code\", \"3. Bird\\u000a1. McHale\\u000a8. Parish\\u000a\"]],\n    [\"p\", \"you'd get the exact same HTML output. The point is, if you want to,\\u000ayou can use ordinal numbers in your ordered Markdown lists, so that\\u000athe numbers in your source match the numbers in your published HTML.\\u000aBut if you want to be lazy, you don't have to.\"],\n    [\"p\", \"If you do use lazy list numbering, however, you should still start the\\u000alist with the number 1. At some point in the future, Markdown may support\\u000astarting ordered lists at an arbitrary number.\"],\n    [\"p\", \"List markers typically start at the left margin, but may be indented by\\u000aup to three spaces. List markers must be followed by one or more spaces\\u000aor a tab.\"],\n    [\"p\", \"To make lists look nice, you can wrap items with hanging indents:\"],\n    [\"pre\", [\"code\", \"*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\\u000a    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,\\u000a    viverra nec, fringilla in, laoreet vitae, risus.\\u000a*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\\u000a    Suspendisse id sem consectetuer libero luctus adipiscing.\\u000a\"]],\n    [\"p\", \"But if you want to be lazy, you don't have to:\"],\n    [\"pre\", [\"code\", \"*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\\u000aAliquam hendrerit mi posuere lectus. Vestibulum enim wisi,\\u000aviverra nec, fringilla in, laoreet vitae, risus.\\u000a*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\\u000aSuspendisse id sem consectetuer libero luctus adipiscing.\\u000a\"]],\n    [\"p\", \"If list items are separated by blank lines, Markdown will wrap the\\u000aitems in \", [\"code\", \"<p>\"], \" tags in the HTML output. For example, this input:\"],\n    [\"pre\", [\"code\", \"*   Bird\\u000a*   Magic\\u000a\"]],\n    [\"p\", \"will turn into:\"],\n    [\"pre\", [\"code\", \"<ul>\\u000a<li>Bird</li>\\u000a<li>Magic</li>\\u000a</ul>\\u000a\"]],\n    [\"p\", \"But this:\"],\n    [\"pre\", [\"code\", \"*   Bird\\u000a\\u000a*   Magic\\u000a\"]],\n    [\"p\", \"will turn into:\"],\n    [\"pre\", [\"code\", \"<ul>\\u000a<li><p>Bird</p></li>\\u000a<li><p>Magic</p></li>\\u000a</ul>\\u000a\"]],\n    [\"p\", \"List items may consist of multiple paragraphs. Each subsequent\\u000aparagraph in a list item must be intended by either 4 spaces\\u000aor one tab:\"],\n    [\"pre\", [\"code\", \"1.  This is a list item with two paragraphs. Lorem ipsum dolor\\u000a    sit amet, consectetuer adipiscing elit. Aliquam hendrerit\\u000a    mi posuere lectus.\\u000a\\u000a    Vestibulum enim wisi, viverra nec, fringilla in, laoreet\\u000a    vitae, risus. Donec sit amet nisl. Aliquam semper ipsum\\u000a    sit amet velit.\\u000a\\u000a2.  Suspendisse id sem consectetuer libero luctus adipiscing.\\u000a\"]],\n    [\"p\", \"It looks nice if you indent every line of the subsequent\\u000aparagraphs, but here again, Markdown will allow you to be\\u000alazy:\"],\n    [\"pre\", [\"code\", \"*   This is a list item with two paragraphs.\\u000a\\u000a    This is the second paragraph in the list item. You're\\u000aonly required to indent the first line. Lorem ipsum dolor\\u000asit amet, consectetuer adipiscing elit.\\u000a\\u000a*   Another item in the same list.\\u000a\"]],\n    [\"p\", \"To put a blockquote within a list item, the blockquote's \", [\"code\", \">\"], \"\\u000adelimiters need to be indented:\"],\n    [\"pre\", [\"code\", \"*   A list item with a blockquote:\\u000a\\u000a    > This is a blockquote\\u000a    > inside a list item.\\u000a\"]],\n    [\"p\", \"To put a code block within a list item, the code block needs\\u000ato be indented \", [\"em\", \"twice\"], \" -- 8 spaces or two tabs:\"],\n    [\"pre\", [\"code\", \"*   A list item with a code block:\\u000a\\u000a        <code goes here>\\u000a\"]],\n    [\"p\", \"It's worth noting that it's possible to trigger an ordered list by\\u000aaccident, by writing something like this:\"],\n    [\"pre\", [\"code\", \"1986. What a great season.\\u000a\"]],\n    [\"p\", \"In other words, a \", [\"em\", \"number-period-space\"], \" sequence at the beginning of a\\u000aline. To avoid this, you can backslash-escape the period:\"],\n    [\"pre\", [\"code\", \"1986\\\\. What a great season.\\u000a\"]], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"precode\"\n},\n\"Code Blocks\"], \"\\u000a\\u000a\", [\"p\", \"Pre-formatted code blocks are used for writing about programming or\\u000amarkup source code. Rather than forming normal paragraphs, the lines\\u000aof a code block are interpreted literally. Markdown wraps a code block\\u000ain both \", [\"code\", \"<pre>\"], \" and \", [\"code\", \"<code>\"], \" tags.\"],\n    [\"p\", \"To produce a code block in Markdown, simply indent every line of the\\u000ablock by at least 4 spaces or 1 tab. For example, given this input:\"],\n    [\"pre\", [\"code\", \"This is a normal paragraph:\\u000a\\u000a    This is a code block.\\u000a\"]],\n    [\"p\", \"Markdown will generate:\"],\n    [\"pre\", [\"code\", \"<p>This is a normal paragraph:</p>\\u000a\\u000a<pre><code>This is a code block.\\u000a</code></pre>\\u000a\"]],\n    [\"p\", \"One level of indentation -- 4 spaces or 1 tab -- is removed from each\\u000aline of the code block. For example, this:\"],\n    [\"pre\", [\"code\", \"Here is an example of AppleScript:\\u000a\\u000a    tell application \\\"Foo\\\"\\u000a        beep\\u000a    end tell\\u000a\"]],\n    [\"p\", \"will turn into:\"],\n    [\"pre\", [\"code\", \"<p>Here is an example of AppleScript:</p>\\u000a\\u000a<pre><code>tell application \\\"Foo\\\"\\u000a    beep\\u000aend tell\\u000a</code></pre>\\u000a\"]],\n    [\"p\", \"A code block continues until it reaches a line that is not indented\\u000a(or the end of the article).\"],\n    [\"p\", \"Within a code block, ampersands (\", [\"code\", \"&\"], \") and angle brackets (\", [\"code\", \"<\"], \" and \", [\"code\", \">\"], \")\\u000aare automatically converted into HTML entities. This makes it very\\u000aeasy to include example HTML source code using Markdown -- just paste\\u000ait and indent it, and Markdown will handle the hassle of encoding the\\u000aampersands and angle brackets. For example, this:\"],\n    [\"pre\", [\"code\", \"    <div class=\\\"footer\\\">\\u000a        &copy; 2004 Foo Corporation\\u000a    </div>\\u000a\"]],\n    [\"p\", \"will turn into:\"],\n    [\"pre\", [\"code\", \"<pre><code>&lt;div class=\\\"footer\\\"&gt;\\u000a    &amp;copy; 2004 Foo Corporation\\u000a&lt;/div&gt;\\u000a</code></pre>\\u000a\"]],\n    [\"p\", \"Regular Markdown syntax is not processed within code blocks. E.g.,\\u000aasterisks are just literal asterisks within a code block. This means\\u000ait's also easy to use Markdown to write about Markdown's own syntax.\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"hr\"\n},\n\"Horizontal Rules\"], \"\\u000a\\u000a\", [\"p\", \"You can produce a horizontal rule tag (\", [\"code\", \"<hr />\"], \") by placing three or\\u000amore hyphens, asterisks, or underscores on a line by themselves. If you\\u000awish, you may use spaces between the hyphens or asterisks. Each of the\\u000afollowing lines will produce a horizontal rule:\"],\n    [\"pre\", [\"code\", \"* * *\\u000a\\u000a***\\u000a\\u000a*****\\u000a\\u000a- - -\\u000a\\u000a---------------------------------------\\u000a\\u000a_ _ _\\u000a\"]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"h2\", {\n    \"id\": \"span\"\n},\n\"Span Elements\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"link\"\n},\n\"Links\"], \"\\u000a\\u000a\", [\"p\", \"Markdown supports two style of links: \", [\"em\", \"inline\"], \" and \", [\"em\", \"reference\"], \".\"],\n    [\"p\", \"In both styles, the link text is delimited by [square brackets].\"],\n    [\"p\", \"To create an inline link, use a set of regular parentheses immediately\\u000aafter the link text's closing square bracket. Inside the parentheses,\\u000aput the URL where you want the link to point, along with an \", [\"em\", \"optional\"], \"\\u000atitle for the link, surrounded in quotes. For example:\"],\n    [\"pre\", [\"code\", \"This is [an example](http://example.com/ \\\"Title\\\") inline link.\\u000a\\u000a[This link](http://example.net/) has no title attribute.\\u000a\"]],\n    [\"p\", \"Will produce:\"],\n    [\"pre\", [\"code\", \"<p>This is <a href=\\\"http://example.com/\\\" title=\\\"Title\\\">\\u000aan example</a> inline link.</p>\\u000a\\u000a<p><a href=\\\"http://example.net/\\\">This link</a> has no\\u000atitle attribute.</p>\\u000a\"]],\n    [\"p\", \"If you're referring to a local resource on the same server, you can\\u000ause relative paths:\"],\n    [\"pre\", [\"code\", \"See my [About](/about/) page for details.\\u000a\"]],\n    [\"p\", \"Reference-style links use a second set of square brackets, inside\\u000awhich you place a label of your choosing to identify the link:\"],\n    [\"pre\", [\"code\", \"This is [an example][id] reference-style link.\\u000a\"]],\n    [\"p\", \"You can optionally use a space to separate the sets of brackets:\"],\n    [\"pre\", [\"code\", \"This is [an example] [id] reference-style link.\\u000a\"]],\n    [\"p\", \"Then, anywhere in the document, you define your link label like this,\\u000aon a line by itself:\"],\n    [\"pre\", [\"code\", \"[id]: http://example.com/  \\\"Optional Title Here\\\"\\u000a\"]],\n    [\"p\", \"That is:\"],\n    [\"ul\", [\"li\", \"Square brackets containing the link identifier (optionally\\u000aindented from the left margin using up to three spaces);\"],\n        [\"li\", \"followed by a colon;\"],\n        [\"li\", \"followed by one or more spaces (or tabs);\"],\n        [\"li\", \"followed by the URL for the link;\"],\n        [\"li\", \"optionally followed by a title attribute for the link, enclosed\\u000ain double or single quotes.\"]],\n    [\"p\", \"The link URL may, optionally, be surrounded by angle brackets:\"],\n    [\"pre\", [\"code\", \"[id]: <http://example.com/>  \\\"Optional Title Here\\\"\\u000a\"]],\n    [\"p\", \"You can put the title attribute on the next line and use extra spaces\\u000aor tabs for padding, which tends to look better with longer URLs:\"],\n    [\"pre\", [\"code\", \"[id]: http://example.com/longish/path/to/resource/here\\u000a    \\\"Optional Title Here\\\"\\u000a\"]],\n    [\"p\", \"Link definitions are only used for creating links during Markdown\\u000aprocessing, and are stripped from your document in the HTML output.\"],\n    [\"p\", \"Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are \", [\"em\", \"not\"], \" case sensitive. E.g. these two links:\"],\n    [\"pre\", [\"code\", \"[link text][a]\\u000a[link text][A]\\u000a\"]],\n    [\"p\", \"are equivalent.\"],\n    [\"p\", \"The \", [\"em\", \"implicit link name\"], \" shortcut allows you to omit the name of the\\u000alink, in which case the link text itself is used as the name.\\u000aJust use an empty set of square brackets -- e.g., to link the word\\u000a\\\"Google\\\" to the google.com web site, you could simply write:\"],\n    [\"pre\", [\"code\", \"[Google][]\\u000a\"]],\n    [\"p\", \"And then define the link:\"],\n    [\"pre\", [\"code\", \"[Google]: http://google.com/\\u000a\"]],\n    [\"p\", \"Because link names may contain spaces, this shortcut even works for\\u000amultiple words in the link text:\"],\n    [\"pre\", [\"code\", \"Visit [Daring Fireball][] for more information.\\u000a\"]],\n    [\"p\", \"And then define the link:\"],\n    [\"pre\", [\"code\", \"[Daring Fireball]: http://daringfireball.net/\\u000a\"]],\n    [\"p\", \"Link definitions can be placed anywhere in your Markdown document. I\\u000atend to put them immediately after each paragraph in which they're\\u000aused, but if you want, you can put them all at the end of your\\u000adocument, sort of like footnotes.\"],\n    [\"p\", \"Here's an example of reference links in action:\"],\n    [\"pre\", [\"code\", \"I get 10 times more traffic from [Google] [1] than from\\u000a[Yahoo] [2] or [MSN] [3].\\u000a\\u000a  [1]: http://google.com/        \\\"Google\\\"\\u000a  [2]: http://search.yahoo.com/  \\\"Yahoo Search\\\"\\u000a  [3]: http://search.msn.com/    \\\"MSN Search\\\"\\u000a\"]],\n    [\"p\", \"Using the implicit link name shortcut, you could instead write:\"],\n    [\"pre\", [\"code\", \"I get 10 times more traffic from [Google][] than from\\u000a[Yahoo][] or [MSN][].\\u000a\\u000a  [google]: http://google.com/        \\\"Google\\\"\\u000a  [yahoo]:  http://search.yahoo.com/  \\\"Yahoo Search\\\"\\u000a  [msn]:    http://search.msn.com/    \\\"MSN Search\\\"\\u000a\"]],\n    [\"p\", \"Both of the above examples will produce the following HTML output:\"],\n    [\"pre\", [\"code\", \"<p>I get 10 times more traffic from <a href=\\\"http://google.com/\\\"\\u000atitle=\\\"Google\\\">Google</a> than from\\u000a<a href=\\\"http://search.yahoo.com/\\\" title=\\\"Yahoo Search\\\">Yahoo</a>\\u000aor <a href=\\\"http://search.msn.com/\\\" title=\\\"MSN Search\\\">MSN</a>.</p>\\u000a\"]],\n    [\"p\", \"For comparison, here is the same paragraph written using\\u000aMarkdown's inline link style:\"],\n    [\"pre\", [\"code\", \"I get 10 times more traffic from [Google](http://google.com/ \\\"Google\\\")\\u000athan from [Yahoo](http://search.yahoo.com/ \\\"Yahoo Search\\\") or\\u000a[MSN](http://search.msn.com/ \\\"MSN Search\\\").\\u000a\"]],\n    [\"p\", \"The point of reference-style links is not that they're easier to\\u000awrite. The point is that with reference-style links, your document\\u000asource is vastly more readable. Compare the above examples: using\\u000areference-style links, the paragraph itself is only 81 characters\\u000along; with inline-style links, it's 176 characters; and as raw HTML,\\u000ait's 234 characters. In the raw HTML, there's more markup than there\\u000ais text.\"],\n    [\"p\", \"With Markdown's reference-style links, a source document much more\\u000aclosely resembles the final output, as rendered in a browser. By\\u000aallowing you to move the markup-related metadata out of the paragraph,\\u000ayou can add links without interrupting the narrative flow of your\\u000aprose.\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"em\"\n},\n\"Emphasis\"], \"\\u000a\\u000a\", [\"p\", \"Markdown treats asterisks (\", [\"code\", \"*\"], \") and underscores (\", [\"code\", \"_\"], \") as indicators of\\u000aemphasis. Text wrapped with one \", [\"code\", \"*\"], \" or \", [\"code\", \"_\"], \" will be wrapped with an\\u000aHTML \", [\"code\", \"<em>\"], \" tag; double \", [\"code\", \"*\"], \"'s or \", [\"code\", \"_\"], \"'s will be wrapped with an HTML\\u000a\", [\"code\", \"<strong>\"], \" tag. E.g., this input:\"],\n    [\"pre\", [\"code\", \"*single asterisks*\\u000a\\u000a_single underscores_\\u000a\\u000a**double asterisks**\\u000a\\u000a__double underscores__\\u000a\"]],\n    [\"p\", \"will produce:\"],\n    [\"pre\", [\"code\", \"<em>single asterisks</em>\\u000a\\u000a<em>single underscores</em>\\u000a\\u000a<strong>double asterisks</strong>\\u000a\\u000a<strong>double underscores</strong>\\u000a\"]],\n    [\"p\", \"You can use whichever style you prefer; the lone restriction is that\\u000athe same character must be used to open and close an emphasis span.\"],\n    [\"p\", \"Emphasis can be used in the middle of a word:\"],\n    [\"pre\", [\"code\", \"un*fucking*believable\\u000a\"]],\n    [\"p\", \"But if you surround an \", [\"code\", \"*\"], \" or \", [\"code\", \"_\"], \" with spaces, it'll be treated as a\\u000aliteral asterisk or underscore.\"],\n    [\"p\", \"To produce a literal asterisk or underscore at a position where it\\u000awould otherwise be used as an emphasis delimiter, you can backslash\\u000aescape it:\"],\n    [\"pre\", [\"code\", \"\\\\*this text is surrounded by literal asterisks\\\\*\\u000a\"]], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"code\"\n},\n\"Code\"], \"\\u000a\\u000a\", [\"p\", \"To indicate a span of code, wrap it with backtick quotes (\", [\"code\", \"`\"], \").\\u000aUnlike a pre-formatted code block, a code span indicates code within a\\u000anormal paragraph. For example:\"],\n    [\"pre\", [\"code\", \"Use the `printf()` function.\\u000a\"]],\n    [\"p\", \"will produce:\"],\n    [\"pre\", [\"code\", \"<p>Use the <code>printf()</code> function.</p>\\u000a\"]],\n    [\"p\", \"To include a literal backtick character within a code span, you can use\\u000amultiple backticks as the opening and closing delimiters:\"],\n    [\"pre\", [\"code\", \"``There is a literal backtick (`) here.``\\u000a\"]],\n    [\"p\", \"which will produce this:\"],\n    [\"pre\", [\"code\", \"<p><code>There is a literal backtick (`) here.</code></p>\\u000a\"]],\n    [\"p\", \"The backtick delimiters surrounding a code span may include spaces --\\u000aone after the opening, one before the closing. This allows you to place\\u000aliteral backtick characters at the beginning or end of a code span:\"],\n    [\"pre\", [\"code\", \"A single backtick in a code span: `` ` ``\\u000a\\u000aA backtick-delimited string in a code span: `` `foo` ``\\u000a\"]],\n    [\"p\", \"will produce:\"],\n    [\"pre\", [\"code\", \"<p>A single backtick in a code span: <code>`</code></p>\\u000a\\u000a<p>A backtick-delimited string in a code span: <code>`foo`</code></p>\\u000a\"]],\n    [\"p\", \"With a code span, ampersands and angle brackets are encoded as HTML\\u000aentities automatically, which makes it easy to include example HTML\\u000atags. Markdown will turn this:\"],\n    [\"pre\", [\"code\", \"Please don't use any `<blink>` tags.\\u000a\"]],\n    [\"p\", \"into:\"],\n    [\"pre\", [\"code\", \"<p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>\\u000a\"]],\n    [\"p\", \"You can write this:\"],\n    [\"pre\", [\"code\", \"`&#8212;` is the decimal-encoded equivalent of `&mdash;`.\\u000a\"]],\n    [\"p\", \"to produce:\"],\n    [\"pre\", [\"code\", \"<p><code>&amp;#8212;</code> is the decimal-encoded\\u000aequivalent of <code>&amp;mdash;</code>.</p>\\u000a\"]], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"img\"\n},\n\"Images\"], \"\\u000a\\u000a\", [\"p\", \"Admittedly, it's fairly difficult to devise a \\\"natural\\\" syntax for\\u000aplacing images into a plain text document format.\"],\n    [\"p\", \"Markdown uses an image syntax that is intended to resemble the syntax\\u000afor links, allowing for two styles: \", [\"em\", \"inline\"], \" and \", [\"em\", \"reference\"], \".\"],\n    [\"p\", \"Inline image syntax looks like this:\"],\n    [\"pre\", [\"code\", \"![Alt text](/path/to/img.jpg)\\u000a\\u000a![Alt text](/path/to/img.jpg \\\"Optional title\\\")\\u000a\"]],\n    [\"p\", \"That is:\"],\n    [\"ul\", [\"li\", \"An exclamation mark: \", [\"code\", \"!\"], \";\"],\n        [\"li\", \"followed by a set of square brackets, containing the \", [\"code\", \"alt\"], \"\\u000aattribute text for the image;\"],\n        [\"li\", \"followed by a set of parentheses, containing the URL or path to\\u000athe image, and an optional \", [\"code\", \"title\"], \" attribute enclosed in double\\u000aor single quotes.\"]],\n    [\"p\", \"Reference-style image syntax looks like this:\"],\n    [\"pre\", [\"code\", \"![Alt text][id]\\u000a\"]],\n    [\"p\", \"Where \\\"id\\\" is the name of a defined image reference. Image references\\u000aare defined using syntax identical to link references:\"],\n    [\"pre\", [\"code\", \"[id]: url/to/image  \\\"Optional title attribute\\\"\\u000a\"]],\n    [\"p\", \"As of this writing, Markdown has no syntax for specifying the\\u000adimensions of an image; if this is important to you, you can simply\\u000ause regular HTML \", [\"code\", \"<img>\"], \" tags.\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"h2\", {\n    \"id\": \"misc\"\n},\n\"Miscellaneous\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"autolink\"\n},\n\"Automatic Links\"], \"\\u000a\\u000a\", [\"p\", \"Markdown supports a shortcut style for creating \\\"automatic\\\" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:\"],\n    [\"pre\", [\"code\", \"<http://example.com/>\\u000a\"]],\n    [\"p\", \"Markdown will turn this into:\"],\n    [\"pre\", [\"code\", \"<a href=\\\"http://example.com/\\\">http://example.com/</a>\\u000a\"]],\n    [\"p\", \"Automatic links for email addresses work similarly, except that\\u000aMarkdown will also perform a bit of randomized decimal and hex\\u000aentity-encoding to help obscure your address from address-harvesting\\u000aspambots. For example, Markdown will turn this:\"],\n    [\"pre\", [\"code\", \"<address@example.com>\\u000a\"]],\n    [\"p\", \"into something like this:\"],\n    [\"pre\", [\"code\", \"<a href=\\\"&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;\\u000a&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;\\u000a&#109;\\\">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;\\u000a&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>\\u000a\"]],\n    [\"p\", \"which will render in a browser as a clickable link to \\\"address@example.com\\\".\"],\n    [\"p\", \"(This sort of entity-encoding trick will indeed fool many, if not\\u000amost, address-harvesting bots, but it definitely won't fool all of\\u000athem. It's better than nothing, but an address published in this way\\u000awill probably eventually start receiving spam.)\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"backslash\"\n},\n\"Backslash Escapes\"], \"\\u000a\\u000a\", [\"p\", \"Markdown allows you to use backslash escapes to generate literal\\u000acharacters which would otherwise have special meaning in Markdown's\\u000aformatting syntax. For example, if you wanted to surround a word with\\u000aliteral asterisks (instead of an HTML \", [\"code\", \"<em>\"], \" tag), you can backslashes\\u000abefore the asterisks, like this:\"],\n    [\"pre\", [\"code\", \"\\\\*literal asterisks\\\\*\\u000a\"]],\n    [\"p\", \"Markdown provides backslash escapes for the following characters:\"],\n    [\"pre\", [\"code\", \"\\\\   backslash\\u000a`   backtick\\u000a*   asterisk\\u000a_   underscore\\u000a{}  curly braces\\u000a[]  square brackets\\u000a()  parentheses\\u000a#   hash mark\\u000a+   plus sign\\u000a-   minus sign (hyphen)\\u000a.   dot\\u000a!   exclamation mark\\u000a\"]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Markdown_Documentation_-_Syntax.text",
    "content": "Markdown: Syntax\n================\n\n<ul id=\"ProjectSubmenu\">\n    <li><a href=\"/projects/markdown/\" title=\"Markdown Project Page\">Main</a></li>\n    <li><a href=\"/projects/markdown/basics\" title=\"Markdown Basics\">Basics</a></li>\n    <li><a class=\"selected\" title=\"Markdown Syntax Documentation\">Syntax</a></li>\n    <li><a href=\"/projects/markdown/license\" title=\"Pricing and License Information\">License</a></li>\n    <li><a href=\"/projects/markdown/dingus\" title=\"Online Markdown Web Form\">Dingus</a></li>\n</ul>\n\n\n*   [Overview](#overview)\n    *   [Philosophy](#philosophy)\n    *   [Inline HTML](#html)\n    *   [Automatic Escaping for Special Characters](#autoescape)\n*   [Block Elements](#block)\n    *   [Paragraphs and Line Breaks](#p)\n    *   [Headers](#header)\n    *   [Blockquotes](#blockquote)\n    *   [Lists](#list)\n    *   [Code Blocks](#precode)\n    *   [Horizontal Rules](#hr)\n*   [Span Elements](#span)\n    *   [Links](#link)\n    *   [Emphasis](#em)\n    *   [Code](#code)\n    *   [Images](#img)\n*   [Miscellaneous](#misc)\n    *   [Backslash Escapes](#backslash)\n    *   [Automatic Links](#autolink)\n\n\n**Note:** This document is itself written using Markdown; you\ncan [see the source for it by adding '.text' to the URL][src].\n\n  [src]: /projects/markdown/syntax.text\n\n* * *\n\n<h2 id=\"overview\">Overview</h2>\n\n<h3 id=\"philosophy\">Philosophy</h3>\n\nMarkdown is intended to be as easy-to-read and easy-to-write as is feasible.\n\nReadability, however, is emphasized above all else. A Markdown-formatted\ndocument should be publishable as-is, as plain text, without looking\nlike it's been marked up with tags or formatting instructions. While\nMarkdown's syntax has been influenced by several existing text-to-HTML\nfilters -- including [Setext] [1], [atx] [2], [Textile] [3], [reStructuredText] [4],\n[Grutatext] [5], and [EtText] [6] -- the single biggest source of\ninspiration for Markdown's syntax is the format of plain text email.\n\n  [1]: http://docutils.sourceforge.net/mirror/setext.html\n  [2]: http://www.aaronsw.com/2002/atx/\n  [3]: http://textism.com/tools/textile/\n  [4]: http://docutils.sourceforge.net/rst.html\n  [5]: http://www.triptico.com/software/grutatxt.html\n  [6]: http://ettext.taint.org/doc/\n\nTo this end, Markdown's syntax is comprised entirely of punctuation\ncharacters, which punctuation characters have been carefully chosen so\nas to look like what they mean. E.g., asterisks around a word actually\nlook like \\*emphasis\\*. Markdown lists look like, well, lists. Even\nblockquotes look like quoted passages of text, assuming you've ever\nused email.\n\n\n\n<h3 id=\"html\">Inline HTML</h3>\n\nMarkdown's syntax is intended for one purpose: to be used as a\nformat for *writing* for the web.\n\nMarkdown is not a replacement for HTML, or even close to it. Its\nsyntax is very small, corresponding only to a very small subset of\nHTML tags. The idea is *not* to create a syntax that makes it easier\nto insert HTML tags. In my opinion, HTML tags are already easy to\ninsert. The idea for Markdown is to make it easy to read, write, and\nedit prose. HTML is a *publishing* format; Markdown is a *writing*\nformat. Thus, Markdown's formatting syntax only addresses issues that\ncan be conveyed in plain text.\n\nFor any markup that is not covered by Markdown's syntax, you simply\nuse HTML itself. There's no need to preface it or delimit it to\nindicate that you're switching from Markdown to HTML; you just use\nthe tags.\n\nThe only restrictions are that block-level HTML elements -- e.g. `<div>`,\n`<table>`, `<pre>`, `<p>`, etc. -- must be separated from surrounding\ncontent by blank lines, and the start and end tags of the block should\nnot be indented with tabs or spaces. Markdown is smart enough not\nto add extra (unwanted) `<p>` tags around HTML block-level tags.\n\nFor example, to add an HTML table to a Markdown article:\n\n    This is a regular paragraph.\n\n    <table>\n        <tr>\n            <td>Foo</td>\n        </tr>\n    </table>\n\n    This is another regular paragraph.\n\nNote that Markdown formatting syntax is not processed within block-level\nHTML tags. E.g., you can't use Markdown-style `*emphasis*` inside an\nHTML block.\n\nSpan-level HTML tags -- e.g. `<span>`, `<cite>`, or `<del>` -- can be\nused anywhere in a Markdown paragraph, list item, or header. If you\nwant, you can even use HTML tags instead of Markdown formatting; e.g. if\nyou'd prefer to use HTML `<a>` or `<img>` tags instead of Markdown's\nlink or image syntax, go right ahead.\n\nUnlike block-level HTML tags, Markdown syntax *is* processed within\nspan-level tags.\n\n\n<h3 id=\"autoescape\">Automatic Escaping for Special Characters</h3>\n\nIn HTML, there are two characters that demand special treatment: `<`\nand `&`. Left angle brackets are used to start tags; ampersands are\nused to denote HTML entities. If you want to use them as literal\ncharacters, you must escape them as entities, e.g. `&lt;`, and\n`&amp;`.\n\nAmpersands in particular are bedeviling for web writers. If you want to\nwrite about 'AT&T', you need to write '`AT&amp;T`'. You even need to\nescape ampersands within URLs. Thus, if you want to link to:\n\n    http://images.google.com/images?num=30&q=larry+bird\n\nyou need to encode the URL as:\n\n    http://images.google.com/images?num=30&amp;q=larry+bird\n\nin your anchor tag `href` attribute. Needless to say, this is easy to\nforget, and is probably the single most common source of HTML validation\nerrors in otherwise well-marked-up web sites.\n\nMarkdown allows you to use these characters naturally, taking care of\nall the necessary escaping for you. If you use an ampersand as part of\nan HTML entity, it remains unchanged; otherwise it will be translated\ninto `&amp;`.\n\nSo, if you want to include a copyright symbol in your article, you can write:\n\n    &copy;\n\nand Markdown will leave it alone. But if you write:\n\n    AT&T\n\nMarkdown will translate it to:\n\n    AT&amp;T\n\nSimilarly, because Markdown supports [inline HTML](#html), if you use\nangle brackets as delimiters for HTML tags, Markdown will treat them as\nsuch. But if you write:\n\n    4 < 5\n\nMarkdown will translate it to:\n\n    4 &lt; 5\n\nHowever, inside Markdown code spans and blocks, angle brackets and\nampersands are *always* encoded automatically. This makes it easy to use\nMarkdown to write about HTML code. (As opposed to raw HTML, which is a\nterrible format for writing about HTML syntax, because every single `<`\nand `&` in your example code needs to be escaped.)\n\n\n* * *\n\n\n<h2 id=\"block\">Block Elements</h2>\n\n\n<h3 id=\"p\">Paragraphs and Line Breaks</h3>\n\nA paragraph is simply one or more consecutive lines of text, separated\nby one or more blank lines. (A blank line is any line that looks like a\nblank line -- a line containing nothing but spaces or tabs is considered\nblank.) Normal paragraphs should not be intended with spaces or tabs.\n\nThe implication of the \"one or more consecutive lines of text\" rule is\nthat Markdown supports \"hard-wrapped\" text paragraphs. This differs\nsignificantly from most other text-to-HTML formatters (including Movable\nType's \"Convert Line Breaks\" option) which translate every line break\ncharacter in a paragraph into a `<br />` tag.\n\nWhen you *do* want to insert a `<br />` break tag using Markdown, you\nend a line with two or more spaces, then type return.\n\nYes, this takes a tad more effort to create a `<br />`, but a simplistic\n\"every line break is a `<br />`\" rule wouldn't work for Markdown.\nMarkdown's email-style [blockquoting][bq] and multi-paragraph [list items][l]\nwork best -- and look better -- when you format them with hard breaks.\n\n  [bq]: #blockquote\n  [l]:  #list\n\n\n\n<h3 id=\"header\">Headers</h3>\n\nMarkdown supports two styles of headers, [Setext] [1] and [atx] [2].\n\nSetext-style headers are \"underlined\" using equal signs (for first-level\nheaders) and dashes (for second-level headers). For example:\n\n    This is an H1\n    =============\n\n    This is an H2\n    -------------\n\nAny number of underlining `=`'s or `-`'s will work.\n\nAtx-style headers use 1-6 hash characters at the start of the line,\ncorresponding to header levels 1-6. For example:\n\n    # This is an H1\n\n    ## This is an H2\n\n    ###### This is an H6\n\nOptionally, you may \"close\" atx-style headers. This is purely\ncosmetic -- you can use this if you think it looks better. The\nclosing hashes don't even need to match the number of hashes\nused to open the header. (The number of opening hashes\ndetermines the header level.) :\n\n    # This is an H1 #\n\n    ## This is an H2 ##\n\n    ### This is an H3 ######\n\n\n<h3 id=\"blockquote\">Blockquotes</h3>\n\nMarkdown uses email-style `>` characters for blockquoting. If you're\nfamiliar with quoting passages of text in an email message, then you\nknow how to create a blockquote in Markdown. It looks best if you hard\nwrap the text and put a `>` before every line:\n\n    > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,\n    > consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.\n    > Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.\n    > \n    > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse\n    > id sem consectetuer libero luctus adipiscing.\n\nMarkdown allows you to be lazy and only put the `>` before the first\nline of a hard-wrapped paragraph:\n\n    > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,\n    consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.\n    Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.\n\n    > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse\n    id sem consectetuer libero luctus adipiscing.\n\nBlockquotes can be nested (i.e. a blockquote-in-a-blockquote) by\nadding additional levels of `>`:\n\n    > This is the first level of quoting.\n    >\n    > > This is nested blockquote.\n    >\n    > Back to the first level.\n\nBlockquotes can contain other Markdown elements, including headers, lists,\nand code blocks:\n\n\t> ## This is a header.\n\t> \n\t> 1.   This is the first list item.\n\t> 2.   This is the second list item.\n\t> \n\t> Here's some example code:\n\t> \n\t>     return shell_exec(\"echo $input | $markdown_script\");\n\nAny decent text editor should make email-style quoting easy. For\nexample, with BBEdit, you can make a selection and choose Increase\nQuote Level from the Text menu.\n\n\n<h3 id=\"list\">Lists</h3>\n\nMarkdown supports ordered (numbered) and unordered (bulleted) lists.\n\nUnordered lists use asterisks, pluses, and hyphens -- interchangably\n-- as list markers:\n\n    *   Red\n    *   Green\n    *   Blue\n\nis equivalent to:\n\n    +   Red\n    +   Green\n    +   Blue\n\nand:\n\n    -   Red\n    -   Green\n    -   Blue\n\nOrdered lists use numbers followed by periods:\n\n    1.  Bird\n    2.  McHale\n    3.  Parish\n\nIt's important to note that the actual numbers you use to mark the\nlist have no effect on the HTML output Markdown produces. The HTML\nMarkdown produces from the above list is:\n\n    <ol>\n    <li>Bird</li>\n    <li>McHale</li>\n    <li>Parish</li>\n    </ol>\n\nIf you instead wrote the list in Markdown like this:\n\n    1.  Bird\n    1.  McHale\n    1.  Parish\n\nor even:\n\n    3. Bird\n    1. McHale\n    8. Parish\n\nyou'd get the exact same HTML output. The point is, if you want to,\nyou can use ordinal numbers in your ordered Markdown lists, so that\nthe numbers in your source match the numbers in your published HTML.\nBut if you want to be lazy, you don't have to.\n\nIf you do use lazy list numbering, however, you should still start the\nlist with the number 1. At some point in the future, Markdown may support\nstarting ordered lists at an arbitrary number.\n\nList markers typically start at the left margin, but may be indented by\nup to three spaces. List markers must be followed by one or more spaces\nor a tab.\n\nTo make lists look nice, you can wrap items with hanging indents:\n\n    *   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n        Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,\n        viverra nec, fringilla in, laoreet vitae, risus.\n    *   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\n        Suspendisse id sem consectetuer libero luctus adipiscing.\n\nBut if you want to be lazy, you don't have to:\n\n    *   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,\n    viverra nec, fringilla in, laoreet vitae, risus.\n    *   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\n    Suspendisse id sem consectetuer libero luctus adipiscing.\n\nIf list items are separated by blank lines, Markdown will wrap the\nitems in `<p>` tags in the HTML output. For example, this input:\n\n    *   Bird\n    *   Magic\n\nwill turn into:\n\n    <ul>\n    <li>Bird</li>\n    <li>Magic</li>\n    </ul>\n\nBut this:\n\n    *   Bird\n\n    *   Magic\n\nwill turn into:\n\n    <ul>\n    <li><p>Bird</p></li>\n    <li><p>Magic</p></li>\n    </ul>\n\nList items may consist of multiple paragraphs. Each subsequent\nparagraph in a list item must be intended by either 4 spaces\nor one tab:\n\n    1.  This is a list item with two paragraphs. Lorem ipsum dolor\n        sit amet, consectetuer adipiscing elit. Aliquam hendrerit\n        mi posuere lectus.\n\n        Vestibulum enim wisi, viverra nec, fringilla in, laoreet\n        vitae, risus. Donec sit amet nisl. Aliquam semper ipsum\n        sit amet velit.\n\n    2.  Suspendisse id sem consectetuer libero luctus adipiscing.\n\nIt looks nice if you indent every line of the subsequent\nparagraphs, but here again, Markdown will allow you to be\nlazy:\n\n    *   This is a list item with two paragraphs.\n\n        This is the second paragraph in the list item. You're\n    only required to indent the first line. Lorem ipsum dolor\n    sit amet, consectetuer adipiscing elit.\n\n    *   Another item in the same list.\n\nTo put a blockquote within a list item, the blockquote's `>`\ndelimiters need to be indented:\n\n    *   A list item with a blockquote:\n\n        > This is a blockquote\n        > inside a list item.\n\nTo put a code block within a list item, the code block needs\nto be indented *twice* -- 8 spaces or two tabs:\n\n    *   A list item with a code block:\n\n            <code goes here>\n\n\nIt's worth noting that it's possible to trigger an ordered list by\naccident, by writing something like this:\n\n    1986. What a great season.\n\nIn other words, a *number-period-space* sequence at the beginning of a\nline. To avoid this, you can backslash-escape the period:\n\n    1986\\. What a great season.\n\n\n\n<h3 id=\"precode\">Code Blocks</h3>\n\nPre-formatted code blocks are used for writing about programming or\nmarkup source code. Rather than forming normal paragraphs, the lines\nof a code block are interpreted literally. Markdown wraps a code block\nin both `<pre>` and `<code>` tags.\n\nTo produce a code block in Markdown, simply indent every line of the\nblock by at least 4 spaces or 1 tab. For example, given this input:\n\n    This is a normal paragraph:\n\n        This is a code block.\n\nMarkdown will generate:\n\n    <p>This is a normal paragraph:</p>\n\n    <pre><code>This is a code block.\n    </code></pre>\n\nOne level of indentation -- 4 spaces or 1 tab -- is removed from each\nline of the code block. For example, this:\n\n    Here is an example of AppleScript:\n\n        tell application \"Foo\"\n            beep\n        end tell\n\nwill turn into:\n\n    <p>Here is an example of AppleScript:</p>\n\n    <pre><code>tell application \"Foo\"\n        beep\n    end tell\n    </code></pre>\n\nA code block continues until it reaches a line that is not indented\n(or the end of the article).\n\nWithin a code block, ampersands (`&`) and angle brackets (`<` and `>`)\nare automatically converted into HTML entities. This makes it very\neasy to include example HTML source code using Markdown -- just paste\nit and indent it, and Markdown will handle the hassle of encoding the\nampersands and angle brackets. For example, this:\n\n        <div class=\"footer\">\n            &copy; 2004 Foo Corporation\n        </div>\n\nwill turn into:\n\n    <pre><code>&lt;div class=\"footer\"&gt;\n        &amp;copy; 2004 Foo Corporation\n    &lt;/div&gt;\n    </code></pre>\n\nRegular Markdown syntax is not processed within code blocks. E.g.,\nasterisks are just literal asterisks within a code block. This means\nit's also easy to use Markdown to write about Markdown's own syntax.\n\n\n\n<h3 id=\"hr\">Horizontal Rules</h3>\n\nYou can produce a horizontal rule tag (`<hr />`) by placing three or\nmore hyphens, asterisks, or underscores on a line by themselves. If you\nwish, you may use spaces between the hyphens or asterisks. Each of the\nfollowing lines will produce a horizontal rule:\n\n    * * *\n\n    ***\n\n    *****\n\t\n    - - -\n\n    ---------------------------------------\n\n\t_ _ _\n\n\n* * *\n\n<h2 id=\"span\">Span Elements</h2>\n\n<h3 id=\"link\">Links</h3>\n\nMarkdown supports two style of links: *inline* and *reference*.\n\nIn both styles, the link text is delimited by [square brackets].\n\nTo create an inline link, use a set of regular parentheses immediately\nafter the link text's closing square bracket. Inside the parentheses,\nput the URL where you want the link to point, along with an *optional*\ntitle for the link, surrounded in quotes. For example:\n\n    This is [an example](http://example.com/ \"Title\") inline link.\n\n    [This link](http://example.net/) has no title attribute.\n\nWill produce:\n\n    <p>This is <a href=\"http://example.com/\" title=\"Title\">\n    an example</a> inline link.</p>\n\n    <p><a href=\"http://example.net/\">This link</a> has no\n    title attribute.</p>\n\nIf you're referring to a local resource on the same server, you can\nuse relative paths:\n\n    See my [About](/about/) page for details.\n\nReference-style links use a second set of square brackets, inside\nwhich you place a label of your choosing to identify the link:\n\n    This is [an example][id] reference-style link.\n\nYou can optionally use a space to separate the sets of brackets:\n\n    This is [an example] [id] reference-style link.\n\nThen, anywhere in the document, you define your link label like this,\non a line by itself:\n\n    [id]: http://example.com/  \"Optional Title Here\"\n\nThat is:\n\n*   Square brackets containing the link identifier (optionally\n    indented from the left margin using up to three spaces);\n*   followed by a colon;\n*   followed by one or more spaces (or tabs);\n*   followed by the URL for the link;\n*   optionally followed by a title attribute for the link, enclosed\n    in double or single quotes.\n\nThe link URL may, optionally, be surrounded by angle brackets:\n\n    [id]: <http://example.com/>  \"Optional Title Here\"\n\nYou can put the title attribute on the next line and use extra spaces\nor tabs for padding, which tends to look better with longer URLs:\n\n    [id]: http://example.com/longish/path/to/resource/here\n        \"Optional Title Here\"\n\nLink definitions are only used for creating links during Markdown\nprocessing, and are stripped from your document in the HTML output.\n\nLink definition names may constist of letters, numbers, spaces, and punctuation -- but they are *not* case sensitive. E.g. these two links:\n\n\t[link text][a]\n\t[link text][A]\n\nare equivalent.\n\nThe *implicit link name* shortcut allows you to omit the name of the\nlink, in which case the link text itself is used as the name.\nJust use an empty set of square brackets -- e.g., to link the word\n\"Google\" to the google.com web site, you could simply write:\n\n\t[Google][]\n\nAnd then define the link:\n\n\t[Google]: http://google.com/\n\nBecause link names may contain spaces, this shortcut even works for\nmultiple words in the link text:\n\n\tVisit [Daring Fireball][] for more information.\n\nAnd then define the link:\n\t\n\t[Daring Fireball]: http://daringfireball.net/\n\nLink definitions can be placed anywhere in your Markdown document. I\ntend to put them immediately after each paragraph in which they're\nused, but if you want, you can put them all at the end of your\ndocument, sort of like footnotes.\n\nHere's an example of reference links in action:\n\n    I get 10 times more traffic from [Google] [1] than from\n    [Yahoo] [2] or [MSN] [3].\n\n      [1]: http://google.com/        \"Google\"\n      [2]: http://search.yahoo.com/  \"Yahoo Search\"\n      [3]: http://search.msn.com/    \"MSN Search\"\n\nUsing the implicit link name shortcut, you could instead write:\n\n    I get 10 times more traffic from [Google][] than from\n    [Yahoo][] or [MSN][].\n\n      [google]: http://google.com/        \"Google\"\n      [yahoo]:  http://search.yahoo.com/  \"Yahoo Search\"\n      [msn]:    http://search.msn.com/    \"MSN Search\"\n\nBoth of the above examples will produce the following HTML output:\n\n    <p>I get 10 times more traffic from <a href=\"http://google.com/\"\n    title=\"Google\">Google</a> than from\n    <a href=\"http://search.yahoo.com/\" title=\"Yahoo Search\">Yahoo</a>\n    or <a href=\"http://search.msn.com/\" title=\"MSN Search\">MSN</a>.</p>\n\nFor comparison, here is the same paragraph written using\nMarkdown's inline link style:\n\n    I get 10 times more traffic from [Google](http://google.com/ \"Google\")\n    than from [Yahoo](http://search.yahoo.com/ \"Yahoo Search\") or\n    [MSN](http://search.msn.com/ \"MSN Search\").\n\nThe point of reference-style links is not that they're easier to\nwrite. The point is that with reference-style links, your document\nsource is vastly more readable. Compare the above examples: using\nreference-style links, the paragraph itself is only 81 characters\nlong; with inline-style links, it's 176 characters; and as raw HTML,\nit's 234 characters. In the raw HTML, there's more markup than there\nis text.\n\nWith Markdown's reference-style links, a source document much more\nclosely resembles the final output, as rendered in a browser. By\nallowing you to move the markup-related metadata out of the paragraph,\nyou can add links without interrupting the narrative flow of your\nprose.\n\n\n<h3 id=\"em\">Emphasis</h3>\n\nMarkdown treats asterisks (`*`) and underscores (`_`) as indicators of\nemphasis. Text wrapped with one `*` or `_` will be wrapped with an\nHTML `<em>` tag; double `*`'s or `_`'s will be wrapped with an HTML\n`<strong>` tag. E.g., this input:\n\n    *single asterisks*\n\n    _single underscores_\n\n    **double asterisks**\n\n    __double underscores__\n\nwill produce:\n\n    <em>single asterisks</em>\n\n    <em>single underscores</em>\n\n    <strong>double asterisks</strong>\n\n    <strong>double underscores</strong>\n\nYou can use whichever style you prefer; the lone restriction is that\nthe same character must be used to open and close an emphasis span.\n\nEmphasis can be used in the middle of a word:\n\n    un*fucking*believable\n\nBut if you surround an `*` or `_` with spaces, it'll be treated as a\nliteral asterisk or underscore.\n\nTo produce a literal asterisk or underscore at a position where it\nwould otherwise be used as an emphasis delimiter, you can backslash\nescape it:\n\n    \\*this text is surrounded by literal asterisks\\*\n\n\n\n<h3 id=\"code\">Code</h3>\n\nTo indicate a span of code, wrap it with backtick quotes (`` ` ``).\nUnlike a pre-formatted code block, a code span indicates code within a\nnormal paragraph. For example:\n\n    Use the `printf()` function.\n\nwill produce:\n\n    <p>Use the <code>printf()</code> function.</p>\n\nTo include a literal backtick character within a code span, you can use\nmultiple backticks as the opening and closing delimiters:\n\n    ``There is a literal backtick (`) here.``\n\nwhich will produce this:\n\n    <p><code>There is a literal backtick (`) here.</code></p>\n\nThe backtick delimiters surrounding a code span may include spaces --\none after the opening, one before the closing. This allows you to place\nliteral backtick characters at the beginning or end of a code span:\n\n\tA single backtick in a code span: `` ` ``\n\t\n\tA backtick-delimited string in a code span: `` `foo` ``\n\nwill produce:\n\n\t<p>A single backtick in a code span: <code>`</code></p>\n\t\n\t<p>A backtick-delimited string in a code span: <code>`foo`</code></p>\n\nWith a code span, ampersands and angle brackets are encoded as HTML\nentities automatically, which makes it easy to include example HTML\ntags. Markdown will turn this:\n\n    Please don't use any `<blink>` tags.\n\ninto:\n\n    <p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>\n\nYou can write this:\n\n    `&#8212;` is the decimal-encoded equivalent of `&mdash;`.\n\nto produce:\n\n    <p><code>&amp;#8212;</code> is the decimal-encoded\n    equivalent of <code>&amp;mdash;</code>.</p>\n\n\n\n<h3 id=\"img\">Images</h3>\n\nAdmittedly, it's fairly difficult to devise a \"natural\" syntax for\nplacing images into a plain text document format.\n\nMarkdown uses an image syntax that is intended to resemble the syntax\nfor links, allowing for two styles: *inline* and *reference*.\n\nInline image syntax looks like this:\n\n    ![Alt text](/path/to/img.jpg)\n\n    ![Alt text](/path/to/img.jpg \"Optional title\")\n\nThat is:\n\n*   An exclamation mark: `!`;\n*   followed by a set of square brackets, containing the `alt`\n    attribute text for the image;\n*   followed by a set of parentheses, containing the URL or path to\n    the image, and an optional `title` attribute enclosed in double\n    or single quotes.\n\nReference-style image syntax looks like this:\n\n    ![Alt text][id]\n\nWhere \"id\" is the name of a defined image reference. Image references\nare defined using syntax identical to link references:\n\n    [id]: url/to/image  \"Optional title attribute\"\n\nAs of this writing, Markdown has no syntax for specifying the\ndimensions of an image; if this is important to you, you can simply\nuse regular HTML `<img>` tags.\n\n\n* * *\n\n\n<h2 id=\"misc\">Miscellaneous</h2>\n\n<h3 id=\"autolink\">Automatic Links</h3>\n\nMarkdown supports a shortcut style for creating \"automatic\" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:\n\n    <http://example.com/>\n    \nMarkdown will turn this into:\n\n    <a href=\"http://example.com/\">http://example.com/</a>\n\nAutomatic links for email addresses work similarly, except that\nMarkdown will also perform a bit of randomized decimal and hex\nentity-encoding to help obscure your address from address-harvesting\nspambots. For example, Markdown will turn this:\n\n    <address@example.com>\n\ninto something like this:\n\n    <a href=\"&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;\n    &#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;\n    &#109;\">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;\n    &#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>\n\nwhich will render in a browser as a clickable link to \"address@example.com\".\n\n(This sort of entity-encoding trick will indeed fool many, if not\nmost, address-harvesting bots, but it definitely won't fool all of\nthem. It's better than nothing, but an address published in this way\nwill probably eventually start receiving spam.)\n\n\n\n<h3 id=\"backslash\">Backslash Escapes</h3>\n\nMarkdown allows you to use backslash escapes to generate literal\ncharacters which would otherwise have special meaning in Markdown's\nformatting syntax. For example, if you wanted to surround a word with\nliteral asterisks (instead of an HTML `<em>` tag), you can backslashes\nbefore the asterisks, like this:\n\n    \\*literal asterisks\\*\n\nMarkdown provides backslash escapes for the following characters:\n\n    \\   backslash\n    `   backtick\n    *   asterisk\n    _   underscore\n    {}  curly braces\n    []  square brackets\n    ()  parentheses\n    #   hash mark\n\t+\tplus sign\n\t-\tminus sign (hyphen)\n    .   dot\n    !   exclamation mark\n\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Markdown_Documentation_-_Syntax.xhtml",
    "content": "<h1>Markdown: Syntax</h1>\n\n<ul id=\"ProjectSubmenu\">\n    <li><a href=\"/projects/markdown/\" title=\"Markdown Project Page\">Main</a></li>\n    <li><a href=\"/projects/markdown/basics\" title=\"Markdown Basics\">Basics</a></li>\n    <li><a class=\"selected\" title=\"Markdown Syntax Documentation\">Syntax</a></li>\n    <li><a href=\"/projects/markdown/license\" title=\"Pricing and License Information\">License</a></li>\n    <li><a href=\"/projects/markdown/dingus\" title=\"Online Markdown Web Form\">Dingus</a></li>\n</ul>\n\n<ul>\n<li><a href=\"#overview\">Overview</a>\n<ul>\n<li><a href=\"#philosophy\">Philosophy</a></li>\n<li><a href=\"#html\">Inline HTML</a></li>\n<li><a href=\"#autoescape\">Automatic Escaping for Special Characters</a></li>\n</ul></li>\n<li><a href=\"#block\">Block Elements</a>\n<ul>\n<li><a href=\"#p\">Paragraphs and Line Breaks</a></li>\n<li><a href=\"#header\">Headers</a></li>\n<li><a href=\"#blockquote\">Blockquotes</a></li>\n<li><a href=\"#list\">Lists</a></li>\n<li><a href=\"#precode\">Code Blocks</a></li>\n<li><a href=\"#hr\">Horizontal Rules</a></li>\n</ul></li>\n<li><a href=\"#span\">Span Elements</a>\n<ul>\n<li><a href=\"#link\">Links</a></li>\n<li><a href=\"#em\">Emphasis</a></li>\n<li><a href=\"#code\">Code</a></li>\n<li><a href=\"#img\">Images</a></li>\n</ul></li>\n<li><a href=\"#misc\">Miscellaneous</a>\n<ul>\n<li><a href=\"#backslash\">Backslash Escapes</a></li>\n<li><a href=\"#autolink\">Automatic Links</a></li>\n</ul></li>\n</ul>\n\n<p><strong>Note:</strong> This document is itself written using Markdown; you\ncan <a href=\"/projects/markdown/syntax.text\">see the source for it by adding '.text' to the URL</a>.</p>\n\n<hr />\n\n<h2 id=\"overview\">Overview</h2>\n\n<h3 id=\"philosophy\">Philosophy</h3>\n\n<p>Markdown is intended to be as easy-to-read and easy-to-write as is feasible.</p>\n\n<p>Readability, however, is emphasized above all else. A Markdown-formatted\ndocument should be publishable as-is, as plain text, without looking\nlike it's been marked up with tags or formatting instructions. While\nMarkdown's syntax has been influenced by several existing text-to-HTML\nfilters -- including <a href=\"http://docutils.sourceforge.net/mirror/setext.html\">Setext</a>, <a href=\"http://www.aaronsw.com/2002/atx/\">atx</a>, <a href=\"http://textism.com/tools/textile/\">Textile</a>, <a href=\"http://docutils.sourceforge.net/rst.html\">reStructuredText</a>,\n<a href=\"http://www.triptico.com/software/grutatxt.html\">Grutatext</a>, and <a href=\"http://ettext.taint.org/doc/\">EtText</a> -- the single biggest source of\ninspiration for Markdown's syntax is the format of plain text email.</p>\n\n<p>To this end, Markdown's syntax is comprised entirely of punctuation\ncharacters, which punctuation characters have been carefully chosen so\nas to look like what they mean. E.g., asterisks around a word actually\nlook like *emphasis*. Markdown lists look like, well, lists. Even\nblockquotes look like quoted passages of text, assuming you've ever\nused email.</p>\n\n<h3 id=\"html\">Inline HTML</h3>\n\n<p>Markdown's syntax is intended for one purpose: to be used as a\nformat for <em>writing</em> for the web.</p>\n\n<p>Markdown is not a replacement for HTML, or even close to it. Its\nsyntax is very small, corresponding only to a very small subset of\nHTML tags. The idea is <em>not</em> to create a syntax that makes it easier\nto insert HTML tags. In my opinion, HTML tags are already easy to\ninsert. The idea for Markdown is to make it easy to read, write, and\nedit prose. HTML is a <em>publishing</em> format; Markdown is a <em>writing</em>\nformat. Thus, Markdown's formatting syntax only addresses issues that\ncan be conveyed in plain text.</p>\n\n<p>For any markup that is not covered by Markdown's syntax, you simply\nuse HTML itself. There's no need to preface it or delimit it to\nindicate that you're switching from Markdown to HTML; you just use\nthe tags.</p>\n\n<p>The only restrictions are that block-level HTML elements -- e.g. <code>&lt;div&gt;</code>,\n<code>&lt;table&gt;</code>, <code>&lt;pre&gt;</code>, <code>&lt;p&gt;</code>, etc. -- must be separated from surrounding\ncontent by blank lines, and the start and end tags of the block should\nnot be indented with tabs or spaces. Markdown is smart enough not\nto add extra (unwanted) <code>&lt;p&gt;</code> tags around HTML block-level tags.</p>\n\n<p>For example, to add an HTML table to a Markdown article:</p>\n\n<pre><code>This is a regular paragraph.\n\n&lt;table&gt;\n    &lt;tr&gt;\n        &lt;td&gt;Foo&lt;/td&gt;\n    &lt;/tr&gt;\n&lt;/table&gt;\n\nThis is another regular paragraph.\n</code></pre>\n\n<p>Note that Markdown formatting syntax is not processed within block-level\nHTML tags. E.g., you can't use Markdown-style <code>*emphasis*</code> inside an\nHTML block.</p>\n\n<p>Span-level HTML tags -- e.g. <code>&lt;span&gt;</code>, <code>&lt;cite&gt;</code>, or <code>&lt;del&gt;</code> -- can be\nused anywhere in a Markdown paragraph, list item, or header. If you\nwant, you can even use HTML tags instead of Markdown formatting; e.g. if\nyou'd prefer to use HTML <code>&lt;a&gt;</code> or <code>&lt;img&gt;</code> tags instead of Markdown's\nlink or image syntax, go right ahead.</p>\n\n<p>Unlike block-level HTML tags, Markdown syntax <em>is</em> processed within\nspan-level tags.</p>\n\n<h3 id=\"autoescape\">Automatic Escaping for Special Characters</h3>\n\n<p>In HTML, there are two characters that demand special treatment: <code>&lt;</code>\nand <code>&amp;</code>. Left angle brackets are used to start tags; ampersands are\nused to denote HTML entities. If you want to use them as literal\ncharacters, you must escape them as entities, e.g. <code>&amp;lt;</code>, and\n<code>&amp;amp;</code>.</p>\n\n<p>Ampersands in particular are bedeviling for web writers. If you want to\nwrite about 'AT&amp;T', you need to write '<code>AT&amp;amp;T</code>'. You even need to\nescape ampersands within URLs. Thus, if you want to link to:</p>\n\n<pre><code>http://images.google.com/images?num=30&amp;q=larry+bird\n</code></pre>\n\n<p>you need to encode the URL as:</p>\n\n<pre><code>http://images.google.com/images?num=30&amp;amp;q=larry+bird\n</code></pre>\n\n<p>in your anchor tag <code>href</code> attribute. Needless to say, this is easy to\nforget, and is probably the single most common source of HTML validation\nerrors in otherwise well-marked-up web sites.</p>\n\n<p>Markdown allows you to use these characters naturally, taking care of\nall the necessary escaping for you. If you use an ampersand as part of\nan HTML entity, it remains unchanged; otherwise it will be translated\ninto <code>&amp;amp;</code>.</p>\n\n<p>So, if you want to include a copyright symbol in your article, you can write:</p>\n\n<pre><code>&amp;copy;\n</code></pre>\n\n<p>and Markdown will leave it alone. But if you write:</p>\n\n<pre><code>AT&amp;T\n</code></pre>\n\n<p>Markdown will translate it to:</p>\n\n<pre><code>AT&amp;amp;T\n</code></pre>\n\n<p>Similarly, because Markdown supports <a href=\"#html\">inline HTML</a>, if you use\nangle brackets as delimiters for HTML tags, Markdown will treat them as\nsuch. But if you write:</p>\n\n<pre><code>4 &lt; 5\n</code></pre>\n\n<p>Markdown will translate it to:</p>\n\n<pre><code>4 &amp;lt; 5\n</code></pre>\n\n<p>However, inside Markdown code spans and blocks, angle brackets and\nampersands are <em>always</em> encoded automatically. This makes it easy to use\nMarkdown to write about HTML code. (As opposed to raw HTML, which is a\nterrible format for writing about HTML syntax, because every single <code>&lt;</code>\nand <code>&amp;</code> in your example code needs to be escaped.)</p>\n\n<hr />\n\n<h2 id=\"block\">Block Elements</h2>\n\n<h3 id=\"p\">Paragraphs and Line Breaks</h3>\n\n<p>A paragraph is simply one or more consecutive lines of text, separated\nby one or more blank lines. (A blank line is any line that looks like a\nblank line -- a line containing nothing but spaces or tabs is considered\nblank.) Normal paragraphs should not be intended with spaces or tabs.</p>\n\n<p>The implication of the \"one or more consecutive lines of text\" rule is\nthat Markdown supports \"hard-wrapped\" text paragraphs. This differs\nsignificantly from most other text-to-HTML formatters (including Movable\nType's \"Convert Line Breaks\" option) which translate every line break\ncharacter in a paragraph into a <code>&lt;br /&gt;</code> tag.</p>\n\n<p>When you <em>do</em> want to insert a <code>&lt;br /&gt;</code> break tag using Markdown, you\nend a line with two or more spaces, then type return.</p>\n\n<p>Yes, this takes a tad more effort to create a <code>&lt;br /&gt;</code>, but a simplistic\n\"every line break is a <code>&lt;br /&gt;</code>\" rule wouldn't work for Markdown.\nMarkdown's email-style <a href=\"#blockquote\">blockquoting</a> and multi-paragraph <a href=\"#list\">list items</a>\nwork best -- and look better -- when you format them with hard breaks.</p>\n\n<h3 id=\"header\">Headers</h3>\n\n<p>Markdown supports two styles of headers, <a href=\"http://docutils.sourceforge.net/mirror/setext.html\">Setext</a> and <a href=\"http://www.aaronsw.com/2002/atx/\">atx</a>.</p>\n\n<p>Setext-style headers are \"underlined\" using equal signs (for first-level\nheaders) and dashes (for second-level headers). For example:</p>\n\n<pre><code>This is an H1\n=============\n\nThis is an H2\n-------------\n</code></pre>\n\n<p>Any number of underlining <code>=</code>'s or <code>-</code>'s will work.</p>\n\n<p>Atx-style headers use 1-6 hash characters at the start of the line,\ncorresponding to header levels 1-6. For example:</p>\n\n<pre><code># This is an H1\n\n## This is an H2\n\n###### This is an H6\n</code></pre>\n\n<p>Optionally, you may \"close\" atx-style headers. This is purely\ncosmetic -- you can use this if you think it looks better. The\nclosing hashes don't even need to match the number of hashes\nused to open the header. (The number of opening hashes\ndetermines the header level.) :</p>\n\n<pre><code># This is an H1 #\n\n## This is an H2 ##\n\n### This is an H3 ######\n</code></pre>\n\n<h3 id=\"blockquote\">Blockquotes</h3>\n\n<p>Markdown uses email-style <code>&gt;</code> characters for blockquoting. If you're\nfamiliar with quoting passages of text in an email message, then you\nknow how to create a blockquote in Markdown. It looks best if you hard\nwrap the text and put a <code>&gt;</code> before every line:</p>\n\n<pre><code>&gt; This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,\n&gt; consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.\n&gt; Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.\n&gt; \n&gt; Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse\n&gt; id sem consectetuer libero luctus adipiscing.\n</code></pre>\n\n<p>Markdown allows you to be lazy and only put the <code>&gt;</code> before the first\nline of a hard-wrapped paragraph:</p>\n\n<pre><code>&gt; This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,\nconsectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.\nVestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.\n\n&gt; Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse\nid sem consectetuer libero luctus adipiscing.\n</code></pre>\n\n<p>Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by\nadding additional levels of <code>&gt;</code>:</p>\n\n<pre><code>&gt; This is the first level of quoting.\n&gt;\n&gt; &gt; This is nested blockquote.\n&gt;\n&gt; Back to the first level.\n</code></pre>\n\n<p>Blockquotes can contain other Markdown elements, including headers, lists,\nand code blocks:</p>\n\n<pre><code>&gt; ## This is a header.\n&gt; \n&gt; 1.   This is the first list item.\n&gt; 2.   This is the second list item.\n&gt; \n&gt; Here's some example code:\n&gt; \n&gt;     return shell_exec(\"echo $input | $markdown_script\");\n</code></pre>\n\n<p>Any decent text editor should make email-style quoting easy. For\nexample, with BBEdit, you can make a selection and choose Increase\nQuote Level from the Text menu.</p>\n\n<h3 id=\"list\">Lists</h3>\n\n<p>Markdown supports ordered (numbered) and unordered (bulleted) lists.</p>\n\n<p>Unordered lists use asterisks, pluses, and hyphens -- interchangably\n-- as list markers:</p>\n\n<pre><code>*   Red\n*   Green\n*   Blue\n</code></pre>\n\n<p>is equivalent to:</p>\n\n<pre><code>+   Red\n+   Green\n+   Blue\n</code></pre>\n\n<p>and:</p>\n\n<pre><code>-   Red\n-   Green\n-   Blue\n</code></pre>\n\n<p>Ordered lists use numbers followed by periods:</p>\n\n<pre><code>1.  Bird\n2.  McHale\n3.  Parish\n</code></pre>\n\n<p>It's important to note that the actual numbers you use to mark the\nlist have no effect on the HTML output Markdown produces. The HTML\nMarkdown produces from the above list is:</p>\n\n<pre><code>&lt;ol&gt;\n&lt;li&gt;Bird&lt;/li&gt;\n&lt;li&gt;McHale&lt;/li&gt;\n&lt;li&gt;Parish&lt;/li&gt;\n&lt;/ol&gt;\n</code></pre>\n\n<p>If you instead wrote the list in Markdown like this:</p>\n\n<pre><code>1.  Bird\n1.  McHale\n1.  Parish\n</code></pre>\n\n<p>or even:</p>\n\n<pre><code>3. Bird\n1. McHale\n8. Parish\n</code></pre>\n\n<p>you'd get the exact same HTML output. The point is, if you want to,\nyou can use ordinal numbers in your ordered Markdown lists, so that\nthe numbers in your source match the numbers in your published HTML.\nBut if you want to be lazy, you don't have to.</p>\n\n<p>If you do use lazy list numbering, however, you should still start the\nlist with the number 1. At some point in the future, Markdown may support\nstarting ordered lists at an arbitrary number.</p>\n\n<p>List markers typically start at the left margin, but may be indented by\nup to three spaces. List markers must be followed by one or more spaces\nor a tab.</p>\n\n<p>To make lists look nice, you can wrap items with hanging indents:</p>\n\n<pre><code>*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,\n    viverra nec, fringilla in, laoreet vitae, risus.\n*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\n    Suspendisse id sem consectetuer libero luctus adipiscing.\n</code></pre>\n\n<p>But if you want to be lazy, you don't have to:</p>\n\n<pre><code>*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\nAliquam hendrerit mi posuere lectus. Vestibulum enim wisi,\nviverra nec, fringilla in, laoreet vitae, risus.\n*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\nSuspendisse id sem consectetuer libero luctus adipiscing.\n</code></pre>\n\n<p>If list items are separated by blank lines, Markdown will wrap the\nitems in <code>&lt;p&gt;</code> tags in the HTML output. For example, this input:</p>\n\n<pre><code>*   Bird\n*   Magic\n</code></pre>\n\n<p>will turn into:</p>\n\n<pre><code>&lt;ul&gt;\n&lt;li&gt;Bird&lt;/li&gt;\n&lt;li&gt;Magic&lt;/li&gt;\n&lt;/ul&gt;\n</code></pre>\n\n<p>But this:</p>\n\n<pre><code>*   Bird\n\n*   Magic\n</code></pre>\n\n<p>will turn into:</p>\n\n<pre><code>&lt;ul&gt;\n&lt;li&gt;&lt;p&gt;Bird&lt;/p&gt;&lt;/li&gt;\n&lt;li&gt;&lt;p&gt;Magic&lt;/p&gt;&lt;/li&gt;\n&lt;/ul&gt;\n</code></pre>\n\n<p>List items may consist of multiple paragraphs. Each subsequent\nparagraph in a list item must be intended by either 4 spaces\nor one tab:</p>\n\n<pre><code>1.  This is a list item with two paragraphs. Lorem ipsum dolor\n    sit amet, consectetuer adipiscing elit. Aliquam hendrerit\n    mi posuere lectus.\n\n    Vestibulum enim wisi, viverra nec, fringilla in, laoreet\n    vitae, risus. Donec sit amet nisl. Aliquam semper ipsum\n    sit amet velit.\n\n2.  Suspendisse id sem consectetuer libero luctus adipiscing.\n</code></pre>\n\n<p>It looks nice if you indent every line of the subsequent\nparagraphs, but here again, Markdown will allow you to be\nlazy:</p>\n\n<pre><code>*   This is a list item with two paragraphs.\n\n    This is the second paragraph in the list item. You're\nonly required to indent the first line. Lorem ipsum dolor\nsit amet, consectetuer adipiscing elit.\n\n*   Another item in the same list.\n</code></pre>\n\n<p>To put a blockquote within a list item, the blockquote's <code>&gt;</code>\ndelimiters need to be indented:</p>\n\n<pre><code>*   A list item with a blockquote:\n\n    &gt; This is a blockquote\n    &gt; inside a list item.\n</code></pre>\n\n<p>To put a code block within a list item, the code block needs\nto be indented <em>twice</em> -- 8 spaces or two tabs:</p>\n\n<pre><code>*   A list item with a code block:\n\n        &lt;code goes here&gt;\n</code></pre>\n\n<p>It's worth noting that it's possible to trigger an ordered list by\naccident, by writing something like this:</p>\n\n<pre><code>1986. What a great season.\n</code></pre>\n\n<p>In other words, a <em>number-period-space</em> sequence at the beginning of a\nline. To avoid this, you can backslash-escape the period:</p>\n\n<pre><code>1986\\. What a great season.\n</code></pre>\n\n<h3 id=\"precode\">Code Blocks</h3>\n\n<p>Pre-formatted code blocks are used for writing about programming or\nmarkup source code. Rather than forming normal paragraphs, the lines\nof a code block are interpreted literally. Markdown wraps a code block\nin both <code>&lt;pre&gt;</code> and <code>&lt;code&gt;</code> tags.</p>\n\n<p>To produce a code block in Markdown, simply indent every line of the\nblock by at least 4 spaces or 1 tab. For example, given this input:</p>\n\n<pre><code>This is a normal paragraph:\n\n    This is a code block.\n</code></pre>\n\n<p>Markdown will generate:</p>\n\n<pre><code>&lt;p&gt;This is a normal paragraph:&lt;/p&gt;\n\n&lt;pre&gt;&lt;code&gt;This is a code block.\n&lt;/code&gt;&lt;/pre&gt;\n</code></pre>\n\n<p>One level of indentation -- 4 spaces or 1 tab -- is removed from each\nline of the code block. For example, this:</p>\n\n<pre><code>Here is an example of AppleScript:\n\n    tell application \"Foo\"\n        beep\n    end tell\n</code></pre>\n\n<p>will turn into:</p>\n\n<pre><code>&lt;p&gt;Here is an example of AppleScript:&lt;/p&gt;\n\n&lt;pre&gt;&lt;code&gt;tell application \"Foo\"\n    beep\nend tell\n&lt;/code&gt;&lt;/pre&gt;\n</code></pre>\n\n<p>A code block continues until it reaches a line that is not indented\n(or the end of the article).</p>\n\n<p>Within a code block, ampersands (<code>&amp;</code>) and angle brackets (<code>&lt;</code> and <code>&gt;</code>)\nare automatically converted into HTML entities. This makes it very\neasy to include example HTML source code using Markdown -- just paste\nit and indent it, and Markdown will handle the hassle of encoding the\nampersands and angle brackets. For example, this:</p>\n\n<pre><code>    &lt;div class=\"footer\"&gt;\n        &amp;copy; 2004 Foo Corporation\n    &lt;/div&gt;\n</code></pre>\n\n<p>will turn into:</p>\n\n<pre><code>&lt;pre&gt;&lt;code&gt;&amp;lt;div class=\"footer\"&amp;gt;\n    &amp;amp;copy; 2004 Foo Corporation\n&amp;lt;/div&amp;gt;\n&lt;/code&gt;&lt;/pre&gt;\n</code></pre>\n\n<p>Regular Markdown syntax is not processed within code blocks. E.g.,\nasterisks are just literal asterisks within a code block. This means\nit's also easy to use Markdown to write about Markdown's own syntax.</p>\n\n<h3 id=\"hr\">Horizontal Rules</h3>\n\n<p>You can produce a horizontal rule tag (<code>&lt;hr /&gt;</code>) by placing three or\nmore hyphens, asterisks, or underscores on a line by themselves. If you\nwish, you may use spaces between the hyphens or asterisks. Each of the\nfollowing lines will produce a horizontal rule:</p>\n\n<pre><code>* * *\n\n***\n\n*****\n\n- - -\n\n---------------------------------------\n\n_ _ _\n</code></pre>\n\n<hr />\n\n<h2 id=\"span\">Span Elements</h2>\n\n<h3 id=\"link\">Links</h3>\n\n<p>Markdown supports two style of links: <em>inline</em> and <em>reference</em>.</p>\n\n<p>In both styles, the link text is delimited by [square brackets].</p>\n\n<p>To create an inline link, use a set of regular parentheses immediately\nafter the link text's closing square bracket. Inside the parentheses,\nput the URL where you want the link to point, along with an <em>optional</em>\ntitle for the link, surrounded in quotes. For example:</p>\n\n<pre><code>This is [an example](http://example.com/ \"Title\") inline link.\n\n[This link](http://example.net/) has no title attribute.\n</code></pre>\n\n<p>Will produce:</p>\n\n<pre><code>&lt;p&gt;This is &lt;a href=\"http://example.com/\" title=\"Title\"&gt;\nan example&lt;/a&gt; inline link.&lt;/p&gt;\n\n&lt;p&gt;&lt;a href=\"http://example.net/\"&gt;This link&lt;/a&gt; has no\ntitle attribute.&lt;/p&gt;\n</code></pre>\n\n<p>If you're referring to a local resource on the same server, you can\nuse relative paths:</p>\n\n<pre><code>See my [About](/about/) page for details.\n</code></pre>\n\n<p>Reference-style links use a second set of square brackets, inside\nwhich you place a label of your choosing to identify the link:</p>\n\n<pre><code>This is [an example][id] reference-style link.\n</code></pre>\n\n<p>You can optionally use a space to separate the sets of brackets:</p>\n\n<pre><code>This is [an example] [id] reference-style link.\n</code></pre>\n\n<p>Then, anywhere in the document, you define your link label like this,\non a line by itself:</p>\n\n<pre><code>[id]: http://example.com/  \"Optional Title Here\"\n</code></pre>\n\n<p>That is:</p>\n\n<ul>\n<li>Square brackets containing the link identifier (optionally\nindented from the left margin using up to three spaces);</li>\n<li>followed by a colon;</li>\n<li>followed by one or more spaces (or tabs);</li>\n<li>followed by the URL for the link;</li>\n<li>optionally followed by a title attribute for the link, enclosed\nin double or single quotes.</li>\n</ul>\n\n<p>The link URL may, optionally, be surrounded by angle brackets:</p>\n\n<pre><code>[id]: &lt;http://example.com/&gt;  \"Optional Title Here\"\n</code></pre>\n\n<p>You can put the title attribute on the next line and use extra spaces\nor tabs for padding, which tends to look better with longer URLs:</p>\n\n<pre><code>[id]: http://example.com/longish/path/to/resource/here\n    \"Optional Title Here\"\n</code></pre>\n\n<p>Link definitions are only used for creating links during Markdown\nprocessing, and are stripped from your document in the HTML output.</p>\n\n<p>Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are <em>not</em> case sensitive. E.g. these two links:</p>\n\n<pre><code>[link text][a]\n[link text][A]\n</code></pre>\n\n<p>are equivalent.</p>\n\n<p>The <em>implicit link name</em> shortcut allows you to omit the name of the\nlink, in which case the link text itself is used as the name.\nJust use an empty set of square brackets -- e.g., to link the word\n\"Google\" to the google.com web site, you could simply write:</p>\n\n<pre><code>[Google][]\n</code></pre>\n\n<p>And then define the link:</p>\n\n<pre><code>[Google]: http://google.com/\n</code></pre>\n\n<p>Because link names may contain spaces, this shortcut even works for\nmultiple words in the link text:</p>\n\n<pre><code>Visit [Daring Fireball][] for more information.\n</code></pre>\n\n<p>And then define the link:</p>\n\n<pre><code>[Daring Fireball]: http://daringfireball.net/\n</code></pre>\n\n<p>Link definitions can be placed anywhere in your Markdown document. I\ntend to put them immediately after each paragraph in which they're\nused, but if you want, you can put them all at the end of your\ndocument, sort of like footnotes.</p>\n\n<p>Here's an example of reference links in action:</p>\n\n<pre><code>I get 10 times more traffic from [Google] [1] than from\n[Yahoo] [2] or [MSN] [3].\n\n  [1]: http://google.com/        \"Google\"\n  [2]: http://search.yahoo.com/  \"Yahoo Search\"\n  [3]: http://search.msn.com/    \"MSN Search\"\n</code></pre>\n\n<p>Using the implicit link name shortcut, you could instead write:</p>\n\n<pre><code>I get 10 times more traffic from [Google][] than from\n[Yahoo][] or [MSN][].\n\n  [google]: http://google.com/        \"Google\"\n  [yahoo]:  http://search.yahoo.com/  \"Yahoo Search\"\n  [msn]:    http://search.msn.com/    \"MSN Search\"\n</code></pre>\n\n<p>Both of the above examples will produce the following HTML output:</p>\n\n<pre><code>&lt;p&gt;I get 10 times more traffic from &lt;a href=\"http://google.com/\"\ntitle=\"Google\"&gt;Google&lt;/a&gt; than from\n&lt;a href=\"http://search.yahoo.com/\" title=\"Yahoo Search\"&gt;Yahoo&lt;/a&gt;\nor &lt;a href=\"http://search.msn.com/\" title=\"MSN Search\"&gt;MSN&lt;/a&gt;.&lt;/p&gt;\n</code></pre>\n\n<p>For comparison, here is the same paragraph written using\nMarkdown's inline link style:</p>\n\n<pre><code>I get 10 times more traffic from [Google](http://google.com/ \"Google\")\nthan from [Yahoo](http://search.yahoo.com/ \"Yahoo Search\") or\n[MSN](http://search.msn.com/ \"MSN Search\").\n</code></pre>\n\n<p>The point of reference-style links is not that they're easier to\nwrite. The point is that with reference-style links, your document\nsource is vastly more readable. Compare the above examples: using\nreference-style links, the paragraph itself is only 81 characters\nlong; with inline-style links, it's 176 characters; and as raw HTML,\nit's 234 characters. In the raw HTML, there's more markup than there\nis text.</p>\n\n<p>With Markdown's reference-style links, a source document much more\nclosely resembles the final output, as rendered in a browser. By\nallowing you to move the markup-related metadata out of the paragraph,\nyou can add links without interrupting the narrative flow of your\nprose.</p>\n\n<h3 id=\"em\">Emphasis</h3>\n\n<p>Markdown treats asterisks (<code>*</code>) and underscores (<code>_</code>) as indicators of\nemphasis. Text wrapped with one <code>*</code> or <code>_</code> will be wrapped with an\nHTML <code>&lt;em&gt;</code> tag; double <code>*</code>'s or <code>_</code>'s will be wrapped with an HTML\n<code>&lt;strong&gt;</code> tag. E.g., this input:</p>\n\n<pre><code>*single asterisks*\n\n_single underscores_\n\n**double asterisks**\n\n__double underscores__\n</code></pre>\n\n<p>will produce:</p>\n\n<pre><code>&lt;em&gt;single asterisks&lt;/em&gt;\n\n&lt;em&gt;single underscores&lt;/em&gt;\n\n&lt;strong&gt;double asterisks&lt;/strong&gt;\n\n&lt;strong&gt;double underscores&lt;/strong&gt;\n</code></pre>\n\n<p>You can use whichever style you prefer; the lone restriction is that\nthe same character must be used to open and close an emphasis span.</p>\n\n<p>Emphasis can be used in the middle of a word:</p>\n\n<pre><code>un*fucking*believable\n</code></pre>\n\n<p>But if you surround an <code>*</code> or <code>_</code> with spaces, it'll be treated as a\nliteral asterisk or underscore.</p>\n\n<p>To produce a literal asterisk or underscore at a position where it\nwould otherwise be used as an emphasis delimiter, you can backslash\nescape it:</p>\n\n<pre><code>\\*this text is surrounded by literal asterisks\\*\n</code></pre>\n\n<h3 id=\"code\">Code</h3>\n\n<p>To indicate a span of code, wrap it with backtick quotes (<code>`</code>).\nUnlike a pre-formatted code block, a code span indicates code within a\nnormal paragraph. For example:</p>\n\n<pre><code>Use the `printf()` function.\n</code></pre>\n\n<p>will produce:</p>\n\n<pre><code>&lt;p&gt;Use the &lt;code&gt;printf()&lt;/code&gt; function.&lt;/p&gt;\n</code></pre>\n\n<p>To include a literal backtick character within a code span, you can use\nmultiple backticks as the opening and closing delimiters:</p>\n\n<pre><code>``There is a literal backtick (`) here.``\n</code></pre>\n\n<p>which will produce this:</p>\n\n<pre><code>&lt;p&gt;&lt;code&gt;There is a literal backtick (`) here.&lt;/code&gt;&lt;/p&gt;\n</code></pre>\n\n<p>The backtick delimiters surrounding a code span may include spaces --\none after the opening, one before the closing. This allows you to place\nliteral backtick characters at the beginning or end of a code span:</p>\n\n<pre><code>A single backtick in a code span: `` ` ``\n\nA backtick-delimited string in a code span: `` `foo` ``\n</code></pre>\n\n<p>will produce:</p>\n\n<pre><code>&lt;p&gt;A single backtick in a code span: &lt;code&gt;`&lt;/code&gt;&lt;/p&gt;\n\n&lt;p&gt;A backtick-delimited string in a code span: &lt;code&gt;`foo`&lt;/code&gt;&lt;/p&gt;\n</code></pre>\n\n<p>With a code span, ampersands and angle brackets are encoded as HTML\nentities automatically, which makes it easy to include example HTML\ntags. Markdown will turn this:</p>\n\n<pre><code>Please don't use any `&lt;blink&gt;` tags.\n</code></pre>\n\n<p>into:</p>\n\n<pre><code>&lt;p&gt;Please don't use any &lt;code&gt;&amp;lt;blink&amp;gt;&lt;/code&gt; tags.&lt;/p&gt;\n</code></pre>\n\n<p>You can write this:</p>\n\n<pre><code>`&amp;#8212;` is the decimal-encoded equivalent of `&amp;mdash;`.\n</code></pre>\n\n<p>to produce:</p>\n\n<pre><code>&lt;p&gt;&lt;code&gt;&amp;amp;#8212;&lt;/code&gt; is the decimal-encoded\nequivalent of &lt;code&gt;&amp;amp;mdash;&lt;/code&gt;.&lt;/p&gt;\n</code></pre>\n\n<h3 id=\"img\">Images</h3>\n\n<p>Admittedly, it's fairly difficult to devise a \"natural\" syntax for\nplacing images into a plain text document format.</p>\n\n<p>Markdown uses an image syntax that is intended to resemble the syntax\nfor links, allowing for two styles: <em>inline</em> and <em>reference</em>.</p>\n\n<p>Inline image syntax looks like this:</p>\n\n<pre><code>![Alt text](/path/to/img.jpg)\n\n![Alt text](/path/to/img.jpg \"Optional title\")\n</code></pre>\n\n<p>That is:</p>\n\n<ul>\n<li>An exclamation mark: <code>!</code>;</li>\n<li>followed by a set of square brackets, containing the <code>alt</code>\nattribute text for the image;</li>\n<li>followed by a set of parentheses, containing the URL or path to\nthe image, and an optional <code>title</code> attribute enclosed in double\nor single quotes.</li>\n</ul>\n\n<p>Reference-style image syntax looks like this:</p>\n\n<pre><code>![Alt text][id]\n</code></pre>\n\n<p>Where \"id\" is the name of a defined image reference. Image references\nare defined using syntax identical to link references:</p>\n\n<pre><code>[id]: url/to/image  \"Optional title attribute\"\n</code></pre>\n\n<p>As of this writing, Markdown has no syntax for specifying the\ndimensions of an image; if this is important to you, you can simply\nuse regular HTML <code>&lt;img&gt;</code> tags.</p>\n\n<hr />\n\n<h2 id=\"misc\">Miscellaneous</h2>\n\n<h3 id=\"autolink\">Automatic Links</h3>\n\n<p>Markdown supports a shortcut style for creating \"automatic\" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:</p>\n\n<pre><code>&lt;http://example.com/&gt;\n</code></pre>\n\n<p>Markdown will turn this into:</p>\n\n<pre><code>&lt;a href=\"http://example.com/\"&gt;http://example.com/&lt;/a&gt;\n</code></pre>\n\n<p>Automatic links for email addresses work similarly, except that\nMarkdown will also perform a bit of randomized decimal and hex\nentity-encoding to help obscure your address from address-harvesting\nspambots. For example, Markdown will turn this:</p>\n\n<pre><code>&lt;address@example.com&gt;\n</code></pre>\n\n<p>into something like this:</p>\n\n<pre><code>&lt;a href=\"&amp;#x6D;&amp;#x61;i&amp;#x6C;&amp;#x74;&amp;#x6F;:&amp;#x61;&amp;#x64;&amp;#x64;&amp;#x72;&amp;#x65;\n&amp;#115;&amp;#115;&amp;#64;&amp;#101;&amp;#120;&amp;#x61;&amp;#109;&amp;#x70;&amp;#x6C;e&amp;#x2E;&amp;#99;&amp;#111;\n&amp;#109;\"&gt;&amp;#x61;&amp;#x64;&amp;#x64;&amp;#x72;&amp;#x65;&amp;#115;&amp;#115;&amp;#64;&amp;#101;&amp;#120;&amp;#x61;\n&amp;#109;&amp;#x70;&amp;#x6C;e&amp;#x2E;&amp;#99;&amp;#111;&amp;#109;&lt;/a&gt;\n</code></pre>\n\n<p>which will render in a browser as a clickable link to \"address@example.com\".</p>\n\n<p>(This sort of entity-encoding trick will indeed fool many, if not\nmost, address-harvesting bots, but it definitely won't fool all of\nthem. It's better than nothing, but an address published in this way\nwill probably eventually start receiving spam.)</p>\n\n<h3 id=\"backslash\">Backslash Escapes</h3>\n\n<p>Markdown allows you to use backslash escapes to generate literal\ncharacters which would otherwise have special meaning in Markdown's\nformatting syntax. For example, if you wanted to surround a word with\nliteral asterisks (instead of an HTML <code>&lt;em&gt;</code> tag), you can backslashes\nbefore the asterisks, like this:</p>\n\n<pre><code>\\*literal asterisks\\*\n</code></pre>\n\n<p>Markdown provides backslash escapes for the following characters:</p>\n\n<pre><code>\\   backslash\n`   backtick\n*   asterisk\n_   underscore\n{}  curly braces\n[]  square brackets\n()  parentheses\n#   hash mark\n+   plus sign\n-   minus sign (hyphen)\n.   dot\n!   exclamation mark\n</code></pre>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Nested_blockquotes.json",
    "content": "[\"html\", [\"blockquote\", [\"p\", \"foo\"],\n    [\"blockquote\", [\"p\", \"bar\"]],\n    [\"p\", \"foo\"]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Nested_blockquotes.text",
    "content": "> foo\n>\n> > bar\n>\n> foo\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Nested_blockquotes.xhtml",
    "content": "<blockquote>\n  <p>foo</p>\n  \n  <blockquote>\n    <p>bar</p>\n  </blockquote>\n  \n  <p>foo</p>\n</blockquote>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Ordered_and_unordered_lists.json",
    "content": "[\"html\", [\"h2\", \"Unordered\"], \"\\u000a\\u000a\", [\"p\", \"Asterisks tight:\"],\n    [\"ul\", [\"li\", \"asterisk 1\"],\n        [\"li\", \"asterisk 2\"],\n        [\"li\", \"asterisk 3\"]],\n    [\"p\", \"Asterisks loose:\"],\n    [\"ul\", [\"li\", [\"p\", \"asterisk 1\"]],\n        [\"li\", [\"p\", \"asterisk 2\"]],\n        [\"li\", [\"p\", \"asterisk 3\"]]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", \"Pluses tight:\"],\n    [\"ul\", [\"li\", \"Plus 1\"],\n        [\"li\", \"Plus 2\"],\n        [\"li\", \"Plus 3\"]],\n    [\"p\", \"Pluses loose:\"],\n    [\"ul\", [\"li\", [\"p\", \"Plus 1\"]],\n        [\"li\", [\"p\", \"Plus 2\"]],\n        [\"li\", [\"p\", \"Plus 3\"]]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", \"Minuses tight:\"],\n    [\"ul\", [\"li\", \"Minus 1\"],\n        [\"li\", \"Minus 2\"],\n        [\"li\", \"Minus 3\"]],\n    [\"p\", \"Minuses loose:\"],\n    [\"ul\", [\"li\", [\"p\", \"Minus 1\"]],\n        [\"li\", [\"p\", \"Minus 2\"]],\n        [\"li\", [\"p\", \"Minus 3\"]]], \"\\u000a\\u000a\", [\"h2\", \"Ordered\"], \"\\u000a\\u000a\", [\"p\", \"Tight:\"],\n    [\"ol\", [\"li\", \"First\"],\n        [\"li\", \"Second\"],\n        [\"li\", \"Third\"]],\n    [\"p\", \"and:\"],\n    [\"ol\", [\"li\", \"One\"],\n        [\"li\", \"Two\"],\n        [\"li\", \"Three\"]],\n    [\"p\", \"Loose using tabs:\"],\n    [\"ol\", [\"li\", [\"p\", \"First\"]],\n        [\"li\", [\"p\", \"Second\"]],\n        [\"li\", [\"p\", \"Third\"]]],\n    [\"p\", \"and using spaces:\"],\n    [\"ol\", [\"li\", [\"p\", \"One\"]],\n        [\"li\", [\"p\", \"Two\"]],\n        [\"li\", [\"p\", \"Three\"]]],\n    [\"p\", \"Multiple paragraphs:\"],\n    [\"ol\", [\"li\", [\"p\", \"Item 1, graf one.\"],\n        [\"p\", \"Item 2. graf two. The quick brown fox jumped over the lazy dog's\\u000aback.\"]],\n        [\"li\", [\"p\", \"Item 2.\"]],\n        [\"li\", [\"p\", \"Item 3.\"]]], \"\\u000a\\u000a\", [\"h2\", \"Nested\"], \"\\u000a\\u000a\", [\"ul\", [\"li\", \"Tab\\u000a\", [\"ul\", [\"li\", \"Tab\\u000a\", [\"ul\", [\"li\", \"Tab\"]]]]]],\n    [\"p\", \"Here's another:\"],\n    [\"ol\", [\"li\", \"First\"],\n        [\"li\", \"Second:\\u000a\", [\"ul\", [\"li\", \"Fee\"],\n            [\"li\", \"Fie\"],\n            [\"li\", \"Foe\"]]],\n        [\"li\", \"Third\"]],\n    [\"p\", \"Same thing but with paragraphs:\"],\n    [\"ol\", [\"li\", [\"p\", \"First\"]],\n        [\"li\", [\"p\", \"Second:\"],\n            [\"ul\", [\"li\", \"Fee\"],\n                [\"li\", \"Fie\"],\n                [\"li\", \"Foe\"]]],\n        [\"li\", [\"p\", \"Third\"]]],\n    [\"p\", \"This was an error in Markdown 1.0.1:\"],\n    [\"ul\", [\"li\", [\"p\", \"this\"],\n        [\"ul\", [\"li\", \"sub\"]],\n        [\"p\", \"that\"]]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Ordered_and_unordered_lists.text",
    "content": "## Unordered\n\nAsterisks tight:\n\n*\tasterisk 1\n*\tasterisk 2\n*\tasterisk 3\n\n\nAsterisks loose:\n\n*\tasterisk 1\n\n*\tasterisk 2\n\n*\tasterisk 3\n\n* * *\n\nPluses tight:\n\n+\tPlus 1\n+\tPlus 2\n+\tPlus 3\n\n\nPluses loose:\n\n+\tPlus 1\n\n+\tPlus 2\n\n+\tPlus 3\n\n* * *\n\n\nMinuses tight:\n\n-\tMinus 1\n-\tMinus 2\n-\tMinus 3\n\n\nMinuses loose:\n\n-\tMinus 1\n\n-\tMinus 2\n\n-\tMinus 3\n\n\n## Ordered\n\nTight:\n\n1.\tFirst\n2.\tSecond\n3.\tThird\n\nand:\n\n1. One\n2. Two\n3. Three\n\n\nLoose using tabs:\n\n1.\tFirst\n\n2.\tSecond\n\n3.\tThird\n\nand using spaces:\n\n1. One\n\n2. Two\n\n3. Three\n\nMultiple paragraphs:\n\n1.\tItem 1, graf one.\n\n\tItem 2. graf two. The quick brown fox jumped over the lazy dog's\n\tback.\n\t\n2.\tItem 2.\n\n3.\tItem 3.\n\n\n\n## Nested\n\n*\tTab\n\t*\tTab\n\t\t*\tTab\n\nHere's another:\n\n1. First\n2. Second:\n\t* Fee\n\t* Fie\n\t* Foe\n3. Third\n\nSame thing but with paragraphs:\n\n1. First\n\n2. Second:\n\t* Fee\n\t* Fie\n\t* Foe\n\n3. Third\n\n\nThis was an error in Markdown 1.0.1:\n\n*\tthis\n\n\t*\tsub\n\n\tthat\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Ordered_and_unordered_lists.xhtml",
    "content": "<h2>Unordered</h2>\n\n<p>Asterisks tight:</p>\n\n<ul>\n<li>asterisk 1</li>\n<li>asterisk 2</li>\n<li>asterisk 3</li>\n</ul>\n\n<p>Asterisks loose:</p>\n\n<ul>\n<li><p>asterisk 1</p></li>\n<li><p>asterisk 2</p></li>\n<li><p>asterisk 3</p></li>\n</ul>\n\n<hr />\n\n<p>Pluses tight:</p>\n\n<ul>\n<li>Plus 1</li>\n<li>Plus 2</li>\n<li>Plus 3</li>\n</ul>\n\n<p>Pluses loose:</p>\n\n<ul>\n<li><p>Plus 1</p></li>\n<li><p>Plus 2</p></li>\n<li><p>Plus 3</p></li>\n</ul>\n\n<hr />\n\n<p>Minuses tight:</p>\n\n<ul>\n<li>Minus 1</li>\n<li>Minus 2</li>\n<li>Minus 3</li>\n</ul>\n\n<p>Minuses loose:</p>\n\n<ul>\n<li><p>Minus 1</p></li>\n<li><p>Minus 2</p></li>\n<li><p>Minus 3</p></li>\n</ul>\n\n<h2>Ordered</h2>\n\n<p>Tight:</p>\n\n<ol>\n<li>First</li>\n<li>Second</li>\n<li>Third</li>\n</ol>\n\n<p>and:</p>\n\n<ol>\n<li>One</li>\n<li>Two</li>\n<li>Three</li>\n</ol>\n\n<p>Loose using tabs:</p>\n\n<ol>\n<li><p>First</p></li>\n<li><p>Second</p></li>\n<li><p>Third</p></li>\n</ol>\n\n<p>and using spaces:</p>\n\n<ol>\n<li><p>One</p></li>\n<li><p>Two</p></li>\n<li><p>Three</p></li>\n</ol>\n\n<p>Multiple paragraphs:</p>\n\n<ol>\n<li><p>Item 1, graf one.</p>\n\n<p>Item 2. graf two. The quick brown fox jumped over the lazy dog's\nback.</p></li>\n<li><p>Item 2.</p></li>\n<li><p>Item 3.</p></li>\n</ol>\n\n<h2>Nested</h2>\n\n<ul>\n<li>Tab\n<ul>\n<li>Tab\n<ul>\n<li>Tab</li>\n</ul></li>\n</ul></li>\n</ul>\n\n<p>Here's another:</p>\n\n<ol>\n<li>First</li>\n<li>Second:\n<ul>\n<li>Fee</li>\n<li>Fie</li>\n<li>Foe</li>\n</ul></li>\n<li>Third</li>\n</ol>\n\n<p>Same thing but with paragraphs:</p>\n\n<ol>\n<li><p>First</p></li>\n<li><p>Second:</p>\n\n<ul>\n<li>Fee</li>\n<li>Fie</li>\n<li>Foe</li>\n</ul></li>\n<li><p>Third</p></li>\n</ol>\n\n\n<p>This was an error in Markdown 1.0.1:</p>\n\n<ul>\n<li><p>this</p>\n\n<ul><li>sub</li></ul>\n\n<p>that</p></li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Strong_and_em_together.json",
    "content": "[\"html\", [\"p\", [\"strong\", [\"em\", \"This is strong and em.\"]]],\n    [\"p\", \"So is \", [\"strong\", [\"em\", \"this\"]], \" word.\"],\n    [\"p\", [\"strong\", [\"em\", \"This is strong and em.\"]]],\n    [\"p\", \"So is \", [\"strong\", [\"em\", \"this\"]], \" word.\"]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Strong_and_em_together.text",
    "content": "***This is strong and em.***\n\nSo is ***this*** word.\n\n___This is strong and em.___\n\nSo is ___this___ word.\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Strong_and_em_together.xhtml",
    "content": "<p><strong><em>This is strong and em.</em></strong></p>\n\n<p>So is <strong><em>this</em></strong> word.</p>\n\n<p><strong><em>This is strong and em.</em></strong></p>\n\n<p>So is <strong><em>this</em></strong> word.</p>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Tabs.json",
    "content": "[\"html\", [\"ul\", [\"li\", [\"p\", \"this is a list item\\u000aindented with tabs\"]],\n    [\"li\", [\"p\", \"this is a list item\\u000aindented with spaces\"]]],\n    [\"p\", \"Code:\"],\n    [\"pre\", [\"code\", \"this code block is indented by one tab\\u000a\"]],\n    [\"p\", \"And:\"],\n    [\"pre\", [\"code\", \"    this code block is indented by two tabs\\u000a\"]],\n    [\"p\", \"And:\"],\n    [\"pre\", [\"code\", \"+   this is an example list item\\u000a    indented with tabs\\u000a\\u000a+   this is an example list item\\u000a    indented with spaces\\u000a\"]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Tabs.text",
    "content": "+\tthis is a list item\n\tindented with tabs\n\n+   this is a list item\n    indented with spaces\n\nCode:\n\n\tthis code block is indented by one tab\n\nAnd:\n\n\t\tthis code block is indented by two tabs\n\nAnd:\n\n\t+\tthis is an example list item\n\t\tindented with tabs\n\t\n\t+   this is an example list item\n\t    indented with spaces\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Tabs.xhtml",
    "content": "<ul>\n<li><p>this is a list item\nindented with tabs</p></li>\n<li><p>this is a list item\nindented with spaces</p></li>\n</ul>\n\n<p>Code:</p>\n\n<pre><code>this code block is indented by one tab\n</code></pre>\n\n<p>And:</p>\n\n<pre><code>    this code block is indented by two tabs\n</code></pre>\n\n<p>And:</p>\n\n<pre><code>+   this is an example list item\n    indented with tabs\n\n+   this is an example list item\n    indented with spaces\n</code></pre>\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Tidyness.json",
    "content": "[\"html\", [\"blockquote\", [\"p\", \"A list within a blockquote:\"],\n    [\"ul\", [\"li\", \"asterisk 1\"],\n        [\"li\", \"asterisk 2\"],\n        [\"li\", \"asterisk 3\"]]]]\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Tidyness.text",
    "content": "> A list within a blockquote:\n> \n> *\tasterisk 1\n> *\tasterisk 2\n> *\tasterisk 3\n"
  },
  {
    "path": "test/fixtures/Markdown-from-MDTest1.1.mdtest/Tidyness.xhtml",
    "content": "<blockquote>\n<p>A list within a blockquote:</p>\n<ul>\n<li>asterisk 1</li>\n<li>asterisk 2</li>\n<li>asterisk 3</li>\n</ul>\n</blockquote>\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Backslash_escapes.json",
    "content": "[\"html\", [\"p\", \"Tricky combinaisons:\"],\n    [\"p\", \"backslash with \\\\-- two dashes\"],\n    [\"p\", \"backslash with \\\\> greater than\"],\n    [\"p\", \"\\\\[test](not a link)\"],\n    [\"p\", \"\\\\*no emphasis*\"]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Backslash_escapes.text",
    "content": "Tricky combinaisons:\r\rbackslash with \\\\-- two dashes\r\rbackslash with \\\\> greater than\r\r\\\\\\[test](not a link)\r\r\\\\\\*no emphasis*"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Backslash_escapes.xhtml",
    "content": "<p>Tricky combinaisons:</p>\r\r<p>backslash with \\-- two dashes</p>\r\r<p>backslash with \\> greater than</p>\r\r<p>\\[test](not a link)</p>\r\r<p>\\*no emphasis*</p>\r"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Code_Spans.json",
    "content": "[\"html\", [\"p\", \"From \", [\"code\", \"<!--\"], \" to \", [\"code\", \"-->\"], \"\\u000aon two lines.\"],\n    [\"p\", \"From \", [\"code\", \"<!--\"], \"\\u000ato \", [\"code\", \"-->\"], \"\\u000aon three lines.\"]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Code_Spans.text",
    "content": "From `<!--` to `-->`\non two lines.\n\nFrom `<!--`\nto `-->`\non three lines.\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Code_Spans.xhtml",
    "content": "<p>From <code>&lt;!--</code> to <code>--&gt;</code>\non two lines.</p>\n\n<p>From <code>&lt;!--</code>\nto <code>--&gt;</code>\non three lines.</p>\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Code_block_in_a_list_item.json",
    "content": "[\"html\", [\"ul\", [\"li\", [\"p\", \"List Item:\"],\n    [\"pre\", [\"code\", \"code block\\u000a\\u000awith a blank line\\u000a\"]],\n    [\"p\", \"within a list item.\"]]]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Code_block_in_a_list_item.text",
    "content": "\n*\tList Item:\n\n\t\tcode block\n\n\t\twith a blank line\n\n\twithin a list item."
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Code_block_in_a_list_item.xhtml",
    "content": "<ul>\n<li><p>List Item:</p>\n\n<pre><code>code block\n\nwith a blank line\n</code></pre>\n\n<p>within a list item.</p></li>\n</ul>"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Email_auto_links.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"mailto:michel.fortin@michelf.com\"\n},\n\"michel.fortin@michelf.com\"]],\n    [\"p\", \"International domain names: \", [\"a\", {\n        \"href\": \"mailto:help@tūdaliņ.lv\"\n    },\n    \"help@tūdaliņ.lv\"]]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Email_auto_links.text",
    "content": "<michel.fortin@michelf.com>\n\nInternational domain names: <help@tūdaliņ.lv>"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Email_auto_links.xhtml",
    "content": "<p><a href=\"&#109;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x2e;&#102;&#x6f;&#114;&#x74;&#105;&#x6e;&#64;&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x66;&#46;&#x63;&#111;&#x6d;\">&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x2e;&#102;&#x6f;&#114;&#x74;&#105;&#x6e;&#64;&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x66;&#46;&#x63;&#111;&#x6d;</a></p>\n\n<p>International domain names: <a href=\"&#x6d;&#97;&#105;&#x6c;&#x74;&#111;&#58;&#x68;&#x65;&#108;&#112;&#x40;&#x74;ū&#x64;&#x61;&#108;&#105;ņ&#46;&#108;&#x76;\">&#x68;&#x65;&#108;&#112;&#x40;&#x74;ū&#x64;&#x61;&#108;&#105;ņ&#46;&#108;&#x76;</a></p>\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Emphasis.json",
    "content": "[\"html\", [\"p\", \"Combined emphasis:\"],\n    [\"ol\", [\"li\", [\"strong\", [\"em\", \"test test\"]]],\n        [\"li\", [\"strong\", [\"em\", \"test test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"em\", [\"strong\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"em\", [\"strong\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]]],\n    [\"p\", \"Incorrect nesting:\"],\n    [\"ol\", [\"li\", \"*test  \", [\"strong\", \"test*  test\"]],\n        [\"li\", \"_test  \", [\"strong\", \"test_  test\"]],\n        [\"li\", \"**test  \", [\"em\", \"test\"], \"* test*\"],\n        [\"li\", \"__test  \", [\"em\", \"test\"], \"_ test_\"],\n        [\"li\", [\"em\", \"test   *test\"], \"  test*\"],\n        [\"li\", [\"em\", \"test   _test\"], \"  test_\"],\n        [\"li\", [\"strong\", \"test \", [\"strong\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", \"test \", [\"strong\", \"test\"], \" test\"]]],\n    [\"p\", \"No emphasis:\"],\n    [\"ol\", [\"li\", \"test*  test  *test\"],\n        [\"li\", \"test** test **test\"],\n        [\"li\", \"test_  test  _test\"],\n        [\"li\", \"test__ test __test\"]],\n    [\"p\", \"Middle-word emphasis (asterisks):\"],\n    [\"ol\", [\"li\", [\"em\", \"a\"], \"b\"],\n        [\"li\", \"a\", [\"em\", \"b\"]],\n        [\"li\", \"a\", [\"em\", \"b\"], \"c\"],\n        [\"li\", [\"strong\", \"a\"], \"b\"],\n        [\"li\", \"a\", [\"strong\", \"b\"]],\n        [\"li\", \"a\", [\"strong\", \"b\"], \"c\"]],\n    [\"p\", \"Middle-word emphasis (underscore):\"],\n    [\"ol\", [\"li\", [\"em\", \"a\"], \"b\"],\n        [\"li\", \"a\", [\"em\", \"b\"]],\n        [\"li\", \"a\", [\"em\", \"b\"], \"c\"],\n        [\"li\", [\"strong\", \"a\"], \"b\"],\n        [\"li\", \"a\", [\"strong\", \"b\"]],\n        [\"li\", \"a\", [\"strong\", \"b\"], \"c\"]],\n    [\"p\", \"my\", [\"em\", \"precious\"], \"file.txt\"], \"\\u000a\\u000a\", [\"h2\", \"Tricky Cases\"], \"\\u000a\\u000a\", [\"p\", \"E**. \", [\"strong\", \"Test\"], \" TestTestTest\"],\n    [\"p\", \"E**. \", [\"strong\", \"Test\"], \" Test Test Test\"]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Emphasis.text",
    "content": "Combined emphasis:\n\n1.  ***test test***\n2.  ___test test___\n3.  *test **test***\n4.  **test *test***\n5.  ***test* test**\n6.  ***test** test*\n7.  ***test* test**\n8.  **test *test***\n9.  *test **test***\n10. _test __test___\n11. __test _test___\n12. ___test_ test__\n13. ___test__ test_\n14. ___test_ test__\n15. __test _test___\n16. _test __test___\n\n\nIncorrect nesting:\n\n1.  *test  **test*  test**\n2.  _test  __test_  test__\n3.  **test  *test** test*\n4.  __test  _test__ test_\n5.  *test   *test*  test*\n6.  _test   _test_  test_\n7.  **test **test** test**\n8.  __test __test__ test__\n\n\n\nNo emphasis:\n\n1.  test*  test  *test\n2.  test** test **test\n3.  test_  test  _test\n4.  test__ test __test\n\n\n\nMiddle-word emphasis (asterisks):\n\n1.  *a*b\n2.   a*b*\n3.   a*b*c\n4. **a**b\n5.   a**b**\n6.   a**b**c\n\n\nMiddle-word emphasis (underscore):\n\n1.  _a_b\n2.   a_b_\n3.   a_b_c\n4. __a__b\n5.   a__b__\n6.   a__b__c\n\nmy_precious_file.txt\n\n\n## Tricky Cases\n\nE**. **Test** TestTestTest\n\nE**. **Test** Test Test Test\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Emphasis.xhtml",
    "content": "<p>Combined emphasis:</p>\n\n<ol>\n<li><strong><em>test test</em></strong></li>\n<li><strong><em>test test</em></strong></li>\n<li><em>test <strong>test</strong></em></li>\n<li><strong>test <em>test</em></strong></li>\n<li><strong><em>test</em> test</strong></li>\n<li><em><strong>test</strong> test</em></li>\n<li><strong><em>test</em> test</strong></li>\n<li><strong>test <em>test</em></strong></li>\n<li><em>test <strong>test</strong></em></li>\n<li><em>test <strong>test</strong></em></li>\n<li><strong>test <em>test</em></strong></li>\n<li><strong><em>test</em> test</strong></li>\n<li><em><strong>test</strong> test</em></li>\n<li><strong><em>test</em> test</strong></li>\n<li><strong>test <em>test</em></strong></li>\n<li><em>test <strong>test</strong></em></li>\n</ol>\n\n<p>Incorrect nesting:</p>\n\n<ol>\n<li>*test  <strong>test*  test</strong></li>\n<li>_test  <strong>test_  test</strong></li>\n<li>**test  <em>test</em>* test*</li>\n<li>__test  <em>test</em>_ test_</li>\n<li><em>test   *test</em>  test*</li>\n<li><em>test   _test</em>  test_</li>\n<li><strong>test <strong>test</strong> test</strong></li>\n<li><strong>test <strong>test</strong> test</strong></li>\n</ol>\n\n<p>No emphasis:</p>\n\n<ol>\n<li>test*  test  *test</li>\n<li>test** test **test</li>\n<li>test_  test  _test</li>\n<li>test__ test __test</li>\n</ol>\n\n<p>Middle-word emphasis (asterisks):</p>\n\n<ol>\n<li><em>a</em>b</li>\n<li>a<em>b</em></li>\n<li>a<em>b</em>c</li>\n<li><strong>a</strong>b</li>\n<li>a<strong>b</strong></li>\n<li>a<strong>b</strong>c</li>\n</ol>\n\n<p>Middle-word emphasis (underscore):</p>\n\n<ol>\n<li><em>a</em>b</li>\n<li>a<em>b</em></li>\n<li>a<em>b</em>c</li>\n<li><strong>a</strong>b</li>\n<li>a<strong>b</strong></li>\n<li>a<strong>b</strong>c</li>\n</ol>\n\n<p>my<em>precious</em>file.txt</p>\n\n<h2>Tricky Cases</h2>\n\n<p>E**. <strong>Test</strong> TestTestTest</p>\n\n<p>E**. <strong>Test</strong> Test Test Test</p>\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Headers.json",
    "content": "[\"html\", [\"h1\", \"Header\"], \"\\u000a\\u000a\", [\"h2\", \"Header\"], \"\\u000a\\u000a\", [\"h3\", \"Header\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"h1\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"h2\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"h3\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"h1\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"],\n    [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"h2\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"],\n    [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"h3\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Headers.text",
    "content": "Header\r======\r\rHeader\r------\r\r### Header\n\n - - -\n\nHeader\r======\rParagraph\r\rHeader\r------\rParagraph\r\r### Header\rParagraph\n\n - - -\n\nParagraph\rHeader\r======\rParagraph\r\rParagraph\rHeader\r------\rParagraph\r\rParagraph\r### Header\rParagraph"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Headers.xhtml",
    "content": "<h1>Header</h1>\n\n<h2>Header</h2>\n\n<h3>Header</h3>\n\n<hr />\n\n<h1>Header</h1>\n\n<p>Paragraph</p>\n\n<h2>Header</h2>\n\n<p>Paragraph</p>\n\n<h3>Header</h3>\n\n<p>Paragraph</p>\n\n<hr />\n\n<p>Paragraph</p>\n\n<h1>Header</h1>\n\n<p>Paragraph</p>\n\n<p>Paragraph</p>\n\n<h2>Header</h2>\n\n<p>Paragraph</p>\n\n<p>Paragraph</p>\n\n<h3>Header</h3>\n\n<p>Paragraph</p>\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Horizontal_Rules.json",
    "content": "[\"html\", [\"p\", \"Horizontal rules:\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", \"Not horizontal rules (testing for a bug in 1.0.1j):\"],\n    [\"p\", \"+++\"],\n    [\"p\", \",,,\"],\n    [\"p\", \"===\"],\n    [\"p\", \"???\"],\n    [\"p\", \"AAA\"],\n    [\"p\", \"jjj\"],\n    [\"p\", \"j j j\"],\n    [\"p\", \"n n n\"]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Horizontal_Rules.text",
    "content": "Horizontal rules:\n\n- - -\n \n* * *\n \n***\n \n---\n \n___\n\nNot horizontal rules (testing for a bug in 1.0.1j):\n\n+++\n\n,,,\n\n===\n\n???\n\nAAA\n\njjj\n\nj j j\n\nn n n\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Horizontal_Rules.xhtml",
    "content": "<p>Horizontal rules:</p>\n\n<hr />\n\n<hr />\n\n<hr />\n\n<hr />\n\n<hr />\n\n<p>Not horizontal rules (testing for a bug in 1.0.1j):</p>\n\n<p>+++</p>\n\n<p>,,,</p>\n\n<p>===</p>\n\n<p>???</p>\n\n<p>AAA</p>\n\n<p>jjj</p>\n\n<p>j j j</p>\n\n<p>n n n</p>\n\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Simple).html",
    "content": "<p>With some attributes:</p>\n\n<div id=\"test\">\n    foo\n</div>\n\n<div id=\"test\"\n     class=\"nono\">\n    foo\n</div>\n\n<p>Hr's:</p>\n\n<hr class=\"foo\"\n    id=\"bar\" >"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Simple).json",
    "content": "[\"html\", [\"p\", \"With some attributes:\"], \"\\u000a\\u000a\", [\"div\", {\n    \"id\": \"test\"\n},\n\"\\u000a    foo\\u000a\"], \"\\u000a\\u000a\", [\"div\", {\n    \"id\": \"test\",\n    \"class\": \"nono\"\n},\n\"\\u000a    foo\\u000a\"], \"\\u000a\\u000a\", [\"p\", \"Hr's:\"], \"\\u000a\\u000a\", [\"hr\", {\n    \"class\": \"foo\",\n    \"id\": \"bar\"\n}]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Simple).text",
    "content": "With some attributes:\n\n<div id=\"test\">\n\tfoo\n</div>\n\n<div id=\"test\"\n     class=\"nono\">\n\tfoo\n</div>\n\t\nHr's:\n\n<hr class=\"foo\"\n    id=\"bar\" >\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Span).json",
    "content": "[\"html\", [\"p\", [\"abbr\", {\n    \"title\": \"` **Attribute Content Is Not A Code Span** `\"\n},\n\"ACINACS\"]],\n    [\"p\", [\"abbr\", {\n        \"title\": \"`first backtick!\"\n    },\n    \"SB\"], \" \\u000a\", [\"abbr\", {\n        \"title\": \"`second backtick!\"\n    },\n    \"SB\"]]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Span).text",
    "content": "<abbr title=\"` **Attribute Content Is Not A Code Span** `\">ACINACS</abbr>\n\n<abbr title=\"`first backtick!\">SB</abbr> \n<abbr title=\"`second backtick!\">SB</abbr>"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Inline_HTML_(Span).xhtml",
    "content": "<p><abbr title=\"` **Attribute Content Is Not A Code Span** `\">ACINACS</abbr></p>\n\n<p><abbr title=\"`first backtick!\">SB</abbr> \n<abbr title=\"`second backtick!\">SB</abbr></p>"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Inline_HTML_comments.html",
    "content": "<p>Paragraph one.</p>\n\n<!-- double--dash (invalid SGML comment) -->\n\n<p>Paragraph two.</p>\n\n<!-- enclosed tag </div> -->\n\n<p>The end.</p>\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Inline_HTML_comments.json",
    "content": "[\"html\", [\"p\", \"Paragraph one.\"], \"\\u000a\\u000a\", \"\\u000a\\u000a\", [\"p\", \"Paragraph two.\"], \"\\u000a\\u000a\", \"\\u000a\\u000a\", [\"p\", \"The end.\"]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Inline_HTML_comments.text",
    "content": "Paragraph one.\n\n<!-- double--dash (invalid SGML comment) -->\n\nParagraph two.\n\n<!-- enclosed tag </div> -->\n\nThe end.\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Ins_and_del.json",
    "content": "[\"html\", [\"p\", \"Here is a block tag ins:\"], \"\\u000a\\u000a\", [\"ins\", [\"p\", \"Some text\"]], \"\\u000a\\u000a\", [\"p\", [\"ins\", \"And here it is inside a paragraph.\"]],\n    [\"p\", \"And here it is \", [\"ins\", \"in the middle of\"], \" a paragraph.\"], \"\\u000a\\u000a\", [\"del\", [\"p\", \"Some text\"]], \"\\u000a\\u000a\", [\"p\", [\"del\", \"And here is ins as a paragraph.\"]],\n    [\"p\", \"And here it is \", [\"del\", \"in the middle of\"], \" a paragraph.\"]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Ins_and_del.text",
    "content": "Here is a block tag ins:\n\n<ins>\n<p>Some text</p>\n</ins>\n\n<ins>And here it is inside a paragraph.</ins>\n\nAnd here it is <ins>in the middle of</ins> a paragraph.\n\n<del>\n<p>Some text</p>\n</del>\n\n<del>And here is ins as a paragraph.</del>\n\nAnd here it is <del>in the middle of</del> a paragraph.\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Ins_and_del.xhtml",
    "content": "<p>Here is a block tag ins:</p>\n\n<ins>\n<p>Some text</p>\n</ins>\n\n<p><ins>And here it is inside a paragraph.</ins></p>\n\n<p>And here it is <ins>in the middle of</ins> a paragraph.</p>\n\n<del>\n<p>Some text</p>\n</del>\n\n<p><del>And here is ins as a paragraph.</del></p>\n\n<p>And here it is <del>in the middle of</del> a paragraph.</p>\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Links_inline_style.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"?}]*+|&)\"\n},\n\"silly URL w/ angle brackets\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Links_inline_style.text",
    "content": "[silly URL w/ angle brackets](<?}]*+|&)>).\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Links_inline_style.xhtml",
    "content": "<p><a href=\"?}]*+|&amp;)\">silly URL w/ angle brackets</a>.</p>\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/MD5_Hashes.json",
    "content": "[\"html\", [\"h1\", \"Character Escapes\"], \"\\u000a\\u000a\", [\"p\", \"The MD5 value for \", [\"code\", \"+\"], \" is \\\"26b17225b626fb9238849fd60eabdf60\\\".\"], \"\\u000a\\u000a\", [\"h1\", \"HTML Blocks\"], \"\\u000a\\u000a\", [\"p\", \"test\"],\n    [\"p\", \"The MD5 value for \", [\"code\", \"<p>test</p>\"], \" is:\"],\n    [\"p\", \"6205333b793f34273d75379350b36826\"]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/MD5_Hashes.text",
    "content": "# Character Escapes\n\nThe MD5 value for `+` is \"26b17225b626fb9238849fd60eabdf60\".\n\n# HTML Blocks\n\n<p>test</p>\n\nThe MD5 value for `<p>test</p>` is:\n\n6205333b793f34273d75379350b36826"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/MD5_Hashes.xhtml",
    "content": "<h1>Character Escapes</h1>\n\n<p>The MD5 value for <code>+</code> is \"26b17225b626fb9238849fd60eabdf60\".</p>\n\n<h1>HTML Blocks</h1>\n\n<p>test</p>\n\n<p>The MD5 value for <code>&lt;p&gt;test&lt;/p&gt;</code> is:</p>\n\n<p>6205333b793f34273d75379350b36826</p>\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Nesting.json",
    "content": "[\"html\", [\"p\", \"Valid nesting:\"],\n    [\"p\", [\"strong\", [\"a\", {\n        \"href\": \"url\"\n    },\n    \"Link\"]]],\n    [\"p\", [\"a\", {\n        \"href\": \"url\"\n    },\n    [\"strong\", \"Link\"]]],\n    [\"p\", [\"strong\", [\"a\", {\n        \"href\": \"url\"\n    },\n    [\"strong\", \"Link\"]]]],\n    [\"p\", \"Invalid nesting:\"],\n    [\"p\", [\"a\", {\n        \"href\": \"url\"\n    },\n    \"[Link](url)\"]]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Nesting.text",
    "content": "Valid nesting:\n\n**[Link](url)**\n\n[**Link**](url)\n\n**[**Link**](url)**\n\nInvalid nesting:\n\n[[Link](url)](url)"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Nesting.xhtml",
    "content": "<p>Valid nesting:</p>\n\n<p><strong><a href=\"url\">Link</a></strong></p>\n\n<p><a href=\"url\"><strong>Link</strong></a></p>\n\n<p><strong><a href=\"url\"><strong>Link</strong></a></strong></p>\n\n<p>Invalid nesting:</p>\n\n<p><a href=\"url\">[Link](url)</a></p>\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/PHP-Specific_Bugs.json",
    "content": "[\"html\", [\"p\", \"This tests for a bug where quotes escaped by PHP when using \\u000a\", [\"code\", \"preg_replace\"], \" with the \", [\"code\", \"/e\"], \" modifier must be correctly unescaped\\u000a(hence the \", [\"code\", \"_UnslashQuotes\"], \" function found only in PHP Markdown).\"],\n    [\"p\", \"Headers below should appear exactly as they are typed (no backslash\\u000aadded or removed).\"], \"\\u000a\\u000a\", [\"h1\", \"Header \\\"quoted\\\\\\\" again \\\\\\\"\\\"\"], \"\\u000a\\u000a\", [\"h2\", \"Header \\\"quoted\\\\\\\" again \\\\\\\"\\\"\"], \"\\u000a\\u000a\", [\"h3\", \"Header \\\"quoted\\\\\\\" again \\\\\\\"\\\"\"], \"\\u000a\\u000a\", [\"p\", \"Test with tabs for \", [\"code\", \"_Detab\"], \":\"],\n    [\"pre\", [\"code\", \"Code    'block' with    some    \\\"tabs\\\"  and \\\"quotes\\\"\\u000a\"]]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/PHP-Specific_Bugs.text",
    "content": "This tests for a bug where quotes escaped by PHP when using \n`preg_replace` with the `/e` modifier must be correctly unescaped\n(hence the `_UnslashQuotes` function found only in PHP Markdown).\n\n\n\nHeaders below should appear exactly as they are typed (no backslash\nadded or removed).\n\nHeader \"quoted\\\" again \\\\\"\"\n===========================\n\nHeader \"quoted\\\" again \\\\\"\"\n---------------------------\n\n### Header \"quoted\\\" again \\\\\"\" ###\n\n\n\nTest with tabs for `_Detab`:\n\n\tCode\t'block'\twith\tsome\t\"tabs\"\tand\t\"quotes\"\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/PHP-Specific_Bugs.xhtml",
    "content": "<p>This tests for a bug where quotes escaped by PHP when using \n<code>preg_replace</code> with the <code>/e</code> modifier must be correctly unescaped\n(hence the <code>_UnslashQuotes</code> function found only in PHP Markdown).</p>\n\n<p>Headers below should appear exactly as they are typed (no backslash\nadded or removed).</p>\n\n<h1>Header \"quoted\\\" again \\\"\"</h1>\n\n<h2>Header \"quoted\\\" again \\\"\"</h2>\n\n<h3>Header \"quoted\\\" again \\\"\"</h3>\n\n<p>Test with tabs for <code>_Detab</code>:</p>\n\n<pre><code>Code    'block' with    some    \"tabs\"  and \"quotes\"\n</code></pre>\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Parens_in_URL.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"/url(test)\",\n    \"title\": \"title\"\n},\n\"Inline link 1 with parens\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url(test)\",\n        \"title\": \"title\"\n    },\n    \"Inline link 2 with parens\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url(test)\",\n        \"title\": \"title\"\n    },\n    \"Inline link 3 with non-escaped parens\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url(test)\",\n        \"title\": \"title\"\n    },\n    \"Inline link 4 with non-escaped parens\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url(test)\",\n        \"title\": \"title\"\n    },\n    \"Reference link 1 with parens\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url(test)\",\n        \"title\": \"title\"\n    },\n    \"Reference link 2 with parens\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Parens_in_URL.text",
    "content": "[Inline link 1 with parens](/url\\(test\\) \"title\").\n\n[Inline link 2 with parens](</url\\(test\\)> \"title\").\n\n[Inline link 3 with non-escaped parens](/url(test) \"title\").\n\n[Inline link 4 with non-escaped parens](</url(test)> \"title\").\n\n[Reference link 1 with parens][1].\n\n[Reference link 2 with parens][2].\n\n  [1]: /url(test) \"title\"\n  [2]: </url(test)> \"title\"\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Parens_in_URL.xhtml",
    "content": "<p><a href=\"/url(test)\" title=\"title\">Inline link 1 with parens</a>.</p>\n\n<p><a href=\"/url(test)\" title=\"title\">Inline link 2 with parens</a>.</p>\n\n<p><a href=\"/url(test)\" title=\"title\">Inline link 3 with non-escaped parens</a>.</p>\n\n<p><a href=\"/url(test)\" title=\"title\">Inline link 4 with non-escaped parens</a>.</p>\n\n<p><a href=\"/url(test)\" title=\"title\">Reference link 1 with parens</a>.</p>\n\n<p><a href=\"/url(test)\" title=\"title\">Reference link 2 with parens</a>.</p>"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Tight_blocks.json",
    "content": "[\"html\", [\"p\", \"Paragraph and no space:\\u000a* ciao\"],\n    [\"p\", \"Paragraph and 1 space:\\u000a * ciao\"],\n    [\"p\", \"Paragraph and 3 spaces:\\u000a  * ciao\"],\n    [\"p\", \"Paragraph and 4 spaces:\\u000a   * ciao\"],\n    [\"p\", \"Paragraph before header:\"], \"\\u000a\\u000a\", [\"h1\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph before blockquote:\"],\n    [\"blockquote\", [\"p\", \"Some quote.\"]]]\n"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Tight_blocks.text",
    "content": "Paragraph and no space:\r* ciao\r\rParagraph and 1 space:\r * ciao\r\rParagraph and 3 spaces:\r  * ciao\r\rParagraph and 4 spaces:\r   * ciao\r\rParagraph before header:\r#Header\r\rParagraph before blockquote:\r>Some quote.\r"
  },
  {
    "path": "test/fixtures/PHP_Markdown-from-MDTest1.1.mdtest/Tight_blocks.xhtml",
    "content": "<p>Paragraph and no space:\n* ciao</p>\n\n<p>Paragraph and 1 space:\n * ciao</p>\n\n<p>Paragraph and 3 spaces:\n  * ciao</p>\n\n<p>Paragraph and 4 spaces:\n   * ciao</p>\n\n<p>Paragraph before header:</p>\n\n<h1>Header</h1>\n\n<p>Paragraph before blockquote:</p>\n\n<blockquote>\n  <p>Some quote.</p>\n</blockquote>\n"
  },
  {
    "path": "test/fixtures/README",
    "content": "All of these tests (so far) were copied from:\n\n  github.com/bobtfish/text-markdown/t @ 29ffc3\n\nwhich is licensed as follows:\n\nCopyright (c) 2004, John Gruber\n<http://daringfireball.net/>\nAll rights reserved.\n\nMultiMarkdown changes Copyright (c) 2005-2006 Fletcher T. Penney\n<http://fletcher.freeshell.org/> All rights reserved.\n\nText::MultiMarkdown changes Copyright (c) 2006-2009 Darren Kulp\n<http://kulp.ch> and Tomas Doran <http://www.bobtfish.net>\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n* Redistributions of source code must retain the above copyright notice,\n  this list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright\n  notice, this list of conditions and the following disclaimer in the\n  documentation and/or other materials provided with the distribution.\n\n* Neither the name \"Markdown\" nor the names of its contributors may\n  be used to endorse or promote products derived from this software\n  without specific prior written permission.\n\nThis software is provided by the copyright holders and contributors \"as\nis\" and any express or implied warranties, including, but not limited\nto, the implied warranties of merchantability and fitness for a\nparticular purpose are disclaimed. In no event shall the copyright owner\nor contributors be liable for any direct, indirect, incidental, special,\nexemplary, or consequential damages (including, but not limited to,\nprocurement of substitute goods or services; loss of use, data, or\nprofits; or business interruption) however caused and on any theory of\nliability, whether in contract, strict liability, or tort (including\nnegligence or otherwise) arising in any way out of the use of this\nsoftware, even if advised of the possibility of such damage.\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/CoreDumps5.8.json",
    "content": "[\"html\", [\"ul\", [\"li\", \"Unordered\\u000a\", [\"ol\", [\"li\", \"Ordered\"]]]],\n    [\"p\", \"Text\"],\n    [\"ul\", [\"li\", \"Unordered\\u000a\", [\"ol\", [\"li\", \"Ordered\"]]]]]\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/CoreDumps5.8.text",
    "content": "* Unordered\n1. Ordered\n\nText\n\n* Unordered\n1. Ordered\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/CoreDumps5.8.xhtml",
    "content": "<ul>\n<li>Unordered\n<ol>\n<li>Ordered</li>\n</ol></li>\n</ul>\n\n<p>Text</p>\n\n<ul>\n<li>Unordered\n<ol>\n<li>Ordered</li>\n</ol></li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Emphasis.json",
    "content": "[\"html\", [\"p\", [\"em\", \"M*A*S*H\"], \" here I am going with original Markdown..\"],\n    [\"p\", \"foo_bar_bas I am going with PHP Markdown Extra here (by default, there is an option for original style behavior - see\\u000adocs)..\"]]\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Emphasis.text",
    "content": "_M*A*S*H_ here I am going with original Markdown..\n\nfoo_bar_bas I am going with PHP Markdown Extra here (by default, there is an option for original style behavior - see\ndocs)..\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Emphasis.xhtml",
    "content": "<p><em>M*A*S*H</em> here I am going with original Markdown..</p>\n\n<p>foo_bar_bas I am going with PHP Markdown Extra here (by default, there is an option for original style behavior - see\ndocs)..</p>\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/HTML-Comment-encoding.json",
    "content": "[\"html\", [\"p\", \"A markdown paragraph with a comment that \", [\"em\", \"will\"], \" be processed by original Markdown. However MultiMarkdown and Pandoc do not convert the & sigil in the comment.. \"],\n    [\"p\", \"A paragraph \"],\n    [\"p\"]]\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/HTML-Comment-encoding.text",
    "content": "A markdown paragraph with a comment that *will* be processed by original Markdown. However MultiMarkdown and Pandoc do not convert the & sigil in the comment.. \n\nA paragraph <!-- This & *will* be converted by original Markdown -->\n\n<p><!-- This & will *not* be converted --></p>\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/HTML-Comment-encoding.xhtml",
    "content": "<p>A markdown paragraph with a comment that <em>will</em> be processed by original Markdown. However MultiMarkdown and Pandoc do not convert the &amp; sigil in the comment.. </p>\n\n<p>A paragraph <!-- This & *will* be converted by original Markdown --></p>\n\n<p><!-- This & will *not* be converted --></p>\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/HTML5-attributes.html",
    "content": "<h1 class=foo>foo</h1>\n\n<p class=bar>\nthis is a paragraph\n</p>\n\n<h2 class=bar>\nan h2\n</h2>\n\n<p>normal</p>\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/HTML5-attributes.json",
    "content": "[\"html\", [\"h1\", {\n    \"class\": \"foo\"\n},\n\"foo\"], \"\\u000a\\u000a\", [\"p\", {\n    \"class\": \"bar\"\n},\n\"\\u000athis is a paragraph\\u000a\"], \"\\u000a\\u000a\", [\"h2\", {\n    \"class\": \"bar\"\n},\n\"\\u000aan h2\\u000a\"], \"\\u000a\\u000a\", [\"p\", \"normal\"]]\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/HTML5-attributes.text",
    "content": "<h1 class=foo>foo</h1>\n\n<p class=bar>\nthis is a paragraph\n</p>\n\n<h2 class=bar>\nan h2\n</h2>\n\nnormal\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_brackets.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"http://en.wikipedia.org/wiki/ZIP_(file_format)\",\n    \"title\": \"ZIP (file format) - Wikipedia, the free encyclopedia\"\n},\n\"ZIP archives\"]]]\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_brackets.text",
    "content": "[ZIP archives](http://en.wikipedia.org/wiki/ZIP_(file_format) \"ZIP (file format) - Wikipedia, the free encyclopedia\")\n\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_brackets.xhtml",
    "content": "<p><a href=\"http://en.wikipedia.org/wiki/ZIP_(file_format)\" title=\"ZIP (file format) - Wikipedia, the free encyclopedia\">ZIP archives</a></p>\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_multiline_bugs_1.html",
    "content": "<p><a href=\"http://bugs.debian.org/459885\">http://bugs.debian.org/459885</a></p>\n\n<p><a href=\"/someurl/\">link \ntext</a></p>\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_multiline_bugs_1.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"http://bugs.debian.org/459885\"\n},\n\"http://bugs.debian.org/459885\"]],\n    [\"p\", [\"a\", {\n        \"href\": \"/someurl/\"\n    },\n    \"link \\u000atext\"]]]\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_multiline_bugs_1.text",
    "content": "<http://bugs.debian.org/459885>\n\n[link \ntext] [link\nid]\n\n[link id]: /someurl/\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_multiline_bugs_2.html",
    "content": "<p><a href=\"http://bugs.debian.org/459885\">http://bugs.debian.org/459885</a></p>\n\n<p>Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla bla. This is <a href=\"http://www.ua.es\">my <br />\nUniversity</a>.</p>\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_multiline_bugs_2.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"http://bugs.debian.org/459885\"\n},\n\"http://bugs.debian.org/459885\"]],\n    [\"p\", \"Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla bla. This is \", [\"a\", {\n        \"href\": \"http://www.ua.es\"\n    },\n    \"my \", [\"br\"], \"\\u000aUniversity\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_multiline_bugs_2.text",
    "content": "<http://bugs.debian.org/459885>\n\nBla, bla, bla, bla, bla, bla, bla, bla, bla, bla bla. This is [my  \nUniversity][].\n\n  [my university]: http://www.ua.es\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_reference_style.json",
    "content": "[\"html\", [\"p\", \"Foo \", [\"a\", {\n    \"href\": \"/url/\",\n    \"title\": \"Title\"\n},\n\"bar\"], \".\"],\n    [\"p\", \"Foo \", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"Title\"\n    },\n    \"bar\"], \".\"],\n    [\"p\", \"Foo \", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"Title\"\n    },\n    \"bar\"], \".\"],\n    [\"p\", \"With \", [\"a\", {\n        \"href\": \"/url/\"\n    },\n    \"embedded [brackets]\"], \".\"],\n    [\"p\", \"Indented \", [\"a\", {\n        \"href\": \"/url\"\n    },\n    \"once\"], \".\"],\n    [\"p\", \"Indented \", [\"a\", {\n        \"href\": \"/url\"\n    },\n    \"twice\"], \".\"],\n    [\"p\", \"Indented \", [\"a\", {\n        \"href\": \"/url\"\n    },\n    \"thrice\"], \".\"],\n    [\"p\", \"Indented [four][] times.\"],\n    [\"pre\", [\"code\", \"[four]: /url\\u000a\"]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", [\"a\", {\n    \"href\": \"foo\"\n},\n\"this\"], \" should work\"],\n    [\"p\", \"So should \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \".\"],\n    [\"p\", \"And \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \".\"],\n    [\"p\", \"And \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \".\"],\n    [\"p\", \"And \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \".\"],\n    [\"p\", \"But not [that] [].\"],\n    [\"p\", \"Nor [that][].\"],\n    [\"p\", \"Nor [that].\"],\n    [\"p\", \"[Something in brackets like \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \" should work]\"],\n    [\"p\", \"[Same with \", [\"a\", {\n        \"href\": \"foo\"\n    },\n    \"this\"], \".]\"],\n    [\"p\", \"In this case, \", [\"a\", {\n        \"href\": \"/somethingelse/\"\n    },\n    \"this\"], \" points to something else.\"],\n    [\"p\", \"Backslashing should suppress [this] and [this].\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", \"Here's one where the \", [\"a\", {\n    \"href\": \"/url/\"\n},\n\"link\\u000abreaks\"], \" across lines.\"],\n    [\"p\", \"Here's another where the \", [\"a\", {\n        \"href\": \"/url/\"\n    },\n    \"link \\u000abreaks\"], \" across lines, but with a line-ending space.\"],\n    [\"p\", \"More multi line edge cases. First a broken link id\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/someurl/\"\n    },\n    \"link \\u000atext\"]],\n    [\"p\", \"Then a line with 2 chars of trailing whitespace and a line break \", [\"a\", {\n        \"href\": \"http://www.ua.es\"\n    },\n    \"my \", [\"br\"], \"\\u000aUniversity\"], \".\"],\n    [\"p\", \"The a shortcut reference link with 2 chars of trailing whitespace and a line break \", [\"a\", {\n        \"href\": \"http://www.ua.es\"\n    },\n    \"my \", [\"br\"], \"\\u000aUniversity\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_reference_style.text",
    "content": "Foo [bar] [1].\n\nFoo [bar][1].\n\nFoo [bar]\n[1].\n\n[1]: /url/  \"Title\"\n\n\nWith [embedded [brackets]] [b].\n\n\nIndented [once][].\n\nIndented [twice][].\n\nIndented [thrice][].\n\nIndented [four][] times.\n\n [once]: /url\n\n  [twice]: /url\n\n   [thrice]: /url\n\n    [four]: /url\n\n\n[b]: /url/\n\n* * *\n\n[this] [this] should work\n\nSo should [this][this].\n\nAnd [this] [].\n\nAnd [this][].\n\nAnd [this].\n\nBut not [that] [].\n\nNor [that][].\n\nNor [that].\n\n[Something in brackets like [this][] should work]\n\n[Same with [this].]\n\nIn this case, [this](/somethingelse/) points to something else.\n\nBackslashing should suppress \\[this] and [this\\].\n\n[this]: foo\n\n\n* * *\n\nHere's one where the [link\nbreaks] across lines.\n\nHere's another where the [link \nbreaks] across lines, but with a line-ending space.\n\n\n[link breaks]: /url/\n\nMore multi line edge cases. First a broken link id\n\n[link \ntext] [link\nid]\n\n[link id]: /someurl/\n\nThen a line with 2 chars of trailing whitespace and a line break [my  \nUniversity][].\n\nThe a shortcut reference link with 2 chars of trailing whitespace and a line break [my  \nUniversity].\n\n  [my university]: http://www.ua.es"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Links_reference_style.xhtml",
    "content": "<p>Foo <a href=\"/url/\" title=\"Title\">bar</a>.</p>\n\n<p>Foo <a href=\"/url/\" title=\"Title\">bar</a>.</p>\n\n<p>Foo <a href=\"/url/\" title=\"Title\">bar</a>.</p>\n\n<p>With <a href=\"/url/\">embedded [brackets]</a>.</p>\n\n<p>Indented <a href=\"/url\">once</a>.</p>\n\n<p>Indented <a href=\"/url\">twice</a>.</p>\n\n<p>Indented <a href=\"/url\">thrice</a>.</p>\n\n<p>Indented [four][] times.</p>\n\n<pre><code>[four]: /url\n</code></pre>\n\n<hr />\n\n<p><a href=\"foo\">this</a> should work</p>\n\n<p>So should <a href=\"foo\">this</a>.</p>\n\n<p>And <a href=\"foo\">this</a>.</p>\n\n<p>And <a href=\"foo\">this</a>.</p>\n\n<p>And <a href=\"foo\">this</a>.</p>\n\n<p>But not [that] [].</p>\n\n<p>Nor [that][].</p>\n\n<p>Nor [that].</p>\n\n<p>[Something in brackets like <a href=\"foo\">this</a> should work]</p>\n\n<p>[Same with <a href=\"foo\">this</a>.]</p>\n\n<p>In this case, <a href=\"/somethingelse/\">this</a> points to something else.</p>\n\n<p>Backslashing should suppress [this] and [this].</p>\n\n<hr />\n\n<p>Here's one where the <a href=\"/url/\">link\nbreaks</a> across lines.</p>\n\n<p>Here's another where the <a href=\"/url/\">link \nbreaks</a> across lines, but with a line-ending space.</p>\n\n<p>More multi line edge cases. First a broken link id</p>\n\n<p><a href=\"/someurl/\">link \ntext</a></p>\n\n<p>Then a line with 2 chars of trailing whitespace and a line break <a href=\"http://www.ua.es\">my <br />\nUniversity</a>.</p>\n\n<p>The a shortcut reference link with 2 chars of trailing whitespace and a line break <a href=\"http://www.ua.es\">my <br />\nUniversity</a>.</p>\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Lists-multilevel-md5-edgecase.json",
    "content": "[\"html\", [\"h1\", \"text1\"], \"\\u000a\\u000a\", [\"ul\", [\"li\", [\"p\", \"text2\"],\n    [\"ul\", [\"li\", \"text3\"]],\n    [\"p\", \"text4\"]]], \"\\u000a\\u000a\", [\"h2\", \"text5\"], \"\\u000a\\u000a\", [\"ul\", [\"li\", [\"p\", \"text6\"],\n    [\"ul\", [\"li\", \"text7\"]],\n    [\"p\", \"text8\"]]], \"\\u000a\\u000a\", [\"h2\", \"text9\"], \"\\u000a\\u000a\", [\"ul\", [\"li\", [\"p\", \"text10\"],\n    [\"ul\", [\"li\", \"text11\"]],\n    [\"p\", \"text12\"],\n    [\"p\", \"text13\"]]]]\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Lists-multilevel-md5-edgecase.text",
    "content": "# text1\n\n  * text2\n\n    * text3\n\n    text4\n\n## text5\n\n  * text6\n\n    * text7\n\n  text8\n\n## text9\n\n  * text10\n\n    * text11\n\n    text12\n\n    text13\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Lists-multilevel-md5-edgecase.xhtml",
    "content": "<h1>text1</h1>\n\n<ul>\n<li><p>text2</p>\n\n<ul>\n<li>text3</li>\n</ul>\n\n<p>text4</p></li>\n</ul>\n\n<h2>text5</h2>\n\n<ul>\n<li><p>text6</p>\n\n<ul>\n<li>text7</li>\n</ul>\n\n<p>text8</p></li>\n</ul>\n\n<h2>text9</h2>\n\n<ul>\n<li><p>text10</p>\n\n<ul>\n<li>text11</li>\n</ul>\n\n<p>text12</p>\n\n<p>text13</p></li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/PHP-ASP_tags.json",
    "content": "[\"html\", [\"p\", \"I am going with the same as Markdown.pl 1.0.2b8 here. \", [\"em\", \"However\"], \" I reserve the right to also leave Template toolkit alone at a later date if I need to..\"], \"\\u000a\\u000a\", [\"foo\", {\n    \"ok\": \"ok\",\n    \"_\": \"_\"\n},\n\"\\u000a\\u000a\", \"\\u000a\\u000a\", [\"p\", \"[% template_toolkit %]\"]]]\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/PHP-ASP_tags.text",
    "content": "I am going with the same as Markdown.pl 1.0.2b8 here. *However* I reserve the right to also leave Template toolkit alone at a later date if I need to..\n\n<%foo ok %>\n\n<?php test_foo ?>\n\n[% template_toolkit %]"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/PHP-ASP_tags.xhtml",
    "content": "<p>I am going with the same as Markdown.pl 1.0.2b8 here. <em>However</em> I reserve the right to also leave Template toolkit alone at a later date if I need to..</p>\n\n<%foo ok %>\n\n<?php test_foo ?>\n\n<p>[% template_toolkit %]</p>\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Unicode.json",
    "content": "[\"html\", [\"blockquote\", [\"p\", \"Fo—o\"]],\n    [\"p\", \"μορεοϋερ\"],\n    [\"blockquote\", [\"p\", \"ßåř\"]]]\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Unicode.text",
    "content": "> Fo—o\n\nμορεοϋερ\n\n> ßåř\n"
  },
  {
    "path": "test/fixtures/Text-Markdown.mdtest/Unicode.xhtml",
    "content": "<blockquote>\n  <p>Fo—o</p>\n</blockquote>\n\n<p>μορεοϋερ</p>\n\n<blockquote>\n  <p>ßåř</p>\n</blockquote>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/abbreviations.html",
    "content": "<p>The <abbr title='Hyper Text Markup Language'>HTML</abbr> specification is maintained by the <abbr title='World Wide Web Consortium'>W3C</abbr>.</p>\n\n<p>Operation <abbr>Tigra Genesis</abbr> is going well.</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/abbreviations.json",
    "content": "[\"html\", [\"p\", \"The \", [\"abbr\", {\n    \"title\": \"Hyper Text Markup Language\"\n},\n\"HTML\"], \" specification is maintained by the \", [\"abbr\", {\n    \"title\": \"World Wide Web Consortium\"\n},\n\"W3C\"], \".\"],\n    [\"p\", \"Operation \", [\"abbr\", \"Tigra Genesis\"], \" is going well.\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/abbreviations.text",
    "content": "\nThe HTML specification is maintained by the W3C.\n\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\n\n\n\nOperation Tigra Genesis is going well.\n\n*[Tigra Genesis]:\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/alt.html",
    "content": "<p><img src='/foo.jpg' alt='bar' /></p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/alt.json",
    "content": "[\"html\", [\"p\", [\"img\", {\n    \"src\": \"/foo.jpg\",\n    \"alt\": \"bar\"\n}]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/alt.text",
    "content": " ![bar](/foo.jpg)\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/blank.html",
    "content": "<p>Linea 1</p>\n\n<p>Linea 2</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/blank.json",
    "content": "[\"html\", [\"p\", \"Linea 1\"],\n    [\"p\", \"Linea 2\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/blank.text",
    "content": "\nLinea 1\n\nLinea 2\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/blanks_in_code.html",
    "content": "<p>This block is composed of three lines:</p>\n\n<pre><code>one\n\nthree</code></pre>\n\n<p>This block is composed of 5</p>\n\n<pre><code>one\n\n\nfour</code></pre>\n\n<p>This block is composed of 2</p>\n\n<pre><code>two</code></pre>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/blanks_in_code.json",
    "content": "[\"html\", [\"p\", \"This block is composed of three lines:\"],\n    [\"pre\", [\"code\", \"one\\u000a\\u000athree\"]],\n    [\"p\", \"This block is composed of 5\"],\n    [\"pre\", [\"code\", \"one\\u000a\\u000a\\u000afour\"]],\n    [\"p\", \"This block is composed of 2\"],\n    [\"pre\", [\"code\", \"two\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/blanks_in_code.text",
    "content": "This block is composed of three lines:\n\n\tone\n\t\n\tthree\n\nThis block is composed of 5\n\n\t\n\tone\n\t\n\t\n\tfour\n\t\n\nThis block is composed of 2\n\n\t \n\ttwo\n\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/bug_def.html",
    "content": "<p><span>test</span>:</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/bug_def.json",
    "content": "[\"html\", [\"p\", [\"span\", \"test\"], \":\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/bug_def.text",
    "content": "[test][]:\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/bug_table.html",
    "content": "<p class='class1' style='color:red'>hello</p>\n<table class='class1' summary='Table summary' style='color:red'><thead><tr><th>h</th><th>h</th></tr></thead><tbody><tr><th scope='row' style='text-align: left;'> c1</th><td style='text-align: left;'>c2</td>\n</tr></tbody></table>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/bug_table.json",
    "content": "[\"html\", [\"p\", {\n    \"class\": \"class1\",\n    \"style\": \"color:red\"\n},\n\"hello\"], \"\\u000a\", [\"table\", {\n    \"class\": \"class1\",\n    \"summary\": \"Table summary\",\n    \"style\": \"color:red\"\n},\n[\"thead\", [\"tr\", [\"th\", \"h\"],\n    [\"th\", \"h\"]]],\n    [\"tbody\", [\"tr\", [\"th\", {\n        \"scope\": \"row\",\n        \"style\": \"text-align: left;\"\n    },\n    \" c1\"],\n        [\"td\", {\n            \"style\": \"text-align: left;\"\n        },\n        \"c2\"]]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/bug_table.text",
    "content": "\n\nhello\n{: summary=\"Table summary\" .class1 style=\"color:red\"}\n\nh         | h\n----------|--\n{:t}  c1  | c2\n{: summary=\"Table summary\" .class1 style=\"color:red\"}\n\n\n\n{:t: scope=\"row\"}\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/code.html",
    "content": "<p>Here is an example of AppleScript:</p>\n\n<pre><code>tell application &quot;Foo&quot;\n    beep\nend tell\n\ttab</code></pre>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/code.json",
    "content": "[\"html\", [\"p\", \"Here is an example of AppleScript:\"],\n    [\"pre\", [\"code\", \"tell application \\\"Foo\\\"\\u000a    beep\\u000aend tell\\u000a\\u0009tab\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/code.text",
    "content": "Here is an example of AppleScript:\n\n    tell application \"Foo\"\n        beep\n    end tell\n    \ttab\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/code2.html",
    "content": "<blockquote>\n<p>Code</p>\n\n<pre><code>Ciao</code></pre>\n</blockquote>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/code2.json",
    "content": "[\"html\", [\"blockquote\", [\"p\", \"Code\"],\n    [\"pre\", [\"code\", \"Ciao\"]]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/code2.text",
    "content": "> Code\n>\n>     Ciao\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/code3.html",
    "content": "<p>This is code (4 spaces):</p>\n\n<pre><code>Code</code></pre>\n\n<p>This is not code</p>\n\n<pre><code>Code</code></pre>\n\n<p>This is code (1 tab):</p>\n\n<pre><code>Code</code></pre>\n\n<p>This is not code</p>\n\n<pre><code>Code</code></pre>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/code3.json",
    "content": "[\"html\", [\"p\", \"This is code (4 spaces):\"],\n    [\"pre\", [\"code\", \"Code\"]],\n    [\"p\", \"This is not code\"],\n    [\"pre\", [\"code\", \"Code\"]],\n    [\"p\", \"This is code (1 tab):\"],\n    [\"pre\", [\"code\", \"Code\"]],\n    [\"p\", \"This is not code\"],\n    [\"pre\", [\"code\", \"Code\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/code3.text",
    "content": "\nThis is code (4 spaces):\n\n    Code\nThis is not code\n    \n    Code\n\nThis is code (1 tab):\n\n\tCode\nThis is not code\n\n\tCode\n\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/convert.pl",
    "content": "use strict;\nuse warnings;\nopen(LS, \"ls -1 *.md|\") or die;\nmy @list = <LS>;\nclose(LS);\n\nforeach (@list) {\n    chomp;\n    s/\\.md$//;\n    my ($markdown, $html) = convert_to_perl_test(\"$_.md\");\n    open(MD, \">$_.text\") or die;\n    print MD $markdown;\n    close(MD);\n    open(MD, \">$_.html\") or die;\n    print MD $html;\n    close(MD);\n}\n\nsub convert_to_perl_test {\n    my ($file) = @_;\n    my $FH;\n    open($FH, '<', $file) or die(\"Cannot open $file\");\n    my ($markdown, $html);\n    my @lines = <$FH>;\n    close($FH);\n    my $mode = 0;\n    foreach my $l (@lines) {\n        if ($l =~ /^\\*\\*\\*/) {\n            $mode = 0;\n            if ($l =~ /Markdown input/i) {\n                $mode = 1;\n            }\n            if ($l =~ /Output of to_html/) {\n                $mode = 2;\n            }\n        }\n        elsif ($mode > 0) {\n            if (1 == $mode) {\n                $markdown .= $l;\n            }\n            else {\n                $html .= $l;\n            }\n        }\n    }\n    return ($markdown, $html);\n}\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/data_loss.html",
    "content": "<ol>\n<li>abcd efgh ijkl</li>\n</ol>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/data_loss.json",
    "content": "[\"html\", [\"ol\", [\"li\", \"abcd efgh ijkl\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/data_loss.text",
    "content": "1. abcd\nefgh\nijkl\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/easy.html",
    "content": "<p><em>Hello!</em> how are <strong>you</strong>?</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/easy.json",
    "content": "[\"html\", [\"p\", [\"em\", \"Hello!\"], \" how are \", [\"strong\", \"you\"], \"?\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/easy.text",
    "content": "*Hello!* how are **you**?\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/email.html",
    "content": "<p>This is an email address: <a href='mailto:andrea@invalid.it'>&#097;&#110;&#100;&#114;&#101;&#097;&#064;&#105;&#110;&#118;&#097;&#108;&#105;&#100;&#046;&#105;&#116;</a></p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/email.json",
    "content": "[\"html\", [\"p\", \"This is an email address: \", [\"a\", {\n    \"href\": \"mailto:andrea@invalid.it\"\n},\n\"andrea@invalid.it\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/email.text",
    "content": "\n\nThis is an email address: <andrea@invalid.it>\n\t\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/entities.html",
    "content": "<p>Maruku translates HTML entities to the equivalent in LaTeX:</p>\n<table><thead><tr><th>Entity</th><th>Result</th></tr></thead><tbody><tr><td style='text-align: left;'><code>&amp;copy;</code></td><td style='text-align: left;'>&#169;</td>\n</tr><tr><td style='text-align: left;'><code>&amp;pound;</code></td><td style='text-align: left;'>&#163;</td>\n</tr><tr><td style='text-align: left;'><code>a&amp;nbsp;b</code></td><td style='text-align: left;'>a&#160;b</td>\n</tr><tr><td style='text-align: left;'><code>&amp;lambda;</code></td><td style='text-align: left;'>&#955;</td>\n</tr><tr><td style='text-align: left;'><code>&amp;mdash;</code></td><td style='text-align: left;'>&#8212;</td>\n</tr></tbody></table>\n<p>Entity-substitution does not happen in code blocks or inline code.</p>\n\n<p>The following should not be translated:</p>\n\n<pre><code>&amp;copy;</code></pre>\n\n<p>It should read just like this: <code>&amp;copy;</code>.</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/entities.json",
    "content": "[\"html\", [\"p\", \"Maruku translates HTML entities to the equivalent in LaTeX:\"], \"\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Entity\"],\n    [\"th\", \"Result\"]]],\n    [\"tbody\", [\"tr\", [\"td\", {\n        \"style\": \"text-align: left;\"\n    },\n    [\"code\", \"&copy;\"]],\n        [\"td\", {\n            \"style\": \"text-align: left;\"\n        },\n        \"©\"]],\n        [\"tr\", [\"td\", {\n            \"style\": \"text-align: left;\"\n        },\n        [\"code\", \"&pound;\"]],\n            [\"td\", {\n                \"style\": \"text-align: left;\"\n            },\n            \"£\"]],\n        [\"tr\", [\"td\", {\n            \"style\": \"text-align: left;\"\n        },\n        [\"code\", \"a&nbsp;b\"]],\n            [\"td\", {\n                \"style\": \"text-align: left;\"\n            },\n            \"a b\"]],\n        [\"tr\", [\"td\", {\n            \"style\": \"text-align: left;\"\n        },\n        [\"code\", \"&lambda;\"]],\n            [\"td\", {\n                \"style\": \"text-align: left;\"\n            },\n            \"λ\"]],\n        [\"tr\", [\"td\", {\n            \"style\": \"text-align: left;\"\n        },\n        [\"code\", \"&mdash;\"]],\n            [\"td\", {\n                \"style\": \"text-align: left;\"\n            },\n            \"—\"]]]], \"\\u000a\", [\"p\", \"Entity-substitution does not happen in code blocks or inline code.\"],\n    [\"p\", \"The following should not be translated:\"],\n    [\"pre\", [\"code\", \"&copy;\"]],\n    [\"p\", \"It should read just like this: \", [\"code\", \"&copy;\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/entities.text",
    "content": "Maruku translates HTML entities to the equivalent in LaTeX:\n\nEntity      | Result\n------------|----------\n`&copy;`    |  &copy;\n`&pound;`   |  &pound;\n`a&nbsp;b`  |  a&nbsp;b\n`&lambda;`  |  &lambda;\n`&mdash;`   |  &mdash;\n\n\nEntity-substitution does not happen in code blocks or inline code.\n\nThe following should not be translated:\n\n\t&copy;\n\nIt should read just like this: `&copy;`.\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/escaping.html",
    "content": "<p>Hello: ! ! ` { } [ ] ( ) # . ! * * *</p>\n\n<p>Ora, <em>emphasis</em>, <strong>bold</strong>, * &lt;- due asterischi-&gt; * , un underscore-&gt; _ , <em>emphasis</em>, incre<em>dible</em>e!</p>\n\n<p>This is <code>Code with a special: -&gt; ` &lt;-</code>(after)</p>\n\n<p><code>Start </code> of paragraph</p>\n\n<p>End of <code>paragraph </code></p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/escaping.json",
    "content": "[\"html\", [\"p\", \"Hello: ! ! ` { } [ ] ( ) # . ! * * *\"],\n    [\"p\", \"Ora, \", [\"em\", \"emphasis\"], \", \", [\"strong\", \"bold\"], \", * <- due asterischi-> * , un underscore-> _ , \", [\"em\", \"emphasis\"], \", incre\", [\"em\", \"dible\"], \"e!\"],\n    [\"p\", \"This is \", [\"code\", \"Code with a special: -> ` <-\"], \"(after)\"],\n    [\"p\", [\"code\", \"Start \"], \" of paragraph\"],\n    [\"p\", \"End of \", [\"code\", \"paragraph \"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/escaping.text",
    "content": " Hello: ! \\! \\` \\{ \\} \\[ \\] \\( \\) \\# \\. \\! * \\* *\n\n\nOra, *emphasis*, **bold**, * <- due asterischi-> * , un underscore-> _ , _emphasis_,\n incre*dible*e!\n\nThis is ``Code with a special: -> ` <- ``(after)\n\n`Start ` of paragraph\n\nEnd of `paragraph `\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/extra_dl.html",
    "content": "<dl>\n<dt>Apple</dt>\n\n<dd>Pomaceous fruit of plants of the genus Malus in the family Rosaceae.</dd>\n\n<dt>Orange</dt>\n\n<dd>The fruit of an evergreen tree of the genus Citrus.</dd>\n</dl>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/extra_dl.json",
    "content": "[\"html\", [\"dl\", [\"dt\", \"Apple\"],\n    [\"dd\", \"Pomaceous fruit of plants of the genus Malus in the family Rosaceae.\"],\n    [\"dt\", \"Orange\"],\n    [\"dd\", \"The fruit of an evergreen tree of the genus Citrus.\"]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/extra_dl.text",
    "content": "CSS: style.css\n\n\nApple\n:   Pomaceous fruit of plants of the genus Malus in \n    the family Rosaceae.\n\nOrange\n:   The fruit of an evergreen tree of the genus Citrus.\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/extra_header_id.html",
    "content": "<h1 id='header1'>Header 1</h1>\n\n<h2 id='header2'>Header 2</h2>\n\n<h3 id='header3'>Header 3</h3>\n\n<p>Then you can create links to different parts of the same document like this:</p>\n\n<p><a href='#header1'>Link back to header 1</a>, <a href='#header2'>Link back to header 2</a>, <a href='#header3'>Link back to header 3</a></p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/extra_header_id.json",
    "content": "[\"html\", [\"h1\", {\n    \"id\": \"header1\"\n},\n\"Header 1\"], \"\\u000a\\u000a\", [\"h2\", {\n    \"id\": \"header2\"\n},\n\"Header 2\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"header3\"\n},\n\"Header 3\"], \"\\u000a\\u000a\", [\"p\", \"Then you can create links to different parts of the same document like this:\"],\n    [\"p\", [\"a\", {\n        \"href\": \"#header1\"\n    },\n    \"Link back to header 1\"], \", \", [\"a\", {\n        \"href\": \"#header2\"\n    },\n    \"Link back to header 2\"], \", \", [\"a\", {\n        \"href\": \"#header3\"\n    },\n    \"Link back to header 3\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/extra_header_id.text",
    "content": "Header 1            {#header1}\n========\n\nHeader 2            {#header2}\n--------\n\n### Header 3 ###      {#header3}\n\nThen you can create links to different parts of the same document like this:\n\n[Link back to header 1](#header1),\n[Link back to header 2](#header2),\n[Link back to header 3](#header3)\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/extra_table1.html",
    "content": "<table><thead><tr><th>First Header</th><th>Second Header</th></tr></thead><tbody><tr><td style='text-align: left;'>Content Cell</td><td style='text-align: left;'>Content Cell</td>\n</tr><tr><td style='text-align: left;'>Content Cell</td><td style='text-align: left;'>Content Cell</td>\n</tr></tbody></table>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/extra_table1.json",
    "content": "[\"html\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"First Header\"],\n    [\"th\", \"Second Header\"]]],\n    [\"tbody\", [\"tr\", [\"td\", {\n        \"style\": \"text-align: left;\"\n    },\n    \"Content Cell\"],\n        [\"td\", {\n            \"style\": \"text-align: left;\"\n        },\n        \"Content Cell\"]],\n        [\"tr\", [\"td\", {\n            \"style\": \"text-align: left;\"\n        },\n        \"Content Cell\"],\n            [\"td\", {\n                \"style\": \"text-align: left;\"\n            },\n            \"Content Cell\"]]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/extra_table1.text",
    "content": "CSS: style.css\n\nFirst Header  | Second Header\n------------- | -------------\nContent Cell  | Content Cell\nContent Cell  | Content Cell\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/footnotes.html",
    "content": "<p>That&#8217;s some text with a footnote <sup id='fnref:1'><a href='#fn:1' rel='footnote'>1</a></sup> and another <sup id='fnref:2'><a href='#fn:2' rel='footnote'>2</a></sup> and another <sup id='fnref:3'><a href='#fn:3' rel='footnote'>3</a></sup>.</p>\n\n<p>This is not a footnote.</p>\n<div class='footnotes'><hr /><ol><li id='fn:1'>\n<p>And that&#8217;s the footnote. This is second sentence (same paragraph).</p>\n<a href='#fnref:1' rev='footnote'>&#8617;</a></li><li id='fn:2'>\n<p>This is the very long one.</p>\n\n<p>That&#8217;s the second paragraph.</p>\n<a href='#fnref:2' rev='footnote'>&#8617;</a></li><li id='fn:3'>\n<p>And that&#8217;s the footnote.</p>\n\n<p>That&#8217;s the second paragraph of the footnote.</p>\n<a href='#fnref:3' rev='footnote'>&#8617;</a></li></ol></div>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/footnotes.json",
    "content": "[\"html\", [\"p\", \"That’s some text with a footnote \", [\"sup\", {\n    \"id\": \"fnref:1\"\n},\n[\"a\", {\n    \"href\": \"#fn:1\",\n    \"rel\": \"footnote\"\n},\n\"1\"]], \" and another \", [\"sup\", {\n    \"id\": \"fnref:2\"\n},\n[\"a\", {\n    \"href\": \"#fn:2\",\n    \"rel\": \"footnote\"\n},\n\"2\"]], \" and another \", [\"sup\", {\n    \"id\": \"fnref:3\"\n},\n[\"a\", {\n    \"href\": \"#fn:3\",\n    \"rel\": \"footnote\"\n},\n\"3\"]], \".\"],\n    [\"p\", \"This is not a footnote.\"], \"\\u000a\", [\"div\", {\n    \"class\": \"footnotes\"\n},\n[\"hr\"],\n    [\"ol\", [\"li\", {\n        \"id\": \"fn:1\"\n    },\n    [\"p\", \"And that’s the footnote. This is second sentence (same paragraph).\"], \"\\u000a\", [\"a\", {\n        \"href\": \"#fnref:1\",\n        \"rev\": \"footnote\"\n    },\n    \"↩\"]],\n        [\"li\", {\n            \"id\": \"fn:2\"\n        },\n        [\"p\", \"This is the very long one.\"],\n            [\"p\", \"That’s the second paragraph.\"], \"\\u000a\", [\"a\", {\n            \"href\": \"#fnref:2\",\n            \"rev\": \"footnote\"\n        },\n        \"↩\"]],\n        [\"li\", {\n            \"id\": \"fn:3\"\n        },\n        [\"p\", \"And that’s the footnote.\"],\n            [\"p\", \"That’s the second paragraph of the footnote.\"], \"\\u000a\", [\"a\", {\n            \"href\": \"#fnref:3\",\n            \"rev\": \"footnote\"\n        },\n        \"↩\"]]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/footnotes.text",
    "content": "That's some text with a footnote [^b] and another [^c] and another [^a].\n\n[^a]: And that's the footnote.\n\n    That's the second paragraph of the footnote.\n\n\n[^b]: And that's the footnote.\nThis is second sentence (same paragraph).\n\n[^c]:\n    This is the very long one.\n\n    That's the second paragraph.\n\n\nThis is not a footnote.\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/headers.html",
    "content": "<h1 id='a_title_with_emphasis'>A title with <em>emphasis</em></h1>\n\n<h2 id='a_title_with_emphasis'>A title with <em>emphasis</em></h2>\n\n<h4 id='a_title_with_emphasis'>A title with <em>emphasis</em></h4>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/headers.json",
    "content": "[\"html\", [\"h1\", {\n    \"id\": \"a_title_with_emphasis\"\n},\n\"A title with \", [\"em\", \"emphasis\"]], \"\\u000a\\u000a\", [\"h2\", {\n    \"id\": \"a_title_with_emphasis\"\n},\n\"A title with \", [\"em\", \"emphasis\"]], \"\\u000a\\u000a\", [\"h4\", {\n    \"id\": \"a_title_with_emphasis\"\n},\n\"A title with \", [\"em\", \"emphasis\"]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/headers.text",
    "content": "A title with *emphasis*\n=======================\n\nA title with *emphasis*\n-----------------------\n\n\n#### A title with *emphasis* ####\n\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/hex_entities.html",
    "content": "<p>Examples of numeric character references include &#169; or &#169; for the copyright symbol, &#913; or &#913; for the Greek capital letter alpha, and &#1575; or &#1575; for the Arabic letter alef.</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/hex_entities.json",
    "content": "[\"html\", [\"p\", \"Examples of numeric character references include © or © for the copyright symbol, Α or Α for the Greek capital letter alpha, and ا or ا for the Arabic letter alef.\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/hex_entities.text",
    "content": "Examples of numeric character references include &#169; or &#xA9; for the copyright symbol, &#913; or &#x391; for the Greek capital letter alpha, and &#1575; or &#x627; for the Arabic letter alef.\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/hrule.html",
    "content": "<hr /><hr /><hr /><hr /><hr />\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/hrule.json",
    "content": "[\"html\", [\"hr\"],\n    [\"hr\"],\n    [\"hr\"],\n    [\"hr\"],\n    [\"hr\"], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/hrule.text",
    "content": "* * *\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html2.html",
    "content": "<p>One <div />123</p>\n<div />\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html2.json",
    "content": "[\"html\", [\"p\", \"One \", [\"div\"], \"123\"], \"\\u000a\", [\"div\"], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html2.text",
    "content": "One\n<div></div>123\n\n<div></div>123\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html3.html",
    "content": "<p>taking part in <a href='http://sied.dis.uniroma1.it/'>some arcane conspirations</a> which involve <b href='http://www.flickr.com/photos/censi/70893277/'>coffee</b>, <a href='http://flickr.com/photos/censi/42775664/in/set-936677/'>robots</a>, <a href='http://www.flickr.com/photos/censi/42775888/in/set-936677/'>sushi</a>,</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html3.json",
    "content": "[\"html\", [\"p\", \"taking part in \", [\"a\", {\n    \"href\": \"http://sied.dis.uniroma1.it/\"\n},\n\"some arcane conspirations\"], \" which involve \", [\"b\", {\n    \"href\": \"http://www.flickr.com/photos/censi/70893277/\"\n},\n\"coffee\"], \", \", [\"a\", {\n    \"href\": \"http://flickr.com/photos/censi/42775664/in/set-936677/\"\n},\n\"robots\"], \", \", [\"a\", {\n    \"href\": \"http://www.flickr.com/photos/censi/42775888/in/set-936677/\"\n},\n\"sushi\"], \",\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html3.text",
    "content": "taking part in <a href=\"http://sied.dis.uniroma1.it/\">some arcane conspirations</a> which\ninvolve <b href=\"http://www.flickr.com/photos/censi/70893277/\">coffee</b>, \n<a href=\"http://flickr.com/photos/censi/42775664/in/set-936677/\">robots</a>,\n<a href=\"http://www.flickr.com/photos/censi/42775888/in/set-936677/\">sushi</a>,\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html4.html",
    "content": "<div class='frame'>\n\t<a href='http://www.flickr.com/photos/censi/54757256/' class='photo'><img src='http://static.flickr.com/27/54757256_1a2c1d2a95_m.jpg' moz-do-not-send='true' alt='' /></a>\n</div>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html4.json",
    "content": "[\"html\", [\"div\", {\n    \"class\": \"frame\"\n},\n\"\\u000a\\u0009\", [\"a\", {\n    \"href\": \"http://www.flickr.com/photos/censi/54757256/\",\n    \"class\": \"photo\"\n},\n[\"img\", {\n    \"src\": \"http://static.flickr.com/27/54757256_1a2c1d2a95_m.jpg\",\n    \"moz-do-not-send\": \"true\"\n}]], \"\\u000a\"], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html4.text",
    "content": "<div class=\"frame\">\n\t<a  class=\"photo\" href=\"http://www.flickr.com/photos/censi/54757256/\"><img alt=\"\"\n  moz-do-not-send=\"true\"\n  src=\"http://static.flickr.com/27/54757256_1a2c1d2a95_m.jpg\" /></a>\n</div>\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html5.html",
    "content": "<div class='frame'>\n <a href='http://www.flickr.com/photos/censi/88561568/' class='photo'><img src='http://static.flickr.com/28/88561568_ab84d28245_m.jpg' height='180' moz-do-not-send='true' alt='Aperitif' width='240' /></a>\n </div>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html5.json",
    "content": "[\"html\", [\"div\", {\n    \"class\": \"frame\"\n},\n\"\\u000a \", [\"a\", {\n    \"href\": \"http://www.flickr.com/photos/censi/88561568/\",\n    \"class\": \"photo\"\n},\n[\"img\", {\n    \"src\": \"http://static.flickr.com/28/88561568_ab84d28245_m.jpg\",\n    \"height\": \"180\",\n    \"moz-do-not-send\": \"true\",\n    \"alt\": \"Aperitif\",\n    \"width\": \"240\"\n}]], \"\\u000a \"], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/html5.text",
    "content": " <div class=\"frame\">\n <a class=\"photo\" href=\"http://www.flickr.com/photos/censi/88561568/\" ><img moz-do-not-send=\"true\" src=\"http://static.flickr.com/28/88561568_ab84d28245_m.jpg\" width=\"240\" height=\"180\" alt=\"Aperitif\" /></a>\n </div>\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/ie.html",
    "content": "<p><code>&lt;p&gt;here&#39;s an apostrophe &amp; a quote &quot;&lt;/p&gt;</code></p>\n\n<pre><code>&lt;p&gt;here&#39;s an apostrophe &amp; a quote &quot;&lt;/p&gt;</code></pre>\n\n<pre lang='xml'><code class='xml' lang='xml'>&lt;p&gt;here&#39;s an apostrophe &amp; a quote &quot;&lt;/p&gt;</code></pre>\n\n<pre><code class='not_supported' lang='not_supported'>&lt;p&gt;here&#39;s an apostrophe &amp; a quote &quot;&lt;/p&gt;</code></pre>\n\n<pre><code class='xml' lang='xml'><span class='punct'>&lt;</span><span class='tag'>p</span><span class='punct'>&gt;</span>here&#39;s an apostrophe &amp; a quote &quot;<span class='punct'>&lt;/</span><span class='tag'>p</span><span class='punct'>&gt;</span></code></pre>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/ie.json",
    "content": "[\"html\", [\"p\", [\"code\", \"<p>here's an apostrophe & a quote \\\"</p>\"]],\n    [\"pre\", [\"code\", \"<p>here's an apostrophe & a quote \\\"</p>\"]],\n    [\"pre\", {\n        \"lang\": \"xml\"\n    },\n    [\"code\", {\n        \"class\": \"xml\",\n        \"lang\": \"xml\"\n    },\n    \"<p>here's an apostrophe & a quote \\\"</p>\"]],\n    [\"pre\", [\"code\", {\n        \"class\": \"not_supported\",\n        \"lang\": \"not_supported\"\n    },\n    \"<p>here's an apostrophe & a quote \\\"</p>\"]],\n    [\"pre\", [\"code\", {\n        \"class\": \"xml\",\n        \"lang\": \"xml\"\n    },\n    [\"span\", {\n        \"class\": \"punct\"\n    },\n    \"<\"],\n        [\"span\", {\n            \"class\": \"tag\"\n        },\n        \"p\"],\n        [\"span\", {\n            \"class\": \"punct\"\n        },\n        \">\"], \"here's an apostrophe & a quote \\\"\", [\"span\", {\n        \"class\": \"punct\"\n    },\n    \"</\"],\n        [\"span\", {\n            \"class\": \"tag\"\n        },\n        \"p\"],\n        [\"span\", {\n            \"class\": \"punct\"\n        },\n        \">\"]]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/ie.text",
    "content": "`<p>here's an apostrophe & a quote \"</p>`\n\n\t<p>here's an apostrophe & a quote \"</p>\n{:}\n\n\t<p>here's an apostrophe & a quote \"</p>\n{:lang=xml}\n\n\t<p>here's an apostrophe & a quote \"</p>\n{:html_use_syntax=true lang=not_supported}\n\n\t<p>here's an apostrophe & a quote \"</p>\n{:html_use_syntax=true lang=xml}\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/images.html",
    "content": "<p>This page does not uilizes <img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Cascading Style Sheets' /></p>\n\n<p>Please mouseover to see the title: <img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Cascading Style Sheets' /></p>\n\n<p>Please mouseover to see the title: <img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Cascading Style Sheets' /></p>\n\n<p>I&#8217;ll say it one more time: this page does not use <img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Cascading Style Sheets' /></p>\n\n<p>This is double size: <img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Cascading Style Sheets' /></p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/images.json",
    "content": "[\"html\", [\"p\", \"This page does not uilizes \", [\"img\", {\n    \"src\": \"http://jigsaw.w3.org/css-validator/images/vcss\",\n    \"alt\": \"Cascading Style Sheets\"\n}]],\n    [\"p\", \"Please mouseover to see the title: \", [\"img\", {\n        \"src\": \"http://jigsaw.w3.org/css-validator/images/vcss\",\n        \"alt\": \"Cascading Style Sheets\"\n    }]],\n    [\"p\", \"Please mouseover to see the title: \", [\"img\", {\n        \"src\": \"http://jigsaw.w3.org/css-validator/images/vcss\",\n        \"alt\": \"Cascading Style Sheets\"\n    }]],\n    [\"p\", \"I’ll say it one more time: this page does not use \", [\"img\", {\n        \"src\": \"http://jigsaw.w3.org/css-validator/images/vcss\",\n        \"alt\": \"Cascading Style Sheets\"\n    }]],\n    [\"p\", \"This is double size: \", [\"img\", {\n        \"src\": \"http://jigsaw.w3.org/css-validator/images/vcss\",\n        \"alt\": \"Cascading Style Sheets\"\n    }]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/images.text",
    "content": "\nThis page does not uilizes ![Cascading Style Sheets](http://jigsaw.w3.org/css-validator/images/vcss)\n\n\nPlease mouseover to see the title: ![Cascading Style Sheets](http://jigsaw.w3.org/css-validator/images/vcss \"Title ok!\")\n\nPlease mouseover to see the title: ![Cascading Style Sheets](http://jigsaw.w3.org/css-validator/images/vcss 'Title ok!')\n\n\nI'll say it one more time: this page does not use ![Cascading Style Sheets] [css]\n\nThis is double size: ![Cascading Style Sheets] [css2]\n\n\n\n[css]: http://jigsaw.w3.org/css-validator/images/vcss \"Optional title attribute\"\n\n[css2]: http://jigsaw.w3.org/css-validator/images/vcss \"Optional title attribute\" class=external\n   style=\"border:0;width:188px;height:131px\"\n\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/images2.html",
    "content": "<p>This is an <img src='image.jpg' alt='image' />.</p>\n\n<p>This is an <img src='image.jpg' alt='image' />.</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/images2.json",
    "content": "[\"html\", [\"p\", \"This is an \", [\"img\", {\n    \"src\": \"image.jpg\",\n    \"alt\": \"image\"\n}], \".\"],\n    [\"p\", \"This is an \", [\"img\", {\n        \"src\": \"image.jpg\",\n        \"alt\": \"image\"\n    }], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/images2.text",
    "content": "\nThis is an ![image][].\n\nThis is an ![image].\n\n[image]: image.jpg\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/inline_html.html",
    "content": "<p>Input:</p>\n\n<pre><code>&lt;em&gt;Emphasis&lt;/em&gt;</code></pre>\n\n<p>Result: <em>Emphasis</em></p>\n\n<p>Input:</p>\n\n<pre><code>&lt;img src=&quot;http://jigsaw.w3.org/css-validator/images/vcss&quot;/&gt;</code></pre>\n\n<p>Result on span: <img src='http://jigsaw.w3.org/css-validator/images/vcss' /></p>\n\n<p>Result alone:</p>\n<img src='http://jigsaw.w3.org/css-validator/images/vcss' />\n<p>Without closing:</p>\n<img src='http://jigsaw.w3.org/css-validator/images/vcss' /><div>\n<p>\n<p>This is</p>\n<em>\n<p>true</p>\n</em>\n<p>markdown text (paragraph)</p>\n</p>\n<p>\n<p>\n<p>This is</p>\n<em>\n<p>true</p>\n</em>\n<p>markdown text (no paragraph)</p>\n</p>\n</p>\n\t<p>\n<p>\n<p>This is</p>\n<em>\n<p>true</p>\n</em>\n<p>markdown text (block paragraph)</p>\n</p>\n</p>\n</div><table>\n<tr>\n<td>\n<p>This is</p>\n<em>\n<p>true</p>\n</em>\n<p>markdown text. (no par)</p>\n</td>\n<td>\n<p>This is</p>\n<em>\n<p>true</p>\n</em>\n<p>markdown text. (par)</p>\n</td>\n</tr>\n</table>\n<p>The following is invalid HTML, and will generate an error:</p>\n<pre class='markdown-html-error' style='border: solid 3px red; background-color: pink'>HTML parse error: \n&lt;table&gt;\n&lt;td markdown=&quot;1&quot;&gt;This is *true* markdown text. (no par)&lt;/td&gt;\n&lt;td markdown=&quot;block&quot;&gt;This is *true* markdown text. (par)&lt;/td&gt;\n&lt;/tr&gt;</pre><pre class='markdown-html-error' style='border: solid 3px red; background-color: pink'>HTML parse error: \n&lt;/table&gt;</pre>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/inline_html.json",
    "content": "[\"html\", [\"p\", \"Input:\"],\n    [\"pre\", [\"code\", \"<em>Emphasis</em>\"]],\n    [\"p\", \"Result: \", [\"em\", \"Emphasis\"]],\n    [\"p\", \"Input:\"],\n    [\"pre\", [\"code\", \"<img src=\\\"http://jigsaw.w3.org/css-validator/images/vcss\\\"/>\"]],\n    [\"p\", \"Result on span: \", [\"img\", {\n        \"src\": \"http://jigsaw.w3.org/css-validator/images/vcss\"\n    }]],\n    [\"p\", \"Result alone:\"], \"\\u000a\", [\"img\", {\n    \"src\": \"http://jigsaw.w3.org/css-validator/images/vcss\"\n}], \"\\u000a\", [\"p\", \"Without closing:\"], \"\\u000a\", [\"img\", {\n    \"src\": \"http://jigsaw.w3.org/css-validator/images/vcss\"\n}],\n    [\"div\", [\"p\", [\"p\", \"This is\"], \"\\u000a\", [\"em\", [\"p\", \"true\"]], \"\\u000a\", [\"p\", \"markdown text (paragraph)\"]],\n        [\"p\", [\"p\", [\"p\", \"This is\"], \"\\u000a\", [\"em\", [\"p\", \"true\"]], \"\\u000a\", [\"p\", \"markdown text (no paragraph)\"]]],\n        [\"p\", [\"p\", [\"p\", \"This is\"], \"\\u000a\", [\"em\", [\"p\", \"true\"]], \"\\u000a\", [\"p\", \"markdown text (block paragraph)\"]]]],\n    [\"table\", [\"tr\", [\"td\", [\"p\", \"This is\"], \"\\u000a\", [\"em\", [\"p\", \"true\"]], \"\\u000a\", [\"p\", \"markdown text. (no par)\"]],\n        [\"td\", [\"p\", \"This is\"], \"\\u000a\", [\"em\", [\"p\", \"true\"]], \"\\u000a\", [\"p\", \"markdown text. (par)\"]]]], \"\\u000a\", [\"p\", \"The following is invalid HTML, and will generate an error:\"],\n    [\"pre\", {\n        \"class\": \"markdown-html-error\",\n        \"style\": \"border: solid 3px red; background-color: pink\"\n    },\n    \"HTML parse error: \\u000a<table>\\u000a<td markdown=\\\"1\\\">This is *true* markdown text. (no par)</td>\\u000a<td markdown=\\\"block\\\">This is *true* markdown text. (par)</td>\\u000a</tr>\"],\n    [\"pre\", {\n        \"class\": \"markdown-html-error\",\n        \"style\": \"border: solid 3px red; background-color: pink\"\n    },\n    \"HTML parse error: \\u000a</table>\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/inline_html.text",
    "content": "CSS: style.css\n\nInput:\n\n\t<em>Emphasis</em>\n\nResult: <em>Emphasis</em>\n\nInput:\n\n\t<img src=\"http://jigsaw.w3.org/css-validator/images/vcss\"/>\n\nResult on span: <img src=\"http://jigsaw.w3.org/css-validator/images/vcss\"/>\n\nResult alone: \n\n<img src=\"http://jigsaw.w3.org/css-validator/images/vcss\"/>\n\nWithout closing:\n\n<img src=\"http://jigsaw.w3.org/css-validator/images/vcss\">\n\n<div markdown=\"1\">\n\tThis is *true* markdown text (paragraph)\n\n\t<p markdown=\"1\">\n\t\tThis is *true* markdown text (no paragraph)\n\t</p>\n\t<p markdown=\"block\">\n\t\tThis is *true* markdown text (block paragraph)\n\t</p>\n</div>\n\n<table>\n<tr>\n<td markdown=\"1\">This is *true* markdown text. (no par)</td>\n<td markdown=\"block\">This is *true* markdown text. (par)</td>\n</tr>\n</table>\n\n\nThe following is invalid HTML, and will generate an error:\n\n<table>\n<td markdown=\"1\">This is *true* markdown text. (no par)</td>\n<td markdown=\"block\">This is *true* markdown text. (par)</td>\n</tr>\n</table>\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/inline_html2.html",
    "content": "<div>\n<p>Test <strong>bold</strong></p>\n</div><p>Test <strong>bold</strong></p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/inline_html2.json",
    "content": "[\"html\", [\"div\", [\"p\", \"Test \", [\"strong\", \"bold\"]]],\n    [\"p\", \"Test \", [\"strong\", \"bold\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/inline_html2.text",
    "content": "<div markdown=\"1\">Test **bold**</div>\n<p markdown=\"1\">Test **bold**</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/links.html",
    "content": "<p>Search on <a href='http://www.google.com'>Google</a></p>\n\n<p>Search on <a href='http://www.google.com'>Google</a></p>\n\n<p>Search on <a href='http://www.google.com'>Google</a></p>\n\n<p>Search on <a href='http://www.google.com'>Google</a></p>\n\n<p>Search on <a href='http://images.google.com' title='Google images'>Google images</a></p>\n\n<p>Inline: <a href='http://google.com'>Google images</a></p>\n\n<p>Inline with title: <a href='http://google.com' title='Title'>Google images</a></p>\n\n<p>Inline with title: <a href='http://google.com' title='Title'>Google images</a></p>\n\n<p>Search on <a href='http://www.gogole.com'>http://www.gogole.com</a> or <a href='http://Here.com'>http://Here.com</a> or ask <a href='mailto:bill@google.com'>&#098;&#105;&#108;&#108;&#064;&#103;&#111;&#111;&#103;&#108;&#101;&#046;&#099;&#111;&#109;</a> or you might ask bill@google.com.</p>\n\n<p>If all else fails, ask <a href='http://www.google.com'>Google</a></p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/links.json",
    "content": "[\"html\", [\"p\", \"Search on \", [\"a\", {\n    \"href\": \"http://www.google.com\"\n},\n\"Google\"]],\n    [\"p\", \"Search on \", [\"a\", {\n        \"href\": \"http://www.google.com\"\n    },\n    \"Google\"]],\n    [\"p\", \"Search on \", [\"a\", {\n        \"href\": \"http://www.google.com\"\n    },\n    \"Google\"]],\n    [\"p\", \"Search on \", [\"a\", {\n        \"href\": \"http://www.google.com\"\n    },\n    \"Google\"]],\n    [\"p\", \"Search on \", [\"a\", {\n        \"href\": \"http://images.google.com\",\n        \"title\": \"Google images\"\n    },\n    \"Google images\"]],\n    [\"p\", \"Inline: \", [\"a\", {\n        \"href\": \"http://google.com\"\n    },\n    \"Google images\"]],\n    [\"p\", \"Inline with title: \", [\"a\", {\n        \"href\": \"http://google.com\",\n        \"title\": \"Title\"\n    },\n    \"Google images\"]],\n    [\"p\", \"Inline with title: \", [\"a\", {\n        \"href\": \"http://google.com\",\n        \"title\": \"Title\"\n    },\n    \"Google images\"]],\n    [\"p\", \"Search on \", [\"a\", {\n        \"href\": \"http://www.gogole.com\"\n    },\n    \"http://www.gogole.com\"], \" or \", [\"a\", {\n        \"href\": \"http://Here.com\"\n    },\n    \"http://Here.com\"], \" or ask \", [\"a\", {\n        \"href\": \"mailto:bill@google.com\"\n    },\n    \"bill@google.com\"], \" or you might ask bill@google.com.\"],\n    [\"p\", \"If all else fails, ask \", [\"a\", {\n        \"href\": \"http://www.google.com\"\n    },\n    \"Google\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/links.text",
    "content": "\nSearch on [Google][]\n\nSearch on [Google] []\n\nSearch on [Google] [google]\n\nSearch on [Google] [Google]\n\nSearch on [Google images][]\n\nInline: [Google images](http://google.com)\n\nInline with title: [Google images](http://google.com \"Title\")\n\nInline with title: [Google images]( http://google.com  \"Title\" )\n\n\nSearch on <http://www.gogole.com> or <http://Here.com> or ask <mailto:bill@google.com>\nor you might ask bill@google.com.\n\nIf all else fails, ask [Google](http://www.google.com)\n\t\n[google]: http://www.google.com\n\n[google2]: http://www.google.com 'Single quotes'\n\n[google3]: http://www.google.com \"Double quotes\"\n\n[google4]: http://www.google.com (Parenthesis)\n\n[Google Search]: \n http://www.google.com \"Google search\"\n\n[Google Images]: \n http://images.google.com  (Google images)\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list1.html",
    "content": "<ul>\n<li>\n<p>A list item with a blockquote:</p>\n\n<blockquote>\n<p>This is a blockquote inside a list item.</p>\n</blockquote>\n</li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list1.json",
    "content": "[\"html\", [\"ul\", [\"li\", [\"p\", \"A list item with a blockquote:\"],\n    [\"blockquote\", [\"p\", \"This is a blockquote inside a list item.\"]]]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list1.text",
    "content": "*   A list item with a blockquote:\n\n    > This is a blockquote\n    > inside a list item.\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list2.html",
    "content": "<ul>\n<li>\n<p>This is a list item with two paragraphs.</p>\n\n<p>This is the second paragraph in the list item. You&#8217;re only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>\n</li>\n\n<li>\n<p>other</p>\n</li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list2.json",
    "content": "[\"html\", [\"ul\", [\"li\", [\"p\", \"This is a list item with two paragraphs.\"],\n    [\"p\", \"This is the second paragraph in the list item. You’re only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\"]],\n    [\"li\", [\"p\", \"other\"]]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list2.text",
    "content": "*   This is a list item with two paragraphs.\n\n    This is the second paragraph in the list item. You're\nonly required to indent the first line. Lorem ipsum dolor\nsit amet, consectetuer adipiscing elit.\n\n*   other\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list3.html",
    "content": "<ul>\n<li>\n<p>A list item with a blockquote:</p>\n\n<blockquote>\n<p>This is a blockquote inside a list item.</p>\n</blockquote>\n</li>\n\n<li>\n<p>A list item with a code block:</p>\n\n<pre><code>&lt;code goes here&gt;</code></pre>\n</li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list3.json",
    "content": "[\"html\", [\"ul\", [\"li\", [\"p\", \"A list item with a blockquote:\"],\n    [\"blockquote\", [\"p\", \"This is a blockquote inside a list item.\"]]],\n    [\"li\", [\"p\", \"A list item with a code block:\"],\n        [\"pre\", [\"code\", \"<code goes here>\"]]]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list3.text",
    "content": "*   A list item with a blockquote:\n\n    > This is a blockquote\n    > inside a list item.\n\n*   A list item with a code block:\n\n        <code goes here>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list4.html",
    "content": "<p>This is a list:</p>\n\n<ul>\n<li>one</li>\n\n<li>two</li>\n</ul>\n\n<p>This is not a list: * one ciao</p>\n\n<p>This is a list:</p>\n\n<ol>\n<li>one</li>\n\n<li>two</li>\n</ol>\n\n<p>This is not a list: 1987. one ciao</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list4.json",
    "content": "[\"html\", [\"p\", \"This is a list:\"],\n    [\"ul\", [\"li\", \"one\"],\n        [\"li\", \"two\"]],\n    [\"p\", \"This is not a list: * one ciao\"],\n    [\"p\", \"This is a list:\"],\n    [\"ol\", [\"li\", \"one\"],\n        [\"li\", \"two\"]],\n    [\"p\", \"This is not a list: 1987. one ciao\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/list4.text",
    "content": "This is a list:\n* one\n* two\n\nThis is not a list:\n* one\nciao\n\nThis is a list:\n1. one\n1. two\n\nThis is not a list:\n1987. one\nciao\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists.html",
    "content": "<ul>\n<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.</li>\n\n<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.</li>\n\n<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.</li>\n\n<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.</li>\n\n<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.</li>\n</ul>\n\n<p>Ancora</p>\n\n<ul>\n<li>\n<p>This is a list item with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.</p>\n\n<p>ATTENZIONE!</p>\n</li>\n\n<li>\n<p>Suspendisse id sem consectetuer libero luctus adipiscing.</p>\n</li>\n</ul>\n\n<p>Ancora</p>\n\n<ul>\n<li>\n<p>This is a list item with two paragraphs.</p>\n\n<p>This is the second paragraph in the list item. You&#8217;re only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>\n</li>\n\n<li>\n<p>Another item in the same list.</p>\n</li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists.json",
    "content": "[\"html\", [\"ul\", [\"li\", \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.\"],\n    [\"li\", \"Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.\"],\n    [\"li\", \"Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.\"],\n    [\"li\", \"Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.\"],\n    [\"li\", \"Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.\"]],\n    [\"p\", \"Ancora\"],\n    [\"ul\", [\"li\", [\"p\", \"This is a list item with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.\"],\n        [\"p\", \"ATTENZIONE!\"]],\n        [\"li\", [\"p\", \"Suspendisse id sem consectetuer libero luctus adipiscing.\"]]],\n    [\"p\", \"Ancora\"],\n    [\"ul\", [\"li\", [\"p\", \"This is a list item with two paragraphs.\"],\n        [\"p\", \"This is the second paragraph in the list item. You’re only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\"]],\n        [\"li\", [\"p\", \"Another item in the same list.\"]]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists.text",
    "content": "*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,\n    viverra nec, fringilla in, laoreet vitae, risus.\n*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\n    Suspendisse id sem consectetuer libero luctus adipiscing.\n*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\nSuspendisse id sem consectetuer libero luctus adipiscing.\n *  Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\nSuspendisse id sem consectetuer libero luctus adipiscing.\n *  Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\n Suspendisse id sem consectetuer libero luctus adipiscing.\n\nAncora\n\n*   This is a list item with two paragraphs. Lorem ipsum dolor\n    sit amet, consectetuer adipiscing elit. Aliquam hendrerit\n    mi posuere lectus.\n\n    ATTENZIONE!\n\n*  Suspendisse id sem consectetuer libero luctus adipiscing.\n\n\nAncora\n\n*   This is a list item with two paragraphs.\n\n    This is the second paragraph in the list item. You're\nonly required to indent the first line. Lorem ipsum dolor\nsit amet, consectetuer adipiscing elit.\n\n*   Another item in the same list.\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists11.html",
    "content": "<p>- ένα</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists11.json",
    "content": "[\"html\", [\"p\", \"- ένα\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists11.text",
    "content": "- ένα\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists6.html",
    "content": "\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists6.json",
    "content": "[\"html\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists6.text",
    "content": "\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists7.html",
    "content": "<p>Ciao</p>\n\n<ul>\n<li>Tab * Tab * Tab</li>\n</ul>\n<p>Ciao</p>\n\n<ul>\n<li>Tab * Tab * Tab</li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists7.json",
    "content": "[\"html\", [\"p\", \"Ciao\"],\n    [\"ul\", [\"li\", \"Tab * Tab * Tab\"]],\n    [\"p\", \"Ciao\"],\n    [\"ul\", [\"li\", \"Tab * Tab * Tab\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists7.text",
    "content": "Ciao\n\n*\tTab\n\t*\tTab\n\t\t*\tTab\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists7b.html",
    "content": "<ul>\n<li>\na\n\n<ul>\n<li>a1</li>\n\n<li>a2</li>\n</ul>\n</li>\n\n<li>\n<p>b</p>\n</li>\n</ul>\n-----| WARNING | -----\n<ul>\n<li>\n<p>a</p>\n\n<ul>\n<li>a1</li>\n\n<li>a2</li>\n</ul>\n</li>\n\n<li>\n<p>b</p>\n</li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists7b.json",
    "content": "[\"html\", [\"ul\", [\"li\", \"\\u000aa\\u000a\\u000a\", [\"ul\", [\"li\", \"a1\"],\n    [\"li\", \"a2\"]]],\n    [\"li\", [\"p\", \"b\"]]], \"\\u000a-----| WARNING | -----\\u000a\", [\"ul\", [\"li\", [\"p\", \"a\"],\n    [\"ul\", [\"li\", \"a1\"],\n        [\"li\", \"a2\"]]],\n    [\"li\", [\"p\", \"b\"]]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists7b.text",
    "content": "* a\n  * a1\n  * a2\n* b\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists8.html",
    "content": "<p>Here is a paragraph.</p>\n\n<ul>\n<li>Item 1</li>\n\n<li>Item 2</li>\n\n<li>Item 3</li>\n</ul>\n-----| WARNING | -----\n<p>Here is a paragraph.</p>\n\n<p>* Item 1 * Item 2 * Item 3</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists8.json",
    "content": "[\"html\", [\"p\", \"Here is a paragraph.\"],\n    [\"ul\", [\"li\", \"Item 1\"],\n        [\"li\", \"Item 2\"],\n        [\"li\", \"Item 3\"]], \"\\u000a-----| WARNING | -----\\u000a\", [\"p\", \"Here is a paragraph.\"],\n    [\"p\", \"* Item 1 * Item 2 * Item 3\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists8.text",
    "content": "Here is a paragraph.\n\n\n   * Item 1\n   * Item 2\n   * Item 3\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists9.html",
    "content": "<ul>\n<li>\n<p>Due</p>\n\n<ol>\n<li>tre</li>\n\n<li>tre</li>\n\n<li>tre</li>\n</ol>\n</li>\n\n<li>\n<p>Due</p>\n</li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists9.json",
    "content": "[\"html\", [\"ul\", [\"li\", [\"p\", \"Due\"],\n    [\"ol\", [\"li\", \"tre\"],\n        [\"li\", \"tre\"],\n        [\"li\", \"tre\"]]],\n    [\"li\", [\"p\", \"Due\"]]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists9.text",
    "content": "- Due\n  1. tre\n  1. tre\n  1. tre\n- Due\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists_after_paragraph.html",
    "content": "<p>Paragraph, list with no space: * ciao</p>\n\n<p>Paragraph, list with 1 space: * ciao</p>\n\n<p>Paragraph, list with 3 space: * ciao</p>\n\n<p>Paragraph, list with 4 spaces: * ciao</p>\n\n<p>Paragraph, list with 1 tab: * ciao</p>\n\n<p>Paragraph (1 space after), list with no space: * ciao</p>\n\n<p>Paragraph (2 spaces after), list with no space:<br />* ciao</p>\n\n<p>Paragraph (3 spaces after), list with no space: <br />* ciao</p>\n\n<p>Paragraph with block quote:</p>\n\n<blockquote>\n<p>Quoted</p>\n</blockquote>\n\n<p>Paragraph with header:</p>\n\n<h3 id='header'>header</h3>\n\n<p>Paragraph with header on two lines:</p>\n\n<h2 id='header'>header</h2>\n\n<p>Paragraph with html after <div /></p>\n\n<p>Paragraph with html after, indented: <em>Emphasis</em></p>\n\n<p>Paragraph with html after, indented: <em>Emphasis</em> <em>tralla</em> <em>Emph</em></p>\n\n<p>Paragraph with html after, indented: <em>Emphasis *tralla* Emph</em></p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists_after_paragraph.json",
    "content": "[\"html\", [\"p\", \"Paragraph, list with no space: * ciao\"],\n    [\"p\", \"Paragraph, list with 1 space: * ciao\"],\n    [\"p\", \"Paragraph, list with 3 space: * ciao\"],\n    [\"p\", \"Paragraph, list with 4 spaces: * ciao\"],\n    [\"p\", \"Paragraph, list with 1 tab: * ciao\"],\n    [\"p\", \"Paragraph (1 space after), list with no space: * ciao\"],\n    [\"p\", \"Paragraph (2 spaces after), list with no space:\", [\"br\"], \"* ciao\"],\n    [\"p\", \"Paragraph (3 spaces after), list with no space: \", [\"br\"], \"* ciao\"],\n    [\"p\", \"Paragraph with block quote:\"],\n    [\"blockquote\", [\"p\", \"Quoted\"]],\n    [\"p\", \"Paragraph with header:\"], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"header\"\n},\n\"header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph with header on two lines:\"], \"\\u000a\\u000a\", [\"h2\", {\n    \"id\": \"header\"\n},\n\"header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph with html after \", [\"div\"]],\n    [\"p\", \"Paragraph with html after, indented: \", [\"em\", \"Emphasis\"]],\n    [\"p\", \"Paragraph with html after, indented: \", [\"em\", \"Emphasis\"], \" \", [\"em\", \"tralla\"], \" \", [\"em\", \"Emph\"]],\n    [\"p\", \"Paragraph with html after, indented: \", [\"em\", \"Emphasis *tralla* Emph\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists_after_paragraph.text",
    "content": "Paragraph, list with no space:\n* ciao\n\nParagraph, list with 1 space:\n * ciao\n\nParagraph, list with 3 space:\n   * ciao\n\nParagraph, list with 4 spaces:\n    * ciao\n\nParagraph, list with 1 tab:\n\t* ciao\n\nParagraph (1 space after), list with no space: \n* ciao\n\nParagraph (2 spaces after), list with no space:  \n* ciao\n\nParagraph (3 spaces after), list with no space:   \n* ciao\n\nParagraph with block quote:\n> Quoted\n\nParagraph with header:\n### header ###\n\nParagraph with header on two lines:\nheader\n------\n\n\nParagraph with html after\n<div></div>\n\nParagraph with html after, indented:\n     <em>Emphasis</em>\n\nParagraph with html after, indented: <em>Emphasis</em> *tralla* <em>Emph</em>\n\nParagraph with html after, indented: <em>Emphasis *tralla* Emph</em>\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists_ol.html",
    "content": "<ol>\n<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.</li>\n\n<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.</li>\n\n<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.</li>\n\n<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.</li>\n\n<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.</li>\n</ol>\n\n<p>Ancora</p>\n\n<ol>\n<li>\n<p>This is a list item with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.</p>\n\n<p>ATTENZIONE!</p>\n\n<ul>\n<li>\n<p>Uno</p>\n</li>\n\n<li>\n<p>Due</p>\n\n<ol>\n<li>tre</li>\n\n<li>tre</li>\n\n<li>tre</li>\n</ol>\n</li>\n\n<li>\n<p>Due</p>\n</li>\n</ul>\n</li>\n\n<li>\n<p>Suspendisse id sem consectetuer libero luctus adipiscing.</p>\n</li>\n</ol>\n\n<p>Ancora</p>\n\n<ul>\n<li>\n<p>This is a list item with two paragraphs.</p>\n\n<p>This is the second paragraph in the list item. You&#8217;re only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>\n</li>\n\n<li>\n<p>Another item in the same list.</p>\n</li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists_ol.json",
    "content": "[\"html\", [\"ol\", [\"li\", \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.\"],\n    [\"li\", \"Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.\"],\n    [\"li\", \"Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.\"],\n    [\"li\", \"Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.\"],\n    [\"li\", \"Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.\"]],\n    [\"p\", \"Ancora\"],\n    [\"ol\", [\"li\", [\"p\", \"This is a list item with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.\"],\n        [\"p\", \"ATTENZIONE!\"],\n        [\"ul\", [\"li\", [\"p\", \"Uno\"]],\n            [\"li\", [\"p\", \"Due\"],\n                [\"ol\", [\"li\", \"tre\"],\n                    [\"li\", \"tre\"],\n                    [\"li\", \"tre\"]]],\n            [\"li\", [\"p\", \"Due\"]]]],\n        [\"li\", [\"p\", \"Suspendisse id sem consectetuer libero luctus adipiscing.\"]]],\n    [\"p\", \"Ancora\"],\n    [\"ul\", [\"li\", [\"p\", \"This is a list item with two paragraphs.\"],\n        [\"p\", \"This is the second paragraph in the list item. You’re only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\"]],\n        [\"li\", [\"p\", \"Another item in the same list.\"]]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/lists_ol.text",
    "content": "1.   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,\n    viverra nec, fringilla in, laoreet vitae, risus.\n 2.   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\n    Suspendisse id sem consectetuer libero luctus adipiscing.\n3.   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\nSuspendisse id sem consectetuer libero luctus adipiscing.\n 3.  Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\nSuspendisse id sem consectetuer libero luctus adipiscing.\n 4.  Donec sit amet nisl. Aliquam semper ipsum sit amet velit.\n Suspendisse id sem consectetuer libero luctus adipiscing.\n\nAncora\n\n1.  This is a list item with two paragraphs. Lorem ipsum dolor\n    sit amet, consectetuer adipiscing elit. Aliquam hendrerit\n    mi posuere lectus.\n\n    ATTENZIONE!\n\n    - Uno\n    - Due\n      1. tre\n      1. tre\n      1. tre\n    - Due\n\n2.  Suspendisse id sem consectetuer libero luctus adipiscing.\n\n\nAncora\n\n*   This is a list item with two paragraphs.\n\n    This is the second paragraph in the list item. You're\nonly required to indent the first line. Lorem ipsum dolor\nsit amet, consectetuer adipiscing elit.\n\n*   Another item in the same list.\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/loss.html",
    "content": "<br />\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/loss.json",
    "content": "[\"html\", [\"br\"], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/loss.text",
    "content": "<br/>123\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/misc_sw.html",
    "content": "<h3 id='general'>General</h3>\n\n<ul>\n<li><em>Operating System</em> : <a href='http://www.apple.com/getamac/'>Mac OS X</a>: heaven, after the purgatory of Linux and the hell of Windows.</li>\n\n<li><em>Browser</em>: <a href='http://getfirefox.com/'>Firefox</a>. On a Mac, <a href='http://www.caminobrowser.org/'>Camino</a>.</li>\n\n<li><em>Email</em>: <a href='http://gmail.com/'>GMail</a>, &#8220;search, don&#8217;t sort&#8221; really works.</li>\n\n<li><em>Text Editor</em>: <a href='http://www.apple.com/getamac/'>TextMate</a>, you have to buy it, but it&#8217;s worth every penny. There are rumours that it&#8217;s been converting (recovering) Emacs users (addicts). Unfortunately, it&#8217;s Mac only. An alternative is <a href='http://www.jedit.org/'>jedit</a> (GPL, Java).</li>\n</ul>\n\n<h3 id='development'>Development</h3>\n\n<ul>\n<li>\n<p><em>Build system</em>: <a href='http://www.cmake.org/'>cmake</a>, throw the <a href='http://sources.redhat.com/autobook/'>autotools</a> away.</p>\n</li>\n\n<li>\n<p><em>Source code control system</em>: ditch CVS for <a href='http://subversion.tigris.org'>subversion</a>.</p>\n</li>\n\n<li>\n<p><em>Project management</em>: <a href='http://trac.edgewall.org/'>Trac</a> tracks everything.</p>\n</li>\n\n<li>\n<p><em>Scripting language</em>: <a href='http://www.ruby-lang.org/'>Ruby</a> is Japanese pragmatism (and has a <a href='http://poignantguide.net/ruby/'>poignant</a> guide). Python, you say? Python is too academic and snob:</p>\n\n<pre><code>$ python       \nPython 2.4.1 (\\#1, Jun  4 2005, 00:54:33) \nType &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.\n&gt;&gt;&gt; exit\n&#39;Use Ctrl-D (i.e. EOF) to exit.&#39;\n&gt;&gt;&gt; quit\n&#39;Use Ctrl-D (i.e. EOF) to exit.&#39;</code></pre>\n</li>\n\n<li>\n<p><em>Java IDE</em>: <a href='http://www.borland.com/us/products/jbuilder/index.html'>JBuilder</a> is great software and has a free version (IMHO better than Eclipse). Java is not a pain anymore since it gained <a href='http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html'>generics</a> and got opensourced.</p>\n</li>\n\n<li>\n<p><em>Mark-up language</em>: HTML is so 2001, why don&#8217;t you take at look at <a href='http://en.wikipedia.org/wiki/Markdown'>Markdown</a>? <a href='data/misc_markdown.png'>Look at the source of this page</a>.</p>\n</li>\n\n<li>\n<p><em>C++ libraries</em>: * <a href='http://www.trolltech.no/'>QT</a> for GUIs. * <a href='http://www.gnu.org/software/gsl/'>GSL</a> for math. * <a href='http://www.imagemagick.org/Magick++/'>Magick++</a> for manipulating images. * <a href='http://cairographics.org/'>Cairo</a> for creating PDFs. * <a href='http://www.boost.org/'>Boost</a> for just about everything else.</p>\n</li>\n</ul>\n\n<h3 id='research'>Research</h3>\n\n<ul>\n<li><em>Writing papers</em>: <a href='http://en.wikipedia.org/wiki/LaTeX'>LaTeX</a></li>\n\n<li><em>Writing papers &amp; enjoying the process</em>: <a href='http://www.lyx.org'>LyX</a></li>\n\n<li><em>Handsome figures in your papers</em>: <a href='http://www.xfig.org/'>xfig</a> or, better, <a href='http://tams-www.informatik.uni-hamburg.de/applets/jfig/'>jfig</a>.</li>\n\n<li><em>The occasional presentation with many graphical content</em>: <a href='http://www.openoffice.org/product/impress.html'>OpenOffice Impress</a> (using the <a href='http://ooolatex.sourceforge.net/'>OOOlatex plugin</a>); the alternative is PowerPoint with the <a href='http://texpoint.necula.org/'>TexPoint</a> plugin.</li>\n\n<li><em>Managing BibTeX</em>: <a href='http://jabref.sourceforge.net/'>jabref</a>: multi-platform, for all your bibtex needs.</li>\n\n<li><em>IEEExplore and BibTeX</em>: convert citations using <a href='http://www.bibconverter.net/ieeexplore/'>BibConverter</a>.</li>\n</ul>\n\n<h3 id='cool_websites'>Cool websites</h3>\n\n<ul>\n<li><em>Best site in the wwworld</em>: <a href='http://en.wikipedia.org/'>Wikipedia</a></li>\n\n<li><a href='http://www.mutopiaproject.org/'>Mutopia</a> for sheet music; <a href='http://www.gutenberg.org/'>the Gutenberg Project</a> for books; <a href='http://www.liberliber.it/'>LiberLiber</a> for books in italian.</li>\n\n<li><em>Blogs</em>: <a href='http://bloglines.com/'>Bloglines</a></li>\n\n<li><em>Sharing photos</em>: <a href='http://www.flickr.com/'>flickr</a> exposes an API you can use.</li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/misc_sw.json",
    "content": "[\"html\", [\"h3\", {\n    \"id\": \"general\"\n},\n\"General\"], \"\\u000a\\u000a\", [\"ul\", [\"li\", [\"em\", \"Operating System\"], \" : \", [\"a\", {\n    \"href\": \"http://www.apple.com/getamac/\"\n},\n\"Mac OS X\"], \": heaven, after the purgatory of Linux and the hell of Windows.\"],\n    [\"li\", [\"em\", \"Browser\"], \": \", [\"a\", {\n        \"href\": \"http://getfirefox.com/\"\n    },\n    \"Firefox\"], \". On a Mac, \", [\"a\", {\n        \"href\": \"http://www.caminobrowser.org/\"\n    },\n    \"Camino\"], \".\"],\n    [\"li\", [\"em\", \"Email\"], \": \", [\"a\", {\n        \"href\": \"http://gmail.com/\"\n    },\n    \"GMail\"], \", “search, don’t sort” really works.\"],\n    [\"li\", [\"em\", \"Text Editor\"], \": \", [\"a\", {\n        \"href\": \"http://www.apple.com/getamac/\"\n    },\n    \"TextMate\"], \", you have to buy it, but it’s worth every penny. There are rumours that it’s been converting (recovering) Emacs users (addicts). Unfortunately, it’s Mac only. An alternative is \", [\"a\", {\n        \"href\": \"http://www.jedit.org/\"\n    },\n    \"jedit\"], \" (GPL, Java).\"]], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"development\"\n},\n\"Development\"], \"\\u000a\\u000a\", [\"ul\", [\"li\", [\"p\", [\"em\", \"Build system\"], \": \", [\"a\", {\n    \"href\": \"http://www.cmake.org/\"\n},\n\"cmake\"], \", throw the \", [\"a\", {\n    \"href\": \"http://sources.redhat.com/autobook/\"\n},\n\"autotools\"], \" away.\"]],\n    [\"li\", [\"p\", [\"em\", \"Source code control system\"], \": ditch CVS for \", [\"a\", {\n        \"href\": \"http://subversion.tigris.org\"\n    },\n    \"subversion\"], \".\"]],\n    [\"li\", [\"p\", [\"em\", \"Project management\"], \": \", [\"a\", {\n        \"href\": \"http://trac.edgewall.org/\"\n    },\n    \"Trac\"], \" tracks everything.\"]],\n    [\"li\", [\"p\", [\"em\", \"Scripting language\"], \": \", [\"a\", {\n        \"href\": \"http://www.ruby-lang.org/\"\n    },\n    \"Ruby\"], \" is Japanese pragmatism (and has a \", [\"a\", {\n        \"href\": \"http://poignantguide.net/ruby/\"\n    },\n    \"poignant\"], \" guide). Python, you say? Python is too academic and snob:\"],\n        [\"pre\", [\"code\", \"$ python       \\u000aPython 2.4.1 (\\\\#1, Jun  4 2005, 00:54:33) \\u000aType \\\"help\\\", \\\"copyright\\\", \\\"credits\\\" or \\\"license\\\" for more information.\\u000a>>> exit\\u000a'Use Ctrl-D (i.e. EOF) to exit.'\\u000a>>> quit\\u000a'Use Ctrl-D (i.e. EOF) to exit.'\"]]],\n    [\"li\", [\"p\", [\"em\", \"Java IDE\"], \": \", [\"a\", {\n        \"href\": \"http://www.borland.com/us/products/jbuilder/index.html\"\n    },\n    \"JBuilder\"], \" is great software and has a free version (IMHO better than Eclipse). Java is not a pain anymore since it gained \", [\"a\", {\n        \"href\": \"http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html\"\n    },\n    \"generics\"], \" and got opensourced.\"]],\n    [\"li\", [\"p\", [\"em\", \"Mark-up language\"], \": HTML is so 2001, why don’t you take at look at \", [\"a\", {\n        \"href\": \"http://en.wikipedia.org/wiki/Markdown\"\n    },\n    \"Markdown\"], \"? \", [\"a\", {\n        \"href\": \"data/misc_markdown.png\"\n    },\n    \"Look at the source of this page\"], \".\"]],\n    [\"li\", [\"p\", [\"em\", \"C++ libraries\"], \": * \", [\"a\", {\n        \"href\": \"http://www.trolltech.no/\"\n    },\n    \"QT\"], \" for GUIs. * \", [\"a\", {\n        \"href\": \"http://www.gnu.org/software/gsl/\"\n    },\n    \"GSL\"], \" for math. * \", [\"a\", {\n        \"href\": \"http://www.imagemagick.org/Magick++/\"\n    },\n    \"Magick++\"], \" for manipulating images. * \", [\"a\", {\n        \"href\": \"http://cairographics.org/\"\n    },\n    \"Cairo\"], \" for creating PDFs. * \", [\"a\", {\n        \"href\": \"http://www.boost.org/\"\n    },\n    \"Boost\"], \" for just about everything else.\"]]], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"research\"\n},\n\"Research\"], \"\\u000a\\u000a\", [\"ul\", [\"li\", [\"em\", \"Writing papers\"], \": \", [\"a\", {\n    \"href\": \"http://en.wikipedia.org/wiki/LaTeX\"\n},\n\"LaTeX\"]],\n    [\"li\", [\"em\", \"Writing papers & enjoying the process\"], \": \", [\"a\", {\n        \"href\": \"http://www.lyx.org\"\n    },\n    \"LyX\"]],\n    [\"li\", [\"em\", \"Handsome figures in your papers\"], \": \", [\"a\", {\n        \"href\": \"http://www.xfig.org/\"\n    },\n    \"xfig\"], \" or, better, \", [\"a\", {\n        \"href\": \"http://tams-www.informatik.uni-hamburg.de/applets/jfig/\"\n    },\n    \"jfig\"], \".\"],\n    [\"li\", [\"em\", \"The occasional presentation with many graphical content\"], \": \", [\"a\", {\n        \"href\": \"http://www.openoffice.org/product/impress.html\"\n    },\n    \"OpenOffice Impress\"], \" (using the \", [\"a\", {\n        \"href\": \"http://ooolatex.sourceforge.net/\"\n    },\n    \"OOOlatex plugin\"], \"); the alternative is PowerPoint with the \", [\"a\", {\n        \"href\": \"http://texpoint.necula.org/\"\n    },\n    \"TexPoint\"], \" plugin.\"],\n    [\"li\", [\"em\", \"Managing BibTeX\"], \": \", [\"a\", {\n        \"href\": \"http://jabref.sourceforge.net/\"\n    },\n    \"jabref\"], \": multi-platform, for all your bibtex needs.\"],\n    [\"li\", [\"em\", \"IEEExplore and BibTeX\"], \": convert citations using \", [\"a\", {\n        \"href\": \"http://www.bibconverter.net/ieeexplore/\"\n    },\n    \"BibConverter\"], \".\"]], \"\\u000a\\u000a\", [\"h3\", {\n    \"id\": \"cool_websites\"\n},\n\"Cool websites\"], \"\\u000a\\u000a\", [\"ul\", [\"li\", [\"em\", \"Best site in the wwworld\"], \": \", [\"a\", {\n    \"href\": \"http://en.wikipedia.org/\"\n},\n\"Wikipedia\"]],\n    [\"li\", [\"a\", {\n        \"href\": \"http://www.mutopiaproject.org/\"\n    },\n    \"Mutopia\"], \" for sheet music; \", [\"a\", {\n        \"href\": \"http://www.gutenberg.org/\"\n    },\n    \"the Gutenberg Project\"], \" for books; \", [\"a\", {\n        \"href\": \"http://www.liberliber.it/\"\n    },\n    \"LiberLiber\"], \" for books in italian.\"],\n    [\"li\", [\"em\", \"Blogs\"], \": \", [\"a\", {\n        \"href\": \"http://bloglines.com/\"\n    },\n    \"Bloglines\"]],\n    [\"li\", [\"em\", \"Sharing photos\"], \": \", [\"a\", {\n        \"href\": \"http://www.flickr.com/\"\n    },\n    \"flickr\"], \" exposes an API you can use.\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/misc_sw.text",
    "content": "Subject: Software not painful to use\nSubject_short: painless software\nTopic: /misc/coolsw\nArchive: no\nDate: Nov 20 2006\nOrder: -9.5\ninMenu: true\n\n\n### General ###\n\n* *Operating System* : [Mac OS X][switch]: heaven, after the purgatory of Linux \n  and the hell of Windows.\n* *Browser*: [Firefox][firefox]. On a Mac, [Camino][camino].\n* *Email*: [GMail][gmail], \"search, don't sort\" really works.\n* *Text Editor*: [TextMate][textmate], you have to buy it, but it's worth every\n  penny. There are rumours that it's been converting (recovering) Emacs\n  users (addicts). Unfortunately, it's Mac only. An alternative is\n  [jedit][jedit] (GPL, Java).\n\n### Development ###\n\n* *Build system*: [cmake][cmake], throw the [autotools][autotools] away.\n* *Source code control system*: ditch CVS for [subversion][subversion].\n* *Project management*: [Trac][trac] tracks everything.\n* *Scripting language*: [Ruby][ruby] is Japanese pragmatism (and has a [poignant][poignant] guide). \n   Python, you say? Python is too academic and snob:\n\n      $ python       \n      Python 2.4.1 (\\#1, Jun  4 2005, 00:54:33) \n      Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n      >>> exit\n      'Use Ctrl-D (i.e. EOF) to exit.'\n      >>> quit\n      'Use Ctrl-D (i.e. EOF) to exit.'\n\n* *Java IDE*: [JBuilder][jbuilder] is great software and has a free version (IMHO better than Eclipse). Java\n is not a pain anymore since it gained [generics][java-generics] and got opensourced.\n* *Mark-up language*: HTML is so 2001, why don't you take at look at [Markdown][markdown]? [Look at the source of this page](data/misc_markdown.png).\n* *C++ libraries*: \n    * [QT][qt] for GUIs.\n    * [GSL][gsl] for math.\n    * [Magick++][magick] for manipulating images.\n    * [Cairo][cairo] for creating PDFs.\n    * [Boost][boost] for just about everything else.\n\n\n### Research ###\n\n* *Writing papers*: [LaTeX][latex]\n* *Writing papers & enjoying the process*: [LyX][lyx]\n* *Handsome figures in your papers*: [xfig][xfig] or, better, [jfig][jfig].\n* *The occasional presentation with many graphical content*: \n  [OpenOffice Impress][impress] (using the [OOOlatex plugin][ooolatex]); \n  the alternative is PowerPoint with the [TexPoint][texpoint] plugin.\n* *Managing BibTeX*: [jabref][jabref]: multi-platform, for all your bibtex needs.\n* *IEEExplore and BibTeX*: convert citations using [BibConverter][bibconverter].\n\n### Cool websites ###\n\n* *Best site in the wwworld*: [Wikipedia][wikipedia]\n* [Mutopia][mutopia] for sheet music; [the Gutenberg Project][gutenberg] for books; [LiberLiber][liberliber] for books in italian.\n* *Blogs*: [Bloglines][bloglines]\n* *Sharing photos*: [flickr][flickr] exposes an API you can use.\n\n\n[firefox]:   http://getfirefox.com/\n[gmail]:     http://gmail.com/\n[bloglines]: http://bloglines.com/\n[wikipedia]: http://en.wikipedia.org/\n[ruby]:      http://www.ruby-lang.org/\n[poignant]:  http://poignantguide.net/ruby/\n[webgen]:    http://webgen.rubyforge.org/\n[markdown]:  http://daringfireball.net/projects/markdown/\n[latex]:     http://en.wikipedia.org/wiki/LaTeX\n[lyx]:       http://www.lyx.org\n[impress]:   http://www.openoffice.org/product/impress.html\n[ooolatex]:  http://ooolatex.sourceforge.net/\n[texpoint]:  http://texpoint.necula.org/\n[jabref]:    http://jabref.sourceforge.net/\n[camino]:    http://www.caminobrowser.org/\n[switch]:    http://www.apple.com/getamac/\n[textmate]:  http://www.apple.com/getamac/\n[cmake]:     http://www.cmake.org/\n[xfig]:      http://www.xfig.org/\n[jfig]:         http://tams-www.informatik.uni-hamburg.de/applets/jfig/\n[subversion]:   http://subversion.tigris.org\n[jbuilder]:     http://www.borland.com/us/products/jbuilder/index.html\n[flickr]:       http://www.flickr.com/\n[myflickr]:     http://www.flickr.com/photos/censi\n[bibconverter]: http://www.bibconverter.net/ieeexplore/\n[autotools]:    http://sources.redhat.com/autobook/\n[jedit]:        http://www.jedit.org/\n[qt]:           http://www.trolltech.no/\n[gsl]:          http://www.gnu.org/software/gsl/\n[magick]:       http://www.imagemagick.org/Magick++/\n[cairo]:        http://cairographics.org/\n[boost]:        http://www.boost.org/\n[markdown]:     http://en.wikipedia.org/wiki/Markdown\n[trac]:         http://trac.edgewall.org/\n[mutopia]:      http://www.mutopiaproject.org/\n[liberliber]:   http://www.liberliber.it/\n[gutenberg]:    http://www.gutenberg.org/\n[java-generics]: http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/olist.html",
    "content": "<p>This is a list:</p>\n\n<ol>\n<li>one</li>\n\n<li>two</li>\n\n<li>three</li>\n</ol>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/olist.json",
    "content": "[\"html\", [\"p\", \"This is a list:\"],\n    [\"ol\", [\"li\", \"one\"],\n        [\"li\", \"two\"],\n        [\"li\", \"three\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/olist.text",
    "content": "This is a list:\n\n2. one\n2. two\n3. three\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/one.html",
    "content": "<p>One line</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/one.json",
    "content": "[\"html\", [\"p\", \"One line\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/one.text",
    "content": "One line\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/paragraph.html",
    "content": "<p>Paragraph</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/paragraph.json",
    "content": "[\"html\", [\"p\", \"Paragraph\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/paragraph.text",
    "content": "Paragraph\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/paragraphs.html",
    "content": "<p>Paragraph 1</p>\n\n<p>Paragraph 2</p>\n\n<p>Paragraph 3 Paragraph 4 Paragraph Br-&gt;<br />Paragraph 5</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/paragraphs.json",
    "content": "[\"html\", [\"p\", \"Paragraph 1\"],\n    [\"p\", \"Paragraph 2\"],\n    [\"p\", \"Paragraph 3 Paragraph 4 Paragraph Br->\", [\"br\"], \"Paragraph 5\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/paragraphs.text",
    "content": "Paragraph 1\n\nParagraph 2\n\n\nParagraph 3\nParagraph 4\nParagraph Br->  \nParagraph 5\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/smartypants.html",
    "content": "<pre><code>&#39;Twas a &quot;test&quot; to &#39;remember&#39; in the &#39;90s.</code></pre>\n\n<p>&#8216;Twas a &#8220;test&#8221; to &#8216;remember&#8217; in the &#8217;90s.</p>\n\n<pre><code>It was --- in a sense --- really... interesting.</code></pre>\n\n<p>It was &#8212; in a sense &#8212; really&#8230; interesting.</p>\n\n<pre><code>I -- too -- met &lt;&lt; some curly quotes &gt;&gt; there or &lt;&lt;here&gt;&gt;No space.</code></pre>\n\n<p>I &#8211; too &#8211; met &#171;&#160;some curly quotes&#160;&#187; there or &#171;here&#187;No space.</p>\n\n<pre><code>She was 6\\&quot;12\\&#39;.</code></pre>\n\n<blockquote>\n<p>She was 6&#34;12&#39;.</p>\n</blockquote>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/smartypants.json",
    "content": "[\"html\", [\"pre\", [\"code\", \"'Twas a \\\"test\\\" to 'remember' in the '90s.\"]],\n    [\"p\", \"‘Twas a “test” to ‘remember’ in the ’90s.\"],\n    [\"pre\", [\"code\", \"It was --- in a sense --- really... interesting.\"]],\n    [\"p\", \"It was — in a sense — really… interesting.\"],\n    [\"pre\", [\"code\", \"I -- too -- met << some curly quotes >> there or <<here>>No space.\"]],\n    [\"p\", \"I – too – met « some curly quotes » there or «here»No space.\"],\n    [\"pre\", [\"code\", \"She was 6\\\\\\\"12\\\\'.\"]],\n    [\"blockquote\", [\"p\", \"She was 6\\\"12'.\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/smartypants.text",
    "content": "\t'Twas a \"test\" to 'remember' in the '90s.\n'Twas a \"test\" to 'remember' in the '90s.\n\n\tIt was --- in a sense --- really... interesting.\nIt was --- in a sense --- really... interesting.\n\n\tI -- too -- met << some curly quotes >> there or <<here>>No space.\nI -- too -- met << some curly quotes >> there or <<here>>No space.\n\n\t\n\tShe was 6\\\"12\\'.\n> She was 6\\\"12\\'.\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/syntax_hl.html",
    "content": "<p>This is ruby code:</p>\n\n<pre><code>require &#39;maruku&#39;\n\nputs Maruku.new($stdin).to_html</code></pre>\n\n<p>This is ruby code:</p>\n\n<pre><code class='ruby' lang='ruby'><span class='ident'>require</span> <span class='punct'>&#39;</span><span class='string'>maruku</span><span class='punct'>&#39;</span></code></pre>\n\n<pre><code>puts Maruku.new($stdin).to_html</code></pre>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/syntax_hl.json",
    "content": "[\"html\", [\"p\", \"This is ruby code:\"],\n    [\"pre\", [\"code\", \"require 'maruku'\\u000a\\u000aputs Maruku.new($stdin).to_html\"]],\n    [\"p\", \"This is ruby code:\"],\n    [\"pre\", [\"code\", {\n        \"class\": \"ruby\",\n        \"lang\": \"ruby\"\n    },\n    [\"span\", {\n        \"class\": \"ident\"\n    },\n    \"require\"], \" \", [\"span\", {\n        \"class\": \"punct\"\n    },\n    \"'\"],\n        [\"span\", {\n            \"class\": \"string\"\n        },\n        \"maruku\"],\n        [\"span\", {\n            \"class\": \"punct\"\n        },\n        \"'\"]]],\n    [\"pre\", [\"code\", \"puts Maruku.new($stdin).to_html\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/syntax_hl.text",
    "content": "This is ruby code:\n\n\trequire 'maruku'\n\t\n\tputs Maruku.new($stdin).to_html\n\nThis is ruby code:\n\n\trequire 'maruku'\n{: lang=ruby html_use_syntax}\n\t\n\tputs Maruku.new($stdin).to_html\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/table_attributes.html",
    "content": "<table cellspacing='2em' class='class1' border='3' rules='cols' frame='lhs' summary='Table summary' cellpadding='4px' width='50%' style='color:red'><thead><tr><th>h</th><th>h</th></tr></thead><tbody><tr><th scope='row' style='text-align: left;'> c1</th><td style='text-align: left;'>c2</td>\n</tr></tbody></table>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/table_attributes.json",
    "content": "[\"html\", [\"table\", {\n    \"cellspacing\": \"2em\",\n    \"class\": \"class1\",\n    \"border\": \"3\",\n    \"rules\": \"cols\",\n    \"frame\": \"lhs\",\n    \"summary\": \"Table summary\",\n    \"cellpadding\": \"4px\",\n    \"width\": \"50%\",\n    \"style\": \"color:red\"\n},\n[\"thead\", [\"tr\", [\"th\", \"h\"],\n    [\"th\", \"h\"]]],\n    [\"tbody\", [\"tr\", [\"th\", {\n        \"scope\": \"row\",\n        \"style\": \"text-align: left;\"\n    },\n    \" c1\"],\n        [\"td\", {\n            \"style\": \"text-align: left;\"\n        },\n        \"c2\"]]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/table_attributes.text",
    "content": "\nh         | h\n----------|--\n{:t}  c1  | c2\n{: summary=\"Table summary\" .class1 style=\"color:red\" border=3 width=\"50%\" frame=lhs rules=cols  cellspacing=2em cellpadding=4px}\n\n{:t: scope=\"row\"}\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/test.html",
    "content": "<pre><code>       $ python       </code></pre>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/test.json",
    "content": "[\"html\", [\"pre\", [\"code\", \"       $ python       \"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/test.text",
    "content": "\n           $ python       \n\n\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/wrapping.html",
    "content": "<p>Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Break:<br />Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet.</p>\n\n<ul>\n<li>Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet Lorem ipsum Break:<br />Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet</li>\n\n<li>Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet</li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/wrapping.json",
    "content": "[\"html\", [\"p\", \"Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Break:\", [\"br\"], \"Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet.\"],\n    [\"ul\", [\"li\", \"Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet Lorem ipsum Break:\", [\"br\"], \"Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet\"],\n        [\"li\", \"Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/wrapping.text",
    "content": "Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Break:  \nLorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. \n\n* Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet\n  Lorem ipsum Break:  \n  Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet\n* Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml.html",
    "content": "<svg:svg /><svg:svg height='400px' width='600px'>\n  <svg:g id='group'>\n\t<svg:circle cy='3cm' id='circ1' r='1cm' cx='3cm' style='fill:red;' />\n\t<svg:circle cy='3cm' id='circ2' r='1cm' cx='7cm' style='fill:red;' />\n  </svg:g>\n</svg:svg>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml.json",
    "content": "[\"html\", [\"svg:svg\"],\n    [\"svg:svg\", {\n        \"height\": \"400px\",\n        \"width\": \"600px\"\n    },\n    \"\\u000a  \", [\"svg:g\", {\n        \"id\": \"group\"\n    },\n    \"\\u000a\\u0009\", [\"svg:circle\", {\n        \"cy\": \"3cm\",\n        \"id\": \"circ1\",\n        \"r\": \"1cm\",\n        \"cx\": \"3cm\",\n        \"style\": \"fill:red;\"\n    }], \"\\u000a\\u0009\", [\"svg:circle\", {\n        \"cy\": \"3cm\",\n        \"id\": \"circ2\",\n        \"r\": \"1cm\",\n        \"cx\": \"7cm\",\n        \"style\": \"fill:red;\"\n    }], \"\\u000a  \"], \"\\u000a\"], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml.text",
    "content": "\n<svg:svg/>\n\n<svg:svg \nwidth=\"600px\" height=\"400px\">\n  <svg:g id=\"group\">\n\t<svg:circle id=\"circ1\" r=\"1cm\" cx=\"3cm\" cy=\"3cm\" style=\"fill:red;\"></svg:circle>\n\t<svg:circle id=\"circ2\" r=\"1cm\" cx=\"7cm\" cy=\"3cm\" style=\"fill:red;\" />\n  </svg:g>\n</svg:svg>\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml2.html",
    "content": "<!--\n<\n-->\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml2.json",
    "content": "[\"html\", \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml2.text",
    "content": "<!--\n<\n-->\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml3.html",
    "content": "<table>Blah<thead>\n\t\t<td><em>em</em></td>\n\t</thead>\n</table>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml3.json",
    "content": "[\"html\", [\"table\", \"Blah\", [\"thead\", [\"td\", [\"em\", \"em\"]]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml3.text",
    "content": "<table markdown='1'>\n\tBlah\n\t<thead>\n\t\t<td>*em*</td>\n\t</thead>\n</table>\n\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml_instruction.html",
    "content": "<? noTarget?><?php ?><?xml ?><?mrk ?>\n<p>Targets <? noTarget?> <?php ?> <?xml ?> <?mrk ?></p>\n\n<p>Inside: <?mrk puts \"Inside: Hello\"?> last</p>\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml_instruction.json",
    "content": "[\"html\", \"\\u000a\", [\"p\", \"Targets \", \" \", \"  \"],\n    [\"p\", \"Inside: \", \" last\"]]\n"
  },
  {
    "path": "test/fixtures/docs-maruku-unittest/xml_instruction.text",
    "content": "\n<? noTarget?> \n<?php ?> \n<?xml ?> \n<?mrk ?>\n\nTargets <? noTarget?> <?php ?> <?xml ?> <?mrk ?>\n\nInside: <?mrk puts \"Inside: Hello\" ?> last\n\n\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Backslash_escapes.html",
    "content": "<p>Tricky combinaisons:</p>\n\n<p>backslash with \\-- two dashes</p>\n\n<p>backslash with \\> greater than</p>\n\n<p>\\[test](not a link)</p>\n\n<p>\\*no emphasis*</p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Backslash_escapes.json",
    "content": "[\"html\", [\"p\", \"Tricky combinaisons:\"],\n    [\"p\", \"backslash with \\\\-- two dashes\"],\n    [\"p\", \"backslash with \\\\> greater than\"],\n    [\"p\", \"\\\\[test](not a link)\"],\n    [\"p\", \"\\\\*no emphasis*\"]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Backslash_escapes.text",
    "content": "Tricky combinaisons:\r\rbackslash with \\\\-- two dashes\r\rbackslash with \\\\> greater than\r\r\\\\\\[test](not a link)\r\r\\\\\\*no emphasis*"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Code_Spans.html",
    "content": "<p>From <code>&lt;!--</code> to <code>--&gt;</code>\non two lines.</p>\n\n<p>From <code>&lt;!--</code>\nto <code>--&gt;</code>\non three lines.</p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Code_Spans.json",
    "content": "[\"html\", [\"p\", \"From \", [\"code\", \"<!--\"], \" to \", [\"code\", \"-->\"], \"\\u000aon two lines.\"],\n    [\"p\", \"From \", [\"code\", \"<!--\"], \"\\u000ato \", [\"code\", \"-->\"], \"\\u000aon three lines.\"]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Code_Spans.text",
    "content": "From `<!--` to `-->`\non two lines.\n\nFrom `<!--`\nto `-->`\non three lines.\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Code_block_in_a_list_item.html",
    "content": "<ul>\n<li><p>List Item:</p>\n\n<pre><code>code block\n\n\nwith a blank line\n</code></pre>\n\n<p>within a list item.</p></li>\n</ul>"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Code_block_in_a_list_item.json",
    "content": "[\"html\", [\"ul\", [\"li\", [\"p\", \"List Item:\"],\n    [\"pre\", [\"code\", \"code block\\u000a\\u000a\\u000awith a blank line\\u000a\"]],\n    [\"p\", \"within a list item.\"]]]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Code_block_in_a_list_item.text",
    "content": "\n*\tList Item:\n\n\t\tcode block\n\n\t\twith a blank line\n\n\twithin a list item."
  },
  {
    "path": "test/fixtures/docs-php-markdown/Headers.html",
    "content": "<h1>Header</h1>\n\n<h2>Header</h2>\n\n<h3>Header</h3>\n\n<hr />\n\n<h1>Header</h1>\n\n<p>Paragraph</p>\n\n<h2>Header</h2>\n\n<p>Paragraph</p>\n\n<h3>Header</h3>\n\n<p>Paragraph</p>\n\n<hr />\n\n<p>Paragraph</p>\n\n<h1>Header</h1>\n\n<p>Paragraph</p>\n\n<p>Paragraph</p>\n\n<h2>Header</h2>\n\n<p>Paragraph</p>\n\n<p>Paragraph</p>\n\n<h3>Header</h3>\n\n<p>Paragraph</p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Headers.json",
    "content": "[\"html\", [\"h1\", \"Header\"], \"\\u000a\\u000a\", [\"h2\", \"Header\"], \"\\u000a\\u000a\", [\"h3\", \"Header\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"h1\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"h2\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"h3\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"h1\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"],\n    [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"h2\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"],\n    [\"p\", \"Paragraph\"], \"\\u000a\\u000a\", [\"h3\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph\"]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Headers.text",
    "content": "Header\r======\r\rHeader\r------\r\r### Header\n\n - - -\n\nHeader\r======\rParagraph\r\rHeader\r------\rParagraph\r\r### Header\rParagraph\n\n - - -\n\nParagraph\rHeader\r======\rParagraph\r\rParagraph\rHeader\r------\rParagraph\r\rParagraph\r### Header\rParagraph"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Images_(Untitled).html",
    "content": "<p><img src=\"/url/\" alt=\"alt text\" /></p>\n\n<p><img src=\"/url/\" alt=\"alt text\" /></p>\n\n<p><img src=\"/url/\" alt=\"alt text\" /></p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Images_(Untitled).json",
    "content": "[\"html\", [\"p\", [\"img\", {\n    \"src\": \"/url/\",\n    \"alt\": \"alt text\"\n}]],\n    [\"p\", [\"img\", {\n        \"src\": \"/url/\",\n        \"alt\": \"alt text\"\n    }]],\n    [\"p\", [\"img\", {\n        \"src\": \"/url/\",\n        \"alt\": \"alt text\"\n    }]]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Images_(Untitled).text",
    "content": "![alt text](/url/)\n\n![alt text](</url/>)\n\n![alt text][foo]\n\n  [foo]: /url/"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Inline_HTML_(Simple).html",
    "content": "<p>With some attributes:</p>\n\n<div id=\"test\">\n    foo\n</div>\n\n<div id=\"test\"\n     class=\"nono\">\n    foo\n</div>\n\n<p>Hr's:</p>\n\n<hr class=\"foo\"\n    id=\"bar\" >"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Inline_HTML_(Simple).json",
    "content": "[\"html\", [\"p\", \"With some attributes:\"], \"\\u000a\\u000a\", [\"div\", {\n    \"id\": \"test\"\n},\n\"\\u000a    foo\\u000a\"], \"\\u000a\\u000a\", [\"div\", {\n    \"id\": \"test\",\n    \"class\": \"nono\"\n},\n\"\\u000a    foo\\u000a\"], \"\\u000a\\u000a\", [\"p\", \"Hr's:\"], \"\\u000a\\u000a\", [\"hr\", {\n    \"class\": \"foo\",\n    \"id\": \"bar\"\n}]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Inline_HTML_(Simple).text",
    "content": "With some attributes:\n\n<div id=\"test\">\n\tfoo\n</div>\n\n<div id=\"test\"\n     class=\"nono\">\n\tfoo\n</div>\n\t\nHr's:\n\n<hr class=\"foo\"\n    id=\"bar\" >\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Inline_HTML_comments.html",
    "content": "<p>Paragraph one.</p>\n\n<!-- double--dash (invalid SGML comment) -->\n\n<p>Paragraph two.</p>\n\n<!-- enclosed tag </div> -->\n\n<p>The end.</p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Inline_HTML_comments.json",
    "content": "[\"html\", [\"p\", \"Paragraph one.\"], \"\\u000a\\u000a\", \"\\u000a\\u000a\", [\"p\", \"Paragraph two.\"], \"\\u000a\\u000a\", \"\\u000a\\u000a\", [\"p\", \"The end.\"]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Inline_HTML_comments.text",
    "content": "Paragraph one.\n\n<!-- double--dash (invalid SGML comment) -->\n\nParagraph two.\n\n<!-- enclosed tag </div> -->\n\nThe end.\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/PHP-Specific_Bugs.html",
    "content": "<p>This tests for a bug where quotes escaped by PHP when using \n<code>preg_replace</code> with the <code>/e</code> modifier must be correctly unescaped\n(hence the <code>_UnslashQuotes</code> function found only in PHP Markdown).</p>\n\n<p>Headers below should appear exactly as they are typed (no backslash\nadded or removed).</p>\n\n<h1>Header \"quoted\\\" again \\\"\"</h1>\n\n<h2>Header \"quoted\\\" again \\\"\"</h2>\n\n<h3>Header \"quoted\\\" again \\\"\"</h3>\n\n<p>Test with tabs for <code>_Detab</code>:</p>\n\n<pre><code>Code    'block' with    some    \"tabs\"  and \"quotes\"\n</code></pre>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/PHP-Specific_Bugs.json",
    "content": "[\"html\", [\"p\", \"This tests for a bug where quotes escaped by PHP when using \\u000a\", [\"code\", \"preg_replace\"], \" with the \", [\"code\", \"/e\"], \" modifier must be correctly unescaped\\u000a(hence the \", [\"code\", \"_UnslashQuotes\"], \" function found only in PHP Markdown).\"],\n    [\"p\", \"Headers below should appear exactly as they are typed (no backslash\\u000aadded or removed).\"], \"\\u000a\\u000a\", [\"h1\", \"Header \\\"quoted\\\\\\\" again \\\\\\\"\\\"\"], \"\\u000a\\u000a\", [\"h2\", \"Header \\\"quoted\\\\\\\" again \\\\\\\"\\\"\"], \"\\u000a\\u000a\", [\"h3\", \"Header \\\"quoted\\\\\\\" again \\\\\\\"\\\"\"], \"\\u000a\\u000a\", [\"p\", \"Test with tabs for \", [\"code\", \"_Detab\"], \":\"],\n    [\"pre\", [\"code\", \"Code    'block' with    some    \\\"tabs\\\"  and \\\"quotes\\\"\\u000a\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/PHP-Specific_Bugs.text",
    "content": "This tests for a bug where quotes escaped by PHP when using \n`preg_replace` with the `/e` modifier must be correctly unescaped\n(hence the `_UnslashQuotes` function found only in PHP Markdown).\n\n\n\nHeaders below should appear exactly as they are typed (no backslash\nadded or removed).\n\nHeader \"quoted\\\" again \\\\\"\"\n===========================\n\nHeader \"quoted\\\" again \\\\\"\"\n---------------------------\n\n### Header \"quoted\\\" again \\\\\"\" ###\n\n\n\nTest with tabs for `_Detab`:\n\n\tCode\t'block'\twith\tsome\t\"tabs\"\tand\t\"quotes\"\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Tight_blocks.html",
    "content": "<p>Paragraph and no space:\n* ciao</p>\n\n<p>Paragraph and 1 space:\n * ciao</p>\n\n<p>Paragraph and 3 spaces:\n  * ciao</p>\n\n<p>Paragraph and 4 spaces:\n   * ciao</p>\n\n<p>Paragraph before header:</p>\n\n<h1>Header</h1>\n\n<p>Paragraph before blockquote:</p>\n\n<blockquote>\n  <p>Some quote.</p>\n</blockquote>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Tight_blocks.json",
    "content": "[\"html\", [\"p\", \"Paragraph and no space:\\u000a* ciao\"],\n    [\"p\", \"Paragraph and 1 space:\\u000a * ciao\"],\n    [\"p\", \"Paragraph and 3 spaces:\\u000a  * ciao\"],\n    [\"p\", \"Paragraph and 4 spaces:\\u000a   * ciao\"],\n    [\"p\", \"Paragraph before header:\"], \"\\u000a\\u000a\", [\"h1\", \"Header\"], \"\\u000a\\u000a\", [\"p\", \"Paragraph before blockquote:\"],\n    [\"blockquote\", [\"p\", \"Some quote.\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown/Tight_blocks.text",
    "content": "Paragraph and no space:\r* ciao\r\rParagraph and 1 space:\r * ciao\r\rParagraph and 3 spaces:\r  * ciao\r\rParagraph and 4 spaces:\r   * ciao\r\rParagraph before header:\r#Header\r\rParagraph before blockquote:\r>Some quote.\r"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Abbr.html",
    "content": "<p>Some text about <abbr title=\"Hyper Text Markup Language\">HTML</abbr>, <abbr title=\"Standard Generalized Markup Language\">SGML</abbr> and <abbr title=\"Hyper Text Markup Language version 4\">HTML4</abbr>.</p>\n\n<p>Let's talk about the <abbr title=\"United States of America\">U.S.A.</abbr>, (<abbr title=\"États-Unis d'Amérique\">É.U.</abbr> or <abbr title=\"États-Unis d'Amérique\">É.-U. d'A.</abbr> in French).</p>\n\n<p>And here we have a <abbr title=\"Compact Disk\">CD</abbr>, some CDs, and some other <abbr title=\"Compact Disk\">CD</abbr>'s.</p>\n\n<p>Let's transfert documents through <abbr title=\"Transmission Control Protocol\">TCP</abbr>/<abbr title=\"Internet Protocol\">IP</abbr>, using <abbr title=\"Transmission Control Protocol\">TCP</abbr> packets.</p>\n\n<hr />\n\n<p>Bienvenue sur <a href=\"http://www.bidulecms.com\" title=\"Bidule CMS\"><abbr title=\"Content Management System\">CMS</abbr></a>.</p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Abbr.json",
    "content": "[\"html\", [\"p\", \"Some text about \", [\"abbr\", {\n    \"title\": \"Hyper Text Markup Language\"\n},\n\"HTML\"], \", \", [\"abbr\", {\n    \"title\": \"Standard Generalized Markup Language\"\n},\n\"SGML\"], \" and \", [\"abbr\", {\n    \"title\": \"Hyper Text Markup Language version 4\"\n},\n\"HTML4\"], \".\"],\n    [\"p\", \"Let's talk about the \", [\"abbr\", {\n        \"title\": \"United States of America\"\n    },\n    \"U.S.A.\"], \", (\", [\"abbr\", {\n        \"title\": \"États-Unis d'Amérique\"\n    },\n    \"É.U.\"], \" or \", [\"abbr\", {\n        \"title\": \"États-Unis d'Amérique\"\n    },\n    \"É.-U. d'A.\"], \" in French).\"],\n    [\"p\", \"And here we have a \", [\"abbr\", {\n        \"title\": \"Compact Disk\"\n    },\n    \"CD\"], \", some CDs, and some other \", [\"abbr\", {\n        \"title\": \"Compact Disk\"\n    },\n    \"CD\"], \"'s.\"],\n    [\"p\", \"Let's transfert documents through \", [\"abbr\", {\n        \"title\": \"Transmission Control Protocol\"\n    },\n    \"TCP\"], \"/\", [\"abbr\", {\n        \"title\": \"Internet Protocol\"\n    },\n    \"IP\"], \", using \", [\"abbr\", {\n        \"title\": \"Transmission Control Protocol\"\n    },\n    \"TCP\"], \" packets.\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", \"Bienvenue sur \", [\"a\", {\n    \"href\": \"http://www.bidulecms.com\",\n    \"title\": \"Bidule CMS\"\n},\n[\"abbr\", {\n    \"title\": \"Content Management System\"\n},\n\"CMS\"]], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Abbr.text",
    "content": "Some text about HTML, SGML and HTML4.\n\nLet's talk about the U.S.A., (É.U. or É.-U. d'A. in French).\n\n*[HTML4]: Hyper Text Markup Language version 4\n*[HTML]: Hyper Text Markup Language\n*[SGML]: Standard Generalized Markup Language\n*[U.S.A.]: United States of America\n*[É.U.] : États-Unis d'Amérique\n*[É.-U. d'A.] : États-Unis d'Amérique\n\nAnd here we have a CD, some CDs, and some other CD's.\n\n*[CD]: Compact Disk\n\nLet's transfert documents through TCP/IP, using TCP packets.\n\n*[IP]: Internet Protocol\n*[TCP]: Transmission Control Protocol\n\n ---\n\nBienvenue sur [CMS](http://www.bidulecms.com \"Bidule CMS\").\n\n*[CMS]: Content Management System"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Definition_Lists.html",
    "content": "<p>A simple definition list:</p>\n\n<dl>\n<dt>Term 1</dt>\n<dd>Definition 1</dd>\n\n<dt>Term 2</dt>\n<dd>Definition 2</dd>\n</dl>\n\n<p>With multiple terms:</p>\n\n<dl>\n<dt>Term 1</dt>\n<dt>Term 2</dt>\n<dd>Definition 1</dd>\n\n<dt>Term 3</dt>\n<dt>Term 4</dt>\n<dd>Definition 2</dd>\n</dl>\n\n<p>With multiple definitions:</p>\n\n<dl>\n<dt>Term 1</dt>\n<dd>Definition 1</dd>\n\n<dd>Definition 2</dd>\n\n<dt>Term 2</dt>\n<dd>Definition 3</dd>\n\n<dd>Definition 4</dd>\n</dl>\n\n<p>With multiple lines per definition:</p>\n\n<dl>\n<dt>Term 1</dt>\n<dd>Definition 1 line 1 ...\nDefinition 1 line 2</dd>\n\n<dd>Definition 2 line 1 ...\nDefinition 2 line 2</dd>\n\n<dt>Term 2</dt>\n<dd>Definition 3 line 2 ...\nDefinition 3 line 2</dd>\n\n<dd>Definition 4 line 2 ...\nDefinition 4 line 2</dd>\n</dl>\n\n<p>With paragraphs:</p>\n\n<dl>\n<dt>Term 1</dt>\n<dd>\n<p>Definition 1 (paragraph)</p>\n</dd>\n\n<dt>Term 2</dt>\n<dd>\n<p>Definition 2 (paragraph)</p>\n</dd>\n</dl>\n\n<p>With multiple paragraphs:</p>\n\n<dl>\n<dt>Term 1</dt>\n<dd>\n<p>Definition 1 paragraph 1 line 1 ...\nDefinition 1 paragraph 1 line 2</p>\n\n<p>Definition 1 paragraph 2 line 1 ...\nDefinition 1 paragraph 2 line 2</p>\n</dd>\n\n<dt>Term 2</dt>\n<dd>\n<p>Definition 1 paragraph 1 line 1 ...\nDefinition 1 paragraph 1 line 2 (lazy)</p>\n\n<p>Definition 1 paragraph 2 line 1 ...\nDefinition 1 paragraph 2 line 2 (lazy)</p>\n</dd>\n</dl>\n\n<hr />\n\n<p>A mix:</p>\n\n<dl>\n<dt>Term 1</dt>\n<dt>Term 2</dt>\n<dd>\n<p>Definition 1 paragraph 1 line 1 ...\nDefinition 1 paragraph 1 line 2 (lazy)</p>\n\n<p>Definition 1 paragraph 2 line 1 ...\nDefinition 1 paragraph 2 line 2</p>\n</dd>\n\n<dd>\n<p>Definition 2 paragraph 1 line 1 ...\nDefinition 2 paragraph 1 line 2 (lazy)</p>\n</dd>\n\n<dt>Term 3</dt>\n<dd>Definition 3 (no paragraph)</dd>\n\n<dd>Definition 4 (no paragraph)</dd>\n\n<dd>Definition 5 line 1 ...\nDefinition 5 line 2 (no paragraph)</dd>\n\n<dd>\n<p>Definition 6 paragraph 1 line 1 ...\nDefinition 6 paragraph 1 line 2</p>\n</dd>\n\n<dd>Definition 7 (no paragraph)</dd>\n\n<dd>\n<p>Definition 8 paragraph 1 line 1 (forced paragraph) ...\nDefinition 8 paragraph 1 line 2</p>\n\n<p>Definition 8 paragraph 2 line 1</p>\n</dd>\n\n<dt>Term 4</dt>\n<dd>\n<p>Definition 9 paragraph 1 line 1 (forced paragraph) ...\nDefinition 9 paragraph 1 line 2</p>\n\n<p>Definition 9 paragraph 2 line 1</p>\n</dd>\n\n<dd>Definition 10 (no paragraph)</dd>\n</dl>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Definition_Lists.json",
    "content": "[\"html\", [\"p\", \"A simple definition list:\"], \"\\u000a\\u000a\", [\"dl\", [\"dt\", \"Term 1\"],\n    [\"dd\", \"Definition 1\"],\n    [\"dt\", \"Term 2\"],\n    [\"dd\", \"Definition 2\"]], \"\\u000a\\u000a\", [\"p\", \"With multiple terms:\"], \"\\u000a\\u000a\", [\"dl\", [\"dt\", \"Term 1\"],\n    [\"dt\", \"Term 2\"],\n    [\"dd\", \"Definition 1\"],\n    [\"dt\", \"Term 3\"],\n    [\"dt\", \"Term 4\"],\n    [\"dd\", \"Definition 2\"]], \"\\u000a\\u000a\", [\"p\", \"With multiple definitions:\"], \"\\u000a\\u000a\", [\"dl\", [\"dt\", \"Term 1\"],\n    [\"dd\", \"Definition 1\"],\n    [\"dd\", \"Definition 2\"],\n    [\"dt\", \"Term 2\"],\n    [\"dd\", \"Definition 3\"],\n    [\"dd\", \"Definition 4\"]], \"\\u000a\\u000a\", [\"p\", \"With multiple lines per definition:\"], \"\\u000a\\u000a\", [\"dl\", [\"dt\", \"Term 1\"],\n    [\"dd\", \"Definition 1 line 1 ...\\u000aDefinition 1 line 2\"],\n    [\"dd\", \"Definition 2 line 1 ...\\u000aDefinition 2 line 2\"],\n    [\"dt\", \"Term 2\"],\n    [\"dd\", \"Definition 3 line 2 ...\\u000aDefinition 3 line 2\"],\n    [\"dd\", \"Definition 4 line 2 ...\\u000aDefinition 4 line 2\"]], \"\\u000a\\u000a\", [\"p\", \"With paragraphs:\"], \"\\u000a\\u000a\", [\"dl\", [\"dt\", \"Term 1\"],\n    [\"dd\", [\"p\", \"Definition 1 (paragraph)\"]],\n    [\"dt\", \"Term 2\"],\n    [\"dd\", [\"p\", \"Definition 2 (paragraph)\"]]], \"\\u000a\\u000a\", [\"p\", \"With multiple paragraphs:\"], \"\\u000a\\u000a\", [\"dl\", [\"dt\", \"Term 1\"],\n    [\"dd\", [\"p\", \"Definition 1 paragraph 1 line 1 ...\\u000aDefinition 1 paragraph 1 line 2\"],\n        [\"p\", \"Definition 1 paragraph 2 line 1 ...\\u000aDefinition 1 paragraph 2 line 2\"]],\n    [\"dt\", \"Term 2\"],\n    [\"dd\", [\"p\", \"Definition 1 paragraph 1 line 1 ...\\u000aDefinition 1 paragraph 1 line 2 (lazy)\"],\n        [\"p\", \"Definition 1 paragraph 2 line 1 ...\\u000aDefinition 1 paragraph 2 line 2 (lazy)\"]]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", \"A mix:\"], \"\\u000a\\u000a\", [\"dl\", [\"dt\", \"Term 1\"],\n    [\"dt\", \"Term 2\"],\n    [\"dd\", [\"p\", \"Definition 1 paragraph 1 line 1 ...\\u000aDefinition 1 paragraph 1 line 2 (lazy)\"],\n        [\"p\", \"Definition 1 paragraph 2 line 1 ...\\u000aDefinition 1 paragraph 2 line 2\"]],\n    [\"dd\", [\"p\", \"Definition 2 paragraph 1 line 1 ...\\u000aDefinition 2 paragraph 1 line 2 (lazy)\"]],\n    [\"dt\", \"Term 3\"],\n    [\"dd\", \"Definition 3 (no paragraph)\"],\n    [\"dd\", \"Definition 4 (no paragraph)\"],\n    [\"dd\", \"Definition 5 line 1 ...\\u000aDefinition 5 line 2 (no paragraph)\"],\n    [\"dd\", [\"p\", \"Definition 6 paragraph 1 line 1 ...\\u000aDefinition 6 paragraph 1 line 2\"]],\n    [\"dd\", \"Definition 7 (no paragraph)\"],\n    [\"dd\", [\"p\", \"Definition 8 paragraph 1 line 1 (forced paragraph) ...\\u000aDefinition 8 paragraph 1 line 2\"],\n        [\"p\", \"Definition 8 paragraph 2 line 1\"]],\n    [\"dt\", \"Term 4\"],\n    [\"dd\", [\"p\", \"Definition 9 paragraph 1 line 1 (forced paragraph) ...\\u000aDefinition 9 paragraph 1 line 2\"],\n        [\"p\", \"Definition 9 paragraph 2 line 1\"]],\n    [\"dd\", \"Definition 10 (no paragraph)\"]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Definition_Lists.text",
    "content": "A simple definition list:\n\nTerm 1\n:   Definition 1\n\nTerm 2\n:   Definition 2\n\nWith multiple terms:\n\nTerm 1\nTerm 2\n:   Definition 1\n\nTerm 3\nTerm 4\n:   Definition 2\n\nWith multiple definitions:\n\nTerm 1\n:   Definition 1\n:   Definition 2\n\nTerm 2\n:   Definition 3\n:   Definition 4\n\nWith multiple lines per definition:\n\nTerm 1\n:   Definition 1 line 1 ...\nDefinition 1 line 2\n:   Definition 2 line 1 ...\nDefinition 2 line 2\n\nTerm 2\n:   Definition 3 line 2 ...\n    Definition 3 line 2\n:   Definition 4 line 2 ...\n    Definition 4 line 2\n\nWith paragraphs:\n\nTerm 1\n\n:   Definition 1 (paragraph)\n\nTerm 2\n\n:   Definition 2 (paragraph)\n\nWith multiple paragraphs:\n\nTerm 1\n\n:   Definition 1 paragraph 1 line 1 ...\n\tDefinition 1 paragraph 1 line 2\n\n    Definition 1 paragraph 2 line 1 ...\n    Definition 1 paragraph 2 line 2\n\nTerm 2\n\n:   Definition 1 paragraph 1 line 1 ...\nDefinition 1 paragraph 1 line 2 (lazy)\n\n    Definition 1 paragraph 2 line 1 ...\nDefinition 1 paragraph 2 line 2 (lazy)\n\n* * *\n\nA mix:\n\nTerm 1\nTerm 2\n\n:   Definition 1 paragraph 1 line 1 ...\nDefinition 1 paragraph 1 line 2 (lazy)\n    \n    Definition 1 paragraph 2 line 1 ...\n    Definition 1 paragraph 2 line 2\n\n:   Definition 2 paragraph 1 line 1 ...\nDefinition 2 paragraph 1 line 2 (lazy)\n\nTerm 3\n:   Definition 3 (no paragraph)\n:   Definition 4 (no paragraph)\n:   Definition 5 line 1 ...\n    Definition 5 line 2 (no paragraph)\n\n:   Definition 6 paragraph 1 line 1 ...\nDefinition 6 paragraph 1 line 2\n:   Definition 7 (no paragraph)\n:   Definition 8 paragraph 1 line 1 (forced paragraph) ...\n    Definition 8 paragraph 1 line 2\n    \n    Definition 8 paragraph 2 line 1\n    \nTerm 4\n:   Definition 9 paragraph 1 line 1 (forced paragraph) ...\n    Definition 9 paragraph 1 line 2\n    \n    Definition 9 paragraph 2 line 1\n:   Definition 10 (no paragraph)"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Emphasis.html",
    "content": "<p>Combined emphasis:</p>\n\n<ol>\n<li><strong><em>test test</em></strong></li>\n<li><strong><em>test test</em></strong></li>\n<li><em>test <strong>test</strong></em></li>\n<li><strong>test <em>test</em></strong></li>\n<li><strong><em>test</em> test</strong></li>\n<li><em><strong>test</strong> test</em></li>\n<li><strong><em>test</em> test</strong></li>\n<li><strong>test <em>test</em></strong></li>\n<li><em>test <strong>test</strong></em></li>\n<li><em>test <strong>test</strong></em></li>\n<li><strong>test <em>test</em></strong></li>\n<li><strong><em>test</em> test</strong></li>\n<li><em><strong>test</strong> test</em></li>\n<li><strong><em>test</em> test</strong></li>\n<li><strong>test <em>test</em></strong></li>\n<li><em>test <strong>test</strong></em></li>\n</ol>\n\n<p>Incorrect nesting:</p>\n\n<ol>\n<li>*test  <strong>test*  test</strong></li>\n<li>_test  <strong>test_  test</strong></li>\n<li>**test  <em>test</em>* test*</li>\n<li>__test  <em>test</em>_ test_</li>\n<li><em>test   *test</em>  test*</li>\n<li><em>test   _test</em>  test_</li>\n<li><strong>test <strong>test</strong> test</strong></li>\n<li><strong>test <strong>test</strong> test</strong></li>\n</ol>\n\n<p>No emphasis:</p>\n\n<ol>\n<li>test*  test  *test</li>\n<li>test** test **test</li>\n<li>test_  test  _test</li>\n<li>test__ test __test</li>\n</ol>\n\n<p>Middle-word emphasis (asterisks):</p>\n\n<ol>\n<li><em>a</em>b</li>\n<li>a<em>b</em></li>\n<li>a<em>b</em>c</li>\n<li><strong>a</strong>b</li>\n<li>a<strong>b</strong></li>\n<li>a<strong>b</strong>c</li>\n</ol>\n\n<p>Middle-word emphasis (underscore):</p>\n\n<ol>\n<li>_a_b</li>\n<li>a_b_</li>\n<li>a_b_c</li>\n<li>__a__b</li>\n<li>a__b__</li>\n<li>a__b__c</li>\n</ol>\n\n<p>my_precious_file.txt</p>\n\n<h2>Tricky Cases</h2>\n\n<p>E**. <strong>Test</strong> TestTestTest</p>\n\n<p>E**. <strong>Test</strong> Test Test Test</p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Emphasis.json",
    "content": "[\"html\", [\"p\", \"Combined emphasis:\"],\n    [\"ol\", [\"li\", [\"strong\", [\"em\", \"test test\"]]],\n        [\"li\", [\"strong\", [\"em\", \"test test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"em\", [\"strong\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"em\", [\"strong\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]]],\n    [\"p\", \"Incorrect nesting:\"],\n    [\"ol\", [\"li\", \"*test  \", [\"strong\", \"test*  test\"]],\n        [\"li\", \"_test  \", [\"strong\", \"test_  test\"]],\n        [\"li\", \"**test  \", [\"em\", \"test\"], \"* test*\"],\n        [\"li\", \"__test  \", [\"em\", \"test\"], \"_ test_\"],\n        [\"li\", [\"em\", \"test   *test\"], \"  test*\"],\n        [\"li\", [\"em\", \"test   _test\"], \"  test_\"],\n        [\"li\", [\"strong\", \"test \", [\"strong\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", \"test \", [\"strong\", \"test\"], \" test\"]]],\n    [\"p\", \"No emphasis:\"],\n    [\"ol\", [\"li\", \"test*  test  *test\"],\n        [\"li\", \"test** test **test\"],\n        [\"li\", \"test_  test  _test\"],\n        [\"li\", \"test__ test __test\"]],\n    [\"p\", \"Middle-word emphasis (asterisks):\"],\n    [\"ol\", [\"li\", [\"em\", \"a\"], \"b\"],\n        [\"li\", \"a\", [\"em\", \"b\"]],\n        [\"li\", \"a\", [\"em\", \"b\"], \"c\"],\n        [\"li\", [\"strong\", \"a\"], \"b\"],\n        [\"li\", \"a\", [\"strong\", \"b\"]],\n        [\"li\", \"a\", [\"strong\", \"b\"], \"c\"]],\n    [\"p\", \"Middle-word emphasis (underscore):\"],\n    [\"ol\", [\"li\", \"_a_b\"],\n        [\"li\", \"a_b_\"],\n        [\"li\", \"a_b_c\"],\n        [\"li\", \"__a__b\"],\n        [\"li\", \"a__b__\"],\n        [\"li\", \"a__b__c\"]],\n    [\"p\", \"my_precious_file.txt\"], \"\\u000a\\u000a\", [\"h2\", \"Tricky Cases\"], \"\\u000a\\u000a\", [\"p\", \"E**. \", [\"strong\", \"Test\"], \" TestTestTest\"],\n    [\"p\", \"E**. \", [\"strong\", \"Test\"], \" Test Test Test\"]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Emphasis.text",
    "content": "Combined emphasis:\n\n1.  ***test test***\n2.  ___test test___\n3.  *test **test***\n4.  **test *test***\n5.  ***test* test**\n6.  ***test** test*\n7.  ***test* test**\n8.  **test *test***\n9.  *test **test***\n10. _test __test___\n11. __test _test___\n12. ___test_ test__\n13. ___test__ test_\n14. ___test_ test__\n15. __test _test___\n16. _test __test___\n\n\nIncorrect nesting:\n\n1.  *test  **test*  test**\n2.  _test  __test_  test__\n3.  **test  *test** test*\n4.  __test  _test__ test_\n5.  *test   *test*  test*\n6.  _test   _test_  test_\n7.  **test **test** test**\n8.  __test __test__ test__\n\n\n\nNo emphasis:\n\n1.  test*  test  *test\n2.  test** test **test\n3.  test_  test  _test\n4.  test__ test __test\n\n\n\nMiddle-word emphasis (asterisks):\n\n1.  *a*b\n2.   a*b*\n3.   a*b*c\n4. **a**b\n5.   a**b**\n6.   a**b**c\n\n\nMiddle-word emphasis (underscore):\n\n1.  _a_b\n2.   a_b_\n3.   a_b_c\n4. __a__b\n5.   a__b__\n6.   a__b__c\n\nmy_precious_file.txt\n\n\n## Tricky Cases\n\nE**. **Test** TestTestTest\n\nE**. **Test** Test Test Test\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Footnotes.html",
    "content": "<p>This is the first paragraph.<sup id=\"fnref:first\"><a href=\"#fn:first\" rel=\"footnote\">1</a></sup></p>\n\n<ul>\n<li>List item one.<sup id=\"fnref:second\"><a href=\"#fn:second\" rel=\"footnote\">2</a></sup></li>\n<li>List item two.<sup id=\"fnref:third\"><a href=\"#fn:third\" rel=\"footnote\">3</a></sup></li>\n</ul>\n\n<h1>Header<sup id=\"fnref:fourth\"><a href=\"#fn:fourth\" rel=\"footnote\">4</a></sup></h1>\n\n<p>Some paragraph with a footnote<sup id=\"fnref:1\"><a href=\"#fn:1\" rel=\"footnote\">5</a></sup>, and another<sup id=\"fnref:2\"><a href=\"#fn:2\" rel=\"footnote\">6</a></sup>.</p>\n\n<p>Another paragraph with a named footnote<sup id=\"fnref:fn-name\"><a href=\"#fn:fn-name\" rel=\"footnote\">7</a></sup>.</p>\n\n<p>This paragraph should not have a footnote marker since \nthe footnote is undefined.[^3]</p>\n\n<p>This paragraph should not have a footnote marker since \nthe footnote has already been used before.[^1]</p>\n\n<p>This paragraph links to a footnote with plenty of \nblock-level content.<sup id=\"fnref:block\"><a href=\"#fn:block\" rel=\"footnote\">8</a></sup></p>\n\n<p>This paragraph host the footnote reference within a \nfootnote test<sup id=\"fnref:reference\"><a href=\"#fn:reference\" rel=\"footnote\">9</a></sup>.</p>\n\n<div class=\"footnotes\">\n<hr />\n<ol>\n\n<li id=\"fn:first\">\n<p>This is the first note.&#160;<a href=\"#fnref:first\" rev=\"footnote\">&#8617;</a></p>\n</li>\n\n<li id=\"fn:second\">\n<p>This is the second note.&#160;<a href=\"#fnref:second\" rev=\"footnote\">&#8617;</a></p>\n</li>\n\n<li id=\"fn:third\">\n<p>This is the third note, defined out of order.&#160;<a href=\"#fnref:third\" rev=\"footnote\">&#8617;</a></p>\n</li>\n\n<li id=\"fn:fourth\">\n<p>This is the fourth note.&#160;<a href=\"#fnref:fourth\" rev=\"footnote\">&#8617;</a></p>\n</li>\n\n<li id=\"fn:1\">\n<p>Content for fifth footnote.&#160;<a href=\"#fnref:1\" rev=\"footnote\">&#8617;</a></p>\n</li>\n\n<li id=\"fn:2\">\n<p>Content for sixth footnote spaning on \nthree lines, with some span-level markup like\n<em>emphasis</em>, a <a href=\"http://www.michelf.com/\">link</a>.&#160;<a href=\"#fnref:2\" rev=\"footnote\">&#8617;</a></p>\n</li>\n\n<li id=\"fn:fn-name\">\n<p>Footnote beginning on the line next to the marker.&#160;<a href=\"#fnref:fn-name\" rev=\"footnote\">&#8617;</a></p>\n</li>\n\n<li id=\"fn:block\">\n<p>Paragraph.</p>\n\n<ul>\n<li>List item</li>\n</ul>\n\n<blockquote>\n  <p>Blockquote</p>\n</blockquote>\n\n<pre><code>Code block\n</code></pre>\n\n<p><a href=\"#fnref:block\" rev=\"footnote\">&#8617;</a></p>\n</li>\n\n<li id=\"fn:reference\">\n<p>This footnote attemps to refer to another footnote. This \nshould be impossible.[^impossible]&#160;<a href=\"#fnref:reference\" rev=\"footnote\">&#8617;</a></p>\n</li>\n\n</ol>\n</div>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Footnotes.json",
    "content": "[\"html\", [\"p\", \"This is the first paragraph.\", [\"sup\", {\n    \"id\": \"fnref:first\"\n},\n[\"a\", {\n    \"href\": \"#fn:first\",\n    \"rel\": \"footnote\"\n},\n\"1\"]]],\n    [\"ul\", [\"li\", \"List item one.\", [\"sup\", {\n        \"id\": \"fnref:second\"\n    },\n    [\"a\", {\n        \"href\": \"#fn:second\",\n        \"rel\": \"footnote\"\n    },\n    \"2\"]]],\n        [\"li\", \"List item two.\", [\"sup\", {\n            \"id\": \"fnref:third\"\n        },\n        [\"a\", {\n            \"href\": \"#fn:third\",\n            \"rel\": \"footnote\"\n        },\n        \"3\"]]]], \"\\u000a\\u000a\", [\"h1\", \"Header\", [\"sup\", {\n    \"id\": \"fnref:fourth\"\n},\n[\"a\", {\n    \"href\": \"#fn:fourth\",\n    \"rel\": \"footnote\"\n},\n\"4\"]]], \"\\u000a\\u000a\", [\"p\", \"Some paragraph with a footnote\", [\"sup\", {\n    \"id\": \"fnref:1\"\n},\n[\"a\", {\n    \"href\": \"#fn:1\",\n    \"rel\": \"footnote\"\n},\n\"5\"]], \", and another\", [\"sup\", {\n    \"id\": \"fnref:2\"\n},\n[\"a\", {\n    \"href\": \"#fn:2\",\n    \"rel\": \"footnote\"\n},\n\"6\"]], \".\"],\n    [\"p\", \"Another paragraph with a named footnote\", [\"sup\", {\n        \"id\": \"fnref:fn-name\"\n    },\n    [\"a\", {\n        \"href\": \"#fn:fn-name\",\n        \"rel\": \"footnote\"\n    },\n    \"7\"]], \".\"],\n    [\"p\", \"This paragraph should not have a footnote marker since \\u000athe footnote is undefined.[^3]\"],\n    [\"p\", \"This paragraph should not have a footnote marker since \\u000athe footnote has already been used before.[^1]\"],\n    [\"p\", \"This paragraph links to a footnote with plenty of \\u000ablock-level content.\", [\"sup\", {\n        \"id\": \"fnref:block\"\n    },\n    [\"a\", {\n        \"href\": \"#fn:block\",\n        \"rel\": \"footnote\"\n    },\n    \"8\"]]],\n    [\"p\", \"This paragraph host the footnote reference within a \\u000afootnote test\", [\"sup\", {\n        \"id\": \"fnref:reference\"\n    },\n    [\"a\", {\n        \"href\": \"#fn:reference\",\n        \"rel\": \"footnote\"\n    },\n    \"9\"]], \".\"], \"\\u000a\\u000a\", [\"div\", {\n    \"class\": \"footnotes\"\n},\n\"\\u000a\", [\"hr\"], \"\\u000a\", [\"ol\", [\"li\", {\n    \"id\": \"fn:first\"\n},\n[\"p\", \"This is the first note. \", [\"a\", {\n    \"href\": \"#fnref:first\",\n    \"rev\": \"footnote\"\n},\n\"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn:second\"\n    },\n    [\"p\", \"This is the second note. \", [\"a\", {\n        \"href\": \"#fnref:second\",\n        \"rev\": \"footnote\"\n    },\n    \"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn:third\"\n    },\n    [\"p\", \"This is the third note, defined out of order. \", [\"a\", {\n        \"href\": \"#fnref:third\",\n        \"rev\": \"footnote\"\n    },\n    \"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn:fourth\"\n    },\n    [\"p\", \"This is the fourth note. \", [\"a\", {\n        \"href\": \"#fnref:fourth\",\n        \"rev\": \"footnote\"\n    },\n    \"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn:1\"\n    },\n    [\"p\", \"Content for fifth footnote. \", [\"a\", {\n        \"href\": \"#fnref:1\",\n        \"rev\": \"footnote\"\n    },\n    \"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn:2\"\n    },\n    [\"p\", \"Content for sixth footnote spaning on \\u000athree lines, with some span-level markup like\\u000a\", [\"em\", \"emphasis\"], \", a \", [\"a\", {\n        \"href\": \"http://www.michelf.com/\"\n    },\n    \"link\"], \". \", [\"a\", {\n        \"href\": \"#fnref:2\",\n        \"rev\": \"footnote\"\n    },\n    \"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn:fn-name\"\n    },\n    [\"p\", \"Footnote beginning on the line next to the marker. \", [\"a\", {\n        \"href\": \"#fnref:fn-name\",\n        \"rev\": \"footnote\"\n    },\n    \"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn:block\"\n    },\n    [\"p\", \"Paragraph.\"],\n        [\"ul\", [\"li\", \"List item\"]],\n        [\"blockquote\", [\"p\", \"Blockquote\"]],\n        [\"pre\", [\"code\", \"Code block\\u000a\"]],\n        [\"p\", [\"a\", {\n            \"href\": \"#fnref:block\",\n            \"rev\": \"footnote\"\n        },\n        \"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn:reference\"\n    },\n    [\"p\", \"This footnote attemps to refer to another footnote. This \\u000ashould be impossible.[^impossible] \", [\"a\", {\n        \"href\": \"#fnref:reference\",\n        \"rev\": \"footnote\"\n    },\n    \"↩\"]]]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Footnotes.text",
    "content": "This is the first paragraph.[^first]\n\n[^first]:  This is the first note.\n\n* List item one.[^second]\n* List item two.[^third]\n\n[^third]: This is the third note, defined out of order.\n[^second]: This is the second note.\n[^fourth]: This is the fourth note.\n\n# Header[^fourth]\n\nSome paragraph with a footnote[^1], and another[^2].\n\n[^1]: Content for fifth footnote.\n[^2]: Content for sixth footnote spaning on \n    three lines, with some span-level markup like\n    _emphasis_, a [link][].\n\n[link]: http://www.michelf.com/\n\nAnother paragraph with a named footnote[^fn-name].\n\n[^fn-name]:\n    Footnote beginning on the line next to the marker.\n\nThis paragraph should not have a footnote marker since \nthe footnote is undefined.[^3]\n\nThis paragraph should not have a footnote marker since \nthe footnote has already been used before.[^1]\n\nThis paragraph links to a footnote with plenty of \nblock-level content.[^block]\n\n[^block]:\n\tParagraph.\n\t\n\t*   List item\n\t\n\t> Blockquote\n\t\n\t    Code block\n\nThis paragraph host the footnote reference within a \nfootnote test[^reference].\n\n[^reference]:\n\tThis footnote attemps to refer to another footnote. This \n\tshould be impossible.[^impossible]\n\n[^impossible]:\n\tThis footnote should not appear, as it is refered from \n\tanother footnote, which is not allowed.\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Inline_HTML_with_Markdown_content.html",
    "content": "<h1>Markdown inside code blocks</h1>\n\n<div>\n\n<p>foo</p>\n\n</div>\n\n<div>\n\n<p>foo</p>\n\n</div>\n\n<div>\n\n<p>foo</p>\n\n</div>\n\n<table>\n<tr><td>test <em>emphasis</em> (span)</td></tr>\n</table>\n\n<table>\n<tr><td>test <em>emphasis</em> (span)</td></tr>\n</table>\n\n<table>\n<tr><td>\n\n<p>test <em>emphasis</em> (block)</p>\n\n</td></tr>\n</table>\n\n<h2>More complicated</h2>\n\n<table>\n<tr><td>\n* this is <em>not</em> a list item</td></tr>\n<tr><td>\n* this is <em>not</em> a list item</td></tr>\n<tr><td>\n\n<ul>\n<li>this <em>is</em> a list item</li>\n</ul>\n\n</td></tr>\n</table>\n\n<h2>With indent</h2>\n\n<div>\n    <div>\n\n<p>This text is no code block: if it was, the \nclosing <code>&lt;div&gt;</code> would be too and the HTML block \nwould be invalid.</p>\n\n<p>Markdown content in HTML blocks is assumed to be \nindented the same as the block opening tag.</p>\n\n<p><strong>This should be the third paragraph after the header.</strong></p>\n\n</div>\n</div>\n\n<h2>Code block with rogue <code>&lt;/div&gt;</code>s in Markdown code span and block</h2>\n\n<div>\n    <div>\n\n<p>This is a code block however:</p>\n\n<pre><code>&lt;/div&gt;\n</code></pre>\n\n<p>Funny isn't it? Here is a code span: <code>&lt;/div&gt;</code>.</p>\n\n</div>\n</div>\n\n<div>\n  <div>\n\n<ul>\n<li>List item, not a code block</li>\n</ul>\n\n<p>Some text</p>\n\n<pre><code>This is a code block.\n</code></pre>\n\n</div>\n</div>\n\n<h2>No code block in markdown span mode</h2>\n\n<p>\n    This is not a code block since Markdown parse paragraph \n    content as span. Code spans like <code>&lt;/p&gt;</code> are allowed though.\n</p>\n\n<p><em>Hello</em> <em>world</em></p>\n\n<h2>Preserving attributes and tags on more than one line:</h2>\n\n<p class=\"test\" \nid=\"12\">\nSome <em>span</em> content.\n</p>\n\n<h2>Header confusion bug</h2>\n\n<table class=\"canvas\">\n<tr>\n<td id=\"main\">Hello World!\n============\n\nHello World!</td>\n</tr>\n</table>"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Inline_HTML_with_Markdown_content.json",
    "content": "[\"html\", [\"h1\", \"Markdown inside code blocks\"], \"\\u000a\\u000a\", [\"div\", [\"p\", \"foo\"]], \"\\u000a\\u000a\", [\"div\", [\"p\", \"foo\"]], \"\\u000a\\u000a\", [\"div\", [\"p\", \"foo\"]], \"\\u000a\\u000a\", [\"table\", [\"tr\", [\"td\", \"test \", [\"em\", \"emphasis\"], \" (span)\"]]], \"\\u000a\\u000a\", [\"table\", [\"tr\", [\"td\", \"test \", [\"em\", \"emphasis\"], \" (span)\"]]], \"\\u000a\\u000a\", [\"table\", [\"tr\", [\"td\", [\"p\", \"test \", [\"em\", \"emphasis\"], \" (block)\"]]]], \"\\u000a\\u000a\", [\"h2\", \"More complicated\"], \"\\u000a\\u000a\", [\"table\", [\"tr\", [\"td\", \"\\u000a* this is \", [\"em\", \"not\"], \" a list item\"]],\n    [\"tr\", [\"td\", \"\\u000a* this is \", [\"em\", \"not\"], \" a list item\"]],\n    [\"tr\", [\"td\", [\"ul\", [\"li\", \"this \", [\"em\", \"is\"], \" a list item\"]]]]], \"\\u000a\\u000a\", [\"h2\", \"With indent\"], \"\\u000a\\u000a\", [\"div\", \"\\u000a    \", [\"div\", [\"p\", \"This text is no code block: if it was, the \\u000aclosing \", [\"code\", \"<div>\"], \" would be too and the HTML block \\u000awould be invalid.\"],\n    [\"p\", \"Markdown content in HTML blocks is assumed to be \\u000aindented the same as the block opening tag.\"],\n    [\"p\", [\"strong\", \"This should be the third paragraph after the header.\"]]], \"\\u000a\"], \"\\u000a\\u000a\", [\"h2\", \"Code block with rogue \", [\"code\", \"</div>\"], \"s in Markdown code span and block\"], \"\\u000a\\u000a\", [\"div\", \"\\u000a    \", [\"div\", [\"p\", \"This is a code block however:\"],\n    [\"pre\", [\"code\", \"</div>\\u000a\"]],\n    [\"p\", \"Funny isn't it? Here is a code span: \", [\"code\", \"</div>\"], \".\"]], \"\\u000a\"], \"\\u000a\\u000a\", [\"div\", \"\\u000a  \", [\"div\", [\"ul\", [\"li\", \"List item, not a code block\"]],\n    [\"p\", \"Some text\"],\n    [\"pre\", [\"code\", \"This is a code block.\\u000a\"]]], \"\\u000a\"], \"\\u000a\\u000a\", [\"h2\", \"No code block in markdown span mode\"], \"\\u000a\\u000a\", [\"p\", \"\\u000a    This is not a code block since Markdown parse paragraph \\u000a    content as span. Code spans like \", [\"code\", \"</p>\"], \" are allowed though.\\u000a\"],\n    [\"p\", [\"em\", \"Hello\"], \" \", [\"em\", \"world\"]], \"\\u000a\\u000a\", [\"h2\", \"Preserving attributes and tags on more than one line:\"], \"\\u000a\\u000a\", [\"p\", {\n    \"class\": \"test\",\n    \"id\": \"12\"\n},\n\"\\u000aSome \", [\"em\", \"span\"], \" content.\\u000a\"], \"\\u000a\\u000a\", [\"h2\", \"Header confusion bug\"], \"\\u000a\\u000a\", [\"table\", {\n    \"class\": \"canvas\"\n},\n[\"tr\", [\"td\", {\n    \"id\": \"main\"\n},\n\"Hello World!\\u000a============\\u000a\\u000aHello World!\"]]]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Inline_HTML_with_Markdown_content.text",
    "content": "# Markdown inside code blocks\n\n<div markdown=\"1\">\nfoo\n</div>\n\n<div markdown='1'>\nfoo\n</div>\n\n<div markdown=1>\nfoo\n</div>\n\n<table>\n<tr><td markdown=\"1\">test _emphasis_ (span)</td></tr>\n</table>\n\n<table>\n<tr><td markdown=\"span\">test _emphasis_ (span)</td></tr>\n</table>\n\n<table>\n<tr><td markdown=\"block\">test _emphasis_ (block)</td></tr>\n</table>\n\n## More complicated\n\n<table>\n<tr><td markdown=\"1\">\n* this is _not_ a list item</td></tr>\n<tr><td markdown=\"span\">\n* this is _not_ a list item</td></tr>\n<tr><td markdown=\"block\">\n* this _is_ a list item\n</td></tr>\n</table>\n\n## With indent\n\n<div>\n    <div markdown=\"1\">\n    This text is no code block: if it was, the \n    closing `<div>` would be too and the HTML block \n    would be invalid.\n\n    Markdown content in HTML blocks is assumed to be \n    indented the same as the block opening tag.\n\n    **This should be the third paragraph after the header.**\n    </div>\n</div>\n\n## Code block with rogue `</div>`s in Markdown code span and block\n\n<div>\n    <div markdown=\"1\">\n\n    This is a code block however:\n\n        </div>\n\n    Funny isn't it? Here is a code span: `</div>`.\n\n    </div>\n</div>\n\n<div>\n  <div markdown=\"1\">\n    * List item, not a code block\n\nSome text\n\n      This is a code block.\n  </div>\n</div>\n\n## No code block in markdown span mode\n\n<p markdown=\"1\">\n    This is not a code block since Markdown parse paragraph \n    content as span. Code spans like `</p>` are allowed though.\n</p>\n\n<p markdown=\"1\">_Hello_ _world_</p>\n\n## Preserving attributes and tags on more than one line:\n\n<p class=\"test\" markdown=\"1\" \nid=\"12\">\nSome _span_ content.\n</p>\n\n\n## Header confusion bug\n\n<table class=\"canvas\">\n<tr>\n<td id=\"main\" markdown=\"1\">Hello World!\n============\n\nHello World!</td>\n</tr>\n</table>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Tables.html",
    "content": "<h1>Simple tables</h1>\n\n<table>\n<thead>\n<tr>\n  <th>Header 1</th>\n  <th>Header 2</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Cell 1</td>\n  <td>Cell 2</td>\n</tr>\n<tr>\n  <td>Cell 3</td>\n  <td>Cell 4</td>\n</tr>\n</tbody>\n</table>\n\n<p>With leading pipes:</p>\n\n<table>\n<thead>\n<tr>\n  <th>Header 1</th>\n  <th>Header 2</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Cell 1</td>\n  <td>Cell 2</td>\n</tr>\n<tr>\n  <td>Cell 3</td>\n  <td>Cell 4</td>\n</tr>\n</tbody>\n</table>\n\n<p>With tailing pipes:</p>\n\n<table>\n<thead>\n<tr>\n  <th>Header 1</th>\n  <th>Header 2</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Cell 1</td>\n  <td>Cell 2</td>\n</tr>\n<tr>\n  <td>Cell 3</td>\n  <td>Cell 4</td>\n</tr>\n</tbody>\n</table>\n\n<p>With leading and tailing pipes:</p>\n\n<table>\n<thead>\n<tr>\n  <th>Header 1</th>\n  <th>Header 2</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Cell 1</td>\n  <td>Cell 2</td>\n</tr>\n<tr>\n  <td>Cell 3</td>\n  <td>Cell 4</td>\n</tr>\n</tbody>\n</table>\n\n<hr />\n\n<h1>One-column one-row table</h1>\n\n<p>With leading pipes:</p>\n\n<table>\n<thead>\n<tr>\n  <th>Header</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Cell</td>\n</tr>\n</tbody>\n</table>\n\n<p>With tailing pipes:</p>\n\n<table>\n<thead>\n<tr>\n  <th>Header</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Cell</td>\n</tr>\n</tbody>\n</table>\n\n<p>With leading and tailing pipes:</p>\n\n<table>\n<thead>\n<tr>\n  <th>Header</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Cell</td>\n</tr>\n</tbody>\n</table>\n\n<hr />\n\n<p>Table alignement:</p>\n\n<table>\n<thead>\n<tr>\n  <th>Default</th>\n  <th align=\"left\">Right</th>\n  <th align=\"center\">Center</th>\n  <th align=\"right\">Left</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Long Cell</td>\n  <td align=\"left\">Long Cell</td>\n  <td align=\"center\">Long Cell</td>\n  <td align=\"right\">Long Cell</td>\n</tr>\n<tr>\n  <td>Cell</td>\n  <td align=\"left\">Cell</td>\n  <td align=\"center\">Cell</td>\n  <td align=\"right\">Cell</td>\n</tr>\n</tbody>\n</table>\n\n<p>Table alignement (alternate spacing):</p>\n\n<table>\n<thead>\n<tr>\n  <th>Default</th>\n  <th align=\"left\">Right</th>\n  <th align=\"center\">Center</th>\n  <th align=\"right\">Left</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Long Cell</td>\n  <td align=\"left\">Long Cell</td>\n  <td align=\"center\">Long Cell</td>\n  <td align=\"right\">Long Cell</td>\n</tr>\n<tr>\n  <td>Cell</td>\n  <td align=\"left\">Cell</td>\n  <td align=\"center\">Cell</td>\n  <td align=\"right\">Cell</td>\n</tr>\n</tbody>\n</table>\n\n<hr />\n\n<h1>Empty cells</h1>\n\n<table>\n<thead>\n<tr>\n  <th>Header 1</th>\n  <th>Header 2</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>A</td>\n  <td>B</td>\n</tr>\n<tr>\n  <td>C</td>\n  <td></td>\n</tr>\n</tbody>\n</table>\n\n<table>\n<thead>\n<tr>\n  <th>Header 1</th>\n  <th>Header 2</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>A</td>\n  <td>B</td>\n</tr>\n<tr>\n  <td></td>\n  <td>D</td>\n</tr>\n</tbody>\n</table>\n\n<hr />\n\n<h1>Missing tailing pipe</h1>\n\n<table>\n<thead>\n<tr>\n  <th>Header 1</th>\n  <th>Header 2</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Cell</td>\n  <td>Cell</td>\n</tr>\n<tr>\n  <td>Cell</td>\n  <td>Cell</td>\n</tr>\n</tbody>\n</table>\n\n<table>\n<thead>\n<tr>\n  <th>Header 1</th>\n  <th>Header 2</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Cell</td>\n  <td>Cell</td>\n</tr>\n<tr>\n  <td>Cell</td>\n  <td>Cell</td>\n</tr>\n</tbody>\n</table>\n\n<table>\n<thead>\n<tr>\n  <th>Header 1</th>\n  <th>Header 2</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Cell</td>\n  <td>Cell</td>\n</tr>\n<tr>\n  <td>Cell</td>\n  <td>Cell</td>\n</tr>\n</tbody>\n</table>\n\n<table>\n<thead>\n<tr>\n  <th>Header 1</th>\n  <th>Header 2</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n  <td>Cell</td>\n  <td>Cell</td>\n</tr>\n<tr>\n  <td>Cell</td>\n  <td>Cell</td>\n</tr>\n</tbody>\n</table>"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Tables.json",
    "content": "[\"html\", [\"h1\", \"Simple tables\"], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header 1\"],\n    [\"th\", \"Header 2\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Cell 1\"],\n        [\"td\", \"Cell 2\"]],\n        [\"tr\", [\"td\", \"Cell 3\"],\n            [\"td\", \"Cell 4\"]]]], \"\\u000a\\u000a\", [\"p\", \"With leading pipes:\"], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header 1\"],\n    [\"th\", \"Header 2\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Cell 1\"],\n        [\"td\", \"Cell 2\"]],\n        [\"tr\", [\"td\", \"Cell 3\"],\n            [\"td\", \"Cell 4\"]]]], \"\\u000a\\u000a\", [\"p\", \"With tailing pipes:\"], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header 1\"],\n    [\"th\", \"Header 2\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Cell 1\"],\n        [\"td\", \"Cell 2\"]],\n        [\"tr\", [\"td\", \"Cell 3\"],\n            [\"td\", \"Cell 4\"]]]], \"\\u000a\\u000a\", [\"p\", \"With leading and tailing pipes:\"], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header 1\"],\n    [\"th\", \"Header 2\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Cell 1\"],\n        [\"td\", \"Cell 2\"]],\n        [\"tr\", [\"td\", \"Cell 3\"],\n            [\"td\", \"Cell 4\"]]]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"h1\", \"One-column one-row table\"], \"\\u000a\\u000a\", [\"p\", \"With leading pipes:\"], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Cell\"]]]], \"\\u000a\\u000a\", [\"p\", \"With tailing pipes:\"], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Cell\"]]]], \"\\u000a\\u000a\", [\"p\", \"With leading and tailing pipes:\"], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Cell\"]]]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"p\", \"Table alignement:\"], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Default\"],\n    [\"th\", {\n        \"align\": \"left\"\n    },\n    \"Right\"],\n    [\"th\", {\n        \"align\": \"center\"\n    },\n    \"Center\"],\n    [\"th\", {\n        \"align\": \"right\"\n    },\n    \"Left\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Long Cell\"],\n        [\"td\", {\n            \"align\": \"left\"\n        },\n        \"Long Cell\"],\n        [\"td\", {\n            \"align\": \"center\"\n        },\n        \"Long Cell\"],\n        [\"td\", {\n            \"align\": \"right\"\n        },\n        \"Long Cell\"]],\n        [\"tr\", [\"td\", \"Cell\"],\n            [\"td\", {\n                \"align\": \"left\"\n            },\n            \"Cell\"],\n            [\"td\", {\n                \"align\": \"center\"\n            },\n            \"Cell\"],\n            [\"td\", {\n                \"align\": \"right\"\n            },\n            \"Cell\"]]]], \"\\u000a\\u000a\", [\"p\", \"Table alignement (alternate spacing):\"], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Default\"],\n    [\"th\", {\n        \"align\": \"left\"\n    },\n    \"Right\"],\n    [\"th\", {\n        \"align\": \"center\"\n    },\n    \"Center\"],\n    [\"th\", {\n        \"align\": \"right\"\n    },\n    \"Left\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Long Cell\"],\n        [\"td\", {\n            \"align\": \"left\"\n        },\n        \"Long Cell\"],\n        [\"td\", {\n            \"align\": \"center\"\n        },\n        \"Long Cell\"],\n        [\"td\", {\n            \"align\": \"right\"\n        },\n        \"Long Cell\"]],\n        [\"tr\", [\"td\", \"Cell\"],\n            [\"td\", {\n                \"align\": \"left\"\n            },\n            \"Cell\"],\n            [\"td\", {\n                \"align\": \"center\"\n            },\n            \"Cell\"],\n            [\"td\", {\n                \"align\": \"right\"\n            },\n            \"Cell\"]]]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"h1\", \"Empty cells\"], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header 1\"],\n    [\"th\", \"Header 2\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"A\"],\n        [\"td\", \"B\"]],\n        [\"tr\", [\"td\", \"C\"],\n            [\"td\"]]]], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header 1\"],\n    [\"th\", \"Header 2\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"A\"],\n        [\"td\", \"B\"]],\n        [\"tr\", [\"td\"],\n            [\"td\", \"D\"]]]], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"h1\", \"Missing tailing pipe\"], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header 1\"],\n    [\"th\", \"Header 2\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Cell\"],\n        [\"td\", \"Cell\"]],\n        [\"tr\", [\"td\", \"Cell\"],\n            [\"td\", \"Cell\"]]]], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header 1\"],\n    [\"th\", \"Header 2\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Cell\"],\n        [\"td\", \"Cell\"]],\n        [\"tr\", [\"td\", \"Cell\"],\n            [\"td\", \"Cell\"]]]], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header 1\"],\n    [\"th\", \"Header 2\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Cell\"],\n        [\"td\", \"Cell\"]],\n        [\"tr\", [\"td\", \"Cell\"],\n            [\"td\", \"Cell\"]]]], \"\\u000a\\u000a\", [\"table\", [\"thead\", [\"tr\", [\"th\", \"Header 1\"],\n    [\"th\", \"Header 2\"]]],\n    [\"tbody\", [\"tr\", [\"td\", \"Cell\"],\n        [\"td\", \"Cell\"]],\n        [\"tr\", [\"td\", \"Cell\"],\n            [\"td\", \"Cell\"]]]]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-extra/Tables.text",
    "content": "# Simple tables\n\nHeader 1  | Header 2\n--------- | ---------\nCell 1    | Cell 2\nCell 3    | Cell 4\n\nWith leading pipes:\n\n| Header 1  | Header 2\n| --------- | ---------\n| Cell 1    | Cell 2\n| Cell 3    | Cell 4\n\nWith tailing pipes:\n\nHeader 1  | Header 2  |\n--------- | --------- |\nCell 1    | Cell 2    |\nCell 3    | Cell 4    |\n\nWith leading and tailing pipes:\n\n| Header 1  | Header 2  |\n| --------- | --------- |\n| Cell 1    | Cell 2    |\n| Cell 3    | Cell 4    |\n\n* * *\n\n# One-column one-row table\n\nWith leading pipes:\n\n| Header\n| -------\n| Cell\n\nWith tailing pipes:\n\nHeader  |\n------- |\nCell    |\n\nWith leading and tailing pipes:\n\n| Header  |\n| ------- |\n| Cell    |\n\n* * *\n\nTable alignement:\n\n| Default   | Right     |  Center   |     Left  |\n| --------- |:--------- |:---------:| ---------:|\n| Long Cell | Long Cell | Long Cell | Long Cell |\n| Cell      | Cell      |   Cell    |     Cell  |\n\nTable alignement (alternate spacing):\n\n| Default   | Right     |  Center   |     Left  |\n| --------- | :-------- | :-------: | --------: |\n| Long Cell | Long Cell | Long Cell | Long Cell |\n| Cell      | Cell      |   Cell    |     Cell  |\n\n* * * \n\n# Empty cells\n\n| Header 1  | Header 2  |\n| --------- | --------- |\n| A         | B         |\n| C         |           |\n\nHeader 1  | Header 2\n--------- | ---------\nA         | B\n          | D\n\n* * *\n\n# Missing tailing pipe\n\nHeader 1  | Header 2  \n--------- | --------- |\nCell      | Cell      |\nCell      | Cell      |\n\nHeader 1  | Header 2  |\n--------- | --------- \nCell      | Cell      |\nCell      | Cell      |\n\nHeader 1  | Header 2  |\n--------- | --------- |\nCell      | Cell      \nCell      | Cell      |\n\nHeader 1  | Header 2  |\n--------- | --------- |\nCell      | Cell      |\nCell      | Cell      \n\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Email_auto_links.html",
    "content": "<p><a href=\"&#109;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x2e;&#102;&#x6f;&#114;&#x74;&#105;&#x6e;&#64;&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x66;&#46;&#x63;&#111;&#x6d;\">&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x2e;&#102;&#x6f;&#114;&#x74;&#105;&#x6e;&#64;&#x6d;&#105;&#x63;&#104;&#x65;&#108;&#x66;&#46;&#x63;&#111;&#x6d;</a></p>\n\n<p>International domain names: <a href=\"&#x6d;&#97;&#105;&#x6c;&#x74;&#111;&#58;&#x68;&#x65;&#108;&#112;&#x40;&#x74;ū&#x64;&#x61;&#108;&#105;ņ&#46;&#108;&#x76;\">&#x68;&#x65;&#108;&#112;&#x40;&#x74;ū&#x64;&#x61;&#108;&#105;ņ&#46;&#108;&#x76;</a></p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Email_auto_links.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"mailto:michel.fortin@michelf.com\"\n},\n\"michel.fortin@michelf.com\"]],\n    [\"p\", \"International domain names: \", [\"a\", {\n        \"href\": \"mailto:help@tūdaliņ.lv\"\n    },\n    \"help@tūdaliņ.lv\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Email_auto_links.text",
    "content": "<michel.fortin@michelf.com>\n\nInternational domain names: <help@tūdaliņ.lv>"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Emphasis.html",
    "content": "<p>Combined emphasis:</p>\n\n<ol>\n<li><strong><em>test test</em></strong></li>\n<li><strong><em>test test</em></strong></li>\n<li><em>test <strong>test</strong></em></li>\n<li><strong>test <em>test</em></strong></li>\n<li><strong><em>test</em> test</strong></li>\n<li><em><strong>test</strong> test</em></li>\n<li><strong><em>test</em> test</strong></li>\n<li><strong>test <em>test</em></strong></li>\n<li><em>test <strong>test</strong></em></li>\n<li><em>test <strong>test</strong></em></li>\n<li><strong>test <em>test</em></strong></li>\n<li><strong><em>test</em> test</strong></li>\n<li><em><strong>test</strong> test</em></li>\n<li><strong><em>test</em> test</strong></li>\n<li><strong>test <em>test</em></strong></li>\n<li><em>test <strong>test</strong></em></li>\n</ol>\n\n<p>Incorrect nesting:</p>\n\n<ol>\n<li>*test  <strong>test*  test</strong></li>\n<li>_test  <strong>test_  test</strong></li>\n<li>**test  <em>test</em>* test*</li>\n<li>__test  <em>test</em>_ test_</li>\n<li><em>test   *test</em>  test*</li>\n<li><em>test   _test</em>  test_</li>\n<li><strong>test <strong>test</strong> test</strong></li>\n<li><strong>test <strong>test</strong> test</strong></li>\n</ol>\n\n<p>No emphasis:</p>\n\n<ol>\n<li>test*  test  *test</li>\n<li>test** test **test</li>\n<li>test_  test  _test</li>\n<li>test__ test __test</li>\n</ol>\n\n<p>Middle-word emphasis (asterisks):</p>\n\n<ol>\n<li><em>a</em>b</li>\n<li>a<em>b</em></li>\n<li>a<em>b</em>c</li>\n<li><strong>a</strong>b</li>\n<li>a<strong>b</strong></li>\n<li>a<strong>b</strong>c</li>\n</ol>\n\n<p>Middle-word emphasis (underscore):</p>\n\n<ol>\n<li><em>a</em>b</li>\n<li>a<em>b</em></li>\n<li>a<em>b</em>c</li>\n<li><strong>a</strong>b</li>\n<li>a<strong>b</strong></li>\n<li>a<strong>b</strong>c</li>\n</ol>\n\n<p>my<em>precious</em>file.txt</p>\n\n<h2>Tricky Cases</h2>\n\n<p>E**. <strong>Test</strong> TestTestTest</p>\n\n<p>E**. <strong>Test</strong> Test Test Test</p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Emphasis.json",
    "content": "[\"html\", [\"p\", \"Combined emphasis:\"],\n    [\"ol\", [\"li\", [\"strong\", [\"em\", \"test test\"]]],\n        [\"li\", [\"strong\", [\"em\", \"test test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"em\", [\"strong\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"em\", [\"strong\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", [\"em\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", \"test \", [\"em\", \"test\"]]],\n        [\"li\", [\"em\", \"test \", [\"strong\", \"test\"]]]],\n    [\"p\", \"Incorrect nesting:\"],\n    [\"ol\", [\"li\", \"*test  \", [\"strong\", \"test*  test\"]],\n        [\"li\", \"_test  \", [\"strong\", \"test_  test\"]],\n        [\"li\", \"**test  \", [\"em\", \"test\"], \"* test*\"],\n        [\"li\", \"__test  \", [\"em\", \"test\"], \"_ test_\"],\n        [\"li\", [\"em\", \"test   *test\"], \"  test*\"],\n        [\"li\", [\"em\", \"test   _test\"], \"  test_\"],\n        [\"li\", [\"strong\", \"test \", [\"strong\", \"test\"], \" test\"]],\n        [\"li\", [\"strong\", \"test \", [\"strong\", \"test\"], \" test\"]]],\n    [\"p\", \"No emphasis:\"],\n    [\"ol\", [\"li\", \"test*  test  *test\"],\n        [\"li\", \"test** test **test\"],\n        [\"li\", \"test_  test  _test\"],\n        [\"li\", \"test__ test __test\"]],\n    [\"p\", \"Middle-word emphasis (asterisks):\"],\n    [\"ol\", [\"li\", [\"em\", \"a\"], \"b\"],\n        [\"li\", \"a\", [\"em\", \"b\"]],\n        [\"li\", \"a\", [\"em\", \"b\"], \"c\"],\n        [\"li\", [\"strong\", \"a\"], \"b\"],\n        [\"li\", \"a\", [\"strong\", \"b\"]],\n        [\"li\", \"a\", [\"strong\", \"b\"], \"c\"]],\n    [\"p\", \"Middle-word emphasis (underscore):\"],\n    [\"ol\", [\"li\", [\"em\", \"a\"], \"b\"],\n        [\"li\", \"a\", [\"em\", \"b\"]],\n        [\"li\", \"a\", [\"em\", \"b\"], \"c\"],\n        [\"li\", [\"strong\", \"a\"], \"b\"],\n        [\"li\", \"a\", [\"strong\", \"b\"]],\n        [\"li\", \"a\", [\"strong\", \"b\"], \"c\"]],\n    [\"p\", \"my\", [\"em\", \"precious\"], \"file.txt\"], \"\\u000a\\u000a\", [\"h2\", \"Tricky Cases\"], \"\\u000a\\u000a\", [\"p\", \"E**. \", [\"strong\", \"Test\"], \" TestTestTest\"],\n    [\"p\", \"E**. \", [\"strong\", \"Test\"], \" Test Test Test\"]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Emphasis.text",
    "content": "Combined emphasis:\n\n1.  ***test test***\n2.  ___test test___\n3.  *test **test***\n4.  **test *test***\n5.  ***test* test**\n6.  ***test** test*\n7.  ***test* test**\n8.  **test *test***\n9.  *test **test***\n10. _test __test___\n11. __test _test___\n12. ___test_ test__\n13. ___test__ test_\n14. ___test_ test__\n15. __test _test___\n16. _test __test___\n\n\nIncorrect nesting:\n\n1.  *test  **test*  test**\n2.  _test  __test_  test__\n3.  **test  *test** test*\n4.  __test  _test__ test_\n5.  *test   *test*  test*\n6.  _test   _test_  test_\n7.  **test **test** test**\n8.  __test __test__ test__\n\n\n\nNo emphasis:\n\n1.  test*  test  *test\n2.  test** test **test\n3.  test_  test  _test\n4.  test__ test __test\n\n\n\nMiddle-word emphasis (asterisks):\n\n1.  *a*b\n2.   a*b*\n3.   a*b*c\n4. **a**b\n5.   a**b**\n6.   a**b**c\n\n\nMiddle-word emphasis (underscore):\n\n1.  _a_b\n2.   a_b_\n3.   a_b_c\n4. __a__b\n5.   a__b__\n6.   a__b__c\n\nmy_precious_file.txt\n\n\n## Tricky Cases\n\nE**. **Test** TestTestTest\n\nE**. **Test** Test Test Test\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Inline_HTML_(Span).html",
    "content": "<p><abbr title=\"` **Attribute Content Is Not A Code Span** `\">ACINACS</abbr></p>\n\n<p><abbr title=\"`first backtick!\">SB</abbr> \n<abbr title=\"`second backtick!\">SB</abbr></p>"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Inline_HTML_(Span).json",
    "content": "[\"html\", [\"p\", [\"abbr\", {\n    \"title\": \"` **Attribute Content Is Not A Code Span** `\"\n},\n\"ACINACS\"]],\n    [\"p\", [\"abbr\", {\n        \"title\": \"`first backtick!\"\n    },\n    \"SB\"], \" \\u000a\", [\"abbr\", {\n        \"title\": \"`second backtick!\"\n    },\n    \"SB\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Inline_HTML_(Span).text",
    "content": "<abbr title=\"` **Attribute Content Is Not A Code Span** `\">ACINACS</abbr>\n\n<abbr title=\"`first backtick!\">SB</abbr> \n<abbr title=\"`second backtick!\">SB</abbr>"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Ins_and_del.json",
    "content": "[\"html\", [\"p\", \"Here is a block tag ins:\"], \"\\u000a\\u000a\", [\"ins\", [\"p\", \"Some text\"]], \"\\u000a\\u000a\", [\"p\", [\"ins\", \"And here it is inside a paragraph.\"]],\n    [\"p\", \"And here it is \", [\"ins\", \"in the middle of\"], \" a paragraph.\"], \"\\u000a\\u000a\", [\"del\", [\"p\", \"Some text\"]], \"\\u000a\\u000a\", [\"p\", [\"del\", \"And here is ins as a paragraph.\"]],\n    [\"p\", \"And here it is \", [\"del\", \"in the middle of\"], \" a paragraph.\"]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Ins_and_del.text",
    "content": "Here is a block tag ins:\n\n<ins>\n<p>Some text</p>\n</ins>\n\n<ins>And here it is inside a paragraph.</ins>\n\nAnd here it is <ins>in the middle of</ins> a paragraph.\n\n<del>\n<p>Some text</p>\n</del>\n\n<del>And here is ins as a paragraph.</del>\n\nAnd here it is <del>in the middle of</del> a paragraph.\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Ins_and_del.xhtml",
    "content": "<p>Here is a block tag ins:</p>\n\n<ins>\n<p>Some text</p>\n</ins>\n\n<p><ins>And here it is inside a paragraph.</ins></p>\n\n<p>And here it is <ins>in the middle of</ins> a paragraph.</p>\n\n<del>\n<p>Some text</p>\n</del>\n\n<p><del>And here is ins as a paragraph.</del></p>\n\n<p>And here it is <del>in the middle of</del> a paragraph.</p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Links_inline_style.html",
    "content": "<p><a href=\"?}]*+|&amp;)\">silly URL w/ angle brackets</a>.</p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Links_inline_style.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"?}]*+|&)\"\n},\n\"silly URL w/ angle brackets\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Links_inline_style.text",
    "content": "[silly URL w/ angle brackets](<?}]*+|&)>).\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Nesting.html",
    "content": "<p>Valid nesting:</p>\n\n<p><strong><a href=\"url\">Link</a></strong></p>\n\n<p><a href=\"url\"><strong>Link</strong></a></p>\n\n<p><strong><a href=\"url\"><strong>Link</strong></a></strong></p>\n\n<p>Invalid nesting:</p>\n\n<p><a href=\"url\">[Link](url)</a></p>\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Nesting.json",
    "content": "[\"html\", [\"p\", \"Valid nesting:\"],\n    [\"p\", [\"strong\", [\"a\", {\n        \"href\": \"url\"\n    },\n    \"Link\"]]],\n    [\"p\", [\"a\", {\n        \"href\": \"url\"\n    },\n    [\"strong\", \"Link\"]]],\n    [\"p\", [\"strong\", [\"a\", {\n        \"href\": \"url\"\n    },\n    [\"strong\", \"Link\"]]]],\n    [\"p\", \"Invalid nesting:\"],\n    [\"p\", [\"a\", {\n        \"href\": \"url\"\n    },\n    \"[Link](url)\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Nesting.text",
    "content": "Valid nesting:\n\n**[Link](url)**\n\n[**Link**](url)\n\n**[**Link**](url)**\n\nInvalid nesting:\n\n[[Link](url)](url)"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Parens_in_URL.html",
    "content": "<p><a href=\"/url(test)\" title=\"title\">Inline link 1 with parens</a>.</p>\n\n<p><a href=\"/url(test)\" title=\"title\">Inline link 2 with parens</a>.</p>\n\n<p><a href=\"/url(test)\" title=\"title\">Inline link 3 with non-escaped parens</a>.</p>\n\n<p><a href=\"/url(test)\" title=\"title\">Inline link 4 with non-escaped parens</a>.</p>\n\n<p><a href=\"/url(test)\" title=\"title\">Reference link 1 with parens</a>.</p>\n\n<p><a href=\"/url(test)\" title=\"title\">Reference link 2 with parens</a>.</p>"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Parens_in_URL.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"/url(test)\",\n    \"title\": \"title\"\n},\n\"Inline link 1 with parens\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url(test)\",\n        \"title\": \"title\"\n    },\n    \"Inline link 2 with parens\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url(test)\",\n        \"title\": \"title\"\n    },\n    \"Inline link 3 with non-escaped parens\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url(test)\",\n        \"title\": \"title\"\n    },\n    \"Inline link 4 with non-escaped parens\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url(test)\",\n        \"title\": \"title\"\n    },\n    \"Reference link 1 with parens\"], \".\"],\n    [\"p\", [\"a\", {\n        \"href\": \"/url(test)\",\n        \"title\": \"title\"\n    },\n    \"Reference link 2 with parens\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-php-markdown-todo/Parens_in_URL.text",
    "content": "[Inline link 1 with parens](/url\\(test\\) \"title\").\n\n[Inline link 2 with parens](</url\\(test\\)> \"title\").\n\n[Inline link 3 with non-escaped parens](/url(test) \"title\").\n\n[Inline link 4 with non-escaped parens](</url(test)> \"title\").\n\n[Reference link 1 with parens][1].\n\n[Reference link 2 with parens][2].\n\n  [1]: /url(test) \"title\"\n  [2]: </url(test)> \"title\"\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/auto_link.html",
    "content": "<p>I can has autolink? <a href=\"http://icanhascheeseburger.com\">http://icanhascheeseburger.com</a></p>\n\n<p>Ask garfield: <a href=\"&#x6D;a&#x69;&#108;&#x74;&#111;:&#103;&#x61;&#114;f&#x69;&#x65;&#108;&#x64;&#64;&#x65;&#120;&#97;&#109;&#112;&#x6C;&#x65;&#46;&#99;&#x6F;&#109;\">&#103;&#x61;&#114;f&#x69;&#x65;&#108;&#x64;&#64;&#x65;&#120;&#97;&#109;&#112;&#x6C;&#x65;&#46;&#99;&#x6F;&#109;</a></p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/auto_link.json",
    "content": "[\"html\", [\"p\", \"I can has autolink? \", [\"a\", {\n    \"href\": \"http://icanhascheeseburger.com\"\n},\n\"http://icanhascheeseburger.com\"]],\n    [\"p\", \"Ask garfield: \", [\"a\", {\n        \"href\": \"mailto:garfield@example.com\"\n    },\n    \"garfield@example.com\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/auto_link.text",
    "content": "I can has autolink? <http://icanhascheeseburger.com>\n\nAsk garfield: <garfield@example.com>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/auto_link_safe_mode.html",
    "content": "<p>I can has autolink? <a href=\"http://icanhascheeseburger.com\">http://icanhascheeseburger.com</a></p>\n\n<p>Ask garfield: <a href=\"&#x6D;a&#x69;&#108;&#x74;&#111;:&#103;&#x61;&#114;f&#x69;&#x65;&#108;&#x64;&#64;&#x65;&#120;&#97;&#109;&#112;&#x6C;&#x65;&#46;&#99;&#x6F;&#109;\">&#103;&#x61;&#114;f&#x69;&#x65;&#108;&#x64;&#64;&#x65;&#120;&#97;&#109;&#112;&#x6C;&#x65;&#46;&#99;&#x6F;&#109;</a></p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/auto_link_safe_mode.json",
    "content": "[\"html\", [\"p\", \"I can has autolink? \", [\"a\", {\n    \"href\": \"http://icanhascheeseburger.com\"\n},\n\"http://icanhascheeseburger.com\"]],\n    [\"p\", \"Ask garfield: \", [\"a\", {\n        \"href\": \"mailto:garfield@example.com\"\n    },\n    \"garfield@example.com\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/auto_link_safe_mode.opts",
    "content": "{'safe_mode': True}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/auto_link_safe_mode.text",
    "content": "I can has autolink? <http://icanhascheeseburger.com>\n\nAsk garfield: <garfield@example.com>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode.html",
    "content": "<p>blah [HTML_REMOVED] blah</p>\n\n<p>[HTML_REMOVED]yowzer![HTML_REMOVED]</p>\n\n<p>blah</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode.json",
    "content": "[\"html\", [\"p\", \"blah [HTML_REMOVED] blah\"],\n    [\"p\", \"[HTML_REMOVED]yowzer![HTML_REMOVED]\"],\n    [\"p\", \"blah\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode.opts",
    "content": "# Use the old (for-compat-only) way of specifying \"replace\" safe mode.\n{\"safe_mode\": True}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode.text",
    "content": "blah <img src=\"dangerous\"> blah\n\n<div>yowzer!</div>\n\nblah\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode_escape.html",
    "content": "<p>blah &lt;img src=\"dangerous\"&gt; blah</p>\n\n<p>&lt;div&gt;yowzer!&lt;/div&gt;</p>\n\n<p>blah</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode_escape.json",
    "content": "[\"html\", [\"p\", \"blah <img src=\\\"dangerous\\\"> blah\"],\n    [\"p\", \"<div>yowzer!</div>\"],\n    [\"p\", \"blah\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode_escape.opts",
    "content": "{\"safe_mode\": \"escape\"}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode_escape.text",
    "content": "blah <img src=\"dangerous\"> blah\n\n<div>yowzer!</div>\n\nblah\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/blockquote.html",
    "content": "<p>[Trent wrote]</p>\n\n<blockquote>\n  <p>no way</p>\n</blockquote>\n\n<p>[Jeff wrote]</p>\n\n<blockquote>\n  <p>way</p>\n</blockquote>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/blockquote.json",
    "content": "[\"html\", [\"p\", \"[Trent wrote]\"],\n    [\"blockquote\", [\"p\", \"no way\"]],\n    [\"p\", \"[Jeff wrote]\"],\n    [\"blockquote\", [\"p\", \"way\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/blockquote.text",
    "content": "[Trent wrote]\n> no way\n\n[Jeff wrote]\n> way\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/blockquote_with_pre.html",
    "content": "<blockquote>\n  <p>Markdown indents blockquotes a couple of spaces\n  necessitating some tweaks for pre-blocks in that\n  blockquote:</p>\n\n<pre><code>here is a check\nfor that\n</code></pre>\n</blockquote>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/blockquote_with_pre.json",
    "content": "[\"html\", [\"blockquote\", [\"p\", \"Markdown indents blockquotes a couple of spaces\\u000a  necessitating some tweaks for pre-blocks in that\\u000a  blockquote:\"],\n    [\"pre\", [\"code\", \"here is a check\\u000afor that\\u000a\"]]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/blockquote_with_pre.text",
    "content": "> Markdown indents blockquotes a couple of spaces\n> necessitating some tweaks for pre-blocks in that\n> blockquote:\n>\n>     here is a check\n>     for that\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/code_block_with_tabs.html",
    "content": "<p>Test with tabs for <code>_Detab</code>:</p>\n\n<pre><code>Code    'block' with    some    \"tabs\"  and \"quotes\"\n</code></pre>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/code_block_with_tabs.json",
    "content": "[\"html\", [\"p\", \"Test with tabs for \", [\"code\", \"_Detab\"], \":\"],\n    [\"pre\", [\"code\", \"Code    'block' with    some    \\\"tabs\\\"  and \\\"quotes\\\"\\u000a\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/code_block_with_tabs.text",
    "content": "Test with tabs for `_Detab`:\n\n\tCode\t'block'\twith\tsome\t\"tabs\"\tand\t\"quotes\"\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/code_safe_emphasis.html",
    "content": "<p>This is <em>italic</em> and this is <strong>bold</strong>.\nThis is NOT _italic_ and this is __bold__ because --code-safe is turned on.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/code_safe_emphasis.json",
    "content": "[\"html\", [\"p\", \"This is \", [\"em\", \"italic\"], \" and this is \", [\"strong\", \"bold\"], \".\\u000aThis is NOT _italic_ and this is __bold__ because --code-safe is turned on.\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/code_safe_emphasis.opts",
    "content": "{\"extras\": [\"code-friendly\"]}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/code_safe_emphasis.text",
    "content": "This is *italic* and this is **bold**.\nThis is NOT _italic_ and this is __bold__ because --code-safe is turned on.\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/codeblock.html",
    "content": "<pre><code>some code\n</code></pre>\n\n<p>some 'splaining</p>\n\n<pre><code>some more code\n2 &gt; 1\n</code></pre>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/codeblock.json",
    "content": "[\"html\", [\"pre\", [\"code\", \"some code\\u000a\"]],\n    [\"p\", \"some 'splaining\"],\n    [\"pre\", [\"code\", \"some more code\\u000a2 > 1\\u000a\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/codeblock.text",
    "content": "    some code\n\nsome 'splaining\n\n    some more code\n    2 > 1\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/codespans.html",
    "content": "<p><code>This</code> is a code span.\nAnd <code>This is one with an `embedded backtick`</code>.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/codespans.json",
    "content": "[\"html\", [\"p\", [\"code\", \"This\"], \" is a code span.\\u000aAnd \", [\"code\", \"This is one with an `embedded backtick`\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/codespans.text",
    "content": "`This` is a code span.\nAnd ``This is one with an `embedded backtick` ``.\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/codespans_safe_mode.html",
    "content": "<p><code>This</code> is a code span.\nAnd <code>This is one with an `embedded backtick`</code>.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/codespans_safe_mode.json",
    "content": "[\"html\", [\"p\", [\"code\", \"This\"], \" is a code span.\\u000aAnd \", [\"code\", \"This is one with an `embedded backtick`\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/codespans_safe_mode.opts",
    "content": "{'safe_mode': True}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/codespans_safe_mode.text",
    "content": "`This` is a code span.\nAnd ``This is one with an `embedded backtick` ``.\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/emacs_head_vars.html",
    "content": "<!-- -*- markdown-extras: code-friendly -*- -->\n\n<p>This sentence talks about the Python __init__ method, which I'd rather not be\ninterpreted as Markdown's strong.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/emacs_head_vars.json",
    "content": "[\"html\", \"\\u000a\\u000a\", [\"p\", \"This sentence talks about the Python __init__ method, which I'd rather not be\\u000ainterpreted as Markdown's strong.\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/emacs_head_vars.text",
    "content": "<!-- -*- markdown-extras: code-friendly -*- -->\n\nThis sentence talks about the Python __init__ method, which I'd rather not be\ninterpreted as Markdown's strong.\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/emacs_tail_vars.html",
    "content": "<p>This sentence talks about the Python __init__ method, which I'd rather not be\ninterpreted as Markdown's strong.</p>\n\n<!--\n  Local Variables:\n  markdown-extras: code-friendly\n  End:\n  -->\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/emacs_tail_vars.json",
    "content": "[\"html\", [\"p\", \"This sentence talks about the Python __init__ method, which I'd rather not be\\u000ainterpreted as Markdown's strong.\"], \"\\u000a\\u000a\", \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/emacs_tail_vars.text",
    "content": "This sentence talks about the Python __init__ method, which I'd rather not be\ninterpreted as Markdown's strong.\n\n<!--\n  Local Variables:\n  markdown-extras: code-friendly\n  End:\n  -->\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/emphasis.html",
    "content": "<p>This is <em>italic</em> and this is <strong>bold</strong>.\nThis is also <em>italic</em> and this is <strong>bold</strong>.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/emphasis.json",
    "content": "[\"html\", [\"p\", \"This is \", [\"em\", \"italic\"], \" and this is \", [\"strong\", \"bold\"], \".\\u000aThis is also \", [\"em\", \"italic\"], \" and this is \", [\"strong\", \"bold\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/emphasis.text",
    "content": "This is *italic* and this is **bold**.\nThis is also _italic_ and this is __bold__.\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/escapes.html",
    "content": "<p>**don't shout**</p>\n\n<p>*don't emphasize*</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/escapes.json",
    "content": "[\"html\", [\"p\", \"**don't shout**\"],\n    [\"p\", \"*don't emphasize*\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/escapes.text",
    "content": "\\*\\*don't shout\\*\\*\n\n\\*don't emphasize\\*\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes.html",
    "content": "<p>This is a para with a footnote.<sup class=\"footnote-ref\" id=\"fnref-1\"><a href=\"#fn-1\">1</a></sup></p>\n\n<p>This is another para with a footnote<sup class=\"footnote-ref\" id=\"fnref-2\"><a href=\"#fn-2\">2</a></sup> in it. Actually it has two<sup class=\"footnote-ref\" id=\"fnref-3\"><a href=\"#fn-3\">3</a></sup> of\nthem. No, three<sup class=\"footnote-ref\" id=\"fnref-4\"><a href=\"#fn-4\">4</a></sup>.</p>\n\n<div class=\"footnotes\">\n<hr />\n<ol>\n<li id=\"fn-1\">\n<p>Here is the body of the first footnote.&nbsp;<a href=\"#fnref-1\" class=\"footnoteBackLink\" title=\"Jump back to footnote 1 in the text.\">&#8617;</a></p>\n</li>\n\n<li id=\"fn-2\">\n<p>And of the second footnote.</p>\n\n<p>This one has multiple paragraphs.&nbsp;<a href=\"#fnref-2\" class=\"footnoteBackLink\" title=\"Jump back to footnote 2 in the text.\">&#8617;</a></p>\n</li>\n\n<li id=\"fn-3\">\n<p>Here is a footnote body that starts on next line.&nbsp;<a href=\"#fnref-3\" class=\"footnoteBackLink\" title=\"Jump back to footnote 3 in the text.\">&#8617;</a></p>\n</li>\n\n<li id=\"fn-4\">\n<p>quickie \"that looks like a link ref if not careful\"&nbsp;<a href=\"#fnref-4\" class=\"footnoteBackLink\" title=\"Jump back to footnote 4 in the text.\">&#8617;</a></p>\n</li>\n</ol>\n</div>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes.json",
    "content": "[\"html\", [\"p\", \"This is a para with a footnote.\", [\"sup\", {\n    \"class\": \"footnote-ref\",\n    \"id\": \"fnref-1\"\n},\n[\"a\", {\n    \"href\": \"#fn-1\"\n},\n\"1\"]]],\n    [\"p\", \"This is another para with a footnote\", [\"sup\", {\n        \"class\": \"footnote-ref\",\n        \"id\": \"fnref-2\"\n    },\n    [\"a\", {\n        \"href\": \"#fn-2\"\n    },\n    \"2\"]], \" in it. Actually it has two\", [\"sup\", {\n        \"class\": \"footnote-ref\",\n        \"id\": \"fnref-3\"\n    },\n    [\"a\", {\n        \"href\": \"#fn-3\"\n    },\n    \"3\"]], \" of\\u000athem. No, three\", [\"sup\", {\n        \"class\": \"footnote-ref\",\n        \"id\": \"fnref-4\"\n    },\n    [\"a\", {\n        \"href\": \"#fn-4\"\n    },\n    \"4\"]], \".\"], \"\\u000a\\u000a\", [\"div\", {\n    \"class\": \"footnotes\"\n},\n\"\\u000a\", [\"hr\"], \"\\u000a\", [\"ol\", [\"li\", {\n    \"id\": \"fn-1\"\n},\n[\"p\", \"Here is the body of the first footnote.\", [\"a\", {\n    \"href\": \"#fnref-1\",\n    \"class\": \"footnoteBackLink\",\n    \"title\": \"Jump back to footnote 1 in the text.\"\n},\n\"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn-2\"\n    },\n    [\"p\", \"And of the second footnote.\"],\n        [\"p\", \"This one has multiple paragraphs.\", [\"a\", {\n            \"href\": \"#fnref-2\",\n            \"class\": \"footnoteBackLink\",\n            \"title\": \"Jump back to footnote 2 in the text.\"\n        },\n        \"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn-3\"\n    },\n    [\"p\", \"Here is a footnote body that starts on next line.\", [\"a\", {\n        \"href\": \"#fnref-3\",\n        \"class\": \"footnoteBackLink\",\n        \"title\": \"Jump back to footnote 3 in the text.\"\n    },\n    \"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn-4\"\n    },\n    [\"p\", \"quickie \\\"that looks like a link ref if not careful\\\"\", [\"a\", {\n        \"href\": \"#fnref-4\",\n        \"class\": \"footnoteBackLink\",\n        \"title\": \"Jump back to footnote 4 in the text.\"\n    },\n    \"↩\"]]]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes.opts",
    "content": "{\"extras\": [\"footnotes\"]}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes.text",
    "content": "This is a para with a footnote.[^1]\n\nThis is another para with a footnote[^2] in it. Actually it has two[^3] of\nthem. No, three[^4].\n\n\n[^1]: Here is the body of the first footnote.\n\n[^2]: And of the second footnote.\n\n    This one has multiple paragraphs.\n\n[^3]: \n    Here is a footnote body that starts on next line.\n\n[^4]: quickie \"that looks like a link ref if not careful\"\n\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_letters.html",
    "content": "<p>This is a para with a footnote.<sup class=\"footnote-ref\" id=\"fnref-foo\"><a href=\"#fn-foo\">1</a></sup></p>\n\n<p>This is another para with a footnote<sup class=\"footnote-ref\" id=\"fnref-hyphen-ated\"><a href=\"#fn-hyphen-ated\">2</a></sup> in it. Actually it has two<sup class=\"footnote-ref\" id=\"fnref-Capital\"><a href=\"#fn-Capital\">3</a></sup> of\nthem.</p>\n\n<div class=\"footnotes\">\n<hr />\n<ol>\n<li id=\"fn-foo\">\n<p>Here is the body of the first footnote.&nbsp;<a href=\"#fnref-foo\" class=\"footnoteBackLink\" title=\"Jump back to footnote 1 in the text.\">&#8617;</a></p>\n</li>\n\n<li id=\"fn-hyphen-ated\">\n<p>And of the second footnote.</p>\n\n<p>This one has multiple paragraphs.&nbsp;<a href=\"#fnref-hyphen-ated\" class=\"footnoteBackLink\" title=\"Jump back to footnote 2 in the text.\">&#8617;</a></p>\n</li>\n\n<li id=\"fn-Capital\">\n<p>Here is a footnote body that starts on next line.&nbsp;<a href=\"#fnref-Capital\" class=\"footnoteBackLink\" title=\"Jump back to footnote 3 in the text.\">&#8617;</a></p>\n</li>\n</ol>\n</div>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_letters.json",
    "content": "[\"html\", [\"p\", \"This is a para with a footnote.\", [\"sup\", {\n    \"class\": \"footnote-ref\",\n    \"id\": \"fnref-foo\"\n},\n[\"a\", {\n    \"href\": \"#fn-foo\"\n},\n\"1\"]]],\n    [\"p\", \"This is another para with a footnote\", [\"sup\", {\n        \"class\": \"footnote-ref\",\n        \"id\": \"fnref-hyphen-ated\"\n    },\n    [\"a\", {\n        \"href\": \"#fn-hyphen-ated\"\n    },\n    \"2\"]], \" in it. Actually it has two\", [\"sup\", {\n        \"class\": \"footnote-ref\",\n        \"id\": \"fnref-Capital\"\n    },\n    [\"a\", {\n        \"href\": \"#fn-Capital\"\n    },\n    \"3\"]], \" of\\u000athem.\"], \"\\u000a\\u000a\", [\"div\", {\n    \"class\": \"footnotes\"\n},\n\"\\u000a\", [\"hr\"], \"\\u000a\", [\"ol\", [\"li\", {\n    \"id\": \"fn-foo\"\n},\n[\"p\", \"Here is the body of the first footnote.\", [\"a\", {\n    \"href\": \"#fnref-foo\",\n    \"class\": \"footnoteBackLink\",\n    \"title\": \"Jump back to footnote 1 in the text.\"\n},\n\"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn-hyphen-ated\"\n    },\n    [\"p\", \"And of the second footnote.\"],\n        [\"p\", \"This one has multiple paragraphs.\", [\"a\", {\n            \"href\": \"#fnref-hyphen-ated\",\n            \"class\": \"footnoteBackLink\",\n            \"title\": \"Jump back to footnote 2 in the text.\"\n        },\n        \"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn-Capital\"\n    },\n    [\"p\", \"Here is a footnote body that starts on next line.\", [\"a\", {\n        \"href\": \"#fnref-Capital\",\n        \"class\": \"footnoteBackLink\",\n        \"title\": \"Jump back to footnote 3 in the text.\"\n    },\n    \"↩\"]]]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_letters.opts",
    "content": "{\"extras\": [\"footnotes\"]}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_letters.text",
    "content": "This is a para with a footnote.[^foo]\n\nThis is another para with a footnote[^hyphen-ated] in it. Actually it has two[^Capital] of\nthem.\n\n\n[^foo]: Here is the body of the first footnote.\n\n[^hyphen-ated]: And of the second footnote.\n\n    This one has multiple paragraphs.\n\n[^Capital]: \n    Here is a footnote body that starts on next line.\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_markup.html",
    "content": "<p>This is a para with a footnote.<sup class=\"footnote-ref\" id=\"fnref-1\"><a href=\"#fn-1\">1</a></sup></p>\n\n<p>This is another para with a footnote.<sup class=\"footnote-ref\" id=\"fnref-2\"><a href=\"#fn-2\">2</a></sup></p>\n\n<div class=\"footnotes\">\n<hr />\n<ol>\n<li id=\"fn-1\">\n<p>And the <strong>body</strong> of the footnote has <code>markup</code>. For example,\na <a href=\"http://digg.com\">link to digg</a>. And some code:</p>\n\n<pre><code>print \"Hello, World!\"\n</code></pre>\n\n<p><a href=\"#fnref-1\" class=\"footnoteBackLink\" title=\"Jump back to footnote 1 in the text.\">&#8617;</a></p>\n</li>\n\n<li id=\"fn-2\">\n<p>This body has markup too, <em>but</em> doesn't end with a code block.&nbsp;<a href=\"#fnref-2\" class=\"footnoteBackLink\" title=\"Jump back to footnote 2 in the text.\">&#8617;</a></p>\n</li>\n</ol>\n</div>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_markup.json",
    "content": "[\"html\", [\"p\", \"This is a para with a footnote.\", [\"sup\", {\n    \"class\": \"footnote-ref\",\n    \"id\": \"fnref-1\"\n},\n[\"a\", {\n    \"href\": \"#fn-1\"\n},\n\"1\"]]],\n    [\"p\", \"This is another para with a footnote.\", [\"sup\", {\n        \"class\": \"footnote-ref\",\n        \"id\": \"fnref-2\"\n    },\n    [\"a\", {\n        \"href\": \"#fn-2\"\n    },\n    \"2\"]]], \"\\u000a\\u000a\", [\"div\", {\n    \"class\": \"footnotes\"\n},\n\"\\u000a\", [\"hr\"], \"\\u000a\", [\"ol\", [\"li\", {\n    \"id\": \"fn-1\"\n},\n[\"p\", \"And the \", [\"strong\", \"body\"], \" of the footnote has \", [\"code\", \"markup\"], \". For example,\\u000aa \", [\"a\", {\n    \"href\": \"http://digg.com\"\n},\n\"link to digg\"], \". And some code:\"],\n    [\"pre\", [\"code\", \"print \\\"Hello, World!\\\"\\u000a\"]],\n    [\"p\", [\"a\", {\n        \"href\": \"#fnref-1\",\n        \"class\": \"footnoteBackLink\",\n        \"title\": \"Jump back to footnote 1 in the text.\"\n    },\n    \"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn-2\"\n    },\n    [\"p\", \"This body has markup too, \", [\"em\", \"but\"], \" doesn't end with a code block.\", [\"a\", {\n        \"href\": \"#fnref-2\",\n        \"class\": \"footnoteBackLink\",\n        \"title\": \"Jump back to footnote 2 in the text.\"\n    },\n    \"↩\"]]]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_markup.opts",
    "content": "{\"extras\": [\"footnotes\"]}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_markup.text",
    "content": "This is a para with a footnote.[^1]\n\nThis is another para with a footnote.[^2]\n\n[^1]: And the **body** of the footnote has `markup`. For example,\n    a [link to digg](http://digg.com). And some code:\n\n        print \"Hello, World!\"\n\n[^2]: This body has markup too, *but* doesn't end with a code block.\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_safe_mode_escape.html",
    "content": "<p>This is a para with a footnote.<sup class=\"footnote-ref\" id=\"fnref-1\"><a href=\"#fn-1\">1</a></sup></p>\n\n<div class=\"footnotes\">\n<hr />\n<ol>\n<li id=\"fn-1\">\n<p>Here is the &lt;em&gt;body&lt;/em&gt; of &lt;span class=\"yo\"&gt;the&lt;/span&gt; footnote.</p>\n\n<p>&lt;div class=\"blah\"&gt;And here is the second para of the footnote.&lt;/div&gt;&nbsp;<a href=\"#fnref-1\" class=\"footnoteBackLink\" title=\"Jump back to footnote 1 in the text.\">&#8617;</a></p>\n</li>\n</ol>\n</div>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_safe_mode_escape.json",
    "content": "[\"html\", [\"p\", \"This is a para with a footnote.\", [\"sup\", {\n    \"class\": \"footnote-ref\",\n    \"id\": \"fnref-1\"\n},\n[\"a\", {\n    \"href\": \"#fn-1\"\n},\n\"1\"]]], \"\\u000a\\u000a\", [\"div\", {\n    \"class\": \"footnotes\"\n},\n\"\\u000a\", [\"hr\"], \"\\u000a\", [\"ol\", [\"li\", {\n    \"id\": \"fn-1\"\n},\n[\"p\", \"Here is the <em>body</em> of <span class=\\\"yo\\\">the</span> footnote.\"],\n    [\"p\", \"<div class=\\\"blah\\\">And here is the second para of the footnote.</div>\", [\"a\", {\n        \"href\": \"#fnref-1\",\n        \"class\": \"footnoteBackLink\",\n        \"title\": \"Jump back to footnote 1 in the text.\"\n    },\n    \"↩\"]]]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_safe_mode_escape.opts",
    "content": "{\"safe_mode\": \"escape\", \"extras\": [\"footnotes\"]}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/footnotes_safe_mode_escape.text",
    "content": "This is a para with a footnote.[^1]\n\n[^1]: Here is the <em>body</em> of <span class=\"yo\">the</span> footnote.\n\n    <div class=\"blah\">And here is the second para of the footnote.</div>\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/header.html",
    "content": "<h1>an h1</h1>\n\n<h2>an h2</h2>\n\n<h1>another h1</h1>\n\n<h2>another h2</h2>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/header.json",
    "content": "[\"html\", [\"h1\", \"an h1\"], \"\\u000a\\u000a\", [\"h2\", \"an h2\"], \"\\u000a\\u000a\", [\"h1\", \"another h1\"], \"\\u000a\\u000a\", [\"h2\", \"another h2\"], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/header.text",
    "content": "# an h1\n\n## an h2\n\nanother h1\n==========\n\nanother h2\n----------\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/hr.html",
    "content": "<p>Dashes:</p>\n\n<hr />\n\n<hr />\n\n<hr />\n\n<hr />\n\n<pre><code>---\n</code></pre>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/hr.json",
    "content": "[\"html\", [\"p\", \"Dashes:\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"hr\"], \"\\u000a\\u000a\", [\"pre\", [\"code\", \"---\\u000a\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/hr.text",
    "content": "Dashes:\n\n---\n\n ---\n \n  ---\n\n   ---\n\n\t---\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/img_in_link.html",
    "content": "<p>This example from\n<a href=\"http://orestis.gr/en/blog/2007/05/28/python-markdown-problems/\">http://orestis.gr/en/blog/2007/05/28/python-markdown-problems/</a>:</p>\n\n<p><a href=\"http://www.google.com/\" title=\"click to visit Google.com\"><img src=\"http://www.google.com/images/logo.gif\" alt=\"the google logo\" /></a></p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/img_in_link.json",
    "content": "[\"html\", [\"p\", \"This example from\\u000a\", [\"a\", {\n    \"href\": \"http://orestis.gr/en/blog/2007/05/28/python-markdown-problems/\"\n},\n\"http://orestis.gr/en/blog/2007/05/28/python-markdown-problems/\"], \":\"],\n    [\"p\", [\"a\", {\n        \"href\": \"http://www.google.com/\",\n        \"title\": \"click to visit Google.com\"\n    },\n    [\"img\", {\n        \"src\": \"http://www.google.com/images/logo.gif\",\n        \"alt\": \"the google logo\"\n    }]]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/img_in_link.text",
    "content": "This example from\n<http://orestis.gr/en/blog/2007/05/28/python-markdown-problems/>:\n\n[![the google logo][logo]][google]\n[logo]: http://www.google.com/images/logo.gif\n[google]: http://www.google.com/ \"click to visit Google.com\"\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/inline_links.html",
    "content": "<p>an inline <a href=\"/url/\">link</a></p>\n\n<p>a <a href=\"/url/\" title=\"title\">link \"with\" title</a></p>\n\n<p>an inline <img src=\"/url/\" alt=\"image link\" /></p>\n\n<p>an <img src=\"/url/\" alt=\"image &quot;with&quot; title\" title=\"title\" /></p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/inline_links.json",
    "content": "[\"html\", [\"p\", \"an inline \", [\"a\", {\n    \"href\": \"/url/\"\n},\n\"link\"]],\n    [\"p\", \"a \", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"title\"\n    },\n    \"link \\\"with\\\" title\"]],\n    [\"p\", \"an inline \", [\"img\", {\n        \"src\": \"/url/\",\n        \"alt\": \"image link\"\n    }]],\n    [\"p\", \"an \", [\"img\", {\n        \"src\": \"/url/\",\n        \"alt\": \"image \\\"with\\\" title\",\n        \"title\": \"title\"\n    }]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/inline_links.text",
    "content": "an inline [link](/url/)\n\na [link \"with\" title](/url/ \"title\")\n\nan inline ![image link](/url/)\n\nan ![image \"with\" title](/url/ \"title\")\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/issue2_safe_mode_borks_markup.html",
    "content": "<h2>Heading 2</h2>\n\n<p>blah [HTML_REMOVED]alert('this should be removed')[HTML_REMOVED] <strong>blah</strong></p>\n\n<p>[HTML_REMOVED]alert('as should this')[HTML_REMOVED]</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/issue2_safe_mode_borks_markup.json",
    "content": "[\"html\", [\"h2\", \"Heading 2\"], \"\\u000a\\u000a\", [\"p\", \"blah [HTML_REMOVED]alert('this should be removed')[HTML_REMOVED] \", [\"strong\", \"blah\"]],\n    [\"p\", \"[HTML_REMOVED]alert('as should this')[HTML_REMOVED]\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/issue2_safe_mode_borks_markup.opts",
    "content": "{\"safe_mode\": \"replace\"}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/issue2_safe_mode_borks_markup.text",
    "content": "## Heading 2\n\nblah <script>alert('this should be removed')</script> **blah**\n\n<script>alert('as should this')</script>\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_defn_alt_title_delims.html",
    "content": "<p>Alternative delimiters for <a href=\"http://daringfireball.net/projects/markdown/syntax#link\" title=\"link syntax\">link definitions</a> are allowed -- as of\nMarkdown 1.0.2, I think. Hence, <a href=\"http://daringfireball.net/projects/markdown/syntax#link\" title=\"link syntax\">this link</a> and <a href=\"http://daringfireball.net/projects/markdown/syntax#link\" title=\"link syntax\">this link</a> work\ntoo.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_defn_alt_title_delims.json",
    "content": "[\"html\", [\"p\", \"Alternative delimiters for \", [\"a\", {\n    \"href\": \"http://daringfireball.net/projects/markdown/syntax#link\",\n    \"title\": \"link syntax\"\n},\n\"link definitions\"], \" are allowed -- as of\\u000aMarkdown 1.0.2, I think. Hence, \", [\"a\", {\n    \"href\": \"http://daringfireball.net/projects/markdown/syntax#link\",\n    \"title\": \"link syntax\"\n},\n\"this link\"], \" and \", [\"a\", {\n    \"href\": \"http://daringfireball.net/projects/markdown/syntax#link\",\n    \"title\": \"link syntax\"\n},\n\"this link\"], \" work\\u000atoo.\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_defn_alt_title_delims.text",
    "content": "Alternative delimiters for [link definitions][link1] are allowed -- as of\nMarkdown 1.0.2, I think. Hence, [this link][link2] and [this link][link3] work\ntoo.\n\n[link1]: http://daringfireball.net/projects/markdown/syntax#link \"link syntax\"\n[link2]: http://daringfireball.net/projects/markdown/syntax#link 'link syntax'\n[link3]: http://daringfireball.net/projects/markdown/syntax#link (link syntax)\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns.html",
    "content": "<p><a href=\"http://code.activestate.com/recipes/123/\">Recipe 123</a> and <a href=\"http://bugs.activestate.com/show_bug.cgi?id=234\">Komodo bug 234</a> are related.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"http://code.activestate.com/recipes/123/\"\n},\n\"Recipe 123\"], \" and \", [\"a\", {\n    \"href\": \"http://bugs.activestate.com/show_bug.cgi?id=234\"\n},\n\"Komodo bug 234\"], \" are related.\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns.opts",
    "content": "{\"extras\": [\"link-patterns\"],\n \"link_patterns\": [\n    (re.compile(\"recipe\\s+(\\d+)\", re.I), r\"http://code.activestate.com/recipes/\\1/\"),\n    (re.compile(\"(?:komodo\\s+)?bug\\s+(\\d+)\", re.I), r\"http://bugs.activestate.com/show_bug.cgi?id=\\1\"),\n ],\n}\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns.text",
    "content": "Recipe 123 and Komodo bug 234 are related.\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns_double_hit.html",
    "content": "<p>There once was a <a href=\"http://bugzilla.mozilla.org/show_bug.cgi?id=123\">Mozilla bug 123</a> and a <a href=\"http://bugs.activestate.com/show_bug.cgi?id=123\">Komodo bug 123</a>.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns_double_hit.json",
    "content": "[\"html\", [\"p\", \"There once was a \", [\"a\", {\n    \"href\": \"http://bugzilla.mozilla.org/show_bug.cgi?id=123\"\n},\n\"Mozilla bug 123\"], \" and a \", [\"a\", {\n    \"href\": \"http://bugs.activestate.com/show_bug.cgi?id=123\"\n},\n\"Komodo bug 123\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns_double_hit.opts",
    "content": "{\"extras\": [\"link-patterns\"],\n \"link_patterns\": [\n    (re.compile(r'mozilla\\s+bug\\s+(\\d+)', re.I), r'http://bugzilla.mozilla.org/show_bug.cgi?id=\\1'),\n    (re.compile(\"(?:komodo\\s+)?bug\\s+(\\d+)\", re.I), r\"http://bugs.activestate.com/show_bug.cgi?id=\\1\"),\n ],\n}\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns_double_hit.text",
    "content": "There once was a Mozilla bug 123 and a Komodo bug 123.\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns_edge_cases.html",
    "content": "<p><a href=\"http://foo.com/blah_blah_blah/123\">Blah 123</a> becomes a line with two underscores.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns_edge_cases.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"http://foo.com/blah_blah_blah/123\"\n},\n\"Blah 123\"], \" becomes a line with two underscores.\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns_edge_cases.opts",
    "content": "{\"extras\": [\"link-patterns\"],\n \"link_patterns\": [\n    (re.compile(\"Blah\\s+(\\d+)\", re.I), r\"http://foo.com/blah_blah_blah/\\1\"),\n ],\n}\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/link_patterns_edge_cases.text",
    "content": "Blah 123 becomes a line with two underscores.\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/lists.html",
    "content": "<p>count:</p>\n\n<ul>\n<li>one</li>\n<li>two</li>\n<li>three</li>\n</ul>\n\n<p>count in spanish:</p>\n\n<ol>\n<li>uno</li>\n<li>dos</li>\n<li>tres</li>\n</ol>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/lists.json",
    "content": "[\"html\", [\"p\", \"count:\"],\n    [\"ul\", [\"li\", \"one\"],\n        [\"li\", \"two\"],\n        [\"li\", \"three\"]],\n    [\"p\", \"count in spanish:\"],\n    [\"ol\", [\"li\", \"uno\"],\n        [\"li\", \"dos\"],\n        [\"li\", \"tres\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/lists.text",
    "content": "count:\n\n* one\n* two\n* three\n\ncount in spanish:\n\n1. uno\n2. dos\n3. tres\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/mismatched_footnotes.html",
    "content": "<p>This is sentence has a footnote foo<sup class=\"footnote-ref\" id=\"fnref-foo\"><a href=\"#fn-foo\">1</a></sup> and whamo[^whamo].</p>\n\n<p>This is another para with a numbered footnote<sup class=\"footnote-ref\" id=\"fnref-6\"><a href=\"#fn-6\">2</a></sup>.</p>\n\n<div class=\"footnotes\">\n<hr />\n<ol>\n<li id=\"fn-foo\">\n<p>Here is the body of the footnote foo.&nbsp;<a href=\"#fnref-foo\" class=\"footnoteBackLink\" title=\"Jump back to footnote 1 in the text.\">&#8617;</a></p>\n</li>\n\n<li id=\"fn-6\">\n<p>Here is the body of the footnote 6.&nbsp;<a href=\"#fnref-6\" class=\"footnoteBackLink\" title=\"Jump back to footnote 2 in the text.\">&#8617;</a></p>\n</li>\n</ol>\n</div>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/mismatched_footnotes.json",
    "content": "[\"html\", [\"p\", \"This is sentence has a footnote foo\", [\"sup\", {\n    \"class\": \"footnote-ref\",\n    \"id\": \"fnref-foo\"\n},\n[\"a\", {\n    \"href\": \"#fn-foo\"\n},\n\"1\"]], \" and whamo[^whamo].\"],\n    [\"p\", \"This is another para with a numbered footnote\", [\"sup\", {\n        \"class\": \"footnote-ref\",\n        \"id\": \"fnref-6\"\n    },\n    [\"a\", {\n        \"href\": \"#fn-6\"\n    },\n    \"2\"]], \".\"], \"\\u000a\\u000a\", [\"div\", {\n    \"class\": \"footnotes\"\n},\n\"\\u000a\", [\"hr\"], \"\\u000a\", [\"ol\", [\"li\", {\n    \"id\": \"fn-foo\"\n},\n[\"p\", \"Here is the body of the footnote foo.\", [\"a\", {\n    \"href\": \"#fnref-foo\",\n    \"class\": \"footnoteBackLink\",\n    \"title\": \"Jump back to footnote 1 in the text.\"\n},\n\"↩\"]]],\n    [\"li\", {\n        \"id\": \"fn-6\"\n    },\n    [\"p\", \"Here is the body of the footnote 6.\", [\"a\", {\n        \"href\": \"#fnref-6\",\n        \"class\": \"footnoteBackLink\",\n        \"title\": \"Jump back to footnote 2 in the text.\"\n    },\n    \"↩\"]]]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/mismatched_footnotes.opts",
    "content": "{\"extras\": [\"footnotes\"]}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/mismatched_footnotes.text",
    "content": "This is sentence has a footnote foo[^foo] and whamo[^whamo].\n\nThis is another para with a numbered footnote[^6].\n\n\n[^foo]: Here is the body of the footnote foo.\n[^bar]: Here is the body of the footnote bar.\n[^6]: Here is the body of the footnote 6.\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/missing_link_defn.html",
    "content": "<p>This is a [missing link][missing] and a <a href=\"http://foo.com\">used link</a>.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/missing_link_defn.json",
    "content": "[\"html\", [\"p\", \"This is a [missing link][missing] and a \", [\"a\", {\n    \"href\": \"http://foo.com\"\n},\n\"used link\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/missing_link_defn.text",
    "content": "\nThis is a [missing link][missing] and a [used link][used].\n\n\n[used]: http://foo.com\n[unused]: http://foo.com\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/nested_list.html",
    "content": "<p>shopping list:</p>\n\n<ul>\n<li>veggies\n<ul>\n<li>carrots</li>\n<li>lettuce</li>\n</ul></li>\n<li>fruits\n<ul>\n<li>oranges</li>\n<li>apples</li>\n<li><em>peaches</em></li>\n</ul></li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/nested_list.json",
    "content": "[\"html\", [\"p\", \"shopping list:\"],\n    [\"ul\", [\"li\", \"veggies\\u000a\", [\"ul\", [\"li\", \"carrots\"],\n        [\"li\", \"lettuce\"]]],\n        [\"li\", \"fruits\\u000a\", [\"ul\", [\"li\", \"oranges\"],\n            [\"li\", \"apples\"],\n            [\"li\", [\"em\", \"peaches\"]]]]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/nested_list.text",
    "content": "shopping list:\n\n- veggies\n    + carrots\n    + lettuce\n- fruits\n    + oranges\n    + apples\n    + *peaches*\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/nested_list_safe_mode.html",
    "content": "<p>shopping list:</p>\n\n<ul>\n<li>veggies\n<ul>\n<li>carrots</li>\n<li>lettuce</li>\n</ul></li>\n<li>fruits\n<ul>\n<li>oranges</li>\n<li>apples</li>\n<li><em>peaches</em></li>\n</ul></li>\n</ul>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/nested_list_safe_mode.json",
    "content": "[\"html\", [\"p\", \"shopping list:\"],\n    [\"ul\", [\"li\", \"veggies\\u000a\", [\"ul\", [\"li\", \"carrots\"],\n        [\"li\", \"lettuce\"]]],\n        [\"li\", \"fruits\\u000a\", [\"ul\", [\"li\", \"oranges\"],\n            [\"li\", \"apples\"],\n            [\"li\", [\"em\", \"peaches\"]]]]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/nested_list_safe_mode.opts",
    "content": "{'safe_mode': True}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/nested_list_safe_mode.text",
    "content": "shopping list:\n\n- veggies\n    + carrots\n    + lettuce\n- fruits\n    + oranges\n    + apples\n    + *peaches*\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/parens_in_url_4.html",
    "content": "<p><a href=\"/url(test)\" title=\"title\">Inline link 4 with non-escaped parens</a>.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/parens_in_url_4.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"/url(test)\",\n    \"title\": \"title\"\n},\n\"Inline link 4 with non-escaped parens\"], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/parens_in_url_4.text",
    "content": "[Inline link 4 with non-escaped parens](</url(test)> \"title\").\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/raw_html.html",
    "content": "<p>Hi, <span foo=\"*bar*\"><em>there</em></span>. <!-- *blah* --> blah</p>\n\n<div>\n    **ack**\n</div>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/raw_html.json",
    "content": "[\"html\", [\"p\", \"Hi, \", [\"span\", {\n    \"foo\": \"*bar*\"\n},\n[\"em\", \"there\"]], \". \", \" blah\"], \"\\u000a\\u000a\", [\"div\", \"\\u000a    **ack**\\u000a\"], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/raw_html.text",
    "content": "\nHi, <span foo=\"*bar*\">*there*</span>. <!-- *blah* --> blah\n\n<div>\n    **ack**\n</div>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/ref_links.html",
    "content": "<p><a href=\"http://www.google.com/\">Google</a> is fast <img src=\"/img/star.png\" alt=\"star\" />.</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/ref_links.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"http://www.google.com/\"\n},\n\"Google\"], \" is fast \", [\"img\", {\n    \"src\": \"/img/star.png\",\n    \"alt\": \"star\"\n}], \".\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/ref_links.text",
    "content": "[Google][] is fast ![star][].\n\n[google]: http://www.google.com/\n[star]: /img/star.png\n\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/sublist-para.html",
    "content": "<p>Some quick thoughts from a coder's perspective:</p>\n\n<ul>\n<li><p>The source will be available in a Mercurial ...</p></li>\n<li><p>Komodo is a Mozilla-based application...</p>\n\n<ul>\n<li>Get a slightly tweaked mozilla build (C++, JavaScript, XUL).</li>\n<li>Get a slightly tweaks Python build (C).</li>\n<li>Add a bunch of core logic (Python)...</li>\n<li>Add Komodo chrome (XUL, JavaScript, CSS, DTDs).</li>\n</ul>\n\n<p><p>What this means is that work on and add significant functionality...</p></li>\n<li><p>Komodo uses the same extension mechanisms as Firefox...</p></li>\n<li><p>Komodo builds and runs on Windows, Linux and ...</p></li>\n</ul></p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/sublist-para.json",
    "content": "[\"html\", [\"p\", \"Some quick thoughts from a coder's perspective:\"],\n    [\"ul\", [\"li\", [\"p\", \"The source will be available in a Mercurial ...\"]],\n        [\"li\", [\"p\", \"Komodo is a Mozilla-based application...\"],\n            [\"ul\", [\"li\", \"Get a slightly tweaked mozilla build (C++, JavaScript, XUL).\"],\n                [\"li\", \"Get a slightly tweaks Python build (C).\"],\n                [\"li\", \"Add a bunch of core logic (Python)...\"],\n                [\"li\", \"Add Komodo chrome (XUL, JavaScript, CSS, DTDs).\"]],\n            [\"p\", [\"p\", \"What this means is that work on and add significant functionality...\"]]],\n        [\"li\", [\"p\", \"Komodo uses the same extension mechanisms as Firefox...\"]],\n        [\"li\", [\"p\", \"Komodo builds and runs on Windows, Linux and ...\"]]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/sublist-para.text",
    "content": "Some quick thoughts from a coder's perspective:\n\n- The source will be available in a Mercurial ...\n\n- Komodo is a Mozilla-based application...\n\n  - Get a slightly tweaked mozilla build (C++, JavaScript, XUL).\n  - Get a slightly tweaks Python build (C).\n  - Add a bunch of core logic (Python)...\n  - Add Komodo chrome (XUL, JavaScript, CSS, DTDs).\n\n  What this means is that work on and add significant functionality...\n\n- Komodo uses the same extension mechanisms as Firefox...\n\n- Komodo builds and runs on Windows, Linux and ...\n\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/syntax_color.html",
    "content": "<p>Here is some sample code:</p>\n\n<div class=\"codehilite\"><pre><code><span class=\"k\">import</span> <span class=\"nn\">sys</span>\n<span class=\"k\">def</span> <span class=\"nf\">main</span><span class=\"p\">(</span><span class=\"n\">argv</span><span class=\"o\">=</span><span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">):</span>\n    <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">basicConfig</span><span class=\"p\">()</span>\n    <span class=\"n\">log</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s\">&#39;hi&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n\n<p>and:</p>\n\n<div class=\"codehilite\"><pre><code><span class=\"n\">use</span> <span class=\"s1\">&#39;zlib&#39;</span>\n<span class=\"nb\">sub</span> <span class=\"n\">main</span><span class=\"p\">(</span><span class=\"n\">argv</span><span class=\"p\">)</span>\n    <span class=\"nb\">puts</span> <span class=\"s1\">&#39;hi&#39;</span>\n<span class=\"k\">end</span>\n</code></pre></div>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/syntax_color.json",
    "content": "[\"html\", [\"p\", \"Here is some sample code:\"], \"\\u000a\\u000a\", [\"div\", {\n    \"class\": \"codehilite\"\n},\n[\"pre\", [\"code\", [\"span\", {\n    \"class\": \"k\"\n},\n\"import\"], \" \", [\"span\", {\n    \"class\": \"nn\"\n},\n\"sys\"], \"\\u000a\", [\"span\", {\n    \"class\": \"k\"\n},\n\"def\"], \" \", [\"span\", {\n    \"class\": \"nf\"\n},\n\"main\"],\n    [\"span\", {\n        \"class\": \"p\"\n    },\n    \"(\"],\n    [\"span\", {\n        \"class\": \"n\"\n    },\n    \"argv\"],\n    [\"span\", {\n        \"class\": \"o\"\n    },\n    \"=\"],\n    [\"span\", {\n        \"class\": \"n\"\n    },\n    \"sys\"],\n    [\"span\", {\n        \"class\": \"o\"\n    },\n    \".\"],\n    [\"span\", {\n        \"class\": \"n\"\n    },\n    \"argv\"],\n    [\"span\", {\n        \"class\": \"p\"\n    },\n    \"):\"], \"\\u000a    \", [\"span\", {\n    \"class\": \"n\"\n},\n\"logging\"],\n    [\"span\", {\n        \"class\": \"o\"\n    },\n    \".\"],\n    [\"span\", {\n        \"class\": \"n\"\n    },\n    \"basicConfig\"],\n    [\"span\", {\n        \"class\": \"p\"\n    },\n    \"()\"], \"\\u000a    \", [\"span\", {\n    \"class\": \"n\"\n},\n\"log\"],\n    [\"span\", {\n        \"class\": \"o\"\n    },\n    \".\"],\n    [\"span\", {\n        \"class\": \"n\"\n    },\n    \"info\"],\n    [\"span\", {\n        \"class\": \"p\"\n    },\n    \"(\"],\n    [\"span\", {\n        \"class\": \"s\"\n    },\n    \"'hi'\"],\n    [\"span\", {\n        \"class\": \"p\"\n    },\n    \")\"], \"\\u000a\"]]], \"\\u000a\\u000a\", [\"p\", \"and:\"], \"\\u000a\\u000a\", [\"div\", {\n    \"class\": \"codehilite\"\n},\n[\"pre\", [\"code\", [\"span\", {\n    \"class\": \"n\"\n},\n\"use\"], \" \", [\"span\", {\n    \"class\": \"s1\"\n},\n\"'zlib'\"], \"\\u000a\", [\"span\", {\n    \"class\": \"nb\"\n},\n\"sub\"], \" \", [\"span\", {\n    \"class\": \"n\"\n},\n\"main\"],\n    [\"span\", {\n        \"class\": \"p\"\n    },\n    \"(\"],\n    [\"span\", {\n        \"class\": \"n\"\n    },\n    \"argv\"],\n    [\"span\", {\n        \"class\": \"p\"\n    },\n    \")\"], \"\\u000a    \", [\"span\", {\n    \"class\": \"nb\"\n},\n\"puts\"], \" \", [\"span\", {\n    \"class\": \"s1\"\n},\n\"'hi'\"], \"\\u000a\", [\"span\", {\n    \"class\": \"k\"\n},\n\"end\"], \"\\u000a\"]]], \"\\u000a\"]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/syntax_color.opts",
    "content": "{\"extras\": [\"code-color\"]}\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/syntax_color.text",
    "content": "Here is some sample code:\n\n    :::python\n    import sys\n    def main(argv=sys.argv):\n        logging.basicConfig()\n        log.info('hi')\n\nand:\n\n    :::ruby\n    use 'zlib'\n    sub main(argv)\n        puts 'hi'\n    end\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/tricky_anchors.html",
    "content": "<p><a href=\"/url/\">with [brackets][] in text</a></p>\n\n<p><a href=\"/url/\" title=\"a title\">with [[brackets][]] in text</a></p>\n\n<p><a href=\"/url/\">full link [like](/this/) in text</a></p>\n\n<p><a href=\"/url/\">full link to img <img src=\"/this/\" alt=\"like\" /> is ok</a></p>\n\n<p>[only open <a href=\"/url/\" title=\"a title\">bracket(/in/) text</a></p>\n\n<p><a href=\"/in/\">only close bracket</a> text](/url/)</p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/tricky_anchors.json",
    "content": "[\"html\", [\"p\", [\"a\", {\n    \"href\": \"/url/\"\n},\n\"with [brackets][] in text\"]],\n    [\"p\", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"a title\"\n    },\n    \"with [[brackets][]] in text\"]],\n    [\"p\", [\"a\", {\n        \"href\": \"/url/\"\n    },\n    \"full link [like](/this/) in text\"]],\n    [\"p\", [\"a\", {\n        \"href\": \"/url/\"\n    },\n    \"full link to img \", [\"img\", {\n        \"src\": \"/this/\",\n        \"alt\": \"like\"\n    }], \" is ok\"]],\n    [\"p\", \"[only open \", [\"a\", {\n        \"href\": \"/url/\",\n        \"title\": \"a title\"\n    },\n    \"bracket(/in/) text\"]],\n    [\"p\", [\"a\", {\n        \"href\": \"/in/\"\n    },\n    \"only close bracket\"], \" text](/url/)\"]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/tricky_anchors.text",
    "content": "[with [brackets][] in text](/url/)\n\n[with [[brackets][]] in text](/url/ \"a title\")\n\n[full link [like](/this/) in text](/url/)\n\n[full link to img ![like](/this/) is ok](/url/)\n\n[only open [bracket(/in/) text](/url/   'a title')\n\n[only close bracket](/in/) text](/url/)\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/underline_in_autolink.html",
    "content": "<p>Eric wrote up a (long) intro to writing UDL definitions a while back on\nhis blog: <a href=\"http://blogs.activestate.com/ericp/2007/01/kid_adding_a_ne.html\">http://blogs.activestate.com/ericp/2007/01/kid_adding_a_ne.html</a></p>\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/underline_in_autolink.json",
    "content": "[\"html\", [\"p\", \"Eric wrote up a (long) intro to writing UDL definitions a while back on\\u000ahis blog: \", [\"a\", {\n    \"href\": \"http://blogs.activestate.com/ericp/2007/01/kid_adding_a_ne.html\"\n},\n\"http://blogs.activestate.com/ericp/2007/01/kid_adding_a_ne.html\"]]]\n"
  },
  {
    "path": "test/fixtures/docs-pythonmarkdown2-tm-cases-pass/underline_in_autolink.text",
    "content": "Eric wrote up a (long) intro to writing UDL definitions a while back on\nhis blog: <http://blogs.activestate.com/ericp/2007/01/kid_adding_a_ne.html>\n"
  },
  {
    "path": "test/html_renderer.t.js",
    "content": "var markdown = require(\"../src/markdown\"),\n    tap = require(\"tap\");\n\ntap.test(\"src attribute order\", function(t) {\n  var tree = markdown.toHTML(\"![photo](/images/photo.jpg)\");\n  t.equivalent( tree, '<p><img src=\"/images/photo.jpg\" alt=\"photo\"/></p>' );\n  t.end();\n});"
  },
  {
    "path": "test/interface.t.js",
    "content": "var markdown = require(\"../src/markdown\"),\n    test = require(\"tap\").test;\n\nfunction clone_array( input ) {\n  // Helper method. Since the objects are plain round trip through JSON to get\n  // a clone\n  return JSON.parse( JSON.stringify( input ) );\n}\n\ntest(\"arguments untouched\", function(t) {\n  var input = \"A [link][id] by id.\\n\\n[id]: http://google.com\",\n      tree = markdown.parse( input ),\n      clone = clone_array( tree ),\n      output = markdown.toHTML( tree );\n\n  t.equivalent( tree, clone, \"tree isn't modified\" );\n  // We had a problem where we would accidentally remove the references\n  // property from the root. We want to check the output is the same when\n  // called twice.\n  t.equivalent( markdown.toHTML( tree ), output, \"output is consistent\" );\n\n  t.end();\n});\n"
  },
  {
    "path": "test/regressions.t.js",
    "content": "var Markdown = require(\"../src/markdown\"),\n    tap = require(\"tap\"),\n    mk_block = Markdown.mk_block;\n\n\n/*\n * This file contains tests that check various regressions on the individual\n * parsers, rather than the parser as a whole.\n */\n\nfunction test(name, cb) {\n  tap.test( name, function(t) {\n    cb(t, new Markdown() );\n    t.end();\n  });\n}\n\ntest(\"split_block\", function(t, md) {\n  t.equivalent(\n      md.split_blocks( \"# h1 #\\n\\npara1\\npara1L2\\n  \\n\\n\\n\\npara2\\n\" ),\n      [mk_block( \"# h1 #\", \"\\n\\n\", 1 ),\n       mk_block( \"para1\\npara1L2\", \"\\n  \\n\\n\\n\\n\", 3 ),\n       mk_block( \"para2\", \"\\n\", 9 )\n      ],\n      \"split_block should record trailing newlines\");\n\n  t.equivalent(\n      md.split_blocks( \"\\n\\n# heading #\\n\\npara\\n\" ),\n      [mk_block( \"# heading #\", \"\\n\\n\", 3 ),\n       mk_block( \"para\", \"\\n\", 5 )\n      ],\n      \"split_block should ignore leading newlines\");\n});\n\ntest(\"headers\", function(t, md) {\n\n\n  t.equivalent(\n    md.dialect.block.setextHeader.call( md,  \"h1\\n===\\n\\n\", [] ),\n    [ [ \"header\", { level: 1 }, \"h1\" ] ],\n    \"Atx and Setext style H1s should produce the same output\" );\n\n  t.equivalent(\n    md.dialect.block.atxHeader.call( md, \"# h1\\n\\n\"),\n    [ [ \"header\", { level: 1 }, \"h1\" ] ],\n    \"Closing # optional on atxHeader\");\n\n  t.equivalent(\n    md.dialect.block.atxHeader.call( md, \"## h2\\n\\n\", [] ),\n    [[\"header\", {level: 2}, \"h2\"]],\n    \"Atx h2 has right level\");\n\n  t.equivalent(\n    md.dialect.block.setextHeader.call( md, \"h2\\n---\\n\\n\", [] ),\n    [[\"header\", {level: 2}, \"h2\"]],\n    \"Atx and Setext style H2s should produce the same output\" );\n});\n\ntest(\"code\", function(t, md) {\n  var code = md.dialect.block.code,\n      next = [ mk_block(\"next\") ];\n\n  t.equivalent(\n    code.call( md, mk_block(\"    foo\\n    bar\"), next ),\n    [[\"code_block\", \"foo\\nbar\" ]],\n    \"Code block correct\");\n\n  t.equivalent(\n    next, [mk_block(\"next\")],\n    \"next untouched when its not code\");\n\n  next = [];\n  t.equivalent(\n    code.call( md, mk_block(\"    foo\\n  bar\"), next ),\n    [[\"code_block\", \"foo\" ]],\n    \"Code block correct for abutting para\");\n\n  t.equivalent(\n    next, [mk_block(\"  bar\")],\n    \"paragraph put back into next block\");\n\n  t.equivalent(\n    code.call( md, mk_block(\"    foo\"), [mk_block(\"    bar\") ] ),\n    [[\"code_block\", \"foo\\n\\nbar\" ]],\n    \"adjacent code blocks \");\n\n  t.equivalent(\n    code.call( md, mk_block(\"    foo\",\"\\n  \\n      \\n\"), [mk_block(\"    bar\") ] ),\n    [[\"code_block\", \"foo\\n\\n\\nbar\" ]],\n    \"adjacent code blocks preserve correct number of empty lines\");\n\n});\n\ntest( \"bulletlist\", function(t, md) {\n  var bl = function() { return md.dialect.block.lists.apply(md, arguments); };\n\n  t.equivalent(\n    bl( mk_block(\"* foo\\n* bar\"), [] ),\n    [ [ \"bulletlist\", [ \"listitem\", \"foo\" ], [ \"listitem\", \"bar\" ] ] ],\n    \"single line bullets\");\n\n  t.equivalent(\n    bl( mk_block(\"* [text](url)\" ), [] ),\n    [ [ \"bulletlist\", [ \"listitem\", [ \"link\", { href: \"url\" }, \"text\" ] ] ] ],\n    \"link in bullet\");\n\n  t.equivalent(\n    bl( mk_block(\"* foo\\nbaz\\n* bar\\nbaz\"), [] ),\n    [ [ \"bulletlist\", [ \"listitem\", \"foo\\nbaz\" ], [ \"listitem\", \"bar\\nbaz\" ] ] ],\n    \"multiline lazy bullets\");\n\n  t.equivalent(\n    bl( mk_block(\"* foo\\n  baz\\n* bar\\n  baz\"), [] ),\n    [ [ \"bulletlist\", [ \"listitem\", \"foo\\nbaz\" ], [ \"listitem\", \"bar\\nbaz\" ] ] ],\n    \"multiline tidy bullets\");\n\n  t.equivalent(\n    bl( mk_block(\"* foo\\n     baz\"), [] ),\n    [ [ \"bulletlist\", [ \"listitem\", \"foo\\n baz\" ] ] ],\n    \"only trim 4 spaces from the start of the line\");\n\n  /* Test wrong: should end up with 3 nested lists here\n  t.equivalent(\n    bl( mk_block(\" * one\\n  * two\\n   * three\" ), [] ),\n    [ [ \"bulletlist\", [ \"listitem\", \"one\" ], [ \"listitem\", \"two\" ], [ \"listitem\", \"three\" ] ] ],\n    \"bullets can be indented up to three spaces\");\n  */\n\n  t.equivalent(\n    bl( mk_block(\"  * one\"), [ mk_block(\"    two\") ] ),\n    [ [ \"bulletlist\", [ \"listitem\", [ \"para\", \"one\" ], [ \"para\", \"two\" ] ] ] ],\n    \"loose bullet lists can have multiple paragraphs\");\n\n  /* Case: no space after bullet - not a list\n   | *↵\n   |foo\n   */\n  t.equivalent(\n    bl( mk_block(\" *\\nfoo\") ),\n    undefined,\n    \"Space required after bullet to trigger list\");\n\n  /* Case: note the space after the bullet\n   | *␣\n   |foo\n   |bar\n   */\n  t.equivalent(\n    bl( mk_block(\" * \\nfoo\\nbar\"), [ ] ),\n    [ [ \"bulletlist\", [ \"listitem\", \"foo\\nbar\" ] ] ],\n    \"space+continuation lines\", {todo: true} );\n\n\n  /* Case I:\n   | * foo\n   |     * bar\n   |   * baz\n   */\n  t.equivalent(\n    bl( mk_block(\" * foo\\n\" +\n                 \"      * bar\\n\" +\n                 \"    * baz\"),\n        [] ),\n    [ [ \"bulletlist\",\n        [ \"listitem\",\n          \"foo\",\n          [ \"bulletlist\",\n            [ \"listitem\",\n              \"bar\",\n              [ \"bulletlist\",\n                [ \"listitem\", \"baz\" ]\n              ]\n            ]\n          ]\n        ]\n    ] ],\n    \"Interesting indented lists I\");\n\n  /* Case II:\n   | * foo\n   |      * bar\n   | * baz\n   */\n  t.equivalent(\n    bl( mk_block(\" * foo\\n      * bar\\n * baz\"), [] ),\n    [ [ \"bulletlist\",\n        [ \"listitem\",\n          \"foo\",\n          [ \"bulletlist\",\n            [ \"listitem\", \"bar\" ]\n          ]\n        ],\n        [ \"listitem\", \"baz\" ]\n    ] ],\n    \"Interesting indented lists II\");\n\n  /* Case III:\n   |  * foo\n   |   * bar\n   |* baz\n   | * fnord\n   */\n  t.equivalent(\n    bl( mk_block(\"  * foo\\n   * bar\\n* baz\\n * fnord\"), [] ),\n    [ [ \"bulletlist\",\n        [ \"listitem\",\n          \"foo\",\n          [ \"bulletlist\",\n            [ \"listitem\", \"bar\" ],\n            [ \"listitem\", \"baz\" ],\n            [ \"listitem\", \"fnord\" ]\n          ]\n        ]\n    ] ],\n    \"Interesting indented lists III\");\n\n  /* Case IV:\n   | * foo\n   |\n   | 1. bar\n   */\n  t.equivalent(\n    bl( mk_block(\" * foo\"), [ mk_block(\" 1. bar\\n\") ] ),\n    [ [ \"bulletlist\",\n        [\"listitem\", [\"para\", \"foo\"] ],\n        [\"listitem\", [\"para\", \"bar\"] ]\n    ] ],\n    \"Different lists at same indent IV\");\n\n  /* Case V:\n   |   * foo\n   |  * bar\n   | * baz\n   */\n  t.equivalent(\n    bl( mk_block(\"   * foo\\n  * bar\\n * baz\"), [] ),\n    [ [ \"bulletlist\",\n        [ \"listitem\",\n          \"foo\",\n          [ \"bulletlist\",\n            [\"listitem\", \"bar\"],\n            [\"listitem\", \"baz\"]\n          ]\n        ]\n    ] ],\n    \"Indenting Case V\");\n\n  /* Case VI: deep nesting\n   |* one\n   |    * two\n   |        * three\n   |            * four\n   */\n  t.equivalent(\n    bl( mk_block(\"* one\\n    * two\\n        * three\\n            * four\"), [] ),\n    [ [ \"bulletlist\",\n        [ \"listitem\",\n          \"one\",\n          [ \"bulletlist\",\n            [ \"listitem\",\n              \"two\",\n              [ \"bulletlist\",\n                [ \"listitem\",\n                  \"three\",\n                  [ \"bulletlist\",\n                    [ \"listitem\", \"four\" ]\n                  ]\n                ]\n              ]\n            ]\n          ]\n        ]\n    ] ],\n    \"deep nested lists VI\");\n\n  /* Case VII: This one is just fruity!\n   |   * foo\n   |  * bar\n   | * baz\n   |* HATE\n   |  * flibble\n   |   * quxx\n   |    * nest?\n   |        * where\n   |      * am\n   |     * i?\n   */\n  t.equivalent(\n    bl( mk_block(\"   * foo\\n\" +\n                 \"  * bar\\n\" +\n                 \" * baz\\n\" +\n                 \"* HATE\\n\" +\n                 \"  * flibble\\n\" +\n                 \"   * quxx\\n\" +\n                 \"    * nest?\\n\" +\n                 \"        * where\\n\" +\n                 \"      * am\\n\" +\n                 \"     * i?\"),\n      [] ),\n    [ [ \"bulletlist\",\n        [ \"listitem\",\n          \"foo\",\n          [ \"bulletlist\",\n            [\"listitem\", \"bar\"],\n            [\"listitem\", \"baz\"],\n            [\"listitem\", \"HATE\"],\n            [\"listitem\", \"flibble\"]\n          ]\n        ],\n        [ \"listitem\",\n          \"quxx\",\n          [ \"bulletlist\",\n            [ \"listitem\",\n              \"nest?\",\n              [ \"bulletlist\",\n                [\"listitem\", \"where\"],\n                [\"listitem\", \"am\"],\n                [\"listitem\", \"i?\"]\n              ]\n            ]\n          ]\n        ]\n    ] ],\n    \"Indenting Case VII\");\n\n  /* Case VIII: Deep nesting + code block\n   |   * one\n   |    * two\n   |        * three\n   |                * four\n   |\n   |                foo\n   */\n  t.equivalent(\n    bl( mk_block(\"   * one\\n\" +\n                 \"    1. two\\n\" +\n                 \"        * three\\n\" +\n                 \"                * four\",\n                 \"\\n\\n\"),\n        [ mk_block(\"                foo\") ] ),\n    [ [ \"bulletlist\",\n        [ \"listitem\",\n          [\"para\", \"one\"],\n          [ \"numberlist\",\n            [ \"listitem\",\n              [\"para\", \"two\"],\n              [ \"bulletlist\",\n                [ \"listitem\",\n                  [ \"para\", \"three\\n    * four\"],\n                  [\"code_block\", \"foo\"]\n                ]\n              ]\n            ]\n          ]\n        ]\n    ] ],\n    \"Case VIII: Deep nesting and code block\");\n\n});\n\ntest( \"horizRule\", function(t, md) {\n  var hr = md.dialect.block.horizRule,\n      strs = [\"---\", \"_ __\", \"** ** **\", \"--- \"];\n  strs.forEach( function(s) {\n    t.equivalent(\n      hr.call( md, mk_block(s), [] ),\n      [ [ \"hr\" ] ],\n      \"simple hr from \" + require(\"util\").inspect(s));\n  });\n});\n\ntest( \"blockquote\", function(t, md) {\n  var bq = md.dialect.block.blockquote;\n  t.equivalent(\n    bq.call( md, mk_block(\"> foo\\n> bar\"), [] ),\n    [ [\"blockquote\", [\"para\", \"foo\\nbar\"] ] ],\n    \"simple blockquote\");\n\n  // Note: this tests horizRule as well through block processing.\n  t.equivalent(\n    bq.call( md, mk_block(\"> foo\\n> bar\\n>\\n>- - - \"), [] ),\n    [ [\"blockquote\",\n        [\"para\", \"foo\\nbar\"],\n        [\"hr\"]\n    ] ],\n    \"blockquote with interesting content\");\n\n  t.equivalent(\n    bq.call( md, mk_block( 'p\\n> a', '\\n\\n', 1 ), [ mk_block( '> b', '\\n', 4) ]  ),\n    [ [ 'para', 'p' ],\n      [ 'blockquote',\n        [ 'para', 'a' ],\n        [ 'para', 'b' ]\n      ]\n    ],\n    \"blockquote with abutting paragraph\");\n\n});\n\ntest( \"referenceDefn\", function(t, md) {\n  var rd = md.dialect.block.referenceDefn;\n\n  [ '[id]: http://example.com/  \"Optional Title Here\"',\n    \"[id]: http://example.com/  'Optional Title Here'\",\n    '[id]: http://example.com/  (Optional Title Here)'\n  ].forEach( function(s) {\n    md.tree = [\"markdown\"];\n\n    t.equivalent(rd.call( md, mk_block(s) ), [], \"ref processed\");\n\n    t.equivalent(md.tree[ 1 ].references,\n                 { \"id\": { href: \"http://example.com/\", title: \"Optional Title Here\" } },\n                 \"reference extracted\");\n  });\n\n  // Check a para abbuting a ref works right\n  md.tree = [\"markdown\"];\n  var next = [];\n  t.equivalent(rd.call( md, mk_block(\"[id]: example.com\\npara\"), next ), [], \"ref processed\");\n  t.equivalent(md.tree[ 1 ].references, { \"id\": { href: \"example.com\" } }, \"reference extracted\");\n  t.equivalent(next, [ mk_block(\"para\") ], \"paragraph put back into blocks\");\n\n  // Check empty tags and non-tags are ignored\n  md.tree = [\"markdown\"];\n  t.type(rd.call( md, mk_block(\"[]: http://example.com\"), []), \"undefined\", \"no empty ref name\");\n  t.type(rd.call( md, mk_block(\"[b]label[/b]: description\"), []), \"undefined\", \"no brackets in ref name\");\n\n});\n\ntest( \"inline_br\", function(t, md) {\n  t.equivalent(\n    md.processInline(\"foo  \\n\\\\[bar\"),\n    [ \"foo\", [\"linebreak\"], \"[bar\" ], \"linebreak+escape\");\n});\n\ntest( \"inline_escape\", function(t, md) {\n  t.equivalent( md.processInline(\"\\\\bar\"), [ \"\\\\bar\" ], \"invalid escape\" );\n  t.equivalent( md.processInline(\"\\\\>\"), [ \">\" ], \"escapes >\" );\n  t.equivalent( md.processInline(\"\\\\*foo*\"), [ \"*foo*\" ], \"escaped em\" );\n});\n\ntest( \"inline_code\", function(t, md) {\n  t.equivalent( md.processInline(\"`bar`\"), [ [\"inlinecode\", \"bar\" ] ], \"code I\" );\n  t.equivalent( md.processInline(\"``b`ar``\"), [ [\"inlinecode\", \"b`ar\" ] ], \"code II\" );\n  t.equivalent( md.processInline(\"```bar``` baz\"), [ [\"inlinecode\", \"bar\" ], \" baz\" ], \"code III\" );\n});\n\ntest( \"inline_strong_em\", function(t, md) {\n  // Yay for horrible edge cases >_<\n  t.equivalent( md.processInline(\"foo *abc* bar\"), [ \"foo \", [\"em\", \"abc\" ], \" bar\" ], \"strong/em I\" );\n  t.equivalent( md.processInline(\"*abc `code`\"), [ \"*abc \", [\"inlinecode\", \"code\" ] ], \"strong/em II\" );\n  t.equivalent( md.processInline(\"*abc**def* after\"), [ [\"em\", \"abc**def\" ], \" after\" ], \"strong/em III\" );\n  t.equivalent( md.processInline(\"*em **strong * wtf**\"), [ [\"em\", \"em **strong \" ], \" wtf**\" ], \"strong/em IV\" );\n  t.equivalent( md.processInline(\"*foo _b*a*r baz\"), [ [ \"em\", \"foo _b\" ], \"a*r baz\" ], \"strong/em V\" );\n});\n\ntest( \"inline_img\", function(t, md) {\n\n  t.equivalent( md.processInline( \"![alt] (url)\" ),\n                                  [ [ \"img\", { href: \"url\", alt: \"alt\" } ] ],\n                                  \"inline img I\" );\n\n  t.equivalent( md.processInline( \"![alt](url 'title')\" ),\n                                  [ [ \"img\", { href: \"url\", alt: \"alt\", title: \"title\" } ] ],\n                                  \"inline img II\" );\n\n  t.equivalent( md.processInline( \"![alt] (url 'tit'le') after')\" ),\n                                  [ [ \"img\", { href: \"url\", alt: \"alt\", title: \"tit'le\" } ], \" after')\" ],\n                                  \"inline img III\" );\n\n  t.equivalent( md.processInline( \"![alt] (url \\\"title\\\")\" ),\n                                  [ [ \"img\", { href: \"url\", alt: \"alt\", title: \"title\" } ] ],\n                                  \"inline img IV\" );\n\n  t.equivalent( md.processInline( '![Alt text](/path/to/img\\\\\\\\.jpg \"Optional title\")' ),\n                                  [ [ \"img\", { href: \"/path/to/img\\\\.jpg\", alt: \"Alt text\", title: \"Optional title\" } ] ],\n                                  \"inline img IV\" );\n\n  t.equivalent( md.processInline( \"![alt][id]\" ),\n                                  [ [ \"img_ref\", { ref: \"id\", alt: \"alt\", original: \"![alt][id]\" } ] ],\n                                  \"ref img I\" );\n\n  t.equivalent( md.processInline( \"![alt] [id]\" ),\n                                  [ [ \"img_ref\", { ref: \"id\", alt: \"alt\", original: \"![alt] [id]\" } ] ],\n                                  \"ref img II\" );\n\n  t.equivalent( md.processInline( \"![contains parens](http://example.com/(parens).jpg)\" ),\n                                  [ [\"img\", { href: \"http://example.com/(parens).jpg\", alt: \"contains parens\"} ] ],\n                                  \"images with parentheses in the URL\" );\n});\n\ntest( \"inline_link\", function(t, md) {\n\n  t.equivalent( md.processInline( \"[text] (url)\" ),\n                                  [ [ \"link\", { href: \"url\" }, \"text\" ] ],\n                                  \"inline link I\" );\n\n  t.equivalent( md.processInline( \"[text](url 'title')\" ),\n                                  [ [ \"link\", { href: \"url\", title: \"title\" }, \"text\" ] ],\n                                  \"inline link II\" );\n\n  t.equivalent( md.processInline( \"[text](url  'title')\" ),\n                                  [ [ \"link\", { href: \"url\", title: \"title\" }, \"text\" ] ],\n                                  \"inline link II\" );\n\n  t.equivalent( md.processInline( \"[text](url\\t\\t'title')\" ),\n                                  [ [ \"link\", { href: \"url\", title: \"title\" }, \"text\" ] ],\n                                  \"inline link II\" );\n\n  t.equivalent( md.processInline( \"[text](url 'tit'le') after')\" ),\n                                  [ [ \"link\", { href: \"url\", title: \"tit'le\" }, \"text\" ], \" after')\" ],\n                                  \"inline link III\" );\n\n  t.equivalent( md.processInline( \"[text](url \\\"title\\\")\" ),\n                                  [ [ \"link\", { href: \"url\", title: \"title\" }, \"text\" ] ],\n                                  \"inline link IV\" );\n\n  t.equivalent( md.processInline( \"[text][id]\" ),\n                                  [ [ \"link_ref\", { ref: \"id\", original: \"[text][id]\" }, \"text\" ] ],\n                                  \"ref link I\" );\n\n  t.equivalent( md.processInline( \"[text] [id]\" ),\n                                  [ [ \"link_ref\", { ref: \"id\", original: \"[text] [id]\" }, \"text\" ] ],\n                                  \"ref link II\" );\n\n  /* jshint indent: false */\n  t.equivalent( md.processInline( \"[to put it another way][SECTION 1] or even [link this](#SECTION-1)\" ),\n                                  [\n                                    [ \"link_ref\",\n                                      { ref: \"section 1\", original: \"[to put it another way][SECTION 1]\" },\n                                      \"to put it another way\"\n                                    ],\n                                    \" or even \",\n                                    [ \"link\",\n                                      { href: \"#SECTION-1\" },\n                                      \"link this\"\n                                    ]\n                                  ],\n                                  \"ref link II\" );\n  /* jshint indent: 2 */\n\n  t.equivalent( md.processInline( \"[]: text\" ),\n                                  [ \"[]: text\" ],\n                                  \"no empty links\" );\n});\n\ntest( \"inline_autolink\", function(t, md) {\n\n  t.equivalent( md.processInline( \"<http://foo.com>\" ),\n                                  [ [ \"link\", { href: \"http://foo.com\" }, \"http://foo.com\" ] ],\n                                  \"autolink I\" );\n\n  t.equivalent( md.processInline( \"<mailto:foo@bar.com>\" ),\n                                  [ [ \"link\", { href: \"mailto:foo@bar.com\" }, \"foo@bar.com\" ] ],\n                                  \"autolink II\" );\n\n  t.equivalent( md.processInline( \"<foo@bar.com>\" ),\n                                  [ [ \"link\", { href: \"mailto:foo@bar.com\" }, \"foo@bar.com\" ] ],\n                                  \"autolink III\" );\n});\n\ntest( \"line_endings\", function(t, md) {\n  // try to generate this tree with all types of line ending\n  var tree = [ \"markdown\", [ \"para\", \"Foo\" ], [ \"para\", \"Bar\" ] ];\n\n  t.equivalent( md.toTree( \"Foo\\n\\nBar\", [ \"markdown\" ] ), tree, \"Unix line endings\" );\n  t.equivalent( md.toTree( \"Foo\\r\\n\\r\\nBar\", [ \"markdown\" ] ), tree, \"Windows line endings\" );\n  t.equivalent( md.toTree( \"Foo\\r\\rBar\", [ \"markdown\" ] ), tree, \"Mac line endings\" );\n  t.equivalent( md.toTree( \"Foo\\r\\n\\nBar\", [ \"markdown\" ] ), tree, \"Mixed line endings\" );\n});\n\ntest( \"header_in_paragraph\", function(t, md){\n  var tree = [ \"markdown\",\n               [ \"para\", \"Foo\" ],\n               [ \"header\", { level: 1 }, \"Title\" ],\n               [ \"para\", \"Bar\" ] ];\n  t.equivalent( md.toTree(\"Foo\\n#Title\\nBar\", [ \"markdown\" ]), tree, \"Header in praragraph\" );\n  t.equivalent( md.toTree(\"Foo\\n\\n#Title\\n\\nBar\", [ \"markdown\" ]), tree, \"Header in praragraph\" );\n});\n"
  },
  {
    "path": "test/render_tree.t.js",
    "content": "var markdown = require(\"../src/markdown\"),\n    tap = require(\"tap\");\n\nfunction clone_array( input ) {\n  // Helper method. Since the objects are plain round trip through JSON to get\n  // a clone\n  return JSON.parse( JSON.stringify( input ) );\n}\n\ntap.test(\"undefined attribute\", function(t) {\n  var tree = markdown.renderJsonML( ['html', ['p', {style: undefined }, 'hello'] ] );\n  t.equivalent( tree, '<p>hello</p>' );\n  t.end();\n});\n\ntap.test(\"escaped attribute\", function(t) {\n  var tree = markdown.renderJsonML( ['html', ['p', {style: \"color: blue\" }, 'hello'] ] );\n  t.equivalent( tree, '<p style=\"color: blue\">hello</p>' );\n  t.end();\n});\n\ntap.test(\"intermediate trees left alone\", function(t) {\n  var markdownTree = [ [ \"bulletlist\", [ \"listitem\", \"foo\\nbaz\" ], [ \"listitem\", \"bar\\nbaz\" ] ] ];\n  var cloneMarkdownTree = clone_array( markdownTree );\n  markdown.toHTMLTree( markdownTree );\n  t.equivalent( markdownTree, cloneMarkdownTree, 'toHTMLTree should not mutate its argument' );\n\n  var htmlTree = ['html', ['p', {style: \"color: blue\" }, 'hello'] ];\n  var cloneHtmlTree = clone_array( htmlTree );\n  markdown.renderJsonML( htmlTree );\n  t.equivalent( htmlTree, cloneHtmlTree, 'renderJsonML should not mutate its argument' );\n\n  t.end();\n});\n"
  }
]