123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549 |
- /*!
- * Flatdoc - (c) 2013, 2014 Rico Sta. Cruz
- * http://ricostacruz.com/flatdoc
- * @license MIT
- */
-
- (function($) {
- var exports = this;
-
- var marked;
-
- /**
- * Basic Flatdoc module.
- *
- * The main entry point is `Flatdoc.run()`, which invokes the [Runner].
- *
- * Flatdoc.run({
- * fetcher: Flatdoc.github('rstacruz/backbone-patterns');
- * });
- *
- * These fetcher functions are available:
- *
- * Flatdoc.github('owner/repo')
- * Flatdoc.github('owner/repo', 'API.md')
- * Flatdoc.github('owner/repo', 'API.md', 'branch')
- * Flatdoc.bitbucket('owner/repo')
- * Flatdoc.bitbucket('owner/repo', 'API.md')
- * Flatdoc.bitbucket('owner/repo', 'API.md', 'branch')
- * Flatdoc.file('http://path/to/url')
- * Flatdoc.file([ 'http://path/to/url', ... ])
- */
-
- var Flatdoc = exports.Flatdoc = {};
-
- /**
- * Creates a runner.
- * See [Flatdoc].
- */
-
- Flatdoc.run = function(options) {
- $(function() { (new Flatdoc.runner(options)).run(); });
- };
-
- /**
- * File fetcher function.
- *
- * Fetches a given `url` via AJAX.
- * See [Runner#run()] for a description of fetcher functions.
- */
-
- Flatdoc.file = function(url) {
- function loadData(locations, response, callback) {
- if (locations.length === 0) callback(null, response);
-
- else $.get(locations.shift())
- .fail(function(e) {
- callback(e, null);
- })
- .done(function (data) {
- if (response.length > 0) response += '\n\n';
- response += data;
- loadData(locations, response, callback);
- });
- }
-
- return function(callback) {
- loadData(url instanceof Array ?
- url : [url], '', callback);
- };
- };
-
- /**
- * Github fetcher.
- * Fetches from repo `repo` (in format 'user/repo').
- *
- * If the parameter `filepath` is supplied, it fetches the contents of that
- * given file in the repo's default branch. To fetch the contents of
- * `filepath` from a different branch, the parameter `ref` should be
- * supplied with the target branch name.
- *
- * See [Runner#run()] for a description of fetcher functions.
- *
- * See: http://developer.github.com/v3/repos/contents/
- */
- Flatdoc.github = function(repo, filepath, ref) {
- var url;
- if (filepath) {
- url = 'https://api.github.com/repos/'+repo+'/contents/'+filepath;
- } else {
- url = 'https://api.github.com/repos/'+repo+'/readme';
- }
- if (ref) {
- url += '?ref='+ref;
- }
- return function(callback) {
- $.get(url)
- .fail(function(e) { callback(e, null); })
- .done(function(data) {
- var markdown = exports.Base64.decode(data.content);
- callback(null, markdown);
- });
- };
- };
-
- /**
- * Bitbucket fetcher.
- * Fetches from repo `repo` (in format 'user/repo').
- *
- * If the parameter `filepath` is supplied, it fetches the contents of that
- * given file in the repo.
- *
- * See [Runner#run()] for a description of fetcher functions.
- *
- * See: https://confluence.atlassian.com/display/BITBUCKET/src+Resources#srcResources-GETrawcontentofanindividualfile
- * See: http://ben.onfabrik.com/posts/embed-bitbucket-source-code-on-your-website
- * Bitbucket appears to have stricter restrictions on
- * Access-Control-Allow-Origin, and so the method here is a bit
- * more complicated than for Github
- *
- * If you don't pass a branch name, then 'default' for Hg repos is assumed
- * For git, you should pass 'master'. In both cases, you should also be able
- * to pass in a revision number here -- in Mercurial, this also includes
- * things like 'tip' or the repo-local integer revision number
- * Default to Mercurial because Git users historically tend to use GitHub
- */
- Flatdoc.bitbucket = function(repo, filepath, branch) {
- if (!filepath) filepath = 'readme.md';
- if (!branch) branch = 'default';
-
- var url = 'https://bitbucket.org/api/1.0/repositories/'+repo+'/src/'+branch+'/'+filepath;
-
- return function(callback) {
- $.ajax({
- url: url,
- dataType: 'jsonp',
- error: function(xhr, status, error) {
- alert(error);
- },
- success: function(response) {
- var markdown = response.data;
- callback(null, markdown);
- }
- });
- };
- };
-
- /**
- * Parser module.
- * Parses a given Markdown document and returns a JSON object with data
- * on the Markdown document.
- *
- * var data = Flatdoc.parser.parse('markdown source here');
- * console.log(data);
- *
- * data == {
- * title: 'My Project',
- * content: '<p>This project is a...',
- * menu: {...}
- * }
- */
-
- var Parser = Flatdoc.parser = {};
-
- /**
- * Parses a given Markdown document.
- * See `Parser` for more info.
- */
- Parser.parse = function(source, highlight) {
- marked = exports.marked;
-
- Parser.setMarkedOptions(highlight);
-
- var html = $("<div>" + marked(source));
- var h1 = html.find('h1').eq(0);
- var title = h1.text();
-
- // Mangle content
- Transformer.mangle(html);
- var menu = Transformer.getMenu(html);
-
- return { title: title, content: html, menu: menu };
- };
-
- Parser.setMarkedOptions = function(highlight) {
- marked.setOptions({
- highlight: function(code, lang) {
- if (lang) {
- return highlight(code, lang);
- }
- return code;
- }
- });
- };
-
- /**
- * Transformer module.
- * This takes care of any HTML mangling needed. The main entry point is
- * `.mangle()` which applies all transformations needed.
- *
- * var $content = $("<p>Hello there, this is a docu...");
- * Flatdoc.transformer.mangle($content);
- *
- * If you would like to change any of the transformations, decorate any of
- * the functions in `Flatdoc.transformer`.
- */
-
- var Transformer = Flatdoc.transformer = {};
-
- /**
- * Takes a given HTML `$content` and improves the markup of it by executing
- * the transformations.
- *
- * > See: [Transformer](#transformer)
- */
- Transformer.mangle = function($content) {
- this.addIDs($content);
- this.buttonize($content);
- this.smartquotes($content);
- };
-
- /**
- * Adds IDs to headings.
- */
-
- Transformer.addIDs = function($content) {
- var slugs = ['', '', ''];
- $content.find('h1, h2, h3').each(function() {
- var $el = $(this);
- var num = parseInt(this.nodeName[1]);
- var text = $el.text();
- var slug = Flatdoc.slugify(text);
- if (num > 1) slug = slugs[num - 2] + '-' + slug;
- slugs.length = num - 1;
- slugs = slugs.concat([slug, slug]);
- $el.attr('id', slug);
- });
- };
-
- /**
- * Returns menu data for a given HTML.
- *
- * menu = Flatdoc.transformer.getMenu($content);
- * menu == {
- * level: 0,
- * items: [{
- * section: "Getting started",
- * level: 1,
- * items: [...]}, ...]}
- */
-
- Transformer.getMenu = function($content) {
- var root = {items: [], id: '', level: 0};
- var cache = [root];
-
- function mkdir_p(level) {
- cache.length = level + 1;
- var obj = cache[level];
- if (!obj) {
- var parent = (level > 1) ? mkdir_p(level-1) : root;
- obj = { items: [], level: level };
- cache = cache.concat([obj, obj]);
- parent.items.push(obj);
- }
- return obj;
- }
-
- $content.find('h1, h2, h3').each(function() {
- var $el = $(this);
- var level = +(this.nodeName.substr(1));
-
- var parent = mkdir_p(level-1);
-
- var obj = { section: $el.text(), items: [], level: level, id: $el.attr('id') };
- parent.items.push(obj);
- cache[level] = obj;
- });
-
- return root;
- };
-
- /**
- * Changes "button >" text to buttons.
- */
-
- Transformer.buttonize = function($content) {
- $content.find('a').each(function() {
- var $a = $(this);
-
- var m = $a.text().match(/^(.*) >$/);
- if (m) $a.text(m[1]).addClass('button');
- });
- };
-
- /**
- * Applies smart quotes to a given element.
- * It leaves `code` and `pre` blocks alone.
- */
-
- Transformer.smartquotes = function ($content) {
- var nodes = getTextNodesIn($content), len = nodes.length;
- for (var i=0; i<len; i++) {
- var node = nodes[i];
- node.nodeValue = quotify(node.nodeValue);
- }
- };
-
- /**
- * Syntax highlighters.
- *
- * You may add or change more highlighters via the `Flatdoc.highlighters`
- * object.
- *
- * Flatdoc.highlighters.js = function(code) {
- * };
- *
- * Each of these functions
- */
-
- var Highlighters = Flatdoc.highlighters = {};
-
- /**
- * JavaScript syntax highlighter.
- *
- * Thanks @visionmedia!
- */
-
- Highlighters.js = Highlighters.javascript = function(code) {
- return code
- .replace(/</g, '<')
- .replace(/>/g, '>')
- .replace(/("[^\"]*?")/g, '<span class="string">$1</span>')
- .replace(/('[^\']*?')/g, '<span class="string">$1</span>')
- .replace(/\/\/(.*)/gm, '<span class="comment">//$1</span>')
- .replace(/\/\*(.*)\*\//gm, '<span class="comment">/*$1*/</span>')
- .replace(/(\d+\.\d+)/gm, '<span class="number">$1</span>')
- .replace(/(\d+)/gm, '<span class="number">$1</span>')
- .replace(/\bnew *(\w+)/gm, '<span class="keyword">new</span> <span class="init">$1</span>')
- .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '<span class="keyword">$1</span>');
- };
-
- Highlighters.html = function(code) {
- return code
- .replace(/</g, '<')
- .replace(/>/g, '>')
- .replace(/("[^\"]*?")/g, '<span class="string">$1</span>')
- .replace(/('[^\']*?')/g, '<span class="string">$1</span>')
- .replace(/<!--(.*)-->/g, '<span class="comment"><!--$1--></span>')
- .replace(/<([^!][^\s&]*)/g, '<<span class="keyword">$1</span>');
- };
-
- Highlighters.generic = function(code) {
- return code
- .replace(/</g, '<')
- .replace(/>/g, '>')
- .replace(/("[^\"]*?")/g, '<span class="string">$1</span>')
- .replace(/('[^\']*?')/g, '<span class="string">$1</span>')
- .replace(/(\/\/|#)(.*)/gm, '<span class="comment">$1$2</span>')
- .replace(/(\d+\.\d+)/gm, '<span class="number">$1</span>')
- .replace(/(\d+)/gm, '<span class="number">$1</span>');
- };
-
- /**
- * Menu view. Renders menus
- */
-
- var MenuView = Flatdoc.menuView = function(menu) {
- var $el = $("<ul>");
-
- function process(node, $parent) {
- var id = node.id || 'root';
-
- var $li = $('<li>')
- .attr('id', id + '-item')
- .addClass('level-' + node.level)
- .appendTo($parent);
-
- if (node.section) {
- var $a = $('<a>')
- .html(node.section)
- .attr('id', id + '-link')
- .attr('href', '#' + node.id)
- .addClass('level-' + node.level)
- .appendTo($li);
- }
-
- if (node.items.length > 0) {
- var $ul = $('<ul>')
- .addClass('level-' + (node.level+1))
- .attr('id', id + '-list')
- .appendTo($li);
-
- node.items.forEach(function(item) {
- process(item, $ul);
- });
- }
- }
-
- process(menu, $el);
- return $el;
- };
-
- /**
- * A runner module that fetches via a `fetcher` function.
- *
- * var runner = new Flatdoc.runner({
- * fetcher: Flatdoc.url('readme.txt')
- * });
- * runner.run();
- *
- * The following options are available:
- *
- * - `fetcher` - a function that takes a callback as an argument and
- * executes that callback when data is returned.
- *
- * See: [Flatdoc.run()]
- */
-
- var Runner = Flatdoc.runner = function(options) {
- this.initialize(options);
- };
-
- Runner.prototype.root = '[role~="flatdoc"]';
- Runner.prototype.menu = '[role~="flatdoc-menu"]';
- Runner.prototype.title = '[role~="flatdoc-title"]';
- Runner.prototype.content = '[role~="flatdoc-content"]';
-
- Runner.prototype.initialize = function(options) {
- $.extend(this, options);
- };
-
- /**
- * Syntax highlighting.
- *
- * You may define a custom highlight function such as `highlight` from
- * the highlight.js library.
- *
- * Flatdoc.run({
- * highlight: function (code, value) {
- * return hljs.highlight(lang, code).value;
- * },
- * ...
- * });
- *
- */
-
- Runner.prototype.highlight = function(code, lang) {
- var fn = Flatdoc.highlighters[lang] || Flatdoc.highlighters.generic;
- return fn(code);
- };
-
- /**
- * Loads the Markdown document (via the fetcher), parses it, and applies it
- * to the elements.
- */
-
- Runner.prototype.run = function() {
- var doc = this;
- $(doc.root).trigger('flatdoc:loading');
- doc.fetcher(function(err, markdown) {
- if (err) {
- console.error('[Flatdoc] fetching Markdown data failed.', err);
- return;
- }
- var data = Flatdoc.parser.parse(markdown, doc.highlight);
- doc.applyData(data, doc);
- var id = location.hash.substr(1);
- if (id) {
- var el = document.getElementById(id);
- if (el) el.scrollIntoView(true);
- }
- $(doc.root).trigger('flatdoc:ready');
- });
- };
-
- /**
- * Applies given doc data `data` to elements in object `elements`.
- */
-
- Runner.prototype.applyData = function(data) {
- var elements = this;
-
- elements.el('title').html(data.title);
- elements.el('content').html(data.content.find('>*'));
- elements.el('menu').html(MenuView(data.menu));
- };
-
- /**
- * Fetches a given element from the DOM.
- *
- * Returns a jQuery object.
- * @api private
- */
-
- Runner.prototype.el = function(aspect) {
- return $(this[aspect], this.root);
- };
-
- /*
- * Helpers
- */
-
- // http://stackoverflow.com/questions/298750/how-do-i-select-text-nodes-with-jquery
- function getTextNodesIn(el) {
- var exclude = 'iframe,pre,code';
- return $(el).find(':not('+exclude+')').andSelf().contents().filter(function() {
- return this.nodeType == 3 && $(this).closest(exclude).length === 0;
- });
- }
-
- // http://www.leancrew.com/all-this/2010/11/smart-quotes-in-javascript/
- function quotify(a) {
- a = a.replace(/(^|[\-\u2014\s(\["])'/g, "$1\u2018"); // opening singles
- a = a.replace(/'/g, "\u2019"); // closing singles & apostrophes
- a = a.replace(/(^|[\-\u2014\/\[(\u2018\s])"/g, "$1\u201c"); // opening doubles
- a = a.replace(/"/g, "\u201d"); // closing doubles
- a = a.replace(/\.\.\./g, "\u2026"); // ellipses
- a = a.replace(/--/g, "\u2014"); // em-dashes
- return a;
- }
-
- })(jQuery);
-
- /* jshint ignore:start */
-
- /*!
- * marked - a markdown parser
- * Copyright (c) 2011-2013, Christopher Jeffrey. (MIT Licensed)
- * https://github.com/chjj/marked
- */
-
- (function(){var t={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:o,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:o,lheading:/^([^\n]+)\n *(=|-){3,} *\n*/,blockquote:/^( *>[^\n]+(\n[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:o,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};t.bullet=/(?:[*+-]|\d+\.)/;t.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;t.item=l(t.item,"gm")(/bull/g,t.bullet)();t.list=l(t.list)(/bull/g,t.bullet)("hr",/\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/)();t._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|@)\\b";t.html=l(t.html)("comment",/<!--[\s\S]*?-->/)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,t._tag)();t.paragraph=l(t.paragraph)("hr",t.hr)("heading",t.heading)("lheading",t.lheading)("blockquote",t.blockquote)("tag","<"+t._tag)("def",t.def)();t.normal=h({},t);t.gfm=h({},t.normal,{fences:/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,paragraph:/^/});t.gfm.paragraph=l(t.paragraph)("(?!","(?!"+t.gfm.fences.source.replace("\\1","\\2")+"|")();t.tables=h({},t.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function e(e){this.tokens=[];this.tokens.links={};this.options=e||a.defaults;this.rules=t.normal;if(this.options.gfm){if(this.options.tables){this.rules=t.tables}else{this.rules=t.gfm}}}e.rules=t;e.lex=function(t,n){var s=new e(n);return s.lex(t)};e.prototype.lex=function(t){t=t.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(t,true)};e.prototype.token=function(e,n){var e=e.replace(/^ +$/gm,""),s,i,r,l,o,h,a,u,p;while(e){if(r=this.rules.newline.exec(e)){e=e.substring(r[0].length);if(r[0].length>1){this.tokens.push({type:"space"})}}if(r=this.rules.code.exec(e)){e=e.substring(r[0].length);r=r[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?r.replace(/\n+$/,""):r});continue}if(r=this.rules.fences.exec(e)){e=e.substring(r[0].length);this.tokens.push({type:"code",lang:r[2],text:r[3]});continue}if(r=this.rules.heading.exec(e)){e=e.substring(r[0].length);this.tokens.push({type:"heading",depth:r[1].length,text:r[2]});continue}if(n&&(r=this.rules.nptable.exec(e))){e=e.substring(r[0].length);h={type:"table",header:r[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:r[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:r[3].replace(/\n$/,"").split("\n")};for(u=0;u<h.align.length;u++){if(/^ *-+: *$/.test(h.align[u])){h.align[u]="right"}else if(/^ *:-+: *$/.test(h.align[u])){h.align[u]="center"}else if(/^ *:-+ *$/.test(h.align[u])){h.align[u]="left"}else{h.align[u]=null}}for(u=0;u<h.cells.length;u++){h.cells[u]=h.cells[u].split(/ *\| */)}this.tokens.push(h);continue}if(r=this.rules.lheading.exec(e)){e=e.substring(r[0].length);this.tokens.push({type:"heading",depth:r[2]==="="?1:2,text:r[1]});continue}if(r=this.rules.hr.exec(e)){e=e.substring(r[0].length);this.tokens.push({type:"hr"});continue}if(r=this.rules.blockquote.exec(e)){e=e.substring(r[0].length);this.tokens.push({type:"blockquote_start"});r=r[0].replace(/^ *> ?/gm,"");this.token(r,n);this.tokens.push({type:"blockquote_end"});continue}if(r=this.rules.list.exec(e)){e=e.substring(r[0].length);l=r[2];this.tokens.push({type:"list_start",ordered:l.length>1});r=r[0].match(this.rules.item);s=false;p=r.length;u=0;for(;u<p;u++){h=r[u];a=h.length;h=h.replace(/^ *([*+-]|\d+\.) +/,"");if(~h.indexOf("\n ")){a-=h.length;h=!this.options.pedantic?h.replace(new RegExp("^ {1,"+a+"}","gm"),""):h.replace(/^ {1,4}/gm,"")}if(this.options.smartLists&&u!==p-1){o=t.bullet.exec(r[u+1])[0];if(l!==o&&!(l.length>1&&o.length>1)){e=r.slice(u+1).join("\n")+e;u=p-1}}i=s||/\n\n(?!\s*$)/.test(h);if(u!==p-1){s=h[h.length-1]==="\n";if(!i)i=s}this.tokens.push({type:i?"loose_item_start":"list_item_start"});this.token(h,false);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(r=this.rules.html.exec(e)){e=e.substring(r[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:r[1]==="pre"||r[1]==="script",text:r[0]});continue}if(n&&(r=this.rules.def.exec(e))){e=e.substring(r[0].length);this.tokens.links[r[1].toLowerCase()]={href:r[2],title:r[3]};continue}if(n&&(r=this.rules.table.exec(e))){e=e.substring(r[0].length);h={type:"table",header:r[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:r[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:r[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(u=0;u<h.align.length;u++){if(/^ *-+: *$/.test(h.align[u])){h.align[u]="right"}else if(/^ *:-+: *$/.test(h.align[u])){h.align[u]="center"}else if(/^ *:-+ *$/.test(h.align[u])){h.align[u]="left"}else{h.align[u]=null}}for(u=0;u<h.cells.length;u++){h.cells[u]=h.cells[u].replace(/^ *\| *| *\| *$/g,"").split(/ *\| */)}this.tokens.push(h);continue}if(n&&(r=this.rules.paragraph.exec(e))){e=e.substring(r[0].length);this.tokens.push({type:"paragraph",text:r[1][r[1].length-1]==="\n"?r[1].slice(0,-1):r[1]});continue}if(r=this.rules.text.exec(e)){e=e.substring(r[0].length);this.tokens.push({type:"text",text:r[0]});continue}if(e){throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}}return this.tokens};var n={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:o,tag:/^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:o,text:/^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/};n._inside=/(?:\[[^\]]*\]|[^\]]|\](?=[^\[]*\]))*/;n._href=/\s*<?([^\s]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;n.link=l(n.link)("inside",n._inside)("href",n._href)();n.reflink=l(n.reflink)("inside",n._inside)();n.normal=h({},n);n.pedantic=h({},n.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});n.gfm=h({},n.normal,{escape:l(n.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:l(n.text)("]|","~]|")("|","|https?://|")()});n.breaks=h({},n.gfm,{br:l(n.br)("{2,}","*")(),text:l(n.gfm.text)("{2,}","*")()});function s(t,e){this.options=e||a.defaults;this.links=t;this.rules=n.normal;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=n.breaks}else{this.rules=n.gfm}}else if(this.options.pedantic){this.rules=n.pedantic}}s.rules=n;s.output=function(t,e,n){var i=new s(e,n);return i.output(t)};s.prototype.output=function(t){var e="",n,s,i,l;while(t){if(l=this.rules.escape.exec(t)){t=t.substring(l[0].length);e+=l[1];continue}if(l=this.rules.autolink.exec(t)){t=t.substring(l[0].length);if(l[2]==="@"){s=l[1][6]===":"?this.mangle(l[1].substring(7)):this.mangle(l[1]);i=this.mangle("mailto:")+s}else{s=r(l[1]);i=s}e+='<a href="'+i+'">'+s+"</a>";continue}if(l=this.rules.url.exec(t)){t=t.substring(l[0].length);s=r(l[1]);i=s;e+='<a href="'+i+'">'+s+"</a>";continue}if(l=this.rules.tag.exec(t)){t=t.substring(l[0].length);e+=this.options.sanitize?r(l[0]):l[0];continue}if(l=this.rules.link.exec(t)){t=t.substring(l[0].length);e+=this.outputLink(l,{href:l[2],title:l[3]});continue}if((l=this.rules.reflink.exec(t))||(l=this.rules.nolink.exec(t))){t=t.substring(l[0].length);n=(l[2]||l[1]).replace(/\s+/g," ");n=this.links[n.toLowerCase()];if(!n||!n.href){e+=l[0][0];t=l[0].substring(1)+t;continue}e+=this.outputLink(l,n);continue}if(l=this.rules.strong.exec(t)){t=t.substring(l[0].length);e+="<strong>"+this.output(l[2]||l[1])+"</strong>";continue}if(l=this.rules.em.exec(t)){t=t.substring(l[0].length);e+="<em>"+this.output(l[2]||l[1])+"</em>";continue}if(l=this.rules.code.exec(t)){t=t.substring(l[0].length);e+="<code>"+r(l[2],true)+"</code>";continue}if(l=this.rules.br.exec(t)){t=t.substring(l[0].length);e+="<br>";continue}if(l=this.rules.del.exec(t)){t=t.substring(l[0].length);e+="<del>"+this.output(l[1])+"</del>";continue}if(l=this.rules.text.exec(t)){t=t.substring(l[0].length);e+=r(l[0]);continue}if(t){throw new Error("Infinite loop on byte: "+t.charCodeAt(0))}}return e};s.prototype.outputLink=function(t,e){if(t[0][0]!=="!"){return'<a href="'+r(e.href)+'"'+(e.title?' title="'+r(e.title)+'"':"")+">"+this.output(t[1])+"</a>"}else{return'<img src="'+r(e.href)+'" alt="'+r(t[1])+'"'+(e.title?' title="'+r(e.title)+'"':"")+">"}};s.prototype.smartypants=function(t){if(!this.options.smartypants)return t;return t.replace(/--/g,"—").replace(/'([^']*)'/g,"‘$1’").replace(/"([^"]*)"/g,"“$1”").replace(/\.{3}/g,"…")};s.prototype.mangle=function(t){var e="",n=t.length,s=0,i;for(;s<n;s++){i=t.charCodeAt(s);if(Math.random()>.5){i="x"+i.toString(16)}e+="&#"+i+";"}return e};function i(t){this.tokens=[];this.token=null;this.options=t||a.defaults}i.parse=function(t,e){var n=new i(e);return n.parse(t)};i.prototype.parse=function(t){this.inline=new s(t.links,this.options);this.tokens=t.reverse();var e="";while(this.next()){e+=this.tok()}return e};i.prototype.next=function(){return this.token=this.tokens.pop()};i.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};i.prototype.parseText=function(){var t=this.token.text;while(this.peek().type==="text"){t+="\n"+this.next().text}return this.inline.output(t)};i.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return"<hr>\n"}case"heading":{return"<h"+this.token.depth+">"+this.inline.output(this.token.text)+"</h"+this.token.depth+">\n"}case"code":{if(this.options.highlight){var t=this.options.highlight(this.token.text,this.token.lang);if(t!=null&&t!==this.token.text){this.token.escaped=true;this.token.text=t}}if(!this.token.escaped){this.token.text=r(this.token.text,true)}return"<pre><code"+(this.token.lang?' class="'+this.options.langPrefix+this.token.lang+'"':"")+">"+this.token.text+"</code></pre>\n"}case"table":{var e="",n,s,i,l,o;e+="<thead>\n<tr>\n";for(s=0;s<this.token.header.length;s++){n=this.inline.output(this.token.header[s]);e+=this.token.align[s]?'<th align="'+this.token.align[s]+'">'+n+"</th>\n":"<th>"+n+"</th>\n"}e+="</tr>\n</thead>\n";e+="<tbody>\n";for(s=0;s<this.token.cells.length;s++){i=this.token.cells[s];e+="<tr>\n";for(o=0;o<i.length;o++){l=this.inline.output(i[o]);e+=this.token.align[o]?'<td align="'+this.token.align[o]+'">'+l+"</td>\n":"<td>"+l+"</td>\n"}e+="</tr>\n"}e+="</tbody>\n";return"<table>\n"+e+"</table>\n"}case"blockquote_start":{var e="";while(this.next().type!=="blockquote_end"){e+=this.tok()}return"<blockquote>\n"+e+"</blockquote>\n"}case"list_start":{var h=this.token.ordered?"ol":"ul",e="";while(this.next().type!=="list_end"){e+=this.tok()}return"<"+h+">\n"+e+"</"+h+">\n"}case"list_item_start":{var e="";while(this.next().type!=="list_item_end"){e+=this.token.type==="text"?this.parseText():this.tok()}return"<li>"+e+"</li>\n"}case"loose_item_start":{var e="";while(this.next().type!=="list_item_end"){e+=this.tok()}return"<li>"+e+"</li>\n"}case"html":{return!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text}case"paragraph":{return"<p>"+this.inline.output(this.token.text)+"</p>\n"}case"text":{return"<p>"+this.parseText()+"</p>\n"}}};function r(t,e){return t.replace(!e?/&(?!#?\w+;)/g:/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function l(t,e){t=t.source;e=e||"";return function n(s,i){if(!s)return new RegExp(t,e);i=i.source||i;i=i.replace(/(^|[^\[])\^/g,"$1");t=t.replace(s,i);return n}}function o(){}o.exec=o;function h(t){var e=1,n,s;for(;e<arguments.length;e++){n=arguments[e];for(s in n){if(Object.prototype.hasOwnProperty.call(n,s)){t[s]=n[s]}}}return t}function a(t,n,s){if(s||typeof n==="function"){if(!s){s=n;n=null}if(n)n=h({},a.defaults,n);var l=e.lex(l,n),o=n.highlight,u=0,p=l.length,g=0;if(!o||o.length<3){return s(null,i.parse(l,n))}var c=function(){delete n.highlight;var t=i.parse(l,n);n.highlight=o;return s(null,t)};for(;g<p;g++){(function(t){if(t.type!=="code")return;u++;return o(t.text,t.lang,function(e,n){if(n==null||n===t.text){return--u||c()}t.text=n;t.escaped=true;--u||c()})})(l[g])}return}try{if(n)n=h({},a.defaults,n);return i.parse(e.lex(t,n),n)}catch(f){f.message+="\nPlease report this to https://github.com/chjj/marked.";if((n||a.defaults).silent){return"<p>An error occured:</p><pre>"+r(f.message+"",true)+"</pre>"}throw f}}a.options=a.setOptions=function(t){h(a.defaults,t);return a};a.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,smartLists:false,silent:false,highlight:null,langPrefix:"lang-"};a.Parser=i;a.parser=i.parse;a.Lexer=e;a.lexer=e.lex;a.InlineLexer=s;a.inlineLexer=s.output;a.parse=a;if(typeof exports==="object"){module.exports=a}else if(typeof define==="function"&&define.amd){define(function(){return a})}else{this.marked=a}}).call(function(){return this||(typeof window!=="undefined"?window:global)}());
-
- /*!
- * base64.js
- * http://github.com/dankogai/js-base64
- */
-
- (function(r){"use strict";if(r.Base64)return;var e="2.1.2";var t;if(typeof module!=="undefined"&&module.exports){t=require("buffer").Buffer}var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var a=function(r){var e={};for(var t=0,n=r.length;t<n;t++)e[r.charAt(t)]=t;return e}(n);var o=String.fromCharCode;var u=function(r){if(r.length<2){var e=r.charCodeAt(0);return e<128?r:e<2048?o(192|e>>>6)+o(128|e&63):o(224|e>>>12&15)+o(128|e>>>6&63)+o(128|e&63)}else{var e=65536+(r.charCodeAt(0)-55296)*1024+(r.charCodeAt(1)-56320);return o(240|e>>>18&7)+o(128|e>>>12&63)+o(128|e>>>6&63)+o(128|e&63)}};var c=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;var i=function(r){return r.replace(c,u)};var f=function(r){var e=[0,2,1][r.length%3],t=r.charCodeAt(0)<<16|(r.length>1?r.charCodeAt(1):0)<<8|(r.length>2?r.charCodeAt(2):0),a=[n.charAt(t>>>18),n.charAt(t>>>12&63),e>=2?"=":n.charAt(t>>>6&63),e>=1?"=":n.charAt(t&63)];return a.join("")};var h=r.btoa||function(r){return r.replace(/[\s\S]{1,3}/g,f)};var d=t?function(r){return new t(r).toString("base64")}:function(r){return h(i(r))};var v=function(r,e){return!e?d(r):d(r).replace(/[+\/]/g,function(r){return r=="+"?"-":"_"}).replace(/=/g,"")};var g=function(r){return v(r,true)};var l=new RegExp(["[À-ß][-¿]","[à-ï][-¿]{2}","[ð-÷][-¿]{3}"].join("|"),"g");var A=function(r){switch(r.length){case 4:var e=(7&r.charCodeAt(0))<<18|(63&r.charCodeAt(1))<<12|(63&r.charCodeAt(2))<<6|63&r.charCodeAt(3),t=e-65536;return o((t>>>10)+55296)+o((t&1023)+56320);case 3:return o((15&r.charCodeAt(0))<<12|(63&r.charCodeAt(1))<<6|63&r.charCodeAt(2));default:return o((31&r.charCodeAt(0))<<6|63&r.charCodeAt(1))}};var s=function(r){return r.replace(l,A)};var p=function(r){var e=r.length,t=e%4,n=(e>0?a[r.charAt(0)]<<18:0)|(e>1?a[r.charAt(1)]<<12:0)|(e>2?a[r.charAt(2)]<<6:0)|(e>3?a[r.charAt(3)]:0),u=[o(n>>>16),o(n>>>8&255),o(n&255)];u.length-=[0,0,2,1][t];return u.join("")};var C=r.atob||function(r){return r.replace(/[\s\S]{1,4}/g,p)};var b=t?function(r){return new t(r,"base64").toString()}:function(r){return s(C(r))};var B=function(r){return b(r.replace(/[-_]/g,function(r){return r=="-"?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))};r.Base64={VERSION:e,atob:C,btoa:h,fromBase64:B,toBase64:v,utob:i,encode:v,encodeURI:g,btou:s,decode:B};if(typeof Object.defineProperty==="function"){var S=function(r){return{value:r,enumerable:false,writable:true,configurable:true}};r.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",S(function(){return B(this)}));Object.defineProperty(String.prototype,"toBase64",S(function(r){return v(this,r)}));Object.defineProperty(String.prototype,"toBase64URI",S(function(){return v(this,true)}))}}})(this);
-
- /*!
- * node-parameterize 0.0.7
- * https://github.com/fyalavuz/node-parameterize
- * Exported as `Flatdoc.slugify`
- */
-
- (function(r){var LATIN_MAP={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Æ":"AE","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ő":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ű":"U","Ý":"Y","Þ":"TH","ß":"ss","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i","ð":"d","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ő":"o","ø":"o","ù":"u","ú":"u","û":"u","ü":"u","ű":"u","ý":"y","þ":"th","ÿ":"y"};var LATIN_SYMBOLS_MAP={"©":"(c)"};var GREEK_MAP={"α":"a","β":"b","γ":"g","δ":"d","ε":"e","ζ":"z","η":"h","θ":"8","ι":"i","κ":"k","λ":"l","μ":"m","ν":"n","ξ":"3","ο":"o","π":"p","ρ":"r","σ":"s","τ":"t","υ":"y","φ":"f","χ":"x","ψ":"ps","ω":"w","ά":"a","έ":"e","ί":"i","ό":"o","ύ":"y","ή":"h","ώ":"w","ς":"s","ϊ":"i","ΰ":"y","ϋ":"y","ΐ":"i","Α":"A","Β":"B","Γ":"G","Δ":"D","Ε":"E","Ζ":"Z","Η":"H","Θ":"8","Ι":"I","Κ":"K","Λ":"L","Μ":"M","Ν":"N","Ξ":"3","Ο":"O","Π":"P","Ρ":"R","Σ":"S","Τ":"T","Υ":"Y","Φ":"F","Χ":"X","Ψ":"PS","Ω":"W","Ά":"A","Έ":"E","Ί":"I","Ό":"O","Ύ":"Y","Ή":"H","Ώ":"W","Ϊ":"I","Ϋ":"Y"};var TURKISH_MAP={"ş":"s","Ş":"S","ı":"i","İ":"I","ç":"c","Ç":"C","ü":"u","Ü":"U","ö":"o","Ö":"O","ğ":"g","Ğ":"G"};var RUSSIAN_MAP={"а":"a","б":"b","в":"v","г":"g","д":"d","е":"e","ё":"yo","ж":"zh","з":"z","и":"i","й":"j","к":"k","л":"l","м":"m","н":"n","о":"o","п":"p","р":"r","с":"s","т":"t","у":"u","ф":"f","х":"h","ц":"c","ч":"ch","ш":"sh","щ":"sh","ъ":"","ы":"y","ь":"","э":"e","ю":"yu","я":"ya","А":"A","Б":"B","В":"V","Г":"G","Д":"D","Е":"E","Ё":"Yo","Ж":"Zh","З":"Z","И":"I","Й":"J","К":"K","Л":"L","М":"M","Н":"N","О":"O","П":"P","Р":"R","С":"S","Т":"T","У":"U","Ф":"F","Х":"H","Ц":"C","Ч":"Ch","Ш":"Sh","Щ":"Sh","Ъ":"","Ы":"Y","Ь":"","Э":"E","Ю":"Yu","Я":"Ya"};var UKRAINIAN_MAP={"Є":"Ye","І":"I","Ї":"Yi","Ґ":"G","є":"ye","і":"i","ї":"yi","ґ":"g"};var CZECH_MAP={"č":"c","ď":"d","ě":"e","ň":"n","ř":"r","š":"s","ť":"t","ů":"u","ž":"z","Č":"C","Ď":"D","Ě":"E","Ň":"N","Ř":"R","Š":"S","Ť":"T","Ů":"U","Ž":"Z"};var POLISH_MAP={"ą":"a","ć":"c","ę":"e","ł":"l","ń":"n","ó":"o","ś":"s","ź":"z","ż":"z","Ą":"A","Ć":"C","Ę":"e","Ł":"L","Ń":"N","Ó":"o","Ś":"S","Ź":"Z","Ż":"Z"};var LATVIAN_MAP={"ā":"a","č":"c","ē":"e","ģ":"g","ī":"i","ķ":"k","ļ":"l","ņ":"n","š":"s","ū":"u","ž":"z","Ā":"A","Č":"C","Ē":"E","Ģ":"G","Ī":"i","Ķ":"k","Ļ":"L","Ņ":"N","Š":"S","Ū":"u","Ž":"Z"};var ALL_DOWNCODE_MAPS=new Array;ALL_DOWNCODE_MAPS[0]=LATIN_MAP;ALL_DOWNCODE_MAPS[1]=LATIN_SYMBOLS_MAP;ALL_DOWNCODE_MAPS[2]=GREEK_MAP;ALL_DOWNCODE_MAPS[3]=TURKISH_MAP;ALL_DOWNCODE_MAPS[4]=RUSSIAN_MAP;ALL_DOWNCODE_MAPS[5]=UKRAINIAN_MAP;ALL_DOWNCODE_MAPS[6]=CZECH_MAP;ALL_DOWNCODE_MAPS[7]=POLISH_MAP;ALL_DOWNCODE_MAPS[8]=LATVIAN_MAP;var Downcoder=new Object;Downcoder.Initialize=function(){if(Downcoder.map)return;Downcoder.map={};Downcoder.chars="";for(var i in ALL_DOWNCODE_MAPS){var lookup=ALL_DOWNCODE_MAPS[i];for(var c in lookup){Downcoder.map[c]=lookup[c];Downcoder.chars+=c}}Downcoder.regex=new RegExp("["+Downcoder.chars+"]|[^"+Downcoder.chars+"]+","g")};downcode=function(slug){Downcoder.Initialize();var downcoded="";var pieces=slug.match(Downcoder.regex);if(pieces){for(var i=0;i<pieces.length;i++){if(pieces[i].length==1){var mapped=Downcoder.map[pieces[i]];if(mapped!=null){downcoded+=mapped;continue}}downcoded+=pieces[i]}}else{downcoded=slug}return downcoded};Flatdoc.slugify=function(s,num_chars){s=downcode(s);s=s.replace(/[^-\w\s]/g,"");s=s.replace(/^\s+|\s+$/g,"");s=s.replace(/[-\s]+/g,"-");s=s.toLowerCase();return s.substring(0,num_chars)};})();
-
- /* jshint ignore:end */
|