@@ -65,7 +65,11 @@ var Parser = (function () {
65
65
} , {
66
66
key : 'hook' ,
67
67
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
+ }
69
73
}
70
74
71
75
/**
@@ -220,20 +224,20 @@ var Parser = (function () {
220
224
} , {
221
225
key : 'parseInline' ,
222
226
value : function parseInline ( text ) {
227
+ var _this3 = this ;
228
+
223
229
var whiteList = arguments . length <= 1 || arguments [ 1 ] === undefined ? '' : arguments [ 1 ] ;
224
230
225
231
text = this . call ( 'beforeParseInline' , text ) ;
226
232
var _this = this ;
227
233
// 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>' ) ;
231
236
} ) ;
232
237
233
238
// 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>' ;
237
241
} ) ;
238
242
239
243
// encode unsafe tags
@@ -252,35 +256,31 @@ var Parser = (function () {
252
256
253
257
// footnote
254
258
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 ) ;
259
261
260
262
if ( id === - 1 ) {
261
263
id = _this . footnotes . length + 1 ;
262
- _this . footnotes [ id ] = footnoteMatches [ 1 ] ;
264
+ _this . footnotes [ id ] = _this3 . parseInline ( p1 ) ;
263
265
}
264
266
265
267
return _this . makeHolder ( '<sup id="fnref-' + id + '"><a href="#fn-' + id + '" class="footnote-ref">' + id + '</a></sup>' ) ;
266
268
} ) ;
267
269
268
270
// image
269
271
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 ) ;
274
275
return _this . makeHolder ( '<img src="' + url + '" alt="' + escaped + '" title="' + escaped + '">' ) ;
275
276
} ) ;
276
277
277
278
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 ) ;
281
281
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 + '">' ;
284
284
} else {
285
285
result = escaped ;
286
286
}
@@ -289,28 +289,24 @@ var Parser = (function () {
289
289
290
290
// link
291
291
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 ) ;
297
295
return _this . makeHolder ( '<a href="' + url + '">' + escaped + '</a>' ) ;
298
296
} ) ;
299
297
300
298
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 ) ) ;
304
301
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 ;
306
303
307
304
return _this . makeHolder ( result ) ;
308
305
} ) ;
309
306
310
307
// 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 ) ) ;
314
310
} ) ;
315
311
316
312
// strong and em and some fuck
@@ -353,7 +349,7 @@ var Parser = (function () {
353
349
var emptyCount = 0 ;
354
350
// analyze by line
355
351
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
357
353
var line = lines [ key ] ;
358
354
// code block is special
359
355
if ( matches = line . match ( / ^ ( \s * ) ( ~ | ` ) { 3 , } ( [ ^ ` ~ ] * ) $ / i) ) {
@@ -446,6 +442,7 @@ var Parser = (function () {
446
442
// pre
447
443
case / ^ { 4 } / . test ( line ) :
448
444
emptyCount = 0 ;
445
+
449
446
if ( this . isBlock ( 'pre' ) ) {
450
447
this . setBlock ( key ) ;
451
448
} else if ( this . isBlock ( 'normal' ) ) {
@@ -687,31 +684,11 @@ var Parser = (function () {
687
684
} , {
688
685
key : 'parsePre' ,
689
686
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 ;
714
688
689
+ lines . forEach ( function ( line , ind ) {
690
+ lines [ ind ] = _this4 . htmlspecialchars ( line . substr ( 4 ) ) ;
691
+ } ) ;
715
692
var str = lines . join ( '\n' ) ;
716
693
717
694
return ( / ^ \s * $ / . test ( str ) ? '' : '<pre><code>' + str + '</code></pre>'
@@ -782,6 +759,8 @@ var Parser = (function () {
782
759
} , {
783
760
key : 'parseList' ,
784
761
value : function parseList ( lines ) {
762
+ var _this5 = this ;
763
+
785
764
var html = '' ;
786
765
var minSpace = 99999 ;
787
766
var rows = [ ] ;
@@ -802,93 +781,50 @@ var Parser = (function () {
802
781
803
782
var found = false ;
804
783
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 ;
817
788
}
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
+ } ) ;
833
790
secondMinSpace = found ? 0 : minSpace ;
834
791
835
792
var lastType = '' ;
836
793
var leftLines = [ ] ;
837
794
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 ) ;
845
798
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 ] ;
848
803
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 + '>' ;
864
811
}
865
812
866
- if ( leftLines . length ) {
867
- html += "<li>" + this . parse ( leftLines . join ( "\n" ) ) + "</li>" ;
868
- }
813
+ html += '<' + type + '>' ;
814
+ }
869
815
870
- leftLines = [ text ] ;
871
- lastType = type ;
816
+ if ( leftLines . length ) {
817
+ html += "<li>" + _this5 . parse ( leftLines . join ( "\n" ) ) + "</li>" ;
872
818
}
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 ;
889
822
}
823
+ } else {
824
+ var pattern = new RegExp ( "^\s{" + secondMinSpace + "}" ) ;
825
+ leftLines . push ( row . replace ( pattern , '' ) ) ;
890
826
}
891
- }
827
+ } ) ;
892
828
893
829
if ( leftLines . length ) {
894
830
html += "<li>" + this . parse ( leftLines . join ( "\n" ) ) + ( '</li></' + lastType + '>' ) ;
@@ -905,7 +841,7 @@ var Parser = (function () {
905
841
} , {
906
842
key : 'parseTable' ,
907
843
value : function parseTable ( lines , value ) {
908
- var _this3 = this ;
844
+ var _this6 = this ;
909
845
910
846
var _value = _slicedToArray ( value , 2 ) ;
911
847
@@ -984,7 +920,7 @@ var Parser = (function () {
984
920
html += ' align="' + aligns [ key ] + '"' ;
985
921
}
986
922
987
- html += '>' + _this3 . parseInline ( text ) + ( '</' + tag + '>' ) ;
923
+ html += '>' + _this6 . parseInline ( text ) + ( '</' + tag + '>' ) ;
988
924
} ) ;
989
925
990
926
html += '</tr>' ;
@@ -1030,10 +966,10 @@ var Parser = (function () {
1030
966
} , {
1031
967
key : 'parseNormal' ,
1032
968
value : function parseNormal ( lines ) {
1033
- var _this4 = this ;
969
+ var _this7 = this ;
1034
970
1035
971
lines = lines . map ( function ( line ) {
1036
- return _this4 . parseInline ( line ) ;
972
+ return _this7 . parseInline ( line ) ;
1037
973
} ) ;
1038
974
1039
975
var str = lines . join ( "\n" ) . trim ( ) ;
@@ -1091,30 +1027,11 @@ var Parser = (function () {
1091
1027
} , {
1092
1028
key : 'parseHtml' ,
1093
1029
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 ;
1101
1031
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
+ } ) ;
1118
1035
1119
1036
return lines . join ( "\n" ) ;
1120
1037
}
@@ -1285,7 +1202,7 @@ var Parser = (function () {
1285
1202
prev [ 2 ] = current [ 2 ] ;
1286
1203
this . blocks [ this . pos - 1 ] = prev ;
1287
1204
this . current = prev [ 0 ] ;
1288
- unset ( this . blocks [ this . pos ] ) ;
1205
+ this . blocks . splice ( this . pos , 1 ) ;
1289
1206
this . pos -- ;
1290
1207
1291
1208
return this ;
0 commit comments