From 05ef5c55dcd040702351e1ec82eb80048f1f714b Mon Sep 17 00:00:00 2001 From: Estevao Soares dos Santos Date: Fri, 14 Sep 2018 14:10:15 +0100 Subject: [PATCH] refactor(event dispatcher): make event dispatcher return an object instead of text --- dist/showdown.js | Bin 166061 -> 164190 bytes dist/showdown.js.map | Bin 459530 -> 461254 bytes dist/showdown.min.js | Bin 82605 -> 79311 bytes dist/showdown.min.js.map | Bin 86972 -> 88834 bytes src/converter.js | 27 ++-- src/helpers.js | 65 +++++++++- src/subParsers/makehtml/anchors.js | 116 +++++++++++------- src/subParsers/makehtml/autoLinks.js | 8 +- src/subParsers/makehtml/blockGamut.js | 4 +- src/subParsers/makehtml/blockQuotes.js | 4 +- src/subParsers/makehtml/codeBlocks.js | 4 +- src/subParsers/makehtml/codeSpans.js | 4 +- .../makehtml/completeHTMLDocument.js | 4 +- src/subParsers/makehtml/detab.js | 4 +- src/subParsers/makehtml/ellipsis.js | 4 +- src/subParsers/makehtml/emoji.js | 4 +- .../makehtml/encodeAmpsAndAngles.js | 4 +- .../makehtml/encodeBackslashEscapes.js | 4 +- src/subParsers/makehtml/encodeCode.js | 4 +- .../escapeSpecialCharsWithinTagAttributes.js | 4 +- src/subParsers/makehtml/githubCodeBlocks.js | 4 +- src/subParsers/makehtml/hashBlock.js | 4 +- src/subParsers/makehtml/hashCodeTags.js | 4 +- src/subParsers/makehtml/hashHTMLBlocks.js | 4 +- src/subParsers/makehtml/hashHTMLSpans.js | 8 +- src/subParsers/makehtml/hashPreCodeTags.js | 4 +- src/subParsers/makehtml/headers.js | 4 +- src/subParsers/makehtml/horizontalRule.js | 4 +- src/subParsers/makehtml/images.js | 4 +- src/subParsers/makehtml/italicsAndBold.js | 4 +- src/subParsers/makehtml/lists.js | 4 +- src/subParsers/makehtml/metadata.js | 4 +- src/subParsers/makehtml/outdent.js | 4 +- src/subParsers/makehtml/paragraphs.js | 4 +- src/subParsers/makehtml/spanGamut.js | 4 +- src/subParsers/makehtml/strikethrough.js | 4 +- src/subParsers/makehtml/tables.js | 5 +- src/subParsers/makehtml/underline.js | 4 +- .../makehtml/unescapeSpecialChars.js | 4 +- .../cases/features/emojis/special.html | 2 +- test/unit/showdown.Converter.js | 32 ++--- 41 files changed, 238 insertions(+), 141 deletions(-) diff --git a/dist/showdown.js b/dist/showdown.js index 2e0f6bf4ab886ee630d37ccc328cd40495181e35..675c45f7c6d6e026a2cbb4cf0938b457227fbe28 100644 GIT binary patch delta 4332 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 delta 6362 zcmZvAd+aQERcC(A3r3s;R%2!$!*~fZ_gdFm)zwwi)eJw@>Uwm&y53b?U6TQ;tLy#h zuCD5;YGivcte8l2Vn;6`D=a<;OMJjj_Oc2JF(N97CW)tzP zNH*zIf6u8?=X<{2bI$jC&iD8K=D}b1j}N`@23KdlIY zAa}0K`olnO&5Twp4S^eLO=nui=1WZT#TfL^)$ez=phD=>$L{-&UidMf%Up*rqcrS zJ#Z}hINBYHCa@qfp=K_zX`NkL97!Hx?1Z%@5E$b;TB=k;G8XRfo88E*+g<1E0ct<-6MXN(Txb;*D`Z$Aqm zH&VuvDJHjjo?w>3s^NA?pp^R5vzcxwqPV=?LYU4K5$Z0P3Ivm+Z&k7BQd8bM5Cfi()uvWW)VS=x|^Q1%Z^!)Y)Km?Z?x5lrMd|* zk_;&Er-i~EkyHW$JA-JSgIvkq)kHGGrT`)-M;v7K`X;jvJxUZf7>ptZ_E@sri}Trj zy#kFA^7wwL7|>!)4c={iWfsk~bWLWGzhACoYSy0cSf;|2Y^3OT0dA)L!7ky+riqsT zfX5m)K7tNwYP2LL8iMPQp3EDTO(K>bVYRxQ8nWO@%U$LO+e15Auvw$ZTm6utz8#^f zdWkyg+^vWMTO4z4w!vaDvY zpIOr$2i6i9kG9ro=`3KcCj-|qJZf{=?~d%G+s;(2^V(hCXW}MCK>-jJpbBl6h}dye zjLeFW0TE_sZ8v$eGJT6JD0B)`Bcn(dc*2A^!bS{fMCB?Mdpi=t0YDCjwk861D=lV?)8Z=%&}xvKzlU3V71d`0p71c5?&sIa>kSf1L47Jv*0*` zqHuDrjDS=eL)}EhHYRg$EyUTu&{{v4fyOKw&8S6jROdRp zS#&~)rW0mAjrA3n5bo@7(s0Ftv905>5WH(dN4G;6>-Ot;=4bOFi$|>^c-CSk;i2GZ zEmv0oAb{3vif&5V6$3eX%{58(()%or7PZFW$CUloISiy8L>|rLJB>QU&CoJcE--aRn02zT6uKriEH!-;eT=IfClZ=4VfUQ*1uWZ)HI>Zrysz?$>n`?7_HA5HX zDS_w3dI{L;hG(knDDv%)!+3I)9}XrXjk+=6r(=DYx?7E~7e3F-bv*Q8J7~%fs!O*| zX==RKrZ}*VdTj8%!Wm zdqZ^2XxuZN$P@>Knv9PXWmWr)vB&%{6!b<<5?NzYb6%2AjALByVXC6q6MwfTjB>M* znj>o>hoaoaZd@;PQ+E&TqQ^F4?m(N>(Tc4_wL=@5wvoOjLlFQ@hYHoZiB*j}j`>iBA|?hfHyj2yD?}_?9z8n=MXk$(8C#tXsqsvSho5-7>UQ zPi_1Fw262@2`fNHsHmrzc1smxG7SJC$Z&eSUTOv*4K*^3vQh+4Bv&aiT|h)bBVAZG(B6nboG?iVgAKZwZM2Xt;T0fs(UbyH zbgHXy%T86cT-RfrND)Dw6G*vC^3iJ7pR5=+F}+NXUar^$m>5JaSnD2CiX&G_F)jik z;@jEQE{C}AjL;iZM8@eU@7q-83owBxLuwi=hvlkb@HDVo6IsFc^hAjyd903SX(h~8 z%eo8LMVjWSC_{195)ojLG_Afmp9hW6Fm|YTe3=h%N#N3hdO5cvR{1gIL2N zLyd?CZII(=#gC8-*%dP%Ka8uWBaTNzA*}fjh-`e|6llY0F&A^{Q1Q2Pm{%D#C9~y7 zoh=e|B2r5{%1z*;X&g57Ql3jAagqcYKg%�}S3;?XU<+qM5eO_VHoo7Y4jwz=_;* z6UfR_CR!E>@9LP`D`}04hiu$wQ#x2??1ZOO(=-|>B3W%B_|uiAZ9&v4tx{Dg?@;uP zsWI9rpE;*Y)S*g$*I) zMed|;?L*RcQnXlklqJfv3}gxw<1;jO^LU#&-Dt&3S6iOc=!)op;k+Q7sk2!Uvxu70 ztCcZ8Ihi?*L!<~6yq`(rI+e(++50F1jgkD&aY{S_nFVlE$reh{*>s3Nx?qJioTo&?Y+YuwNn38Jc{#Uo?ZbG++vS{WdM-@S<<<|B zTp+`8B_Nod+n^?tA~w~73|ck}osHNmU-CAM9mZmBxydouRW3=L>v(&#Kh z`+=xOur~a_7$7(~zanit} z0|5e-lg3%Y2{povH7;1%Dx!vh*`-B{OhkTZDq|&2*b>${iv!33CKAb#9yy3bBVe5EC#MNZ#@kV4=o?-^eW_T)N1@mx3$bJoc#f>= z$Of1rtB*~~qDgFM5ZIwXnp(cFuz9D-mV%d=bHYKBuIy$I>_~el>(~k6y5Wp(@uqBv%3A8q>ncN2 z!rEfgLQZkq59mbn0l-toP+Z@&LD_&^qR4+!2M|GK$QxvtV$Ri*ToT? z$`vST&C?hI5sp#UkY~-Dv$E#$z-_AF%?;{i3PGe=yyJ^nj z;~fE^AilGuQ&aJb7&nDoMR$8LOuXyFwr4rU*_MY;X4_SeI8Y?O8H+Y>)jH_DS*{Lf z@AYPuC)zd~3X31-S;h3@v~9{>J`9FVgDM|uWoj*2#Tgqb5}nXkXYBwV6OO|Lfh&R~ zy~R(k6X9GGEyZL`Y{Bicw9zK9gqf7A;00xktYvfDj5oGx`1>4Q$EMmicmv~prVr;{ zg}caMQ-=7w;J2PJl12h+HnVjNC3?7Q=IbLLjdLrCU}H7x+onqx7fvkC833l0sWbU> z*Qv{Fw}c(0lU6G$%b`i2ge?&+D0EXHGKI1}D>6*C0AvKF=CvJhDdR5G%rg`2xPXQW zgLnWdlHp2$EE!kEkn-d;_8dF% zHML&sdc7bgT*%eY%z7;B**I`n~2UN5r#O z!HjhRZ(C`jO+m|8%=Bow!gWLn;9a3}WIS6_M~l?LX>)Xp1qn=%lsI4v72)N!)%Mm< zG`PCR5TB+xRuY9wuNm6{;KV(s;9{h29UmA81R^5y$ *lT)DQplq(~csGaqmS9%0 zzw#s`Xr1UFrdzm2>Y%PVFRM3M0JcCd?A=b9cLupK;T$W58<(-QYYGFT%eZk4EoK-F zyX_lE%4t`c?~9Ex4w|vd6T2Zic$r|SycZ(hswD-HPbm$1l__e(auOUe7^3@L>|w;k zw*WX<4&XiRR@_3Yks62BQlzdDduMBOsO-kc1j#ddOys(V(<5J2xS3rvmVwH9%h@(! zAuoKH^`*%n4%&DXt&S0ia@#hO?PR3d%grqBPoTXtK^ri43nvg}E#e78xn`A&&m4am zVYS=<6R*)FcoRYkYN6``cG~9l!PP0it9D>_$e?sOGf2&y>}X{NpaxQ7LBOE!(z1YH zq+rKhoR6XP-b98=AcCMX#z^%>%}Mgwo3B3f!u1EvFaF-E&p-N)PoDqhcRv2aji;Z! zUS3|icH?G!S>LKlv26W{boc)C^Y?z?*+;(1z45j{%~=7M`HPpn^GKK*pjWZ8FJUJj${F>v|JQ}ta{_k_yJK~;Hv>mPsT`HMfXy2#Gx?Q4&? zckPdX^M82n6VD9t*WP>$sDNv40^K)Xd;7EBF!J)c|F1vq{ElCG-T5o;dG%x2P4C8y zTa~}fTyI$JyKleo71cL0UVHw_+rn7sHh%Jj z!NM>7q&hq&?*)fv_}=F(zA^X9Uf~9{UtPQD-yDqi*iYSg@cfzgzvW#0-Q(vEeC^xM z)(1}K|NeoWJO9Xke%JY3Uwi!g;?KO|iu&OG;-0{ZKNDQ>KfC>wd&Hmp{N_sd&_CUO zbNq)#&((+Ht1o?+y3Y_l^1iFDe&i1xxF`ChU)rAE`paLxH~#!bUv_@SN7v`S`>1}8 z_CD61zx=VEx;Os7e|h+P>;FD>{=`*tp8U$^|AqI$$6tAV)5rJc|Mv0Ueu?+3=U@D< z-uX3mK6#J+r#m0I`p75Vb${l+`pZ|H|LW&oasKxoe*FByzp7q+`B$I#mSH)sJ^%9m ze(?O3Pd=20O?XNxll1(o=fBFxwwyAHlO z{=@6Aoj-oy z;@d7Bxba5+{P(~8n)Ca9`rqDu@}Z0T_K!bwao3CAe*5i)WaV@T8NIsf^~=bj&e_s;qa7skcI_Yyz5 zee0Qv*C@p$^lb5_yCSzTzXJSTJiCAT z=|dTBo`QyK9>&+J%l(bFzm$>HogaVZLVW1LyYoM8Ua*fm;@zs;_Kn`{5pn@vc(*sm X#rF(E)^lkdW02%1DrhCy16QG)8n�N9_c_JWEdDaupkVN9y*=y=vll8 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 b?3wbxJ77c7k_;(rn`JK7oVA{ul+OJhzC&X6 diff --git a/src/converter.js b/src/converter.js index 8aa9d61..58e4e77 100644 --- a/src/converter.js +++ b/src/converter.js @@ -197,7 +197,7 @@ showdown.Converter = function (converterOptions) { if (typeof callback !== 'function') { throw Error('Invalid argument in converter.listen() method: callback must be a function, but ' + typeof callback + ' given'); } - + name = name.toLowerCase(); if (!listeners.hasOwnProperty(name)) { listeners[name] = []; } @@ -211,24 +211,33 @@ showdown.Converter = function (converterOptions) { } /** - * Dispatch an event - * @private + * * @param {string} evtName Event name * @param {string} text Text * @param {{}} options Converter Options - * @param {{}} globals - * @returns {string} + * @param {{}} globals Converter globals + * @param {{}} pParams extra params for event + * @returns showdown.helper.Event + * @private */ - this._dispatch = function dispatch (evtName, text, options, globals) { + this._dispatch = function dispatch (evtName, text, options, globals, pParams) { + evtName = evtName.toLowerCase(); + var params = pParams || {}; + params.converter = this; + params.text = text; + params.options = options; + params.globals = globals; + var event = new showdown.helper.Event(evtName, text, params); + if (listeners.hasOwnProperty(evtName)) { for (var ei = 0; ei < listeners[evtName].length; ++ei) { - var nText = listeners[evtName][ei](evtName, text, this, options, globals); + var nText = listeners[evtName][ei](event); if (nText && typeof nText !== 'undefined') { - text = nText; + event.setText(nText); } } } - return text; + return event; }; /** diff --git a/src/helpers.js b/src/helpers.js index 6159c23..820b874 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -396,6 +396,69 @@ showdown.helper.unescapeHTMLEntities = function (txt) { .replace(/&/g, '&'); }; +/** + * Showdown's Event Object + * @param {string} name Name of the event + * @param {{}} params optional. params of the event + * @constructor + */ +showdown.helper.Event = function (name, text, params) { + 'use strict'; + + /** + * Get the name of the event + * @returns {string} + */ + this.getName = function () { + return name; + }; + + this.getEventName = function () { + return name; + }; + + var regexp = params.regexp || null; + var matches = params.matches || {}; + var options = params.options || {}; + var converter = params.converter || null; + var globals = params.globals || {}; + + this._stopExecution = false; + + this.parsedText = params.parsedText || null; + + this.getRegexp = function () { + return regexp; + }; + this.getOptions = function () { + return options; + }; + this.getConverter = function () { + return converter; + }; + this.getGlobals = function () { + return globals; + }; + this.getCapturedText = function () { + return text; + }; + this.getText = function () { + return text; + }; + this.setText = function (newText) { + text = newText; + }; + this.getMatches = function () { + return matches; + }; + this.setMatches = function (newMatches) { + matches = newMatches; + }; + this.preventDefault = function (bool) { + this._stopExecution = !bool; + }; +}; + /** * POLYFILLS */ @@ -1604,6 +1667,6 @@ showdown.helper.emojis = { 'zzz':'\ud83d\udca4', /* special emojis :P */ - 'octocat': '', + 'octocat': '', 'showdown': '' }; diff --git a/src/subParsers/makehtml/anchors.js b/src/subParsers/makehtml/anchors.js index 1adc213..e96f57d 100644 --- a/src/subParsers/makehtml/anchors.js +++ b/src/subParsers/makehtml/anchors.js @@ -4,74 +4,96 @@ showdown.subParser('makehtml.anchors', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.anchors.before', text, options, globals); + text = globals.converter._dispatch('makehtml.anchors.before', text, options, globals).getText(); - var writeAnchorTag = function (wholeMatch, linkText, linkId, url, m5, m6, title) { - if (showdown.helper.isUndefined(title)) { - title = ''; - } - linkId = linkId.toLowerCase(); + var writeAnchorTag = function (rgx) { - // Special case for explicit empty url - if (wholeMatch.search(/\(? ?(['"].*['"])?\)$/m) > -1) { - url = ''; - } else if (!url) { - if (!linkId) { - // lower-case and turn embedded newlines into spaces - linkId = linkText.toLowerCase().replace(/ ?\n/g, ' '); - } - url = '#' + linkId; - - if (!showdown.helper.isUndefined(globals.gUrls[linkId])) { - url = globals.gUrls[linkId]; - if (!showdown.helper.isUndefined(globals.gTitles[linkId])) { - title = globals.gTitles[linkId]; + return function (wholeMatch1, linkText1, linkId1, url1, m5, m6, title1) { + var evt = globals.converter._dispatch('makehtml.anchors.capture_begin', wholeMatch1, options, globals, { + regexp: rgx, + matches: { + wholeMatch: wholeMatch1, + linkText: linkText1, + linkId: linkId1, + url: url1, + title: title1 } - } else { - return wholeMatch; + }); + + var wholeMatch = evt.getMatches().wholeMatch; + var linkText = evt.getMatches().linkText; + var linkId = evt.getMatches().linkId; + var url = evt.getMatches().url; + var title = evt.getMatches().title; + + if (showdown.helper.isUndefined(title)) { + title = ''; } - } + linkId = linkId.toLowerCase(); - //url = showdown.helper.escapeCharacters(url, '*_', false); // replaced line to improve performance - url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback); + // Special case for explicit empty url + if (wholeMatch.search(/\(? ?(['"].*['"])?\)$/m) > -1) { + url = ''; + } else if (!url) { + if (!linkId) { + // lower-case and turn embedded newlines into spaces + linkId = linkText.toLowerCase().replace(/ ?\n/g, ' '); + } + url = '#' + linkId; - var result = ''; + if (title !== '' && title !== null) { + title = title.replace(/"/g, '"'); + //title = showdown.helper.escapeCharacters(title, '*_', false); // replaced line to improve performance + title = title.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback); + result += ' title="' + title + '"'; + } - return result; + // optionLinksInNewWindow only applies + // to external links. Hash links (#) open in same page + if (options.openLinksInNewWindow && !/^#/.test(url)) { + // escaped _ + result += ' target="¨E95Eblank"'; + } + + result += '>' + linkText + ''; + + return result; + }; }; + var referenceRegex = /\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g; // First, handle reference-style links: [link text] [id] - text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g, writeAnchorTag); + text = text.replace(referenceRegex, writeAnchorTag(referenceRegex)); // Next, inline-style links: [link text](url "optional title") // cases with crazy urls like ./image/cat1).png - text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g, - writeAnchorTag); + var inlineRegexCrazy = /\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g; + text = text.replace(inlineRegexCrazy, writeAnchorTag(inlineRegexCrazy)); // normal cases - text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]??(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g, - writeAnchorTag); + var inlineRegex = /\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]??(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g; + text = text.replace(inlineRegex, writeAnchorTag(inlineRegex)); // handle reference-style shortcuts: [link text] // These must come last in case you've also got [link test][1] // or [link test](/foo) - text = text.replace(/\[([^\[\]]+)]()()()()()/g, writeAnchorTag); + var referenceShortcutRegex = /\[([^\[\]]+)]()()()()()/g; + text = text.replace(referenceShortcutRegex, writeAnchorTag(referenceShortcutRegex)); // Lastly handle GithubMentions if option is enabled if (options.ghMentions) { @@ -93,6 +115,6 @@ showdown.subParser('makehtml.anchors', function (text, options, globals) { }); } - text = globals.converter._dispatch('makehtml.anchors.after', text, options, globals); + text = globals.converter._dispatch('makehtml.anchors.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/autoLinks.js b/src/subParsers/makehtml/autoLinks.js index 0896d7a..ca39193 100644 --- a/src/subParsers/makehtml/autoLinks.js +++ b/src/subParsers/makehtml/autoLinks.js @@ -47,12 +47,12 @@ var simpleURLRegex = /([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^' showdown.subParser('makehtml.autoLinks', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.autoLinks.before', text, options, globals); + text = globals.converter._dispatch('makehtml.autoLinks.before', text, options, globals).getText(); text = text.replace(delimUrlRegex, replaceLink(options)); text = text.replace(delimMailRegex, replaceMail(options, globals)); - text = globals.converter._dispatch('makehtml.autoLinks.after', text, options, globals); + text = globals.converter._dispatch('makehtml.autoLinks.after', text, options, globals).getText(); return text; }); @@ -64,7 +64,7 @@ showdown.subParser('makehtml.simplifiedAutoLinks', function (text, options, glob return text; } - text = globals.converter._dispatch('makehtml.simplifiedAutoLinks.before', text, options, globals); + text = globals.converter._dispatch('makehtml.simplifiedAutoLinks.before', text, options, globals).getText(); if (options.excludeTrailingPunctuationFromURLs) { text = text.replace(simpleURLRegex2, replaceLink(options)); @@ -73,7 +73,7 @@ showdown.subParser('makehtml.simplifiedAutoLinks', function (text, options, glob } text = text.replace(simpleMailRegex, replaceMail(options, globals)); - text = globals.converter._dispatch('makehtml.simplifiedAutoLinks.after', text, options, globals); + text = globals.converter._dispatch('makehtml.simplifiedAutoLinks.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/blockGamut.js b/src/subParsers/makehtml/blockGamut.js index 2f46771..7a9b2b6 100644 --- a/src/subParsers/makehtml/blockGamut.js +++ b/src/subParsers/makehtml/blockGamut.js @@ -5,7 +5,7 @@ showdown.subParser('makehtml.blockGamut', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.blockGamut.before', text, options, globals); + text = globals.converter._dispatch('makehtml.blockGamut.before', text, options, globals).getText(); // we parse blockquotes first so that we can have headings and hrs // inside blockquotes @@ -26,7 +26,7 @@ showdown.subParser('makehtml.blockGamut', function (text, options, globals) { text = showdown.subParser('makehtml.hashHTMLBlocks')(text, options, globals); text = showdown.subParser('makehtml.paragraphs')(text, options, globals); - text = globals.converter._dispatch('makehtml.blockGamut.after', text, options, globals); + text = globals.converter._dispatch('makehtml.blockGamut.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/blockQuotes.js b/src/subParsers/makehtml/blockQuotes.js index b372401..256f3d7 100644 --- a/src/subParsers/makehtml/blockQuotes.js +++ b/src/subParsers/makehtml/blockQuotes.js @@ -1,7 +1,7 @@ showdown.subParser('makehtml.blockQuotes', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.blockQuotes.before', text, options, globals); + text = globals.converter._dispatch('makehtml.blockQuotes.before', text, options, globals).getText(); // add a couple extra lines after the text and endtext mark text = text + '\n\n'; @@ -37,6 +37,6 @@ showdown.subParser('makehtml.blockQuotes', function (text, options, globals) { return showdown.subParser('makehtml.hashBlock')('

\n' + bq + '\n
', options, globals); }); - text = globals.converter._dispatch('makehtml.blockQuotes.after', text, options, globals); + text = globals.converter._dispatch('makehtml.blockQuotes.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/codeBlocks.js b/src/subParsers/makehtml/codeBlocks.js index 271d092..ed9da66 100644 --- a/src/subParsers/makehtml/codeBlocks.js +++ b/src/subParsers/makehtml/codeBlocks.js @@ -4,7 +4,7 @@ showdown.subParser('makehtml.codeBlocks', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.codeBlocks.before', text, options, globals); + text = globals.converter._dispatch('makehtml.codeBlocks.before', text, options, globals).getText(); // sentinel workarounds for lack of \A and \Z, safari\khtml bug text += '¨0'; @@ -33,6 +33,6 @@ showdown.subParser('makehtml.codeBlocks', function (text, options, globals) { // strip sentinel text = text.replace(/¨0/, ''); - text = globals.converter._dispatch('makehtml.codeBlocks.after', text, options, globals); + text = globals.converter._dispatch('makehtml.codeBlocks.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/codeSpans.js b/src/subParsers/makehtml/codeSpans.js index 54f2e94..8da5f84 100644 --- a/src/subParsers/makehtml/codeSpans.js +++ b/src/subParsers/makehtml/codeSpans.js @@ -26,7 +26,7 @@ showdown.subParser('makehtml.codeSpans', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.codeSpans.before', text, options, globals); + text = globals.converter._dispatch('makehtml.codeSpans.before', text, options, globals).getText(); if (typeof(text) === 'undefined') { text = ''; @@ -43,6 +43,6 @@ showdown.subParser('makehtml.codeSpans', function (text, options, globals) { } ); - text = globals.converter._dispatch('makehtml.codeSpans.after', text, options, globals); + text = globals.converter._dispatch('makehtml.codeSpans.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/completeHTMLDocument.js b/src/subParsers/makehtml/completeHTMLDocument.js index 464e94a..79cb3e7 100644 --- a/src/subParsers/makehtml/completeHTMLDocument.js +++ b/src/subParsers/makehtml/completeHTMLDocument.js @@ -8,7 +8,7 @@ showdown.subParser('makehtml.completeHTMLDocument', function (text, options, glo return text; } - text = globals.converter._dispatch('makehtml.completeHTMLDocument.before', text, options, globals); + text = globals.converter._dispatch('makehtml.completeHTMLDocument.before', text, options, globals).getText(); var doctype = 'html', doctypeParsed = '\n', @@ -57,6 +57,6 @@ showdown.subParser('makehtml.completeHTMLDocument', function (text, options, glo text = doctypeParsed + '\n\n' + title + charset + metadata + '\n\n' + text.trim() + '\n\n'; - text = globals.converter._dispatch('makehtml.completeHTMLDocument.after', text, options, globals); + text = globals.converter._dispatch('makehtml.completeHTMLDocument.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/detab.js b/src/subParsers/makehtml/detab.js index 44dc86c..41e1180 100644 --- a/src/subParsers/makehtml/detab.js +++ b/src/subParsers/makehtml/detab.js @@ -3,7 +3,7 @@ */ showdown.subParser('makehtml.detab', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.detab.before', text, options, globals); + text = globals.converter._dispatch('makehtml.detab.before', text, options, globals).getText(); // expand first n-1 tabs text = text.replace(/\t(?=\t)/g, ' '); // g_tab_width @@ -28,6 +28,6 @@ showdown.subParser('makehtml.detab', function (text, options, globals) { text = text.replace(/¨A/g, ' '); // g_tab_width text = text.replace(/¨B/g, ''); - text = globals.converter._dispatch('makehtml.detab.after', text, options, globals); + text = globals.converter._dispatch('makehtml.detab.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/ellipsis.js b/src/subParsers/makehtml/ellipsis.js index 39d1292..68856a6 100644 --- a/src/subParsers/makehtml/ellipsis.js +++ b/src/subParsers/makehtml/ellipsis.js @@ -1,11 +1,11 @@ showdown.subParser('makehtml.ellipsis', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.ellipsis.before', text, options, globals); + text = globals.converter._dispatch('makehtml.ellipsis.before', text, options, globals).getText(); text = text.replace(/\.\.\./g, '…'); - text = globals.converter._dispatch('makehtml.ellipsis.after', text, options, globals); + text = globals.converter._dispatch('makehtml.ellipsis.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/emoji.js b/src/subParsers/makehtml/emoji.js index 5746509..0a2523f 100644 --- a/src/subParsers/makehtml/emoji.js +++ b/src/subParsers/makehtml/emoji.js @@ -9,7 +9,7 @@ showdown.subParser('makehtml.emoji', function (text, options, globals) { return text; } - text = globals.converter._dispatch('makehtml.emoji.before', text, options, globals); + text = globals.converter._dispatch('makehtml.emoji.before', text, options, globals).getText(); var emojiRgx = /:([\S]+?):/g; @@ -20,7 +20,7 @@ showdown.subParser('makehtml.emoji', function (text, options, globals) { return wm; }); - text = globals.converter._dispatch('makehtml.emoji.after', text, options, globals); + text = globals.converter._dispatch('makehtml.emoji.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/encodeAmpsAndAngles.js b/src/subParsers/makehtml/encodeAmpsAndAngles.js index 086d236..e69322d 100644 --- a/src/subParsers/makehtml/encodeAmpsAndAngles.js +++ b/src/subParsers/makehtml/encodeAmpsAndAngles.js @@ -3,7 +3,7 @@ */ showdown.subParser('makehtml.encodeAmpsAndAngles', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.encodeAmpsAndAngles.before', text, options, globals); + text = globals.converter._dispatch('makehtml.encodeAmpsAndAngles.before', text, options, globals).getText(); // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin: // http://bumppo.net/projects/amputator/ @@ -18,6 +18,6 @@ showdown.subParser('makehtml.encodeAmpsAndAngles', function (text, options, glob // Encode > text = text.replace(/>/g, '>'); - text = globals.converter._dispatch('makehtml.encodeAmpsAndAngles.after', text, options, globals); + text = globals.converter._dispatch('makehtml.encodeAmpsAndAngles.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/encodeBackslashEscapes.js b/src/subParsers/makehtml/encodeBackslashEscapes.js index 3a7bc23..4a888e2 100644 --- a/src/subParsers/makehtml/encodeBackslashEscapes.js +++ b/src/subParsers/makehtml/encodeBackslashEscapes.js @@ -11,11 +11,11 @@ */ showdown.subParser('makehtml.encodeBackslashEscapes', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.encodeBackslashEscapes.before', text, options, globals); + text = globals.converter._dispatch('makehtml.encodeBackslashEscapes.before', text, options, globals).getText(); text = text.replace(/\\(\\)/g, showdown.helper.escapeCharactersCallback); text = text.replace(/\\([`*_{}\[\]()>#+.!~=|-])/g, showdown.helper.escapeCharactersCallback); - text = globals.converter._dispatch('makehtml.encodeBackslashEscapes.after', text, options, globals); + text = globals.converter._dispatch('makehtml.encodeBackslashEscapes.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/encodeCode.js b/src/subParsers/makehtml/encodeCode.js index 23899e2..84afaf7 100644 --- a/src/subParsers/makehtml/encodeCode.js +++ b/src/subParsers/makehtml/encodeCode.js @@ -6,7 +6,7 @@ showdown.subParser('makehtml.encodeCode', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.encodeCode.before', text, options, globals); + text = globals.converter._dispatch('makehtml.encodeCode.before', text, options, globals).getText(); // Encode all ampersands; HTML entities are not // entities within a Markdown code span. @@ -18,6 +18,6 @@ showdown.subParser('makehtml.encodeCode', function (text, options, globals) { // Now, escape characters that are magic in Markdown: .replace(/([*_{}\[\]\\=~-])/g, showdown.helper.escapeCharactersCallback); - text = globals.converter._dispatch('makehtml.encodeCode.after', text, options, globals); + text = globals.converter._dispatch('makehtml.encodeCode.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/escapeSpecialCharsWithinTagAttributes.js b/src/subParsers/makehtml/escapeSpecialCharsWithinTagAttributes.js index 610fbe7..6819588 100644 --- a/src/subParsers/makehtml/escapeSpecialCharsWithinTagAttributes.js +++ b/src/subParsers/makehtml/escapeSpecialCharsWithinTagAttributes.js @@ -4,7 +4,7 @@ */ showdown.subParser('makehtml.escapeSpecialCharsWithinTagAttributes', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.escapeSpecialCharsWithinTagAttributes.before', text, options, globals); + text = globals.converter._dispatch('makehtml.escapeSpecialCharsWithinTagAttributes.before', text, options, globals).getText(); // Build a regex to find HTML tags. var tags = /<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi, @@ -21,6 +21,6 @@ showdown.subParser('makehtml.escapeSpecialCharsWithinTagAttributes', function (t .replace(/([\\`*_~=|])/g, showdown.helper.escapeCharactersCallback); }); - text = globals.converter._dispatch('makehtml.escapeSpecialCharsWithinTagAttributes.after', text, options, globals); + text = globals.converter._dispatch('makehtml.escapeSpecialCharsWithinTagAttributes.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/githubCodeBlocks.js b/src/subParsers/makehtml/githubCodeBlocks.js index 75617ba..660ba75 100644 --- a/src/subParsers/makehtml/githubCodeBlocks.js +++ b/src/subParsers/makehtml/githubCodeBlocks.js @@ -16,7 +16,7 @@ showdown.subParser('makehtml.githubCodeBlocks', function (text, options, globals return text; } - text = globals.converter._dispatch('makehtml.githubCodeBlocks.before', text, options, globals); + text = globals.converter._dispatch('makehtml.githubCodeBlocks.before', text, options, globals).getText(); text += '¨0'; @@ -42,5 +42,5 @@ showdown.subParser('makehtml.githubCodeBlocks', function (text, options, globals // attacklab: strip sentinel text = text.replace(/¨0/, ''); - return globals.converter._dispatch('makehtml.githubCodeBlocks.after', text, options, globals); + return globals.converter._dispatch('makehtml.githubCodeBlocks.after', text, options, globals).getText(); }); diff --git a/src/subParsers/makehtml/hashBlock.js b/src/subParsers/makehtml/hashBlock.js index c998d82..c14948f 100644 --- a/src/subParsers/makehtml/hashBlock.js +++ b/src/subParsers/makehtml/hashBlock.js @@ -1,8 +1,8 @@ showdown.subParser('makehtml.hashBlock', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.hashBlock.before', text, options, globals); + text = globals.converter._dispatch('makehtml.hashBlock.before', text, options, globals).getText(); text = text.replace(/(^\n+|\n+$)/g, ''); text = '\n\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\n\n'; - text = globals.converter._dispatch('makehtml.hashBlock.after', text, options, globals); + text = globals.converter._dispatch('makehtml.hashBlock.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/hashCodeTags.js b/src/subParsers/makehtml/hashCodeTags.js index 36c18e4..6a77042 100644 --- a/src/subParsers/makehtml/hashCodeTags.js +++ b/src/subParsers/makehtml/hashCodeTags.js @@ -3,7 +3,7 @@ */ showdown.subParser('makehtml.hashCodeTags', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.hashCodeTags.before', text, options, globals); + text = globals.converter._dispatch('makehtml.hashCodeTags.before', text, options, globals).getText(); var repFunc = function (wholeMatch, match, left, right) { var codeblock = left + showdown.subParser('makehtml.encodeCode')(match, options, globals) + right; @@ -13,6 +13,6 @@ showdown.subParser('makehtml.hashCodeTags', function (text, options, globals) { // Hash naked text = showdown.helper.replaceRecursiveRegExp(text, repFunc, ']*>', '', 'gim'); - text = globals.converter._dispatch('makehtml.hashCodeTags.after', text, options, globals); + text = globals.converter._dispatch('makehtml.hashCodeTags.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/hashHTMLBlocks.js b/src/subParsers/makehtml/hashHTMLBlocks.js index fadd57a..0d18d86 100644 --- a/src/subParsers/makehtml/hashHTMLBlocks.js +++ b/src/subParsers/makehtml/hashHTMLBlocks.js @@ -1,6 +1,6 @@ showdown.subParser('makehtml.hashHTMLBlocks', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.hashHTMLBlocks.before', text, options, globals); + text = globals.converter._dispatch('makehtml.hashHTMLBlocks.before', text, options, globals).getText(); var blockTags = [ 'pre', @@ -93,6 +93,6 @@ showdown.subParser('makehtml.hashHTMLBlocks', function (text, options, globals) text = text.replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g, showdown.subParser('makehtml.hashElement')(text, options, globals)); - text = globals.converter._dispatch('makehtml.hashHTMLBlocks.after', text, options, globals); + text = globals.converter._dispatch('makehtml.hashHTMLBlocks.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/hashHTMLSpans.js b/src/subParsers/makehtml/hashHTMLSpans.js index 0745d7c..0adb324 100644 --- a/src/subParsers/makehtml/hashHTMLSpans.js +++ b/src/subParsers/makehtml/hashHTMLSpans.js @@ -3,7 +3,7 @@ */ showdown.subParser('makehtml.hashHTMLSpans', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.hashHTMLSpans.before', text, options, globals); + text = globals.converter._dispatch('makehtml.hashHTMLSpans.before', text, options, globals).getText(); function hashHTMLSpan (html) { return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C'; @@ -31,7 +31,7 @@ showdown.subParser('makehtml.hashHTMLSpans', function (text, options, globals) { /*showdown.helper.matchRecursiveRegExp(text, ']*>', '', 'gi');*/ - text = globals.converter._dispatch('makehtml.hashHTMLSpans.after', text, options, globals); + text = globals.converter._dispatch('makehtml.hashHTMLSpans.after', text, options, globals).getText(); return text; }); @@ -40,7 +40,7 @@ showdown.subParser('makehtml.hashHTMLSpans', function (text, options, globals) { */ showdown.subParser('makehtml.unhashHTMLSpans', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.unhashHTMLSpans.before', text, options, globals); + text = globals.converter._dispatch('makehtml.unhashHTMLSpans.before', text, options, globals).getText(); for (var i = 0; i < globals.gHtmlSpans.length; ++i) { var repText = globals.gHtmlSpans[i], @@ -59,6 +59,6 @@ showdown.subParser('makehtml.unhashHTMLSpans', function (text, options, globals) text = text.replace('¨C' + i + 'C', repText); } - text = globals.converter._dispatch('makehtml.unhashHTMLSpans.after', text, options, globals); + text = globals.converter._dispatch('makehtml.unhashHTMLSpans.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/hashPreCodeTags.js b/src/subParsers/makehtml/hashPreCodeTags.js index d8e4eab..e989ea9 100644 --- a/src/subParsers/makehtml/hashPreCodeTags.js +++ b/src/subParsers/makehtml/hashPreCodeTags.js @@ -3,7 +3,7 @@ */ showdown.subParser('makehtml.hashPreCodeTags', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.hashPreCodeTags.before', text, options, globals); + text = globals.converter._dispatch('makehtml.hashPreCodeTags.before', text, options, globals).getText(); var repFunc = function (wholeMatch, match, left, right) { // encode html entities @@ -14,6 +14,6 @@ showdown.subParser('makehtml.hashPreCodeTags', function (text, options, globals) // Hash

   text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}]*>\\s*]*>', '^ {0,3}\\s*
', 'gim'); - text = globals.converter._dispatch('makehtml.hashPreCodeTags.after', text, options, globals); + text = globals.converter._dispatch('makehtml.hashPreCodeTags.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/headers.js b/src/subParsers/makehtml/headers.js index a3aec07..e9f7aeb 100644 --- a/src/subParsers/makehtml/headers.js +++ b/src/subParsers/makehtml/headers.js @@ -1,7 +1,7 @@ showdown.subParser('makehtml.headers', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.headers.before', text, options, globals); + text = globals.converter._dispatch('makehtml.headers.before', text, options, globals).getText(); var headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart), @@ -121,6 +121,6 @@ showdown.subParser('makehtml.headers', function (text, options, globals) { return title; } - text = globals.converter._dispatch('makehtml.headers.after', text, options, globals); + text = globals.converter._dispatch('makehtml.headers.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/horizontalRule.js b/src/subParsers/makehtml/horizontalRule.js index 7f076ff..fc87fd2 100644 --- a/src/subParsers/makehtml/horizontalRule.js +++ b/src/subParsers/makehtml/horizontalRule.js @@ -3,13 +3,13 @@ */ showdown.subParser('makehtml.horizontalRule', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.horizontalRule.before', text, options, globals); + text = globals.converter._dispatch('makehtml.horizontalRule.before', text, options, globals).getText(); var key = showdown.subParser('makehtml.hashBlock')('
', options, globals); text = text.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm, key); text = text.replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm, key); text = text.replace(/^ {0,2}( ?_){3,}[ \t]*$/gm, key); - text = globals.converter._dispatch('makehtml.horizontalRule.after', text, options, globals); + text = globals.converter._dispatch('makehtml.horizontalRule.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/images.js b/src/subParsers/makehtml/images.js index 8380404..6ae02ef 100644 --- a/src/subParsers/makehtml/images.js +++ b/src/subParsers/makehtml/images.js @@ -4,7 +4,7 @@ showdown.subParser('makehtml.images', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.images.before', text, options, globals); + text = globals.converter._dispatch('makehtml.images.before', text, options, globals).getText(); var inlineRegExp = /!\[([^\]]*?)][ \t]*()\([ \t]??(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g, crazyRegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g, @@ -99,6 +99,6 @@ showdown.subParser('makehtml.images', function (text, options, globals) { // handle reference-style shortcuts: ![img text] text = text.replace(refShortcutRegExp, writeImageTag); - text = globals.converter._dispatch('makehtml.images.after', text, options, globals); + text = globals.converter._dispatch('makehtml.images.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/italicsAndBold.js b/src/subParsers/makehtml/italicsAndBold.js index 12b8e0e..7a5d317 100644 --- a/src/subParsers/makehtml/italicsAndBold.js +++ b/src/subParsers/makehtml/italicsAndBold.js @@ -1,7 +1,7 @@ showdown.subParser('makehtml.italicsAndBold', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.italicsAndBold.before', text, options, globals); + text = globals.converter._dispatch('makehtml.italicsAndBold.before', text, options, globals).getText(); // it's faster to have 3 separate regexes for each case than have just one // because of backtracing, in some cases, it could lead to an exponential effect @@ -65,6 +65,6 @@ showdown.subParser('makehtml.italicsAndBold', function (text, options, globals) } - text = globals.converter._dispatch('makehtml.italicsAndBold.after', text, options, globals); + text = globals.converter._dispatch('makehtml.italicsAndBold.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/lists.js b/src/subParsers/makehtml/lists.js index be7e84a..224f795 100644 --- a/src/subParsers/makehtml/lists.js +++ b/src/subParsers/makehtml/lists.js @@ -175,7 +175,7 @@ showdown.subParser('makehtml.lists', function (text, options, globals) { } /** Start of list parsing **/ - text = globals.converter._dispatch('lists.before', text, options, globals); + text = globals.converter._dispatch('lists.before', text, options, globals).getText(); // add sentinel to hack around khtml/safari bug: // http://bugs.webkit.org/show_bug.cgi?id=11231 text += '¨0'; @@ -198,6 +198,6 @@ showdown.subParser('makehtml.lists', function (text, options, globals) { // strip sentinel text = text.replace(/¨0/, ''); - text = globals.converter._dispatch('makehtml.lists.after', text, options, globals); + text = globals.converter._dispatch('makehtml.lists.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/metadata.js b/src/subParsers/makehtml/metadata.js index e248837..6f2405f 100644 --- a/src/subParsers/makehtml/metadata.js +++ b/src/subParsers/makehtml/metadata.js @@ -8,7 +8,7 @@ showdown.subParser('makehtml.metadata', function (text, options, globals) { return text; } - text = globals.converter._dispatch('makehtml.metadata.before', text, options, globals); + text = globals.converter._dispatch('makehtml.metadata.before', text, options, globals).getText(); function parseMetadataContents (content) { // raw is raw so it's not changed in any way @@ -44,6 +44,6 @@ showdown.subParser('makehtml.metadata', function (text, options, globals) { text = text.replace(/¨M/g, ''); - text = globals.converter._dispatch('makehtml.metadata.after', text, options, globals); + text = globals.converter._dispatch('makehtml.metadata.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/outdent.js b/src/subParsers/makehtml/outdent.js index 5bdc9f0..67f4106 100644 --- a/src/subParsers/makehtml/outdent.js +++ b/src/subParsers/makehtml/outdent.js @@ -3,7 +3,7 @@ */ showdown.subParser('makehtml.outdent', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.outdent.before', text, options, globals); + text = globals.converter._dispatch('makehtml.outdent.before', text, options, globals).getText(); // attacklab: hack around Konqueror 3.5.4 bug: // "----------bug".replace(/^-/g,"") == "bug" @@ -12,6 +12,6 @@ showdown.subParser('makehtml.outdent', function (text, options, globals) { // attacklab: clean up hack text = text.replace(/¨0/g, ''); - text = globals.converter._dispatch('makehtml.outdent.after', text, options, globals); + text = globals.converter._dispatch('makehtml.outdent.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/paragraphs.js b/src/subParsers/makehtml/paragraphs.js index 4140285..81acdf3 100644 --- a/src/subParsers/makehtml/paragraphs.js +++ b/src/subParsers/makehtml/paragraphs.js @@ -4,7 +4,7 @@ showdown.subParser('makehtml.paragraphs', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.paragraphs.before', text, options, globals); + text = globals.converter._dispatch('makehtml.paragraphs.before', text, options, globals).getText(); // Strip leading and trailing lines: text = text.replace(/^\n+/g, ''); text = text.replace(/\n+$/g, ''); @@ -66,5 +66,5 @@ showdown.subParser('makehtml.paragraphs', function (text, options, globals) { // Strip leading and trailing lines: text = text.replace(/^\n+/g, ''); text = text.replace(/\n+$/g, ''); - return globals.converter._dispatch('makehtml.paragraphs.after', text, options, globals); + return globals.converter._dispatch('makehtml.paragraphs.after', text, options, globals).getText(); }); diff --git a/src/subParsers/makehtml/spanGamut.js b/src/subParsers/makehtml/spanGamut.js index be4a786..038743d 100644 --- a/src/subParsers/makehtml/spanGamut.js +++ b/src/subParsers/makehtml/spanGamut.js @@ -5,7 +5,7 @@ showdown.subParser('makehtml.spanGamut', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('smakehtml.panGamut.before', text, options, globals); + text = globals.converter._dispatch('smakehtml.panGamut.before', text, options, globals).getText(); text = showdown.subParser('makehtml.codeSpans')(text, options, globals); text = showdown.subParser('makehtml.escapeSpecialCharsWithinTagAttributes')(text, options, globals); text = showdown.subParser('makehtml.encodeBackslashEscapes')(text, options, globals); @@ -44,6 +44,6 @@ showdown.subParser('makehtml.spanGamut', function (text, options, globals) { text = text.replace(/ +\n/g, '
\n'); } - text = globals.converter._dispatch('makehtml.spanGamut.after', text, options, globals); + text = globals.converter._dispatch('makehtml.spanGamut.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/strikethrough.js b/src/subParsers/makehtml/strikethrough.js index b45d707..a6251fb 100644 --- a/src/subParsers/makehtml/strikethrough.js +++ b/src/subParsers/makehtml/strikethrough.js @@ -9,9 +9,9 @@ showdown.subParser('makehtml.strikethrough', function (text, options, globals) { } if (options.strikethrough) { - text = globals.converter._dispatch('makehtml.strikethrough.before', text, options, globals); + text = globals.converter._dispatch('makehtml.strikethrough.before', text, options, globals).getText(); text = text.replace(/(?:~){2}([\s\S]+?)(?:~){2}/g, function (wm, txt) { return parseInside(txt); }); - text = globals.converter._dispatch('makehtml.strikethrough.after', text, options, globals); + text = globals.converter._dispatch('makehtml.strikethrough.after', text, options, globals).getText(); } return text; diff --git a/src/subParsers/makehtml/tables.js b/src/subParsers/makehtml/tables.js index 060464f..eb2a4b7 100644 --- a/src/subParsers/makehtml/tables.js +++ b/src/subParsers/makehtml/tables.js @@ -70,6 +70,7 @@ showdown.subParser('makehtml.tables', function (text, options, globals) { tableLines[i] = tableLines[i].replace(/\|[ \t]*$/, ''); } // parse code spans first, but we only support one line code spans + tableLines[i] = showdown.subParser('makehtml.codeSpans')(tableLines[i], options, globals); } @@ -125,7 +126,7 @@ showdown.subParser('makehtml.tables', function (text, options, globals) { return buildTable(headers, cells); } - text = globals.converter._dispatch('makehtml.tables.before', text, options, globals); + text = globals.converter._dispatch('makehtml.tables.before', text, options, globals).getText(); // find escaped pipe characters text = text.replace(/\\(\|)/g, showdown.helper.escapeCharactersCallback); @@ -136,7 +137,7 @@ showdown.subParser('makehtml.tables', function (text, options, globals) { // parse one column tables text = text.replace(singeColTblRgx, parseTable); - text = globals.converter._dispatch('makehtml.tables.after', text, options, globals); + text = globals.converter._dispatch('makehtml.tables.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/underline.js b/src/subParsers/makehtml/underline.js index f832cb1..ad7f654 100644 --- a/src/subParsers/makehtml/underline.js +++ b/src/subParsers/makehtml/underline.js @@ -5,7 +5,7 @@ showdown.subParser('makehtml.underline', function (text, options, globals) { return text; } - text = globals.converter._dispatch('makehtml.underline.before', text, options, globals); + text = globals.converter._dispatch('makehtml.underline.before', text, options, globals).getText(); if (options.literalMidWordUnderscores) { text = text.replace(/\b_?__(\S[\s\S]*)___?\b/g, function (wm, txt) { @@ -20,7 +20,7 @@ showdown.subParser('makehtml.underline', function (text, options, globals) { // escape remaining underscores to prevent them being parsed by italic and bold text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback); - text = globals.converter._dispatch('makehtml.underline.after', text, options, globals); + text = globals.converter._dispatch('makehtml.underline.after', text, options, globals).getText(); return text; }); diff --git a/src/subParsers/makehtml/unescapeSpecialChars.js b/src/subParsers/makehtml/unescapeSpecialChars.js index 8fc266e..b96144e 100644 --- a/src/subParsers/makehtml/unescapeSpecialChars.js +++ b/src/subParsers/makehtml/unescapeSpecialChars.js @@ -3,13 +3,13 @@ */ showdown.subParser('makehtml.unescapeSpecialChars', function (text, options, globals) { 'use strict'; - text = globals.converter._dispatch('makehtml.unescapeSpecialChars.before', text, options, globals); + text = globals.converter._dispatch('makehtml.unescapeSpecialChars.before', text, options, globals).getText(); text = text.replace(/¨E(\d+)E/g, function (wholeMatch, m1) { var charCodeToReplace = parseInt(m1); return String.fromCharCode(charCodeToReplace); }); - text = globals.converter._dispatch('makehtml.unescapeSpecialChars.after', text, options, globals); + text = globals.converter._dispatch('makehtml.unescapeSpecialChars.after', text, options, globals).getText(); return text; }); diff --git a/test/functional/makehtml/cases/features/emojis/special.html b/test/functional/makehtml/cases/features/emojis/special.html index 236738f..b591c21 100644 --- a/test/functional/makehtml/cases/features/emojis/special.html +++ b/test/functional/makehtml/cases/features/emojis/special.html @@ -1,2 +1,2 @@

this is showdown's emoji

-

and this is github's emoji

\ No newline at end of file +

and this is github's emoji

diff --git a/test/unit/showdown.Converter.js b/test/unit/showdown.Converter.js index d215441..b6ee9ee 100644 --- a/test/unit/showdown.Converter.js +++ b/test/unit/showdown.Converter.js @@ -126,19 +126,19 @@ describe('showdown.Converter', function () { describe('events', function () { var events = [ - 'anchors', - 'autoLinks', - 'blockGamut', - 'blockQuotes', - 'codeBlocks', - 'codeSpans', - 'githubCodeBlocks', - 'headers', - 'images', - 'italicsAndBold', - 'lists', - 'paragraph', - 'spanGamut' + 'makehtml.anchors', + 'makehtml.autoLinks', + 'makehtml.blockGamut', + 'makehtml.blockQuotes', + 'makehtml.codeBlocks', + 'makehtml.codeSpans', + 'makehtml.githubCodeBlocks', + 'makehtml.headers', + 'makehtml.images', + 'makehtml.italicsAndBold', + 'makehtml.lists', + 'makehtml.paragraph', + 'makehtml.spanGamut' //'strikeThrough', //'tables' ]; @@ -151,8 +151,10 @@ describe('showdown.Converter', function () { function runListener (name) { it('should listen to ' + name, function () { var converter = new showdown.Converter(); - converter.listen(name, function (evtName, text) { - evtName.should.equal(name); + converter.listen(name, function (event) { + var evtName = event.getName(); + var text = event.getCapturedText(); + evtName.should.equal(name.toLowerCase()); text.should.match(/^[\s\S]*foo[\s\S]*$/); return text; })