{"_id":"robotskirt","_rev":"111-fe97ce3aabebaae22832b1ea61e69fb2","name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","dist-tags":{"latest":"2.7.1"},"versions":{"0.1.0":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, upskirt.","tags":["upskirt","markdown","mkd"],"author":{"name":"Ben Mills","email":"ben@bmdev.org"},"version":"0.1.0","lib":"./build/default","main":"./build/default/robotskirt","scripts":{"install":"node-waf configure build"},"repository":{"type":"git","url":"git://github.com/benmills/robotskirt.git"},"bugs":{"url":"http://github.com/benmills/robotskirt/issues"},"dependencies":{},"devDependencies":{},"_id":"robotskirt@0.1.0","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.1rcFINAL","_nodeVersion":"v0.4.1","_defaultsLoaded":true,"dist":{"shasum":"311de17be2d8146769b0f29d208588f781679a87","bin":{"0.4-ares1.7.4-ev4.4-openssl0.9.8l-v83.1.5-darwin-10.7.0":{"shasum":"e0c96113a5fc76c5e26fcfd7d3682c0cb69c9208","tarball":"http://registry.npmjs.org/robotskirt/-/robotskirt-0.1.0-0.4-ares1.7.4-ev4.4-openssl0.9.8l-v83.1.5-darwin-10.7.0.tgz"},"0.4-ares1.7.4-ev4.4-openssl0.9.8l-v83.1.8.10-darwin-10.7.0":{"shasum":"cb27ef7071b7b7fad7f9eacfe662a8b554d4ea0d","tarball":"http://registry.npmjs.org/robotskirt/-/robotskirt-0.1.0-0.4-ares1.7.4-ev4.4-openssl0.9.8l-v83.1.8.10-darwin-10.7.0.tgz"}},"tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-0.1.0.tgz","integrity":"sha512-dsMpGDu5NCYBUu0UC+pBn85oJOelsJrMf23t9QB6/AxHHKVe4Zl6JgVlSQSHsJi/kAxrzRXhAhrDnxahJy16Fw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6JBhQW2sDyIoXoWkN7oGoGI8kt7735XJJK3oEavcINgIgXNA1YgOIVIL46KmViaW8/zfPrtI/5xT23BvtBGA7KQs="}]},"directories":{}},"0.2.0":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, upskirt.","tags":["upskirt","robot","markdown","mkd"],"author":{"name":"Ben Mills","email":"ben@bmdev.org"},"version":"0.2.0","lib":"./build/default","main":"./build/default/robotskirt","scripts":{"install":"node-waf configure build"},"repository":{"type":"git","url":"git://github.com/benmills/robotskirt.git"},"bugs":{"url":"http://github.com/benmills/robotskirt/issues"},"dependencies":{},"devDependencies":{},"_id":"robotskirt@0.2.0","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.6","_nodeVersion":"v0.4.7","_defaultsLoaded":true,"dist":{"shasum":"2d07b8e9a806698b5058318740521e5c5bc348e1","bin":{"0.4-ares1.7.4-ev4.4-openssl0.9.8l-v83.1.8.10-darwin-10.7.0":{"shasum":"a7b5241cb51257d3541afb328563c5f9d5d8d3e0","tarball":"http://registry.npmjs.org/robotskirt/-/robotskirt-0.2.0-0.4-ares1.7.4-ev4.4-openssl0.9.8l-v83.1.8.10-darwin-10.7.0.tgz"}},"tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-0.2.0.tgz","integrity":"sha512-ENd/eyoa42xUTAZu3A8PpwHN2Zc7XIE//E9ZynTyzMtZMC4mHrPrmnUOTdAQPwVoqD2SDz5hE1P+HUcJ0UlVfg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZXItPm7KTDByglX1/nx0Aa+KJU5/NcwtzI9O5t8Li9AIhANaqZDdSmoPK5h3wdt/7reIHJti9Qp+vU6rxFaTFXBst"}]},"directories":{}},"0.2.1":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, upskirt.","tags":["upskirt","robot","markdown","mkd"],"author":{"name":"Ben Mills","email":"ben@bmdev.org"},"version":"0.2.1","lib":"./build/default","main":"./build/default/robotskirt","scripts":{"publish":"node-waf configure build","preinstall":"node-waf clean || true; node-waf configure build"},"repository":{"type":"git","url":"git://github.com/benmills/robotskirt.git"},"bugs":{"url":"http://github.com/benmills/robotskirt/issues"},"_id":"robotskirt@0.2.1","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.8","_nodeVersion":"v0.4.7","_defaultsLoaded":true,"dist":{"shasum":"418bb44a11634ec17e1bbde60b5a42ea3f311d52","bin":{"0.4-ares1.7.4-ev4.4-openssl0.9.8l-v83.1.8.10-darwin-10.7.0":{"shasum":"3792271e6403a45326bb787e24acb266754f8b8d","tarball":"http://registry.npmjs.org/robotskirt/-/robotskirt-0.2.1-0.4-ares1.7.4-ev4.4-openssl0.9.8l-v83.1.8.10-darwin-10.7.0.tgz"}},"tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-0.2.1.tgz","integrity":"sha512-P4QF/fiHarYW0c0mJ159yZnoc0b/Bz4Kh7UzOhOVqIHLr3OXbTlyY3RysOMXWSFv8QspB6gfSURyU4BSfUhroA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCq94bcLzDvq3wfSiZ1SuAyFVFu3ABZRwLP+CGPnEvxVwIhAOg0kWFGEptLrHnbqmFIm/YpAmmzhlN4W6MkIrCzRYnL"}]},"directories":{}},"0.2.2":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, upskirt.","tags":["upskirt","robot","markdown","mkd"],"author":{"name":"Ben Mills","email":"ben@bmdev.org"},"version":"0.2.2","lib":"./build/default","main":"./build/default/robotskirt","scripts":{"publish":"node-waf configure build","preinstall":"node-waf clean || true; node-waf configure build"},"repository":{"type":"git","url":"git://github.com/benmills/robotskirt.git"},"bugs":{"url":"http://github.com/benmills/robotskirt/issues"},"_id":"robotskirt@0.2.2","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.8","_nodeVersion":"v0.4.7","_defaultsLoaded":true,"dist":{"shasum":"71cad6ad142ebfcf11234a6c58c29b61017956eb","bin":{"0.4-ares1.7.4-ev4.4-openssl0.9.8l-v83.1.8.10-darwin-10.7.0":{"shasum":"94cb2e7632e3c0f2ad0572cdaf25101ff3a5cc6f","tarball":"http://registry.npmjs.org/robotskirt/-/robotskirt-0.2.2-0.4-ares1.7.4-ev4.4-openssl0.9.8l-v83.1.8.10-darwin-10.7.0.tgz"}},"tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-0.2.2.tgz","integrity":"sha512-xTMdrC90zHmzqM8dGkxXiq7U9jZEReZ8bCqaYoD66T1nGk9s/55Tg18WNknY7h+hDWujo7zZeZFiaFHCMGXPLA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID9HyeiTMDGW5V2/3ach7sWsyn1ylDDOrfyhjm/2woNTAiEArysogUbJ2oWqHE+VOAUU60F50xMSIsLNfNzNRLjnuuo="}]},"directories":{}},"0.2.3":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","tags":["sundown","upskirt","robot","markdown","mkd"],"author":{"name":"Ben Mills","email":"ben@bmdev.org"},"version":"0.2.3","lib":"./build/Release","main":"./build/Release/robotskirt","scripts":{"publish":"node-waf configure build","preinstall":"node-waf clean || true; node-waf configure build"},"repository":{"type":"git","url":"git://github.com/benmills/robotskirt.git"},"bugs":{"url":"http://github.com/benmills/robotskirt/issues"},"_npmUser":{"name":"benmills","email":"ben@Bmdev.org"},"_id":"robotskirt@0.2.3","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.1","_defaultsLoaded":true,"dist":{"shasum":"5dab6a201e996ca2080bc4a9c130d2a7b2c22bc8","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-0.2.3.tgz","integrity":"sha512-H8/dlJDzRcVO66vWmOcIvOfS8JFuDgslo7EQ7p55jfl8JN6x9sXNrQ5wTwI+Vljr5Km5UqS+I9pVr1h0yp+IWA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFqKgdjS1BiVU9s9QLwjNWOFHV84XRx5uVHSbNNSc/ubAiEA/0MOKgHsy08ySnw3kDxEAlxnae65Vnu9HXbWYF8oxvE="}]},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"}],"directories":{}},"0.2.4":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","tags":["sundown","upskirt","robot","markdown","mkd"],"author":{"name":"Ben Mills","email":"ben@bmdev.org"},"version":"0.2.4","lib":"./build/Release","main":"./build/Release/robotskirt","scripts":{"publish":"node-waf configure build","preinstall":"node-waf clean || true; node-waf configure build"},"repository":{"type":"git","url":"git://github.com/benmills/robotskirt.git"},"bugs":{"url":"http://github.com/benmills/robotskirt/issues"},"engines":{"node":"~0.6"},"_npmUser":{"name":"benmills","email":"ben@Bmdev.org"},"_id":"robotskirt@0.2.4","dependencies":{},"devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.2","_defaultsLoaded":true,"dist":{"shasum":"aa039452f20437f9bf8a4de6c26e0175ccfa3e12","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-0.2.4.tgz","integrity":"sha512-2vSzvy1hZrGYMYPwylA/E89tgI7h1BLOEMgmOIxY/og41VzvZTATWoqmS8AeCwDse4LdxCVp6nw7oKFxqCYRRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGeWKVD6Us4p/z/Am/YmnSH3BCqCw8EV833cbrIs5+aIAiBbxRdjzkh1RFZfzc8lEdQcG7xHLdjCAjBL0vOb1ppNpA=="}]},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"}],"directories":{}},"0.2.5":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","tags":["sundown","upskirt","robot","markdown","mkd"],"author":{"name":"Ben Mills","email":"ben@bmdev.org"},"version":"0.2.5","lib":"./build/Release","main":"./build/Release/robotskirt","scripts":{"publish":"node-waf configure build","preinstall":"node-waf clean || (exit 0); node-waf configure build"},"repository":{"type":"git","url":"git://github.com/benmills/robotskirt.git"},"bugs":{"url":"http://github.com/benmills/robotskirt/issues"},"engines":{"node":"~0.6"},"_npmUser":{"name":"benmills","email":"ben@bmdev.org"},"_id":"robotskirt@0.2.5","dependencies":{},"devDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-beta-7","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"93ce982eeafbc550162f118ed58a326322813b44","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-0.2.5.tgz","integrity":"sha512-osxO7ap6UfPYtUZeTTAXjQPnjr1A+FcdaUdLv0DrV4yeAienmHnk2Z2pcsWLB5iE1wN71HIFnrhv2p01WDAqwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOyYG5BCbo091aU5xOrdOW9VHDN6XiiDuBnLnF2449+gIgbxoSn+esIwkbHWg38YSeRFVhT5gmUrf/p3lJYvUsIkk="}]},"readme":"","maintainers":[{"name":"benmills","email":"ben@Bmdev.org"}],"directories":{}},"1.0.0":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","tags":["sundown","upskirt","robot","markdown","mkd"],"author":{"name":"Ben Mills","email":"ben@bmdev.org"},"version":"1.0.0","lib":"./build/Release","main":"./index.js","scripts":{"publish":"node-waf configure build","install":"node-waf clean ; node-waf configure build"},"repository":{"type":"git","url":"http://github.com/benmills/robotskirt.git"},"bugs":{"url":"http://github.com/benmills/robotskirt/issues"},"engines":{"node":"~0.6"},"readme":"# Robotskirt\n\nRobotskirt is a simple node binding for the [Sundown](https://github.com/vmg/sundown)\nmarkdown parser. It was inspired by the Redcarpet gem\n[released by github](https://github.com/blog/832-rolling-out-the-redcarpet).  \nEventually Robotskirt should mirror the feature set of redcarpet,\ncurrently it doesn't support custom renderers.\n\n## Performance\nBenchmarked against other popular node markdown libraries by running\nthe entire official markdown test suit 1000 times.\n\n```bash\n$ node index.js --bench\nrobotskirt (reuse renderer) completed in 1794ms.\nrobotskirt (new renderer) completed in 1848ms.\nmarked completed in 5517ms.\ndiscount completed in 5866ms.\nshowdown (reuse converter) completed in 13789ms.\nshowdown (new converter) completed in 17161ms.\n```\n\n## Install\n\nThe best way to install robotskirt is by using [npm](https://github.com/isaacs/npm).\nIf you want to install it globally, remember to include the -g flag.\n\n```bash\nnpm install robotskirt\n```\n\nIf you would like to compile it, you should use node's WAF wapper.\nRead more about how node C/C++ addons work in the [node docs](http://nodejs.org/docs/v0.4.7/api/addons.html).\n\n```bash\nnode-waf configure build\n````\n\n## Usage\n\nFirst of all, you need to construct a `new HtmlRenderer()`.  \nThen, call the `markdown` function passing as arguments your renderer,  \nthe markdown code to parse, and a callback to handle the result:\n\n```javascript\nvar rs = require('robotskirt')\n  , util = require('util');\n\nvar renderer = new rs.HtmlRenderer();\nrs.markdown(renderer, '# Hello World', function (html) {\n  util.puts(html);\n});\n// '<h1>Hello World</h1>\\n'\n```\n\nFor example, to read and parse a Markdown file:\n\n```javascript\nvar rs = require('robotskirt')\n  , fs = require('fs')\n  , util = require('util');\n\nvar renderer = new rs.HtmlRenderer();\nfs.readFile('README.mkd', function (err, data) {\n  rs.markdown(renderer, data, function (html) {\n    util.puts(html);\n  });\n});\n```\n\n### Markdown extension flags\n\nYou can pass some flags to Sundown by passing them as an (optional) last argument:\n\n```javascript\nvar rs = require('robotskirt')\n  , util = require('util');\n\nvar renderer = new rs.HtmlRenderer()\n  , flags = rs.flags.EXT_FENCED_CODE + rs.flags.EXT_AUTOLINK;\n\t\nrs.markdown(renderer, 'Wow, this becomes http://autolink.ed !', function (html) {\n  util.puts(html);\n}, flags);\n```\n\nOr, to enable all supported flags, use:\n\n```javascript\nvar flags = ~0;\n```\n\n### Being synchronous...\n\nIf you would like to parse your markdown synchronously you can use the `markdownSync` function:\n\n```javascript\nvar html = rs.markdownSync(new rs.HtmlRenderer(), \"*sync!*\").toString();\n```\n\n**Note:** keep in mind that the result is passed as a `Buffer` rather than a `String`,\nso you may convert it to text using `toString()`, as in this example.\n\n## Contributors\n\n* [Phinze](https://github.com/phinze)\n* [Tim Branyen](https://github.com/tbranyen)\n* [Ryan Graham](https://github.com/rmg)\n* [Xavier Mendez](https://github.com/jmendeth)\n* [Luke Hagan](https://github.com/lhagan)\n\n## License\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","_id":"robotskirt@1.0.0","dist":{"shasum":"d3d870132835be9b3cbe75dfb83f6d97dfe0e8c3","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-1.0.0.tgz","integrity":"sha512-OpYK1ffaQjWc38DfuBRN7PPQqbKpQs/JEZlwGnZABWsvI9XW5LqswQD/fWLhT24R2ARmiYVIC0kP/vuqlJuUOw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDc0jBpVSEqXNt0HXG8OiZyod/OowLIySa5uj6OdjOwQAIhAMvjFbL6BTK8yaLzID3767tWf2NhiQU9E1CoeVBZqWC/"}]},"_npmVersion":"1.1.59","_npmUser":{"name":"benmills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"}]},"2.3.2":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","keywords":["sundown","upskirt","robot","markdown","mkd"],"version":"2.3.2","homepage":"http://benmills.org/robotskirt","author":{"name":"Ben Mills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"}],"contributors":[{"name":"Ben Mills","email":"ben@bmdev.org"},{"name":"Xavier Mendez","email":"jmendeth@gmail.com"},{"name":"Farrin Reid","email":"blakmatrix@gmail.com"},{"name":"Jeremy Kahn","email":"jeremyckahn@gmail.com"},{"name":"lhagan","email":"luke@lukehagan.com"},{"name":"Ryan Graham","email":"r.m.graham@gmail.com"},{"name":"tbranyen","email":"tim@tabdeveloper.com"}],"main":"./build/Release/robotskirt","man":["man/robotskirt.1"],"engines":{"node":">= 0.6"},"scripts":{"publish":"node-waf configure build","install":"node-waf clean ; node-waf configure build"},"directories":{"bin":"bin","src":"src","man":"man","doc":"doc","example":"examples"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"bugs":{"url":"https://github.com/benmills/robotskirt/issues"},"bin":{"robotskirt":"bin/robotskirt"},"readme":"# Robotskirt\n\nRobotskirt is a [Node.JS](http://nodejs.org) binding for the [Sundown](https://github.com/vmg/sundown)\nMarkdown parser. It was inspired by the Redcarpet gem\n[released by github](https://github.com/blog/832-rolling-out-the-redcarpet).  \nEventually Robotskirt should mirror the feature set of redcarpet,\ncurrently it doesn't support custom renderers.\n\n## Performance\nBenchmarked against other popular node markdown libraries by running\nthe entire official markdown test suit 1000 times.\n\n```bash\n$ node index.js --bench\nrobotskirt (reuse renderer) completed in 1794ms.\nrobotskirt (new renderer) completed in 1848ms.\nmarked completed in 5517ms.\ndiscount completed in 5866ms.\nshowdown (reuse converter) completed in 13789ms.\nshowdown (new converter) completed in 17161ms.\n```\n\n## Install\n\nThe best way to install robotskirt is by using [npm](https://github.com/isaacs/npm).\nIf you want to install it globally, remember to include the -g flag.\n\n```bash\nnpm install robotskirt\n```\n\nIf you would like to compile it, you should use node's WAF wapper.\nRead more about how node C/C++ addons work in the [node docs](http://nodejs.org/docs/v0.4.7/api/addons.html).\n\n```bash\nnode-waf configure build\n````\n\n## Usage\n\nFirst of all, you need to construct a `new HtmlRenderer()`.  \nThen, call the `markdown` function passing as arguments your renderer,  \nthe markdown code to parse, and a callback to handle the result:\n\n```javascript\nvar rs = require('robotskirt')\n  , util = require('util');\n\nvar renderer = new rs.HtmlRenderer();\nrs.markdown(renderer, '# Hello World', function (html) {\n  util.puts(html);\n});\n// '<h1>Hello World</h1>\\n'\n```\n\nFor example, to read and parse a Markdown file:\n\n```javascript\nvar rs = require('robotskirt')\n  , fs = require('fs')\n  , util = require('util');\n\nvar renderer = new rs.HtmlRenderer();\nfs.readFile('README.mkd', function (err, data) {\n  rs.markdown(renderer, data, function (html) {\n    util.puts(html);\n  });\n});\n```\n\n### Markdown extension flags\n\nYou can pass some flags to Sundown by passing them as an (optional) last argument:\n\n```javascript\nvar rs = require('robotskirt')\n  , util = require('util');\n\nvar renderer = new rs.HtmlRenderer()\n  , flags = rs.flags.EXT_FENCED_CODE + rs.flags.EXT_AUTOLINK;\n\t\nrs.markdown(renderer, 'Wow, this becomes http://autolink.ed !', function (html) {\n  util.puts(html);\n}, flags);\n```\n\nOr, to enable all supported flags, use:\n\n```javascript\nvar flags = ~0;\n```\n\n### Being synchronous...\n\nIf you would like to parse your markdown synchronously you can use the `markdownSync` function:\n\n```javascript\nvar html = rs.markdownSync(new rs.HtmlRenderer(), \"*sync!*\").toString();\n```\n\n**Note:** keep in mind that the result is passed as a `Buffer` rather than a `String`,\nso you may convert it to text using `toString()`, as in this example.\n\n## Contributors\n\n* [Phinze](https://github.com/phinze)\n* [Tim Branyen](https://github.com/tbranyen)\n* [Ryan Graham](https://github.com/rmg)\n* [Xavier Mendez](https://github.com/jmendeth)\n* [Luke Hagan](https://github.com/lhagan)\n\n## License\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","_id":"robotskirt@2.3.2","dist":{"shasum":"1a60ca031296e934abda069f61131faf544b9a98","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-2.3.2.tgz","integrity":"sha512-JGO3QqBaYc1Y9H7NL3j4r8u7OwcZFBdI0UWebp0s+MDFFkJGTPBy5VZ0QKtk61Zi2urw/uvjCLw2TJjn61Twkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE4kTmMKtc6wPTDtpoy236q05x0z2asPPRNgo1PQu3oOAiEAj81gWjEYFahO9LJ4S/GIFvHagGBWRpcrnIqUWj99UbQ="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"benmills","email":"ben@bmdev.org"}},"2.4.0":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","keywords":["sundown","upskirt","robot","markdown","mkd","md"],"version":"2.4.0","homepage":"http://benmills.org/robotskirt","author":{"name":"Ben Mills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"},{"name":"jmendeth","email":"jmendeth@gmail.com"}],"contributors":[{"name":"Ben Mills","email":"ben@bmdev.org"},{"name":"Xavier Mendez","email":"jmendeth@gmail.com"},{"name":"Farrin Reid","email":"blakmatrix@gmail.com"},{"name":"Jeremy Kahn","email":"jeremyckahn@gmail.com"},{"name":"lhagan","email":"luke@lukehagan.com"},{"name":"Ryan Graham","email":"r.m.graham@gmail.com"},{"name":"tbranyen","email":"tim@tabdeveloper.com"}],"main":"./build/Release/robotskirt","man":["man/robotskirt.1"],"engines":{"node":">= 0.6"},"scripts":{"publish":"node-waf configure build","install":"node-waf clean ; node-waf configure build"},"directories":{"bin":"./bin","src":"./src","man":"./man","doc":"./doc","example":"./examples"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"bugs":{"url":"https://github.com/benmills/robotskirt/issues"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/mit-license.php"}],"bin":{"robotskirt":"bin/robotskirt"},"readme":"# Robotskirt\n\nRobotskirt is a [Node.JS](http://nodejs.org) binding for the [Sundown](https://github.com/vmg/sundown)\nMarkdown parser. It was inspired by the Redcarpet gem\n[released by github](https://github.com/blog/832-rolling-out-the-redcarpet).  \nEventually Robotskirt should mirror the feature set of redcarpet,\ncurrently it doesn't support custom renderers.\n\n## Performance\nBenchmarked against other popular node markdown libraries by running\nthe entire official markdown test suit 1000 times.\n\n```bash\n$ node index.js --bench\nrobotskirt (reuse renderer) completed in 1794ms.\nrobotskirt (new renderer) completed in 1848ms.\nmarked completed in 5517ms.\ndiscount completed in 5866ms.\nshowdown (reuse converter) completed in 13789ms.\nshowdown (new converter) completed in 17161ms.\n```\n\n## Install\n\nThe best way to install robotskirt is by using [npm](https://github.com/isaacs/npm).\nIf you want to install it globally, remember to include the -g flag.\n\n```bash\nnpm install robotskirt\n```\n\nIf you would like to compile it, you should use node's WAF wapper.\nRead more about how node C/C++ addons work in the [node docs](http://nodejs.org/docs/v0.4.7/api/addons.html).\n\n```bash\nnode-waf configure build\n````\n\n## Usage\n\nFirst of all, you need to construct a `new HtmlRenderer()`.  \nThen, call the `markdown` function passing as arguments your renderer,  \nthe markdown code to parse, and a callback to handle the result:\n\n```javascript\nvar rs = require('robotskirt')\n  , util = require('util');\n\nvar renderer = new rs.HtmlRenderer();\nrs.markdown(renderer, '# Hello World', function (html) {\n  util.puts(html);\n});\n// '<h1>Hello World</h1>\\n'\n```\n\nFor example, to read and parse a Markdown file:\n\n```javascript\nvar rs = require('robotskirt')\n  , fs = require('fs')\n  , util = require('util');\n\nvar renderer = new rs.HtmlRenderer();\nfs.readFile('README.mkd', function (err, data) {\n  rs.markdown(renderer, data, function (html) {\n    util.puts(html);\n  });\n});\n```\n\n### Markdown extension flags\n\nYou can pass some flags to Sundown by passing them as an (optional) last argument:\n\n```javascript\nvar rs = require('robotskirt')\n  , util = require('util');\n\nvar renderer = new rs.HtmlRenderer()\n  , flags = rs.flags.EXT_FENCED_CODE + rs.flags.EXT_AUTOLINK;\n\t\nrs.markdown(renderer, 'Wow, this becomes http://autolink.ed !', function (html) {\n  util.puts(html);\n}, flags);\n```\n\nOr, to enable all supported flags, use:\n\n```javascript\nvar flags = ~0;\n```\n\n### Being synchronous...\n\nIf you would like to parse your markdown synchronously you can use the `markdownSync` function:\n\n```javascript\nvar html = rs.markdownSync(new rs.HtmlRenderer(), \"*sync!*\").toString();\n```\n\n**Note:** keep in mind that the result is passed as a `Buffer` rather than a `String`,\nso you may convert it to text using `toString()`, as in this example.\n\n## Contributors\n\n* [Phinze](https://github.com/phinze)\n* [Tim Branyen](https://github.com/tbranyen)\n* [Ryan Graham](https://github.com/rmg)\n* [Xavier Mendez](https://github.com/jmendeth)\n* [Luke Hagan](https://github.com/lhagan)\n\n## License\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","_id":"robotskirt@2.4.0","dist":{"shasum":"b75b3dcce98a5880436f96e8c8ea348f13c822cc","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-2.4.0.tgz","integrity":"sha512-Dz1qLHAGKW3JYQw2bDEMuIgGTC1c7nBXSdef/kv2nqZ6vXeR3X32Zar01VLJ8UaE9DQ9V/hFhP/GQaYiIi7ATQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCU9QF5YqsT6HXT8NlHwCOLVV5PpPI4FkwiQNGaYGDB0AIgaCs/NGGH7KqsoFakPwbbwLn12Xdoa+g79a9+VNXHH24="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jmendeth","email":"jmendeth@gmail.com"}},"2.5.0":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","keywords":["sundown","upskirt","robot","markdown","mkd","md"],"version":"2.5.0","homepage":"http://benmills.org/robotskirt","author":{"name":"Ben Mills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"},{"name":"jmendeth","email":"jmendeth@gmail.com"}],"contributors":[{"name":"Ben Mills","email":"ben@bmdev.org"},{"name":"Xavier Mendez","email":"jmendeth@gmail.com"},{"name":"Farrin Reid","email":"blakmatrix@gmail.com"},{"name":"Jeremy Kahn","email":"jeremyckahn@gmail.com"},{"name":"lhagan","email":"luke@lukehagan.com"},{"name":"Ryan Graham","email":"r.m.graham@gmail.com"},{"name":"tbranyen","email":"tim@tabdeveloper.com"}],"main":"./build/Release/robotskirt","man":["man/robotskirt.1"],"engines":{"node":">= 0.6"},"scripts":{"install":"node-waf clean ; node-waf configure build"},"directories":{"bin":"./bin","src":"./src","man":"./man","doc":"./doc","example":"./examples"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"bugs":{"url":"https://github.com/benmills/robotskirt/issues"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/mit-license.php"}],"bin":{"robotskirt":"bin/robotskirt"},"readme":"# Robotskirt\n\nRobotskirt is a [Node.JS](http://nodejs.org) wrapper for the [Sundown](https://github.com/vmg/sundown)\nlibrary.\n\nIt was inspired by the Redcarpet gem [released by GitHub](https://github.com/blog/832-rolling-out-the-redcarpet) (the bindings to [Ruby](http://www.ruby-lang.org)).  \nWith the arrival of version 2 after much work, Robotskirt now mirrors every feature of Redcarpet, see below.  \nIt even has additional features!\n\nFull documentation can be found under the `doc` folder.  \nRobotskirt is distributed under the **MIT license**, see `LICENSE`.\n\n## Performance\n\nThanks to Sundown, Robotskirt is able to render markdown many times faster than other Markdown libraries.  \nWith v2, efforts have been put to make it even lighter.\n\nRobotskirt includes a small script to benchmark it against other popular markdown libraries.  \nIt runs the official Markdown test suite 1000 times with each item.\n\nResults on a Thinkpad T400 running Ubuntu 12.04 and\nNode 0.8.8 (currently the latest stable version):\n\n```bash\n$ node benchmark --bench\n[1] robotskirt (reuse all) completed in 1350ms.\n[2] robotskirt (convenience, reuse all) completed in 1353ms.\n[3] robotskirt (new renderer and parser) completed in 3816ms.\n[4] robotskirt (convenience, new parser) completed in 1534ms.\n[5] marked completed in 3842ms.\n[6] discount completed in 6025ms.\n6 targets benchmarked successfully.\n```\n\n## Install\n\nThe best way to install Robotskirt is by using [NPM](https://github.com/isaacs/npm).  \nIf you want to install it globally, remember to use `sudo` and `-g`.\n\n```bash\nnpm install robotskirt\n```\n\n**Important:** you *don't need* to have Sundown installed: Robotskirt comes bundled  \nwith a specific Sundown version. Just install Robotskirt as any other module.\n\nRobotskirt uses `node-waf` to compile\n(although we'll switch to [Node-GYP](https://github.com/TooTallNate/node-gyp) soon).\n\n## Getting started\n\nCurrently there are two ways of using Robotskirt:\n[normal](#the-normal-way) and [convenience](#the-convenience-way).  \nWe recommend you to learn both (hey, it's just two classes!) and see the [examples](#examples).\n\n## The Normal Way\n\nTo parse Markdown, we first need a **renderer**. It takes the parsed Markdown,  \nand produces the final output (can be HTML, XHTML,\n[ANSI](https://github.com/benmills/robotskirt/blob/master/examples/ansi-rend.js), plain text, ...).\n\nOn most cases you will use Sundown's (X)HTML renderer:\n\n```javascript\nvar rs = require('robotskirt');\nvar renderer = new rs.HtmlRenderer();\n```\n\nThen, you make a **parser** that uses your renderer:\n\n```javascript\nvar parser = new rs.Markdown(renderer);\n```\n\nThat's it! You can now start rendering your markdown:\n\n```javascript\nparser.render('Hey, *this* is `code` with ÚŦF châracters!')\n// '<p>Hey, <em>this</em> is <code>code</code> with ÚŦF châracters!</p>\\n'\n```\n\n**Always reuse yor parsers/renderers!** As you can see in the [benchmark](#performance),  \nmaking and using the same pair to render everything saves a _lot_ of time.  \nIf you can't reuse them (for example, because the flags are supplied by the user),  \nconsider using [the convenience way](#the-convenience-way).\n\nOK. Want to customize the output a bit? Keep reading.\n\n### Using markdown extensions\n\nJust using `new Markdown(renderer)` will parse **pure markdown**.\nHowever, you can have it  \nunderstand special _extensions_ such as fenced code blocks,\nstrikethrough, tables and more!\n\nFor example, the following will enable tables and autolinking:\n\n```javascript\nvar parser = new rs.Markdown(renderer, [rs.EXT_TABLES, rs.EXT_AUTOLINK]);\n```\n\nYou can see the full list of extensions in the docs.\n\n### HTML rendering flags\n\nJust as with extensions, you can pass certain flags to the HTML renderer.\n\nFor example, the following will use strict XHTML\nand skip all the `<image>` tags:\n\n```javascript\nvar renderer = new rs.HtmlRenderer([rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\n```\n\nYou can see the full list of HTML flags in the docs.\n\n### UTF handling\n\nSundown is fully UTF-8 aware, both when handling and rendering.  \nRobotskirt will take care of the encoding and decoding tasks for you.\n\n### Custom renderers!\n\nA renderer is just a set of functions.  \nEach time the parser finds a piece of Markdown it'll call the appropiate function in the renderer.  \nIf the function is not set (`undefined`), the Markdown will be skipped or copied untouched.\n\nSome use cases of custom renderers:\n\n#### Highlighting code blocks\n\n```javascript\nvar renderer = new rs.HtmlRenderer();\nrenderer.blockcode = function (code, language) {\n  if (language === undefined) {\n    //No language was provided, don't highlight\n    return '<pre>' + escapeHtml(code) + '</pre>';\n  }\n  return pygments.highlight(code, {\"lang\": language, \"indent\": 2});\n};\n```\n\nYou can see the full list of renderer functions in the docs.\n\n#### Renderer from scratch\n\nIf you don't feel comfortable extending the `HtmlRenderer` class,  \nyou can build a renderer from scratch by extending the base class: `Renderer`.  \nAll renderers inherit from this class. It contains all functions set to `undefined`.\n\n## The Convenience Way\n\nWhen you don't need custom renderers at all, you can just write:\n\n```javascript\nvar rs = require('robotskirt');\nvar parser = rs.Markdown.std();\nparser.render(...);\n```\n\nThat'll build a renderer/parser pair for you.  \nIt's **faster than building them manually**, because it happens natively.\n\nYou can pass **extension** and **HTML** flags to it, respectively:\n\n```javascript\nvar parser = rs.Markdown.std([rs.EXT_TABLES, rs.EXT_AUTOLINK],\n                             [rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\nparser.render('This becomes http://autolink.ed in XHTML!');\n// '<p>This becomes <a href=\"http://autolink.ed\">http://autolink.ed</a> in XHTML!</p>\\n'\n```\n\nKeep in mind that **no other types of renderer can be chosen**,  \nand **you don't have access to the HTML renderer used**.\n\n## Examples\n\nTODO\n","_id":"robotskirt@2.5.0","dist":{"shasum":"84c431fb58e596088eafc03b7fb8ee431b20d9af","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-2.5.0.tgz","integrity":"sha512-2QjkIHNc9+kzzCBCIeNle/Bwz1LpA/H/VPC+KueOFg3AEsR7fdQvGAUnvJ0HKX9wgee/q7BsTo99jO530bvlBA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFwr0AFA9HdmUzRzrHTu3WP8ABlGVwVlEdgFwJ5CtEQSAiEA71gwwp1N6kcvG0f/4OZ+hiqiyuBxuVOht0dhvbht9q0="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jmendeth","email":"jmendeth@gmail.com"}},"2.5.1":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","keywords":["sundown","upskirt","robot","markdown","mkd","md"],"version":"2.5.1","homepage":"http://benmills.org/robotskirt","author":{"name":"Ben Mills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"},{"name":"jmendeth","email":"jmendeth@gmail.com"}],"contributors":[{"name":"Ben Mills","email":"ben@bmdev.org"},{"name":"Xavier Mendez","email":"jmendeth@gmail.com"},{"name":"Farrin Reid","email":"blakmatrix@gmail.com"},{"name":"Jeremy Kahn","email":"jeremyckahn@gmail.com"},{"name":"lhagan","email":"luke@lukehagan.com"},{"name":"Ryan Graham","email":"r.m.graham@gmail.com"},{"name":"tbranyen","email":"tim@tabdeveloper.com"}],"main":"./build/Release/robotskirt","man":["man/robotskirt.1"],"engines":{"node":">= 0.6"},"scripts":{"install":"node-waf clean ; node-waf configure build"},"directories":{"bin":"./bin","src":"./src","man":"./man","doc":"./doc","example":"./examples"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"bugs":{"url":"https://github.com/benmills/robotskirt/issues"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/mit-license.php"}],"bin":{"robotskirt":"bin/robotskirt"},"readme":"# Robotskirt\n\nRobotskirt is a [Node.JS](http://nodejs.org) wrapper for the [Sundown](https://github.com/vmg/sundown)\nlibrary.\n\nIt was inspired by the Redcarpet gem [released by GitHub](https://github.com/blog/832-rolling-out-the-redcarpet) (the bindings to [Ruby](http://www.ruby-lang.org)).  \nWith the arrival of version 2 after much work, Robotskirt now mirrors every feature of Redcarpet, see below.  \nIt even has additional features!\n\nFull documentation can be found under the `doc` folder.  \nRobotskirt is distributed under the **MIT license**, see `LICENSE`.\n\n## Performance\n\nThanks to Sundown, Robotskirt is able to render markdown many times faster than other Markdown libraries.  \nWith v2, efforts have been put to make it even lighter.\n\nRobotskirt includes a small script to benchmark it against other popular markdown libraries.  \nIt runs the official Markdown test suite 1000 times with each item.\n\nResults on a Thinkpad T400 running Ubuntu 12.04 and\nNode 0.8.8 (currently the latest stable version):\n\n```bash\n$ node benchmark --bench\n[1] robotskirt (reuse all) completed in 1350ms.\n[2] robotskirt (convenience, reuse all) completed in 1353ms.\n[3] robotskirt (new renderer and parser) completed in 3816ms.\n[4] robotskirt (convenience, new parser) completed in 1534ms.\n[5] marked completed in 3842ms.\n[6] discount completed in 6025ms.\n6 targets benchmarked successfully.\n```\n\n## Install\n\nThe best way to install Robotskirt is by using [NPM](https://github.com/isaacs/npm).  \nIf you want to install it globally, remember to use `sudo` and `-g`.\n\n```bash\nnpm install robotskirt\n```\n\n**Important:** you *don't need* to have Sundown installed: Robotskirt comes bundled  \nwith a specific Sundown version. Just install Robotskirt as any other module.\n\nRobotskirt uses `node-waf` to compile\n(although we'll switch to [Node-GYP](https://github.com/TooTallNate/node-gyp) soon).\n\n## Getting started\n\nCurrently there are two ways of using Robotskirt:\n[normal](#the-normal-way) and [convenience](#the-convenience-way).  \nWe recommend you to learn both (hey, it's just two classes!) and see the [examples](#examples).\n\n## The Normal Way\n\nTo parse Markdown, we first need a **renderer**. It takes the parsed Markdown,  \nand produces the final output (can be HTML, XHTML,\n[ANSI](https://github.com/benmills/robotskirt/blob/master/examples/ansi-rend.js), plain text, ...).\n\nOn most cases you will use Sundown's (X)HTML renderer:\n\n```javascript\nvar rs = require('robotskirt');\nvar renderer = new rs.HtmlRenderer();\n```\n\nThen, you make a **parser** that uses your renderer:\n\n```javascript\nvar parser = new rs.Markdown(renderer);\n```\n\nThat's it! You can now start rendering your markdown:\n\n```javascript\nparser.render('Hey, *this* is `code` with ÚŦF châracters!')\n// '<p>Hey, <em>this</em> is <code>code</code> with ÚŦF châracters!</p>\\n'\n```\n\n**Always reuse yor parsers/renderers!** As you can see in the [benchmark](#performance),  \nmaking and using the same pair to render everything saves a _lot_ of time.  \nIf you can't reuse them (for example, because the flags are supplied by the user),  \nconsider using [the convenience way](#the-convenience-way).\n\nOK. Want to customize the output a bit? Keep reading.\n\n### Using markdown extensions\n\nJust using `new Markdown(renderer)` will parse **pure markdown**.\nHowever, you can have it  \nunderstand special _extensions_ such as fenced code blocks,\nstrikethrough, tables and more!\n\nFor example, the following will enable tables and autolinking:\n\n```javascript\nvar parser = new rs.Markdown(renderer, [rs.EXT_TABLES, rs.EXT_AUTOLINK]);\n```\n\nYou can see the full list of extensions in the docs.\n\n### HTML rendering flags\n\nJust as with extensions, you can pass certain flags to the HTML renderer.\n\nFor example, the following will use strict XHTML\nand skip all the `<image>` tags:\n\n```javascript\nvar renderer = new rs.HtmlRenderer([rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\n```\n\nYou can see the full list of HTML flags in the docs.\n\n### UTF handling\n\nSundown is fully UTF-8 aware, both when handling and rendering.  \nRobotskirt will take care of the encoding and decoding tasks for you.\n\n### Custom renderers!\n\nA renderer is just a set of functions.  \nEach time the parser finds a piece of Markdown it'll call the appropiate function in the renderer.  \nIf the function is not set (`undefined`), the Markdown will be skipped or copied untouched.\n\nSome use cases of custom renderers:\n\n#### Highlighting code blocks\n\n```javascript\nvar renderer = new rs.HtmlRenderer();\nrenderer.blockcode = function (code, language) {\n  if (language === undefined) {\n    //No language was provided, don't highlight\n    return '<pre>' + escapeHtml(code) + '</pre>';\n  }\n  return pygments.highlight(code, {\"lang\": language, \"indent\": 2});\n};\n```\n\nYou can see the full list of renderer functions in the docs.\n\n#### Renderer from scratch\n\nIf you don't feel comfortable extending the `HtmlRenderer` class,  \nyou can build a renderer from scratch by extending the base class: `Renderer`.  \nAll renderers inherit from this class. It contains all functions set to `undefined`.\n\n## The Convenience Way\n\nWhen you don't need custom renderers at all, you can just write:\n\n```javascript\nvar rs = require('robotskirt');\nvar parser = rs.Markdown.std();\nparser.render(...);\n```\n\nThat'll build a renderer/parser pair for you.  \nIt's **faster than building them manually**, because it happens natively.\n\nYou can pass **extension** and **HTML** flags to it, respectively:\n\n```javascript\nvar parser = rs.Markdown.std([rs.EXT_TABLES, rs.EXT_AUTOLINK],\n                             [rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\nparser.render('This becomes http://autolink.ed in XHTML!');\n// '<p>This becomes <a href=\"http://autolink.ed\">http://autolink.ed</a> in XHTML!</p>\\n'\n```\n\nKeep in mind that **no other types of renderer can be chosen**,  \nand **you don't have access to the HTML renderer used**.\n\n## Examples\n\nTODO\n","_id":"robotskirt@2.5.1","dist":{"shasum":"34ef13c808f271003b987f749adf979b29f3d958","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-2.5.1.tgz","integrity":"sha512-aogT0memhUKTsg3ts3ZPkI/oKJa6P5BOl5xzrgKoM0D0qI6S9eAr6STCxZi6u2BYJ0L19jCQ7aOKais3jU6+/g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDQhRaCMd8aqhUvetrCFECFXtnj7N16egS5vRfPCfVw2AiEAkR602i/2FR1CKwL+GIarDCX9wye9+KAaS7hBRVDS9vs="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jmendeth","email":"jmendeth@gmail.com"}},"2.5.2":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","keywords":["sundown","upskirt","robot","markdown","mkd","md"],"version":"2.5.2","homepage":"http://benmills.org/robotskirt","author":{"name":"Ben Mills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"},{"name":"jmendeth","email":"jmendeth@gmail.com"}],"contributors":[{"name":"Ben Mills","email":"ben@bmdev.org"},{"name":"Xavier Mendez","email":"jmendeth@gmail.com"},{"name":"Farrin Reid","email":"blakmatrix@gmail.com"},{"name":"Jeremy Kahn","email":"jeremyckahn@gmail.com"},{"name":"lhagan","email":"luke@lukehagan.com"},{"name":"Ryan Graham","email":"r.m.graham@gmail.com"},{"name":"tbranyen","email":"tim@tabdeveloper.com"}],"main":"./build/Release/robotskirt","man":["man/robotskirt.1"],"engines":{"node":">= 0.6"},"scripts":{"install":"node-waf clean ; node-waf configure build"},"directories":{"bin":"./bin","src":"./src","man":"./man","doc":"./doc","example":"./examples"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"bugs":{"url":"https://github.com/benmills/robotskirt/issues"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/mit-license.php"}],"bin":{"robotskirt":"bin/robotskirt"},"readme":"# Robotskirt\n\nRobotskirt is a [Node.JS](http://nodejs.org) wrapper for the [Sundown](https://github.com/vmg/sundown)\nlibrary.\n\nIt was inspired by the Redcarpet gem [released by GitHub](https://github.com/blog/832-rolling-out-the-redcarpet) (the bindings to [Ruby](http://www.ruby-lang.org)).  \nWith the arrival of version 2 after much work, Robotskirt now mirrors every feature of Redcarpet, see below.  \nIt even has additional features!\n\nFull documentation can be found under the `doc` folder.  \nRobotskirt is distributed under the **MIT license**, see `LICENSE`.\n\n## Performance\n\nThanks to Sundown, Robotskirt is able to render markdown many times faster than other Markdown libraries.  \nWith v2, efforts have been put to make it even lighter.\n\nSundown is well known for its **security**, **speed** and **flexibility**.  \nRobotskirt benefits from these features and tries to make the wrapping layer as thin as possible.\n\nRobotskirt includes a small script to benchmark it against other popular markdown libraries.  \nIt runs the official Markdown test suite 1000 times with each item.\n\nResults on a Thinkpad T400 running Ubuntu 12.04 and\nNode 0.8.8 (currently the latest stable version):\n\n```bash\n$ node benchmark --bench\n[1] robotskirt (reuse all) completed in 1354ms.\n[2] robotskirt (convenience, reuse all) completed in 1353ms.\n[3] robotskirt (new renderer and parser) completed in 3816ms.\n[4] robotskirt (convenience, new parser) completed in 1534ms.\n[5] marked completed in 3842ms.\n[6] discount completed in 6025ms.\n6 targets benchmarked successfully.\n```\n\n## Install\n\nThe best way to install Robotskirt is by using [NPM](https://github.com/isaacs/npm).  \nIf you want to install it globally, remember to use `sudo` and `-g`.\n\n```bash\nnpm install robotskirt\n```\n\n**Important:** you *don't need* to have Sundown installed: Robotskirt comes bundled  \nwith a specific Sundown version. Just install Robotskirt as any other module.\n\nRobotskirt uses `node-waf` to compile\n(although we'll switch to [Node-GYP](https://github.com/TooTallNate/node-gyp) soon).\n\n## Getting started\n\nCurrently there are two ways of using Robotskirt:\n[normal](#the-normal-way) and [convenience](#the-convenience-way).  \nWe recommend you to learn both (hey, it's just two classes!) and see the [examples](#examples).\n\n## The Normal Way\n\nTo parse Markdown, we first need a **renderer**. It takes the parsed Markdown,  \nand produces the final output (can be HTML, XHTML,\n[ANSI](https://github.com/benmills/robotskirt/blob/master/examples/ansi-rend.js), plain text, ...).\n\nOn most cases you will use Sundown's (X)HTML renderer:\n\n```javascript\nvar rs = require('robotskirt');\nvar renderer = new rs.HtmlRenderer();\n```\n\nThen, you make a **parser** that uses your renderer:\n\n```javascript\nvar parser = new rs.Markdown(renderer);\n```\n\nThat's it! You can now start rendering your markdown:\n\n```javascript\nparser.render('Hey, *this* is `code` with ÚŦF châracters!')\n// '<p>Hey, <em>this</em> is <code>code</code> with ÚŦF châracters!</p>\\n'\n```\n\n**Always reuse yor parsers/renderers!** As you can see in the [benchmark](#performance),  \nmaking and using the same pair to render everything saves a _lot_ of time.  \nIf you can't reuse them (for example, because the flags are supplied by the user),  \nconsider using [the convenience way](#the-convenience-way).\n\nOK. Want to customize the output a bit? Keep reading.\n\n### Using markdown extensions\n\nJust using `new Markdown(renderer)` will parse **pure markdown**.\nHowever, you can have it  \nunderstand special _extensions_ such as fenced code blocks,\nstrikethrough, tables and more!\n\nFor example, the following will enable tables and autolinking:\n\n```javascript\nvar parser = new rs.Markdown(renderer, [rs.EXT_TABLES, rs.EXT_AUTOLINK]);\n```\n\nYou can see the full list of extensions in the docs.\n\n### HTML rendering flags\n\nJust as with extensions, you can pass certain flags to the HTML renderer.\n\nFor example, the following will use strict XHTML\nand skip all the `<image>` tags:\n\n```javascript\nvar renderer = new rs.HtmlRenderer([rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\n```\n\nYou can see the full list of HTML flags in the docs.\n\n### UTF handling\n\nSundown is fully UTF-8 aware, both when handling and rendering.  \nRobotskirt will take care of the encoding and decoding tasks for you.\n\n### Custom renderers!\n\nA renderer is just a set of functions.  \nEach time the parser finds a piece of Markdown it'll call the appropiate function in the renderer.  \nIf the function is not set (`undefined`), the Markdown will be skipped or copied untouched.\n\nSome use cases of custom renderers:\n\n#### Highlighting code blocks\n\n```javascript\nvar renderer = new rs.HtmlRenderer();\nrenderer.blockcode = function (code, language) {\n  if (language === undefined) {\n    //No language was provided, don't highlight\n    return '<pre>' + escapeHtml(code) + '</pre>';\n  }\n  return pygments.highlight(code, {\"lang\": language, \"indent\": 2});\n};\n```\n\nYou can see the full list of renderer functions in the docs.\n\n#### Renderer from scratch\n\nIf you don't feel comfortable extending the `HtmlRenderer` class,  \nyou can build a renderer from scratch by extending the base class: `Renderer`.  \nAll renderers inherit from this class. It contains all functions set to `undefined`.\n\n## The Convenience Way\n\nWhen you don't need custom renderers at all, you can just write:\n\n```javascript\nvar rs = require('robotskirt');\nvar parser = rs.Markdown.std();\nparser.render(...);\n```\n\nThat'll build a renderer/parser pair for you.  \nIt's **faster than building them manually**, because it happens natively.\n\nYou can pass **extension** and **HTML** flags to it, respectively:\n\n```javascript\nvar parser = rs.Markdown.std([rs.EXT_TABLES, rs.EXT_AUTOLINK],\n                             [rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\nparser.render('This becomes http://autolink.ed in XHTML!');\n// '<p>This becomes <a href=\"http://autolink.ed\">http://autolink.ed</a> in XHTML!</p>\\n'\n```\n\nKeep in mind that **no other types of renderer can be chosen**,  \nand **you don't have access to the HTML renderer used**.\n\n## Examples\n\nTODO\n\n## Other utilities\n\nRobotskirt includes some useful utilities. Code speaks by itself:\n\n##### [Houdini](https://github.com/vmg/houdini), the escapist\n\n``` javascript\n> var rs = require('robotskirt')\n> rs.houdini.escapeHTML('<b>Some code to escape.</b> <a title=\"Click me!\">Me & you.</a>')\n'&lt;b&gt;Some code to escape.&lt;&#47;b&gt; &lt;a title=&quot;Click me!&quot;&gt;Me &amp; you.&lt;&#47;a&gt;'\n> rs.houdini.unescapeURL('Include+5%25+me%2Bin+a-query%3F+W%C3%ADth%C3%99TF%21')\n'Include 5% me in a-query? WíthÙTF!'\n```\n\n##### SmartyPants\n\n```javascript\n//Often used in conjunction with Markdown\n//COMING SOON!\n```\n\n\n##### Version stuff\n\n``` javascript\n> rs.versions.sundown\n<Version 1.16.0>\n> rs.versions.robotskirt.toString() //String formatted version\n'2.5.1'\n> console.log('Sundown is at %s. Robotskirt is at %s',\n... rs.versions.sundown, rs.versions.robotskirt);\nSundown is at 1.16.0. Robotskirt is at 2.5.1.\n> rs.versions.sundown.minor\n16\n> rs.versions.robotskirt instanceof rs.Version\ntrue\n```\n\n","_id":"robotskirt@2.5.2","dist":{"shasum":"4bb7a720adef03ef2f3e631615d25f39c6bbf2ab","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-2.5.2.tgz","integrity":"sha512-CTKfTQgTri+i/Mg3rmU9csQeNi+GrUQys3a6Pr9rA/Avij4w666vP5C57++pBuWZaNDgFiZOsu+1tcdsy/odLg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHQt/4Q/NcAx6nBz3CYtLEeIj70CoS2eSVMxeTVM8CnvAiAFXCqcqXfQgErI15Etfnf/p/5LZx9b7l7FDaXhb8siAQ=="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jmendeth","email":"jmendeth@gmail.com"}},"2.5.3":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","keywords":["sundown","upskirt","robot","markdown","mkd","md"],"version":"2.5.3","homepage":"http://benmills.org/robotskirt","author":{"name":"Ben Mills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"},{"name":"jmendeth","email":"jmendeth@gmail.com"}],"contributors":[{"name":"Ben Mills","email":"ben@bmdev.org"},{"name":"Xavier Mendez","email":"jmendeth@gmail.com"},{"name":"Farrin Reid","email":"blakmatrix@gmail.com"},{"name":"Jeremy Kahn","email":"jeremyckahn@gmail.com"},{"name":"lhagan","email":"luke@lukehagan.com"},{"name":"Ryan Graham","email":"r.m.graham@gmail.com"},{"name":"tbranyen","email":"tim@tabdeveloper.com"}],"main":"./build/Release/robotskirt","man":["man/robotskirt.1"],"engines":{"node":">= 0.6"},"scripts":{"install":"node-waf clean ; node-waf configure build"},"directories":{"bin":"./bin","src":"./src","man":"./man","doc":"./doc","example":"./examples"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"bugs":{"url":"https://github.com/benmills/robotskirt/issues"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/mit-license.php"}],"bin":{"robotskirt":"bin/robotskirt"},"readme":"# Robotskirt\n\nRobotskirt is a [Node.JS](http://nodejs.org) wrapper for the [Sundown](https://github.com/vmg/sundown)\nlibrary.\n\nIt was inspired by the Redcarpet gem [released by GitHub](https://github.com/blog/832-rolling-out-the-redcarpet) (the bindings to [Ruby](http://www.ruby-lang.org)).  \nWith the arrival of version 2 after much work, Robotskirt now mirrors every feature of Redcarpet, see below.  \nIt even has additional features!\n\nFull documentation can be found under the `doc` folder.  \nRobotskirt is distributed under the **MIT license**, see `LICENSE`.\n\n## Performance\n\nThanks to Sundown, Robotskirt is able to render markdown many times faster than other Markdown libraries.  \nWith v2, efforts have been put to make it even lighter.\n\nSundown is well known for its **security**, **speed** and **flexibility**.  \nRobotskirt benefits from these features and tries to make the wrapping layer as thin as possible.\n\nRobotskirt includes a small script to benchmark it against other popular markdown libraries.  \nIt runs the official Markdown test suite 1000 times with each item.\n\nResults on a Thinkpad T400 running Ubuntu 12.04 and\nNode 0.8.8 (currently the latest stable version):\n\n```bash\n$ node benchmark --bench\n[1] robotskirt (reuse all) completed in 1354ms.\n[2] robotskirt (convenience, reuse all) completed in 1353ms.\n[3] robotskirt (new renderer and parser) completed in 3816ms.\n[4] robotskirt (convenience, new parser) completed in 1534ms.\n[5] marked completed in 3842ms.\n[6] discount completed in 6025ms.\n6 targets benchmarked successfully.\n```\n\n## Install\n\nThe best way to install Robotskirt is by using [NPM](https://github.com/isaacs/npm).  \nIf you want to install it globally, remember to use `sudo` and `-g`.\n\n```bash\nnpm install robotskirt\n```\n\n**Important:** you *don't need* to have Sundown installed: Robotskirt comes bundled  \nwith a specific Sundown version. Just install Robotskirt as any other module.\n\nRobotskirt uses `node-waf` to compile\n(although we'll switch to [Node-GYP](https://github.com/TooTallNate/node-gyp) soon).\n\n## Getting started\n\nCurrently there are two ways of using Robotskirt:\n[normal](#the-normal-way) and [convenience](#the-convenience-way).  \nWe recommend you to learn both (hey, it's just two classes!) and see the [examples](#examples).\n\n## The Normal Way\n\nTo parse Markdown, we first need a **renderer**. It takes the parsed Markdown,  \nand produces the final output (can be HTML, XHTML,\n[ANSI](https://github.com/benmills/robotskirt/blob/master/examples/ansi-rend.js), plain text, ...).\n\nOn most cases you will use Sundown's (X)HTML renderer:\n\n```javascript\nvar rs = require('robotskirt');\nvar renderer = new rs.HtmlRenderer();\n```\n\nThen, you make a **parser** that uses your renderer:\n\n```javascript\nvar parser = new rs.Markdown(renderer);\n```\n\nThat's it! You can now start rendering your markdown:\n\n```javascript\nparser.render('Hey, *this* is `code` with ÚŦF châracters!')\n// '<p>Hey, <em>this</em> is <code>code</code> with ÚŦF châracters!</p>\\n'\n```\n\n**Always reuse yor parsers/renderers!** As you can see in the [benchmark](#performance),  \nmaking and using the same pair to render everything saves a _lot_ of time.  \nIf you can't reuse them (for example, because the flags are supplied by the user),  \nconsider using [the convenience way](#the-convenience-way).\n\nOK. Want to customize the output a bit? Keep reading.\n\n### Using markdown extensions\n\nJust using `new Markdown(renderer)` will parse **pure markdown**.\nHowever, you can have it  \nunderstand special _extensions_ such as fenced code blocks,\nstrikethrough, tables and more!\n\nFor example, the following will enable tables and autolinking:\n\n```javascript\nvar parser = new rs.Markdown(renderer, [rs.EXT_TABLES, rs.EXT_AUTOLINK]);\n```\n\nYou can see the full list of extensions in the docs.\n\n### HTML rendering flags\n\nJust as with extensions, you can pass certain flags to the HTML renderer.\n\nFor example, the following will use strict XHTML\nand skip all the `<image>` tags:\n\n```javascript\nvar renderer = new rs.HtmlRenderer([rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\n```\n\nYou can see the full list of HTML flags in the docs.\n\n### UTF handling\n\nSundown is fully UTF-8 aware, both when handling and rendering.  \nRobotskirt will take care of the encoding and decoding tasks for you.\n\n### Custom renderers!\n\nA renderer is just a set of functions.  \nEach time the parser finds a piece of Markdown it'll call the appropiate function in the renderer.  \nIf the function is not set (`undefined`), the Markdown will be skipped or copied untouched.\n\nSome use cases of custom renderers:\n\n#### Highlighting code blocks\n\n```javascript\nvar renderer = new rs.HtmlRenderer();\nrenderer.blockcode = function (code, language) {\n  if (language === undefined) {\n    //No language was provided, don't highlight\n    return '<pre>' + escapeHtml(code) + '</pre>';\n  }\n  return pygments.highlight(code, {\"lang\": language, \"indent\": 2});\n};\n```\n\nYou can see the full list of renderer functions in the docs.\n\n#### Renderer from scratch\n\nIf you don't feel comfortable extending the `HtmlRenderer` class,  \nyou can build a renderer from scratch by extending the base class: `Renderer`.  \nAll renderers inherit from this class. It contains all functions set to `undefined`.\n\n## The Convenience Way\n\nWhen you don't need custom renderers at all, you can just write:\n\n```javascript\nvar rs = require('robotskirt');\nvar parser = rs.Markdown.std();\nparser.render(...);\n```\n\nThat'll build a renderer/parser pair for you.  \nIt's **faster than building them manually**, because it happens natively.\n\nYou can pass **extension** and **HTML** flags to it, respectively:\n\n```javascript\nvar parser = rs.Markdown.std([rs.EXT_TABLES, rs.EXT_AUTOLINK],\n                             [rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\nparser.render('This becomes http://autolink.ed in XHTML!');\n// '<p>This becomes <a href=\"http://autolink.ed\">http://autolink.ed</a> in XHTML!</p>\\n'\n```\n\nKeep in mind that **no other types of renderer can be chosen**,  \nand **you don't have access to the HTML renderer used**.\n\n## Examples\n\nTODO\n\n## Other utilities\n\nRobotskirt includes some useful utilities. Code speaks by itself:\n\n##### [Houdini](https://github.com/vmg/houdini), the escapist\n\n``` javascript\n> var rs = require('robotskirt')\n> rs.houdini.escapeHTML('<b>Some code to escape.</b> <a title=\"Click me!\">Me & you.</a>')\n'&lt;b&gt;Some code to escape.&lt;&#47;b&gt; &lt;a title=&quot;Click me!&quot;&gt;Me &amp; you.&lt;&#47;a&gt;'\n> rs.houdini.unescapeURL('Include+5%25+me%2Bin+a-query%3F+W%C3%ADth%C3%99TF%21')\n'Include 5% me in a-query? WíthÙTF!'\n```\n\n##### SmartyPants\n\n```javascript\n//Often used in conjunction with Markdown\n//COMING SOON!\n```\n\n\n##### Version stuff\n\n``` javascript\n> rs.versions.sundown\n<Version 1.16.0>\n> rs.versions.robotskirt.toString() //String formatted version\n'2.5.1'\n> console.log('Sundown is at %s. Robotskirt is at %s',\n... rs.versions.sundown, rs.versions.robotskirt);\nSundown is at 1.16.0. Robotskirt is at 2.5.1.\n> rs.versions.sundown.minor\n16\n> rs.versions.robotskirt instanceof rs.Version\ntrue\n```\n\n","_id":"robotskirt@2.5.3","dist":{"shasum":"2b6a63453a80d8dfd67967500fe720f7489fc229","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-2.5.3.tgz","integrity":"sha512-T2pvUq58jjYvPx323r4NQHeWYncu/dF9lILuZ8EmSrCq5i2PwFHuFNOqI3DTp97CrZDPO/3sYqMQx30j62U3tw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAlKw6ri0Hbr6ypFCF3oU+xzVxm6WXZhHjYwcMdYu4OnAiEAg3SkM1cMkhtEWrToVnHCuMG7JPHI5KrefyQxHAXG+/s="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jmendeth","email":"jmendeth@gmail.com"}},"2.5.4":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","keywords":["sundown","upskirt","robot","markdown","mkd","md"],"version":"2.5.4","homepage":"http://benmills.org/robotskirt","author":{"name":"Ben Mills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"},{"name":"jmendeth","email":"jmendeth@gmail.com"}],"contributors":[{"name":"Ben Mills","email":"ben@bmdev.org"},{"name":"Xavier Mendez","email":"jmendeth@gmail.com"},{"name":"Farrin Reid","email":"blakmatrix@gmail.com"},{"name":"Jeremy Kahn","email":"jeremyckahn@gmail.com"},{"name":"lhagan","email":"luke@lukehagan.com"},{"name":"Ryan Graham","email":"r.m.graham@gmail.com"},{"name":"tbranyen","email":"tim@tabdeveloper.com"}],"main":"./build/Release/robotskirt","man":["man/robotskirt.1"],"engines":{"node":">= 0.6"},"scripts":{"install":"node-waf clean ; node-waf configure build"},"directories":{"bin":"./bin","src":"./src","man":"./man","doc":"./doc","example":"./examples"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"bugs":{"url":"https://github.com/benmills/robotskirt/issues"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/mit-license.php"}],"bin":{"robotskirt":"bin/robotskirt"},"readme":"# Robotskirt\n\nRobotskirt is a [Node.JS](http://nodejs.org) wrapper for the [Sundown](https://github.com/vmg/sundown)\nlibrary.\n\nIt was inspired by the Redcarpet gem [released by GitHub](https://github.com/blog/832-rolling-out-the-redcarpet) (the bindings to [Ruby](http://www.ruby-lang.org)).  \nWith the arrival of version 2 after much work, Robotskirt now mirrors every feature of Redcarpet, see below.  \nIt even has additional features!\n\nFull documentation can be found under the `doc` folder.  \nRobotskirt is distributed under the **MIT license**, see `LICENSE`.\n\n## Performance\n\nThanks to Sundown, Robotskirt is able to render markdown many times faster than other Markdown libraries.  \nWith v2, efforts have been put to make it even lighter.\n\nSundown is well known for its **security**, **speed** and **flexibility**.  \nRobotskirt benefits from these features and tries to make the wrapping layer as thin as possible.\n\nRobotskirt includes a small script to benchmark it against other popular markdown libraries.  \nIt runs the official Markdown test suite 1000 times with each item.\n\nResults on a Thinkpad T400 running Ubuntu 12.04 and\nNode 0.8.8 (currently the latest stable version):\n\n```bash\n$ node benchmark --bench\n[1] robotskirt (reuse all) completed in 1354ms.\n[2] robotskirt (convenience, reuse all) completed in 1353ms.\n[3] robotskirt (new renderer and parser) completed in 3816ms.\n[4] robotskirt (convenience, new parser) completed in 1534ms.\n[5] marked completed in 3842ms.\n[6] discount completed in 6025ms.\n6 targets benchmarked successfully.\n```\n\n## Install\n\nThe best way to install Robotskirt is by using [NPM](https://github.com/isaacs/npm).  \nIf you want to install it globally, remember to use `sudo` and `-g`.\n\n```bash\nnpm install robotskirt\n```\n\n**Important:** you *don't need* to have Sundown installed: Robotskirt comes bundled  \nwith a specific Sundown version. Just install Robotskirt as any other module.\n\nRobotskirt uses `node-waf` to compile\n(although we'll switch to [Node-GYP](https://github.com/TooTallNate/node-gyp) soon).\n\n## Getting started\n\nCurrently there are two ways of using Robotskirt:\n[normal](#the-normal-way) and [convenience](#the-convenience-way).  \nWe recommend you to learn both (hey, it's just two classes!) and see the [examples](#examples).\n\n## The Normal Way\n\nTo parse Markdown, we first need a **renderer**. It takes the parsed Markdown,  \nand produces the final output (can be HTML, XHTML,\n[ANSI](https://github.com/benmills/robotskirt/blob/master/examples/ansi-rend.js), plain text, ...).\n\nOn most cases you will use Sundown's (X)HTML renderer:\n\n```javascript\nvar rs = require('robotskirt');\nvar renderer = new rs.HtmlRenderer();\n```\n\nThen, you make a **parser** that uses your renderer:\n\n```javascript\nvar parser = new rs.Markdown(renderer);\n```\n\nThat's it! You can now start rendering your markdown:\n\n```javascript\nparser.render('Hey, *this* is `code` with ÚŦF châracters!')\n// '<p>Hey, <em>this</em> is <code>code</code> with ÚŦF châracters!</p>\\n'\n```\n\n**Always reuse yor parsers/renderers!** As you can see in the [benchmark](#performance),  \nmaking and using the same pair to render everything saves a _lot_ of time.  \nIf you can't reuse them (for example, because the flags are supplied by the user),  \nconsider using [the convenience way](#the-convenience-way).\n\nOK. Want to customize the output a bit? Keep reading.\n\n### Using markdown extensions\n\nJust using `new Markdown(renderer)` will parse **pure markdown**.\nHowever, you can have it  \nunderstand special _extensions_ such as fenced code blocks,\nstrikethrough, tables and more!\n\nFor example, the following will enable tables and autolinking:\n\n```javascript\nvar parser = new rs.Markdown(renderer, [rs.EXT_TABLES, rs.EXT_AUTOLINK]);\n```\n\nYou can see the full list of extensions in the docs.\n\n### HTML rendering flags\n\nJust as with extensions, you can pass certain flags to the HTML renderer.\n\nFor example, the following will use strict XHTML\nand skip all the `<image>` tags:\n\n```javascript\nvar renderer = new rs.HtmlRenderer([rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\n```\n\nYou can see the full list of HTML flags in the docs.\n\n### UTF handling\n\nSundown is fully UTF-8 aware, both when handling and rendering.  \nRobotskirt will take care of the encoding and decoding tasks for you.\n\n### Custom renderers!\n\nA renderer is just a set of functions.  \nEach time the parser finds a piece of Markdown it'll call the appropiate function in the renderer.  \nIf the function is not set (`undefined`), the Markdown will be skipped or copied untouched.\n\nSome use cases of custom renderers:\n\n#### Highlighting code blocks\n\n```javascript\nvar renderer = new rs.HtmlRenderer();\nrenderer.blockcode = function (code, language) {\n  if (language === undefined) {\n    //No language was provided, don't highlight\n    return '<pre>' + escapeHtml(code) + '</pre>';\n  }\n  return pygments.highlight(code, {\"lang\": language, \"indent\": 2});\n};\n```\n\nYou can see the full list of renderer functions in the docs.\n\n#### Renderer from scratch\n\nIf you don't feel comfortable extending the `HtmlRenderer` class,  \nyou can build a renderer from scratch by extending the base class: `Renderer`.  \nAll renderers inherit from this class. It contains all functions set to `undefined`.\n\n## The Convenience Way\n\nWhen you don't need custom renderers at all, you can just write:\n\n```javascript\nvar rs = require('robotskirt');\nvar parser = rs.Markdown.std();\nparser.render(...);\n```\n\nThat'll build a renderer/parser pair for you.  \nIt's **faster than building them manually**, because it happens natively.\n\nYou can pass **extension** and **HTML** flags to it, respectively:\n\n```javascript\nvar parser = rs.Markdown.std([rs.EXT_TABLES, rs.EXT_AUTOLINK],\n                             [rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\nparser.render('This becomes http://autolink.ed in XHTML!');\n// '<p>This becomes <a href=\"http://autolink.ed\">http://autolink.ed</a> in XHTML!</p>\\n'\n```\n\nKeep in mind that **no other types of renderer can be chosen**,  \nand **you don't have access to the HTML renderer used**.\n\n## Examples\n\nTODO\n\n## Other utilities\n\nRobotskirt includes some useful utilities. Code speaks by itself:\n\n##### [Houdini](https://github.com/vmg/houdini), the escapist\n\n``` javascript\n> var rs = require('robotskirt')\n> rs.houdini.escapeHTML('<b>Some code to escape.</b> <a title=\"Click me!\">Me & you.</a>')\n'&lt;b&gt;Some code to escape.&lt;&#47;b&gt; &lt;a title=&quot;Click me!&quot;&gt;Me &amp; you.&lt;&#47;a&gt;'\n> rs.houdini.unescapeURL('Include+5%25+me%2Bin+a-query%3F+W%C3%ADth%C3%99TF%21')\n'Include 5% me in a-query? WíthÙTF!'\n```\n\n##### SmartyPants\n\n```javascript\n//Often used in conjunction with Markdown\n//COMING SOON!\n```\n\n\n##### Version stuff\n\n``` javascript\n> rs.versions.sundown\n<Version 1.16.0>\n> rs.versions.robotskirt.toString() //String formatted version\n'2.5.1'\n> console.log('Sundown is at %s. Robotskirt is at %s',\n... rs.versions.sundown, rs.versions.robotskirt);\nSundown is at 1.16.0. Robotskirt is at 2.5.1.\n> rs.versions.sundown.minor\n16\n> rs.versions.robotskirt instanceof rs.Version\ntrue\n```\n\n","_id":"robotskirt@2.5.4","dist":{"shasum":"1bc374fc349f9a4324efd1b167a320eb1e950d63","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-2.5.4.tgz","integrity":"sha512-+2pcr/bTq0goAEAAau3uKkD/LlKZntiXAGI3yxYIEDqVqCLC2EXCx8O0UeAIfcKRlf/FyckWFPhRNweto5dVhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvt15FXlXjBV0NAcHLNnqm4l5rKhcH2CtB7Ko/6v/GnwIgGgYsH0CNTrGPqaTqkCm0IRWYhWmErrEIUZgQx3MKfWY="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jmendeth","email":"jmendeth@gmail.com"}},"2.6.0":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","keywords":["sundown","upskirt","robot","markdown","mkd","md"],"version":"2.6.0","homepage":"http://benmills.org/robotskirt","author":{"name":"Ben Mills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"},{"name":"jmendeth","email":"jmendeth@gmail.com"}],"contributors":[{"name":"Ben Mills","email":"ben@bmdev.org"},{"name":"Xavier Mendez","email":"jmendeth@gmail.com"},{"name":"Farrin Reid","email":"blakmatrix@gmail.com"},{"name":"Jeremy Kahn","email":"jeremyckahn@gmail.com"},{"name":"lhagan","email":"luke@lukehagan.com"},{"name":"Ryan Graham","email":"r.m.graham@gmail.com"},{"name":"tbranyen","email":"tim@tabdeveloper.com"}],"main":"./build/Release/robotskirt","man":["man/robotskirt.1"],"engines":{"node":">= 0.6"},"scripts":{"install":"node-waf clean ; node-waf configure build"},"directories":{"bin":"./bin","src":"./src","man":"./man","doc":"./doc","example":"./examples"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"bugs":{"url":"https://github.com/benmills/robotskirt/issues"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/mit-license.php"}],"bin":{"robotskirt":"bin/robotskirt"},"readme":"# Robotskirt\n\nRobotskirt is a [Node.JS](http://nodejs.org) wrapper for the [Sundown](https://github.com/vmg/sundown)\nlibrary.\n\nIt was inspired by the Redcarpet gem [released by GitHub](https://github.com/blog/832-rolling-out-the-redcarpet) (the bindings to [Ruby](http://www.ruby-lang.org)).  \nWith the arrival of version 2 after much work, Robotskirt now mirrors every feature of Redcarpet, see below.  \nIt even has additional features!\n\nFull documentation can be found under the `doc` folder.  \nRobotskirt is distributed under the **MIT license**, see `LICENSE`.\n\n## Performance\n\nThanks to Sundown, Robotskirt is able to render markdown many times faster than other Markdown libraries.  \nWith v2, efforts have been put to make it even lighter.\n\nSundown is well known for its **security**, **speed** and **flexibility**.  \nRobotskirt benefits from these features and tries to make the wrapping layer as thin as possible.\n\nRobotskirt includes a small script to benchmark it against other popular markdown libraries.  \nIt runs the official Markdown test suite 1000 times with each item.\n\nResults on a Thinkpad T400 running Ubuntu 12.04 and\nNode 0.8.8 (currently the latest stable version):\n\n```bash\n$ node benchmark --bench\n[1] robotskirt (reuse all) completed in 1354ms.\n[2] robotskirt (convenience, reuse all) completed in 1353ms.\n[3] robotskirt (new renderer and parser) completed in 3816ms.\n[4] robotskirt (convenience, new parser) completed in 1534ms.\n[5] marked completed in 3842ms.\n[6] discount completed in 6025ms.\n6 targets benchmarked successfully.\n```\n\n## Install\n\nThe best way to install Robotskirt is by using [NPM](https://github.com/isaacs/npm).  \nIf you want to install it globally, remember to use `sudo` and `-g`.\n\n```bash\nnpm install robotskirt\n```\n\n**Important:** you *don't need* to have Sundown installed: Robotskirt comes bundled  \nwith a specific Sundown version. Just install Robotskirt as any other module.\n\nRobotskirt uses `node-waf` to compile\n(although we'll switch to [Node-GYP](https://github.com/TooTallNate/node-gyp) soon).\n\n## Getting started\n\nCurrently there are two ways of using Robotskirt:\n[normal](#the-normal-way) and [convenience](#the-convenience-way).  \nWe recommend you to learn both (hey, it's just two classes!) and see the [examples](#examples).\n\n## The Normal Way\n\nTo parse Markdown, we first need a **renderer**. It takes the parsed Markdown,  \nand produces the final output (can be HTML, XHTML,\n[ANSI](https://github.com/benmills/robotskirt/blob/master/examples/ansi-rend.js), plain text, ...).\n\nOn most cases you will use Sundown's (X)HTML renderer:\n\n```javascript\nvar rs = require('robotskirt');\nvar renderer = new rs.HtmlRenderer();\n```\n\nThen, you make a **parser** that uses your renderer:\n\n```javascript\nvar parser = new rs.Markdown(renderer);\n```\n\nThat's it! You can now start rendering your markdown:\n\n```javascript\nparser.render('Hey, *this* is `code` with ÚŦF châracters!')\n// '<p>Hey, <em>this</em> is <code>code</code> with ÚŦF châracters!</p>\\n'\n```\n\n**Always reuse yor parsers/renderers!** As you can see in the [benchmark](#performance),  \nmaking and using the same pair to render everything saves a _lot_ of time.  \nIf you can't reuse them (for example, because the flags are supplied by the user),  \nconsider using [the convenience way](#the-convenience-way).\n\nOK. Want to customize the output a bit? Keep reading.\n\n### Using markdown extensions\n\nJust using `new Markdown(renderer)` will parse **pure markdown**.\nHowever, you can have it  \nunderstand special _extensions_ such as fenced code blocks,\nstrikethrough, tables and more!\n\nFor example, the following will enable tables and autolinking:\n\n```javascript\nvar parser = new rs.Markdown(renderer, [rs.EXT_TABLES, rs.EXT_AUTOLINK]);\n```\n\nYou can see the full list of extensions in the docs.\n\n### HTML rendering flags\n\nJust as with extensions, you can pass certain flags to the HTML renderer.\n\nFor example, the following will use strict XHTML\nand skip all the `<image>` tags:\n\n```javascript\nvar renderer = new rs.HtmlRenderer([rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\n```\n\nYou can see the full list of HTML flags in the docs.\n\n### UTF handling\n\nSundown is fully UTF-8 aware, both when handling and rendering.  \nRobotskirt will take care of the encoding and decoding tasks for you.\n\n### Custom renderers!\n\nA renderer is just a set of functions.  \nEach time the parser finds a piece of Markdown it'll call the appropiate function in the renderer.  \nIf the function is not set (`undefined`), the Markdown will be skipped or copied untouched.\n\nSome use cases of custom renderers:\n\n#### Highlighting code blocks\n\n```javascript\nvar renderer = new rs.HtmlRenderer();\nrenderer.blockcode = function (code, language) {\n  if (language === undefined) {\n    //No language was provided, don't highlight\n    return '<pre>' + escapeHtml(code) + '</pre>';\n  }\n  return pygments.highlight(code, {\"lang\": language, \"indent\": 2});\n};\n```\n\nYou can see the full list of renderer functions in the docs.\n\n#### Renderer from scratch\n\nIf you don't feel comfortable extending the `HtmlRenderer` class,  \nyou can build a renderer from scratch by extending the base class: `Renderer`.  \nAll renderers inherit from this class. It contains all functions set to `undefined`.\n\n## The Convenience Way\n\nWhen you don't need custom renderers at all, you can just write:\n\n```javascript\nvar rs = require('robotskirt');\nvar parser = rs.Markdown.std();\nparser.render(...);\n```\n\nThat'll build a renderer/parser pair for you.  \nIt's **faster than building them manually**, because it happens natively.\n\nYou can pass **extension** and **HTML** flags to it, respectively:\n\n```javascript\nvar parser = rs.Markdown.std([rs.EXT_TABLES, rs.EXT_AUTOLINK],\n                             [rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\nparser.render('This becomes http://autolink.ed in XHTML!');\n// '<p>This becomes <a href=\"http://autolink.ed\">http://autolink.ed</a> in XHTML!</p>\\n'\n```\n\nKeep in mind that **no other types of renderer can be chosen**,  \nand **you don't have access to the HTML renderer used**.\n\n## Examples\n\nTODO\n\n## Other utilities\n\nRobotskirt includes some useful utilities. Code speaks by itself:\n\n##### [Houdini](https://github.com/vmg/houdini), the escapist\n\n``` javascript\n> var rs = require('robotskirt')\n> rs.houdini.escapeHTML('<b>Some code to escape.</b> <a title=\"Click me!\">Me & you.</a>')\n'&lt;b&gt;Some code to escape.&lt;&#47;b&gt; &lt;a title=&quot;Click me!&quot;&gt;Me &amp; you.&lt;&#47;a&gt;'\n> rs.houdini.unescapeURL('Include+5%25+me%2Bin+a-query%3F+W%C3%ADth%C3%99TF%21')\n'Include 5% me in a-query? WíthÙTF!'\n```\n\n##### SmartyPants\n\n```javascript\n//Often used in conjunction with Markdown.\n//It makes \"smart\" punctuation. Sundown implements\n//SmartyPants with the same speed and security as Markdown.\n> rs.smartypantsHtml('And I said ---to him--- \"no worries\".');\n'And I said &mdash;to him&mdash; &ldquo;no worries&rdquo;.'\n```\n\n\n##### Version stuff\n\n``` javascript\n> rs.versions.sundown\n<Version 1.16.0>\n> rs.versions.robotskirt.toString() //String formatted version\n'2.5.1'\n> console.log('Sundown is at %s. Robotskirt is at %s',\n... rs.versions.sundown, rs.versions.robotskirt);\nSundown is at 1.16.0. Robotskirt is at 2.5.1.\n> rs.versions.sundown.minor\n16\n> rs.versions.robotskirt instanceof rs.Version\ntrue\n```\n\n","_id":"robotskirt@2.6.0","dist":{"shasum":"9ef8049fc94f10a43ae38e0780a4085ad45012a2","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-2.6.0.tgz","integrity":"sha512-+BiNEhnS0ogtsv0vpwYriBY6TCsvN/a8YOvCsv8DLzcQBSH0I1fEozbZDoswTqLxlu6hwClQMAFeU1NTL0cwOg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCriVxWb29OaPhw3ruPQLCsAsA1/h43C1PVLfACwT6mVgIgEfn6rQSU7RjUA5+/uuopZED6jYQ+BMg5JFdFq+EqLlw="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jmendeth","email":"jmendeth@gmail.com"}},"2.6.1":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","keywords":["sundown","upskirt","robot","markdown","mkd","md"],"version":"2.6.1","homepage":"http://benmills.org/robotskirt","author":{"name":"Ben Mills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"},{"name":"jmendeth","email":"jmendeth@gmail.com"}],"contributors":[{"name":"Ben Mills","email":"ben@bmdev.org"},{"name":"Xavier Mendez","email":"jmendeth@gmail.com"},{"name":"Farrin Reid","email":"blakmatrix@gmail.com"},{"name":"Jeremy Kahn","email":"jeremyckahn@gmail.com"},{"name":"lhagan","email":"luke@lukehagan.com"},{"name":"Ryan Graham","email":"r.m.graham@gmail.com"},{"name":"tbranyen","email":"tim@tabdeveloper.com"}],"main":"./build/Release/robotskirt","man":["man/robotskirt.1"],"engines":{"node":">= 0.6"},"scripts":{"install":"node-waf clean ; node-waf configure build"},"directories":{"bin":"./bin","src":"./src","man":"./man","doc":"./doc","example":"./examples"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"bugs":{"url":"https://github.com/benmills/robotskirt/issues"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/mit-license.php"}],"bin":{"robotskirt":"bin/robotskirt"},"readme":"# Robotskirt\n\nRobotskirt is a [Node.JS](http://nodejs.org) wrapper for the [Sundown](https://github.com/vmg/sundown)\nlibrary.\n\nIt was inspired by the Redcarpet gem [released by GitHub](https://github.com/blog/832-rolling-out-the-redcarpet) (the bindings to [Ruby](http://www.ruby-lang.org)).  \nWith the arrival of version 2 after much work, Robotskirt now mirrors every feature of Redcarpet, see below.  \nIt even has [additional features](#other-utilities)!\n\nFull documentation can be found under the `doc` folder.  \nRobotskirt is distributed under the **MIT license**, see `LICENSE`.\n\n## Performance\n\nThanks to Sundown, Robotskirt is able to render markdown many times faster than other Markdown libraries.  \nWith v2, efforts have been put to make it even lighter.\n\nSundown is well known for its **security**, **speed** and **flexibility**.  \nRobotskirt benefits from these features and tries to make the wrapping layer as thin as possible.\n\nRobotskirt includes a small script to benchmark it against other popular markdown libraries.  \nIt runs the official Markdown test suite 1000 times with each item.\n\nResults on a Thinkpad T400 running Ubuntu 12.04 and\nNode 0.8.8 (currently the latest stable version):\n\n```bash\n$ node benchmark --bench\n[1] robotskirt (reuse all) completed in 1354ms.\n[2] robotskirt (convenience, reuse all) completed in 1353ms.\n[3] robotskirt (new renderer and parser) completed in 3816ms.\n[4] robotskirt (convenience, new parser) completed in 1534ms.\n[5] marked completed in 3842ms.\n[6] discount completed in 6025ms.\n6 targets benchmarked successfully.\n```\n\n## Install\n\nThe best way to install Robotskirt is by using [NPM](https://github.com/isaacs/npm).  \nIf you want to install it globally, remember to use `sudo` and `-g`.\n\n```bash\nnpm install robotskirt\n```\n\n**Important:** you *don't need* to have Sundown installed: Robotskirt comes bundled  \nwith a specific Sundown version. Just install Robotskirt as any other module.\n\nRobotskirt uses `node-waf` to compile\n(although we'll switch to [Node-GYP](https://github.com/TooTallNate/node-gyp) soon).\n\n## Getting started\n\nCurrently there are two ways of using Robotskirt:\n[normal](#the-normal-way) and [convenience](#the-convenience-way).  \nWe recommend you to learn both (hey, it's just two classes!) and see the [examples](#examples).\n\n## The Normal Way\n\nTo parse Markdown, we first need a **renderer**. It takes the parsed Markdown,  \nand produces the final output (can be HTML, XHTML,\n[ANSI](https://github.com/benmills/robotskirt/blob/master/examples/ansi-rend.js), plain text, ...).\n\nOn most cases you will use Sundown's (X)HTML renderer:\n\n```javascript\nvar rs = require('robotskirt');\nvar renderer = new rs.HtmlRenderer();\n```\n\nThen, you make a **parser** that uses your renderer:\n\n```javascript\nvar parser = new rs.Markdown(renderer);\n```\n\nThat's it! You can now start rendering your markdown:\n\n```javascript\nparser.render('Hey, *this* is `code` with ÚŦF châracters!')\n// '<p>Hey, <em>this</em> is <code>code</code> with ÚŦF châracters!</p>\\n'\n```\n\n**Always reuse yor parsers/renderers!** As you can see in the [benchmark](#performance),  \nmaking and using the same pair to render everything saves a _lot_ of time.  \nIf you can't reuse them (for example, because the flags are supplied by the user),  \nconsider using [the convenience way](#the-convenience-way).\n\nOK. Want to customize the output a bit? Keep reading.\n\n### Using markdown extensions\n\nJust using `new Markdown(renderer)` will parse **pure markdown**.\nHowever, you can have it  \nunderstand special _extensions_ such as fenced code blocks,\nstrikethrough, tables and more!\n\nFor example, the following will enable tables and autolinking:\n\n```javascript\nvar parser = new rs.Markdown(renderer, [rs.EXT_TABLES, rs.EXT_AUTOLINK]);\n```\n\nYou can see the full list of extensions in the docs.\n\n### HTML rendering flags\n\nJust as with extensions, you can pass certain flags to the HTML renderer.\n\nFor example, the following will use strict XHTML\nand skip all the `<image>` tags:\n\n```javascript\nvar renderer = new rs.HtmlRenderer([rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\n```\n\nYou can see the full list of HTML flags in the docs.\n\n### UTF handling\n\nSundown is fully UTF-8 aware, both when handling and rendering.  \nRobotskirt will take care of the encoding and decoding tasks for you.\n\n### Custom renderers!\n\nA renderer is just a set of functions.  \nEach time the parser finds a piece of Markdown it'll call the appropiate function in the renderer.  \nIf the function is not set (`undefined`), the Markdown will be skipped or copied untouched.\n\nSome use cases of custom renderers:\n\n#### Highlighting code blocks\n\n```javascript\nvar renderer = new rs.HtmlRenderer();\nrenderer.blockcode = function (code, language) {\n  if (language === undefined) {\n    //No language was provided, don't highlight\n    return '<pre>' + escapeHtml(code) + '</pre>';\n  }\n  return pygments.highlight(code, {\"lang\": language, \"indent\": 2});\n};\n```\n\nYou can see the full list of renderer functions in the docs.\n\n#### Renderer from scratch\n\nIf you don't feel comfortable extending the `HtmlRenderer` class,  \nyou can build a renderer from scratch by extending the base class: `Renderer`.  \nAll renderers inherit from this class. It contains all functions set to `undefined`.\n\n## The Convenience Way\n\nWhen you don't need custom renderers at all, you can just write:\n\n```javascript\nvar rs = require('robotskirt');\nvar parser = rs.Markdown.std();\nparser.render(...);\n```\n\nThat'll build a renderer/parser pair for you.  \nIt's **faster than building them manually**, because it happens natively.\n\nYou can pass **extension** and **HTML** flags to it, respectively:\n\n```javascript\nvar parser = rs.Markdown.std([rs.EXT_TABLES, rs.EXT_AUTOLINK],\n                             [rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\nparser.render('This becomes http://autolink.ed in XHTML!');\n// '<p>This becomes <a href=\"http://autolink.ed\">http://autolink.ed</a> in XHTML!</p>\\n'\n```\n\nKeep in mind that **no other types of renderer can be chosen**,  \nand **you don't have access to the HTML renderer used**.\n\n## Examples\n\nTODO\n\n## Other utilities\n\nRobotskirt includes some useful utilities. Code speaks by itself:\n\n##### [Houdini](https://github.com/vmg/houdini), the escapist\n\n``` javascript\n> var rs = require('robotskirt')\n> rs.houdini.escapeHTML('<b>Some code to escape.</b> <a title=\"Click me!\">Me & you.</a>')\n'&lt;b&gt;Some code to escape.&lt;&#47;b&gt; &lt;a title=&quot;Click me!&quot;&gt;Me &amp; you.&lt;&#47;a&gt;'\n> rs.houdini.unescapeURL('Include+5%25+me%2Bin+a-query%3F+W%C3%ADth%C3%99TF%21')\n'Include 5% me in a-query? WíthÙTF!'\n```\n\n##### [SmartyPants](http://daringfireball.net/projects/smartypants)\n\nOften used in conjunction with Markdown.  \nIt makes \"smart\" punctuation. See more on [its homepage](http://daringfireball.net/projects/smartypants).\n\n```javascript\n> rs.smartypantsHtml('And I said ---to him--- \"no worries\"...');\n'And I said &mdash;to him&mdash; &ldquo;no worries&rdquo;&hellip;'\n```\n\nSundown implements SmartyPants with the same\nspeed and security as usual.\n\n##### Sundown's Autolink-er\n\n```javascript\n//COMING SOON!\n```\n\n##### Version stuff\n\n``` javascript\n> rs.versions.sundown\n<Version 1.16.0>\n> rs.versions.robotskirt.toString() //String formatted version\n'2.5.1'\n> console.log('Sundown is at %s. Robotskirt is at %s',\n... rs.versions.sundown, rs.versions.robotskirt);\nSundown is at 1.16.0. Robotskirt is at 2.5.1.\n> rs.versions.sundown.minor\n16\n> rs.versions.robotskirt instanceof rs.Version\ntrue\n```\n\n","_id":"robotskirt@2.6.1","dist":{"shasum":"d4819bf3fb3beab8c8aba2f154e2ad01420359cf","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-2.6.1.tgz","integrity":"sha512-9ylJhTiAfQ2mFGu+KsqRONloHAucNa21oxje2uj1ZIZyymNzyIrwlkaAGDirW7Sme5Za6Wck8VPt3XApnvnXVQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8Wewd4WLvTJumb9SH4qmUMwRVvg9lZpPr+E+w88D1mwIhAKEwMz2ktCl5ZF0tfwdf/GECudV97Su6IvJlLfV7HiIj"}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jmendeth","email":"jmendeth@gmail.com"}},"2.7.0":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","keywords":["sundown","upskirt","robot","markdown","mkd","md"],"version":"2.7.0","homepage":"http://benmills.org/robotskirt","author":{"name":"Ben Mills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"},{"name":"jmendeth","email":"jmendeth@gmail.com"}],"contributors":[{"name":"Ben Mills","email":"ben@bmdev.org"},{"name":"Xavier Mendez","email":"jmendeth@gmail.com"},{"name":"Farrin Reid","email":"blakmatrix@gmail.com"},{"name":"Jeremy Kahn","email":"jeremyckahn@gmail.com"},{"name":"Luke Hagan","email":"luke@lukehagan.com"},{"name":"Ryan Graham","email":"r.m.graham@gmail.com"},{"name":"Tim Branyen","email":"tim@tabdeveloper.com"},{"name":"John Gozde","email":"john@gozde.ca"}],"main":"./build/Release/robotskirt","man":["man/robotskirt.1"],"engines":{"node":">= 0.6"},"scripts":{"install":"node-gyp rebuild"},"directories":{"bin":"./bin","src":"./src","man":"./man","doc":"./doc","example":"./examples"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"bugs":{"url":"https://github.com/benmills/robotskirt/issues"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/mit-license.php"}],"gypfile":true,"bin":{"robotskirt":"bin/robotskirt"},"readme":"# Robotskirt\n\nRobotskirt is a [Node.JS](http://nodejs.org) wrapper for the [Sundown](https://github.com/vmg/sundown)\nlibrary.\n\nIt was inspired by the Redcarpet gem [released by GitHub](https://github.com/blog/832-rolling-out-the-redcarpet) (the bindings to [Ruby](http://www.ruby-lang.org)).  \nWith the arrival of version 2 after much work, Robotskirt now mirrors every feature of Redcarpet, see below.  \nIt even has [additional features](#other-utilities)!\n\nFull documentation can be found under the `doc` folder.  \nRobotskirt is distributed under the **MIT license**, see `LICENSE`.\n\n## Performance\n\nThanks to Sundown, Robotskirt is able to render markdown many times faster than other Markdown libraries.  \nWith v2, efforts have been put to make it even lighter.\n\nSundown is well known for its **security**, **speed** and **flexibility**.  \nRobotskirt benefits from these features and tries to make the wrapping layer as thin as possible.\n\nRobotskirt includes a small script to benchmark it against other popular markdown libraries.  \nIt runs the official Markdown test suite 1000 times with each item.\n\nResults on a Thinkpad T400 running Ubuntu 12.04 and\nNode 0.8.8 (currently the latest stable version):\n\n```bash\n$ node benchmark --bench\n[1] robotskirt (reuse all) completed in 1354ms.\n[2] robotskirt (convenience, reuse all) completed in 1353ms.\n[3] robotskirt (new renderer and parser) completed in 3816ms.\n[4] robotskirt (convenience, new parser) completed in 1534ms.\n[5] marked completed in 3842ms.\n[6] discount completed in 6025ms.\n6 targets benchmarked successfully.\n```\n\n## Install\n\nThe best way to install Robotskirt is by using [NPM](https://github.com/isaacs/npm).  \nIf you want to install it globally, remember to use `sudo` and `-g`.\n\n```bash\nnpm install robotskirt\n```\n\n**Important:** you *don't need* to have Sundown installed: Robotskirt comes bundled  \nwith a specific Sundown version. Just install Robotskirt as any other module.\n\nRobotskirt uses `node-waf` to compile\n(although we'll switch to [Node-GYP](https://github.com/TooTallNate/node-gyp) soon).\n\n## Getting started\n\nCurrently there are two ways of using Robotskirt:\n[normal](#the-normal-way) and [convenience](#the-convenience-way).  \nWe recommend you to learn both (hey, it's just two classes!) and see the [examples](#examples).\n\n## The Normal Way\n\nTo parse Markdown, we first need a **renderer**. It takes the parsed Markdown,  \nand produces the final output (can be HTML, XHTML,\n[ANSI](https://github.com/benmills/robotskirt/blob/master/examples/ansi-rend.js), plain text, ...).\n\nOn most cases you will use Sundown's (X)HTML renderer:\n\n```javascript\nvar rs = require('robotskirt');\nvar renderer = new rs.HtmlRenderer();\n```\n\nThen, you make a **parser** that uses your renderer:\n\n```javascript\nvar parser = new rs.Markdown(renderer);\n```\n\nThat's it! You can now start rendering your markdown:\n\n```javascript\nparser.render('Hey, *this* is `code` with ÚŦF châracters!')\n// '<p>Hey, <em>this</em> is <code>code</code> with ÚŦF châracters!</p>\\n'\n```\n\n**Always reuse yor parsers/renderers!** As you can see in the [benchmark](#performance),  \nmaking and using the same pair to render everything saves a _lot_ of time.  \nIf you can't reuse them (for example, because the flags are supplied by the user),  \nconsider using [the convenience way](#the-convenience-way).\n\nOK. Want to customize the output a bit? Keep reading.\n\n### Using markdown extensions\n\nJust using `new Markdown(renderer)` will parse **pure markdown**.\nHowever, you can have it  \nunderstand special _extensions_ such as fenced code blocks,\nstrikethrough, tables and more!\n\nFor example, the following will enable tables and autolinking:\n\n```javascript\nvar parser = new rs.Markdown(renderer, [rs.EXT_TABLES, rs.EXT_AUTOLINK]);\n```\n\nYou can see the full list of extensions in the docs.\n\n### HTML rendering flags\n\nJust as with extensions, you can pass certain flags to the HTML renderer.\n\nFor example, the following will use strict XHTML\nand skip all the `<image>` tags:\n\n```javascript\nvar renderer = new rs.HtmlRenderer([rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\n```\n\nYou can see the full list of HTML flags in the docs.\n\n### UTF handling\n\nSundown is fully UTF-8 aware, both when handling and rendering.  \nRobotskirt will take care of the encoding and decoding tasks for you.\n\n### Custom renderers!\n\nA renderer is just a set of functions.  \nEach time the parser finds a piece of Markdown it'll call the appropiate function in the renderer.  \nIf the function is not set (`undefined`), the Markdown will be skipped or copied untouched.\n\nSome use cases of custom renderers:\n\n#### Highlighting code blocks\n\n```javascript\nvar renderer = new rs.HtmlRenderer();\nrenderer.blockcode = function (code, language) {\n  if (language === undefined) {\n    //No language was provided, don't highlight\n    return '<pre>' + escapeHtml(code) + '</pre>';\n  }\n  return pygments.highlight(code, {\"lang\": language, \"indent\": 2});\n};\n```\n\nYou can see the full list of renderer functions in the docs.\n\n#### Renderer from scratch\n\nIf you don't feel comfortable extending the `HtmlRenderer` class,  \nyou can build a renderer from scratch by extending the base class: `Renderer`.  \nAll renderers inherit from this class. It contains all functions set to `undefined`.\n\n## The Convenience Way\n\nWhen you don't need custom renderers at all, you can just write:\n\n```javascript\nvar rs = require('robotskirt');\nvar parser = rs.Markdown.std();\nparser.render(...);\n```\n\nThat'll build a renderer/parser pair for you.  \nIt's **faster than building them manually**, because it happens natively.\n\nYou can pass **extension** and **HTML** flags to it, respectively:\n\n```javascript\nvar parser = rs.Markdown.std([rs.EXT_TABLES, rs.EXT_AUTOLINK],\n                             [rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\nparser.render('This becomes http://autolink.ed in XHTML!');\n// '<p>This becomes <a href=\"http://autolink.ed\">http://autolink.ed</a> in XHTML!</p>\\n'\n```\n\nKeep in mind that **no other types of renderer can be chosen**,  \nand **you don't have access to the HTML renderer used**.\n\n## Examples\n\nTODO\n\n## Other utilities\n\nRobotskirt includes some useful utilities. Code speaks by itself:\n\n##### [Houdini](https://github.com/vmg/houdini), the escapist\n\n``` javascript\n> var rs = require('robotskirt')\n> rs.houdini.escapeHTML('<b>Some code to escape.</b> <a title=\"Click me!\">Me & you.</a>')\n'&lt;b&gt;Some code to escape.&lt;&#47;b&gt; &lt;a title=&quot;Click me!&quot;&gt;Me &amp; you.&lt;&#47;a&gt;'\n> rs.houdini.unescapeURL('Include+5%25+me%2Bin+a-query%3F+W%C3%ADth%C3%99TF%21')\n'Include 5% me in a-query? WíthÙTF!'\n```\n\n##### [SmartyPants](http://daringfireball.net/projects/smartypants)\n\nOften used in conjunction with Markdown.  \nIt makes \"smart\" punctuation. See more on [its homepage](http://daringfireball.net/projects/smartypants).\n\n```javascript\n> rs.smartypantsHtml('And I said ---to him--- \"no worries\"...');\n'And I said &mdash;to him&mdash; &ldquo;no worries&rdquo;&hellip;'\n```\n\nSundown implements SmartyPants with the same\nspeed and security as usual.\n\n##### Sundown's Autolink-er\n\n```javascript\n//COMING SOON!\n```\n\n##### Version stuff\n\n``` javascript\n> rs.versions.sundown\n<Version 1.16.0>\n> rs.versions.robotskirt.toString() //String formatted version\n'2.5.1'\n> console.log('Sundown is at %s. Robotskirt is at %s',\n... rs.versions.sundown, rs.versions.robotskirt);\nSundown is at 1.16.0. Robotskirt is at 2.5.1.\n> rs.versions.sundown.minor\n16\n> rs.versions.robotskirt instanceof rs.Version\ntrue\n```\n\n","_id":"robotskirt@2.7.0","dist":{"shasum":"e3edaa4538f90bde32d448d3dde4e570c1e468f1","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-2.7.0.tgz","integrity":"sha512-7s2tMPXRAOE7Te/gW/uwEA8SImIJKoM/ThTtywcqt/XjojkcOLNVaUk8LdkGwackDg5elbEBVNrqiOZctrSjYA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVFi73rKsDoZl1xDO5vbvBReQw8BxG1zcBjU5+ntKT+wIgFBYvA/5rXHSkwc8vsmYHC9G8O53u5SV7lKi30Zd308s="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jmendeth","email":"jmendeth@gmail.com"}},"2.7.1":{"name":"robotskirt","description":"A node wrapper for the awesome C markdown parsing library, sundown.","keywords":["sundown","upskirt","robot","markdown","mkd","md"],"version":"2.7.1","homepage":"http://benmills.org/robotskirt","author":{"name":"Ben Mills","email":"ben@bmdev.org"},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"},{"name":"jmendeth","email":"jmendeth@gmail.com"}],"contributors":[{"name":"Ben Mills","email":"ben@bmdev.org"},{"name":"Xavier Mendez","email":"jmendeth@gmail.com"},{"name":"Farrin Reid","email":"blakmatrix@gmail.com"},{"name":"Jeremy Kahn","email":"jeremyckahn@gmail.com"},{"name":"Luke Hagan","email":"luke@lukehagan.com"},{"name":"Ryan Graham","email":"r.m.graham@gmail.com"},{"name":"Tim Branyen","email":"tim@tabdeveloper.com"},{"name":"John Gozde","email":"john@gozde.ca"}],"main":"./build/Release/robotskirt","man":["man/robotskirt.1"],"engines":{"node":">= 0.6"},"scripts":{"install":"node-gyp rebuild"},"directories":{"bin":"./bin","src":"./src","man":"./man","doc":"./doc","example":"./examples"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"bugs":{"url":"https://github.com/benmills/robotskirt/issues"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/mit-license.php"}],"gypfile":true,"bin":{"robotskirt":"bin/robotskirt"},"readme":"# Robotskirt\n\nRobotskirt is a [Node.JS](http://nodejs.org) wrapper for the [Sundown](https://github.com/vmg/sundown)\nlibrary.\n\nIt was inspired by the Redcarpet gem [released by GitHub](https://github.com/blog/832-rolling-out-the-redcarpet) (the bindings to [Ruby](http://www.ruby-lang.org)).  \nWith the arrival of version 2 after much work, Robotskirt now mirrors every feature of Redcarpet, see below.  \nIt even has [additional features](#other-utilities)!\n\nFull documentation can be found under the `doc` folder.  \nRobotskirt is distributed under the **MIT license**, see `LICENSE`.\n\n## Performance\n\nThanks to Sundown, Robotskirt is able to render markdown many times faster than other Markdown libraries.  \nWith v2, efforts have been put to make it even lighter.\n\nSundown is well known for its **security**, **speed** and **flexibility**.  \nRobotskirt benefits from these features and tries to make the wrapping layer as thin as possible.\n\nRobotskirt includes a small script to benchmark it against other popular markdown libraries.  \nIt runs the official Markdown test suite 1000 times with each item.\n\nResults on a Thinkpad T400 running Ubuntu 12.04 and\nNode 0.8.8 (currently the latest stable version):\n\n```bash\n$ node benchmark --bench\n[1] robotskirt (reuse all) completed in 1354ms.\n[2] robotskirt (convenience, reuse all) completed in 1353ms.\n[3] robotskirt (new renderer and parser) completed in 3816ms.\n[4] robotskirt (convenience, new parser) completed in 1534ms.\n[5] marked completed in 3842ms.\n[6] discount completed in 6025ms.\n6 targets benchmarked successfully.\n```\n\n## Install\n\nThe best way to install Robotskirt is by using [NPM](https://github.com/isaacs/npm).  \nIf you want to install it globally, remember to use `sudo` and `-g`.\n\n```bash\nnpm install robotskirt\n```\n\n**Important:** you *don't need* to have Sundown installed: Robotskirt comes bundled  \nwith a specific Sundown version. Just install Robotskirt as any other module.\n\nStarting with `v2.7`, Robotskirt uses the preferred [Node-GYP](https://github.com/TooTallNate/node-gyp) to compile.\n\n## Getting started\n\nCurrently there are two ways of using Robotskirt:\n[normal](#the-normal-way) and [convenience](#the-convenience-way).  \nWe recommend you to learn both (hey, it's just two classes!) and see the [examples](#examples).\n\n## The Normal Way\n\nTo parse Markdown, we first need a **renderer**. It takes the parsed Markdown,  \nand produces the final output (can be HTML, XHTML,\n[ANSI](https://github.com/benmills/robotskirt/blob/master/examples/ansi-rend.js), plain text, ...).\n\nOn most cases you will use Sundown's (X)HTML renderer:\n\n```javascript\nvar rs = require('robotskirt');\nvar renderer = new rs.HtmlRenderer();\n```\n\nThen, you make a **parser** that uses your renderer:\n\n```javascript\nvar parser = new rs.Markdown(renderer);\n```\n\nThat's it! You can now start rendering your markdown:\n\n```javascript\nparser.render('Hey, *this* is `code` with ÚŦF châracters!')\n// '<p>Hey, <em>this</em> is <code>code</code> with ÚŦF châracters!</p>\\n'\n```\n\n**Always reuse yor parsers/renderers!** As you can see in the [benchmark](#performance),  \nmaking and using the same pair to render everything saves a _lot_ of time.  \nIf you can't reuse them (for example, because the flags are supplied by the user),  \nconsider using [the convenience way](#the-convenience-way).\n\nOK. Want to customize the output a bit? Keep reading.\n\n### Using markdown extensions\n\nJust using `new Markdown(renderer)` will parse **pure markdown**.\nHowever, you can have it  \nunderstand special _extensions_ such as fenced code blocks,\nstrikethrough, tables and more!\n\nFor example, the following will enable tables and autolinking:\n\n```javascript\nvar parser = new rs.Markdown(renderer, [rs.EXT_TABLES, rs.EXT_AUTOLINK]);\n```\n\nYou can see the full list of extensions in the docs.\n\n### HTML rendering flags\n\nJust as with extensions, you can pass certain flags to the HTML renderer.\n\nFor example, the following will use strict XHTML\nand skip all the `<image>` tags:\n\n```javascript\nvar renderer = new rs.HtmlRenderer([rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\n```\n\nYou can see the full list of HTML flags in the docs.\n\n### UTF handling\n\nSundown is fully UTF-8 aware, both when handling and rendering.  \nRobotskirt will take care of the encoding and decoding tasks for you.\n\n### Custom renderers!\n\nA renderer is just a set of functions.  \nEach time the parser finds a piece of Markdown it'll call the appropiate function in the renderer.  \nIf the function is not set (`undefined`), the Markdown will be skipped or copied untouched.\n\nSome use cases of custom renderers:\n\n#### Highlighting code blocks\n\n```javascript\nvar renderer = new rs.HtmlRenderer();\nrenderer.blockcode = function (code, language) {\n  if (language === undefined) {\n    //No language was provided, don't highlight\n    return '<pre>' + escapeHtml(code) + '</pre>';\n  }\n  return pygments.highlight(code, {\"lang\": language, \"indent\": 2});\n};\n```\n\nYou can see the full list of renderer functions in the docs.\n\n#### Renderer from scratch\n\nIf you don't feel comfortable extending the `HtmlRenderer` class,  \nyou can build a renderer from scratch by extending the base class: `Renderer`.  \nAll renderers inherit from this class. It contains all functions set to `undefined`.\n\n## The Convenience Way\n\nWhen you don't need custom renderers at all, you can just write:\n\n```javascript\nvar rs = require('robotskirt');\nvar parser = rs.Markdown.std();\nparser.render(...);\n```\n\nThat'll build a renderer/parser pair for you.  \nIt's **faster than building them manually**, because it happens natively.\n\nYou can pass **extension** and **HTML** flags to it, respectively:\n\n```javascript\nvar parser = rs.Markdown.std([rs.EXT_TABLES, rs.EXT_AUTOLINK],\n                             [rs.HTML_USE_XHTML, rs.HTML_SKIP_IMAGES]);\nparser.render('This becomes http://autolink.ed in XHTML!');\n// '<p>This becomes <a href=\"http://autolink.ed\">http://autolink.ed</a> in XHTML!</p>\\n'\n```\n\nKeep in mind that **no other types of renderer can be chosen**,  \nand **you don't have access to the HTML renderer used**.\n\n## Examples\n\nTODO\n\n## Other utilities\n\nRobotskirt includes some useful utilities. Code speaks by itself:\n\n##### [Houdini](https://github.com/vmg/houdini), the escapist\n\n``` javascript\n> var rs = require('robotskirt')\n> rs.houdini.escapeHTML('<b>Some code to escape.</b> <a title=\"Click me!\">Me & you.</a>')\n'&lt;b&gt;Some code to escape.&lt;&#47;b&gt; &lt;a title=&quot;Click me!&quot;&gt;Me &amp; you.&lt;&#47;a&gt;'\n> rs.houdini.unescapeURL('Include+5%25+me%2Bin+a-query%3F+W%C3%ADth%C3%99TF%21')\n'Include 5% me in a-query? WíthÙTF!'\n```\n\n##### [SmartyPants](http://daringfireball.net/projects/smartypants)\n\nOften used in conjunction with Markdown.  \nIt makes \"smart\" punctuation. See more on [its homepage](http://daringfireball.net/projects/smartypants).\n\n```javascript\n> rs.smartypantsHtml('And I said ---to him--- \"no worries\"...');\n'And I said &mdash;to him&mdash; &ldquo;no worries&rdquo;&hellip;'\n```\n\nSundown implements SmartyPants with the same\nspeed and security as usual.\n\n##### Sundown's Autolink-er\n\n```javascript\n//COMING SOON!\n```\n\n##### Version stuff\n\n``` javascript\n> rs.versions.sundown\n<Version 1.16.0>\n> rs.versions.robotskirt.toString() //String formatted version\n'2.5.1'\n> console.log('Sundown is at %s. Robotskirt is at %s',\n... rs.versions.sundown, rs.versions.robotskirt);\nSundown is at 1.16.0. Robotskirt is at 2.5.1.\n> rs.versions.sundown.minor\n16\n> rs.versions.robotskirt instanceof rs.Version\ntrue\n```\n\n","_id":"robotskirt@2.7.1","dist":{"shasum":"a54962a5ab81239628f0118a752ac5359c6eba30","tarball":"https://registry.npmjs.org/robotskirt/-/robotskirt-2.7.1.tgz","integrity":"sha512-A51JmFja9UTrkv85VVQ30WhJAkKikkMFNjEvLSmP4rTkYpHVT054/wHVD9ZH8eZbgFDOgWGelbPCxJ+u104Tfg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXGneMCrF/SHjoztoT7hjuBs7oZ+YUI7dDu1Fz7VOg1QIhAKHppfUNjB2aQ2Ou3DH9bKxnbLn9PJZnuGl2e7dFOBCV"}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jmendeth","email":"jmendeth@gmail.com"}}},"maintainers":[{"name":"benmills","email":"ben@Bmdev.org"},{"name":"jmendeth","email":"jmendeth@gmail.com"}],"time":{"modified":"2022-06-26T13:46:50.932Z","created":"2011-04-29T03:23:52.568Z","0.1.0":"2011-04-29T03:23:52.993Z","0.2.0":"2011-05-19T06:45:33.664Z","0.2.1":"2011-06-01T05:11:58.178Z","0.2.2":"2011-06-04T18:12:31.794Z","0.2.3":"2011-11-21T05:41:40.353Z","0.2.4":"2011-11-23T00:01:46.768Z","0.2.5":"2012-01-23T13:38:10.960Z","1.0.0":"2012-09-07T18:50:46.878Z","2.3.2":"2012-09-07T18:58:15.603Z","2.4.0":"2012-09-11T08:44:33.221Z","2.5.0":"2012-09-12T16:52:17.883Z","2.5.1":"2012-09-12T16:54:16.012Z","2.5.2":"2012-09-15T09:26:02.672Z","2.5.3":"2012-09-16T11:14:46.320Z","2.5.4":"2012-09-19T16:21:31.567Z","2.6.0":"2012-10-04T15:34:38.272Z","2.6.1":"2012-10-25T13:03:52.491Z","2.7.0":"2012-11-16T17:37:36.130Z","2.7.1":"2012-11-16T17:41:51.497Z"},"author":{"name":"Ben Mills","email":"ben@bmdev.org"},"repository":{"type":"git","url":"https://github.com/benmills/robotskirt.git"},"users":{"kubakubula":true,"hasseyoung":true,"zeke":true}}