|
| 1 | +Sundown |
| 2 | +======= |
| 3 | + |
| 4 | +`Sundown` is a Markdown parser based on the original code of the |
| 5 | +[Upskirt library](http://fossil.instinctive.eu/libupskirt/index) by Natacha Porté. |
| 6 | + |
| 7 | +Features |
| 8 | +-------- |
| 9 | + |
| 10 | +* **Fully standards compliant** |
| 11 | + |
| 12 | + `Sundown` passes out of the box the official Markdown v1.0.0 and v1.0.3 |
| 13 | + test suites, and has been extensively tested with additional corner cases |
| 14 | + to make sure its output is as sane as possible at all times. |
| 15 | + |
| 16 | +* **Massive extension support** |
| 17 | + |
| 18 | + `Sundown` has optional support for several (unofficial) Markdown extensions, |
| 19 | + such as non-strict emphasis, fenced code blocks, tables, autolinks, |
| 20 | + strikethrough and more. |
| 21 | + |
| 22 | +* **UTF-8 aware** |
| 23 | + |
| 24 | + `Sundown` is fully UTF-8 aware, both when parsing the source document and when |
| 25 | + generating the resulting (X)HTML code. |
| 26 | + |
| 27 | +* **Tested & Ready to be used on production** |
| 28 | + |
| 29 | + `Sundown` has been extensively security audited, and includes protection against |
| 30 | + all possible DOS attacks (stack overflows, out of memory situations, malformed |
| 31 | + Markdown syntax...) and against client attacks through malicious embedded HTML. |
| 32 | + |
| 33 | + We've worked very hard to make `Sundown` never crash or run out of memory |
| 34 | + under *any* input. `Sundown` renders all the Markdown content in GitHub and so |
| 35 | + far hasn't crashed a single time. |
| 36 | + |
| 37 | +* **Customizable renderers** |
| 38 | + |
| 39 | + `Sundown` is not stuck with XHTML output: the Markdown parser of the library |
| 40 | + is decoupled from the renderer, so it's trivial to extend the library with |
| 41 | + custom renderers. A fully functional (X)HTML renderer is included. |
| 42 | + |
| 43 | +* **Optimized for speed** |
| 44 | + |
| 45 | + `Sundown` is written in C, with a special emphasis on performance. When wrapped |
| 46 | + on a dynamic language such as Python or Ruby, it has shown to be up to 40 |
| 47 | + times faster than other native alternatives. |
| 48 | + |
| 49 | +* **Zero-dependency** |
| 50 | + |
| 51 | + `Sundown` is a zero-dependency library composed of 3 `.c` files and their headers. |
| 52 | + No dependencies, no bullshit. Only standard C99 that builds everywhere. |
| 53 | + |
| 54 | +Credits |
| 55 | +------- |
| 56 | + |
| 57 | +`Sundown` is based on the original Upskirt parser by Natacha Porté, with many additions |
| 58 | +by Vicent Marti (@vmg) and contributions from the following authors: |
| 59 | + |
| 60 | + Ben Noordhuis, Bruno Michel, Joseph Koshy, Krzysztof Kowalczyk, Samuel Bronson, |
| 61 | + Shuhei Tanuma |
| 62 | + |
| 63 | +Bindings |
| 64 | +-------- |
| 65 | + |
| 66 | +`Sundown` is available from other programming languages thanks to these bindings developed |
| 67 | +by our awesome contributors. |
| 68 | + |
| 69 | +- [Redcarpet](https://github.com/vmg/redcarpet) (Ruby) |
| 70 | +- [RobotSkirt](https://github.com/benmills/robotskirt) (Node.js) |
| 71 | +- [Misaka](https://github.com/FSX/misaka) (Python) |
| 72 | +- [ffi-sundown](https://github.com/postmodern/ffi-sundown) (Ruby FFI) |
| 73 | +- [Sundown HS](https://github.com/bitonic/sundown) (Haskell) |
| 74 | +- [Goskirt](https://github.com/madari/goskirt) (Go) |
| 75 | +- [Upskirt.go](https://github.com/buu700/upskirt.go) (Go) |
| 76 | +- [MoonShine](https://github.com/brandonc/moonshine) (.NET) |
| 77 | +- [PHP-Sundown](https://github.com/chobie/php-sundown) (PHP) |
| 78 | +- [Sundown.net](https://github.com/txdv/sundown.net) (.NET) |
| 79 | + |
| 80 | +Help us |
| 81 | +------- |
| 82 | + |
| 83 | +`Sundown` is all about security. If you find a (potential) security vulnerability in the |
| 84 | +library, or a way to make it crash through malicious input, please report it to us, |
| 85 | +either directly via email or by opening an Issue on GitHub, and help make the web safer |
| 86 | +for everybody. |
| 87 | + |
| 88 | +Unicode character handling |
| 89 | +-------------------------- |
| 90 | + |
| 91 | +Given that the Markdown spec makes no provision for Unicode character handling, `Sundown` |
| 92 | +takes a conservative approach towards deciding which extended characters trigger Markdown |
| 93 | +features: |
| 94 | + |
| 95 | +* Punctuation characters outside of the U+007F codepoint are not handled as punctuation. |
| 96 | + They are considered as normal, in-word characters for word-boundary checks. |
| 97 | + |
| 98 | +* Whitespace characters outside of the U+007F codepoint are not considered as |
| 99 | + whitespace. They are considered as normal, in-word characters for word-boundary checks. |
| 100 | + |
| 101 | +Install |
| 102 | +------- |
| 103 | + |
| 104 | +There is nothing to install. `Sundown` is composed of 3 `.c` files (`markdown.c`, |
| 105 | +`buffer.c` and `array.c`), so just throw them in your project. Zero-dependency means |
| 106 | +zero-dependency. You might want to include `render/html.c` if you want to use the |
| 107 | +included XHTML renderer, or write your own renderer. Either way, it's all fun and joy. |
| 108 | + |
| 109 | +If you are hardcore, you can use the included `Makefile` to build `Sundown` into a dynamic |
| 110 | +library, or to build the sample `sundown` executable, which is just a commandline |
| 111 | +Markdown to XHTML parser. (If gcc gives you grief about `-fPIC`, e.g. with MinGW, try |
| 112 | +`make MFLAGS=` instead of just `make`.) |
| 113 | + |
| 114 | +License |
| 115 | +------- |
| 116 | + |
| 117 | +Permission to use, copy, modify, and distribute this software for any |
| 118 | +purpose with or without fee is hereby granted, provided that the above |
| 119 | +copyright notice and this permission notice appear in all copies. |
| 120 | + |
| 121 | +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| 122 | +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| 123 | +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| 124 | +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| 125 | +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| 126 | +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| 127 | +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| 128 | + |
| 129 | +<!-- Local Variables: --> |
| 130 | +<!-- fill-column: 89 --> |
| 131 | +<!-- End: --> |
0 commit comments