\n',
'type': 'module',
'displayName': 'Something'
}
diff --git a/tools/doc/html.js b/tools/doc/html.js
index 977e0834d4..27e9bee17b 100644
--- a/tools/doc/html.js
+++ b/tools/doc/html.js
@@ -9,6 +9,15 @@ const typeParser = require('./type-parser.js');
module.exports = toHTML;
+// customized heading without id attribute
+var renderer = new marked.Renderer();
+renderer.heading = function(text, level) {
+ return '' + text + '\n';
+};
+marked.setOptions({
+ renderer: renderer
+});
+
// TODO(chrisdickinson): never stop vomitting / fix this.
var gtocPath = path.resolve(path.join(
__dirname,
diff --git a/tools/doc/json.js b/tools/doc/json.js
index 84a042f470..33bde6515b 100644
--- a/tools/doc/json.js
+++ b/tools/doc/json.js
@@ -8,6 +8,15 @@ module.exports = doJSON;
const common = require('./common.js');
const marked = require('marked');
+// customized heading without id attribute
+var renderer = new marked.Renderer();
+renderer.heading = function(text, level) {
+ return '' + text + '\n';
+};
+marked.setOptions({
+ renderer: renderer
+});
+
function doJSON(input, filename, cb) {
var root = {source: filename};
var stack = [root];
diff --git a/tools/doc/node_modules/marked/.travis.yml b/tools/doc/node_modules/marked/.travis.yml
new file mode 100644
index 0000000000..60d00ce140
--- /dev/null
+++ b/tools/doc/node_modules/marked/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+ - "0.10"
+ - "0.8"
+ - "0.6"
diff --git a/tools/doc/node_modules/marked/Gulpfile.js b/tools/doc/node_modules/marked/Gulpfile.js
new file mode 100644
index 0000000000..cebc16a650
--- /dev/null
+++ b/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']);
diff --git a/tools/doc/node_modules/marked/LICENSE b/tools/doc/node_modules/marked/LICENSE
index 40597477c6..a7b812ed61 100644
--- a/tools/doc/node_modules/marked/LICENSE
+++ b/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
of this software and associated documentation files (the "Software"), to deal
diff --git a/tools/doc/node_modules/marked/Makefile b/tools/doc/node_modules/marked/Makefile
index 76904000b5..d9349f0799 100644
--- a/tools/doc/node_modules/marked/Makefile
+++ b/tools/doc/node_modules/marked/Makefile
@@ -1,9 +1,12 @@
all:
@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:
@rm marked.js
@rm marked.min.js
+bench:
+ @node test --bench
+
.PHONY: clean all
diff --git a/tools/doc/node_modules/marked/README.md b/tools/doc/node_modules/marked/README.md
index 1a0747c0d7..efa71aaaab 100644
--- a/tools/doc/node_modules/marked/README.md
+++ b/tools/doc/node_modules/marked/README.md
@@ -1,47 +1,299 @@
# marked
-A full-featured markdown parser and compiler.
-Built for speed.
+> A full-featured markdown parser and compiler, written in JavaScript. Built
+> for speed.
-## Benchmarks
+[![NPM version](https://badge.fury.io/js/marked.png)][badge]
-node v0.4.x
+## Install
``` bash
-$ node test --bench
-marked completed in 12071ms.
-showdown (reuse converter) completed in 27387ms.
-showdown (new converter) completed in 75617ms.
-markdown-js completed in 70069ms.
+npm install marked --save
```
-node v0.6.x
+## Usage
+
+Minimal usage:
-``` bash
-$ node test --bench
-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.
+```js
+var marked = require('marked');
+console.log(marked('I am using __markdown__.'));
+// Outputs:
I am using markdown.
```
-__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
-1000 times. The test suite tests every feature. It doesn't cater to specific
-aspects.
+### Browser
+
+```html
+
+
+
+
+ Marked in the browser
+
+
+
+
+
+
+
+```
-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 '' +
+ text + '';
+},
+
+console.log(marked('# heading+', { renderer: renderer }));
+```
+This code will output the following HTML:
+```html
+
+```
+
+#### 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
-$ npm install marked
+$ marked -o hello.html
+hello world
+^D
+$ cat hello.html
+
hello world
```
-## Another javascript markdown parser
+## Philosophy behind marked
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
@@ -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
disadvantage in the benchmarks above.
-Along with implementing every markdown feature, marked also implements
-[GFM features](http://github.github.com/github-flavored-markdown/).
+Along with implementing every markdown feature, marked also implements [GFM
+features][gfmf].
-## Usage
+## Benchmarks
-``` js
-var marked = require('marked');
-console.log(marked('i am using __markdown__.'));
+node v0.8.x
+
+``` 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.
``` js
-var tokens = marked.lexer(str);
+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);
+```
+
``` bash
$ node
> require('marked').lexer('> i am using marked.')
[ { type: 'blockquote_start' },
- { type: 'text', text: ' i am using marked.' },
+ { type: 'paragraph',
+ text: 'i am using marked.' },
{ type: 'blockquote_end' },
links: {} ]
```
-## CLI
+## Running Tests & Contributing
-``` bash
-$ marked -o hello.html
-hello world
-^D
-$ cat hello.html
-
hello world
-```
+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.
-## Syntax Highlighting
+The marked test suite is set up slightly strangely: `test/new` is for all tests
+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`.
-Marked has an interface that allows for a syntax highlighter to highlight code
-blocks before they're output.
+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`.
-Example implementation:
+To run the tests:
-``` 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);
+``` 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. ``
## License
-Copyright (c) 2011-2012, Christopher Jeffrey. (MIT License)
+Copyright (c) 2011-2014, Christopher Jeffrey. (MIT License)
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
diff --git a/tools/doc/node_modules/marked/bin/marked b/tools/doc/node_modules/marked/bin/marked
index 7d00504ed1..64254fc3eb 100755
--- a/tools/doc/node_modules/marked/bin/marked
+++ b/tools/doc/node_modules/marked/bin/marked
@@ -2,7 +2,7 @@
/**
* Marked CLI
- * Copyright (c) 2011-2012, Christopher Jeffrey (MIT License)
+ * Copyright (c) 2011-2013, Christopher Jeffrey (MIT License)
*/
var fs = require('fs')
@@ -13,7 +13,7 @@ var fs = require('fs')
* Man Page
*/
-var help = function() {
+function help() {
var spawn = require('child_process').spawn;
var options = {
@@ -26,32 +26,54 @@ var help = function() {
spawn('man',
[__dirname + '/../man/marked.1'],
options);
-};
+}
/**
* Main
*/
-var main = function(argv) {
+function main(argv, callback) {
var files = []
- , data = ''
+ , options = {}
, input
, output
, arg
- , tokens;
+ , tokens
+ , opt;
- var getarg = function() {
+ function getarg() {
var arg = argv.shift();
- arg = arg.split('=');
- if (arg.length > 1) {
- argv.unshift(arg.slice(1).join('='));
+
+ if (arg.indexOf('--') === 0) {
+ // e.g. --opt
+ arg = arg.split('=');
+ if (arg.length > 1) {
+ // e.g. --opt=val
+ argv.unshift(arg.slice(1).join('='));
+ }
+ 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[0];
- };
+
+ return arg;
+ }
while (argv.length) {
arg = getarg();
switch (arg) {
+ case '--test':
+ return require('../test').main(process.argv.slice());
case '-o':
case '--output':
output = argv.shift();
@@ -68,48 +90,98 @@ var main = function(argv) {
case '--help':
return help();
default:
- files.push(arg);
+ 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);
+ }
break;
}
}
- if (!input) {
- if (files.length <= 2) {
- var stdin = process.stdin;
-
- stdin.setEncoding('utf8');
- stdin.resume();
-
- stdin.on('data', function(text) {
- data += text;
- });
-
- stdin.on('end', write);
-
- return;
+ function getData(callback) {
+ if (!input) {
+ if (files.length <= 2) {
+ return getStdin(callback);
+ }
+ input = files.pop();
}
- input = files.pop();
+ return fs.readFile(input, 'utf8', callback);
}
- data = fs.readFileSync(input, 'utf8');
- write();
+ return getData(function(err, data) {
+ if (err) return callback(err);
- function write() {
data = tokens
- ? JSON.stringify(marked.lexer(data), null, 2)
- : marked(data);
+ ? JSON.stringify(marked.lexer(data, options), null, 2)
+ : marked(data, options);
if (!output) {
process.stdout.write(data + '\n');
- } else {
- fs.writeFileSync(output, data);
+ return callback();
}
+
+ 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) {
process.title = 'marked';
- main(process.argv.slice());
+ main(process.argv.slice(), function(err, code) {
+ if (err) throw err;
+ return process.exit(code || 0);
+ });
} else {
module.exports = main;
}
diff --git a/tools/doc/node_modules/marked/bower.json b/tools/doc/node_modules/marked/bower.json
new file mode 100644
index 0000000000..a2a8187759
--- /dev/null
+++ b/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 "
+ ],
+ "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"
+ ]
+}
diff --git a/tools/doc/node_modules/marked/component.json b/tools/doc/node_modules/marked/component.json
new file mode 100644
index 0000000000..1d672877f6
--- /dev/null
+++ b/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"
+}
diff --git a/tools/doc/node_modules/marked/doc/broken.md b/tools/doc/node_modules/marked/doc/broken.md
new file mode 100644
index 0000000000..7bfa49e8a9
--- /dev/null
+++ b/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
+
+```
+
+Again, which looks correct to you?
+
+- - -
+
+EXAMPLE:
+
+```
+$ markdown.pl
+* hello
+ * world
+ * hi
+ code
+^D
+
+
hello
+
+
world
+
hi
+ code
+
+
+```
+
+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
+
+
hello
+
+
world
+
hi
+ code
+
+
+```
+
+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
+