dtext_rb 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/dtext_rb.gemspec +3 -3
- data/ext/dtext/dtext.c +2131 -1987
- data/ext/dtext/dtext.rl +45 -50
- data/test/dtext_test.rb +4 -0
- metadata +2 -2
data/ext/dtext/dtext.rl
CHANGED
@@ -143,21 +143,11 @@ pixiv_id = 'pixiv #'i digit+ >mark_a1 %mark_a2;
|
|
143
143
|
pixiv_paged_id = 'pixiv #'i digit+ >mark_a1 %mark_a2 '/p' digit+ >mark_b1 %mark_b2;
|
144
144
|
|
145
145
|
ws = ' ' | '\t';
|
146
|
-
header = 'h' [123456] >mark_a1 %mark_a2 '.' ws*;
|
147
|
-
aliased_expand = '[expand=' (nonbracket+ >mark_a1 %mark_a2) ']';
|
146
|
+
header = 'h'i [123456] >mark_a1 %mark_a2 '.' ws*;
|
147
|
+
aliased_expand = '[expand='i (nonbracket+ >mark_a1 %mark_a2) ']';
|
148
148
|
|
149
149
|
list_item = '*'+ >mark_a1 %mark_a2 ws+ nonnewline+ >mark_b1 %mark_b2;
|
150
150
|
|
151
|
-
textile_link_desc := |*
|
152
|
-
'":' (internal_url | url);
|
153
|
-
*|;
|
154
|
-
|
155
|
-
textile_link := |*
|
156
|
-
'"';
|
157
|
-
|
158
|
-
any;
|
159
|
-
*|;
|
160
|
-
|
161
151
|
inline := |*
|
162
152
|
post_id => {
|
163
153
|
append(sm, true, "<a href=\"/posts/");
|
@@ -409,12 +399,12 @@ inline := |*
|
|
409
399
|
fnext list;
|
410
400
|
};
|
411
401
|
|
412
|
-
'[b]' => {
|
402
|
+
'[b]'i => {
|
413
403
|
dstack_push(sm, &INLINE_B);
|
414
404
|
append(sm, true, "<strong>");
|
415
405
|
};
|
416
406
|
|
417
|
-
'[/b]' => {
|
407
|
+
'[/b]'i => {
|
418
408
|
if (dstack_check(sm, INLINE_B)) {
|
419
409
|
dstack_pop(sm);
|
420
410
|
append(sm, true, "</strong>");
|
@@ -423,12 +413,12 @@ inline := |*
|
|
423
413
|
}
|
424
414
|
};
|
425
415
|
|
426
|
-
'[i]' => {
|
416
|
+
'[i]'i => {
|
427
417
|
dstack_push(sm, &INLINE_I);
|
428
418
|
append(sm, true, "<em>");
|
429
419
|
};
|
430
420
|
|
431
|
-
'[/i]' => {
|
421
|
+
'[/i]'i => {
|
432
422
|
if (dstack_check(sm, INLINE_I)) {
|
433
423
|
dstack_pop(sm);
|
434
424
|
append(sm, true, "</em>");
|
@@ -437,12 +427,12 @@ inline := |*
|
|
437
427
|
}
|
438
428
|
};
|
439
429
|
|
440
|
-
'[s]' => {
|
430
|
+
'[s]'i => {
|
441
431
|
dstack_push(sm, &INLINE_S);
|
442
432
|
append(sm, true, "<s>");
|
443
433
|
};
|
444
434
|
|
445
|
-
'[/s]' => {
|
435
|
+
'[/s]'i => {
|
446
436
|
if (dstack_check(sm, INLINE_S)) {
|
447
437
|
dstack_pop(sm);
|
448
438
|
append(sm, true, "</s>");
|
@@ -451,12 +441,12 @@ inline := |*
|
|
451
441
|
}
|
452
442
|
};
|
453
443
|
|
454
|
-
'[u]' => {
|
444
|
+
'[u]'i => {
|
455
445
|
dstack_push(sm, &INLINE_U);
|
456
446
|
append(sm, true, "<u>");
|
457
447
|
};
|
458
448
|
|
459
|
-
'[/u]' => {
|
449
|
+
'[/u]'i => {
|
460
450
|
if (dstack_check(sm, INLINE_U)) {
|
461
451
|
dstack_pop(sm);
|
462
452
|
append(sm, true, "</u>");
|
@@ -465,12 +455,12 @@ inline := |*
|
|
465
455
|
}
|
466
456
|
};
|
467
457
|
|
468
|
-
'[tn]' => {
|
458
|
+
'[tn]'i => {
|
469
459
|
dstack_push(sm, &INLINE_TN);
|
470
460
|
append(sm, true, "<span class=\"tn\">");
|
471
461
|
};
|
472
462
|
|
473
|
-
'[/tn]' => {
|
463
|
+
'[/tn]'i => {
|
474
464
|
dstack_close_before_block(sm);
|
475
465
|
|
476
466
|
if (dstack_check(sm, BLOCK_TN)) {
|
@@ -492,14 +482,14 @@ inline := |*
|
|
492
482
|
fret;
|
493
483
|
};
|
494
484
|
|
495
|
-
'[quote]' => {
|
485
|
+
'[quote]'i => {
|
496
486
|
g_debug("inline [quote]");
|
497
487
|
dstack_close_before_block(sm);
|
498
488
|
fexec sm->ts;
|
499
489
|
fret;
|
500
490
|
};
|
501
491
|
|
502
|
-
'[/quote]' space* => {
|
492
|
+
'[/quote]'i space* => {
|
503
493
|
g_debug("inline [/quote]");
|
504
494
|
dstack_close_before_block(sm);
|
505
495
|
|
@@ -515,14 +505,14 @@ inline := |*
|
|
515
505
|
}
|
516
506
|
};
|
517
507
|
|
518
|
-
'[spoiler]' => {
|
508
|
+
'[spoiler]'i => {
|
519
509
|
g_debug("inline [spoiler]");
|
520
510
|
g_debug(" push <span>");
|
521
511
|
dstack_push(sm, &INLINE_SPOILER);
|
522
512
|
append(sm, true, "<span class=\"spoiler\">");
|
523
513
|
};
|
524
514
|
|
525
|
-
'[/spoiler]' => {
|
515
|
+
'[/spoiler]'i => {
|
526
516
|
g_debug("inline [/spoiler]");
|
527
517
|
dstack_close_before_block(sm);
|
528
518
|
|
@@ -543,14 +533,14 @@ inline := |*
|
|
543
533
|
}
|
544
534
|
};
|
545
535
|
|
546
|
-
'[expand]' => {
|
536
|
+
'[expand]'i => {
|
547
537
|
g_debug("inline [expand]");
|
548
538
|
dstack_rewind(sm);
|
549
539
|
fexec(sm->p - 7);
|
550
540
|
fret;
|
551
541
|
};
|
552
542
|
|
553
|
-
'[/expand]' => {
|
543
|
+
'[/expand]'i => {
|
554
544
|
dstack_close_before_block(sm);
|
555
545
|
|
556
546
|
if (dstack_check(sm, BLOCK_EXPAND)) {
|
@@ -562,12 +552,12 @@ inline := |*
|
|
562
552
|
}
|
563
553
|
};
|
564
554
|
|
565
|
-
'[nodtext]' => {
|
555
|
+
'[nodtext]'i => {
|
566
556
|
dstack_push(sm, &INLINE_NODTEXT);
|
567
557
|
fcall nodtext;
|
568
558
|
};
|
569
559
|
|
570
|
-
'[/th]' => {
|
560
|
+
'[/th]'i => {
|
571
561
|
if (dstack_check(sm, BLOCK_TH)) {
|
572
562
|
dstack_pop(sm);
|
573
563
|
append_block(sm, "</th>");
|
@@ -577,7 +567,7 @@ inline := |*
|
|
577
567
|
}
|
578
568
|
};
|
579
569
|
|
580
|
-
'[/td]' => {
|
570
|
+
'[/td]'i => {
|
581
571
|
if (dstack_check(sm, BLOCK_TD)) {
|
582
572
|
dstack_pop(sm);
|
583
573
|
append_block(sm, "</td>");
|
@@ -630,7 +620,7 @@ inline := |*
|
|
630
620
|
*|;
|
631
621
|
|
632
622
|
code := |*
|
633
|
-
'[/code]' => {
|
623
|
+
'[/code]'i => {
|
634
624
|
if (dstack_check(sm, BLOCK_CODE)) {
|
635
625
|
dstack_rewind(sm);
|
636
626
|
} else {
|
@@ -650,7 +640,7 @@ code := |*
|
|
650
640
|
*|;
|
651
641
|
|
652
642
|
nodtext := |*
|
653
|
-
'[/nodtext]' => {
|
643
|
+
'[/nodtext]'i => {
|
654
644
|
if (dstack_check(sm, BLOCK_NODTEXT)) {
|
655
645
|
dstack_pop(sm);
|
656
646
|
append_block(sm, "</p>");
|
@@ -674,12 +664,12 @@ nodtext := |*
|
|
674
664
|
*|;
|
675
665
|
|
676
666
|
table := |*
|
677
|
-
'[thead]' => {
|
667
|
+
'[thead]'i => {
|
678
668
|
dstack_push(sm, &BLOCK_THEAD);
|
679
669
|
append_block(sm, "<thead>");
|
680
670
|
};
|
681
671
|
|
682
|
-
'[/thead]' => {
|
672
|
+
'[/thead]'i => {
|
683
673
|
if (dstack_check(sm, BLOCK_THEAD)) {
|
684
674
|
dstack_pop(sm);
|
685
675
|
append_block(sm, "</thead>");
|
@@ -688,12 +678,12 @@ table := |*
|
|
688
678
|
}
|
689
679
|
};
|
690
680
|
|
691
|
-
'[tbody]' => {
|
681
|
+
'[tbody]'i => {
|
692
682
|
dstack_push(sm, &BLOCK_TBODY);
|
693
683
|
append_block(sm, "<tbody>");
|
694
684
|
};
|
695
685
|
|
696
|
-
'[/tbody]' => {
|
686
|
+
'[/tbody]'i => {
|
697
687
|
if (dstack_check(sm, BLOCK_TBODY)) {
|
698
688
|
dstack_pop(sm);
|
699
689
|
append_block(sm, "</tbody>");
|
@@ -702,18 +692,18 @@ table := |*
|
|
702
692
|
}
|
703
693
|
};
|
704
694
|
|
705
|
-
'[th]' => {
|
695
|
+
'[th]'i => {
|
706
696
|
dstack_push(sm, &BLOCK_TH);
|
707
697
|
append_block(sm, "<th>");
|
708
698
|
fcall inline;
|
709
699
|
};
|
710
700
|
|
711
|
-
'[tr]' => {
|
701
|
+
'[tr]'i => {
|
712
702
|
dstack_push(sm, &BLOCK_TR);
|
713
703
|
append_block(sm, "<tr>");
|
714
704
|
};
|
715
705
|
|
716
|
-
'[/tr]' => {
|
706
|
+
'[/tr]'i => {
|
717
707
|
if (dstack_check(sm, BLOCK_TR)) {
|
718
708
|
dstack_pop(sm);
|
719
709
|
append_block(sm, "</tr>");
|
@@ -722,13 +712,13 @@ table := |*
|
|
722
712
|
}
|
723
713
|
};
|
724
714
|
|
725
|
-
'[td]' => {
|
715
|
+
'[td]'i => {
|
726
716
|
dstack_push(sm, &BLOCK_TD);
|
727
717
|
append_block(sm, "<td>");
|
728
718
|
fcall inline;
|
729
719
|
};
|
730
720
|
|
731
|
-
'[/table]' => {
|
721
|
+
'[/table]'i => {
|
732
722
|
if (dstack_check(sm, BLOCK_TABLE)) {
|
733
723
|
dstack_pop(sm);
|
734
724
|
append_block(sm, "</table>");
|
@@ -847,7 +837,7 @@ main := |*
|
|
847
837
|
fcall inline;
|
848
838
|
};
|
849
839
|
|
850
|
-
'[quote]' space* => {
|
840
|
+
'[quote]'i space* => {
|
851
841
|
g_debug("block [quote]");
|
852
842
|
g_debug(" push quote");
|
853
843
|
g_debug(" print <blockquote>");
|
@@ -856,7 +846,7 @@ main := |*
|
|
856
846
|
append_block(sm, "<blockquote>");
|
857
847
|
};
|
858
848
|
|
859
|
-
'[spoiler]' space* => {
|
849
|
+
'[spoiler]'i space* => {
|
860
850
|
g_debug("block [spoiler]");
|
861
851
|
g_debug(" push spoiler");
|
862
852
|
g_debug(" print <div>");
|
@@ -865,7 +855,7 @@ main := |*
|
|
865
855
|
append_block(sm, "<div class=\"spoiler\">");
|
866
856
|
};
|
867
857
|
|
868
|
-
'[/spoiler]' => {
|
858
|
+
'[/spoiler]'i => {
|
869
859
|
g_debug("block [/spoiler]");
|
870
860
|
dstack_close_before_block(sm);
|
871
861
|
if (dstack_check(sm, BLOCK_SPOILER)) {
|
@@ -874,7 +864,7 @@ main := |*
|
|
874
864
|
}
|
875
865
|
};
|
876
866
|
|
877
|
-
'[code]' space* => {
|
867
|
+
'[code]'i space* => {
|
878
868
|
g_debug("block [code]");
|
879
869
|
dstack_close_before_block(sm);
|
880
870
|
dstack_push(sm, &BLOCK_CODE);
|
@@ -882,7 +872,7 @@ main := |*
|
|
882
872
|
fcall code;
|
883
873
|
};
|
884
874
|
|
885
|
-
'[expand]' space* => {
|
875
|
+
'[expand]'i space* => {
|
886
876
|
g_debug("block [expand]");
|
887
877
|
dstack_close_before_block(sm);
|
888
878
|
dstack_push(sm, &BLOCK_EXPAND);
|
@@ -903,7 +893,7 @@ main := |*
|
|
903
893
|
append_block(sm, "<div class=\"expandable-content\">");
|
904
894
|
};
|
905
895
|
|
906
|
-
'[nodtext]' space* => {
|
896
|
+
'[nodtext]'i space* => {
|
907
897
|
g_debug("block [nodtext]");
|
908
898
|
dstack_close_before_block(sm);
|
909
899
|
dstack_push(sm, &BLOCK_NODTEXT);
|
@@ -912,14 +902,14 @@ main := |*
|
|
912
902
|
fcall nodtext;
|
913
903
|
};
|
914
904
|
|
915
|
-
'[table]' => {
|
905
|
+
'[table]'i => {
|
916
906
|
dstack_close_before_block(sm);
|
917
907
|
dstack_push(sm, &BLOCK_TABLE);
|
918
908
|
append_block(sm, "<table class=\"striped\">");
|
919
909
|
fcall table;
|
920
910
|
};
|
921
911
|
|
922
|
-
'[tn]' => {
|
912
|
+
'[tn]'i => {
|
923
913
|
dstack_push(sm, &BLOCK_TN);
|
924
914
|
append_block(sm, "<p class=\"tn\">");
|
925
915
|
fcall inline;
|
@@ -1309,6 +1299,11 @@ static VALUE parse(int argc, VALUE * argv, VALUE self) {
|
|
1309
1299
|
}
|
1310
1300
|
|
1311
1301
|
input = argv[0];
|
1302
|
+
|
1303
|
+
if (NIL_P(input)) {
|
1304
|
+
return Qnil;
|
1305
|
+
}
|
1306
|
+
|
1312
1307
|
input0 = rb_str_dup(input);
|
1313
1308
|
|
1314
1309
|
sm = (StateMachine *)g_malloc0(sizeof(StateMachine));
|
data/test/dtext_test.rb
CHANGED
@@ -37,6 +37,10 @@ class DTextTest < Minitest::Test
|
|
37
37
|
assert_parse("<p>a <a href=\"/wiki_pages/show_or_new?title=spoiler\">spoiler</a> c</p>", "a [[spoiler]] c")
|
38
38
|
end
|
39
39
|
|
40
|
+
def test_wiki_links_nested_b
|
41
|
+
assert_parse("<p><strong>[[</strong>tag<strong>]]</strong></p>", "[b][[[/b]tag[b]]][/b]")
|
42
|
+
end
|
43
|
+
|
40
44
|
def test_spoilers_inline
|
41
45
|
assert_parse("<p>this is <span class=\"spoiler\">an inline spoiler</span>.</p>", "this is [spoiler]an inline spoiler[/spoiler].")
|
42
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dtext_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- r888888888
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|