Browse Source

tools: update marked dependency

Update module marked. Customize renderer to remove id from heading.

PR-URL: https://github.com/nodejs/node/pull/6396
Reviewed-By: Roman Reiss <me@silverwind.io>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
process-exit-stdio-flushing
Daniel Wang 9 years ago
committed by Anna Henningsen
parent
commit
3f69ea53fd
No known key found for this signature in database GPG Key ID: D8B9F5AEAE84E4CF
  1. 10
      test/doctool/test-doctool-json.js
  2. 9
      tools/doc/html.js
  3. 9
      tools/doc/json.js
  4. 5
      tools/doc/node_modules/marked/.travis.yml
  5. 22
      tools/doc/node_modules/marked/Gulpfile.js
  6. 2
      tools/doc/node_modules/marked/LICENSE
  7. 5
      tools/doc/node_modules/marked/Makefile
  8. 413
      tools/doc/node_modules/marked/README.md
  9. 132
      tools/doc/node_modules/marked/bin/marked
  10. 24
      tools/doc/node_modules/marked/bower.json
  11. 10
      tools/doc/node_modules/marked/component.json
  12. 426
      tools/doc/node_modules/marked/doc/broken.md
  13. 2
      tools/doc/node_modules/marked/doc/todo.md
  14. 1211
      tools/doc/node_modules/marked/lib/marked.js
  15. 80
      tools/doc/node_modules/marked/man/marked.1
  16. 6
      tools/doc/node_modules/marked/marked.min.js
  17. 100
      tools/doc/node_modules/marked/package.json
  18. 2
      tools/doc/package.json

10
test/doctool/test-doctool-json.js

@ -81,7 +81,7 @@ var testData = [
'added': ['v1.0.0'] 'added': ['v1.0.0']
}, },
'desc': '<p>Describe <code>Foobar</code> in more detail ' + 'desc': '<p>Describe <code>Foobar</code> in more detail ' +
'here.\n\n</p>\n', 'here.</p>\n',
'type': 'module', 'type': 'module',
'displayName': 'Foobar' 'displayName': 'Foobar'
}, },
@ -92,7 +92,7 @@ var testData = [
'added': ['v5.3.0', 'v4.2.0'] 'added': ['v5.3.0', 'v4.2.0']
}, },
'desc': '<p>Describe <code>Foobar II</code> in more detail ' + 'desc': '<p>Describe <code>Foobar II</code> in more detail ' +
'here.\n\n</p>\n', 'here.</p>\n',
'type': 'module', 'type': 'module',
'displayName': 'Foobar II' 'displayName': 'Foobar II'
}, },
@ -104,15 +104,15 @@ var testData = [
'deprecated': ['v2.0.0'] 'deprecated': ['v2.0.0']
}, },
'desc': '<p>Describe <code>Deprecated thingy</code> in more ' + 'desc': '<p>Describe <code>Deprecated thingy</code> in more ' +
'detail here.\n\n</p>\n', 'detail here.</p>\n',
'type': 'module', 'type': 'module',
'displayName': 'Deprecated thingy' 'displayName': 'Deprecated thingy'
}, },
{ {
'textRaw': 'Something', 'textRaw': 'Something',
'name': 'something', 'name': 'something',
'desc': '<!-- This is not a metadata comment -->\n\n<p>' + 'desc': '<!-- This is not a metadata comment -->\n<p>' +
'Describe <code>Something</code> in more detail here.\n</p>\n', 'Describe <code>Something</code> in more detail here.</p>\n',
'type': 'module', 'type': 'module',
'displayName': 'Something' 'displayName': 'Something'
} }

9
tools/doc/html.js

@ -9,6 +9,15 @@ const typeParser = require('./type-parser.js');
module.exports = toHTML; module.exports = toHTML;
// customized heading without id attribute
var renderer = new marked.Renderer();
renderer.heading = function(text, level) {
return '<h' + level + '>' + text + '</h' + level + '>\n';
};
marked.setOptions({
renderer: renderer
});
// TODO(chrisdickinson): never stop vomitting / fix this. // TODO(chrisdickinson): never stop vomitting / fix this.
var gtocPath = path.resolve(path.join( var gtocPath = path.resolve(path.join(
__dirname, __dirname,

9
tools/doc/json.js

@ -8,6 +8,15 @@ module.exports = doJSON;
const common = require('./common.js'); const common = require('./common.js');
const marked = require('marked'); const marked = require('marked');
// customized heading without id attribute
var renderer = new marked.Renderer();
renderer.heading = function(text, level) {
return '<h' + level + '>' + text + '</h' + level + '>\n';
};
marked.setOptions({
renderer: renderer
});
function doJSON(input, filename, cb) { function doJSON(input, filename, cb) {
var root = {source: filename}; var root = {source: filename};
var stack = [root]; var stack = [root];

5
tools/doc/node_modules/marked/.travis.yml

@ -0,0 +1,5 @@
language: node_js
node_js:
- "0.10"
- "0.8"
- "0.6"

22
tools/doc/node_modules/marked/Gulpfile.js

@ -0,0 +1,22 @@
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var preserveFirstComment = function() {
var set = false;
return function() {
if (set) return false;
set = true;
return true;
};
};
gulp.task('uglify', function() {
gulp.src('lib/marked.js')
.pipe(uglify({preserveComments: preserveFirstComment()}))
.pipe(concat('marked.min.js'))
.pipe(gulp.dest('.'));
});
gulp.task('default', ['uglify']);

2
tools/doc/node_modules/marked/LICENSE

@ -1,4 +1,4 @@
Copyright (c) 2011-2012, Christopher Jeffrey (https://github.com/chjj/) Copyright (c) 2011-2014, Christopher Jeffrey (https://github.com/chjj/)
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

5
tools/doc/node_modules/marked/Makefile

@ -1,9 +1,12 @@
all: all:
@cp lib/marked.js marked.js @cp lib/marked.js marked.js
@uglifyjs -o marked.min.js marked.js @uglifyjs --comments '/\*[^\0]+?Copyright[^\0]+?\*/' -o marked.min.js lib/marked.js
clean: clean:
@rm marked.js @rm marked.js
@rm marked.min.js @rm marked.min.js
bench:
@node test --bench
.PHONY: clean all .PHONY: clean all

413
tools/doc/node_modules/marked/README.md

@ -1,47 +1,299 @@
# marked # marked
A full-featured markdown parser and compiler. > A full-featured markdown parser and compiler, written in JavaScript. Built
Built for speed. > for speed.
## Benchmarks [![NPM version](https://badge.fury.io/js/marked.png)][badge]
node v0.4.x ## Install
``` bash ``` bash
$ node test --bench npm install marked --save
marked completed in 12071ms.
showdown (reuse converter) completed in 27387ms.
showdown (new converter) completed in 75617ms.
markdown-js completed in 70069ms.
``` ```
node v0.6.x ## Usage
Minimal usage:
``` bash ```js
$ node test --bench var marked = require('marked');
marked completed in 6485ms. console.log(marked('I am using __markdown__.'));
marked (with gfm) completed in 7466ms. // Outputs: <p>I am using <strong>markdown</strong>.</p>
discount completed in 7169ms.
showdown (reuse converter) completed in 15937ms.
showdown (new converter) completed in 18279ms.
markdown-js completed in 23572ms.
``` ```
__Marked is now faster than Discount, which is written in C.__ Example setting options with default values:
```js
var marked = require('marked');
marked.setOptions({
renderer: new marked.Renderer(),
gfm: true,
tables: true,
breaks: false,
pedantic: false,
sanitize: true,
smartLists: true,
smartypants: false
});
console.log(marked('I am using __markdown__.'));
```
For those feeling skeptical: These benchmarks run the entire markdown test suite ### Browser
1000 times. The test suite tests every feature. It doesn't cater to specific
aspects. ```html
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>Marked in the browser</title>
<script src="lib/marked.js"></script>
</head>
<body>
<div id="content"></div>
<script>
document.getElementById('content').innerHTML =
marked('# Marked in browser\n\nRendered by **marked**.');
</script>
</body>
</html>
```
Benchmarks for other engines to come (?). ## marked(markdownString [,options] [,callback])
## Install ### markdownString
Type: `string`
String of markdown source to be compiled.
### options
Type: `object`
Hash of options. Can also be set using the `marked.setOptions` method as seen
above.
### callback
Type: `function`
Function called when the `markdownString` has been fully parsed when using
async highlighting. If the `options` argument is omitted, this can be used as
the second argument.
## Options
### highlight
Type: `function`
A function to highlight code blocks. The first example below uses async highlighting with
[node-pygmentize-bundled][pygmentize], and the second is a synchronous example using
[highlight.js][highlight]:
```js
var marked = require('marked');
var markdownString = '```js\n console.log("hello"); \n```';
// Async highlighting with pygmentize-bundled
marked.setOptions({
highlight: function (code, lang, callback) {
require('pygmentize-bundled')({ lang: lang, format: 'html' }, code, function (err, result) {
callback(err, result.toString());
});
}
});
// Using async version of marked
marked(markdownString, function (err, content) {
if (err) throw err;
console.log(content);
});
// Synchronous highlighting with highlight.js
marked.setOptions({
highlight: function (code) {
return require('highlight.js').highlightAuto(code).value;
}
});
console.log(marked(markdownString));
```
#### highlight arguments
`code`
Type: `string`
The section of code to pass to the highlighter.
`lang`
Type: `string`
The programming language specified in the code block.
`callback`
Type: `function`
The callback function to call when using an async highlighter.
### renderer
Type: `object`
Default: `new Renderer()`
An object containing functions to render tokens to HTML.
#### Overriding renderer methods
The renderer option allows you to render tokens in a custom manner. Here is an
example of overriding the default heading token rendering by adding an embedded anchor tag like on GitHub:
```javascript
var marked = require('marked');
var renderer = new marked.Renderer();
renderer.heading = function (text, level) {
var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
return '<h' + level + '><a name="' +
escapedText +
'" class="anchor" href="#' +
escapedText +
'"><span class="header-link"></span></a>' +
text + '</h' + level + '>';
},
console.log(marked('# heading+', { renderer: renderer }));
```
This code will output the following HTML:
```html
<h1>
<a name="heading-" class="anchor" href="#heading-">
<span class="header-link"></span>
</a>
heading+
</h1>
```
#### Block level renderer methods
- code(*string* code, *string* language)
- blockquote(*string* quote)
- html(*string* html)
- heading(*string* text, *number* level)
- hr()
- list(*string* body, *boolean* ordered)
- listitem(*string* text)
- paragraph(*string* text)
- table(*string* header, *string* body)
- tablerow(*string* content)
- tablecell(*string* content, *object* flags)
`flags` has the following properties:
```js
{
header: true || false,
align: 'center' || 'left' || 'right'
}
```
#### Inline level renderer methods
- strong(*string* text)
- em(*string* text)
- codespan(*string* code)
- br()
- del(*string* text)
- link(*string* href, *string* title, *string* text)
- image(*string* href, *string* title, *string* text)
### gfm
Type: `boolean`
Default: `true`
Enable [GitHub flavored markdown][gfm].
### tables
Type: `boolean`
Default: `true`
Enable GFM [tables][tables].
This option requires the `gfm` option to be true.
### breaks
Type: `boolean`
Default: `false`
Enable GFM [line breaks][breaks].
This option requires the `gfm` option to be true.
### pedantic
Type: `boolean`
Default: `false`
Conform to obscure parts of `markdown.pl` as much as possible. Don't fix any of
the original markdown bugs or poor behavior.
### sanitize
Type: `boolean`
Default: `false`
Sanitize the output. Ignore any HTML that has been input.
### smartLists
Type: `boolean`
Default: `true`
Use smarter list behavior than the original markdown. May eventually be
default with the old behavior moved into `pedantic`.
### smartypants
Type: `boolean`
Default: `false`
Use "smart" typograhic punctuation for things like quotes and dashes.
## Access to lexer and parser
You also have direct access to the lexer and parser if you so desire.
``` js
var tokens = marked.lexer(text, options);
console.log(marked.parser(tokens));
```
``` js
var lexer = new marked.Lexer(options);
var tokens = lexer.lex(text);
console.log(tokens);
console.log(lexer.rules);
```
## CLI
``` bash ``` bash
$ npm install marked $ marked -o hello.html
hello world
^D
$ cat hello.html
<p>hello world</p>
``` ```
## Another javascript markdown parser ## Philosophy behind marked
The point of marked was to create a markdown compiler where it was possible to 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 frequently parse huge chunks of markdown without having to worry about
@ -58,78 +310,97 @@ 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 of a markdown rendering. In fact, this is why marked could be considered at a
disadvantage in the benchmarks above. disadvantage in the benchmarks above.
Along with implementing every markdown feature, marked also implements Along with implementing every markdown feature, marked also implements [GFM
[GFM features](http://github.github.com/github-flavored-markdown/). features][gfmf].
## Usage ## Benchmarks
``` js node v0.8.x
var marked = require('marked');
console.log(marked('i am using __markdown__.')); ``` bash
$ node test --bench
marked completed in 3411ms.
marked (gfm) completed in 3727ms.
marked (pedantic) completed in 3201ms.
robotskirt completed in 808ms.
showdown (reuse converter) completed in 11954ms.
showdown (new converter) completed in 17774ms.
markdown-js completed in 17191ms.
``` ```
__Marked is now faster than Discount, which is written in C.__
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.
### Pro level
You also have direct access to the lexer and parser if you so desire. You also have direct access to the lexer and parser if you so desire.
``` js ``` js
var tokens = marked.lexer(str); var tokens = marked.lexer(text, options);
console.log(marked.parser(tokens)); console.log(marked.parser(tokens));
``` ```
``` js
var lexer = new marked.Lexer(options);
var tokens = lexer.lex(text);
console.log(tokens);
console.log(lexer.rules);
```
``` bash ``` bash
$ node $ node
> require('marked').lexer('> i am using marked.') > require('marked').lexer('> i am using marked.')
[ { type: 'blockquote_start' }, [ { type: 'blockquote_start' },
{ type: 'text', text: ' i am using marked.' }, { type: 'paragraph',
text: 'i am using marked.' },
{ type: 'blockquote_end' }, { type: 'blockquote_end' },
links: {} ] links: {} ]
``` ```
## CLI ## Running Tests & Contributing
``` bash
$ marked -o hello.html
hello world
^D
$ cat hello.html
<p>hello world</p>
```
## Syntax Highlighting If you want to submit a pull request, make sure your changes pass the test
suite. If you're adding a new feature, be sure to add your own test.
Marked has an interface that allows for a syntax highlighter to highlight code The marked test suite is set up slightly strangely: `test/new` is for all tests
blocks before they're output. that are not part of the original markdown.pl test suite (this is where your
test should go if you make one). `test/original` is only for the original
markdown.pl tests. `test/tests` houses both types of tests after they have been
combined and moved/generated by running `node test --fix` or `marked --test
--fix`.
Example implementation: In other words, if you have a test to add, add it to `test/new/` and then
regenerate the tests with `node test --fix`. Commit the result. If your test
uses a certain feature, for example, maybe it assumes GFM is *not* enabled, you
can add `.nogfm` to the filename. So, `my-test.text` becomes
`my-test.nogfm.text`. You can do this with any marked option. Say you want
line breaks and smartypants enabled, your filename should be:
`my-test.breaks.smartypants.text`.
``` js To run the tests:
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); ``` bash
cd marked/
node test
```
return text; ### Contribution and License Agreement
};
module.exports = marked; If you contribute code to this project, you are implicitly allowing your code
``` to be distributed under the MIT license. You are also implicitly verifying that
all code is your original work. `</legalese>`
## License ## License
Copyright (c) 2011-2012, Christopher Jeffrey. (MIT License) Copyright (c) 2011-2014, Christopher Jeffrey. (MIT License)
See LICENSE for more info. See LICENSE for more info.
[gfm]: https://help.github.com/articles/github-flavored-markdown
[gfmf]: http://github.github.com/github-flavored-markdown/
[pygmentize]: https://github.com/rvagg/node-pygmentize-bundled
[highlight]: https://github.com/isagalaev/highlight.js
[badge]: http://badge.fury.io/js/marked
[tables]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables
[breaks]: https://help.github.com/articles/github-flavored-markdown#newlines

132
tools/doc/node_modules/marked/bin/marked

@ -2,7 +2,7 @@
/** /**
* Marked CLI * Marked CLI
* Copyright (c) 2011-2012, Christopher Jeffrey (MIT License) * Copyright (c) 2011-2013, Christopher Jeffrey (MIT License)
*/ */
var fs = require('fs') var fs = require('fs')
@ -13,7 +13,7 @@ var fs = require('fs')
* Man Page * Man Page
*/ */
var help = function() { function help() {
var spawn = require('child_process').spawn; var spawn = require('child_process').spawn;
var options = { var options = {
@ -26,32 +26,54 @@ var help = function() {
spawn('man', spawn('man',
[__dirname + '/../man/marked.1'], [__dirname + '/../man/marked.1'],
options); options);
}; }
/** /**
* Main * Main
*/ */
var main = function(argv) { function main(argv, callback) {
var files = [] var files = []
, data = '' , options = {}
, input , input
, output , output
, arg , arg
, tokens; , tokens
, opt;
var getarg = function() { function getarg() {
var arg = argv.shift(); var arg = argv.shift();
if (arg.indexOf('--') === 0) {
// e.g. --opt
arg = arg.split('='); arg = arg.split('=');
if (arg.length > 1) { if (arg.length > 1) {
// e.g. --opt=val
argv.unshift(arg.slice(1).join('=')); argv.unshift(arg.slice(1).join('='));
} }
return arg[0]; arg = arg[0];
}; } else if (arg[0] === '-') {
if (arg.length > 2) {
// e.g. -abc
argv = arg.substring(1).split('').map(function(ch) {
return '-' + ch;
}).concat(argv);
arg = argv.shift();
} else {
// e.g. -a
}
} else {
// e.g. foo
}
return arg;
}
while (argv.length) { while (argv.length) {
arg = getarg(); arg = getarg();
switch (arg) { switch (arg) {
case '--test':
return require('../test').main(process.argv.slice());
case '-o': case '-o':
case '--output': case '--output':
output = argv.shift(); output = argv.shift();
@ -68,48 +90,98 @@ var main = function(argv) {
case '--help': case '--help':
return help(); return help();
default: default:
if (arg.indexOf('--') === 0) {
opt = camelize(arg.replace(/^--(no-)?/, ''));
if (!marked.defaults.hasOwnProperty(opt)) {
continue;
}
if (arg.indexOf('--no-') === 0) {
options[opt] = typeof marked.defaults[opt] !== 'boolean'
? null
: false;
} else {
options[opt] = typeof marked.defaults[opt] !== 'boolean'
? argv.shift()
: true;
}
} else {
files.push(arg); files.push(arg);
}
break; break;
} }
} }
function getData(callback) {
if (!input) { if (!input) {
if (files.length <= 2) { if (files.length <= 2) {
var stdin = process.stdin; return getStdin(callback);
stdin.setEncoding('utf8');
stdin.resume();
stdin.on('data', function(text) {
data += text;
});
stdin.on('end', write);
return;
} }
input = files.pop(); input = files.pop();
} }
return fs.readFile(input, 'utf8', callback);
}
data = fs.readFileSync(input, 'utf8'); return getData(function(err, data) {
write(); if (err) return callback(err);
function write() {
data = tokens data = tokens
? JSON.stringify(marked.lexer(data), null, 2) ? JSON.stringify(marked.lexer(data, options), null, 2)
: marked(data); : marked(data, options);
if (!output) { if (!output) {
process.stdout.write(data + '\n'); process.stdout.write(data + '\n');
} else { return callback();
fs.writeFileSync(output, data);
} }
return fs.writeFile(output, data, callback);
});
}
/**
* Helpers
*/
function getStdin(callback) {
var stdin = process.stdin
, buff = '';
stdin.setEncoding('utf8');
stdin.on('data', function(data) {
buff += data;
});
stdin.on('error', function(err) {
return callback(err);
});
stdin.on('end', function() {
return callback(null, buff);
});
try {
stdin.resume();
} catch (e) {
callback(e);
} }
}; }
function camelize(text) {
return text.replace(/(\w)-(\w)/g, function(_, a, b) {
return a + b.toUpperCase();
});
}
/**
* Expose / Entry Point
*/
if (!module.parent) { if (!module.parent) {
process.title = 'marked'; process.title = 'marked';
main(process.argv.slice()); main(process.argv.slice(), function(err, code) {
if (err) throw err;
return process.exit(code || 0);
});
} else { } else {
module.exports = main; module.exports = main;
} }

24
tools/doc/node_modules/marked/bower.json

@ -0,0 +1,24 @@
{
"name": "marked",
"version": "0.3.4",
"homepage": "https://github.com/chjj/marked",
"authors": [
"Christopher Jeffrey <chjjeffrey@gmail.com>"
],
"description": "A markdown parser built for speed",
"keywords": [
"markdown",
"markup",
"html"
],
"main": "lib/marked.js",
"license": "MIT",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"app/bower_components",
"test",
"tests"
]
}

10
tools/doc/node_modules/marked/component.json

@ -0,0 +1,10 @@
{
"name": "marked",
"version": "0.3.4",
"repo": "chjj/marked",
"description": "A markdown parser built for speed",
"keywords": ["markdown", "markup", "html"],
"scripts": ["lib/marked.js"],
"main": "lib/marked.js",
"license": "MIT"
}

426
tools/doc/node_modules/marked/doc/broken.md

@ -0,0 +1,426 @@
# Markdown is broken
I have a lot of scraps of markdown engine oddities that I've collected over the
years. What you see below is slightly messy, but it's what I've managed to
cobble together to illustrate the differences between markdown engines, and
why, if there ever is a markdown specification, it has to be absolutely
thorough. There are a lot more of these little differences I have documented
elsewhere. I know I will find them lingering on my disk one day, but until
then, I'll continue to add whatever strange nonsensical things I find.
Some of these examples may only mention a particular engine compared to marked.
However, the examples with markdown.pl could easily be swapped out for
discount, upskirt, or markdown.js, and you would very easily see even more
inconsistencies.
A lot of this was written when I was very unsatisfied with the inconsistencies
between markdown engines. Please excuse the frustration noticeable in my
writing.
## Examples of markdown's "stupid" list parsing
```
$ markdown.pl
* item1
* item2
text
^D
<ul>
<li><p>item1</p>
<ul>
<li>item2</li>
</ul>
<p><p>text</p></li>
</ul></p>
```
```
$ marked
* item1
* item2
text
^D
<ul>
<li><p>item1</p>
<ul>
<li>item2</li>
</ul>
<p>text</p>
</li>
</ul>
```
Which looks correct to you?
- - -
```
$ markdown.pl
* hello
> world
^D
<p><ul>
<li>hello</p>
<blockquote>
<p>world</li>
</ul></p>
</blockquote>
```
```
$ marked
* hello
> world
^D
<ul>
<li>hello<blockquote>
<p>world</p>
</blockquote>
</li>
</ul>
```
Again, which looks correct to you?
- - -
EXAMPLE:
```
$ markdown.pl
* hello
* world
* hi
code
^D
<ul>
<li>hello
<ul>
<li>world</li>
<li>hi
code</li>
</ul></li>
</ul>
```
The code isn't a code block even though it's after the bullet margin. I know,
lets give it two more spaces, effectively making it 8 spaces past the bullet.
```
$ markdown.pl
* hello
* world
* hi
code
^D
<ul>
<li>hello
<ul>
<li>world</li>
<li>hi
code</li>
</ul></li>
</ul>
```
And, it's still not a code block. Did you also notice that the 3rd item isn't
even its own list? Markdown screws that up too because of its indentation
unaware parsing.
- - -
Let's look at some more examples of markdown's list parsing:
```
$ markdown.pl
* item1
* item2
text
^D
<ul>
<li><p>item1</p>
<ul>
<li>item2</li>
</ul>
<p><p>text</p></li>
</ul></p>
```
Misnested tags.
```
$ marked
* item1
* item2
text
^D
<ul>
<li><p>item1</p>
<ul>
<li>item2</li>
</ul>
<p>text</p>
</li>
</ul>
```
Which looks correct to you?
- - -
```
$ markdown.pl
* hello
> world
^D
<p><ul>
<li>hello</p>
<blockquote>
<p>world</li>
</ul></p>
</blockquote>
```
More misnested tags.
```
$ marked
* hello
> world
^D
<ul>
<li>hello<blockquote>
<p>world</p>
</blockquote>
</li>
</ul>
```
Again, which looks correct to you?
- - -
# Why quality matters - Part 2
``` bash
$ markdown.pl
* hello
> world
^D
<p><ul>
<li>hello</p>
<blockquote>
<p>world</li>
</ul></p>
</blockquote>
```
``` bash
$ sundown # upskirt
* hello
> world
^D
<ul>
<li>hello
&gt; world</li>
</ul>
```
``` bash
$ marked
* hello
> world
^D
<ul><li>hello <blockquote><p>world</p></blockquote></li></ul>
```
Which looks correct to you?
- - -
See: https://github.com/evilstreak/markdown-js/issues/23
``` bash
$ markdown.pl # upskirt/markdown.js/discount
* hello
var a = 1;
* world
^D
<ul>
<li>hello
var a = 1;</li>
<li>world</li>
</ul>
```
``` bash
$ marked
* hello
var a = 1;
* world
^D
<ul><li>hello
<pre>code>var a = 1;</code></pre></li>
<li>world</li></ul>
```
Which looks more reasonable? Why shouldn't code blocks be able to appear in
list items in a sane way?
- - -
``` bash
$ markdown.js
<div>hello</div>
<span>hello</span>
^D
<p>&lt;div&gt;hello&lt;/div&gt;</p>
<p>&lt;span&gt;hello&lt;/span&gt;</p>
```
``` bash
$ marked
<div>hello</div>
<span>hello</span>
^D
<div>hello</div>
<p><span>hello</span>
</p>
```
- - -
See: https://github.com/evilstreak/markdown-js/issues/27
``` bash
$ markdown.js
[![an image](/image)](/link)
^D
<p><a href="/image)](/link">![an image</a></p>
```
``` bash
$ marked
[![an image](/image)](/link)
^D
<p><a href="/link"><img src="/image" alt="an image"></a>
</p>
```
- - -
See: https://github.com/evilstreak/markdown-js/issues/24
``` bash
$ markdown.js
> a
> b
> c
^D
<blockquote><p>a</p><p>bundefined&gt; c</p></blockquote>
```
``` bash
$ marked
> a
> b
> c
^D
<blockquote><p>a
</p></blockquote>
<blockquote><p>b
</p></blockquote>
<blockquote><p>c
</p></blockquote>
```
- - -
``` bash
$ markdown.pl
* hello
* world
how
are
you
* today
* hi
^D
<ul>
<li><p>hello</p>
<ul>
<li>world
how</li>
</ul>
<p>are
you</p>
<ul>
<li>today</li>
</ul></li>
<li>hi</li>
</ul>
```
``` bash
$ marked
* hello
* world
how
are
you
* today
* hi
^D
<ul>
<li><p>hello</p>
<ul>
<li><p>world
how</p>
<p>are
you</p>
</li>
<li><p>today</p>
</li>
</ul>
</li>
<li>hi</li>
</ul>
```

2
tools/doc/node_modules/marked/doc/todo.md

@ -0,0 +1,2 @@
# Todo

1211
tools/doc/node_modules/marked/lib/marked.js

File diff suppressed because it is too large

80
tools/doc/node_modules/marked/man/marked.1

@ -1,39 +1,91 @@
.ds q \N'34' .ds q \N'34'
.TH marked 1 .TH marked 1 "2014-01-31" "v0.3.1" "marked.js"
.SH NAME .SH NAME
marked \- a javascript markdown parser marked \- a javascript markdown parser
.SH SYNOPSIS .SH SYNOPSIS
.nf .B marked
.B marked [\-o output] [\-i input] [\-th] [\-o \fI<output>\fP] [\-i \fI<input>\fP] [\-\-help]
.fi [\-\-tokens] [\-\-pedantic] [\-\-gfm]
[\-\-breaks] [\-\-tables] [\-\-sanitize]
[\-\-smart\-lists] [\-\-lang\-prefix \fI<prefix>\fP]
[\-\-no\-etc...] [\-\-silent] [\fIfilename\fP]
.SH DESCRIPTION .SH DESCRIPTION
.B marked .B marked
is a full-featured javascript markdown parser, built for speed. It also includes is a full-featured javascript markdown parser, built for speed. It also includes
multiple GFM features. multiple GFM features.
.SH EXAMPLES
.TP
cat in.md | marked > out.html
.TP
echo "hello *world*" | marked
.TP
marked \-o out.html in.md \-\-gfm
.TP
marked \-\-output="hello world.html" \-i in.md \-\-no-breaks
.SH OPTIONS .SH OPTIONS
.TP .TP
.BI \-o,\ \-\-output\ [output] .BI \-o,\ \-\-output\ [\fIoutput\fP]
Specify file output. If none is specified, write to stdout. Specify file output. If none is specified, write to stdout.
.TP .TP
.BI \-i,\ \-\-input\ [input] .BI \-i,\ \-\-input\ [\fIinput\fP]
Specify file input, otherwise use last argument as input file. If no input file Specify file input, otherwise use last argument as input file. If no input file
is specified, read from stdin. is specified, read from stdin.
.TP .TP
.BI \-t,\ \-\-tokens .BI \-t,\ \-\-tokens
Output a token stream instead of html. Output a token stream instead of html.
.TP .TP
.BI \-h,\ \-\-help .BI \-\-pedantic
Display help information. Conform to obscure parts of markdown.pl as much as possible. Don't fix original
.SH EXAMPLES markdown bugs.
.TP .TP
cat in.md | marked > out.html .BI \-\-gfm
Enable github flavored markdown.
.TP .TP
echo "hello *world*" | marked .BI \-\-breaks
Enable GFM line breaks. Only works with the gfm option.
.TP
.BI \-\-tables
Enable GFM tables. Only works with the gfm option.
.TP
.BI \-\-sanitize
Sanitize output. Ignore any HTML input.
.TP
.BI \-\-smart\-lists
Use smarter list behavior than the original markdown.
.TP .TP
marked -o out.html in.md .BI \-\-lang\-prefix\ [\fIprefix\fP]
Set the prefix for code block classes.
.TP .TP
marked --output="hello world.html" -i in.md .BI \-\-mangle
Mangle email addresses.
.TP
.BI \-\-no\-sanitize,\ \-no-etc...
The inverse of any of the marked options above.
.TP
.BI \-\-silent
Silence error output.
.TP
.BI \-h,\ \-\-help
Display help information.
.SH CONFIGURATION
For configuring and running programmatically.
.B Example
require('marked')('*foo*', { gfm: true });
.SH BUGS .SH BUGS
Please report any bugs to https://github.com/chjj/marked. Please report any bugs to https://github.com/chjj/marked.
.SH LICENSE .SH LICENSE
Copyright (c) 2011-2012, Christopher Jeffrey (MIT License) Copyright (c) 2011-2014, Christopher Jeffrey (MIT License).
.SH "SEE ALSO"
.BR markdown(1),
.BR node.js(1)

6
tools/doc/node_modules/marked/marked.min.js

File diff suppressed because one or more lines are too long

100
tools/doc/node_modules/marked/package.json

@ -1,15 +1,95 @@
{ {
"_args": [
[
"marked",
"/Users/firedfox/git/node/tools/doc"
]
],
"_from": "marked@latest",
"_id": "marked@0.3.5",
"_inCache": true,
"_installable": true,
"_location": "/marked",
"_nodeVersion": "0.12.7",
"_npmUser": {
"email": "chjjeffrey@gmail.com",
"name": "chjj"
},
"_npmVersion": "2.13.2",
"_phantomChildren": {},
"_requested": {
"name": "marked", "name": "marked",
"raw": "marked",
"rawSpec": "",
"scope": null,
"spec": "latest",
"type": "tag"
},
"_requiredBy": [
"/"
],
"_resolved": "https://registry.npmjs.org/marked/-/marked-0.3.5.tgz",
"_shasum": "4113a15ac5d7bca158a5aae07224587b9fa15b94",
"_shrinkwrap": null,
"_spec": "marked",
"_where": "/Users/firedfox/git/node/tools/doc",
"author": {
"name": "Christopher Jeffrey"
},
"bin": {
"marked": "./bin/marked"
},
"bugs": {
"url": "http://github.com/chjj/marked/issues"
},
"dependencies": {},
"description": "A markdown parser built for speed", "description": "A markdown parser built for speed",
"author": "Christopher Jeffrey", "devDependencies": {
"version": "0.1.9", "gulp": "^3.8.11",
"main": "./lib/marked.js", "gulp-concat": "^2.5.2",
"bin": "./bin/marked", "gulp-uglify": "^1.1.0",
"man": "./man/marked.1", "markdown": "*",
"preferGlobal": false, "showdown": "*"
"repository": "git://github.com/chjj/marked.git", },
"directories": {},
"dist": {
"shasum": "4113a15ac5d7bca158a5aae07224587b9fa15b94",
"tarball": "https://registry.npmjs.org/marked/-/marked-0.3.5.tgz"
},
"gitHead": "88ce4df47c4d994dc1b1df1477a21fb893e11ddc",
"homepage": "https://github.com/chjj/marked", "homepage": "https://github.com/chjj/marked",
"bugs": "http://github.com/chjj/marked/issues", "keywords": [
"keywords": [ "markdown", "markup", "html" ], "markdown",
"tags": [ "markdown", "markup", "html" ] "markup",
"html"
],
"license": "MIT",
"main": "./lib/marked.js",
"maintainers": [
{
"email": "chjjeffrey@gmail.com",
"name": "chjj"
}
],
"man": [
"./man/marked.1"
],
"name": "marked",
"optionalDependencies": {},
"preferGlobal": true,
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/chjj/marked.git"
},
"scripts": {
"bench": "node test --bench",
"test": "node test"
},
"tags": [
"markdown",
"markup",
"html"
],
"version": "0.3.5"
} }

2
tools/doc/package.json

@ -7,7 +7,7 @@
"node": ">=0.6.10" "node": ">=0.6.10"
}, },
"dependencies": { "dependencies": {
"marked": "~0.1.9", "marked": "^0.3.5",
"js-yaml": "^3.5.2" "js-yaml": "^3.5.2"
}, },
"devDependencies": {}, "devDependencies": {},

Loading…
Cancel
Save