@@ -75,7 +75,7 @@ var Parser = (function () {
75
75
} , {
76
76
key : 'makeHolder' ,
77
77
value : function makeHolder ( str ) {
78
- var key = '|' + this . uniqid + this . id + '|' ;
78
+ var key = '|\r ' + this . uniqid + this . id + '\r |' ;
79
79
this . id ++ ;
80
80
this . holders [ key ] = str ;
81
81
return key ;
@@ -194,10 +194,16 @@ var Parser = (function () {
194
194
} , {
195
195
key : 'releaseHolder' ,
196
196
value : function releaseHolder ( text ) {
197
- for ( var key in this . holders ) {
198
- var value = this . holders [ key ] ;
199
- text = text . replace ( key , value ) ;
197
+
198
+ var deep = 0 ;
199
+ while ( text . indexOf ( "|\r" ) !== - 1 && deep < 10 ) {
200
+ for ( var key in this . holders ) {
201
+ var value = this . holders [ key ] ;
202
+ text = text . replace ( key , value ) ;
203
+ }
204
+ deep ++ ;
200
205
}
206
+
201
207
this . holders . clear ( ) ;
202
208
203
209
return text ;
@@ -293,15 +299,19 @@ var Parser = (function () {
293
299
}
294
300
295
301
// escape
296
- var escapeMatches = / \\ ( ` | \* | _ ) / . exec ( text ) ;
302
+ var escapeMatches = / \\ ( ` | \* | _ | ~ ) / . exec ( text ) ;
297
303
if ( escapeMatches ) {
298
304
text = this . makeHolder ( this . htmlspecialchars ( escapeMatches [ 1 ] ) ) ;
299
305
}
300
306
301
307
// strong and em and some fuck
302
- text = text . replace ( / ( _ | \* ) { 3 } ( .+ ?) \1{ 3 } / , "<strong><em>$2</em></strong>" ) ;
303
- text = text . replace ( / ( _ | \* ) { 2 } ( .+ ?) \1{ 2 } / , "<strong>$2</strong>" ) ;
304
- text = text . replace ( / ( _ | \* ) ( .+ ?) \1/ , "<em>$2</em>" ) ;
308
+ text = text . replace ( / ( \* { 3 } ) ( .+ ?) \1/ , "<strong><em>$2</em></strong>" ) ;
309
+ text = text . replace ( / ( \* { 2 } ) ( .+ ?) \1/ , "<strong>$2</strong>" ) ;
310
+ text = text . replace ( / ( \* ) ( .+ ?) \1/ , "<em>$2</em>" ) ;
311
+ text = text . replace ( / ( \s + ) ( _ { 3 } ) ( .+ ?) \2( \s + ) / , "$1<strong><em>$3</em></strong>$4" ) ;
312
+ text = text . replace ( / ( \s + ) ( _ { 2 } ) ( .+ ?) \2( \s + ) / , "$1<strong>$3</strong>$4" ) ;
313
+ text = text . replace ( / ( \s + ) ( _ ) ( .+ ?) \2( \s + ) / , "$1<em>$3</em>$4" ) ;
314
+ text = text . replace ( / ( ~ { 2 } ) ( .+ ?) \1/ , "<del>$2</del>" ) ;
305
315
text = text . replace ( / < ( h t t p s ? : \/ \/ .+ ) > / i, "<a href=\"$1\">$1</a>" ) ;
306
316
text = text . replace ( / < ( [ _ a - z 0 - 9 -\. \+ ] + @ [ ^ @ ] + \. [ a - z ] { 2 , } ) > / i, "<a href=\"mailto:$1\">$1</a>" ) ;
307
317
@@ -312,6 +322,7 @@ var Parser = (function () {
312
322
313
323
// release
314
324
text = this . releaseHolder ( text ) ;
325
+
315
326
text = this . call ( 'afterParseInline' , text ) ;
316
327
317
328
return text ;
@@ -365,9 +376,9 @@ var Parser = (function () {
365
376
var htmlPattern1 = new RegExp ( '^\s*<(' + special + ')(\s+[^>]*)?>' , 'i' ) ;
366
377
var htmlPattern2 = new RegExp ( '<\/(' + special + ')>\s*$' , 'i' ) ;
367
378
if ( matches = line . match ( htmlPattern1 ) ) {
368
- tag = matches [ 1 ] . toLowerCase ( ) ;
369
- if ( ! this . isBlock ( 'html' , tag ) && ! this . isBlock ( 'pre' ) ) {
370
- this . startBlock ( 'html' , key , tag ) ;
379
+ var _tag = matches [ 1 ] . toLowerCase ( ) ;
380
+ if ( ! this . isBlock ( 'html' , _tag ) && ! this . isBlock ( 'pre' ) ) {
381
+ this . startBlock ( 'html' , key , _tag ) ;
371
382
}
372
383
373
384
continue ;
@@ -413,8 +424,17 @@ var Parser = (function () {
413
424
this . startBlock ( 'definition' , key ) . endBlock ( ) ;
414
425
break ;
415
426
427
+ // block quote
428
+ case / ^ \s * > / . test ( line ) :
429
+ if ( this . isBlock ( 'quote' ) ) {
430
+ this . setBlock ( key ) ;
431
+ } else {
432
+ this . startBlock ( 'quote' , key ) ;
433
+ }
434
+ break ;
435
+
416
436
// pre
417
- case / ^ { 4 , } / . test ( line ) :
437
+ case / ^ { 4 } / . test ( line ) :
418
438
emptyCount = 0 ;
419
439
if ( this . isBlock ( 'pre' ) ) {
420
440
this . setBlock ( key ) ;
@@ -506,15 +526,6 @@ var Parser = (function () {
506
526
}
507
527
break ;
508
528
509
- // block quote
510
- case / ^ > / . test ( line ) :
511
- if ( this . isBlock ( 'quote' ) ) {
512
- this . setBlock ( key ) ;
513
- } else {
514
- this . startBlock ( 'quote' , key ) ;
515
- }
516
- break ;
517
-
518
529
// hr
519
530
case / ^ [ - \* ] { 3 , } \s * $ / . test ( line ) :
520
531
this . startBlock ( 'hr' , key ) . endBlock ( ) ;
@@ -745,7 +756,7 @@ var Parser = (function () {
745
756
key : 'parseQuote' ,
746
757
value : function parseQuote ( lines ) {
747
758
lines . forEach ( function ( line , key ) {
748
- lines [ key ] = line . replace ( / ^ > ? / , '' ) ;
759
+ lines [ key ] = line . replace ( / ^ \s * > ? / , '' ) ;
749
760
} ) ;
750
761
var str = lines . join ( '\n' ) ;
751
762
return ( / ^ \s * $ / . test ( str ) ? '' : '<blockquote>' + this . parse ( str ) + '</blockquote>'
@@ -894,62 +905,53 @@ var Parser = (function () {
894
905
var ignore = head ? 1 : 0 ;
895
906
896
907
var html = '<table>' ;
897
- var body = null ;
908
+ var body = false ;
898
909
899
- for ( var key in lines ) {
910
+ var _loop = function ( key ) {
900
911
var line = lines [ key ] ;
901
912
if ( key === ignore ) {
902
913
head = false ;
903
914
body = true ;
904
- continue ;
915
+ return ' continue' ;
905
916
}
917
+
918
+ if ( line ) {
919
+ line = line . trim ( ) ;
920
+ }
921
+
906
922
if ( line [ 0 ] === '|' ) {
907
923
line = line . substr ( 1 ) ;
924
+
908
925
if ( line [ line . length - 1 ] === '|' ) {
909
926
line = line . substr ( 0 , - 1 ) ;
910
927
}
911
928
}
912
929
913
- line = line . replace ( / ^ ( \| ? ) ( .* ?) \1$ / , "$2" , line ) ;
914
- var rows = line . split ( '|' ) . map ( function ( item ) {
915
- return item . trim ( ) ;
930
+ var rows = line . split ( '|' ) . map ( function ( row ) {
931
+ if ( row . match ( / ^ \s + $ / ) ) {
932
+ return ' ' ;
933
+ } else {
934
+ return row . trim ( ) ;
935
+ }
916
936
} ) ;
937
+
917
938
var columns = [ ] ;
918
939
var last = - 1 ;
919
940
920
- var _iteratorNormalCompletion5 = true ;
921
- var _didIteratorError5 = false ;
922
- var _iteratorError5 = undefined ;
923
-
924
- try {
925
- for ( var _iterator5 = rows [ Symbol . iterator ] ( ) , _step5 ; ! ( _iteratorNormalCompletion5 = ( _step5 = _iterator5 . next ( ) ) . done ) ; _iteratorNormalCompletion5 = true ) {
926
- var row = _step5 . value ;
927
-
928
- if ( row . length > 0 ) {
929
- last ++ ;
930
- columns [ last ] = [ 1 , row ] ;
931
- } else if ( columns [ last ] ) {
932
- columns [ last ] [ 0 ] ++ ;
933
- }
934
- }
935
- } catch ( err ) {
936
- _didIteratorError5 = true ;
937
- _iteratorError5 = err ;
938
- } finally {
939
- try {
940
- if ( ! _iteratorNormalCompletion5 && _iterator5 [ 'return' ] ) {
941
- _iterator5 [ 'return' ] ( ) ;
942
- }
943
- } finally {
944
- if ( _didIteratorError5 ) {
945
- throw _iteratorError5 ;
946
- }
941
+ rows . forEach ( function ( row ) {
942
+ if ( row . length > 0 ) {
943
+ last ++ ;
944
+ columns [ last ] = [ columns [ last ] ? columns [ last ] [ 0 ] + 1 : 1 , row ] ;
945
+ } else if ( columns [ last ] ) {
946
+ columns [ last ] [ 0 ] ++ ;
947
+ } else {
948
+ columns [ 0 ] = [ 1 , row ] ;
947
949
}
948
- }
950
+ } ) ;
949
951
950
- if ( head ) {
952
+ if ( head === true ) {
951
953
html += '<thead>' ;
952
- } else if ( body ) {
954
+ } else if ( body === true ) {
953
955
html += '<tbody>' ;
954
956
}
955
957
@@ -982,6 +984,12 @@ var Parser = (function () {
982
984
} else if ( body ) {
983
985
body = false ;
984
986
}
987
+ } ;
988
+
989
+ for ( var key in lines ) {
990
+ var _ret = _loop ( key ) ;
991
+
992
+ if ( _ret === 'continue' ) continue ;
985
993
}
986
994
987
995
if ( body !== null ) {
@@ -1074,27 +1082,27 @@ var Parser = (function () {
1074
1082
} , {
1075
1083
key : 'parseHtml' ,
1076
1084
value : function parseHtml ( lines , type ) {
1077
- var _iteratorNormalCompletion6 = true ;
1078
- var _didIteratorError6 = false ;
1079
- var _iteratorError6 = undefined ;
1085
+ var _iteratorNormalCompletion5 = true ;
1086
+ var _didIteratorError5 = false ;
1087
+ var _iteratorError5 = undefined ;
1080
1088
1081
1089
try {
1082
- for ( var _iterator6 = lines [ Symbol . iterator ] ( ) , _step6 ; ! ( _iteratorNormalCompletion6 = ( _step6 = _iterator6 . next ( ) ) . done ) ; _iteratorNormalCompletion6 = true ) {
1083
- var line = _step6 . value ;
1090
+ for ( var _iterator5 = lines [ Symbol . iterator ] ( ) , _step5 ; ! ( _iteratorNormalCompletion5 = ( _step5 = _iterator5 . next ( ) ) . done ) ; _iteratorNormalCompletion5 = true ) {
1091
+ var line = _step5 . value ;
1084
1092
1085
1093
line = this . parseInline ( line , this . specialWhiteList [ type ] ? this . specialWhiteList [ type ] : '' ) ;
1086
1094
}
1087
1095
} catch ( err ) {
1088
- _didIteratorError6 = true ;
1089
- _iteratorError6 = err ;
1096
+ _didIteratorError5 = true ;
1097
+ _iteratorError5 = err ;
1090
1098
} finally {
1091
1099
try {
1092
- if ( ! _iteratorNormalCompletion6 && _iterator6 [ 'return' ] ) {
1093
- _iterator6 [ 'return' ] ( ) ;
1100
+ if ( ! _iteratorNormalCompletion5 && _iterator5 [ 'return' ] ) {
1101
+ _iterator5 [ 'return' ] ( ) ;
1094
1102
}
1095
1103
} finally {
1096
- if ( _didIteratorError6 ) {
1097
- throw _iteratorError6 ;
1104
+ if ( _didIteratorError5 ) {
1105
+ throw _iteratorError5 ;
1098
1106
}
1099
1107
}
1100
1108
}
0 commit comments