// // showdown.js – A javascript port of Markdown
. // // Copyright © 2007 John Fraser. // // Original Markdown
Copyright © 2004-2005 John Gruber // <daringfireball.net/projects/markdown/> // // Redistributable under a BSD-style open source license. // See license.txt for more information. // // The full source distribution is at: // // A A L // T C A // T K B // // <www.attacklab.net/> // // // Wherever possible, Showdown is a straight, line-by-line port // of the Perl version of Markdown
. // // This is not a normal parser design; it's basically just a // series of string substitutions. It's hard to read and // maintain this way, but keeping Showdown close to the original // design makes it easier to port new features. // // More importantly, Showdown behaves like markdown.pl in most // edge cases. So web applications can do client-side preview // in Javascript, and then build identical HTML on the server. // // This port needs the new RegExp functionality of ECMA 262, // 3rd Edition (i.e. Javascript 1.5). Most modern web browsers // should do fine. Even with the new regular expression features, // We do a lot of work to emulate Perl's regex functionality. // The tricky changes in this file mostly have the “attacklab:” // label. Major or self-explanatory changes don't. // // Smart diff tools like Araxis Merge will be able to match up // this file with markdown.pl in a useful way. A little tweaking // helps: in a copy of markdown.pl, replace “#” with “//” and // replace “$text” with “text”. Be sure to ignore whitespace // and line endings. // // // Showdown usage: // // var text = “Markdown rocks.”; // // var converter = new Showdown.converter(); // var html = converter.makeHtml(text); // // alert(html); // // Note: move the sample code to the bottom of this // file before uncommenting it. // // // Showdown namespace // var Showdown={extensions:{}},forEach=Showdown.forEach=function(a,b){if(typeof a.forEach==“function”)a.forEach(b);else{var c,d=a.length;for(c=0;ca
“nn”,a=M(a),a=a.replace(/^[ t]+$/mg,“”),Showdown.forEach(f,function(b){a=k(b,a)}),a=z(a),a=m(a),a=l(a),a=o(a),a=K(a),a=a.replace(/~D/g,“$$”),a=a.replace(/~T/g,“~”),Showdown.forEach(g,function(b){a=k(b,a)}),a};if(a&&a.extensions){var j=this;Showdown.forEach(a.extensions,function(a){typeof a==“string”&&(a=Showdown.extensions);if(typeof a!=“function”)throw“Extension '”a
“' could not be loaded. It was either not found or is not a valid extension.”;Showdown.forEach(a(j),function(a){a.type?a.type===“language”||a.type===“lang”?f.push(a):(a.type===“output”||a.type===“html”)&&g.push(a):g.push(a)})})}var k=function(a,b){if(a.regex){var c=new RegExp(a.regex,“g”);return b.replace(c,a.replace)}if(a.filter)return a.filter(b)},l=function(a){return a+=“~0”,a=a.replace(/^[ ]{0,3}[(.+)]:[ t]*n?[ t]*<?(S+?)>?[ t]*n?[ t]*(?:(n*)[“(](.+?)[”)][ t]*)?(?:n+|(?=~0))/gm,function(a,d,e,f,g){return d=d.toLowerCase(),b=G(e),f?f+g:(g&&(c=g.replace(/“/g,”"“)),”“)}),a=a.replace(/~0/,”“),a},m=function(a){a=a.replace(/n/g,”nn“);var b=”p|div|h|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del|style|section|header|footer|nav|article|aside“,c=”p|div|h|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside“;return a=a.replace(/^(<(p|div|h|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)b*?n</2>[ t]*(?=n+))/gm,n),a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside)b*?</2>[ t]*(?=n+)n)/gm,n),a=a.replace(/(n[ ]{0,3}(<(b=/(<(“[^”]*“|'[^']*'|[^'”>])*>|<!(–.*?–s*)+>)/gi;return a=a.replace(b,function(a){var b=a.replace(/(.)</?code>(?=.)/g,“$1`”);return b=N(b,“\`*_”),b}),a},r=function(a){return a=a.replace(/([((?:[]*]|[^[]])*)][ ]?(?:n[ ]*)?[(.*?)])()()()()/g,s),a=a.replace(/([((?:[]*]|[^[]])*)]([ t]*()<?(.*?(?:(.*?).*?)?)>?[ t]*(([‘“])(.*?)6[ t]*)?))/g,s),a=a.replace(/([([^[]]+)])()()()()()/g,s),a},s=function(a,d,e,f,g,h,i,j){j==undefined&&(j=”“);var k=d,l=e,m=f.toLowerCase(),n=g,o=j;if(n==”“){m==”“&&(m=l.toLowerCase().replace(/ ?n/g,” “)),n=”#“+m;if(b!=undefined)n=b,c!=undefined&&(o=c);else{if(!(k.search(/(s*)$/m)>-1))return k;n=”“}}n=N(n,”*_“);var p='<a href=”'n
'“';return o!=”“&&(o=o.replace(/”/g,“"”),o=N(o,“*_”),p+=' title=“'o
'”'),p+=“>”l
“</a>”,p},t=function(a){return a=a.replace(/(![ ]?(?:n[ ]*)?[(.*?)])()()()()/g,u),a=a.replace(/(!s?([ t]*()<?(S+?)>?[ t]*(([’“])(.*?)6[ t]*)?))/g,u),a},u=function(a,d,e,f,g,h,i,j){var k=d,l=e,m=f.toLowerCase(),n=g,o=j;o||(o=”“);if(n==”“){m==”“&&(m=l.toLowerCase().replace(/ ?n/g,” “)),n=”#“+m;if(b==undefined)return k;n=b,c!=undefined&&(o=c)}l=l.replace(/”/g,“"”),n=N(n,“*_”);var p='<img src=“'n
'” alt=“'l
'”';return o=o.replace(/“/g,”"“),o=N(o,”*_“),p+=' title=”'o
'“',p+=” />“,p},v=function(a){function b(a){return a.replace(//g,”“).toLowerCase()}return a=a.replace(/^(.+)[ t]*n=+[ t]*n+/gm,function(a,c){return A('<h1 id=”'+b©+'“>'+p©+”</h1>“)}),a=a.replace(/^(.+)[ t]*n-+[ t]*n+/gm,function(a,c){return A('<h2 id=”'+b©+'“>'+p©+”</h2>“)}),a=a.replace(/^(#{1,6})[ t]*(.+?)[ t]*#*n+/gm,function(a,c,d){var e=c.length;return A(”<h“e
' id=”'+b(d)+'“>'+p(d)+”</h“e
”>“)}),a},w,x=function(a){a+=”~0“;var b=/^(([ ]{0,3}([*+-]|d+)[ t]+)[^r]+?(~0|n{2,}(?=S)(?![ t]*(?:[*+-]|d+)[ t]+)))/gm;return e?a=a.replace(b,function(a,b,c){var d=b,e=c.search(//g)>-1?”ul“:”ol“;d=d.replace(/n{2,}/g,”nnn“);var f=w(d);return f=f.replace(/s+$/,”“),f=”<“e
”>“f
”</“e
”>n“,f}):(b=/(nn|^n?)(([ ]{0,3}([*+-]|d+)[ t]+)[^r]+?(~0|n{2,}(?=S)(?![ t]*(?:[*+-]|d+)[ t]+)))/g,a=a.replace(b,function(a,b,c,d){var e=b,f=c,g=d.search(//g)>-1?”ul“:”ol“,f=f.replace(/n{2,}/g,”nnn“),h=w(f);return h=e+”<“g
”>n“h
”</“g
”>n“,h})),a=a.replace(/~0/,”“),a};w=function(a){return e++,a=a.replace(/n{2,}$/,”n“),a+=”~0“,a=a.replace(/(n)?(^[ t]*)([*+-]|d+)[ t]+([^r]+?(n{1,2}))(?=n*(~0|2(|d+)[ t]+))/gm,function(a,b,c,d,e){var f=e,g=b,h=c;return g||f.search(/n{2,}/)>-1?f=o(L(f)):(f=x(L(f)),f=f.replace(/n$/,”“),f=p(f)),”<li>“f
”</li>n“}),a=a.replace(/~0/g,”“),e–,a};var y=function(a){return a+=”~0“,a=a.replace(/(?:nn|^)((?:(?:[ ]{4}|t).*n+)+)(n*[ ]{0,3}[^ tn]|(?=~0))/g,function(a,b,c){var d=b,e=c;return d=C(L(d)),d=M(d),d=d.replace(/^n+/g,”“),d=d.replace(/n+$/g,”“),d=”<pre>"d"\n
</pre>“,A(d)+e}),a=a.replace(/~0/,”“),a},z=function(a){return a+=”~0“,a=a.replace(/(?:^|n)“`(.*)n(*?)n“`/g,function(a,b,c){var d=b,e=c;return e=C(e),e=M(e),e=e.replace(/^n+/g,”“),e=e.replace(/n+$/g,”“),e=”<pre><code“+(d?' class=”'d
'“':”“)+”>“e
”n</code></pre>“,A(e)}),a=a.replace(/~0/,”“),a},A=function(a){return a=a.replace(/(^n+|n+$)/g,”“),”nn~K“+(d.push(a)-1)+”Knn“},B=function(a){return a=a.replace(/(^|)(`+)([^r]*?)2(?!`)/gm,function(a,b,c,d,e){var f=d;return f=f.replace(/^([ t]*)/g,”“),f=f.replace(/[ t]*$/g,”“),f=C(f),b+”"f"
“}),a},C=function(a){return a=a.replace(/&/g,”&“),a=a.replace(/</g,”<“),a=a.replace(/>/g,”>“),a=N(a,”*_{}[]\“,!1),a},D=function(a){return a=a.replace(/(**|__)(?=S)(*?S[_])1/g,”$2“),a=a.replace(/(*|_)(?=S)([^r]*?S)1/g,”$2“),a},E=function(a){return a=a.replace(/((^[ t]*>[ t]?.+n(.+n)n)+)/gm,function(a,b){var c=b;return c=c.replace(/^[ t]*>[ t]?/gm,”~0“),c=c.replace(/~0/g,”“),c=c.replace(/^[ t]+$/gm,”“),c=o©,c=c.replace(/(^|n)/g,”$1 “),c=c.replace(/(s*+?</pre>)/gm,function(a,b){var c=b;return c=c.replace(/^ /mg,”~0“),c=c.replace(/~0/g,”“),c}),A(”<blockquote>n“c
”n</blockquote>“)}),a},F=function(a){a=a.replace(/^n+/g,”“),a=a.replace(/n+$/g,”“);var b=a.split(/n{2,}/g),c=[],e=b.length;for(var f=0;f<e;f++){var g=b;g.search(/~K(d+)K/g)>=0?c.push(g):g.search(/S/)>=0&&(g=p(g),g=g.replace(/^([ t]*)/g,”<p>“),g+=”</p>“,c.push(g))}e=c.length;for(var f=0;fa
'”>'a
“</a>”,a=a.replace(/“>.+:/g,'”>'),a},K=function(a){return a=a.replace(/~E(d+)E/g,function(a,b){var c=parseInt(b);return String.fromCharCode©}),a},L=function(a){return a=a.replace(/^(t|[ ]{1,4})/gm,“~0”),a=a.replace(/~0/g,“”),a},M=function(a){return a=a.replace(/t(?=t)/g,“ ”),a=a.replace(/t/g,“~A~B”),a=a.replace(/~B(.+?)~A/g,function(a,b,c){var d=b,e=4-d.length%4;for(var f=0;f<e;f++)d+=“ ”;return d}),a=a.replace(/~A/g,“ ”),a=a.replace(/~B/g,“”),a},N=function(a,b,c){var d=“([”+b.replace(/([\])/g,“\$1”)+“])”;c&&(d=“\\”+d);var e=new RegExp(d,“g”);return a=a.replace(e,O),a},O=function(a,b){var c=b.charCodeAt(0);return“~E”c
“E”}},typeof module!=“undefined”&&(module.exports=Showdown),typeof define==“function”&&define.amd&&define(“showdown”,function(){return Showdown});