dtext_rb 1.2.0 → 1.3.0
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 +1394 -1464
- data/ext/dtext/dtext.rl +39 -43
- data/test/dtext_test.rb +10 -0
- metadata +2 -2
data/ext/dtext/dtext.rl
CHANGED
@@ -497,43 +497,6 @@ inline := |*
|
|
497
497
|
}
|
498
498
|
};
|
499
499
|
|
500
|
-
# these are block level elements that should kick us out of the inline
|
501
|
-
# scanner
|
502
|
-
header => {
|
503
|
-
dstack_rewind(sm);
|
504
|
-
fexec sm->a1 - 1;
|
505
|
-
fret;
|
506
|
-
};
|
507
|
-
|
508
|
-
header_with_id => {
|
509
|
-
dstack_rewind(sm);
|
510
|
-
fexec sm->a1 - 1;
|
511
|
-
fret;
|
512
|
-
};
|
513
|
-
|
514
|
-
'[quote]'i => {
|
515
|
-
g_debug("inline [quote]");
|
516
|
-
dstack_close_before_block(sm);
|
517
|
-
fexec sm->ts;
|
518
|
-
fret;
|
519
|
-
};
|
520
|
-
|
521
|
-
'[/quote]'i space* => {
|
522
|
-
g_debug("inline [/quote]");
|
523
|
-
dstack_close_before_block(sm);
|
524
|
-
|
525
|
-
if (dstack_check(sm, BLOCK_LI)) {
|
526
|
-
dstack_close_list(sm);
|
527
|
-
}
|
528
|
-
|
529
|
-
if (dstack_check(sm, BLOCK_QUOTE)) {
|
530
|
-
dstack_rewind(sm);
|
531
|
-
fret;
|
532
|
-
} else {
|
533
|
-
append_block(sm, "[/quote]");
|
534
|
-
}
|
535
|
-
};
|
536
|
-
|
537
500
|
spoilers_open => {
|
538
501
|
g_debug("inline [spoiler]");
|
539
502
|
g_debug(" push <span>");
|
@@ -562,6 +525,38 @@ inline := |*
|
|
562
525
|
}
|
563
526
|
};
|
564
527
|
|
528
|
+
'[nodtext]'i => {
|
529
|
+
dstack_push(sm, &INLINE_NODTEXT);
|
530
|
+
g_debug("push inline nodtext");
|
531
|
+
fcall nodtext;
|
532
|
+
};
|
533
|
+
|
534
|
+
# these are block level elements that should kick us out of the inline
|
535
|
+
# scanner
|
536
|
+
|
537
|
+
'[quote]'i => {
|
538
|
+
g_debug("inline [quote]");
|
539
|
+
dstack_close_before_block(sm);
|
540
|
+
fexec sm->ts;
|
541
|
+
fret;
|
542
|
+
};
|
543
|
+
|
544
|
+
'[/quote]'i space* => {
|
545
|
+
g_debug("inline [/quote]");
|
546
|
+
dstack_close_before_block(sm);
|
547
|
+
|
548
|
+
if (dstack_check(sm, BLOCK_LI)) {
|
549
|
+
dstack_close_list(sm);
|
550
|
+
}
|
551
|
+
|
552
|
+
if (dstack_check(sm, BLOCK_QUOTE)) {
|
553
|
+
dstack_rewind(sm);
|
554
|
+
fret;
|
555
|
+
} else {
|
556
|
+
append_block(sm, "[/quote]");
|
557
|
+
}
|
558
|
+
};
|
559
|
+
|
565
560
|
'[expand]'i => {
|
566
561
|
g_debug("inline [expand]");
|
567
562
|
dstack_rewind(sm);
|
@@ -581,11 +576,6 @@ inline := |*
|
|
581
576
|
}
|
582
577
|
};
|
583
578
|
|
584
|
-
'[nodtext]'i => {
|
585
|
-
dstack_push(sm, &INLINE_NODTEXT);
|
586
|
-
fcall nodtext;
|
587
|
-
};
|
588
|
-
|
589
579
|
'[/th]'i => {
|
590
580
|
if (dstack_check(sm, BLOCK_TH)) {
|
591
581
|
dstack_pop(sm);
|
@@ -670,14 +660,18 @@ code := |*
|
|
670
660
|
|
671
661
|
nodtext := |*
|
672
662
|
'[/nodtext]'i => {
|
673
|
-
if (
|
663
|
+
if (dstack_check2(sm, BLOCK_NODTEXT)) {
|
664
|
+
g_debug("block dstack check");
|
665
|
+
dstack_pop(sm);
|
674
666
|
dstack_pop(sm);
|
675
667
|
append_block(sm, "</p>");
|
676
668
|
fret;
|
677
669
|
} else if (dstack_check(sm, INLINE_NODTEXT)) {
|
670
|
+
g_debug("inline dstack check");
|
678
671
|
dstack_pop(sm);
|
679
672
|
fret;
|
680
673
|
} else {
|
674
|
+
g_debug("else dstack check");
|
681
675
|
append(sm, true, "[/nodtext]");
|
682
676
|
}
|
683
677
|
};
|
@@ -988,6 +982,8 @@ main := |*
|
|
988
982
|
dstack_close_before_block(sm);
|
989
983
|
dstack_push(sm, &BLOCK_NODTEXT);
|
990
984
|
dstack_push(sm, &BLOCK_P);
|
985
|
+
g_debug("push block nodtext");
|
986
|
+
g_debug("push block p");
|
991
987
|
append_block(sm, "<p>");
|
992
988
|
fcall nodtext;
|
993
989
|
};
|
data/test/dtext_test.rb
CHANGED
@@ -97,6 +97,10 @@ class DTextTest < Minitest::Test
|
|
97
97
|
assert_parse("<ul><li>a</li></ul><h1>header</h1><ul><li>list</li></ul>", "* a\n\nh1. header\n* list")
|
98
98
|
end
|
99
99
|
|
100
|
+
def test_inline_headers
|
101
|
+
assert_parse("<p>blah h1. blah</p>", "blah h1. blah")
|
102
|
+
end
|
103
|
+
|
100
104
|
def test_headers_with_ids
|
101
105
|
assert_parse("<h1 id=\"dtext-blah-blah\">header</h1>", "h1#blah-blah. header")
|
102
106
|
end
|
@@ -281,4 +285,10 @@ class DTextTest < Minitest::Test
|
|
281
285
|
assert_parse('<p><a href="/posts?tags=approver:葉月">7893</a></p>', '"7893":[/posts?tags=approver:葉月]')
|
282
286
|
assert_parse('<p><a href="http://danbooru.donmai.us/posts?tags=approver:葉月">http://danbooru.donmai.us/posts?tags=approver:葉月</a></p>', 'http://danbooru.donmai.us/posts?tags=approver:葉月')
|
283
287
|
end
|
288
|
+
|
289
|
+
def test_nodtext
|
290
|
+
assert_parse('<p>[b]not bold[/b]</p><p> <strong>bold</strong></p>', "[nodtext][b]not bold[/b][/nodtext] [b]bold[/b]")
|
291
|
+
assert_parse('<p>[b]not bold[/b]</p><p><strong>hello</strong></p>', "[nodtext][b]not bold[/b][/nodtext]\n\n[b]hello[/b]")
|
292
|
+
assert_parse('<p> [b]not bold[/b]</p>', " [nodtext][b]not bold[/b][/nodtext]")
|
293
|
+
end
|
284
294
|
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.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- r888888888
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|