2011-07-24 08:15:35 -05:00
|
|
|
# marked
|
|
|
|
|
2011-12-10 15:21:01 -06:00
|
|
|
A full-featured markdown parser and compiler.
|
2011-07-24 08:15:35 -05:00
|
|
|
Built for speed.
|
|
|
|
|
|
|
|
## Benchmarks
|
|
|
|
|
2011-12-10 15:21:01 -06:00
|
|
|
node v0.4.x
|
|
|
|
|
2011-08-10 21:52:54 -05:00
|
|
|
``` bash
|
2011-08-26 05:20:42 -05:00
|
|
|
$ node test --bench
|
2011-10-22 09:16:14 -05:00
|
|
|
marked completed in 12071ms.
|
|
|
|
showdown (reuse converter) completed in 27387ms.
|
|
|
|
showdown (new converter) completed in 75617ms.
|
|
|
|
markdown-js completed in 70069ms.
|
2011-08-10 21:52:54 -05:00
|
|
|
```
|
2011-07-24 08:15:35 -05:00
|
|
|
|
2011-12-10 15:21:01 -06:00
|
|
|
node v0.6.x
|
|
|
|
|
|
|
|
``` bash
|
|
|
|
$ node test --bench
|
2012-01-28 22:57:59 -06:00
|
|
|
marked completed in 6485ms.
|
|
|
|
marked (with gfm) completed in 7466ms.
|
|
|
|
discount completed in 7169ms.
|
|
|
|
showdown (reuse converter) completed in 15937ms.
|
|
|
|
showdown (new converter) completed in 18279ms.
|
|
|
|
markdown-js completed in 23572ms.
|
2011-12-10 15:21:01 -06:00
|
|
|
```
|
|
|
|
|
2012-01-16 22:59:05 -06:00
|
|
|
__Marked is now faster than Discount, which is written in C.__
|
2012-01-03 02:25:47 -06:00
|
|
|
|
|
|
|
For those feeling skeptical: These benchmarks run the entire markdown test suite
|
|
|
|
1000 times. The test suite tests every feature. It doesn't cater to specific
|
|
|
|
aspects.
|
|
|
|
|
2011-12-10 15:21:01 -06:00
|
|
|
Benchmarks for other engines to come (?).
|
|
|
|
|
2011-08-26 05:20:42 -05:00
|
|
|
## Install
|
|
|
|
|
|
|
|
``` bash
|
|
|
|
$ npm install marked
|
|
|
|
```
|
|
|
|
|
2011-12-10 15:21:01 -06:00
|
|
|
## Another javascript markdown parser
|
2011-08-23 00:07:50 -05:00
|
|
|
|
2011-10-22 09:16:14 -05:00
|
|
|
The point of marked was to create a markdown compiler where it was possible to
|
|
|
|
frequently parse huge chunks of markdown without having to worry about
|
2011-07-24 08:15:35 -05:00
|
|
|
caching the compiled output somehow...or blocking for an unnecesarily long time.
|
|
|
|
|
2011-12-10 15:21:01 -06:00
|
|
|
marked is very concise and still implements all markdown features. It is also
|
|
|
|
now fully compatible with the client-side.
|
2011-07-24 08:15:35 -05:00
|
|
|
|
2011-10-22 09:16:14 -05:00
|
|
|
marked more or less passes the official markdown test suite in its
|
|
|
|
entirety. This is important because a surprising number of markdown compilers
|
|
|
|
cannot pass more than a few tests. It was very difficult to get marked as
|
|
|
|
compliant as it is. It could have cut corners in several areas for the sake
|
|
|
|
of performance, but did not in order to be exactly what you expect in terms
|
|
|
|
of a markdown rendering. In fact, this is why marked could be considered at a
|
2011-08-26 05:20:42 -05:00
|
|
|
disadvantage in the benchmarks above.
|
2011-07-24 08:15:35 -05:00
|
|
|
|
2012-01-03 11:13:36 -06:00
|
|
|
Along with implementing every markdown feature, marked also implements
|
|
|
|
[GFM features](http://github.github.com/github-flavored-markdown/).
|
|
|
|
|
2011-07-24 08:15:35 -05:00
|
|
|
## Usage
|
|
|
|
|
2012-02-19 03:00:03 -06:00
|
|
|
``` js
|
2012-02-19 20:29:35 -06:00
|
|
|
marked.setDefaults({
|
|
|
|
gfm: true,
|
|
|
|
pedantic: false,
|
|
|
|
sanitize: true
|
|
|
|
});
|
2012-02-19 03:00:03 -06:00
|
|
|
var html = marked(markdown, options);
|
|
|
|
```
|
|
|
|
|
|
|
|
### Options
|
|
|
|
|
|
|
|
- __pedantic__: Conform to obscure parts of `markdown.pl` as much as possible.
|
|
|
|
Don't fix any of the original markdown bugs or poor behavior.
|
|
|
|
- __gfm__: Enabled github flavored markdown (default for backward compatibility).
|
|
|
|
- __sanitize__: Sanitize the output. Ignore an HTML that has been input.
|
|
|
|
|
|
|
|
None of the above are mutually exclusive/inclusive.
|
|
|
|
|
|
|
|
## Example Usage
|
|
|
|
|
2011-08-10 21:50:25 -05:00
|
|
|
``` js
|
|
|
|
var marked = require('marked');
|
|
|
|
console.log(marked('i am using __markdown__.'));
|
2012-02-19 03:00:03 -06:00
|
|
|
|
|
|
|
// gfm
|
|
|
|
console.log(marked('```\ni am using GFM.\n```', {
|
|
|
|
gfm: true,
|
|
|
|
pedantic: false,
|
|
|
|
sanitize: true
|
|
|
|
}));
|
2011-08-10 21:50:25 -05:00
|
|
|
```
|
2011-07-24 08:15:35 -05:00
|
|
|
|
|
|
|
You also have direct access to the lexer and parser if you so desire.
|
|
|
|
|
2011-08-10 21:50:25 -05:00
|
|
|
``` js
|
|
|
|
var tokens = marked.lexer(str);
|
|
|
|
console.log(marked.parser(tokens));
|
|
|
|
```
|
2011-07-24 08:15:35 -05:00
|
|
|
|
2011-08-26 05:20:42 -05:00
|
|
|
``` bash
|
|
|
|
$ node
|
|
|
|
> require('marked').lexer('> i am using marked.')
|
|
|
|
[ { type: 'blockquote_start' },
|
|
|
|
{ type: 'text', text: ' i am using marked.' },
|
|
|
|
{ type: 'blockquote_end' },
|
|
|
|
links: {} ]
|
|
|
|
```
|
|
|
|
|
2011-12-10 15:21:01 -06:00
|
|
|
## CLI
|
|
|
|
|
|
|
|
``` bash
|
|
|
|
$ marked -o hello.html
|
|
|
|
hello world
|
|
|
|
^D
|
|
|
|
$ cat hello.html
|
|
|
|
<p>hello world</p>
|
|
|
|
```
|
|
|
|
|
2012-01-03 00:35:47 -06:00
|
|
|
## Syntax Highlighting
|
2011-07-24 08:15:35 -05:00
|
|
|
|
2012-01-03 00:35:47 -06:00
|
|
|
Marked has an interface that allows for a syntax highlighter to highlight code
|
|
|
|
blocks before they're output.
|
|
|
|
|
|
|
|
Example implementation:
|
|
|
|
|
|
|
|
``` js
|
|
|
|
var highlight = require('my-syntax-highlighter')
|
|
|
|
, marked_ = require('marked');
|
|
|
|
|
|
|
|
var marked = function(text) {
|
|
|
|
var tokens = marked_.lexer(text)
|
|
|
|
, l = tokens.length
|
|
|
|
, i = 0
|
|
|
|
, token;
|
|
|
|
|
|
|
|
for (; i < l; i++) {
|
|
|
|
token = tokens[i];
|
|
|
|
if (token.type === 'code') {
|
|
|
|
token.text = highlight(token.text, token.lang);
|
|
|
|
// marked should not escape this
|
|
|
|
token.escaped = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
text = marked_.parser(tokens);
|
|
|
|
|
|
|
|
return text;
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = marked;
|
|
|
|
```
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
Copyright (c) 2011-2012, Christopher Jeffrey. (MIT License)
|
|
|
|
|
|
|
|
See LICENSE for more info.
|