diff --git a/assets/app/config.js b/assets/app/config.js
index c5d3f28..b0ab3b8 100644
--- a/assets/app/config.js
+++ b/assets/app/config.js
@@ -16,6 +16,7 @@
return {
paths: {
backbone: prefix + '/vendor/backbone/backbone',
+ commonmark: prefix + '/vendor/commonmark/dist/commonmark',
handlebars: prefix + '/vendor/handlebars/handlebars.runtime',
jquery: prefix + '/vendor/jquery/dist/jquery',
marionette: prefix + '/vendor/marionette/lib/backbone.marionette',
diff --git a/assets/app/lib/markdown.js b/assets/app/lib/markdown.js
new file mode 100644
index 0000000..65b91ff
--- /dev/null
+++ b/assets/app/lib/markdown.js
@@ -0,0 +1,8 @@
+define(['commonmark'], function (commonmark) {
+ return function convert(source) {
+ var reader = new commonmark.Parser();
+ var writer = new commonmark.HtmlRenderer();
+ var parsed = reader.parse(source);
+ return writer.render(parsed);
+ };
+});
diff --git a/bower.json b/bower.json
index 1f3f4b9..1fd9dab 100644
--- a/bower.json
+++ b/bower.json
@@ -20,6 +20,7 @@
"marionette": "~2.3.1",
"normalize-scss": "~3.0.2",
"requirejs": "~2.1.15",
- "handlebars": "~1.3.0"
+ "handlebars": "~1.3.0",
+ "commonmark": "~0.17.1"
}
}
diff --git a/test/app/lib/markdown.js b/test/app/lib/markdown.js
new file mode 100644
index 0000000..4a1983e
--- /dev/null
+++ b/test/app/lib/markdown.js
@@ -0,0 +1,10 @@
+define(['lib/markdown'], function (markdown) {
+ describe('markdown', function () {
+ it('→ converts to html', function () {
+ var expected = '
some example ' +
+ 'yo
\n';
+ var actual = markdown('some *example* [yo](http://example.com)');
+ expect(actual).toBe(expected);
+ });
+ });
+});
diff --git a/vendor/commonmark/.bower.json b/vendor/commonmark/.bower.json
new file mode 100644
index 0000000..75c6df7
--- /dev/null
+++ b/vendor/commonmark/.bower.json
@@ -0,0 +1,35 @@
+{
+ "name": "commonmark",
+ "main": "dist/commonmark.js",
+ "homepage": "https://github.com/jgm/commonmark.js",
+ "description": "CommonMark parsing and rendering library",
+ "license": "BSD-2-Clause",
+ "ignore": [
+ "**/.*",
+ "lib",
+ "bin",
+ "test",
+ "tools",
+ "bench",
+ "Makefile",
+ "README.md",
+ "dingus.html",
+ "eslint.json",
+ "package.json"
+ ],
+ "keywords": [
+ "markdown",
+ "commonmark"
+ ],
+ "version": "0.17.1",
+ "_release": "0.17.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "0.17.1",
+ "commit": "d89adcd2ba20845b6e5e9f0f8814ce6c43dbd3c8"
+ },
+ "_source": "git://github.com/jgm/commonmark.js.git",
+ "_target": "~0.17.1",
+ "_originalSource": "commonmark",
+ "_direct": true
+}
\ No newline at end of file
diff --git a/vendor/commonmark/CONTRIBUTING.md b/vendor/commonmark/CONTRIBUTING.md
new file mode 100644
index 0000000..136d829
--- /dev/null
+++ b/vendor/commonmark/CONTRIBUTING.md
@@ -0,0 +1,25 @@
+Contributing
+============
+
+Submitting bug reports
+----------------------
+
+There is a [forum for discussing CommonMark](http://talk.commonmark.org);
+use it for questions and discussions that might be open-ended. Use the
+[github issue tracker](http://github.com/jgm/commonmark.js/issues)
+only for simple, clear, actionable issues.
+
+Submitting pull requests
+------------------------
+
+1. A good pull request makes one logical change and does not mix
+ several independent changes.
+2. If you have several commits that successively refine a single
+ logical change, rebase them into a single clean commit.
+3. Ensure that all tests pass (`make test`).
+4. Use `make lint` to check for problems.
+5. Ensure that performance has not been affected (`make bench` before
+ and after the change).
+6. Changes to `dist` should not be committed. (We will regenerate
+ `dist/commonmark.js` before a release.)
+7. Follow the style of the existing code.
diff --git a/vendor/commonmark/LICENSE b/vendor/commonmark/LICENSE
new file mode 100644
index 0000000..e16d57a
--- /dev/null
+++ b/vendor/commonmark/LICENSE
@@ -0,0 +1,115 @@
+Copyright (c) 2014, John MacFarlane
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---
+
+lib/normalize-reference.js is a slightly modified version of
+https://github.com/dmoscrop/fold-case:
+
+Copyright Mathias Bynens
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+---
+
+lib/from-code-point.js is derived from a polyfill
+Copyright Mathias Bynens
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+---
+
+bench/samples/*.md:
+
+With the exception of `bench/samples/README.md`, the samples in
+`bench/samples` are taken from https://github.com/markdown-it/markdown-it.
+
+Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+---
+
+The CommonMark spec (spec.txt) in test/ is
+
+Copyright (C) 2014-15 John MacFarlane
+
+Released under the Creative Commons CC-BY-SA 4.0 license:
+.
diff --git a/vendor/commonmark/bower.json b/vendor/commonmark/bower.json
new file mode 100644
index 0000000..3522309
--- /dev/null
+++ b/vendor/commonmark/bower.json
@@ -0,0 +1,24 @@
+{
+ "name": "commonmark",
+ "main": "dist/commonmark.js",
+ "homepage": "https://github.com/jgm/commonmark.js",
+ "description": "CommonMark parsing and rendering library",
+ "license": "BSD-2-Clause",
+ "ignore": [
+ "**/.*",
+ "lib",
+ "bin",
+ "test",
+ "tools",
+ "bench",
+ "Makefile",
+ "README.md",
+ "dingus.html",
+ "eslint.json",
+ "package.json"
+ ],
+ "keywords": [
+ "markdown",
+ "commonmark"
+ ]
+}
diff --git a/vendor/commonmark/changelog.txt b/vendor/commonmark/changelog.txt
new file mode 100644
index 0000000..12b6d91
--- /dev/null
+++ b/vendor/commonmark/changelog.txt
@@ -0,0 +1,120 @@
+[0.17.1]
+
+ * Reorganized block parsing in a more modular way. There is now
+ a `blocks` property of the parser that contains information
+ about each type of block, which is used in parsing. Ultimately
+ this will make it easier to extend the library, but the project
+ is still only partially completed.
+ * Code cleanup and simplification, with some performance optimizations.
+ * Removed version from `bower.json`. Bower takes version from tags.
+ * Initialize some properties at beginning of 'parse'.
+ This fixes some mistakes in source position when the
+ same Parser object was used to parse multiple times (#3).
+ * Made parsing of backslash escapes a bit more efficient.
+ * Removed refmap parameter of InlineParser.parse().
+ Instead, set the refmap property before running the parser.
+ * Set `_string_content` to null after using, allowing it to be GCd.
+ * Removed `_strings`; just append to `_string_content`.
+ This gives better performance with v8.
+ * Format benchmarks so that samples are linked.
+ * Added in-browser benchmark.
+ * Added API documentation to README.
+ * xml renderer: use `sourcepos` attribute, not `data-sourcepos`.
+ * Changed license to 2-clause BSD. Added clause for spec.
+
+[0.17.0]
+
+ * Renamed `DocParser` -> `Parser`.
+ Note: library users should update their code or it will break.
+ * Added `normalize-reference.js`. This does a proper unicode case
+ fold instead of just using `toUpperCase`. It is also faster,
+ partly because we can do one pass for space and case normalization.
+ * Removed artificial distinction btw FencedCode, IndentedCode
+ in `blocks.js`.
+ * Removed vestigial `ReferenceDef` node type.
+ * Added getters and (in some cases) setters for "public" properties
+ of Nodes. Renamed non-public properties to start with underscore.
+ This will allow us to keep the API stable while changing the
+ underlying data structure. And it will avoid exposing properties
+ that have only an instrumental value in parsing.
+ * Removed `Node.toObject()`.
+ * Rename `bullet_char` -> `bulletChar`.
+ * Check for blank line before checking indent in Item.
+ * Removed unnecessary setting of default `tight=true` in `finalize`.
+ We do that when the `listData` object is initialized.
+ * Performance optimization - avoid repeating scan for nonspace.
+ * Moved check for closing fence to close-block-check section.
+ This is a more logical arrangement and addresses jgm/CommonMark#285.
+ * Added `offset` property to `DocParser`. Use this in `addLine`,
+ instead of `offset` parameter, which has been removed.
+ * Implemented new spec for emphasis and strong emphasis with `_`.
+ * `html.js` - explicitly specify second parameter of `escapeXml`.
+ * Fixed escaping error in CDATA regex.
+ * Removed some dead code and fixed incorrect call to `addChild`
+ with three arguments (Robin Stocker).
+ * Adjust `lastLineLength` before returning after close fence.
+ * Propagate `lastLineBlank` up through parents.
+ Previously we just kept it set on the bottom child.
+ But this will give a quicker determination of `lastLineBlank`.
+ * Moved continuation checks & finalizers into `blocks` property
+ of `Parser`. This is a first step towards keeping the code for
+ each kind of block in a central place, rather than spread all over
+ the code base. This is preparatory for a more modular structure,
+ where each type of block has a record describing how it is parsed and
+ finalized. Eventually this will also contain functions for checking for
+ a block start, and metadata that determines how line data
+ should be handled.
+ * Added `currentLine` property to `Parser`.
+ * Renamed `first_nonspace` -> `next_nonspace`.
+ * Put generated `commonmark.js` in `dist/` rather than `js/`.
+ * Miscellaneous code cleanup.
+ * Split JS code into (this) independent repository.
+ * Added detailed benchmark with samples (`make bench-detailed`).
+ * Added `dist/commonmark.js` to repo (for bower).
+ * Added `bower.json` (jgm/CommonMark#288).
+ * Updated test suite. Now shows how performance depends on length in
+ pathological cases.
+ * Don't use -1 as second param for .slice. This seems to cause a
+ deoptimization, as reported by `node --trace-deopt`.
+ * Added `CONTRIBUTING.md`.
+ * Added `.travis.yml` to test against various node versions.
+ * Renamed `changelog.js.txt` -> `changelog.txt`.
+
+[0.16]
+
+ * Improved regex for HTML comments (#263).
+ * Fixed CDATA regex (#267).
+ * Use linked list instead of arrays in AST: the same doubly linked
+ node structure as cmark uses. This simplifies some code and
+ eliminates the need for recursive algorithms, so we can render
+ deeply-nested structures without stack overflows.
+ * Use `children` instead of `label` (in Image and Link),
+ `inline_content` (in Paragraph), and `c` (in Emph and Strong).
+ * Renamed the `c` property to `literal` to match `libcmark`.
+ * Use `literal` rather than `string_content` property for code
+ blocks, HTML. `string_content` is reserved for raw string
+ content that has yet to be parsed as inlines.
+ * Improved end lines (#276).
+ * Added a node walker, for easy AST traversal (see `node.js`).
+ * Regularized position information into a `sourcepos` property.
+ Added end column information.
+ * Renamed `html-renderer.js` to `html.js`.
+ * Replace NUL characters with U+FFFD, as per spec.
+ * Optimized code, resulting in significant performance gains.
+ (We've gone from being twice as fast as showdown.js to being
+ three times as fast, on par with marked.)
+ * Made `tight` a property of `list_data` rather than `Node`.
+ * Added options to renderer, parser objections.
+ * Added a `--sourcepos` command line option to `js/bin/commonmark`.
+ * HTML renderer now throws an error on unknown tag type (which
+ indicates a programming error).
+ * Removed `ansi.js` code from the source tree. The test suite now
+ uses its own mini ansi colors implementation.
+ * Added `--time` option to `js/bin/commonmark`.
+ * Added an XML renderer (XML representation of the AST, matching
+ `Commonmark.dtd`).
+ * Changed `url` property to `destination` to match `cmark` and spec.
+ * Added `js/common.js` to hold some common code, like string
+ unescaping and URI normalization.
+ * Use `decodeURI` instead of `unescape`.
+ * Added some "pathological" test cases to test suite.
diff --git a/vendor/commonmark/dist/commonmark.js b/vendor/commonmark/dist/commonmark.js
new file mode 100644
index 0000000..4abbee8
--- /dev/null
+++ b/vendor/commonmark/dist/commonmark.js
@@ -0,0 +1,4578 @@
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var o;"undefined"!=typeof window?o=window:"undefined"!=typeof global?o=global:"undefined"!=typeof self&&(o=self),o.commonmark=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o]" + "|" +
+ "/" + BLOCKTAGNAME + "[\\s>]" + "|" + "[?!])";
+
+var reHtmlBlockOpen = new RegExp('^' + HTMLBLOCKOPEN, 'i');
+
+var reHrule = /^(?:(?:\* *){3,}|(?:_ *){3,}|(?:- *){3,}) *$/;
+
+var reMaybeSpecial = /^[#`~*+_=<>0-9-]/;
+
+var reNonSpace = /[^ \t\n]/;
+
+var reBulletListMarker = /^[*+-]( +|$)/;
+
+var reOrderedListMarker = /^(\d+)([.)])( +|$)/;
+
+var reATXHeaderMarker = /^#{1,6}(?: +|$)/;
+
+var reCodeFence = /^`{3,}(?!.*`)|^~{3,}(?!.*~)/;
+
+var reClosingCodeFence = /^(?:`{3,}|~{3,})(?= *$)/;
+
+var reSetextHeaderLine = /^(?:=+|-+) *$/;
+
+var reLineEnding = /\r\n|\n|\r/;
+
+// Returns true if string contains only space characters.
+var isBlank = function(s) {
+ return !(reNonSpace.test(s));
+};
+
+var tabSpaces = [' ', ' ', ' ', ' '];
+
+// Convert tabs to spaces on each line using a 4-space tab stop.
+var detabLine = function(text) {
+ var start = 0;
+ var offset;
+ var lastStop = 0;
+
+ while ((offset = text.indexOf('\t', start)) !== -1) {
+ var numspaces = (offset - lastStop) % 4;
+ var spaces = tabSpaces[numspaces];
+ text = text.slice(0, offset) + spaces + text.slice(offset + 1);
+ lastStop = offset + numspaces;
+ start = lastStop;
+ }
+
+ return text;
+};
+
+// Attempt to match a regex in string s at offset offset.
+// Return index of match or -1.
+var matchAt = function(re, s, offset) {
+ var res = s.slice(offset).match(re);
+ if (res === null) {
+ return -1;
+ } else {
+ return offset + res.index;
+ }
+};
+
+// DOC PARSER
+
+// These are methods of a Parser object, defined below.
+
+// Returns true if block ends with a blank line, descending if needed
+// into lists and sublists.
+var endsWithBlankLine = function(block) {
+ while (block) {
+ if (block._lastLineBlank) {
+ return true;
+ }
+ var t = block.type;
+ if (t === 'List' || t === 'Item') {
+ block = block._lastChild;
+ } else {
+ break;
+ }
+ }
+ return false;
+};
+
+// Break out of all containing lists, resetting the tip of the
+// document to the parent of the highest list, and finalizing
+// all the lists. (This is used to implement the "two blank lines
+// break of of all lists" feature.)
+var breakOutOfLists = function(block) {
+ var b = block;
+ var last_list = null;
+ do {
+ if (b.type === 'List') {
+ last_list = b;
+ }
+ b = b._parent;
+ } while (b);
+
+ if (last_list) {
+ while (block !== last_list) {
+ this.finalize(block, this.lineNumber);
+ block = block._parent;
+ }
+ this.finalize(last_list, this.lineNumber);
+ this.tip = last_list._parent;
+ }
+};
+
+// Add a line to the block at the tip. We assume the tip
+// can accept lines -- that check should be done before calling this.
+var addLine = function(ln) {
+ this.tip._string_content += ln.slice(this.offset) + '\n';
+};
+
+// Add block of type tag as a child of the tip. If the tip can't
+// accept children, close and finalize it and try its parent,
+// and so on til we find a block that can accept children.
+var addChild = function(tag, offset) {
+ while (!this.blocks[this.tip.type].canContain(tag)) {
+ this.finalize(this.tip, this.lineNumber - 1);
+ }
+
+ var column_number = offset + 1; // offset 0 = column 1
+ var newBlock = new Node(tag, [[this.lineNumber, column_number], [0, 0]]);
+ newBlock._string_content = '';
+ this.tip.appendChild(newBlock);
+ this.tip = newBlock;
+ return newBlock;
+};
+
+// Parse a list marker and return data on the marker (type,
+// start, delimiter, bullet character, padding) or null.
+var parseListMarker = function(ln, offset, indent) {
+ var rest = ln.slice(offset);
+ var match;
+ var spaces_after_marker;
+ var data = { type: null,
+ tight: true, // lists are tight by default
+ bulletChar: null,
+ start: null,
+ delimiter: null,
+ padding: null,
+ markerOffset: indent };
+ if (rest.match(reHrule)) {
+ return null;
+ }
+ if ((match = rest.match(reBulletListMarker))) {
+ spaces_after_marker = match[1].length;
+ data.type = 'Bullet';
+ data.bulletChar = match[0][0];
+
+ } else if ((match = rest.match(reOrderedListMarker))) {
+ spaces_after_marker = match[3].length;
+ data.type = 'Ordered';
+ data.start = parseInt(match[1]);
+ data.delimiter = match[2];
+ } else {
+ return null;
+ }
+ var blank_item = match[0].length === rest.length;
+ if (spaces_after_marker >= 5 ||
+ spaces_after_marker < 1 ||
+ blank_item) {
+ data.padding = match[0].length - spaces_after_marker + 1;
+ } else {
+ data.padding = match[0].length;
+ }
+ return data;
+};
+
+// Returns true if the two list items are of the same type,
+// with the same delimiter and bullet character. This is used
+// in agglomerating list items into lists.
+var listsMatch = function(list_data, item_data) {
+ return (list_data.type === item_data.type &&
+ list_data.delimiter === item_data.delimiter &&
+ list_data.bulletChar === item_data.bulletChar);
+};
+
+// Finalize and close any unmatched blocks. Returns true.
+var closeUnmatchedBlocks = function() {
+ if (!this.allClosed) {
+ // finalize any blocks not matched
+ while (this.oldtip !== this.lastMatchedContainer) {
+ var parent = this.oldtip._parent;
+ this.finalize(this.oldtip, this.lineNumber - 1);
+ this.oldtip = parent;
+ }
+ this.allClosed = true;
+ }
+};
+
+// 'finalize' is run when the block is closed.
+// 'continue' is run to check whether the block is continuing
+// at a certain line and offset (e.g. whether a block quote
+// contains a `>`. It returns 0 for matched, 1 for not matched,
+// and 2 for "we've dealt with this line completely, go to next."
+var blocks = {
+ Document: {
+ continue: function() { return 0; },
+ finalize: function() { return; },
+ canContain: function(t) { return (t !== 'Item'); },
+ acceptsLines: false
+ },
+ List: {
+ continue: function() { return 0; },
+ finalize: function(parser, block) {
+ var item = block._firstChild;
+ while (item) {
+ // check for non-final list item ending with blank line:
+ if (endsWithBlankLine(item) && item._next) {
+ block._listData.tight = false;
+ break;
+ }
+ // recurse into children of list item, to see if there are
+ // spaces between any of them:
+ var subitem = item._firstChild;
+ while (subitem) {
+ if (endsWithBlankLine(subitem) &&
+ (item._next || subitem._next)) {
+ block._listData.tight = false;
+ break;
+ }
+ subitem = subitem._next;
+ }
+ item = item._next;
+ }
+ },
+ canContain: function(t) { return (t === 'Item'); },
+ acceptsLines: false
+ },
+ BlockQuote: {
+ continue: function(parser, container, nextNonspace) {
+ var ln = parser.currentLine;
+ if (nextNonspace - parser.offset <= 3 &&
+ ln.charAt(nextNonspace) === '>') {
+ parser.offset = nextNonspace + 1;
+ if (ln.charAt(parser.offset) === ' ') {
+ parser.offset++;
+ }
+ } else {
+ return 1;
+ }
+ return 0;
+ },
+ finalize: function() { return; },
+ canContain: function(t) { return (t !== 'Item'); },
+ acceptsLines: false
+ },
+ Item: {
+ continue: function(parser, container, nextNonspace) {
+ if (nextNonspace === parser.currentLine.length) { // blank
+ parser.offset = nextNonspace;
+ } else if (nextNonspace - parser.offset >=
+ container._listData.markerOffset +
+ container._listData.padding) {
+ parser.offset += container._listData.markerOffset +
+ container._listData.padding;
+ } else {
+ return 1;
+ }
+ return 0;
+ },
+ finalize: function() { return; },
+ canContain: function(t) { return (t !== 'Item'); },
+ acceptsLines: false
+ },
+ Header: {
+ continue: function() {
+ // a header can never container > 1 line, so fail to match:
+ return 1;
+ },
+ finalize: function() { return; },
+ canContain: function() { return false; },
+ acceptsLines: false
+ },
+ HorizontalRule: {
+ continue: function() {
+ // an hrule can never container > 1 line, so fail to match:
+ return 1;
+ },
+ finalize: function() { return; },
+ canContain: function() { return false; },
+ acceptsLines: false
+ },
+ CodeBlock: {
+ continue: function(parser, container, nextNonspace) {
+ var ln = parser.currentLine;
+ var indent = nextNonspace - parser.offset;
+ if (container._isFenced) { // fenced
+ var match = (indent <= 3 &&
+ ln.charAt(nextNonspace) === container._fenceChar &&
+ ln.slice(nextNonspace).match(reClosingCodeFence));
+ if (match && match[0].length >= container._fenceLength) {
+ // closing fence - we're at end of line, so we can return
+ parser.finalize(container, parser.lineNumber);
+ return 2;
+ } else {
+ // skip optional spaces of fence offset
+ var i = container._fenceOffset;
+ while (i > 0 && ln.charAt(parser.offset) === ' ') {
+ parser.offset++;
+ i--;
+ }
+ }
+ } else { // indented
+ if (indent >= CODE_INDENT) {
+ parser.offset += CODE_INDENT;
+ } else if (nextNonspace === ln.length) { // blank
+ parser.offset = nextNonspace;
+ } else {
+ return 1;
+ }
+ }
+ return 0;
+ },
+ finalize: function(parser, block) {
+ if (block._isFenced) { // fenced
+ // first line becomes info string
+ var content = block._string_content;
+ var newlinePos = content.indexOf('\n');
+ var firstLine = content.slice(0, newlinePos);
+ var rest = content.slice(newlinePos + 1);
+ block.info = unescapeString(firstLine.trim());
+ block._literal = rest;
+ } else { // indented
+ block._literal = block._string_content.replace(/(\n *)+$/, '\n');
+ }
+ block._string_content = null; // allow GC
+ },
+ canContain: function() { return false; },
+ acceptsLines: true
+ },
+ HtmlBlock: {
+ continue: function(parser, container, nextNonspace) {
+ return (nextNonspace === parser.currentLine.length ? 1 : 0);
+ },
+ finalize: function(parser, block) {
+ block._literal = block._string_content.replace(/(\n *)+$/, '');
+ block._string_content = null; // allow GC
+ },
+ canContain: function() { return false; },
+ acceptsLines: true
+ },
+ Paragraph: {
+ continue: function(parser, container, nextNonspace) {
+ return (nextNonspace === parser.currentLine.length ? 1 : 0);
+ },
+ finalize: function(parser, block) {
+ var pos;
+ var hasReferenceDefs = false;
+
+ // try parsing the beginning as link reference definitions:
+ while (block._string_content.charAt(0) === '[' &&
+ (pos =
+ parser.inlineParser.parseReference(block._string_content,
+ parser.refmap))) {
+ block._string_content = block._string_content.slice(pos);
+ hasReferenceDefs = true;
+ }
+ if (hasReferenceDefs && isBlank(block._string_content)) {
+ block.unlink();
+ }
+ },
+ canContain: function() { return false; },
+ acceptsLines: true
+ }
+};
+
+// Analyze a line of text and update the document appropriately.
+// We parse markdown text by calling this on each line of input,
+// then finalizing the document.
+var incorporateLine = function(ln) {
+ var all_matched = true;
+ var nextNonspace;
+ var match;
+ var data;
+ var blank;
+ var indent;
+ var t;
+
+ var container = this.doc;
+ this.oldtip = this.tip;
+ this.offset = 0;
+ this.lineNumber += 1;
+
+ // replace NUL characters for security
+ if (ln.indexOf('\u0000') !== -1) {
+ ln = ln.replace(/\0/g, '\uFFFD');
+ }
+
+ // Convert tabs to spaces:
+ ln = detabLine(ln);
+ this.currentLine = ln;
+
+ // For each containing block, try to parse the associated line start.
+ // Bail out on failure: container will point to the last matching block.
+ // Set all_matched to false if not all containers match.
+ var lastChild;
+ while ((lastChild = container._lastChild) && lastChild._open) {
+ container = lastChild;
+
+ match = matchAt(reNonSpace, ln, this.offset);
+ if (match === -1) {
+ nextNonspace = ln.length;
+ } else {
+ nextNonspace = match;
+ }
+
+ switch (this.blocks[container.type].continue(this, container, nextNonspace)) {
+ case 0: // we've matched, keep going
+ break;
+ case 1: // we've failed to match a block
+ all_matched = false;
+ break;
+ case 2: // we've hit end of line for fenced code close and can return
+ this.lastLineLength = ln.length;
+ return;
+ default:
+ throw 'continue returned illegal value, must be 0, 1, or 2';
+ }
+ if (!all_matched) {
+ container = container._parent; // back up to last matching block
+ break;
+ }
+ }
+
+ blank = nextNonspace === ln.length;
+
+ this.allClosed = (container === this.oldtip);
+ this.lastMatchedContainer = container;
+
+ // Check to see if we've hit 2nd blank line; if so break out of list:
+ if (blank && container._lastLineBlank) {
+ this.breakOutOfLists(container);
+ }
+
+ // Unless last matched container is a code block, try new container starts,
+ // adding children to the last matched container:
+ while ((t = container.type) && !(t === 'CodeBlock' || t === 'HtmlBlock')) {
+
+ match = matchAt(reNonSpace, ln, this.offset);
+ if (match === -1) {
+ nextNonspace = ln.length;
+ blank = true;
+ break;
+ } else {
+ nextNonspace = match;
+ blank = false;
+ }
+ indent = nextNonspace - this.offset;
+
+ // this is a little performance optimization:
+ if (indent < CODE_INDENT && !reMaybeSpecial.test(ln.slice(nextNonspace))) {
+ this.offset = nextNonspace;
+ break;
+ }
+
+ if (indent >= CODE_INDENT) {
+ if (this.tip.type !== 'Paragraph' && !blank) {
+ // indented code
+ this.offset += CODE_INDENT;
+ this.closeUnmatchedBlocks();
+ container = this.addChild('CodeBlock', this.offset);
+ } else {
+ // lazy paragraph continuation
+ this.offset = nextNonspace;
+ }
+ break;
+
+ } else if (ln.charAt(nextNonspace) === '>') {
+ // blockquote
+ this.offset = nextNonspace + 1;
+ // optional following space
+ if (ln.charAt(this.offset) === ' ') {
+ this.offset++;
+ }
+ this.closeUnmatchedBlocks();
+ container = this.addChild('BlockQuote', nextNonspace);
+
+ } else if ((match = ln.slice(nextNonspace).match(reATXHeaderMarker))) {
+ // ATX header
+ this.offset = nextNonspace + match[0].length;
+ this.closeUnmatchedBlocks();
+ container = this.addChild('Header', nextNonspace);
+ container.level = match[0].trim().length; // number of #s
+ // remove trailing ###s:
+ container._string_content =
+ ln.slice(this.offset).replace(/^ *#+ *$/, '').replace(/ +#+ *$/, '');
+ this.offset = ln.length;
+ break;
+
+ } else if ((match = ln.slice(nextNonspace).match(reCodeFence))) {
+ // fenced code block
+ var fenceLength = match[0].length;
+ this.closeUnmatchedBlocks();
+ container = this.addChild('CodeBlock', nextNonspace);
+ container._isFenced = true;
+ container._fenceLength = fenceLength;
+ container._fenceChar = match[0][0];
+ container._fenceOffset = indent;
+ this.offset = nextNonspace + fenceLength;
+
+ } else if (matchAt(reHtmlBlockOpen, ln, nextNonspace) !== -1) {
+ // html block
+ this.closeUnmatchedBlocks();
+ container = this.addChild('HtmlBlock', this.offset);
+ // don't adjust this.offset; spaces are part of block
+ break;
+
+ } else if (t === 'Paragraph' &&
+ (container._string_content.indexOf('\n') ===
+ container._string_content.length - 1) &&
+ ((match = ln.slice(nextNonspace).match(reSetextHeaderLine)))) {
+ // setext header line
+ this.closeUnmatchedBlocks();
+ var header = new Node('Header', container.sourcepos);
+ header.level = match[0][0] === '=' ? 1 : 2;
+ header._string_content = container._string_content;
+ container.insertAfter(header);
+ container.unlink();
+ container = header;
+ this.tip = header;
+ this.offset = ln.length;
+ break;
+
+ } else if (matchAt(reHrule, ln, nextNonspace) !== -1) {
+ // hrule
+ this.closeUnmatchedBlocks();
+ container = this.addChild('HorizontalRule', nextNonspace);
+ this.offset = ln.length;
+ break;
+
+ } else if ((data = parseListMarker(ln, nextNonspace, indent))) {
+ // list item
+ this.closeUnmatchedBlocks();
+ this.offset = nextNonspace + data.padding;
+
+ // add the list if needed
+ if (t !== 'List' ||
+ !(listsMatch(container._listData, data))) {
+ container = this.addChild('List', nextNonspace);
+ container._listData = data;
+ }
+
+ // add the list item
+ container = this.addChild('Item', nextNonspace);
+ container._listData = data;
+
+ } else {
+ this.offset = nextNonspace;
+ break;
+
+ }
+
+ }
+
+ // What remains at the offset is a text line. Add the text to the
+ // appropriate container.
+
+ // First check for a lazy paragraph continuation:
+ if (!this.allClosed && !blank &&
+ this.tip.type === 'Paragraph') {
+ // lazy paragraph continuation
+ this.addLine(ln);
+
+ } else { // not a lazy continuation
+
+ // finalize any blocks not matched
+ this.closeUnmatchedBlocks();
+ if (blank && container.lastChild) {
+ container.lastChild._lastLineBlank = true;
+ }
+
+ t = container.type;
+
+ // Block quote lines are never blank as they start with >
+ // and we don't count blanks in fenced code for purposes of tight/loose
+ // lists or breaking out of lists. We also don't set _lastLineBlank
+ // on an empty list item, or if we just closed a fenced block.
+ var lastLineBlank = blank &&
+ !(t === 'BlockQuote' ||
+ (t === 'CodeBlock' && container._isFenced) ||
+ (t === 'Item' &&
+ !container._firstChild &&
+ container.sourcepos[0][0] === this.lineNumber));
+
+ // propagate lastLineBlank up through parents:
+ var cont = container;
+ while (cont) {
+ cont._lastLineBlank = lastLineBlank;
+ cont = cont._parent;
+ }
+
+ if (this.blocks[t].acceptsLines) {
+ this.addLine(ln);
+ } else if (this.offset < ln.length && !blank) {
+ // create paragraph container for line
+ container = this.addChild('Paragraph', this.offset);
+ this.offset = nextNonspace;
+ this.addLine(ln);
+ }
+ }
+ this.lastLineLength = ln.length;
+};
+
+// Finalize a block. Close it and do any necessary postprocessing,
+// e.g. creating string_content from strings, setting the 'tight'
+// or 'loose' status of a list, and parsing the beginnings
+// of paragraphs for reference definitions. Reset the tip to the
+// parent of the closed block.
+var finalize = function(block, lineNumber) {
+ var above = block._parent || this.top;
+ block._open = false;
+ block.sourcepos[1] = [lineNumber, this.lastLineLength];
+
+ this.blocks[block.type].finalize(this, block);
+
+ this.tip = above;
+};
+
+// Walk through a block & children recursively, parsing string content
+// into inline content where appropriate. Returns new object.
+var processInlines = function(block) {
+ var node, event, t;
+ var walker = block.walker();
+ this.inlineParser.refmap = this.refmap;
+ while ((event = walker.next())) {
+ node = event.node;
+ t = node.type;
+ if (!event.entering && (t === 'Paragraph' || t === 'Header')) {
+ this.inlineParser.parse(node);
+ }
+ }
+};
+
+var Document = function() {
+ var doc = new Node('Document', [[1, 1], [0, 0]]);
+ return doc;
+};
+
+// The main parsing function. Returns a parsed document AST.
+var parse = function(input) {
+ this.doc = new Document();
+ this.tip = this.doc;
+ this.refmap = {};
+ this.lineNumber = 0;
+ this.lastLineLength = 0;
+ this.offset = 0;
+ this.lastMatchedContainer = this.doc;
+ this.currentLine = "";
+ if (this.options.time) { console.time("preparing input"); }
+ var lines = input.split(reLineEnding);
+ var len = lines.length;
+ if (input.charAt(input.length - 1) === '\n') {
+ // ignore last blank line created by final newline
+ len -= 1;
+ }
+ if (this.options.time) { console.timeEnd("preparing input"); }
+ if (this.options.time) { console.time("block parsing"); }
+ for (var i = 0; i < len; i++) {
+ this.incorporateLine(lines[i]);
+ }
+ while (this.tip) {
+ this.finalize(this.tip, len);
+ }
+ if (this.options.time) { console.timeEnd("block parsing"); }
+ if (this.options.time) { console.time("inline parsing"); }
+ this.processInlines(this.doc);
+ if (this.options.time) { console.timeEnd("inline parsing"); }
+ return this.doc;
+};
+
+
+// The Parser object.
+function Parser(options){
+ return {
+ doc: new Document(),
+ blocks: blocks,
+ tip: this.doc,
+ oldtip: this.doc,
+ currentLine: "",
+ lineNumber: 0,
+ offset: 0,
+ allClosed: true,
+ lastMatchedContainer: this.doc,
+ refmap: {},
+ lastLineLength: 0,
+ inlineParser: new InlineParser(),
+ breakOutOfLists: breakOutOfLists,
+ addLine: addLine,
+ addChild: addChild,
+ incorporateLine: incorporateLine,
+ finalize: finalize,
+ processInlines: processInlines,
+ closeUnmatchedBlocks: closeUnmatchedBlocks,
+ parse: parse,
+ options: options || {}
+ };
+}
+
+module.exports = Parser;
+
+},{"./common":2,"./inlines":7,"./node":8}],2:[function(require,module,exports){
+"use strict";
+
+var entityToChar = require('./html5-entities.js').entityToChar;
+
+var ENTITY = "&(?:#x[a-f0-9]{1,8}|#[0-9]{1,8}|[a-z][a-z0-9]{1,31});";
+
+var reBackslashOrAmp = /[\\&]/;
+
+var ESCAPABLE = '[!"#$%&\'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]';
+
+var reEntityOrEscapedChar = new RegExp('\\\\' + ESCAPABLE + '|' + ENTITY, 'gi');
+
+var XMLSPECIAL = '[&<>"]';
+
+var reXmlSpecial = new RegExp(XMLSPECIAL, 'g');
+
+var reXmlSpecialOrEntity = new RegExp(ENTITY + '|' + XMLSPECIAL, 'gi');
+
+var unescapeChar = function(s) {
+ if (s[0] === '\\') {
+ return s[1];
+ } else {
+ return entityToChar(s);
+ }
+};
+
+// Replace entities and backslash escapes with literal characters.
+var unescapeString = function(s) {
+ if (reBackslashOrAmp.test(s)) {
+ return s.replace(reEntityOrEscapedChar, unescapeChar);
+ } else {
+ return s;
+ }
+};
+
+var normalizeURI = function(uri) {
+ try {
+ return encodeURI(decodeURI(uri));
+ }
+ catch(err) {
+ return uri;
+ }
+};
+
+var replaceUnsafeChar = function(s) {
+ switch (s) {
+ case '&':
+ return '&';
+ case '<':
+ return '<';
+ case '>':
+ return '>';
+ case '"':
+ return '"';
+ default:
+ return s;
+ }
+};
+
+var escapeXml = function(s, preserve_entities) {
+ if (reXmlSpecial.test(s)) {
+ if (preserve_entities) {
+ return s.replace(reXmlSpecialOrEntity, replaceUnsafeChar);
+ } else {
+ return s.replace(reXmlSpecial, replaceUnsafeChar);
+ }
+ } else {
+ return s;
+ }
+};
+
+module.exports = { unescapeString: unescapeString,
+ normalizeURI: normalizeURI,
+ escapeXml: escapeXml
+ };
+
+},{"./html5-entities.js":5}],3:[function(require,module,exports){
+"use strict";
+
+// derived from https://github.com/mathiasbynens/String.fromCodePoint
+/*! http://mths.be/fromcodepoint v0.2.1 by @mathias */
+if (String.fromCodePoint) {
+ module.exports = function (_) {
+ try {
+ return String.fromCodePoint(_);
+ } catch (e) {
+ if (e instanceof RangeError) {
+ return String.fromCharCode(0xFFFD);
+ }
+ throw e;
+ }
+ };
+
+} else {
+
+ var stringFromCharCode = String.fromCharCode;
+ var floor = Math.floor;
+ var fromCodePoint = function() {
+ var MAX_SIZE = 0x4000;
+ var codeUnits = [];
+ var highSurrogate;
+ var lowSurrogate;
+ var index = -1;
+ var length = arguments.length;
+ if (!length) {
+ return '';
+ }
+ var result = '';
+ while (++index < length) {
+ var codePoint = Number(arguments[index]);
+ if (
+ !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
+ codePoint < 0 || // not a valid Unicode code point
+ codePoint > 0x10FFFF || // not a valid Unicode code point
+ floor(codePoint) !== codePoint // not an integer
+ ) {
+ return String.fromCharCode(0xFFFD);
+ }
+ if (codePoint <= 0xFFFF) { // BMP code point
+ codeUnits.push(codePoint);
+ } else { // Astral code point; split in surrogate halves
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ codePoint -= 0x10000;
+ highSurrogate = (codePoint >> 10) + 0xD800;
+ lowSurrogate = (codePoint % 0x400) + 0xDC00;
+ codeUnits.push(highSurrogate, lowSurrogate);
+ }
+ if (index + 1 === length || codeUnits.length > MAX_SIZE) {
+ result += stringFromCharCode.apply(null, codeUnits);
+ codeUnits.length = 0;
+ }
+ }
+ return result;
+ };
+ module.exports = fromCodePoint;
+}
+
+},{}],4:[function(require,module,exports){
+"use strict";
+
+var escapeXml = require('./common').escapeXml;
+
+// Helper function to produce an HTML tag.
+var tag = function(name, attrs, selfclosing) {
+ var result = '<' + name;
+ if (attrs && attrs.length > 0) {
+ var i = 0;
+ var attrib;
+ while ((attrib = attrs[i]) !== undefined) {
+ result += ' ' + attrib[0] + '="' + attrib[1] + '"';
+ i++;
+ }
+ }
+ if (selfclosing) {
+ result += ' /';
+ }
+
+ result += '>';
+ return result;
+};
+
+var reHtmlTag = /\<[^>]*\>/;
+
+var renderNodes = function(block) {
+
+ var attrs;
+ var info_words;
+ var tagname;
+ var walker = block.walker();
+ var event, node, entering;
+ var buffer = "";
+ var lastOut = "\n";
+ var disableTags = 0;
+ var grandparent;
+ var out = function(s) {
+ if (disableTags > 0) {
+ buffer += s.replace(reHtmlTag, '');
+ } else {
+ buffer += s;
+ }
+ lastOut = s;
+ };
+ var esc = this.escape;
+ var cr = function() {
+ if (lastOut !== '\n') {
+ buffer += '\n';
+ lastOut = '\n';
+ }
+ };
+
+ var options = this.options;
+
+ if (options.time) { console.time("rendering"); }
+
+ while ((event = walker.next())) {
+ entering = event.entering;
+ node = event.node;
+
+ attrs = [];
+ if (options.sourcepos) {
+ var pos = node.sourcepos;
+ if (pos) {
+ attrs.push(['data-sourcepos', String(pos[0][0]) + ':' +
+ String(pos[0][1]) + '-' + String(pos[1][0]) + ':' +
+ String(pos[1][1])]);
+ }
+ }
+
+ switch (node.type) {
+ case 'Text':
+ out(esc(node.literal, false));
+ break;
+
+ case 'Softbreak':
+ out(this.softbreak);
+ break;
+
+ case 'Hardbreak':
+ out(tag('br', [], true));
+ cr();
+ break;
+
+ case 'Emph':
+ out(tag(entering ? 'em' : '/em'));
+ break;
+
+ case 'Strong':
+ out(tag(entering ? 'strong' : '/strong'));
+ break;
+
+ case 'Html':
+ out(node.literal);
+ break;
+
+ case 'Link':
+ if (entering) {
+ attrs.push(['href', esc(node.destination, true)]);
+ if (node.title) {
+ attrs.push(['title', esc(node.title, true)]);
+ }
+ out(tag('a', attrs));
+ } else {
+ out(tag('/a'));
+ }
+ break;
+
+ case 'Image':
+ if (entering) {
+ if (disableTags === 0) {
+ out('');
+ }
+ }
+ break;
+
+ case 'Code':
+ out(tag('code') + esc(node.literal, false) + tag('/code'));
+ break;
+
+ case 'Document':
+ break;
+
+ case 'Paragraph':
+ grandparent = node.parent.parent;
+ if (grandparent !== null &&
+ grandparent.type === 'List') {
+ if (grandparent.listTight) {
+ break;
+ }
+ }
+ if (entering) {
+ cr();
+ out(tag('p', attrs));
+ } else {
+ out(tag('/p'));
+ cr();
+ }
+ break;
+
+ case 'BlockQuote':
+ if (entering) {
+ cr();
+ out(tag('blockquote', attrs));
+ cr();
+ } else {
+ cr();
+ out(tag('/blockquote'));
+ cr();
+ }
+ break;
+
+ case 'Item':
+ if (entering) {
+ out(tag('li', attrs));
+ } else {
+ out(tag('/li'));
+ cr();
+ }
+ break;
+
+ case 'List':
+ tagname = node.listType === 'Bullet' ? 'ul' : 'ol';
+ if (entering) {
+ var start = node.listStart;
+ if (start && start > 1) {
+ attrs.push(['start', start.toString()]);
+ }
+ cr();
+ out(tag(tagname, attrs));
+ cr();
+ } else {
+ cr();
+ out(tag('/' + tagname));
+ cr();
+ }
+ break;
+
+ case 'Header':
+ tagname = 'h' + node.level;
+ if (entering) {
+ cr();
+ out(tag(tagname, attrs));
+ } else {
+ out(tag('/' + tagname));
+ cr();
+ }
+ break;
+
+ case 'CodeBlock':
+ info_words = node.info ? node.info.split(/ +/) : [];
+ if (info_words.length > 0 && info_words[0].length > 0) {
+ attrs.push(['class', 'language-' + esc(info_words[0], true)]);
+ }
+ cr();
+ out(tag('pre') + tag('code', attrs));
+ out(esc(node.literal, false));
+ out(tag('/code') + tag('/pre'));
+ cr();
+ break;
+
+ case 'HtmlBlock':
+ cr();
+ out(node.literal);
+ cr();
+ break;
+
+ case 'HorizontalRule':
+ cr();
+ out(tag('hr', attrs, true));
+ cr();
+ break;
+
+ default:
+ throw "Unknown node type " + node.type;
+ }
+
+ }
+ if (options.time) { console.timeEnd("rendering"); }
+ return buffer;
+};
+
+// The HtmlRenderer object.
+function HtmlRenderer(options){
+ return {
+ // default options:
+ softbreak: '\n', // by default, soft breaks are rendered as newlines in HTML
+ // set to "
" to make them hard breaks
+ // set to " " if you want to ignore line wrapping in source
+ escape: escapeXml,
+ options: options || {},
+ render: renderNodes
+ };
+}
+
+module.exports = HtmlRenderer;
+
+},{"./common":2}],5:[function(require,module,exports){
+"use strict";
+
+var fromCodePoint = require('./from-code-point');
+
+var entities = {
+ AAacute: 193,
+ aacute: 225,
+ Abreve: 258,
+ abreve: 259,
+ ac: 8766,
+ acd: 8767,
+ acE: 8766,
+ Acirc: 194,
+ acirc: 226,
+ acute: 180,
+ Acy: 1040,
+ acy: 1072,
+ AElig: 198,
+ aelig: 230,
+ af: 8289,
+ Afr: 55349,
+ afr: 55349,
+ Agrave: 192,
+ agrave: 224,
+ alefsym: 8501,
+ aleph: 8501,
+ Alpha: 913,
+ alpha: 945,
+ Amacr: 256,
+ amacr: 257,
+ amalg: 10815,
+ amp: 38,
+ AMP: 38,
+ andand: 10837,
+ And: 10835,
+ and: 8743,
+ andd: 10844,
+ andslope: 10840,
+ andv: 10842,
+ ang: 8736,
+ ange: 10660,
+ angle: 8736,
+ angmsdaa: 10664,
+ angmsdab: 10665,
+ angmsdac: 10666,
+ angmsdad: 10667,
+ angmsdae: 10668,
+ angmsdaf: 10669,
+ angmsdag: 10670,
+ angmsdah: 10671,
+ angmsd: 8737,
+ angrt: 8735,
+ angrtvb: 8894,
+ angrtvbd: 10653,
+ angsph: 8738,
+ angst: 197,
+ angzarr: 9084,
+ Aogon: 260,
+ aogon: 261,
+ Aopf: 55349,
+ aopf: 55349,
+ apacir: 10863,
+ ap: 8776,
+ apE: 10864,
+ ape: 8778,
+ apid: 8779,
+ apos: 39,
+ ApplyFunction: 8289,
+ approx: 8776,
+ approxeq: 8778,
+ Aring: 197,
+ aring: 229,
+ Ascr: 55349,
+ ascr: 55349,
+ Assign: 8788,
+ ast: 42,
+ asymp: 8776,
+ asympeq: 8781,
+ Atilde: 195,
+ atilde: 227,
+ Auml: 196,
+ auml: 228,
+ awconint: 8755,
+ awint: 10769,
+ backcong: 8780,
+ backepsilon: 1014,
+ backprime: 8245,
+ backsim: 8765,
+ backsimeq: 8909,
+ Backslash: 8726,
+ Barv: 10983,
+ barvee: 8893,
+ barwed: 8965,
+ Barwed: 8966,
+ barwedge: 8965,
+ bbrk: 9141,
+ bbrktbrk: 9142,
+ bcong: 8780,
+ Bcy: 1041,
+ bcy: 1073,
+ bdquo: 8222,
+ becaus: 8757,
+ because: 8757,
+ Because: 8757,
+ bemptyv: 10672,
+ bepsi: 1014,
+ bernou: 8492,
+ Bernoullis: 8492,
+ Beta: 914,
+ beta: 946,
+ beth: 8502,
+ between: 8812,
+ Bfr: 55349,
+ bfr: 55349,
+ bigcap: 8898,
+ bigcirc: 9711,
+ bigcup: 8899,
+ bigodot: 10752,
+ bigoplus: 10753,
+ bigotimes: 10754,
+ bigsqcup: 10758,
+ bigstar: 9733,
+ bigtriangledown: 9661,
+ bigtriangleup: 9651,
+ biguplus: 10756,
+ bigvee: 8897,
+ bigwedge: 8896,
+ bkarow: 10509,
+ blacklozenge: 10731,
+ blacksquare: 9642,
+ blacktriangle: 9652,
+ blacktriangledown: 9662,
+ blacktriangleleft: 9666,
+ blacktriangleright: 9656,
+ blank: 9251,
+ blk12: 9618,
+ blk14: 9617,
+ blk34: 9619,
+ block: 9608,
+ bne: 61,
+ bnequiv: 8801,
+ bNot: 10989,
+ bnot: 8976,
+ Bopf: 55349,
+ bopf: 55349,
+ bot: 8869,
+ bottom: 8869,
+ bowtie: 8904,
+ boxbox: 10697,
+ boxdl: 9488,
+ boxdL: 9557,
+ boxDl: 9558,
+ boxDL: 9559,
+ boxdr: 9484,
+ boxdR: 9554,
+ boxDr: 9555,
+ boxDR: 9556,
+ boxh: 9472,
+ boxH: 9552,
+ boxhd: 9516,
+ boxHd: 9572,
+ boxhD: 9573,
+ boxHD: 9574,
+ boxhu: 9524,
+ boxHu: 9575,
+ boxhU: 9576,
+ boxHU: 9577,
+ boxminus: 8863,
+ boxplus: 8862,
+ boxtimes: 8864,
+ boxul: 9496,
+ boxuL: 9563,
+ boxUl: 9564,
+ boxUL: 9565,
+ boxur: 9492,
+ boxuR: 9560,
+ boxUr: 9561,
+ boxUR: 9562,
+ boxv: 9474,
+ boxV: 9553,
+ boxvh: 9532,
+ boxvH: 9578,
+ boxVh: 9579,
+ boxVH: 9580,
+ boxvl: 9508,
+ boxvL: 9569,
+ boxVl: 9570,
+ boxVL: 9571,
+ boxvr: 9500,
+ boxvR: 9566,
+ boxVr: 9567,
+ boxVR: 9568,
+ bprime: 8245,
+ breve: 728,
+ Breve: 728,
+ brvbar: 166,
+ bscr: 55349,
+ Bscr: 8492,
+ bsemi: 8271,
+ bsim: 8765,
+ bsime: 8909,
+ bsolb: 10693,
+ bsol: 92,
+ bsolhsub: 10184,
+ bull: 8226,
+ bullet: 8226,
+ bump: 8782,
+ bumpE: 10926,
+ bumpe: 8783,
+ Bumpeq: 8782,
+ bumpeq: 8783,
+ Cacute: 262,
+ cacute: 263,
+ capand: 10820,
+ capbrcup: 10825,
+ capcap: 10827,
+ cap: 8745,
+ Cap: 8914,
+ capcup: 10823,
+ capdot: 10816,
+ CapitalDifferentialD: 8517,
+ caps: 8745,
+ caret: 8257,
+ caron: 711,
+ Cayleys: 8493,
+ ccaps: 10829,
+ Ccaron: 268,
+ ccaron: 269,
+ Ccedil: 199,
+ ccedil: 231,
+ Ccirc: 264,
+ ccirc: 265,
+ Cconint: 8752,
+ ccups: 10828,
+ ccupssm: 10832,
+ Cdot: 266,
+ cdot: 267,
+ cedil: 184,
+ Cedilla: 184,
+ cemptyv: 10674,
+ cent: 162,
+ centerdot: 183,
+ CenterDot: 183,
+ cfr: 55349,
+ Cfr: 8493,
+ CHcy: 1063,
+ chcy: 1095,
+ check: 10003,
+ checkmark: 10003,
+ Chi: 935,
+ chi: 967,
+ circ: 710,
+ circeq: 8791,
+ circlearrowleft: 8634,
+ circlearrowright: 8635,
+ circledast: 8859,
+ circledcirc: 8858,
+ circleddash: 8861,
+ CircleDot: 8857,
+ circledR: 174,
+ circledS: 9416,
+ CircleMinus: 8854,
+ CirclePlus: 8853,
+ CircleTimes: 8855,
+ cir: 9675,
+ cirE: 10691,
+ cire: 8791,
+ cirfnint: 10768,
+ cirmid: 10991,
+ cirscir: 10690,
+ ClockwiseContourIntegral: 8754,
+ CloseCurlyDoubleQuote: 8221,
+ CloseCurlyQuote: 8217,
+ clubs: 9827,
+ clubsuit: 9827,
+ colon: 58,
+ Colon: 8759,
+ Colone: 10868,
+ colone: 8788,
+ coloneq: 8788,
+ comma: 44,
+ commat: 64,
+ comp: 8705,
+ compfn: 8728,
+ complement: 8705,
+ complexes: 8450,
+ cong: 8773,
+ congdot: 10861,
+ Congruent: 8801,
+ conint: 8750,
+ Conint: 8751,
+ ContourIntegral: 8750,
+ copf: 55349,
+ Copf: 8450,
+ coprod: 8720,
+ Coproduct: 8720,
+ copy: 169,
+ COPY: 169,
+ copysr: 8471,
+ CounterClockwiseContourIntegral: 8755,
+ crarr: 8629,
+ cross: 10007,
+ Cross: 10799,
+ Cscr: 55349,
+ cscr: 55349,
+ csub: 10959,
+ csube: 10961,
+ csup: 10960,
+ csupe: 10962,
+ ctdot: 8943,
+ cudarrl: 10552,
+ cudarrr: 10549,
+ cuepr: 8926,
+ cuesc: 8927,
+ cularr: 8630,
+ cularrp: 10557,
+ cupbrcap: 10824,
+ cupcap: 10822,
+ CupCap: 8781,
+ cup: 8746,
+ Cup: 8915,
+ cupcup: 10826,
+ cupdot: 8845,
+ cupor: 10821,
+ cups: 8746,
+ curarr: 8631,
+ curarrm: 10556,
+ curlyeqprec: 8926,
+ curlyeqsucc: 8927,
+ curlyvee: 8910,
+ curlywedge: 8911,
+ curren: 164,
+ curvearrowleft: 8630,
+ curvearrowright: 8631,
+ cuvee: 8910,
+ cuwed: 8911,
+ cwconint: 8754,
+ cwint: 8753,
+ cylcty: 9005,
+ dagger: 8224,
+ Dagger: 8225,
+ daleth: 8504,
+ darr: 8595,
+ Darr: 8609,
+ dArr: 8659,
+ dash: 8208,
+ Dashv: 10980,
+ dashv: 8867,
+ dbkarow: 10511,
+ dblac: 733,
+ Dcaron: 270,
+ dcaron: 271,
+ Dcy: 1044,
+ dcy: 1076,
+ ddagger: 8225,
+ ddarr: 8650,
+ DD: 8517,
+ dd: 8518,
+ DDotrahd: 10513,
+ ddotseq: 10871,
+ deg: 176,
+ Del: 8711,
+ Delta: 916,
+ delta: 948,
+ demptyv: 10673,
+ dfisht: 10623,
+ Dfr: 55349,
+ dfr: 55349,
+ dHar: 10597,
+ dharl: 8643,
+ dharr: 8642,
+ DiacriticalAcute: 180,
+ DiacriticalDot: 729,
+ DiacriticalDoubleAcute: 733,
+ DiacriticalGrave: 96,
+ DiacriticalTilde: 732,
+ diam: 8900,
+ diamond: 8900,
+ Diamond: 8900,
+ diamondsuit: 9830,
+ diams: 9830,
+ die: 168,
+ DifferentialD: 8518,
+ digamma: 989,
+ disin: 8946,
+ div: 247,
+ divide: 247,
+ divideontimes: 8903,
+ divonx: 8903,
+ DJcy: 1026,
+ djcy: 1106,
+ dlcorn: 8990,
+ dlcrop: 8973,
+ dollar: 36,
+ Dopf: 55349,
+ dopf: 55349,
+ Dot: 168,
+ dot: 729,
+ DotDot: 8412,
+ doteq: 8784,
+ doteqdot: 8785,
+ DotEqual: 8784,
+ dotminus: 8760,
+ dotplus: 8724,
+ dotsquare: 8865,
+ doublebarwedge: 8966,
+ DoubleContourIntegral: 8751,
+ DoubleDot: 168,
+ DoubleDownArrow: 8659,
+ DoubleLeftArrow: 8656,
+ DoubleLeftRightArrow: 8660,
+ DoubleLeftTee: 10980,
+ DoubleLongLeftArrow: 10232,
+ DoubleLongLeftRightArrow: 10234,
+ DoubleLongRightArrow: 10233,
+ DoubleRightArrow: 8658,
+ DoubleRightTee: 8872,
+ DoubleUpArrow: 8657,
+ DoubleUpDownArrow: 8661,
+ DoubleVerticalBar: 8741,
+ DownArrowBar: 10515,
+ downarrow: 8595,
+ DownArrow: 8595,
+ Downarrow: 8659,
+ DownArrowUpArrow: 8693,
+ DownBreve: 785,
+ downdownarrows: 8650,
+ downharpoonleft: 8643,
+ downharpoonright: 8642,
+ DownLeftRightVector: 10576,
+ DownLeftTeeVector: 10590,
+ DownLeftVectorBar: 10582,
+ DownLeftVector: 8637,
+ DownRightTeeVector: 10591,
+ DownRightVectorBar: 10583,
+ DownRightVector: 8641,
+ DownTeeArrow: 8615,
+ DownTee: 8868,
+ drbkarow: 10512,
+ drcorn: 8991,
+ drcrop: 8972,
+ Dscr: 55349,
+ dscr: 55349,
+ DScy: 1029,
+ dscy: 1109,
+ dsol: 10742,
+ Dstrok: 272,
+ dstrok: 273,
+ dtdot: 8945,
+ dtri: 9663,
+ dtrif: 9662,
+ duarr: 8693,
+ duhar: 10607,
+ dwangle: 10662,
+ DZcy: 1039,
+ dzcy: 1119,
+ dzigrarr: 10239,
+ Eacute: 201,
+ eacute: 233,
+ easter: 10862,
+ Ecaron: 282,
+ ecaron: 283,
+ Ecirc: 202,
+ ecirc: 234,
+ ecir: 8790,
+ ecolon: 8789,
+ Ecy: 1069,
+ ecy: 1101,
+ eDDot: 10871,
+ Edot: 278,
+ edot: 279,
+ eDot: 8785,
+ ee: 8519,
+ efDot: 8786,
+ Efr: 55349,
+ efr: 55349,
+ eg: 10906,
+ Egrave: 200,
+ egrave: 232,
+ egs: 10902,
+ egsdot: 10904,
+ el: 10905,
+ Element: 8712,
+ elinters: 9191,
+ ell: 8467,
+ els: 10901,
+ elsdot: 10903,
+ Emacr: 274,
+ emacr: 275,
+ empty: 8709,
+ emptyset: 8709,
+ EmptySmallSquare: 9723,
+ emptyv: 8709,
+ EmptyVerySmallSquare: 9643,
+ emsp13: 8196,
+ emsp14: 8197,
+ emsp: 8195,
+ ENG: 330,
+ eng: 331,
+ ensp: 8194,
+ Eogon: 280,
+ eogon: 281,
+ Eopf: 55349,
+ eopf: 55349,
+ epar: 8917,
+ eparsl: 10723,
+ eplus: 10865,
+ epsi: 949,
+ Epsilon: 917,
+ epsilon: 949,
+ epsiv: 1013,
+ eqcirc: 8790,
+ eqcolon: 8789,
+ eqsim: 8770,
+ eqslantgtr: 10902,
+ eqslantless: 10901,
+ Equal: 10869,
+ equals: 61,
+ EqualTilde: 8770,
+ equest: 8799,
+ Equilibrium: 8652,
+ equiv: 8801,
+ equivDD: 10872,
+ eqvparsl: 10725,
+ erarr: 10609,
+ erDot: 8787,
+ escr: 8495,
+ Escr: 8496,
+ esdot: 8784,
+ Esim: 10867,
+ esim: 8770,
+ Eta: 919,
+ eta: 951,
+ ETH: 208,
+ eth: 240,
+ Euml: 203,
+ euml: 235,
+ euro: 8364,
+ excl: 33,
+ exist: 8707,
+ Exists: 8707,
+ expectation: 8496,
+ exponentiale: 8519,
+ ExponentialE: 8519,
+ fallingdotseq: 8786,
+ Fcy: 1060,
+ fcy: 1092,
+ female: 9792,
+ ffilig: 64259,
+ fflig: 64256,
+ ffllig: 64260,
+ Ffr: 55349,
+ ffr: 55349,
+ filig: 64257,
+ FilledSmallSquare: 9724,
+ FilledVerySmallSquare: 9642,
+ fjlig: 102,
+ flat: 9837,
+ fllig: 64258,
+ fltns: 9649,
+ fnof: 402,
+ Fopf: 55349,
+ fopf: 55349,
+ forall: 8704,
+ ForAll: 8704,
+ fork: 8916,
+ forkv: 10969,
+ Fouriertrf: 8497,
+ fpartint: 10765,
+ frac12: 189,
+ frac13: 8531,
+ frac14: 188,
+ frac15: 8533,
+ frac16: 8537,
+ frac18: 8539,
+ frac23: 8532,
+ frac25: 8534,
+ frac34: 190,
+ frac35: 8535,
+ frac38: 8540,
+ frac45: 8536,
+ frac56: 8538,
+ frac58: 8541,
+ frac78: 8542,
+ frasl: 8260,
+ frown: 8994,
+ fscr: 55349,
+ Fscr: 8497,
+ gacute: 501,
+ Gamma: 915,
+ gamma: 947,
+ Gammad: 988,
+ gammad: 989,
+ gap: 10886,
+ Gbreve: 286,
+ gbreve: 287,
+ Gcedil: 290,
+ Gcirc: 284,
+ gcirc: 285,
+ Gcy: 1043,
+ gcy: 1075,
+ Gdot: 288,
+ gdot: 289,
+ ge: 8805,
+ gE: 8807,
+ gEl: 10892,
+ gel: 8923,
+ geq: 8805,
+ geqq: 8807,
+ geqslant: 10878,
+ gescc: 10921,
+ ges: 10878,
+ gesdot: 10880,
+ gesdoto: 10882,
+ gesdotol: 10884,
+ gesl: 8923,
+ gesles: 10900,
+ Gfr: 55349,
+ gfr: 55349,
+ gg: 8811,
+ Gg: 8921,
+ ggg: 8921,
+ gimel: 8503,
+ GJcy: 1027,
+ gjcy: 1107,
+ gla: 10917,
+ gl: 8823,
+ glE: 10898,
+ glj: 10916,
+ gnap: 10890,
+ gnapprox: 10890,
+ gne: 10888,
+ gnE: 8809,
+ gneq: 10888,
+ gneqq: 8809,
+ gnsim: 8935,
+ Gopf: 55349,
+ gopf: 55349,
+ grave: 96,
+ GreaterEqual: 8805,
+ GreaterEqualLess: 8923,
+ GreaterFullEqual: 8807,
+ GreaterGreater: 10914,
+ GreaterLess: 8823,
+ GreaterSlantEqual: 10878,
+ GreaterTilde: 8819,
+ Gscr: 55349,
+ gscr: 8458,
+ gsim: 8819,
+ gsime: 10894,
+ gsiml: 10896,
+ gtcc: 10919,
+ gtcir: 10874,
+ gt: 62,
+ GT: 62,
+ Gt: 8811,
+ gtdot: 8919,
+ gtlPar: 10645,
+ gtquest: 10876,
+ gtrapprox: 10886,
+ gtrarr: 10616,
+ gtrdot: 8919,
+ gtreqless: 8923,
+ gtreqqless: 10892,
+ gtrless: 8823,
+ gtrsim: 8819,
+ gvertneqq: 8809,
+ gvnE: 8809,
+ Hacek: 711,
+ hairsp: 8202,
+ half: 189,
+ hamilt: 8459,
+ HARDcy: 1066,
+ hardcy: 1098,
+ harrcir: 10568,
+ harr: 8596,
+ hArr: 8660,
+ harrw: 8621,
+ Hat: 94,
+ hbar: 8463,
+ Hcirc: 292,
+ hcirc: 293,
+ hearts: 9829,
+ heartsuit: 9829,
+ hellip: 8230,
+ hercon: 8889,
+ hfr: 55349,
+ Hfr: 8460,
+ HilbertSpace: 8459,
+ hksearow: 10533,
+ hkswarow: 10534,
+ hoarr: 8703,
+ homtht: 8763,
+ hookleftarrow: 8617,
+ hookrightarrow: 8618,
+ hopf: 55349,
+ Hopf: 8461,
+ horbar: 8213,
+ HorizontalLine: 9472,
+ hscr: 55349,
+ Hscr: 8459,
+ hslash: 8463,
+ Hstrok: 294,
+ hstrok: 295,
+ HumpDownHump: 8782,
+ HumpEqual: 8783,
+ hybull: 8259,
+ hyphen: 8208,
+ Iacute: 205,
+ iacute: 237,
+ ic: 8291,
+ Icirc: 206,
+ icirc: 238,
+ Icy: 1048,
+ icy: 1080,
+ Idot: 304,
+ IEcy: 1045,
+ iecy: 1077,
+ iexcl: 161,
+ iff: 8660,
+ ifr: 55349,
+ Ifr: 8465,
+ Igrave: 204,
+ igrave: 236,
+ ii: 8520,
+ iiiint: 10764,
+ iiint: 8749,
+ iinfin: 10716,
+ iiota: 8489,
+ IJlig: 306,
+ ijlig: 307,
+ Imacr: 298,
+ imacr: 299,
+ image: 8465,
+ ImaginaryI: 8520,
+ imagline: 8464,
+ imagpart: 8465,
+ imath: 305,
+ Im: 8465,
+ imof: 8887,
+ imped: 437,
+ Implies: 8658,
+ incare: 8453,
+ 'in': 8712,
+ infin: 8734,
+ infintie: 10717,
+ inodot: 305,
+ intcal: 8890,
+ int: 8747,
+ Int: 8748,
+ integers: 8484,
+ Integral: 8747,
+ intercal: 8890,
+ Intersection: 8898,
+ intlarhk: 10775,
+ intprod: 10812,
+ InvisibleComma: 8291,
+ InvisibleTimes: 8290,
+ IOcy: 1025,
+ iocy: 1105,
+ Iogon: 302,
+ iogon: 303,
+ Iopf: 55349,
+ iopf: 55349,
+ Iota: 921,
+ iota: 953,
+ iprod: 10812,
+ iquest: 191,
+ iscr: 55349,
+ Iscr: 8464,
+ isin: 8712,
+ isindot: 8949,
+ isinE: 8953,
+ isins: 8948,
+ isinsv: 8947,
+ isinv: 8712,
+ it: 8290,
+ Itilde: 296,
+ itilde: 297,
+ Iukcy: 1030,
+ iukcy: 1110,
+ Iuml: 207,
+ iuml: 239,
+ Jcirc: 308,
+ jcirc: 309,
+ Jcy: 1049,
+ jcy: 1081,
+ Jfr: 55349,
+ jfr: 55349,
+ jmath: 567,
+ Jopf: 55349,
+ jopf: 55349,
+ Jscr: 55349,
+ jscr: 55349,
+ Jsercy: 1032,
+ jsercy: 1112,
+ Jukcy: 1028,
+ jukcy: 1108,
+ Kappa: 922,
+ kappa: 954,
+ kappav: 1008,
+ Kcedil: 310,
+ kcedil: 311,
+ Kcy: 1050,
+ kcy: 1082,
+ Kfr: 55349,
+ kfr: 55349,
+ kgreen: 312,
+ KHcy: 1061,
+ khcy: 1093,
+ KJcy: 1036,
+ kjcy: 1116,
+ Kopf: 55349,
+ kopf: 55349,
+ Kscr: 55349,
+ kscr: 55349,
+ lAarr: 8666,
+ Lacute: 313,
+ lacute: 314,
+ laemptyv: 10676,
+ lagran: 8466,
+ Lambda: 923,
+ lambda: 955,
+ lang: 10216,
+ Lang: 10218,
+ langd: 10641,
+ langle: 10216,
+ lap: 10885,
+ Laplacetrf: 8466,
+ laquo: 171,
+ larrb: 8676,
+ larrbfs: 10527,
+ larr: 8592,
+ Larr: 8606,
+ lArr: 8656,
+ larrfs: 10525,
+ larrhk: 8617,
+ larrlp: 8619,
+ larrpl: 10553,
+ larrsim: 10611,
+ larrtl: 8610,
+ latail: 10521,
+ lAtail: 10523,
+ lat: 10923,
+ late: 10925,
+ lates: 10925,
+ lbarr: 10508,
+ lBarr: 10510,
+ lbbrk: 10098,
+ lbrace: 123,
+ lbrack: 91,
+ lbrke: 10635,
+ lbrksld: 10639,
+ lbrkslu: 10637,
+ Lcaron: 317,
+ lcaron: 318,
+ Lcedil: 315,
+ lcedil: 316,
+ lceil: 8968,
+ lcub: 123,
+ Lcy: 1051,
+ lcy: 1083,
+ ldca: 10550,
+ ldquo: 8220,
+ ldquor: 8222,
+ ldrdhar: 10599,
+ ldrushar: 10571,
+ ldsh: 8626,
+ le: 8804,
+ lE: 8806,
+ LeftAngleBracket: 10216,
+ LeftArrowBar: 8676,
+ leftarrow: 8592,
+ LeftArrow: 8592,
+ Leftarrow: 8656,
+ LeftArrowRightArrow: 8646,
+ leftarrowtail: 8610,
+ LeftCeiling: 8968,
+ LeftDoubleBracket: 10214,
+ LeftDownTeeVector: 10593,
+ LeftDownVectorBar: 10585,
+ LeftDownVector: 8643,
+ LeftFloor: 8970,
+ leftharpoondown: 8637,
+ leftharpoonup: 8636,
+ leftleftarrows: 8647,
+ leftrightarrow: 8596,
+ LeftRightArrow: 8596,
+ Leftrightarrow: 8660,
+ leftrightarrows: 8646,
+ leftrightharpoons: 8651,
+ leftrightsquigarrow: 8621,
+ LeftRightVector: 10574,
+ LeftTeeArrow: 8612,
+ LeftTee: 8867,
+ LeftTeeVector: 10586,
+ leftthreetimes: 8907,
+ LeftTriangleBar: 10703,
+ LeftTriangle: 8882,
+ LeftTriangleEqual: 8884,
+ LeftUpDownVector: 10577,
+ LeftUpTeeVector: 10592,
+ LeftUpVectorBar: 10584,
+ LeftUpVector: 8639,
+ LeftVectorBar: 10578,
+ LeftVector: 8636,
+ lEg: 10891,
+ leg: 8922,
+ leq: 8804,
+ leqq: 8806,
+ leqslant: 10877,
+ lescc: 10920,
+ les: 10877,
+ lesdot: 10879,
+ lesdoto: 10881,
+ lesdotor: 10883,
+ lesg: 8922,
+ lesges: 10899,
+ lessapprox: 10885,
+ lessdot: 8918,
+ lesseqgtr: 8922,
+ lesseqqgtr: 10891,
+ LessEqualGreater: 8922,
+ LessFullEqual: 8806,
+ LessGreater: 8822,
+ lessgtr: 8822,
+ LessLess: 10913,
+ lesssim: 8818,
+ LessSlantEqual: 10877,
+ LessTilde: 8818,
+ lfisht: 10620,
+ lfloor: 8970,
+ Lfr: 55349,
+ lfr: 55349,
+ lg: 8822,
+ lgE: 10897,
+ lHar: 10594,
+ lhard: 8637,
+ lharu: 8636,
+ lharul: 10602,
+ lhblk: 9604,
+ LJcy: 1033,
+ ljcy: 1113,
+ llarr: 8647,
+ ll: 8810,
+ Ll: 8920,
+ llcorner: 8990,
+ Lleftarrow: 8666,
+ llhard: 10603,
+ lltri: 9722,
+ Lmidot: 319,
+ lmidot: 320,
+ lmoustache: 9136,
+ lmoust: 9136,
+ lnap: 10889,
+ lnapprox: 10889,
+ lne: 10887,
+ lnE: 8808,
+ lneq: 10887,
+ lneqq: 8808,
+ lnsim: 8934,
+ loang: 10220,
+ loarr: 8701,
+ lobrk: 10214,
+ longleftarrow: 10229,
+ LongLeftArrow: 10229,
+ Longleftarrow: 10232,
+ longleftrightarrow: 10231,
+ LongLeftRightArrow: 10231,
+ Longleftrightarrow: 10234,
+ longmapsto: 10236,
+ longrightarrow: 10230,
+ LongRightArrow: 10230,
+ Longrightarrow: 10233,
+ looparrowleft: 8619,
+ looparrowright: 8620,
+ lopar: 10629,
+ Lopf: 55349,
+ lopf: 55349,
+ loplus: 10797,
+ lotimes: 10804,
+ lowast: 8727,
+ lowbar: 95,
+ LowerLeftArrow: 8601,
+ LowerRightArrow: 8600,
+ loz: 9674,
+ lozenge: 9674,
+ lozf: 10731,
+ lpar: 40,
+ lparlt: 10643,
+ lrarr: 8646,
+ lrcorner: 8991,
+ lrhar: 8651,
+ lrhard: 10605,
+ lrm: 8206,
+ lrtri: 8895,
+ lsaquo: 8249,
+ lscr: 55349,
+ Lscr: 8466,
+ lsh: 8624,
+ Lsh: 8624,
+ lsim: 8818,
+ lsime: 10893,
+ lsimg: 10895,
+ lsqb: 91,
+ lsquo: 8216,
+ lsquor: 8218,
+ Lstrok: 321,
+ lstrok: 322,
+ ltcc: 10918,
+ ltcir: 10873,
+ lt: 60,
+ LT: 60,
+ Lt: 8810,
+ ltdot: 8918,
+ lthree: 8907,
+ ltimes: 8905,
+ ltlarr: 10614,
+ ltquest: 10875,
+ ltri: 9667,
+ ltrie: 8884,
+ ltrif: 9666,
+ ltrPar: 10646,
+ lurdshar: 10570,
+ luruhar: 10598,
+ lvertneqq: 8808,
+ lvnE: 8808,
+ macr: 175,
+ male: 9794,
+ malt: 10016,
+ maltese: 10016,
+ Map: 10501,
+ map: 8614,
+ mapsto: 8614,
+ mapstodown: 8615,
+ mapstoleft: 8612,
+ mapstoup: 8613,
+ marker: 9646,
+ mcomma: 10793,
+ Mcy: 1052,
+ mcy: 1084,
+ mdash: 8212,
+ mDDot: 8762,
+ measuredangle: 8737,
+ MediumSpace: 8287,
+ Mellintrf: 8499,
+ Mfr: 55349,
+ mfr: 55349,
+ mho: 8487,
+ micro: 181,
+ midast: 42,
+ midcir: 10992,
+ mid: 8739,
+ middot: 183,
+ minusb: 8863,
+ minus: 8722,
+ minusd: 8760,
+ minusdu: 10794,
+ MinusPlus: 8723,
+ mlcp: 10971,
+ mldr: 8230,
+ mnplus: 8723,
+ models: 8871,
+ Mopf: 55349,
+ mopf: 55349,
+ mp: 8723,
+ mscr: 55349,
+ Mscr: 8499,
+ mstpos: 8766,
+ Mu: 924,
+ mu: 956,
+ multimap: 8888,
+ mumap: 8888,
+ nabla: 8711,
+ Nacute: 323,
+ nacute: 324,
+ nang: 8736,
+ nap: 8777,
+ napE: 10864,
+ napid: 8779,
+ napos: 329,
+ napprox: 8777,
+ natural: 9838,
+ naturals: 8469,
+ natur: 9838,
+ nbsp: 160,
+ nbump: 8782,
+ nbumpe: 8783,
+ ncap: 10819,
+ Ncaron: 327,
+ ncaron: 328,
+ Ncedil: 325,
+ ncedil: 326,
+ ncong: 8775,
+ ncongdot: 10861,
+ ncup: 10818,
+ Ncy: 1053,
+ ncy: 1085,
+ ndash: 8211,
+ nearhk: 10532,
+ nearr: 8599,
+ neArr: 8663,
+ nearrow: 8599,
+ ne: 8800,
+ nedot: 8784,
+ NegativeMediumSpace: 8203,
+ NegativeThickSpace: 8203,
+ NegativeThinSpace: 8203,
+ NegativeVeryThinSpace: 8203,
+ nequiv: 8802,
+ nesear: 10536,
+ nesim: 8770,
+ NestedGreaterGreater: 8811,
+ NestedLessLess: 8810,
+ NewLine: 10,
+ nexist: 8708,
+ nexists: 8708,
+ Nfr: 55349,
+ nfr: 55349,
+ ngE: 8807,
+ nge: 8817,
+ ngeq: 8817,
+ ngeqq: 8807,
+ ngeqslant: 10878,
+ nges: 10878,
+ nGg: 8921,
+ ngsim: 8821,
+ nGt: 8811,
+ ngt: 8815,
+ ngtr: 8815,
+ nGtv: 8811,
+ nharr: 8622,
+ nhArr: 8654,
+ nhpar: 10994,
+ ni: 8715,
+ nis: 8956,
+ nisd: 8954,
+ niv: 8715,
+ NJcy: 1034,
+ njcy: 1114,
+ nlarr: 8602,
+ nlArr: 8653,
+ nldr: 8229,
+ nlE: 8806,
+ nle: 8816,
+ nleftarrow: 8602,
+ nLeftarrow: 8653,
+ nleftrightarrow: 8622,
+ nLeftrightarrow: 8654,
+ nleq: 8816,
+ nleqq: 8806,
+ nleqslant: 10877,
+ nles: 10877,
+ nless: 8814,
+ nLl: 8920,
+ nlsim: 8820,
+ nLt: 8810,
+ nlt: 8814,
+ nltri: 8938,
+ nltrie: 8940,
+ nLtv: 8810,
+ nmid: 8740,
+ NoBreak: 8288,
+ NonBreakingSpace: 160,
+ nopf: 55349,
+ Nopf: 8469,
+ Not: 10988,
+ not: 172,
+ NotCongruent: 8802,
+ NotCupCap: 8813,
+ NotDoubleVerticalBar: 8742,
+ NotElement: 8713,
+ NotEqual: 8800,
+ NotEqualTilde: 8770,
+ NotExists: 8708,
+ NotGreater: 8815,
+ NotGreaterEqual: 8817,
+ NotGreaterFullEqual: 8807,
+ NotGreaterGreater: 8811,
+ NotGreaterLess: 8825,
+ NotGreaterSlantEqual: 10878,
+ NotGreaterTilde: 8821,
+ NotHumpDownHump: 8782,
+ NotHumpEqual: 8783,
+ notin: 8713,
+ notindot: 8949,
+ notinE: 8953,
+ notinva: 8713,
+ notinvb: 8951,
+ notinvc: 8950,
+ NotLeftTriangleBar: 10703,
+ NotLeftTriangle: 8938,
+ NotLeftTriangleEqual: 8940,
+ NotLess: 8814,
+ NotLessEqual: 8816,
+ NotLessGreater: 8824,
+ NotLessLess: 8810,
+ NotLessSlantEqual: 10877,
+ NotLessTilde: 8820,
+ NotNestedGreaterGreater: 10914,
+ NotNestedLessLess: 10913,
+ notni: 8716,
+ notniva: 8716,
+ notnivb: 8958,
+ notnivc: 8957,
+ NotPrecedes: 8832,
+ NotPrecedesEqual: 10927,
+ NotPrecedesSlantEqual: 8928,
+ NotReverseElement: 8716,
+ NotRightTriangleBar: 10704,
+ NotRightTriangle: 8939,
+ NotRightTriangleEqual: 8941,
+ NotSquareSubset: 8847,
+ NotSquareSubsetEqual: 8930,
+ NotSquareSuperset: 8848,
+ NotSquareSupersetEqual: 8931,
+ NotSubset: 8834,
+ NotSubsetEqual: 8840,
+ NotSucceeds: 8833,
+ NotSucceedsEqual: 10928,
+ NotSucceedsSlantEqual: 8929,
+ NotSucceedsTilde: 8831,
+ NotSuperset: 8835,
+ NotSupersetEqual: 8841,
+ NotTilde: 8769,
+ NotTildeEqual: 8772,
+ NotTildeFullEqual: 8775,
+ NotTildeTilde: 8777,
+ NotVerticalBar: 8740,
+ nparallel: 8742,
+ npar: 8742,
+ nparsl: 11005,
+ npart: 8706,
+ npolint: 10772,
+ npr: 8832,
+ nprcue: 8928,
+ nprec: 8832,
+ npreceq: 10927,
+ npre: 10927,
+ nrarrc: 10547,
+ nrarr: 8603,
+ nrArr: 8655,
+ nrarrw: 8605,
+ nrightarrow: 8603,
+ nRightarrow: 8655,
+ nrtri: 8939,
+ nrtrie: 8941,
+ nsc: 8833,
+ nsccue: 8929,
+ nsce: 10928,
+ Nscr: 55349,
+ nscr: 55349,
+ nshortmid: 8740,
+ nshortparallel: 8742,
+ nsim: 8769,
+ nsime: 8772,
+ nsimeq: 8772,
+ nsmid: 8740,
+ nspar: 8742,
+ nsqsube: 8930,
+ nsqsupe: 8931,
+ nsub: 8836,
+ nsubE: 10949,
+ nsube: 8840,
+ nsubset: 8834,
+ nsubseteq: 8840,
+ nsubseteqq: 10949,
+ nsucc: 8833,
+ nsucceq: 10928,
+ nsup: 8837,
+ nsupE: 10950,
+ nsupe: 8841,
+ nsupset: 8835,
+ nsupseteq: 8841,
+ nsupseteqq: 10950,
+ ntgl: 8825,
+ Ntilde: 209,
+ ntilde: 241,
+ ntlg: 8824,
+ ntriangleleft: 8938,
+ ntrianglelefteq: 8940,
+ ntriangleright: 8939,
+ ntrianglerighteq: 8941,
+ Nu: 925,
+ nu: 957,
+ num: 35,
+ numero: 8470,
+ numsp: 8199,
+ nvap: 8781,
+ nvdash: 8876,
+ nvDash: 8877,
+ nVdash: 8878,
+ nVDash: 8879,
+ nvge: 8805,
+ nvgt: 62,
+ nvHarr: 10500,
+ nvinfin: 10718,
+ nvlArr: 10498,
+ nvle: 8804,
+ nvlt: 62,
+ nvltrie: 8884,
+ nvrArr: 10499,
+ nvrtrie: 8885,
+ nvsim: 8764,
+ nwarhk: 10531,
+ nwarr: 8598,
+ nwArr: 8662,
+ nwarrow: 8598,
+ nwnear: 10535,
+ Oacute: 211,
+ oacute: 243,
+ oast: 8859,
+ Ocirc: 212,
+ ocirc: 244,
+ ocir: 8858,
+ Ocy: 1054,
+ ocy: 1086,
+ odash: 8861,
+ Odblac: 336,
+ odblac: 337,
+ odiv: 10808,
+ odot: 8857,
+ odsold: 10684,
+ OElig: 338,
+ oelig: 339,
+ ofcir: 10687,
+ Ofr: 55349,
+ ofr: 55349,
+ ogon: 731,
+ Ograve: 210,
+ ograve: 242,
+ ogt: 10689,
+ ohbar: 10677,
+ ohm: 937,
+ oint: 8750,
+ olarr: 8634,
+ olcir: 10686,
+ olcross: 10683,
+ oline: 8254,
+ olt: 10688,
+ Omacr: 332,
+ omacr: 333,
+ Omega: 937,
+ omega: 969,
+ Omicron: 927,
+ omicron: 959,
+ omid: 10678,
+ ominus: 8854,
+ Oopf: 55349,
+ oopf: 55349,
+ opar: 10679,
+ OpenCurlyDoubleQuote: 8220,
+ OpenCurlyQuote: 8216,
+ operp: 10681,
+ oplus: 8853,
+ orarr: 8635,
+ Or: 10836,
+ or: 8744,
+ ord: 10845,
+ order: 8500,
+ orderof: 8500,
+ ordf: 170,
+ ordm: 186,
+ origof: 8886,
+ oror: 10838,
+ orslope: 10839,
+ orv: 10843,
+ oS: 9416,
+ Oscr: 55349,
+ oscr: 8500,
+ Oslash: 216,
+ oslash: 248,
+ osol: 8856,
+ Otilde: 213,
+ otilde: 245,
+ otimesas: 10806,
+ Otimes: 10807,
+ otimes: 8855,
+ Ouml: 214,
+ ouml: 246,
+ ovbar: 9021,
+ OverBar: 8254,
+ OverBrace: 9182,
+ OverBracket: 9140,
+ OverParenthesis: 9180,
+ para: 182,
+ parallel: 8741,
+ par: 8741,
+ parsim: 10995,
+ parsl: 11005,
+ part: 8706,
+ PartialD: 8706,
+ Pcy: 1055,
+ pcy: 1087,
+ percnt: 37,
+ period: 46,
+ permil: 8240,
+ perp: 8869,
+ pertenk: 8241,
+ Pfr: 55349,
+ pfr: 55349,
+ Phi: 934,
+ phi: 966,
+ phiv: 981,
+ phmmat: 8499,
+ phone: 9742,
+ Pi: 928,
+ pi: 960,
+ pitchfork: 8916,
+ piv: 982,
+ planck: 8463,
+ planckh: 8462,
+ plankv: 8463,
+ plusacir: 10787,
+ plusb: 8862,
+ pluscir: 10786,
+ plus: 43,
+ plusdo: 8724,
+ plusdu: 10789,
+ pluse: 10866,
+ PlusMinus: 177,
+ plusmn: 177,
+ plussim: 10790,
+ plustwo: 10791,
+ pm: 177,
+ Poincareplane: 8460,
+ pointint: 10773,
+ popf: 55349,
+ Popf: 8473,
+ pound: 163,
+ prap: 10935,
+ Pr: 10939,
+ pr: 8826,
+ prcue: 8828,
+ precapprox: 10935,
+ prec: 8826,
+ preccurlyeq: 8828,
+ Precedes: 8826,
+ PrecedesEqual: 10927,
+ PrecedesSlantEqual: 8828,
+ PrecedesTilde: 8830,
+ preceq: 10927,
+ precnapprox: 10937,
+ precneqq: 10933,
+ precnsim: 8936,
+ pre: 10927,
+ prE: 10931,
+ precsim: 8830,
+ prime: 8242,
+ Prime: 8243,
+ primes: 8473,
+ prnap: 10937,
+ prnE: 10933,
+ prnsim: 8936,
+ prod: 8719,
+ Product: 8719,
+ profalar: 9006,
+ profline: 8978,
+ profsurf: 8979,
+ prop: 8733,
+ Proportional: 8733,
+ Proportion: 8759,
+ propto: 8733,
+ prsim: 8830,
+ prurel: 8880,
+ Pscr: 55349,
+ pscr: 55349,
+ Psi: 936,
+ psi: 968,
+ puncsp: 8200,
+ Qfr: 55349,
+ qfr: 55349,
+ qint: 10764,
+ qopf: 55349,
+ Qopf: 8474,
+ qprime: 8279,
+ Qscr: 55349,
+ qscr: 55349,
+ quaternions: 8461,
+ quatint: 10774,
+ quest: 63,
+ questeq: 8799,
+ quot: 34,
+ QUOT: 34,
+ rAarr: 8667,
+ race: 8765,
+ Racute: 340,
+ racute: 341,
+ radic: 8730,
+ raemptyv: 10675,
+ rang: 10217,
+ Rang: 10219,
+ rangd: 10642,
+ range: 10661,
+ rangle: 10217,
+ raquo: 187,
+ rarrap: 10613,
+ rarrb: 8677,
+ rarrbfs: 10528,
+ rarrc: 10547,
+ rarr: 8594,
+ Rarr: 8608,
+ rArr: 8658,
+ rarrfs: 10526,
+ rarrhk: 8618,
+ rarrlp: 8620,
+ rarrpl: 10565,
+ rarrsim: 10612,
+ Rarrtl: 10518,
+ rarrtl: 8611,
+ rarrw: 8605,
+ ratail: 10522,
+ rAtail: 10524,
+ ratio: 8758,
+ rationals: 8474,
+ rbarr: 10509,
+ rBarr: 10511,
+ RBarr: 10512,
+ rbbrk: 10099,
+ rbrace: 125,
+ rbrack: 93,
+ rbrke: 10636,
+ rbrksld: 10638,
+ rbrkslu: 10640,
+ Rcaron: 344,
+ rcaron: 345,
+ Rcedil: 342,
+ rcedil: 343,
+ rceil: 8969,
+ rcub: 125,
+ Rcy: 1056,
+ rcy: 1088,
+ rdca: 10551,
+ rdldhar: 10601,
+ rdquo: 8221,
+ rdquor: 8221,
+ rdsh: 8627,
+ real: 8476,
+ realine: 8475,
+ realpart: 8476,
+ reals: 8477,
+ Re: 8476,
+ rect: 9645,
+ reg: 174,
+ REG: 174,
+ ReverseElement: 8715,
+ ReverseEquilibrium: 8651,
+ ReverseUpEquilibrium: 10607,
+ rfisht: 10621,
+ rfloor: 8971,
+ rfr: 55349,
+ Rfr: 8476,
+ rHar: 10596,
+ rhard: 8641,
+ rharu: 8640,
+ rharul: 10604,
+ Rho: 929,
+ rho: 961,
+ rhov: 1009,
+ RightAngleBracket: 10217,
+ RightArrowBar: 8677,
+ rightarrow: 8594,
+ RightArrow: 8594,
+ Rightarrow: 8658,
+ RightArrowLeftArrow: 8644,
+ rightarrowtail: 8611,
+ RightCeiling: 8969,
+ RightDoubleBracket: 10215,
+ RightDownTeeVector: 10589,
+ RightDownVectorBar: 10581,
+ RightDownVector: 8642,
+ RightFloor: 8971,
+ rightharpoondown: 8641,
+ rightharpoonup: 8640,
+ rightleftarrows: 8644,
+ rightleftharpoons: 8652,
+ rightrightarrows: 8649,
+ rightsquigarrow: 8605,
+ RightTeeArrow: 8614,
+ RightTee: 8866,
+ RightTeeVector: 10587,
+ rightthreetimes: 8908,
+ RightTriangleBar: 10704,
+ RightTriangle: 8883,
+ RightTriangleEqual: 8885,
+ RightUpDownVector: 10575,
+ RightUpTeeVector: 10588,
+ RightUpVectorBar: 10580,
+ RightUpVector: 8638,
+ RightVectorBar: 10579,
+ RightVector: 8640,
+ ring: 730,
+ risingdotseq: 8787,
+ rlarr: 8644,
+ rlhar: 8652,
+ rlm: 8207,
+ rmoustache: 9137,
+ rmoust: 9137,
+ rnmid: 10990,
+ roang: 10221,
+ roarr: 8702,
+ robrk: 10215,
+ ropar: 10630,
+ ropf: 55349,
+ Ropf: 8477,
+ roplus: 10798,
+ rotimes: 10805,
+ RoundImplies: 10608,
+ rpar: 41,
+ rpargt: 10644,
+ rppolint: 10770,
+ rrarr: 8649,
+ Rrightarrow: 8667,
+ rsaquo: 8250,
+ rscr: 55349,
+ Rscr: 8475,
+ rsh: 8625,
+ Rsh: 8625,
+ rsqb: 93,
+ rsquo: 8217,
+ rsquor: 8217,
+ rthree: 8908,
+ rtimes: 8906,
+ rtri: 9657,
+ rtrie: 8885,
+ rtrif: 9656,
+ rtriltri: 10702,
+ RuleDelayed: 10740,
+ ruluhar: 10600,
+ rx: 8478,
+ Sacute: 346,
+ sacute: 347,
+ sbquo: 8218,
+ scap: 10936,
+ Scaron: 352,
+ scaron: 353,
+ Sc: 10940,
+ sc: 8827,
+ sccue: 8829,
+ sce: 10928,
+ scE: 10932,
+ Scedil: 350,
+ scedil: 351,
+ Scirc: 348,
+ scirc: 349,
+ scnap: 10938,
+ scnE: 10934,
+ scnsim: 8937,
+ scpolint: 10771,
+ scsim: 8831,
+ Scy: 1057,
+ scy: 1089,
+ sdotb: 8865,
+ sdot: 8901,
+ sdote: 10854,
+ searhk: 10533,
+ searr: 8600,
+ seArr: 8664,
+ searrow: 8600,
+ sect: 167,
+ semi: 59,
+ seswar: 10537,
+ setminus: 8726,
+ setmn: 8726,
+ sext: 10038,
+ Sfr: 55349,
+ sfr: 55349,
+ sfrown: 8994,
+ sharp: 9839,
+ SHCHcy: 1065,
+ shchcy: 1097,
+ SHcy: 1064,
+ shcy: 1096,
+ ShortDownArrow: 8595,
+ ShortLeftArrow: 8592,
+ shortmid: 8739,
+ shortparallel: 8741,
+ ShortRightArrow: 8594,
+ ShortUpArrow: 8593,
+ shy: 173,
+ Sigma: 931,
+ sigma: 963,
+ sigmaf: 962,
+ sigmav: 962,
+ sim: 8764,
+ simdot: 10858,
+ sime: 8771,
+ simeq: 8771,
+ simg: 10910,
+ simgE: 10912,
+ siml: 10909,
+ simlE: 10911,
+ simne: 8774,
+ simplus: 10788,
+ simrarr: 10610,
+ slarr: 8592,
+ SmallCircle: 8728,
+ smallsetminus: 8726,
+ smashp: 10803,
+ smeparsl: 10724,
+ smid: 8739,
+ smile: 8995,
+ smt: 10922,
+ smte: 10924,
+ smtes: 10924,
+ SOFTcy: 1068,
+ softcy: 1100,
+ solbar: 9023,
+ solb: 10692,
+ sol: 47,
+ Sopf: 55349,
+ sopf: 55349,
+ spades: 9824,
+ spadesuit: 9824,
+ spar: 8741,
+ sqcap: 8851,
+ sqcaps: 8851,
+ sqcup: 8852,
+ sqcups: 8852,
+ Sqrt: 8730,
+ sqsub: 8847,
+ sqsube: 8849,
+ sqsubset: 8847,
+ sqsubseteq: 8849,
+ sqsup: 8848,
+ sqsupe: 8850,
+ sqsupset: 8848,
+ sqsupseteq: 8850,
+ square: 9633,
+ Square: 9633,
+ SquareIntersection: 8851,
+ SquareSubset: 8847,
+ SquareSubsetEqual: 8849,
+ SquareSuperset: 8848,
+ SquareSupersetEqual: 8850,
+ SquareUnion: 8852,
+ squarf: 9642,
+ squ: 9633,
+ squf: 9642,
+ srarr: 8594,
+ Sscr: 55349,
+ sscr: 55349,
+ ssetmn: 8726,
+ ssmile: 8995,
+ sstarf: 8902,
+ Star: 8902,
+ star: 9734,
+ starf: 9733,
+ straightepsilon: 1013,
+ straightphi: 981,
+ strns: 175,
+ sub: 8834,
+ Sub: 8912,
+ subdot: 10941,
+ subE: 10949,
+ sube: 8838,
+ subedot: 10947,
+ submult: 10945,
+ subnE: 10955,
+ subne: 8842,
+ subplus: 10943,
+ subrarr: 10617,
+ subset: 8834,
+ Subset: 8912,
+ subseteq: 8838,
+ subseteqq: 10949,
+ SubsetEqual: 8838,
+ subsetneq: 8842,
+ subsetneqq: 10955,
+ subsim: 10951,
+ subsub: 10965,
+ subsup: 10963,
+ succapprox: 10936,
+ succ: 8827,
+ succcurlyeq: 8829,
+ Succeeds: 8827,
+ SucceedsEqual: 10928,
+ SucceedsSlantEqual: 8829,
+ SucceedsTilde: 8831,
+ succeq: 10928,
+ succnapprox: 10938,
+ succneqq: 10934,
+ succnsim: 8937,
+ succsim: 8831,
+ SuchThat: 8715,
+ sum: 8721,
+ Sum: 8721,
+ sung: 9834,
+ sup1: 185,
+ sup2: 178,
+ sup3: 179,
+ sup: 8835,
+ Sup: 8913,
+ supdot: 10942,
+ supdsub: 10968,
+ supE: 10950,
+ supe: 8839,
+ supedot: 10948,
+ Superset: 8835,
+ SupersetEqual: 8839,
+ suphsol: 10185,
+ suphsub: 10967,
+ suplarr: 10619,
+ supmult: 10946,
+ supnE: 10956,
+ supne: 8843,
+ supplus: 10944,
+ supset: 8835,
+ Supset: 8913,
+ supseteq: 8839,
+ supseteqq: 10950,
+ supsetneq: 8843,
+ supsetneqq: 10956,
+ supsim: 10952,
+ supsub: 10964,
+ supsup: 10966,
+ swarhk: 10534,
+ swarr: 8601,
+ swArr: 8665,
+ swarrow: 8601,
+ swnwar: 10538,
+ szlig: 223,
+ Tab: NaN,
+ target: 8982,
+ Tau: 932,
+ tau: 964,
+ tbrk: 9140,
+ Tcaron: 356,
+ tcaron: 357,
+ Tcedil: 354,
+ tcedil: 355,
+ Tcy: 1058,
+ tcy: 1090,
+ tdot: 8411,
+ telrec: 8981,
+ Tfr: 55349,
+ tfr: 55349,
+ there4: 8756,
+ therefore: 8756,
+ Therefore: 8756,
+ Theta: 920,
+ theta: 952,
+ thetasym: 977,
+ thetav: 977,
+ thickapprox: 8776,
+ thicksim: 8764,
+ ThickSpace: 8287,
+ ThinSpace: 8201,
+ thinsp: 8201,
+ thkap: 8776,
+ thksim: 8764,
+ THORN: 222,
+ thorn: 254,
+ tilde: 732,
+ Tilde: 8764,
+ TildeEqual: 8771,
+ TildeFullEqual: 8773,
+ TildeTilde: 8776,
+ timesbar: 10801,
+ timesb: 8864,
+ times: 215,
+ timesd: 10800,
+ tint: 8749,
+ toea: 10536,
+ topbot: 9014,
+ topcir: 10993,
+ top: 8868,
+ Topf: 55349,
+ topf: 55349,
+ topfork: 10970,
+ tosa: 10537,
+ tprime: 8244,
+ trade: 8482,
+ TRADE: 8482,
+ triangle: 9653,
+ triangledown: 9663,
+ triangleleft: 9667,
+ trianglelefteq: 8884,
+ triangleq: 8796,
+ triangleright: 9657,
+ trianglerighteq: 8885,
+ tridot: 9708,
+ trie: 8796,
+ triminus: 10810,
+ TripleDot: 8411,
+ triplus: 10809,
+ trisb: 10701,
+ tritime: 10811,
+ trpezium: 9186,
+ Tscr: 55349,
+ tscr: 55349,
+ TScy: 1062,
+ tscy: 1094,
+ TSHcy: 1035,
+ tshcy: 1115,
+ Tstrok: 358,
+ tstrok: 359,
+ twixt: 8812,
+ twoheadleftarrow: 8606,
+ twoheadrightarrow: 8608,
+ Uacute: 218,
+ uacute: 250,
+ uarr: 8593,
+ Uarr: 8607,
+ uArr: 8657,
+ Uarrocir: 10569,
+ Ubrcy: 1038,
+ ubrcy: 1118,
+ Ubreve: 364,
+ ubreve: 365,
+ Ucirc: 219,
+ ucirc: 251,
+ Ucy: 1059,
+ ucy: 1091,
+ udarr: 8645,
+ Udblac: 368,
+ udblac: 369,
+ udhar: 10606,
+ ufisht: 10622,
+ Ufr: 55349,
+ ufr: 55349,
+ Ugrave: 217,
+ ugrave: 249,
+ uHar: 10595,
+ uharl: 8639,
+ uharr: 8638,
+ uhblk: 9600,
+ ulcorn: 8988,
+ ulcorner: 8988,
+ ulcrop: 8975,
+ ultri: 9720,
+ Umacr: 362,
+ umacr: 363,
+ uml: 168,
+ UnderBar: 95,
+ UnderBrace: 9183,
+ UnderBracket: 9141,
+ UnderParenthesis: 9181,
+ Union: 8899,
+ UnionPlus: 8846,
+ Uogon: 370,
+ uogon: 371,
+ Uopf: 55349,
+ uopf: 55349,
+ UpArrowBar: 10514,
+ uparrow: 8593,
+ UpArrow: 8593,
+ Uparrow: 8657,
+ UpArrowDownArrow: 8645,
+ updownarrow: 8597,
+ UpDownArrow: 8597,
+ Updownarrow: 8661,
+ UpEquilibrium: 10606,
+ upharpoonleft: 8639,
+ upharpoonright: 8638,
+ uplus: 8846,
+ UpperLeftArrow: 8598,
+ UpperRightArrow: 8599,
+ upsi: 965,
+ Upsi: 978,
+ upsih: 978,
+ Upsilon: 933,
+ upsilon: 965,
+ UpTeeArrow: 8613,
+ UpTee: 8869,
+ upuparrows: 8648,
+ urcorn: 8989,
+ urcorner: 8989,
+ urcrop: 8974,
+ Uring: 366,
+ uring: 367,
+ urtri: 9721,
+ Uscr: 55349,
+ uscr: 55349,
+ utdot: 8944,
+ Utilde: 360,
+ utilde: 361,
+ utri: 9653,
+ utrif: 9652,
+ uuarr: 8648,
+ Uuml: 220,
+ uuml: 252,
+ uwangle: 10663,
+ vangrt: 10652,
+ varepsilon: 1013,
+ varkappa: 1008,
+ varnothing: 8709,
+ varphi: 981,
+ varpi: 982,
+ varpropto: 8733,
+ varr: 8597,
+ vArr: 8661,
+ varrho: 1009,
+ varsigma: 962,
+ varsubsetneq: 8842,
+ varsubsetneqq: 10955,
+ varsupsetneq: 8843,
+ varsupsetneqq: 10956,
+ vartheta: 977,
+ vartriangleleft: 8882,
+ vartriangleright: 8883,
+ vBar: 10984,
+ Vbar: 10987,
+ vBarv: 10985,
+ Vcy: 1042,
+ vcy: 1074,
+ vdash: 8866,
+ vDash: 8872,
+ Vdash: 8873,
+ VDash: 8875,
+ Vdashl: 10982,
+ veebar: 8891,
+ vee: 8744,
+ Vee: 8897,
+ veeeq: 8794,
+ vellip: 8942,
+ verbar: 124,
+ Verbar: 8214,
+ vert: 124,
+ Vert: 8214,
+ VerticalBar: 8739,
+ VerticalLine: 124,
+ VerticalSeparator: 10072,
+ VerticalTilde: 8768,
+ VeryThinSpace: 8202,
+ Vfr: 55349,
+ vfr: 55349,
+ vltri: 8882,
+ vnsub: 8834,
+ vnsup: 8835,
+ Vopf: 55349,
+ vopf: 55349,
+ vprop: 8733,
+ vrtri: 8883,
+ Vscr: 55349,
+ vscr: 55349,
+ vsubnE: 10955,
+ vsubne: 8842,
+ vsupnE: 10956,
+ vsupne: 8843,
+ Vvdash: 8874,
+ vzigzag: 10650,
+ Wcirc: 372,
+ wcirc: 373,
+ wedbar: 10847,
+ wedge: 8743,
+ Wedge: 8896,
+ wedgeq: 8793,
+ weierp: 8472,
+ Wfr: 55349,
+ wfr: 55349,
+ Wopf: 55349,
+ wopf: 55349,
+ wp: 8472,
+ wr: 8768,
+ wreath: 8768,
+ Wscr: 55349,
+ wscr: 55349,
+ xcap: 8898,
+ xcirc: 9711,
+ xcup: 8899,
+ xdtri: 9661,
+ Xfr: 55349,
+ xfr: 55349,
+ xharr: 10231,
+ xhArr: 10234,
+ Xi: 926,
+ xi: 958,
+ xlarr: 10229,
+ xlArr: 10232,
+ xmap: 10236,
+ xnis: 8955,
+ xodot: 10752,
+ Xopf: 55349,
+ xopf: 55349,
+ xoplus: 10753,
+ xotime: 10754,
+ xrarr: 10230,
+ xrArr: 10233,
+ Xscr: 55349,
+ xscr: 55349,
+ xsqcup: 10758,
+ xuplus: 10756,
+ xutri: 9651,
+ xvee: 8897,
+ xwedge: 8896,
+ Yacute: 221,
+ yacute: 253,
+ YAcy: 1071,
+ yacy: 1103,
+ Ycirc: 374,
+ ycirc: 375,
+ Ycy: 1067,
+ ycy: 1099,
+ yen: 165,
+ Yfr: 55349,
+ yfr: 55349,
+ YIcy: 1031,
+ yicy: 1111,
+ Yopf: 55349,
+ yopf: 55349,
+ Yscr: 55349,
+ yscr: 55349,
+ YUcy: 1070,
+ yucy: 1102,
+ yuml: 255,
+ Yuml: 376,
+ Zacute: 377,
+ zacute: 378,
+ Zcaron: 381,
+ zcaron: 382,
+ Zcy: 1047,
+ zcy: 1079,
+ Zdot: 379,
+ zdot: 380,
+ zeetrf: 8488,
+ ZeroWidthSpace: 8203,
+ Zeta: 918,
+ zeta: 950,
+ zfr: 55349,
+ Zfr: 8488,
+ ZHcy: 1046,
+ zhcy: 1078,
+ zigrarr: 8669,
+ zopf: 55349,
+ Zopf: 8484,
+ Zscr: 55349,
+ zscr: 55349,
+ zwj: 8205,
+ zwnj: 8204 };
+
+var entityToChar = function(m) {
+ var isNumeric = /^/.test(m);
+ var isHex = /^[Xx]/.test(m);
+ var uchar;
+ var ucode;
+ if (isNumeric) {
+ var num;
+ if (isHex) {
+ num = parseInt(m.slice(3, m.length - 1), 16);
+ } else {
+ num = parseInt(m.slice(2, m.length - 1), 10);
+ }
+ uchar = fromCodePoint(num);
+ } else {
+ ucode = entities[m.slice(1, m.length - 1)];
+ if (ucode) {
+ uchar = fromCodePoint(entities[m.slice(1, m.length - 1)]);
+ }
+ }
+ return (uchar || m);
+};
+
+module.exports.entityToChar = entityToChar;
+
+},{"./from-code-point":3}],6:[function(require,module,exports){
+"use strict";
+
+// commonmark.js - CommomMark in JavaScript
+// Copyright (C) 2014 John MacFarlane
+// License: BSD3.
+
+// Basic usage:
+//
+// var commonmark = require('commonmark');
+// var parser = new commonmark.Parser();
+// var renderer = new commonmark.HtmlRenderer();
+// console.log(renderer.render(parser.parse('Hello *world*')));
+
+module.exports.Node = require('./node');
+module.exports.Parser = require('./blocks');
+module.exports.HtmlRenderer = require('./html');
+module.exports.XmlRenderer = require('./xml');
+
+},{"./blocks":1,"./html":4,"./node":8,"./xml":10}],7:[function(require,module,exports){
+"use strict";
+
+var Node = require('./node');
+var common = require('./common');
+var normalizeReference = require('./normalize-reference');
+
+var normalizeURI = common.normalizeURI;
+var unescapeString = common.unescapeString;
+var fromCodePoint = require('./from-code-point.js');
+var entityToChar = require('./html5-entities.js').entityToChar;
+
+// Constants for character codes:
+
+var C_NEWLINE = 10;
+var C_ASTERISK = 42;
+var C_UNDERSCORE = 95;
+var C_BACKTICK = 96;
+var C_OPEN_BRACKET = 91;
+var C_CLOSE_BRACKET = 93;
+var C_LESSTHAN = 60;
+var C_BANG = 33;
+var C_BACKSLASH = 92;
+var C_AMPERSAND = 38;
+var C_OPEN_PAREN = 40;
+var C_COLON = 58;
+
+// Some regexps used in inline parser:
+
+var ESCAPABLE = '[!"#$%&\'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]';
+var ESCAPED_CHAR = '\\\\' + ESCAPABLE;
+var REG_CHAR = '[^\\\\()\\x00-\\x20]';
+var IN_PARENS_NOSP = '\\((' + REG_CHAR + '|' + ESCAPED_CHAR + ')*\\)';
+var TAGNAME = '[A-Za-z][A-Za-z0-9]*';
+var ATTRIBUTENAME = '[a-zA-Z_:][a-zA-Z0-9:._-]*';
+var UNQUOTEDVALUE = "[^\"'=<>`\\x00-\\x20]+";
+var SINGLEQUOTEDVALUE = "'[^']*'";
+var DOUBLEQUOTEDVALUE = '"[^"]*"';
+var ATTRIBUTEVALUE = "(?:" + UNQUOTEDVALUE + "|" + SINGLEQUOTEDVALUE + "|" + DOUBLEQUOTEDVALUE + ")";
+var ATTRIBUTEVALUESPEC = "(?:" + "\\s*=" + "\\s*" + ATTRIBUTEVALUE + ")";
+var ATTRIBUTE = "(?:" + "\\s+" + ATTRIBUTENAME + ATTRIBUTEVALUESPEC + "?)";
+var OPENTAG = "<" + TAGNAME + ATTRIBUTE + "*" + "\\s*/?>";
+var CLOSETAG = "" + TAGNAME + "\\s*[>]";
+var HTMLCOMMENT = "|";
+var PROCESSINGINSTRUCTION = "[<][?].*?[?][>]";
+var DECLARATION = "]*>";
+var CDATA = "";
+var HTMLTAG = "(?:" + OPENTAG + "|" + CLOSETAG + "|" + HTMLCOMMENT + "|" +
+ PROCESSINGINSTRUCTION + "|" + DECLARATION + "|" + CDATA + ")";
+var ENTITY = "&(?:#x[a-f0-9]{1,8}|#[0-9]{1,8}|[a-z][a-z0-9]{1,31});";
+
+var rePunctuation = new RegExp(/^[\u2000-\u206F\u2E00-\u2E7F\\'!"#\$%&\(\)\*\+,\-\.\/:;<=>\?@\[\]\^_`\{\|\}~]/);
+
+var reHtmlTag = new RegExp('^' + HTMLTAG, 'i');
+
+var reLinkTitle = new RegExp(
+ '^(?:"(' + ESCAPED_CHAR + '|[^"\\x00])*"' +
+ '|' +
+ '\'(' + ESCAPED_CHAR + '|[^\'\\x00])*\'' +
+ '|' +
+ '\\((' + ESCAPED_CHAR + '|[^)\\x00])*\\))');
+
+var reLinkDestinationBraces = new RegExp(
+ '^(?:[<](?:[^<>\\n\\\\\\x00]' + '|' + ESCAPED_CHAR + '|' + '\\\\)*[>])');
+
+var reLinkDestination = new RegExp(
+ '^(?:' + REG_CHAR + '+|' + ESCAPED_CHAR + '|' + IN_PARENS_NOSP + ')*');
+
+var reEscapable = new RegExp('^' + ESCAPABLE);
+
+var reEntityHere = new RegExp('^' + ENTITY, 'i');
+
+var reTicks = /`+/;
+
+var reTicksHere = /^`+/;
+
+var reEmailAutolink = /^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/;
+
+var reAutolink = /^<(?:coap|doi|javascript|aaa|aaas|about|acap|cap|cid|crid|data|dav|dict|dns|file|ftp|geo|go|gopher|h323|http|https|iax|icap|im|imap|info|ipp|iris|iris.beep|iris.xpc|iris.xpcs|iris.lwz|ldap|mailto|mid|msrp|msrps|mtqp|mupdate|news|nfs|ni|nih|nntp|opaquelocktoken|pop|pres|rtsp|service|session|shttp|sieve|sip|sips|sms|snmp|soap.beep|soap.beeps|tag|tel|telnet|tftp|thismessage|tn3270|tip|tv|urn|vemmi|ws|wss|xcon|xcon-userid|xmlrpc.beep|xmlrpc.beeps|xmpp|z39.50r|z39.50s|adiumxtra|afp|afs|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|chrome|chrome-extension|com-eventbrite-attendee|content|cvs|dlna-playsingle|dlna-playcontainer|dtn|dvb|ed2k|facetime|feed|finger|fish|gg|git|gizmoproject|gtalk|hcp|icon|ipn|irc|irc6|ircs|itms|jar|jms|keyparc|lastfm|ldaps|magnet|maps|market|message|mms|ms-help|msnim|mumble|mvn|notes|oid|palm|paparazzi|platform|proxy|psyc|query|res|resource|rmi|rsync|rtmp|secondlife|sftp|sgn|skype|smb|soldat|spotify|ssh|steam|svn|teamspeak|things|udp|unreal|ut2004|ventrilo|view-source|webcal|wtai|wyciwyg|xfire|xri|ymsgr):[^<>\x00-\x20]*>/i;
+
+var reSpnl = /^ *(?:\n *)?/;
+
+var reWhitespaceChar = /^\s/;
+
+var reWhitespace = /\s+/g;
+
+var reFinalSpace = / *$/;
+
+var reInitialSpace = /^ */;
+
+var reLinkLabel = /^\[(?:[^\\\[\]]|\\[\[\]]){0,1000}\]/;
+
+// Matches a string of non-special characters.
+var reMain = /^[^\n`\[\]\\!<&*_]+/m;
+
+var text = function(s) {
+ var node = new Node('Text');
+ node._literal = s;
+ return node;
+};
+
+// INLINE PARSER
+
+// These are methods of an InlineParser object, defined below.
+// An InlineParser keeps track of a subject (a string to be
+// parsed) and a position in that subject.
+
+// If re matches at current position in the subject, advance
+// position in subject and return the match; otherwise return null.
+var match = function(re) {
+ var m = re.exec(this.subject.slice(this.pos));
+ if (m) {
+ this.pos += m.index + m[0].length;
+ return m[0];
+ } else {
+ return null;
+ }
+};
+
+// Returns the code for the character at the current subject position, or -1
+// there are no more characters.
+var peek = function() {
+ if (this.pos < this.subject.length) {
+ return this.subject.charCodeAt(this.pos);
+ } else {
+ return -1;
+ }
+};
+
+// Parse zero or more space characters, including at most one newline
+var spnl = function() {
+ this.match(reSpnl);
+ return 1;
+};
+
+// All of the parsers below try to match something at the current position
+// in the subject. If they succeed in matching anything, they
+// return the inline matched, advancing the subject.
+
+// Attempt to parse backticks, adding either a backtick code span or a
+// literal sequence of backticks.
+var parseBackticks = function(block) {
+ var ticks = this.match(reTicksHere);
+ if (ticks === null) {
+ return 0;
+ }
+ var afterOpenTicks = this.pos;
+ var matched;
+ var node;
+ while ((matched = this.match(reTicks)) !== null) {
+ if (matched === ticks) {
+ node = new Node('Code');
+ node._literal = this.subject.slice(afterOpenTicks,
+ this.pos - ticks.length)
+ .trim().replace(reWhitespace, ' ');
+ block.appendChild(node);
+ return true;
+ }
+ }
+ // If we got here, we didn't match a closing backtick sequence.
+ this.pos = afterOpenTicks;
+ block.appendChild(text(ticks));
+ return true;
+};
+
+// Parse a backslash-escaped special character, adding either the escaped
+// character, a hard line break (if the backslash is followed by a newline),
+// or a literal backslash to the block's children. Assumes current character
+// is a backslash.
+var parseBackslash = function(block) {
+ var subj = this.subject,
+ pos = this.pos;
+ var node;
+ if (subj.charAt(pos + 1) === '\n') {
+ this.pos = this.pos + 2;
+ node = new Node('Hardbreak');
+ block.appendChild(node);
+ } else if (reEscapable.test(subj.charAt(pos + 1))) {
+ this.pos = this.pos + 2;
+ block.appendChild(text(subj.charAt(pos + 1)));
+ } else {
+ this.pos++;
+ block.appendChild(text('\\'));
+ }
+ return true;
+};
+
+// Attempt to parse an autolink (URL or email in pointy brackets).
+var parseAutolink = function(block) {
+ var m;
+ var dest;
+ var node;
+ if ((m = this.match(reEmailAutolink))) {
+ dest = m.slice(1, m.length - 1);
+ node = new Node('Link');
+ node._destination = normalizeURI('mailto:' + dest);
+ node._title = '';
+ node.appendChild(text(dest));
+ block.appendChild(node);
+ return true;
+ } else if ((m = this.match(reAutolink))) {
+ dest = m.slice(1, m.length - 1);
+ node = new Node('Link');
+ node._destination = normalizeURI(dest);
+ node._title = '';
+ node.appendChild(text(dest));
+ block.appendChild(node);
+ return true;
+ } else {
+ return false;
+ }
+};
+
+// Attempt to parse a raw HTML tag.
+var parseHtmlTag = function(block) {
+ var m = this.match(reHtmlTag);
+ if (m === null) {
+ return false;
+ } else {
+ var node = new Node('Html');
+ node._literal = m;
+ block.appendChild(node);
+ return true;
+ }
+};
+
+// Scan a sequence of characters with code cc, and return information about
+// the number of delimiters and whether they are positioned such that
+// they can open and/or close emphasis or strong emphasis. A utility
+// function for strong/emph parsing.
+var scanDelims = function(cc) {
+ var numdelims = 0;
+ var char_before, char_after, cc_after;
+ var startpos = this.pos;
+ var left_flanking, right_flanking, can_open, can_close;
+
+ char_before = this.pos === 0 ? '\n' :
+ this.subject.charAt(this.pos - 1);
+
+ while (this.peek() === cc) {
+ numdelims++;
+ this.pos++;
+ }
+
+ cc_after = this.peek();
+ if (cc_after === -1) {
+ char_after = '\n';
+ } else {
+ char_after = fromCodePoint(cc_after);
+ }
+
+ left_flanking = numdelims > 0 &&
+ !(reWhitespaceChar.test(char_after)) &&
+ !(rePunctuation.test(char_after) &&
+ !(reWhitespaceChar.test(char_before)) &&
+ !(rePunctuation.test(char_before)));
+ right_flanking = numdelims > 0 &&
+ !(reWhitespaceChar.test(char_before)) &&
+ !(rePunctuation.test(char_before) &&
+ !(reWhitespaceChar.test(char_after)) &&
+ !(rePunctuation.test(char_after)));
+ if (cc === C_UNDERSCORE) {
+ can_open = left_flanking && !right_flanking;
+ can_close = right_flanking && !left_flanking;
+ } else {
+ can_open = left_flanking;
+ can_close = right_flanking;
+ }
+ this.pos = startpos;
+ return { numdelims: numdelims,
+ can_open: can_open,
+ can_close: can_close };
+};
+
+// Attempt to parse emphasis or strong emphasis.
+var parseEmphasis = function(cc, block) {
+ var res = this.scanDelims(cc);
+ var numdelims = res.numdelims;
+ var startpos = this.pos;
+
+ if (numdelims === 0) {
+ return false;
+ }
+
+ this.pos += numdelims;
+ var node = text(this.subject.slice(startpos, this.pos));
+ block.appendChild(node);
+
+ // Add entry to stack for this opener
+ this.delimiters = { cc: cc,
+ numdelims: numdelims,
+ node: node,
+ previous: this.delimiters,
+ next: null,
+ can_open: res.can_open,
+ can_close: res.can_close,
+ active: true };
+ if (this.delimiters.previous !== null) {
+ this.delimiters.previous.next = this.delimiters;
+ }
+
+ return true;
+
+};
+
+var removeDelimiter = function(delim) {
+ if (delim.previous !== null) {
+ delim.previous.next = delim.next;
+ }
+ if (delim.next === null) {
+ // top of stack
+ this.delimiters = delim.previous;
+ } else {
+ delim.next.previous = delim.previous;
+ }
+};
+
+var processEmphasis = function(block, stack_bottom) {
+ var opener, closer;
+ var opener_inl, closer_inl;
+ var nextstack, tempstack;
+ var use_delims;
+ var tmp, next;
+
+ // find first closer above stack_bottom:
+ closer = this.delimiters;
+ while (closer !== null && closer.previous !== stack_bottom) {
+ closer = closer.previous;
+ }
+ // move forward, looking for closers, and handling each
+ while (closer !== null) {
+ if (closer.can_close && (closer.cc === C_UNDERSCORE || closer.cc === C_ASTERISK)) {
+ // found emphasis closer. now look back for first matching opener:
+ opener = closer.previous;
+ while (opener !== null && opener !== stack_bottom) {
+ if (opener.cc === closer.cc && opener.can_open) {
+ break;
+ }
+ opener = opener.previous;
+ }
+ if (opener !== null && opener !== stack_bottom) {
+ // calculate actual number of delimiters used from this closer
+ if (closer.numdelims < 3 || opener.numdelims < 3) {
+ use_delims = closer.numdelims <= opener.numdelims ?
+ closer.numdelims : opener.numdelims;
+ } else {
+ use_delims = closer.numdelims % 2 === 0 ? 2 : 1;
+ }
+
+ opener_inl = opener.node;
+ closer_inl = closer.node;
+
+ // remove used delimiters from stack elts and inlines
+ opener.numdelims -= use_delims;
+ closer.numdelims -= use_delims;
+ opener_inl._literal =
+ opener_inl._literal.slice(0,
+ opener_inl._literal.length - use_delims);
+ closer_inl._literal =
+ closer_inl._literal.slice(0,
+ closer_inl._literal.length - use_delims);
+
+ // build contents for new emph element
+ var emph = new Node(use_delims === 1 ? 'Emph' : 'Strong');
+
+ tmp = opener_inl._next;
+ while (tmp && tmp !== closer_inl) {
+ next = tmp._next;
+ tmp.unlink();
+ emph.appendChild(tmp);
+ tmp = next;
+ }
+
+ opener_inl.insertAfter(emph);
+
+ // remove elts btw opener and closer in delimiters stack
+ tempstack = closer.previous;
+ while (tempstack !== null && tempstack !== opener) {
+ nextstack = tempstack.previous;
+ this.removeDelimiter(tempstack);
+ tempstack = nextstack;
+ }
+
+ // if opener has 0 delims, remove it and the inline
+ if (opener.numdelims === 0) {
+ opener_inl.unlink();
+ this.removeDelimiter(opener);
+ }
+
+ if (closer.numdelims === 0) {
+ closer_inl.unlink();
+ tempstack = closer.next;
+ this.removeDelimiter(closer);
+ closer = tempstack;
+ }
+
+ } else {
+ closer = closer.next;
+ }
+
+ } else {
+ closer = closer.next;
+ }
+
+ }
+
+ // remove all delimiters
+ while (this.delimiters !== stack_bottom) {
+ this.removeDelimiter(this.delimiters);
+ }
+};
+
+// Attempt to parse link title (sans quotes), returning the string
+// or null if no match.
+var parseLinkTitle = function() {
+ var title = this.match(reLinkTitle);
+ if (title === null) {
+ return null;
+ } else {
+ // chop off quotes from title and unescape:
+ return unescapeString(title.substr(1, title.length - 2));
+ }
+};
+
+// Attempt to parse link destination, returning the string or
+// null if no match.
+var parseLinkDestination = function() {
+ var res = this.match(reLinkDestinationBraces);
+ if (res === null) {
+ res = this.match(reLinkDestination);
+ if (res === null) {
+ return null;
+ } else {
+ return normalizeURI(unescapeString(res));
+ }
+ } else { // chop off surrounding <..>:
+ return normalizeURI(unescapeString(res.substr(1, res.length - 2)));
+ }
+};
+
+// Attempt to parse a link label, returning number of characters parsed.
+var parseLinkLabel = function() {
+ var m = this.match(reLinkLabel);
+ return m === null ? 0 : m.length;
+};
+
+// Add open bracket to delimiter stack and add a text node to block's children.
+var parseOpenBracket = function(block) {
+ var startpos = this.pos;
+ this.pos += 1;
+
+ var node = text('[');
+ block.appendChild(node);
+
+ // Add entry to stack for this opener
+ this.delimiters = { cc: C_OPEN_BRACKET,
+ numdelims: 1,
+ node: node,
+ previous: this.delimiters,
+ next: null,
+ can_open: true,
+ can_close: false,
+ index: startpos,
+ active: true };
+ if (this.delimiters.previous !== null) {
+ this.delimiters.previous.next = this.delimiters;
+ }
+
+ return true;
+
+};
+
+// IF next character is [, and ! delimiter to delimiter stack and
+// add a text node to block's children. Otherwise just add a text node.
+var parseBang = function(block) {
+ var startpos = this.pos;
+ this.pos += 1;
+ if (this.peek() === C_OPEN_BRACKET) {
+ this.pos += 1;
+
+ var node = text('![');
+ block.appendChild(node);
+
+ // Add entry to stack for this opener
+ this.delimiters = { cc: C_BANG,
+ numdelims: 1,
+ node: node,
+ previous: this.delimiters,
+ next: null,
+ can_open: true,
+ can_close: false,
+ index: startpos + 1,
+ active: true };
+ if (this.delimiters.previous !== null) {
+ this.delimiters.previous.next = this.delimiters;
+ }
+ } else {
+ block.appendChild(text('!'));
+ }
+ return true;
+};
+
+// Try to match close bracket against an opening in the delimiter
+// stack. Add either a link or image, or a plain [ character,
+// to block's children. If there is a matching delimiter,
+// remove it from the delimiter stack.
+var parseCloseBracket = function(block) {
+ var startpos;
+ var is_image;
+ var dest;
+ var title;
+ var matched = false;
+ var reflabel;
+ var opener;
+
+ this.pos += 1;
+ startpos = this.pos;
+
+ // look through stack of delimiters for a [ or ![
+ opener = this.delimiters;
+
+ while (opener !== null) {
+ if (opener.cc === C_OPEN_BRACKET || opener.cc === C_BANG) {
+ break;
+ }
+ opener = opener.previous;
+ }
+
+ if (opener === null) {
+ // no matched opener, just return a literal
+ block.appendChild(text(']'));
+ return true;
+ }
+
+ if (!opener.active) {
+ // no matched opener, just return a literal
+ block.appendChild(text(']'));
+ // take opener off emphasis stack
+ this.removeDelimiter(opener);
+ return true;
+ }
+
+ // If we got here, open is a potential opener
+ is_image = opener.cc === C_BANG;
+
+ // Check to see if we have a link/image
+
+ // Inline link?
+ if (this.peek() === C_OPEN_PAREN) {
+ this.pos++;
+ if (this.spnl() &&
+ ((dest = this.parseLinkDestination()) !== null) &&
+ this.spnl() &&
+ // make sure there's a space before the title:
+ (reWhitespaceChar.test(this.subject.charAt(this.pos - 1)) &&
+ (title = this.parseLinkTitle()) || true) &&
+ this.spnl() &&
+ this.subject.charAt(this.pos) === ')') {
+ this.pos += 1;
+ matched = true;
+ }
+ } else {
+
+ // Next, see if there's a link label
+ var savepos = this.pos;
+ this.spnl();
+ var beforelabel = this.pos;
+ var n = this.parseLinkLabel();
+ if (n === 0 || n === 2) {
+ // empty or missing second label
+ reflabel = this.subject.slice(opener.index, startpos);
+ } else {
+ reflabel = this.subject.slice(beforelabel, beforelabel + n);
+ }
+ if (n === 0) {
+ // If shortcut reference link, rewind before spaces we skipped.
+ this.pos = savepos;
+ }
+
+ // lookup rawlabel in refmap
+ var link = this.refmap[normalizeReference(reflabel)];
+ if (link) {
+ dest = link.destination;
+ title = link.title;
+ matched = true;
+ }
+ }
+
+ if (matched) {
+ var node = new Node(is_image ? 'Image' : 'Link');
+ node._destination = dest;
+ node._title = title || '';
+
+ var tmp, next;
+ tmp = opener.node._next;
+ while (tmp) {
+ next = tmp._next;
+ tmp.unlink();
+ node.appendChild(tmp);
+ tmp = next;
+ }
+ block.appendChild(node);
+ this.processEmphasis(node, opener.previous);
+
+ opener.node.unlink();
+
+ // processEmphasis will remove this and later delimiters.
+ // Now, for a link, we also deactivate earlier link openers.
+ // (no links in links)
+ if (!is_image) {
+ opener = this.delimiters;
+ while (opener !== null) {
+ if (opener.cc === C_OPEN_BRACKET) {
+ opener.active = false; // deactivate this opener
+ }
+ opener = opener.previous;
+ }
+ }
+
+ return true;
+
+ } else { // no match
+
+ this.removeDelimiter(opener); // remove this opener from stack
+ this.pos = startpos;
+ block.appendChild(text(']'));
+ return true;
+ }
+
+};
+
+// Attempt to parse an entity, return Entity object if successful.
+var parseEntity = function(block) {
+ var m;
+ if ((m = this.match(reEntityHere))) {
+ block.appendChild(text(entityToChar(m)));
+ return true;
+ } else {
+ return false;
+ }
+};
+
+// Parse a run of ordinary characters, or a single character with
+// a special meaning in markdown, as a plain string.
+var parseString = function(block) {
+ var m;
+ if ((m = this.match(reMain))) {
+ block.appendChild(text(m));
+ return true;
+ } else {
+ return false;
+ }
+};
+
+// Parse a newline. If it was preceded by two spaces, return a hard
+// line break; otherwise a soft line break.
+var parseNewline = function(block) {
+ this.pos += 1; // assume we're at a \n
+ // check previous node for trailing spaces
+ var lastc = block._lastChild;
+ if (lastc && lastc.type === 'Text') {
+ var sps = reFinalSpace.exec(lastc._literal)[0].length;
+ if (sps > 0) {
+ lastc._literal = lastc._literal.replace(reFinalSpace, '');
+ }
+ block.appendChild(new Node(sps >= 2 ? 'Hardbreak' : 'Softbreak'));
+ } else {
+ block.appendChild(new Node('Softbreak'));
+ }
+ this.match(reInitialSpace); // gobble leading spaces in next line
+ return true;
+};
+
+// Attempt to parse a link reference, modifying refmap.
+var parseReference = function(s, refmap) {
+ this.subject = s;
+ this.pos = 0;
+ var rawlabel;
+ var dest;
+ var title;
+ var matchChars;
+ var startpos = this.pos;
+
+ // label:
+ matchChars = this.parseLinkLabel();
+ if (matchChars === 0) {
+ return 0;
+ } else {
+ rawlabel = this.subject.substr(0, matchChars);
+ }
+
+ // colon:
+ if (this.peek() === C_COLON) {
+ this.pos++;
+ } else {
+ this.pos = startpos;
+ return 0;
+ }
+
+ // link url
+ this.spnl();
+
+ dest = this.parseLinkDestination();
+ if (dest === null || dest.length === 0) {
+ this.pos = startpos;
+ return 0;
+ }
+
+ var beforetitle = this.pos;
+ this.spnl();
+ title = this.parseLinkTitle();
+ if (title === null) {
+ title = '';
+ // rewind before spaces
+ this.pos = beforetitle;
+ }
+
+ // make sure we're at line end:
+ if (this.match(/^ *(?:\n|$)/) === null) {
+ this.pos = startpos;
+ return 0;
+ }
+
+ var normlabel = normalizeReference(rawlabel);
+
+ if (!refmap[normlabel]) {
+ refmap[normlabel] = { destination: dest, title: title };
+ }
+ return this.pos - startpos;
+};
+
+// Parse the next inline element in subject, advancing subject position.
+// On success, add the result to block's children and return true.
+// On failure, return false.
+var parseInline = function(block) {
+ var res = false;
+ var c = this.peek();
+ if (c === -1) {
+ return false;
+ }
+ switch(c) {
+ case C_NEWLINE:
+ res = this.parseNewline(block);
+ break;
+ case C_BACKSLASH:
+ res = this.parseBackslash(block);
+ break;
+ case C_BACKTICK:
+ res = this.parseBackticks(block);
+ break;
+ case C_ASTERISK:
+ case C_UNDERSCORE:
+ res = this.parseEmphasis(c, block);
+ break;
+ case C_OPEN_BRACKET:
+ res = this.parseOpenBracket(block);
+ break;
+ case C_BANG:
+ res = this.parseBang(block);
+ break;
+ case C_CLOSE_BRACKET:
+ res = this.parseCloseBracket(block);
+ break;
+ case C_LESSTHAN:
+ res = this.parseAutolink(block) || this.parseHtmlTag(block);
+ break;
+ case C_AMPERSAND:
+ res = this.parseEntity(block);
+ break;
+ default:
+ res = this.parseString(block);
+ break;
+ }
+ if (!res) {
+ this.pos += 1;
+ var textnode = new Node('Text');
+ textnode._literal = fromCodePoint(c);
+ block.appendChild(textnode);
+ }
+
+ return true;
+};
+
+// Parse string content in block into inline children,
+// using refmap to resolve references.
+var parseInlines = function(block) {
+ this.subject = block._string_content.trim();
+ this.pos = 0;
+ this.delimiters = null;
+ while (this.parseInline(block)) {
+ }
+ block._string_content = null; // allow raw string to be garbage collected
+ this.processEmphasis(block, null);
+};
+
+// The InlineParser object.
+function InlineParser(){
+ return {
+ subject: '',
+ delimiters: null, // used by parseEmphasis method
+ pos: 0,
+ refmap: {},
+ match: match,
+ peek: peek,
+ spnl: spnl,
+ parseBackticks: parseBackticks,
+ parseBackslash: parseBackslash,
+ parseAutolink: parseAutolink,
+ parseHtmlTag: parseHtmlTag,
+ scanDelims: scanDelims,
+ parseEmphasis: parseEmphasis,
+ parseLinkTitle: parseLinkTitle,
+ parseLinkDestination: parseLinkDestination,
+ parseLinkLabel: parseLinkLabel,
+ parseOpenBracket: parseOpenBracket,
+ parseCloseBracket: parseCloseBracket,
+ parseBang: parseBang,
+ parseEntity: parseEntity,
+ parseString: parseString,
+ parseNewline: parseNewline,
+ parseReference: parseReference,
+ parseInline: parseInline,
+ processEmphasis: processEmphasis,
+ removeDelimiter: removeDelimiter,
+ parse: parseInlines
+ };
+}
+
+module.exports = InlineParser;
+
+},{"./common":2,"./from-code-point.js":3,"./html5-entities.js":5,"./node":8,"./normalize-reference":9}],8:[function(require,module,exports){
+"use strict";
+
+function isContainer(node) {
+ switch (node._type) {
+ case 'Document':
+ case 'BlockQuote':
+ case 'List':
+ case 'Item':
+ case 'Paragraph':
+ case 'Header':
+ case 'Emph':
+ case 'Strong':
+ case 'Link':
+ case 'Image':
+ return true;
+ default:
+ return false;
+ }
+}
+
+var resumeAt = function(node, entering) {
+ this.current = node;
+ this.entering = (entering === true);
+};
+
+var next = function(){
+ var cur = this.current;
+ var entering = this.entering;
+
+ if (cur === null) {
+ return null;
+ }
+
+ var container = isContainer(cur);
+
+ if (entering && container) {
+ if (cur._firstChild) {
+ this.current = cur._firstChild;
+ this.entering = true;
+ } else {
+ // stay on node but exit
+ this.entering = false;
+ }
+
+ } else if (cur._next === null) {
+ this.current = cur._parent;
+ this.entering = false;
+
+ } else {
+ this.current = cur._next;
+ this.entering = true;
+ }
+
+ return {entering: entering, node: cur};
+};
+
+var NodeWalker = function(root) {
+ return { current: root,
+ root: root,
+ entering: true,
+ next: next,
+ resumeAt: resumeAt };
+};
+
+var Node = function(nodeType, sourcepos) {
+ this._type = nodeType;
+ this._parent = null;
+ this._firstChild = null;
+ this._lastChild = null;
+ this._prev = null;
+ this._next = null;
+ this._sourcepos = sourcepos;
+ this._lastLineBlank = false;
+ this._open = true;
+ this._string_content = null;
+ this._literal = null;
+ this._listData = null;
+ this._info = null;
+ this._destination = null;
+ this._title = null;
+ this._isFenced = false;
+ this._fenceChar = null;
+ this._fenceLength = 0;
+ this._fenceOffset = null;
+ this._level = null;
+};
+
+var proto = Node.prototype;
+
+Node.prototype.isContainer = function() {
+ return isContainer(this);
+};
+
+Object.defineProperty(proto, 'type', {
+ get: function() { return this._type; }
+});
+
+Object.defineProperty(proto, 'firstChild', {
+ get: function() { return this._firstChild; }
+});
+
+Object.defineProperty(proto, 'lastChild', {
+ get: function() { return this._lastChild; }
+});
+
+Object.defineProperty(proto, 'next', {
+ get: function() { return this._next; }
+});
+
+Object.defineProperty(proto, 'prev', {
+ get: function() { return this._prev; }
+});
+
+Object.defineProperty(proto, 'parent', {
+ get: function() { return this._parent; }
+});
+
+Object.defineProperty(proto, 'sourcepos', {
+ get: function() { return this._sourcepos; }
+});
+
+Object.defineProperty(proto, 'literal', {
+ get: function() { return this._literal; },
+ set: function(s) { this._literal = s; }
+});
+
+Object.defineProperty(proto, 'destination', {
+ get: function() { return this._destination; },
+ set: function(s) { this._destination = s; }
+});
+
+Object.defineProperty(proto, 'title', {
+ get: function() { return this._title; },
+ set: function(s) { this._title = s; }
+});
+
+Object.defineProperty(proto, 'info', {
+ get: function() { return this._info; },
+ set: function(s) { this._info = s; }
+});
+
+Object.defineProperty(proto, 'level', {
+ get: function() { return this._level; },
+ set: function(s) { this._level = s; }
+});
+
+Object.defineProperty(proto, 'listType', {
+ get: function() { return this._listData.type; },
+ set: function(t) { this._listData.type = t; }
+});
+
+Object.defineProperty(proto, 'listTight', {
+ get: function() { return this._listData.tight; },
+ set: function(t) { this._listData.tight = t; }
+});
+
+Object.defineProperty(proto, 'listStart', {
+ get: function() { return this._listData.start; },
+ set: function(n) { this._listData.start = n; }
+});
+
+Object.defineProperty(proto, 'listDelimiter', {
+ get: function() { return this._listData.delimiter; },
+ set: function(delim) { this._listData.delimiter = delim; }
+});
+
+Node.prototype.appendChild = function(child) {
+ child.unlink();
+ child._parent = this;
+ if (this._lastChild) {
+ this._lastChild._next = child;
+ child._prev = this._lastChild;
+ this._lastChild = child;
+ } else {
+ this._firstChild = child;
+ this._lastChild = child;
+ }
+};
+
+Node.prototype.prependChild = function(child) {
+ child.unlink();
+ child._parent = this;
+ if (this._firstChild) {
+ this._firstChild._prev = child;
+ child._next = this._firstChild;
+ this._firstChild = child;
+ } else {
+ this._firstChild = child;
+ this._lastChild = child;
+ }
+};
+
+Node.prototype.unlink = function() {
+ if (this._prev) {
+ this._prev._next = this._next;
+ } else if (this._parent) {
+ this._parent._firstChild = this._next;
+ }
+ if (this._next) {
+ this._next._prev = this._prev;
+ } else if (this._parent) {
+ this._parent._lastChild = this._prev;
+ }
+ this._parent = null;
+ this._next = null;
+ this._prev = null;
+};
+
+Node.prototype.insertAfter = function(sibling) {
+ sibling.unlink();
+ sibling._next = this._next;
+ if (sibling._next) {
+ sibling._next._prev = sibling;
+ }
+ sibling._prev = this;
+ this._next = sibling;
+ sibling._parent = this._parent;
+ if (!sibling._next) {
+ sibling._parent._lastChild = sibling;
+ }
+};
+
+Node.prototype.insertBefore = function(sibling) {
+ sibling.unlink();
+ sibling._prev = this._prev;
+ if (sibling._prev) {
+ sibling._prev._next = sibling;
+ }
+ sibling._next = this;
+ this._prev = sibling;
+ sibling._parent = this._parent;
+ if (!sibling._prev) {
+ sibling._parent._firstChild = sibling;
+ }
+};
+
+Node.prototype.walker = function() {
+ var walker = new NodeWalker(this);
+ return walker;
+};
+
+module.exports = Node;
+
+
+/* Example of use of walker:
+
+ var walker = w.walker();
+ var event;
+
+ while (event = walker.next()) {
+ console.log(event.entering, event.node.type());
+ }
+
+ */
+
+},{}],9:[function(require,module,exports){
+"use strict";
+
+/* The bulk of this code derives from https://github.com/dmoscrop/fold-case
+But in addition to case-folding, we also normalize whitespace.
+
+fold-case is Copyright Mathias Bynens
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+/*eslint-disable key-spacing, comma-spacing */
+
+var regex = /[ \t\r\n]+|[A-Z\xB5\xC0-\xD6\xD8-\xDF\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u0149\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u017F\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C5\u01C7\u01C8\u01CA\u01CB\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F0-\u01F2\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0345\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03AB\u03B0\u03C2\u03CF-\u03D1\u03D5\u03D6\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F0\u03F1\u03F4\u03F5\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u0587\u10A0-\u10C5\u10C7\u10CD\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E96-\u1E9B\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F50\u1F52\u1F54\u1F56\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1F80-\u1FAF\u1FB2-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD2\u1FD3\u1FD6-\u1FDB\u1FE2-\u1FE4\u1FE6-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u2132\u2160-\u216F\u2183\u24B6-\u24CF\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AD\uA7B0\uA7B1\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A]|\uD801[\uDC00-\uDC27]|\uD806[\uDCA0-\uDCBF]/g;
+
+var map = {'A':'a','B':'b','C':'c','D':'d','E':'e','F':'f','G':'g','H':'h','I':'i','J':'j','K':'k','L':'l','M':'m','N':'n','O':'o','P':'p','Q':'q','R':'r','S':'s','T':'t','U':'u','V':'v','W':'w','X':'x','Y':'y','Z':'z','\xB5':'\u03BC','\xC0':'\xE0','\xC1':'\xE1','\xC2':'\xE2','\xC3':'\xE3','\xC4':'\xE4','\xC5':'\xE5','\xC6':'\xE6','\xC7':'\xE7','\xC8':'\xE8','\xC9':'\xE9','\xCA':'\xEA','\xCB':'\xEB','\xCC':'\xEC','\xCD':'\xED','\xCE':'\xEE','\xCF':'\xEF','\xD0':'\xF0','\xD1':'\xF1','\xD2':'\xF2','\xD3':'\xF3','\xD4':'\xF4','\xD5':'\xF5','\xD6':'\xF6','\xD8':'\xF8','\xD9':'\xF9','\xDA':'\xFA','\xDB':'\xFB','\xDC':'\xFC','\xDD':'\xFD','\xDE':'\xFE','\u0100':'\u0101','\u0102':'\u0103','\u0104':'\u0105','\u0106':'\u0107','\u0108':'\u0109','\u010A':'\u010B','\u010C':'\u010D','\u010E':'\u010F','\u0110':'\u0111','\u0112':'\u0113','\u0114':'\u0115','\u0116':'\u0117','\u0118':'\u0119','\u011A':'\u011B','\u011C':'\u011D','\u011E':'\u011F','\u0120':'\u0121','\u0122':'\u0123','\u0124':'\u0125','\u0126':'\u0127','\u0128':'\u0129','\u012A':'\u012B','\u012C':'\u012D','\u012E':'\u012F','\u0132':'\u0133','\u0134':'\u0135','\u0136':'\u0137','\u0139':'\u013A','\u013B':'\u013C','\u013D':'\u013E','\u013F':'\u0140','\u0141':'\u0142','\u0143':'\u0144','\u0145':'\u0146','\u0147':'\u0148','\u014A':'\u014B','\u014C':'\u014D','\u014E':'\u014F','\u0150':'\u0151','\u0152':'\u0153','\u0154':'\u0155','\u0156':'\u0157','\u0158':'\u0159','\u015A':'\u015B','\u015C':'\u015D','\u015E':'\u015F','\u0160':'\u0161','\u0162':'\u0163','\u0164':'\u0165','\u0166':'\u0167','\u0168':'\u0169','\u016A':'\u016B','\u016C':'\u016D','\u016E':'\u016F','\u0170':'\u0171','\u0172':'\u0173','\u0174':'\u0175','\u0176':'\u0177','\u0178':'\xFF','\u0179':'\u017A','\u017B':'\u017C','\u017D':'\u017E','\u017F':'s','\u0181':'\u0253','\u0182':'\u0183','\u0184':'\u0185','\u0186':'\u0254','\u0187':'\u0188','\u0189':'\u0256','\u018A':'\u0257','\u018B':'\u018C','\u018E':'\u01DD','\u018F':'\u0259','\u0190':'\u025B','\u0191':'\u0192','\u0193':'\u0260','\u0194':'\u0263','\u0196':'\u0269','\u0197':'\u0268','\u0198':'\u0199','\u019C':'\u026F','\u019D':'\u0272','\u019F':'\u0275','\u01A0':'\u01A1','\u01A2':'\u01A3','\u01A4':'\u01A5','\u01A6':'\u0280','\u01A7':'\u01A8','\u01A9':'\u0283','\u01AC':'\u01AD','\u01AE':'\u0288','\u01AF':'\u01B0','\u01B1':'\u028A','\u01B2':'\u028B','\u01B3':'\u01B4','\u01B5':'\u01B6','\u01B7':'\u0292','\u01B8':'\u01B9','\u01BC':'\u01BD','\u01C4':'\u01C6','\u01C5':'\u01C6','\u01C7':'\u01C9','\u01C8':'\u01C9','\u01CA':'\u01CC','\u01CB':'\u01CC','\u01CD':'\u01CE','\u01CF':'\u01D0','\u01D1':'\u01D2','\u01D3':'\u01D4','\u01D5':'\u01D6','\u01D7':'\u01D8','\u01D9':'\u01DA','\u01DB':'\u01DC','\u01DE':'\u01DF','\u01E0':'\u01E1','\u01E2':'\u01E3','\u01E4':'\u01E5','\u01E6':'\u01E7','\u01E8':'\u01E9','\u01EA':'\u01EB','\u01EC':'\u01ED','\u01EE':'\u01EF','\u01F1':'\u01F3','\u01F2':'\u01F3','\u01F4':'\u01F5','\u01F6':'\u0195','\u01F7':'\u01BF','\u01F8':'\u01F9','\u01FA':'\u01FB','\u01FC':'\u01FD','\u01FE':'\u01FF','\u0200':'\u0201','\u0202':'\u0203','\u0204':'\u0205','\u0206':'\u0207','\u0208':'\u0209','\u020A':'\u020B','\u020C':'\u020D','\u020E':'\u020F','\u0210':'\u0211','\u0212':'\u0213','\u0214':'\u0215','\u0216':'\u0217','\u0218':'\u0219','\u021A':'\u021B','\u021C':'\u021D','\u021E':'\u021F','\u0220':'\u019E','\u0222':'\u0223','\u0224':'\u0225','\u0226':'\u0227','\u0228':'\u0229','\u022A':'\u022B','\u022C':'\u022D','\u022E':'\u022F','\u0230':'\u0231','\u0232':'\u0233','\u023A':'\u2C65','\u023B':'\u023C','\u023D':'\u019A','\u023E':'\u2C66','\u0241':'\u0242','\u0243':'\u0180','\u0244':'\u0289','\u0245':'\u028C','\u0246':'\u0247','\u0248':'\u0249','\u024A':'\u024B','\u024C':'\u024D','\u024E':'\u024F','\u0345':'\u03B9','\u0370':'\u0371','\u0372':'\u0373','\u0376':'\u0377','\u037F':'\u03F3','\u0386':'\u03AC','\u0388':'\u03AD','\u0389':'\u03AE','\u038A':'\u03AF','\u038C':'\u03CC','\u038E':'\u03CD','\u038F':'\u03CE','\u0391':'\u03B1','\u0392':'\u03B2','\u0393':'\u03B3','\u0394':'\u03B4','\u0395':'\u03B5','\u0396':'\u03B6','\u0397':'\u03B7','\u0398':'\u03B8','\u0399':'\u03B9','\u039A':'\u03BA','\u039B':'\u03BB','\u039C':'\u03BC','\u039D':'\u03BD','\u039E':'\u03BE','\u039F':'\u03BF','\u03A0':'\u03C0','\u03A1':'\u03C1','\u03A3':'\u03C3','\u03A4':'\u03C4','\u03A5':'\u03C5','\u03A6':'\u03C6','\u03A7':'\u03C7','\u03A8':'\u03C8','\u03A9':'\u03C9','\u03AA':'\u03CA','\u03AB':'\u03CB','\u03C2':'\u03C3','\u03CF':'\u03D7','\u03D0':'\u03B2','\u03D1':'\u03B8','\u03D5':'\u03C6','\u03D6':'\u03C0','\u03D8':'\u03D9','\u03DA':'\u03DB','\u03DC':'\u03DD','\u03DE':'\u03DF','\u03E0':'\u03E1','\u03E2':'\u03E3','\u03E4':'\u03E5','\u03E6':'\u03E7','\u03E8':'\u03E9','\u03EA':'\u03EB','\u03EC':'\u03ED','\u03EE':'\u03EF','\u03F0':'\u03BA','\u03F1':'\u03C1','\u03F4':'\u03B8','\u03F5':'\u03B5','\u03F7':'\u03F8','\u03F9':'\u03F2','\u03FA':'\u03FB','\u03FD':'\u037B','\u03FE':'\u037C','\u03FF':'\u037D','\u0400':'\u0450','\u0401':'\u0451','\u0402':'\u0452','\u0403':'\u0453','\u0404':'\u0454','\u0405':'\u0455','\u0406':'\u0456','\u0407':'\u0457','\u0408':'\u0458','\u0409':'\u0459','\u040A':'\u045A','\u040B':'\u045B','\u040C':'\u045C','\u040D':'\u045D','\u040E':'\u045E','\u040F':'\u045F','\u0410':'\u0430','\u0411':'\u0431','\u0412':'\u0432','\u0413':'\u0433','\u0414':'\u0434','\u0415':'\u0435','\u0416':'\u0436','\u0417':'\u0437','\u0418':'\u0438','\u0419':'\u0439','\u041A':'\u043A','\u041B':'\u043B','\u041C':'\u043C','\u041D':'\u043D','\u041E':'\u043E','\u041F':'\u043F','\u0420':'\u0440','\u0421':'\u0441','\u0422':'\u0442','\u0423':'\u0443','\u0424':'\u0444','\u0425':'\u0445','\u0426':'\u0446','\u0427':'\u0447','\u0428':'\u0448','\u0429':'\u0449','\u042A':'\u044A','\u042B':'\u044B','\u042C':'\u044C','\u042D':'\u044D','\u042E':'\u044E','\u042F':'\u044F','\u0460':'\u0461','\u0462':'\u0463','\u0464':'\u0465','\u0466':'\u0467','\u0468':'\u0469','\u046A':'\u046B','\u046C':'\u046D','\u046E':'\u046F','\u0470':'\u0471','\u0472':'\u0473','\u0474':'\u0475','\u0476':'\u0477','\u0478':'\u0479','\u047A':'\u047B','\u047C':'\u047D','\u047E':'\u047F','\u0480':'\u0481','\u048A':'\u048B','\u048C':'\u048D','\u048E':'\u048F','\u0490':'\u0491','\u0492':'\u0493','\u0494':'\u0495','\u0496':'\u0497','\u0498':'\u0499','\u049A':'\u049B','\u049C':'\u049D','\u049E':'\u049F','\u04A0':'\u04A1','\u04A2':'\u04A3','\u04A4':'\u04A5','\u04A6':'\u04A7','\u04A8':'\u04A9','\u04AA':'\u04AB','\u04AC':'\u04AD','\u04AE':'\u04AF','\u04B0':'\u04B1','\u04B2':'\u04B3','\u04B4':'\u04B5','\u04B6':'\u04B7','\u04B8':'\u04B9','\u04BA':'\u04BB','\u04BC':'\u04BD','\u04BE':'\u04BF','\u04C0':'\u04CF','\u04C1':'\u04C2','\u04C3':'\u04C4','\u04C5':'\u04C6','\u04C7':'\u04C8','\u04C9':'\u04CA','\u04CB':'\u04CC','\u04CD':'\u04CE','\u04D0':'\u04D1','\u04D2':'\u04D3','\u04D4':'\u04D5','\u04D6':'\u04D7','\u04D8':'\u04D9','\u04DA':'\u04DB','\u04DC':'\u04DD','\u04DE':'\u04DF','\u04E0':'\u04E1','\u04E2':'\u04E3','\u04E4':'\u04E5','\u04E6':'\u04E7','\u04E8':'\u04E9','\u04EA':'\u04EB','\u04EC':'\u04ED','\u04EE':'\u04EF','\u04F0':'\u04F1','\u04F2':'\u04F3','\u04F4':'\u04F5','\u04F6':'\u04F7','\u04F8':'\u04F9','\u04FA':'\u04FB','\u04FC':'\u04FD','\u04FE':'\u04FF','\u0500':'\u0501','\u0502':'\u0503','\u0504':'\u0505','\u0506':'\u0507','\u0508':'\u0509','\u050A':'\u050B','\u050C':'\u050D','\u050E':'\u050F','\u0510':'\u0511','\u0512':'\u0513','\u0514':'\u0515','\u0516':'\u0517','\u0518':'\u0519','\u051A':'\u051B','\u051C':'\u051D','\u051E':'\u051F','\u0520':'\u0521','\u0522':'\u0523','\u0524':'\u0525','\u0526':'\u0527','\u0528':'\u0529','\u052A':'\u052B','\u052C':'\u052D','\u052E':'\u052F','\u0531':'\u0561','\u0532':'\u0562','\u0533':'\u0563','\u0534':'\u0564','\u0535':'\u0565','\u0536':'\u0566','\u0537':'\u0567','\u0538':'\u0568','\u0539':'\u0569','\u053A':'\u056A','\u053B':'\u056B','\u053C':'\u056C','\u053D':'\u056D','\u053E':'\u056E','\u053F':'\u056F','\u0540':'\u0570','\u0541':'\u0571','\u0542':'\u0572','\u0543':'\u0573','\u0544':'\u0574','\u0545':'\u0575','\u0546':'\u0576','\u0547':'\u0577','\u0548':'\u0578','\u0549':'\u0579','\u054A':'\u057A','\u054B':'\u057B','\u054C':'\u057C','\u054D':'\u057D','\u054E':'\u057E','\u054F':'\u057F','\u0550':'\u0580','\u0551':'\u0581','\u0552':'\u0582','\u0553':'\u0583','\u0554':'\u0584','\u0555':'\u0585','\u0556':'\u0586','\u10A0':'\u2D00','\u10A1':'\u2D01','\u10A2':'\u2D02','\u10A3':'\u2D03','\u10A4':'\u2D04','\u10A5':'\u2D05','\u10A6':'\u2D06','\u10A7':'\u2D07','\u10A8':'\u2D08','\u10A9':'\u2D09','\u10AA':'\u2D0A','\u10AB':'\u2D0B','\u10AC':'\u2D0C','\u10AD':'\u2D0D','\u10AE':'\u2D0E','\u10AF':'\u2D0F','\u10B0':'\u2D10','\u10B1':'\u2D11','\u10B2':'\u2D12','\u10B3':'\u2D13','\u10B4':'\u2D14','\u10B5':'\u2D15','\u10B6':'\u2D16','\u10B7':'\u2D17','\u10B8':'\u2D18','\u10B9':'\u2D19','\u10BA':'\u2D1A','\u10BB':'\u2D1B','\u10BC':'\u2D1C','\u10BD':'\u2D1D','\u10BE':'\u2D1E','\u10BF':'\u2D1F','\u10C0':'\u2D20','\u10C1':'\u2D21','\u10C2':'\u2D22','\u10C3':'\u2D23','\u10C4':'\u2D24','\u10C5':'\u2D25','\u10C7':'\u2D27','\u10CD':'\u2D2D','\u1E00':'\u1E01','\u1E02':'\u1E03','\u1E04':'\u1E05','\u1E06':'\u1E07','\u1E08':'\u1E09','\u1E0A':'\u1E0B','\u1E0C':'\u1E0D','\u1E0E':'\u1E0F','\u1E10':'\u1E11','\u1E12':'\u1E13','\u1E14':'\u1E15','\u1E16':'\u1E17','\u1E18':'\u1E19','\u1E1A':'\u1E1B','\u1E1C':'\u1E1D','\u1E1E':'\u1E1F','\u1E20':'\u1E21','\u1E22':'\u1E23','\u1E24':'\u1E25','\u1E26':'\u1E27','\u1E28':'\u1E29','\u1E2A':'\u1E2B','\u1E2C':'\u1E2D','\u1E2E':'\u1E2F','\u1E30':'\u1E31','\u1E32':'\u1E33','\u1E34':'\u1E35','\u1E36':'\u1E37','\u1E38':'\u1E39','\u1E3A':'\u1E3B','\u1E3C':'\u1E3D','\u1E3E':'\u1E3F','\u1E40':'\u1E41','\u1E42':'\u1E43','\u1E44':'\u1E45','\u1E46':'\u1E47','\u1E48':'\u1E49','\u1E4A':'\u1E4B','\u1E4C':'\u1E4D','\u1E4E':'\u1E4F','\u1E50':'\u1E51','\u1E52':'\u1E53','\u1E54':'\u1E55','\u1E56':'\u1E57','\u1E58':'\u1E59','\u1E5A':'\u1E5B','\u1E5C':'\u1E5D','\u1E5E':'\u1E5F','\u1E60':'\u1E61','\u1E62':'\u1E63','\u1E64':'\u1E65','\u1E66':'\u1E67','\u1E68':'\u1E69','\u1E6A':'\u1E6B','\u1E6C':'\u1E6D','\u1E6E':'\u1E6F','\u1E70':'\u1E71','\u1E72':'\u1E73','\u1E74':'\u1E75','\u1E76':'\u1E77','\u1E78':'\u1E79','\u1E7A':'\u1E7B','\u1E7C':'\u1E7D','\u1E7E':'\u1E7F','\u1E80':'\u1E81','\u1E82':'\u1E83','\u1E84':'\u1E85','\u1E86':'\u1E87','\u1E88':'\u1E89','\u1E8A':'\u1E8B','\u1E8C':'\u1E8D','\u1E8E':'\u1E8F','\u1E90':'\u1E91','\u1E92':'\u1E93','\u1E94':'\u1E95','\u1E9B':'\u1E61','\u1EA0':'\u1EA1','\u1EA2':'\u1EA3','\u1EA4':'\u1EA5','\u1EA6':'\u1EA7','\u1EA8':'\u1EA9','\u1EAA':'\u1EAB','\u1EAC':'\u1EAD','\u1EAE':'\u1EAF','\u1EB0':'\u1EB1','\u1EB2':'\u1EB3','\u1EB4':'\u1EB5','\u1EB6':'\u1EB7','\u1EB8':'\u1EB9','\u1EBA':'\u1EBB','\u1EBC':'\u1EBD','\u1EBE':'\u1EBF','\u1EC0':'\u1EC1','\u1EC2':'\u1EC3','\u1EC4':'\u1EC5','\u1EC6':'\u1EC7','\u1EC8':'\u1EC9','\u1ECA':'\u1ECB','\u1ECC':'\u1ECD','\u1ECE':'\u1ECF','\u1ED0':'\u1ED1','\u1ED2':'\u1ED3','\u1ED4':'\u1ED5','\u1ED6':'\u1ED7','\u1ED8':'\u1ED9','\u1EDA':'\u1EDB','\u1EDC':'\u1EDD','\u1EDE':'\u1EDF','\u1EE0':'\u1EE1','\u1EE2':'\u1EE3','\u1EE4':'\u1EE5','\u1EE6':'\u1EE7','\u1EE8':'\u1EE9','\u1EEA':'\u1EEB','\u1EEC':'\u1EED','\u1EEE':'\u1EEF','\u1EF0':'\u1EF1','\u1EF2':'\u1EF3','\u1EF4':'\u1EF5','\u1EF6':'\u1EF7','\u1EF8':'\u1EF9','\u1EFA':'\u1EFB','\u1EFC':'\u1EFD','\u1EFE':'\u1EFF','\u1F08':'\u1F00','\u1F09':'\u1F01','\u1F0A':'\u1F02','\u1F0B':'\u1F03','\u1F0C':'\u1F04','\u1F0D':'\u1F05','\u1F0E':'\u1F06','\u1F0F':'\u1F07','\u1F18':'\u1F10','\u1F19':'\u1F11','\u1F1A':'\u1F12','\u1F1B':'\u1F13','\u1F1C':'\u1F14','\u1F1D':'\u1F15','\u1F28':'\u1F20','\u1F29':'\u1F21','\u1F2A':'\u1F22','\u1F2B':'\u1F23','\u1F2C':'\u1F24','\u1F2D':'\u1F25','\u1F2E':'\u1F26','\u1F2F':'\u1F27','\u1F38':'\u1F30','\u1F39':'\u1F31','\u1F3A':'\u1F32','\u1F3B':'\u1F33','\u1F3C':'\u1F34','\u1F3D':'\u1F35','\u1F3E':'\u1F36','\u1F3F':'\u1F37','\u1F48':'\u1F40','\u1F49':'\u1F41','\u1F4A':'\u1F42','\u1F4B':'\u1F43','\u1F4C':'\u1F44','\u1F4D':'\u1F45','\u1F59':'\u1F51','\u1F5B':'\u1F53','\u1F5D':'\u1F55','\u1F5F':'\u1F57','\u1F68':'\u1F60','\u1F69':'\u1F61','\u1F6A':'\u1F62','\u1F6B':'\u1F63','\u1F6C':'\u1F64','\u1F6D':'\u1F65','\u1F6E':'\u1F66','\u1F6F':'\u1F67','\u1FB8':'\u1FB0','\u1FB9':'\u1FB1','\u1FBA':'\u1F70','\u1FBB':'\u1F71','\u1FBE':'\u03B9','\u1FC8':'\u1F72','\u1FC9':'\u1F73','\u1FCA':'\u1F74','\u1FCB':'\u1F75','\u1FD8':'\u1FD0','\u1FD9':'\u1FD1','\u1FDA':'\u1F76','\u1FDB':'\u1F77','\u1FE8':'\u1FE0','\u1FE9':'\u1FE1','\u1FEA':'\u1F7A','\u1FEB':'\u1F7B','\u1FEC':'\u1FE5','\u1FF8':'\u1F78','\u1FF9':'\u1F79','\u1FFA':'\u1F7C','\u1FFB':'\u1F7D','\u2126':'\u03C9','\u212A':'k','\u212B':'\xE5','\u2132':'\u214E','\u2160':'\u2170','\u2161':'\u2171','\u2162':'\u2172','\u2163':'\u2173','\u2164':'\u2174','\u2165':'\u2175','\u2166':'\u2176','\u2167':'\u2177','\u2168':'\u2178','\u2169':'\u2179','\u216A':'\u217A','\u216B':'\u217B','\u216C':'\u217C','\u216D':'\u217D','\u216E':'\u217E','\u216F':'\u217F','\u2183':'\u2184','\u24B6':'\u24D0','\u24B7':'\u24D1','\u24B8':'\u24D2','\u24B9':'\u24D3','\u24BA':'\u24D4','\u24BB':'\u24D5','\u24BC':'\u24D6','\u24BD':'\u24D7','\u24BE':'\u24D8','\u24BF':'\u24D9','\u24C0':'\u24DA','\u24C1':'\u24DB','\u24C2':'\u24DC','\u24C3':'\u24DD','\u24C4':'\u24DE','\u24C5':'\u24DF','\u24C6':'\u24E0','\u24C7':'\u24E1','\u24C8':'\u24E2','\u24C9':'\u24E3','\u24CA':'\u24E4','\u24CB':'\u24E5','\u24CC':'\u24E6','\u24CD':'\u24E7','\u24CE':'\u24E8','\u24CF':'\u24E9','\u2C00':'\u2C30','\u2C01':'\u2C31','\u2C02':'\u2C32','\u2C03':'\u2C33','\u2C04':'\u2C34','\u2C05':'\u2C35','\u2C06':'\u2C36','\u2C07':'\u2C37','\u2C08':'\u2C38','\u2C09':'\u2C39','\u2C0A':'\u2C3A','\u2C0B':'\u2C3B','\u2C0C':'\u2C3C','\u2C0D':'\u2C3D','\u2C0E':'\u2C3E','\u2C0F':'\u2C3F','\u2C10':'\u2C40','\u2C11':'\u2C41','\u2C12':'\u2C42','\u2C13':'\u2C43','\u2C14':'\u2C44','\u2C15':'\u2C45','\u2C16':'\u2C46','\u2C17':'\u2C47','\u2C18':'\u2C48','\u2C19':'\u2C49','\u2C1A':'\u2C4A','\u2C1B':'\u2C4B','\u2C1C':'\u2C4C','\u2C1D':'\u2C4D','\u2C1E':'\u2C4E','\u2C1F':'\u2C4F','\u2C20':'\u2C50','\u2C21':'\u2C51','\u2C22':'\u2C52','\u2C23':'\u2C53','\u2C24':'\u2C54','\u2C25':'\u2C55','\u2C26':'\u2C56','\u2C27':'\u2C57','\u2C28':'\u2C58','\u2C29':'\u2C59','\u2C2A':'\u2C5A','\u2C2B':'\u2C5B','\u2C2C':'\u2C5C','\u2C2D':'\u2C5D','\u2C2E':'\u2C5E','\u2C60':'\u2C61','\u2C62':'\u026B','\u2C63':'\u1D7D','\u2C64':'\u027D','\u2C67':'\u2C68','\u2C69':'\u2C6A','\u2C6B':'\u2C6C','\u2C6D':'\u0251','\u2C6E':'\u0271','\u2C6F':'\u0250','\u2C70':'\u0252','\u2C72':'\u2C73','\u2C75':'\u2C76','\u2C7E':'\u023F','\u2C7F':'\u0240','\u2C80':'\u2C81','\u2C82':'\u2C83','\u2C84':'\u2C85','\u2C86':'\u2C87','\u2C88':'\u2C89','\u2C8A':'\u2C8B','\u2C8C':'\u2C8D','\u2C8E':'\u2C8F','\u2C90':'\u2C91','\u2C92':'\u2C93','\u2C94':'\u2C95','\u2C96':'\u2C97','\u2C98':'\u2C99','\u2C9A':'\u2C9B','\u2C9C':'\u2C9D','\u2C9E':'\u2C9F','\u2CA0':'\u2CA1','\u2CA2':'\u2CA3','\u2CA4':'\u2CA5','\u2CA6':'\u2CA7','\u2CA8':'\u2CA9','\u2CAA':'\u2CAB','\u2CAC':'\u2CAD','\u2CAE':'\u2CAF','\u2CB0':'\u2CB1','\u2CB2':'\u2CB3','\u2CB4':'\u2CB5','\u2CB6':'\u2CB7','\u2CB8':'\u2CB9','\u2CBA':'\u2CBB','\u2CBC':'\u2CBD','\u2CBE':'\u2CBF','\u2CC0':'\u2CC1','\u2CC2':'\u2CC3','\u2CC4':'\u2CC5','\u2CC6':'\u2CC7','\u2CC8':'\u2CC9','\u2CCA':'\u2CCB','\u2CCC':'\u2CCD','\u2CCE':'\u2CCF','\u2CD0':'\u2CD1','\u2CD2':'\u2CD3','\u2CD4':'\u2CD5','\u2CD6':'\u2CD7','\u2CD8':'\u2CD9','\u2CDA':'\u2CDB','\u2CDC':'\u2CDD','\u2CDE':'\u2CDF','\u2CE0':'\u2CE1','\u2CE2':'\u2CE3','\u2CEB':'\u2CEC','\u2CED':'\u2CEE','\u2CF2':'\u2CF3','\uA640':'\uA641','\uA642':'\uA643','\uA644':'\uA645','\uA646':'\uA647','\uA648':'\uA649','\uA64A':'\uA64B','\uA64C':'\uA64D','\uA64E':'\uA64F','\uA650':'\uA651','\uA652':'\uA653','\uA654':'\uA655','\uA656':'\uA657','\uA658':'\uA659','\uA65A':'\uA65B','\uA65C':'\uA65D','\uA65E':'\uA65F','\uA660':'\uA661','\uA662':'\uA663','\uA664':'\uA665','\uA666':'\uA667','\uA668':'\uA669','\uA66A':'\uA66B','\uA66C':'\uA66D','\uA680':'\uA681','\uA682':'\uA683','\uA684':'\uA685','\uA686':'\uA687','\uA688':'\uA689','\uA68A':'\uA68B','\uA68C':'\uA68D','\uA68E':'\uA68F','\uA690':'\uA691','\uA692':'\uA693','\uA694':'\uA695','\uA696':'\uA697','\uA698':'\uA699','\uA69A':'\uA69B','\uA722':'\uA723','\uA724':'\uA725','\uA726':'\uA727','\uA728':'\uA729','\uA72A':'\uA72B','\uA72C':'\uA72D','\uA72E':'\uA72F','\uA732':'\uA733','\uA734':'\uA735','\uA736':'\uA737','\uA738':'\uA739','\uA73A':'\uA73B','\uA73C':'\uA73D','\uA73E':'\uA73F','\uA740':'\uA741','\uA742':'\uA743','\uA744':'\uA745','\uA746':'\uA747','\uA748':'\uA749','\uA74A':'\uA74B','\uA74C':'\uA74D','\uA74E':'\uA74F','\uA750':'\uA751','\uA752':'\uA753','\uA754':'\uA755','\uA756':'\uA757','\uA758':'\uA759','\uA75A':'\uA75B','\uA75C':'\uA75D','\uA75E':'\uA75F','\uA760':'\uA761','\uA762':'\uA763','\uA764':'\uA765','\uA766':'\uA767','\uA768':'\uA769','\uA76A':'\uA76B','\uA76C':'\uA76D','\uA76E':'\uA76F','\uA779':'\uA77A','\uA77B':'\uA77C','\uA77D':'\u1D79','\uA77E':'\uA77F','\uA780':'\uA781','\uA782':'\uA783','\uA784':'\uA785','\uA786':'\uA787','\uA78B':'\uA78C','\uA78D':'\u0265','\uA790':'\uA791','\uA792':'\uA793','\uA796':'\uA797','\uA798':'\uA799','\uA79A':'\uA79B','\uA79C':'\uA79D','\uA79E':'\uA79F','\uA7A0':'\uA7A1','\uA7A2':'\uA7A3','\uA7A4':'\uA7A5','\uA7A6':'\uA7A7','\uA7A8':'\uA7A9','\uA7AA':'\u0266','\uA7AB':'\u025C','\uA7AC':'\u0261','\uA7AD':'\u026C','\uA7B0':'\u029E','\uA7B1':'\u0287','\uFF21':'\uFF41','\uFF22':'\uFF42','\uFF23':'\uFF43','\uFF24':'\uFF44','\uFF25':'\uFF45','\uFF26':'\uFF46','\uFF27':'\uFF47','\uFF28':'\uFF48','\uFF29':'\uFF49','\uFF2A':'\uFF4A','\uFF2B':'\uFF4B','\uFF2C':'\uFF4C','\uFF2D':'\uFF4D','\uFF2E':'\uFF4E','\uFF2F':'\uFF4F','\uFF30':'\uFF50','\uFF31':'\uFF51','\uFF32':'\uFF52','\uFF33':'\uFF53','\uFF34':'\uFF54','\uFF35':'\uFF55','\uFF36':'\uFF56','\uFF37':'\uFF57','\uFF38':'\uFF58','\uFF39':'\uFF59','\uFF3A':'\uFF5A','\uD801\uDC00':'\uD801\uDC28','\uD801\uDC01':'\uD801\uDC29','\uD801\uDC02':'\uD801\uDC2A','\uD801\uDC03':'\uD801\uDC2B','\uD801\uDC04':'\uD801\uDC2C','\uD801\uDC05':'\uD801\uDC2D','\uD801\uDC06':'\uD801\uDC2E','\uD801\uDC07':'\uD801\uDC2F','\uD801\uDC08':'\uD801\uDC30','\uD801\uDC09':'\uD801\uDC31','\uD801\uDC0A':'\uD801\uDC32','\uD801\uDC0B':'\uD801\uDC33','\uD801\uDC0C':'\uD801\uDC34','\uD801\uDC0D':'\uD801\uDC35','\uD801\uDC0E':'\uD801\uDC36','\uD801\uDC0F':'\uD801\uDC37','\uD801\uDC10':'\uD801\uDC38','\uD801\uDC11':'\uD801\uDC39','\uD801\uDC12':'\uD801\uDC3A','\uD801\uDC13':'\uD801\uDC3B','\uD801\uDC14':'\uD801\uDC3C','\uD801\uDC15':'\uD801\uDC3D','\uD801\uDC16':'\uD801\uDC3E','\uD801\uDC17':'\uD801\uDC3F','\uD801\uDC18':'\uD801\uDC40','\uD801\uDC19':'\uD801\uDC41','\uD801\uDC1A':'\uD801\uDC42','\uD801\uDC1B':'\uD801\uDC43','\uD801\uDC1C':'\uD801\uDC44','\uD801\uDC1D':'\uD801\uDC45','\uD801\uDC1E':'\uD801\uDC46','\uD801\uDC1F':'\uD801\uDC47','\uD801\uDC20':'\uD801\uDC48','\uD801\uDC21':'\uD801\uDC49','\uD801\uDC22':'\uD801\uDC4A','\uD801\uDC23':'\uD801\uDC4B','\uD801\uDC24':'\uD801\uDC4C','\uD801\uDC25':'\uD801\uDC4D','\uD801\uDC26':'\uD801\uDC4E','\uD801\uDC27':'\uD801\uDC4F','\uD806\uDCA0':'\uD806\uDCC0','\uD806\uDCA1':'\uD806\uDCC1','\uD806\uDCA2':'\uD806\uDCC2','\uD806\uDCA3':'\uD806\uDCC3','\uD806\uDCA4':'\uD806\uDCC4','\uD806\uDCA5':'\uD806\uDCC5','\uD806\uDCA6':'\uD806\uDCC6','\uD806\uDCA7':'\uD806\uDCC7','\uD806\uDCA8':'\uD806\uDCC8','\uD806\uDCA9':'\uD806\uDCC9','\uD806\uDCAA':'\uD806\uDCCA','\uD806\uDCAB':'\uD806\uDCCB','\uD806\uDCAC':'\uD806\uDCCC','\uD806\uDCAD':'\uD806\uDCCD','\uD806\uDCAE':'\uD806\uDCCE','\uD806\uDCAF':'\uD806\uDCCF','\uD806\uDCB0':'\uD806\uDCD0','\uD806\uDCB1':'\uD806\uDCD1','\uD806\uDCB2':'\uD806\uDCD2','\uD806\uDCB3':'\uD806\uDCD3','\uD806\uDCB4':'\uD806\uDCD4','\uD806\uDCB5':'\uD806\uDCD5','\uD806\uDCB6':'\uD806\uDCD6','\uD806\uDCB7':'\uD806\uDCD7','\uD806\uDCB8':'\uD806\uDCD8','\uD806\uDCB9':'\uD806\uDCD9','\uD806\uDCBA':'\uD806\uDCDA','\uD806\uDCBB':'\uD806\uDCDB','\uD806\uDCBC':'\uD806\uDCDC','\uD806\uDCBD':'\uD806\uDCDD','\uD806\uDCBE':'\uD806\uDCDE','\uD806\uDCBF':'\uD806\uDCDF','\xDF':'ss','\u0130':'i\u0307','\u0149':'\u02BCn','\u01F0':'j\u030C','\u0390':'\u03B9\u0308\u0301','\u03B0':'\u03C5\u0308\u0301','\u0587':'\u0565\u0582','\u1E96':'h\u0331','\u1E97':'t\u0308','\u1E98':'w\u030A','\u1E99':'y\u030A','\u1E9A':'a\u02BE','\u1E9E':'ss','\u1F50':'\u03C5\u0313','\u1F52':'\u03C5\u0313\u0300','\u1F54':'\u03C5\u0313\u0301','\u1F56':'\u03C5\u0313\u0342','\u1F80':'\u1F00\u03B9','\u1F81':'\u1F01\u03B9','\u1F82':'\u1F02\u03B9','\u1F83':'\u1F03\u03B9','\u1F84':'\u1F04\u03B9','\u1F85':'\u1F05\u03B9','\u1F86':'\u1F06\u03B9','\u1F87':'\u1F07\u03B9','\u1F88':'\u1F00\u03B9','\u1F89':'\u1F01\u03B9','\u1F8A':'\u1F02\u03B9','\u1F8B':'\u1F03\u03B9','\u1F8C':'\u1F04\u03B9','\u1F8D':'\u1F05\u03B9','\u1F8E':'\u1F06\u03B9','\u1F8F':'\u1F07\u03B9','\u1F90':'\u1F20\u03B9','\u1F91':'\u1F21\u03B9','\u1F92':'\u1F22\u03B9','\u1F93':'\u1F23\u03B9','\u1F94':'\u1F24\u03B9','\u1F95':'\u1F25\u03B9','\u1F96':'\u1F26\u03B9','\u1F97':'\u1F27\u03B9','\u1F98':'\u1F20\u03B9','\u1F99':'\u1F21\u03B9','\u1F9A':'\u1F22\u03B9','\u1F9B':'\u1F23\u03B9','\u1F9C':'\u1F24\u03B9','\u1F9D':'\u1F25\u03B9','\u1F9E':'\u1F26\u03B9','\u1F9F':'\u1F27\u03B9','\u1FA0':'\u1F60\u03B9','\u1FA1':'\u1F61\u03B9','\u1FA2':'\u1F62\u03B9','\u1FA3':'\u1F63\u03B9','\u1FA4':'\u1F64\u03B9','\u1FA5':'\u1F65\u03B9','\u1FA6':'\u1F66\u03B9','\u1FA7':'\u1F67\u03B9','\u1FA8':'\u1F60\u03B9','\u1FA9':'\u1F61\u03B9','\u1FAA':'\u1F62\u03B9','\u1FAB':'\u1F63\u03B9','\u1FAC':'\u1F64\u03B9','\u1FAD':'\u1F65\u03B9','\u1FAE':'\u1F66\u03B9','\u1FAF':'\u1F67\u03B9','\u1FB2':'\u1F70\u03B9','\u1FB3':'\u03B1\u03B9','\u1FB4':'\u03AC\u03B9','\u1FB6':'\u03B1\u0342','\u1FB7':'\u03B1\u0342\u03B9','\u1FBC':'\u03B1\u03B9','\u1FC2':'\u1F74\u03B9','\u1FC3':'\u03B7\u03B9','\u1FC4':'\u03AE\u03B9','\u1FC6':'\u03B7\u0342','\u1FC7':'\u03B7\u0342\u03B9','\u1FCC':'\u03B7\u03B9','\u1FD2':'\u03B9\u0308\u0300','\u1FD3':'\u03B9\u0308\u0301','\u1FD6':'\u03B9\u0342','\u1FD7':'\u03B9\u0308\u0342','\u1FE2':'\u03C5\u0308\u0300','\u1FE3':'\u03C5\u0308\u0301','\u1FE4':'\u03C1\u0313','\u1FE6':'\u03C5\u0342','\u1FE7':'\u03C5\u0308\u0342','\u1FF2':'\u1F7C\u03B9','\u1FF3':'\u03C9\u03B9','\u1FF4':'\u03CE\u03B9','\u1FF6':'\u03C9\u0342','\u1FF7':'\u03C9\u0342\u03B9','\u1FFC':'\u03C9\u03B9','\uFB00':'ff','\uFB01':'fi','\uFB02':'fl','\uFB03':'ffi','\uFB04':'ffl','\uFB05':'st','\uFB06':'st','\uFB13':'\u0574\u0576','\uFB14':'\u0574\u0565','\uFB15':'\u0574\u056B','\uFB16':'\u057E\u0576','\uFB17':'\u0574\u056D'};
+
+// Normalize reference label: collapse internal whitespace
+// to single space, remove leading/trailing whitespace, case fold.
+module.exports = function(string) {
+ return string.trim().replace(regex, function($0) {
+ // Note: there is no need to check `hasOwnProperty($0)` here.
+ // If character not found in lookup table, it must be whitespace.
+ return map[$0] || ' ';
+ });
+};
+
+},{}],10:[function(require,module,exports){
+"use strict";
+
+var escapeXml = require('./common').escapeXml;
+
+// Helper function to produce an XML tag.
+var tag = function(name, attrs, selfclosing) {
+ var result = '<' + name;
+ if (attrs && attrs.length > 0) {
+ var i = 0;
+ var attrib;
+ while ((attrib = attrs[i]) !== undefined) {
+ result += ' ' + attrib[0] + '="' + attrib[1] + '"';
+ i++;
+ }
+ }
+ if (selfclosing) {
+ result += ' /';
+ }
+
+ result += '>';
+ return result;
+};
+
+var reXMLTag = /\<[^>]*\>/;
+
+var toTagName = function(s) {
+ return s.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase();
+};
+
+var renderNodes = function(block) {
+
+ var attrs;
+ var tagname;
+ var walker = block.walker();
+ var event, node, entering;
+ var buffer = "";
+ var lastOut = "\n";
+ var disableTags = 0;
+ var indentLevel = 0;
+ var indent = ' ';
+ var unescapedContents;
+ var container;
+ var selfClosing;
+ var nodetype;
+
+ var out = function(s) {
+ if (disableTags > 0) {
+ buffer += s.replace(reXMLTag, '');
+ } else {
+ buffer += s;
+ }
+ lastOut = s;
+ };
+ var esc = this.escape;
+ var cr = function() {
+ if (lastOut !== '\n') {
+ buffer += '\n';
+ lastOut = '\n';
+ for (var i = indentLevel; i--;) {
+ buffer += indent;
+ }
+ }
+ };
+
+ var options = this.options;
+
+ if (options.time) { console.time("rendering"); }
+
+ buffer += '\n';
+ buffer += '\n';
+
+ while ((event = walker.next())) {
+ entering = event.entering;
+ node = event.node;
+ nodetype = node.type;
+
+ container = node.isContainer();
+ selfClosing = nodetype === 'HorizontalRule' || nodetype === 'Hardbreak' ||
+ nodetype === 'Softbreak' || nodetype === 'Image';
+ unescapedContents = nodetype === 'Html' || nodetype === 'HtmlInline';
+ tagname = toTagName(nodetype);
+
+ if (entering) {
+
+ attrs = [];
+
+ switch (nodetype) {
+ case 'List':
+ if (node.listType !== null) {
+ attrs.push(['type', node.listType.toLowerCase()]);
+ }
+ if (node.listStart !== null) {
+ attrs.push(['start', String(node.listStart)]);
+ }
+ if (node.listTight !== null) {
+ attrs.push(['tight', (node.listTight ? 'true' : 'false')]);
+ }
+ var delim = node.listDelimiter;
+ if (delim !== null) {
+ var delimword = '';
+ if (delim === '.') {
+ delimword = 'period';
+ } else {
+ delimword = 'paren';
+ }
+ attrs.push(['delimiter', delimword]);
+ }
+ break;
+ case 'CodeBlock':
+ if (node.info) {
+ attrs.push(['info', node.info]);
+ }
+ break;
+ case 'Header':
+ attrs.push(['level', String(node.level)]);
+ break;
+ case 'Link':
+ case 'Image':
+ attrs.push(['destination', node.destination]);
+ attrs.push(['title', node.title]);
+ break;
+ default:
+ break;
+ }
+ if (options.sourcepos) {
+ var pos = node.sourcepos;
+ if (pos) {
+ attrs.push(['sourcepos', String(pos[0][0]) + ':' +
+ String(pos[0][1]) + '-' + String(pos[1][0]) + ':' +
+ String(pos[1][1])]);
+ }
+ }
+
+ cr();
+ out(tag(tagname, attrs, selfClosing));
+ if (container) {
+ indentLevel += 1;
+ } else if (!container && !selfClosing) {
+ var lit = node.literal;
+ if (lit) {
+ out(unescapedContents ? lit : esc(lit));
+ }
+ out(tag('/' + tagname));
+ }
+ } else {
+ indentLevel -= 1;
+ cr();
+ out(tag('/' + tagname));
+ }
+
+
+ }
+ if (options.time) { console.timeEnd("rendering"); }
+ buffer += '\n';
+ return buffer;
+};
+
+// The XmlRenderer object.
+function XmlRenderer(options){
+ return {
+ // default options:
+ softbreak: '\n', // by default, soft breaks are rendered as newlines in HTML
+ // set to "
" to make them hard breaks
+ // set to " " if you want to ignore line wrapping in source
+ escape: escapeXml,
+ options: options || {},
+ render: renderNodes
+ };
+}
+
+module.exports = XmlRenderer;
+
+},{"./common":2}]},{},[6])(6)
+});
\ No newline at end of file