Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Created gh-pages branch via GitHub

  • Loading branch information...
commit ebd948b1ecbbe1d2bdbca1e95e26f57578e0934f 0 parents
@vmg authored
130 index.html
@@ -0,0 +1,130 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="chrome=1">
+ <title>Sundown by tanoku</title>
+
+ <link rel="stylesheet" href="stylesheets/styles.css">
+ <link rel="stylesheet" href="stylesheets/pygment_trac.css">
+ <script src="javascripts/scale.fix.js"></script>
+ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ </head>
+ <body>
+ <div class="wrapper">
+ <header>
+ <h1>Sundown</h1>
+ <p>Standards compliant, fast, secure markdown processing library in C</p>
+ <p class="view"><a href="https://github.com/tanoku/sundown">View the Project on GitHub <small>tanoku/sundown</small></a></p>
+ <ul>
+ <li><a href="https://github.com/tanoku/sundown/zipball/master">Download <strong>ZIP File</strong></a></li>
+ <li><a href="https://github.com/tanoku/sundown/tarball/master">Download <strong>TAR Ball</strong></a></li>
+ <li><a href="https://github.com/tanoku/sundown">Fork On <strong>GitHub</strong></a></li>
+ </ul>
+ </header>
+ <section>
+ <p><code>Sundown</code> is a minimal, self-contained library to parse Markdown files, written from the ground up with a focus on security. It has been extensively tested in production, and it handles all the Markdown rendering in <a href="https://github.com">GitHub</a> and <a href="http://www.reddit.com">Reddit</a>, among other websites.</p>
+
+<h2>Features</h2>
+
+<ul>
+<li>
+<p><strong>Fully standards compliant</strong></p>
+
+<p><code>Sundown</code> passes out of the box the official Markdown v1.0.0 and v1.0.3
+test suites, and has been extensively tested with additional corner cases
+to make sure its output is as sane as possible at all times.</p>
+</li>
+<li>
+<p><strong>Massive extension support</strong></p>
+
+<p><code>Sundown</code> has optional support for several (unofficial) Markdown extensions,
+such as non-strict emphasis, fenced code blocks, tables, autolinks,
+strikethrough and more.</p>
+</li>
+<li>
+<p><strong>UTF-8 aware</strong></p>
+
+<p><code>Sundown</code> is fully UTF-8 aware, both when parsing the source document and when
+generating the resulting (X)HTML code.</p>
+</li>
+<li>
+<p><strong>Tested &amp; Ready to be used on production</strong></p>
+
+<p><code>Sundown</code> has been extensively security audited, and includes protection against
+all possible DOS attacks (stack overflows, out of memory situations, malformed
+Markdown syntax...) and against client attacks through malicious embedded HTML.</p>
+
+<p>We've worked very hard to make <code>Sundown</code> never crash or run out of memory
+under <em>any</em> input. <code>Sundown</code> renders all the Markdown content in GitHub and so
+far hasn't crashed a single time.</p>
+</li>
+<li>
+<p><strong>Customizable renderers</strong></p>
+
+<p><code>Sundown</code> is not stuck with XHTML output: the Markdown parser of the library
+is decoupled from the renderer, so it's trivial to extend the library with
+custom renderers. A fully functional (X)HTML renderer is included.</p>
+</li>
+<li>
+<p><strong>Optimized for speed</strong></p>
+
+<p><code>Sundown</code> is written in C, with a special emphasis on performance. When wrapped
+on a dynamic language such as Python or Ruby, it has shown to be up to 40
+times faster than other native alternatives.</p>
+</li>
+<li>
+<p><strong>Zero-dependency</strong></p>
+
+<p><code>Sundown</code> is a zero-dependency library composed of 3 <code>.c</code> files and their headers.
+No dependencies, no bullshit. Only standard C99 that builds everywhere.</p>
+</li>
+</ul><h2>Credits</h2>
+
+<p><code>Sundown</code> is based on the original Upskirt parser by Natacha Porté, with many additions
+by Vicent Marti (<a href="/tanoku" class="user-mention">@tanoku</a>) and contributions from the following authors: Ben Noordhuis, Bruno Michel, Joseph Koshy, Krzysztof Kowalczyk, Samuel Bronson, Shuhei Tanuma</p>
+
+<h2>Bindings</h2>
+
+<p><code>Sundown</code> is available from other programming languages thanks to these bindings developed
+by our awesome contributors.</p>
+
+<ul>
+<li>
+<a href="https://github.com/tanoku/redcarpet">Redcarpet</a> (Ruby)</li>
+<li>
+<a href="https://github.com/benmills/robotskirt">RobotSkirt</a> (Node.js)</li>
+<li>
+<a href="https://github.com/FSX/misaka">Misaka</a> (Python)</li>
+<li>
+<a href="https://github.com/postmodern/ffi-sundown">ffi-sundown</a> (Ruby FFI)</li>
+<li>
+<a href="https://github.com/rostayob/sundown">Sundown HS</a> (Haskell)</li>
+<li>
+<a href="https://github.com/madari/goskirt">Goskirt</a> (Go)</li>
+<li>
+<a href="https://github.com/buu700/upskirt.go">Upskirt.go</a> (Go)</li>
+<li>
+<a href="https://github.com/brandonc/moonshine">MoonShine</a> (.NET)</li>
+<li>
+<a href="https://github.com/chobie/php-sundown">PHP-Sundown</a> (PHP)</li>
+<li>
+<a href="https://github.com/txdv/sundown.net">Sundown.net</a> (.NET)</li>
+</ul><h2>Help us</h2>
+
+<p><code>Sundown</code> is all about security. If you find a (potential) security vulnerability in the
+library, or a way to make it crash through malicious input, please report it to us,
+either directly via email or by opening an Issue on GitHub, and help make the web safer
+for everybody.</p>
+ </section>
+ <footer>
+ <p>This project is maintained by <a href="https://github.com/tanoku">tanoku</a></p>
+ <p><small>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/orderedlist">orderedlist</a></small></p>
+ </footer>
+ </div>
+ <!--[if !IE]><script>fixScale(document);</script><!--<![endif]-->
+ </body>
+</html>
20 javascripts/scale.fix.js
@@ -0,0 +1,20 @@
+fixScale = function(doc) {
+
+ var addEvent = 'addEventListener',
+ type = 'gesturestart',
+ qsa = 'querySelectorAll',
+ scales = [1, 1],
+ meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
+
+ function fix() {
+ meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
+ doc.removeEventListener(type, fix, true);
+ }
+
+ if ((meta = meta[meta.length - 1]) && addEvent in doc) {
+ fix();
+ scales = [.25, 1.6];
+ doc[addEvent](type, fix, true);
+ }
+
+};
1  params.json
@@ -0,0 +1 @@
+{"name":"Sundown","body":"`Sundown` is a minimal, self-contained library to parse Markdown files, written from the ground up with a focus on security. It has been extensively tested in production, and it handles all the Markdown rendering in [GitHub](https://github.com) and [Reddit](http://www.reddit.com), among other websites.\r\n\r\nFeatures\r\n--------\r\n\r\n*\t**Fully standards compliant**\r\n\r\n\t`Sundown` passes out of the box the official Markdown v1.0.0 and v1.0.3\r\n\ttest suites, and has been extensively tested with additional corner cases\r\n\tto make sure its output is as sane as possible at all times.\r\n\r\n*\t**Massive extension support**\r\n\r\n\t`Sundown` has optional support for several (unofficial) Markdown extensions,\r\n\tsuch as non-strict emphasis, fenced code blocks, tables, autolinks,\r\n\tstrikethrough and more.\r\n\r\n*\t**UTF-8 aware**\r\n\r\n\t`Sundown` is fully UTF-8 aware, both when parsing the source document and when\r\n\tgenerating the resulting (X)HTML code.\r\n\r\n*\t**Tested & Ready to be used on production**\r\n\r\n\t`Sundown` has been extensively security audited, and includes protection against\r\n\tall possible DOS attacks (stack overflows, out of memory situations, malformed\r\n\tMarkdown syntax...) and against client attacks through malicious embedded HTML.\r\n\r\n\tWe've worked very hard to make `Sundown` never crash or run out of memory\r\n\tunder *any* input. `Sundown` renders all the Markdown content in GitHub and so\r\n\tfar hasn't crashed a single time.\r\n\r\n*\t**Customizable renderers**\r\n\r\n\t`Sundown` is not stuck with XHTML output: the Markdown parser of the library\r\n\tis decoupled from the renderer, so it's trivial to extend the library with\r\n\tcustom renderers. A fully functional (X)HTML renderer is included.\r\n\r\n*\t**Optimized for speed**\r\n\r\n\t`Sundown` is written in C, with a special emphasis on performance. When wrapped\r\n\ton a dynamic language such as Python or Ruby, it has shown to be up to 40\r\n\ttimes faster than other native alternatives.\r\n\r\n*\t**Zero-dependency**\r\n\r\n\t`Sundown` is a zero-dependency library composed of 3 `.c` files and their headers.\r\n\tNo dependencies, no bullshit. Only standard C99 that builds everywhere.\r\n\r\nCredits\r\n-------\r\n\r\n`Sundown` is based on the original Upskirt parser by Natacha Porté, with many additions\r\nby Vicent Marti (@tanoku) and contributions from the following authors: Ben Noordhuis, Bruno Michel, Joseph Koshy, Krzysztof Kowalczyk, Samuel Bronson, Shuhei Tanuma\r\n\r\nBindings\r\n--------\r\n\r\n`Sundown` is available from other programming languages thanks to these bindings developed\r\nby our awesome contributors.\r\n\r\n- [Redcarpet](https://github.com/tanoku/redcarpet) (Ruby)\r\n- [RobotSkirt](https://github.com/benmills/robotskirt) (Node.js)\r\n- [Misaka](https://github.com/FSX/misaka) (Python)\r\n- [ffi-sundown](https://github.com/postmodern/ffi-sundown) (Ruby FFI)\r\n- [Sundown HS](https://github.com/rostayob/sundown) (Haskell)\r\n- [Goskirt](https://github.com/madari/goskirt) (Go)\r\n- [Upskirt.go](https://github.com/buu700/upskirt.go) (Go)\r\n- [MoonShine](https://github.com/brandonc/moonshine) (.NET)\r\n- [PHP-Sundown](https://github.com/chobie/php-sundown) (PHP)\r\n- [Sundown.net](https://github.com/txdv/sundown.net) (.NET)\r\n\r\nHelp us\r\n-------\r\n\r\n`Sundown` is all about security. If you find a (potential) security vulnerability in the\r\nlibrary, or a way to make it crash through malicious input, please report it to us,\r\neither directly via email or by opening an Issue on GitHub, and help make the web safer\r\nfor everybody.","tagline":"Standards compliant, fast, secure markdown processing library in C","google":""}
69 stylesheets/pygment_trac.css
@@ -0,0 +1,69 @@
+.highlight { background: #ffffff; }
+.highlight .c { color: #999988; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .o { font-weight: bold } /* Operator */
+.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #009999 } /* Literal.Number */
+.highlight .s { color: #d14 } /* Literal.String */
+.highlight .na { color: #008080 } /* Name.Attribute */
+.highlight .nb { color: #0086B3 } /* Name.Builtin */
+.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
+.highlight .no { color: #008080 } /* Name.Constant */
+.highlight .ni { color: #800080 } /* Name.Entity */
+.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
+.highlight .nn { color: #555555 } /* Name.Namespace */
+.highlight .nt { color: #000080 } /* Name.Tag */
+.highlight .nv { color: #008080 } /* Name.Variable */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #009999 } /* Literal.Number.Float */
+.highlight .mh { color: #009999 } /* Literal.Number.Hex */
+.highlight .mi { color: #009999 } /* Literal.Number.Integer */
+.highlight .mo { color: #009999 } /* Literal.Number.Oct */
+.highlight .sb { color: #d14 } /* Literal.String.Backtick */
+.highlight .sc { color: #d14 } /* Literal.String.Char */
+.highlight .sd { color: #d14 } /* Literal.String.Doc */
+.highlight .s2 { color: #d14 } /* Literal.String.Double */
+.highlight .se { color: #d14 } /* Literal.String.Escape */
+.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
+.highlight .si { color: #d14 } /* Literal.String.Interpol */
+.highlight .sx { color: #d14 } /* Literal.String.Other */
+.highlight .sr { color: #009926 } /* Literal.String.Regex */
+.highlight .s1 { color: #d14 } /* Literal.String.Single */
+.highlight .ss { color: #990073 } /* Literal.String.Symbol */
+.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #008080 } /* Name.Variable.Class */
+.highlight .vg { color: #008080 } /* Name.Variable.Global */
+.highlight .vi { color: #008080 } /* Name.Variable.Instance */
+.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
+
+.type-csharp .highlight .k { color: #0000FF }
+.type-csharp .highlight .kt { color: #0000FF }
+.type-csharp .highlight .nf { color: #000000; font-weight: normal }
+.type-csharp .highlight .nc { color: #2B91AF }
+.type-csharp .highlight .nn { color: #000000 }
+.type-csharp .highlight .s { color: #A31515 }
+.type-csharp .highlight .sc { color: #A31515 }
251 stylesheets/styles.css
@@ -0,0 +1,251 @@
+@import url(https://fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700);
+
+body {
+ padding:50px;
+ font:14px/1.5 Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+ color:#777;
+ font-weight:300;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color:#222;
+ margin:0 0 20px;
+}
+
+p, ul, ol, table, pre, dl {
+ margin:0 0 20px;
+}
+
+h1, h2, h3 {
+ line-height:1.1;
+}
+
+h1 {
+ font-size:28px;
+}
+
+h2 {
+ color:#393939;
+}
+
+h3, h4, h5, h6 {
+ color:#494949;
+}
+
+a {
+ color:#39c;
+ font-weight:400;
+ text-decoration:none;
+}
+
+a small {
+ font-size:11px;
+ color:#777;
+ margin-top:-0.6em;
+ display:block;
+}
+
+.wrapper {
+ width:860px;
+ margin:0 auto;
+}
+
+blockquote {
+ border-left:1px solid #e5e5e5;
+ margin:0;
+ padding:0 0 0 20px;
+ font-style:italic;
+}
+
+code, pre {
+ font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal;
+ color:#333;
+ font-size:12px;
+}
+
+pre {
+ padding:8px 15px;
+ background: #f8f8f8;
+ border-radius:5px;
+ border:1px solid #e5e5e5;
+ overflow-x: auto;
+}
+
+table {
+ width:100%;
+ border-collapse:collapse;
+}
+
+th, td {
+ text-align:left;
+ padding:5px 10px;
+ border-bottom:1px solid #e5e5e5;
+}
+
+dt {
+ color:#444;
+ font-weight:700;
+}
+
+th {
+ color:#444;
+}
+
+img {
+ max-width:100%;
+}
+
+header {
+ width:270px;
+ float:left;
+ position:fixed;
+}
+
+header ul {
+ list-style:none;
+ height:40px;
+
+ padding:0;
+
+ background: #eee;
+ background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd));
+ background: -webkit-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+ background: -o-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+ background: -ms-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+ background: linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+
+ border-radius:5px;
+ border:1px solid #d2d2d2;
+ box-shadow:inset #fff 0 1px 0, inset rgba(0,0,0,0.03) 0 -1px 0;
+ width:270px;
+}
+
+header li {
+ width:89px;
+ float:left;
+ border-right:1px solid #d2d2d2;
+ height:40px;
+}
+
+header ul a {
+ line-height:1;
+ font-size:11px;
+ color:#999;
+ display:block;
+ text-align:center;
+ padding-top:6px;
+ height:40px;
+}
+
+strong {
+ color:#222;
+ font-weight:700;
+}
+
+header ul li + li {
+ width:88px;
+ border-left:1px solid #fff;
+}
+
+header ul li + li + li {
+ border-right:none;
+ width:89px;
+}
+
+header ul a strong {
+ font-size:14px;
+ display:block;
+ color:#222;
+}
+
+section {
+ width:500px;
+ float:right;
+ padding-bottom:50px;
+}
+
+small {
+ font-size:11px;
+}
+
+hr {
+ border:0;
+ background:#aaa;
+ height:1px;
+ margin:0 0 20px;
+}
+
+footer {
+ width:270px;
+ float:left;
+ position:fixed;
+ bottom:50px;
+}
+
+@media print, screen and (max-width: 960px) {
+
+ div.wrapper {
+ width:auto;
+ margin:0;
+ }
+
+ header, section, footer {
+ float:none;
+ position:static;
+ width:auto;
+ }
+
+ header {
+ padding-right:320px;
+ }
+
+ section {
+ border:1px solid #e5e5e5;
+ border-width:1px 0;
+ padding:20px 0;
+ margin:0 0 20px;
+ }
+
+ header a small {
+ display:inline;
+ }
+
+ header ul {
+ position:absolute;
+ right:50px;
+ top:52px;
+ }
+}
+
+@media print, screen and (max-width: 720px) {
+ body {
+ word-wrap:break-word;
+ }
+
+ header {
+ padding:0;
+ }
+
+ header ul, header p.view {
+ position:static;
+ }
+}
+
+@media print, screen and (max-width: 480px) {
+ body {
+ padding:15px;
+ }
+
+ header ul {
+ display:none;
+ }
+}
+
+@media print {
+ body {
+ padding:0.4in;
+ font-size:12pt;
+ color:#444;
+ }
+}
Please sign in to comment.
Something went wrong with that request. Please try again.