@@ -65,7 +65,11 @@ var Parser = (function () {
6565 } , {
6666 key : 'hook' ,
6767 value : function hook ( type , callback ) {
68- this . hooks [ type ] . push ( callback ) ;
68+ if ( this . hooks [ type ] ) {
69+ this . hooks [ type ] . push ( callback ) ;
70+ } else {
71+ this . hooks [ type ] = [ callback ] ;
72+ }
6973 }
7074
7175 /**
@@ -220,20 +224,20 @@ var Parser = (function () {
220224 } , {
221225 key : 'parseInline' ,
222226 value : function parseInline ( text ) {
227+ var _this3 = this ;
228+
223229 var whiteList = arguments . length <= 1 || arguments [ 1 ] === undefined ? '' : arguments [ 1 ] ;
224230
225231 text = this . call ( 'beforeParseInline' , text ) ;
226232 var _this = this ;
227233 // code
228- text = text . replace ( / ( ^ | [ ^ \\ ] ) ( ` + ) ( .+ ?) \2/ g, function ( ) {
229- var codeMatches = / ( ^ | [ ^ \\ ] ) ( ` + ) ( .+ ?) \2/ g. exec ( text ) ;
230- return codeMatches [ 1 ] + _this . makeHolder ( '<code>' + _this . htmlspecialchars ( codeMatches [ 3 ] ) + '</code>' ) ;
234+ text = text . replace ( / ( ^ | [ ^ \\ ] ) ( ` + ) ( .+ ?) \2/ g, function ( match , p1 , p2 , p3 ) {
235+ return p1 + _this . makeHolder ( '<code>' + _this . htmlspecialchars ( p3 ) + '</code>' ) ;
231236 } ) ;
232237
233238 // link
234- text = text . replace ( / < ( h t t p s ? : \/ \/ .+ ) > / ig, function ( ) {
235- var linkMatches = / < ( h t t p s ? : \/ \/ .+ ) > / ig. exec ( text ) ;
236- return '<a href="' + linkMatches [ 1 ] + '">' + linkMatches [ 1 ] + '</a>' ;
239+ text = text . replace ( / < ( h t t p s ? : \/ \/ .+ ) > / ig, function ( match , p1 ) {
240+ return '<a href="' + p1 + '">' + p1 + '</a>' ;
237241 } ) ;
238242
239243 // encode unsafe tags
@@ -252,35 +256,31 @@ var Parser = (function () {
252256
253257 // footnote
254258 var footnotePattern = / \[ \^ ( (?: [ ^ \] ] | \] | \[ ) + ?) \] / g;
255-
256- text = text . replace ( footnotePattern , function ( ) {
257- var footnoteMatches = text . match ( footnoteMatches ) ;
258- var id = _this . footnotes . indexOf ( footnoteMatches [ 1 ] ) ;
259+ text = text . replace ( footnotePattern , function ( match , p1 , p2 ) {
260+ var id = _this . footnotes . indexOf ( p1 ) ;
259261
260262 if ( id === - 1 ) {
261263 id = _this . footnotes . length + 1 ;
262- _this . footnotes [ id ] = footnoteMatches [ 1 ] ;
264+ _this . footnotes [ id ] = _this3 . parseInline ( p1 ) ;
263265 }
264266
265267 return _this . makeHolder ( '<sup id="fnref-' + id + '"><a href="#fn-' + id + '" class="footnote-ref">' + id + '</a></sup>' ) ;
266268 } ) ;
267269
268270 // image
269271 var imagePattern1 = / ! \[ ( (?: [ ^ \] ] | \] | \[ ) * ?) \] \( ( (?: [ ^ \) ] | \) | \( ) + ?) \) / ;
270- var imageMatches1 = imagePattern1 . exec ( text ) ;
271- text = text . replace ( imagePattern1 , function ( ) {
272- var escaped = _this . escapeBracket ( imageMatches1 [ 1 ] ) ;
273- var url = _this . escapeBracket ( imageMatches1 [ 2 ] ) ;
272+ text = text . replace ( imagePattern1 , function ( match , p1 , p2 ) {
273+ var escaped = _this . escapeBracket ( p1 ) ;
274+ var url = _this . escapeBracket ( p2 ) ;
274275 return _this . makeHolder ( '<img src="' + url + '" alt="' + escaped + '" title="' + escaped + '">' ) ;
275276 } ) ;
276277
277278 var imagePattern2 = / ! \[ ( (?: [ ^ \] ] | \] | \[ ) * ?) \] \[ ( (?: [ ^ \] ] | \] | \[ ) + ?) \] / ;
278- var imageMatches2 = imagePattern2 . exec ( text ) ;
279- text = text . replace ( imagePattern2 , function ( ) {
280- var escaped = _this . escapeBracket ( imageMatches2 [ 1 ] ) ;
279+ text = text . replace ( imagePattern2 , function ( match , p1 , p2 ) {
280+ var escaped = _this . escapeBracket ( p1 ) ;
281281 var result = '' ;
282- if ( _this . definitions [ imageMatches2 [ 2 ] ] ) {
283- result = '<img src="' + _this . definitions [ imageMatches2 [ 2 ] ] + '" alt="' + escaped + '" title="' + escaped + '">' ;
282+ if ( _this . definitions [ p2 ] ) {
283+ result = '<img src="' + _this . definitions [ p2 ] + '" alt="' + escaped + '" title="' + escaped + '">' ;
284284 } else {
285285 result = escaped ;
286286 }
@@ -289,28 +289,24 @@ var Parser = (function () {
289289
290290 // link
291291 var linkPattern1 = / \[ ( (?: [ ^ \] ] | \] | \[ ) + ?) \] \( ( (?: [ ^ \) ] | \) | \( ) + ?) \) / ;
292- var linkMatches1 = linkPattern1 . exec ( text ) ;
293-
294- text = text . replace ( linkPattern1 , function ( ) {
295- var escaped = _this . escapeBracket ( linkMatches1 [ 1 ] ) ;
296- var url = _this . escapeBracket ( linkMatches1 [ 2 ] ) ;
292+ text = text . replace ( linkPattern1 , function ( match , p1 , p2 ) {
293+ var escaped = _this . parseInline ( _this . escapeBracket ( p1 ) ) ;
294+ var url = _this . escapeBracket ( p2 ) ;
297295 return _this . makeHolder ( '<a href="' + url + '">' + escaped + '</a>' ) ;
298296 } ) ;
299297
300298 var linkPattern2 = / \[ ( (?: [ ^ \] ] | \] | \[ ) + ?) \] \[ ( (?: [ ^ \] ] | \] | \[ ) + ?) \] / ;
301- var linkMatches2 = linkPattern2 . exec ( text ) ;
302- text = text . replace ( linkPattern2 , function ( ) {
303- var escaped = _this . escapeBracket ( linkMatches2 [ 1 ] ) ;
299+ text = text . replace ( linkPattern2 , function ( match , p1 , p2 ) {
300+ var escaped = _this . parseInline ( _this . escapeBracket ( p1 ) ) ;
304301
305- var result = _this . definitions [ linkMatches2 [ 2 ] ] ? '<a href="' + _this . definitions [ linkMatches2 [ 2 ] ] + '">' + escaped + '</a>' : escaped ;
302+ var result = _this . definitions [ p2 ] ? '<a href="' + _this . definitions [ p2 ] + '">' + escaped + '</a>' : escaped ;
306303
307304 return _this . makeHolder ( result ) ;
308305 } ) ;
309306
310307 // escape
311- text = text . replace ( / \\ ( ` | \* | _ | ~ ) / , function ( ) {
312- var escapeMatches = / \\ ( ` | \* | _ | ~ ) / . exec ( text ) ;
313- return _this . makeHolder ( _this . htmlspecialchars ( escapeMatches [ 1 ] ) ) ;
308+ text = text . replace ( / \\ ( ` | \* | _ | ~ ) / g, function ( match , p1 ) {
309+ return _this . makeHolder ( _this . htmlspecialchars ( p1 ) ) ;
314310 } ) ;
315311
316312 // strong and em and some fuck
@@ -353,7 +349,7 @@ var Parser = (function () {
353349 var emptyCount = 0 ;
354350 // analyze by line
355351 for ( var key in lines ) {
356- key = parseInt ( key ) ; // ES6 的 bug for key in Array 循环时返回的 key 是字符串,不是 int
352+ key = parseInt ( key ) ; // ES6 的 for key in Array 循环时返回的 key 是字符串,不是 int
357353 var line = lines [ key ] ;
358354 // code block is special
359355 if ( matches = line . match ( / ^ ( \s * ) ( ~ | ` ) { 3 , } ( [ ^ ` ~ ] * ) $ / i) ) {
@@ -446,6 +442,7 @@ var Parser = (function () {
446442 // pre
447443 case / ^ { 4 } / . test ( line ) :
448444 emptyCount = 0 ;
445+
449446 if ( this . isBlock ( 'pre' ) ) {
450447 this . setBlock ( key ) ;
451448 } else if ( this . isBlock ( 'normal' ) ) {
@@ -687,31 +684,11 @@ var Parser = (function () {
687684 } , {
688685 key : 'parsePre' ,
689686 value : function parsePre ( lines ) {
690- var _iteratorNormalCompletion2 = true ;
691- var _didIteratorError2 = false ;
692- var _iteratorError2 = undefined ;
693-
694- try {
695- for ( var _iterator2 = lines [ Symbol . iterator ] ( ) , _step2 ; ! ( _iteratorNormalCompletion2 = ( _step2 = _iterator2 . next ( ) ) . done ) ; _iteratorNormalCompletion2 = true ) {
696- var line = _step2 . value ;
697-
698- line = this . htmlspecialchars ( line . substr ( 4 ) ) ;
699- }
700- } catch ( err ) {
701- _didIteratorError2 = true ;
702- _iteratorError2 = err ;
703- } finally {
704- try {
705- if ( ! _iteratorNormalCompletion2 && _iterator2 [ 'return' ] ) {
706- _iterator2 [ 'return' ] ( ) ;
707- }
708- } finally {
709- if ( _didIteratorError2 ) {
710- throw _iteratorError2 ;
711- }
712- }
713- }
687+ var _this4 = this ;
714688
689+ lines . forEach ( function ( line , ind ) {
690+ lines [ ind ] = _this4 . htmlspecialchars ( line . substr ( 4 ) ) ;
691+ } ) ;
715692 var str = lines . join ( '\n' ) ;
716693
717694 return ( / ^ \s * $ / . test ( str ) ? '' : '<pre><code>' + str + '</code></pre>'
@@ -782,6 +759,8 @@ var Parser = (function () {
782759 } , {
783760 key : 'parseList' ,
784761 value : function parseList ( lines ) {
762+ var _this5 = this ;
763+
785764 var html = '' ;
786765 var minSpace = 99999 ;
787766 var rows = [ ] ;
@@ -802,93 +781,50 @@ var Parser = (function () {
802781
803782 var found = false ;
804783 var secondMinSpace = 99999 ;
805- var _iteratorNormalCompletion3 = true ;
806- var _didIteratorError3 = false ;
807- var _iteratorError3 = undefined ;
808-
809- try {
810- for ( var _iterator3 = rows [ Symbol . iterator ] ( ) , _step3 ; ! ( _iteratorNormalCompletion3 = ( _step3 = _iterator3 . next ( ) ) . done ) ; _iteratorNormalCompletion3 = true ) {
811- var row = _step3 . value ;
812-
813- if ( Array . isArray ( row ) && row [ 0 ] != minSpace ) {
814- secondMinSpace = Math . min ( secondMinSpace , row [ 0 ] ) ;
815- found = true ;
816- }
784+ rows . forEach ( function ( row ) {
785+ if ( Array . isArray ( row ) && row [ 0 ] != minSpace ) {
786+ secondMinSpace = Math . min ( secondMinSpace , row [ 0 ] ) ;
787+ found = true ;
817788 }
818- } catch ( err ) {
819- _didIteratorError3 = true ;
820- _iteratorError3 = err ;
821- } finally {
822- try {
823- if ( ! _iteratorNormalCompletion3 && _iterator3 [ 'return' ] ) {
824- _iterator3 [ 'return' ] ( ) ;
825- }
826- } finally {
827- if ( _didIteratorError3 ) {
828- throw _iteratorError3 ;
829- }
830- }
831- }
832-
789+ } ) ;
833790 secondMinSpace = found ? 0 : minSpace ;
834791
835792 var lastType = '' ;
836793 var leftLines = [ ] ;
837794
838- var _iteratorNormalCompletion4 = true ;
839- var _didIteratorError4 = false ;
840- var _iteratorError4 = undefined ;
841-
842- try {
843- for ( var _iterator4 = rows [ Symbol . iterator ] ( ) , _step4 ; ! ( _iteratorNormalCompletion4 = ( _step4 = _iterator4 . next ( ) ) . done ) ; _iteratorNormalCompletion4 = true ) {
844- var row = _step4 . value ;
795+ rows . forEach ( function ( row ) {
796+ if ( Array . isArray ( row ) ) {
797+ var _row = _slicedToArray ( row , 4 ) ;
845798
846- if ( Array . isArray ( row ) ) {
847- var _row = _slicedToArray ( row , 4 ) ;
799+ var space = _row [ 0 ] ;
800+ var type = _row [ 1 ] ;
801+ var line = _row [ 2 ] ;
802+ var text = _row [ 3 ] ;
848803
849- var space = _row [ 0 ] ;
850- var type = _row [ 1 ] ;
851- var line = _row [ 2 ] ;
852- var text = _row [ 3 ] ;
853-
854- if ( space !== minSpace ) {
855- var pattern = new RegExp ( "^\s{" + secondMinSpace + "}" ) ;
856- leftLines . push ( line . replace ( pattern , '' ) ) ;
857- } else {
858- if ( lastType !== type ) {
859- if ( lastType . length ) {
860- html += '</' + lastType + '>' ;
861- }
862-
863- html += '<' + type + '>' ;
804+ if ( space !== minSpace ) {
805+ var pattern = new RegExp ( "^\s{" + secondMinSpace + "}" ) ;
806+ leftLines . push ( line . replace ( pattern , '' ) ) ;
807+ } else {
808+ if ( lastType !== type ) {
809+ if ( lastType . length ) {
810+ html += '</' + lastType + '>' ;
864811 }
865812
866- if ( leftLines . length ) {
867- html += "<li>" + this . parse ( leftLines . join ( "\n" ) ) + "</li>" ;
868- }
813+ html += '<' + type + '>' ;
814+ }
869815
870- leftLines = [ text ] ;
871- lastType = type ;
816+ if ( leftLines . length ) {
817+ html += "<li>" + _this5 . parse ( leftLines . join ( "\n" ) ) + "</li>" ;
872818 }
873- } else {
874- var pattern = new RegExp ( "^\s{" + secondMinSpace + "}" ) ;
875- leftLines . push ( row . replace ( pattern , '' ) ) ;
876- }
877- }
878- } catch ( err ) {
879- _didIteratorError4 = true ;
880- _iteratorError4 = err ;
881- } finally {
882- try {
883- if ( ! _iteratorNormalCompletion4 && _iterator4 [ 'return' ] ) {
884- _iterator4 [ 'return' ] ( ) ;
885- }
886- } finally {
887- if ( _didIteratorError4 ) {
888- throw _iteratorError4 ;
819+
820+ leftLines = [ text ] ;
821+ lastType = type ;
889822 }
823+ } else {
824+ var pattern = new RegExp ( "^\s{" + secondMinSpace + "}" ) ;
825+ leftLines . push ( row . replace ( pattern , '' ) ) ;
890826 }
891- }
827+ } ) ;
892828
893829 if ( leftLines . length ) {
894830 html += "<li>" + this . parse ( leftLines . join ( "\n" ) ) + ( '</li></' + lastType + '>' ) ;
@@ -905,7 +841,7 @@ var Parser = (function () {
905841 } , {
906842 key : 'parseTable' ,
907843 value : function parseTable ( lines , value ) {
908- var _this3 = this ;
844+ var _this6 = this ;
909845
910846 var _value = _slicedToArray ( value , 2 ) ;
911847
@@ -984,7 +920,7 @@ var Parser = (function () {
984920 html += ' align="' + aligns [ key ] + '"' ;
985921 }
986922
987- html += '>' + _this3 . parseInline ( text ) + ( '</' + tag + '>' ) ;
923+ html += '>' + _this6 . parseInline ( text ) + ( '</' + tag + '>' ) ;
988924 } ) ;
989925
990926 html += '</tr>' ;
@@ -1030,10 +966,10 @@ var Parser = (function () {
1030966 } , {
1031967 key : 'parseNormal' ,
1032968 value : function parseNormal ( lines ) {
1033- var _this4 = this ;
969+ var _this7 = this ;
1034970
1035971 lines = lines . map ( function ( line ) {
1036- return _this4 . parseInline ( line ) ;
972+ return _this7 . parseInline ( line ) ;
1037973 } ) ;
1038974
1039975 var str = lines . join ( "\n" ) . trim ( ) ;
@@ -1091,30 +1027,11 @@ var Parser = (function () {
10911027 } , {
10921028 key : 'parseHtml' ,
10931029 value : function parseHtml ( lines , type ) {
1094- var _iteratorNormalCompletion5 = true ;
1095- var _didIteratorError5 = false ;
1096- var _iteratorError5 = undefined ;
1097-
1098- try {
1099- for ( var _iterator5 = lines [ Symbol . iterator ] ( ) , _step5 ; ! ( _iteratorNormalCompletion5 = ( _step5 = _iterator5 . next ( ) ) . done ) ; _iteratorNormalCompletion5 = true ) {
1100- var line = _step5 . value ;
1030+ var _this8 = this ;
11011031
1102- line = this . parseInline ( line , this . specialWhiteList [ type ] ? this . specialWhiteList [ type ] : '' ) ;
1103- }
1104- } catch ( err ) {
1105- _didIteratorError5 = true ;
1106- _iteratorError5 = err ;
1107- } finally {
1108- try {
1109- if ( ! _iteratorNormalCompletion5 && _iterator5 [ 'return' ] ) {
1110- _iterator5 [ 'return' ] ( ) ;
1111- }
1112- } finally {
1113- if ( _didIteratorError5 ) {
1114- throw _iteratorError5 ;
1115- }
1116- }
1117- }
1032+ lines . forEach ( function ( line ) {
1033+ line = _this8 . parseInline ( line , _this8 . specialWhiteList [ type ] ? _this8 . specialWhiteList [ type ] : '' ) ;
1034+ } ) ;
11181035
11191036 return lines . join ( "\n" ) ;
11201037 }
@@ -1285,7 +1202,7 @@ var Parser = (function () {
12851202 prev [ 2 ] = current [ 2 ] ;
12861203 this . blocks [ this . pos - 1 ] = prev ;
12871204 this . current = prev [ 0 ] ;
1288- unset ( this . blocks [ this . pos ] ) ;
1205+ this . blocks . splice ( this . pos , 1 ) ;
12891206 this . pos -- ;
12901207
12911208 return this ;
0 commit comments