greenmat 3.2.0.0 → 3.2.0.1
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/ext/greenmat/gm_markdown.c +3 -0
- data/ext/greenmat/markdown.c +58 -0
- data/ext/greenmat/markdown.h +2 -1
- data/greenmat.gemspec +1 -1
- data/lib/greenmat.rb +1 -2
- data/test/markdown_test.rb +6 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99e020834997f3b59f385346f3667d1ca32fdbac
|
4
|
+
data.tar.gz: 17d1921ed9bb728470eb37ea620c067ffdda1fc6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b112616170f2816923c42db5bdda43a9d727976164ce49d0c1fc76980c6405ed7c437eca3f4c103fab72b6f38199e6580eeeb7c063bcb4367f635232718ae93
|
7
|
+
data.tar.gz: 7850871f158ca6527c602d8bf69896f5b59cb606057615893565c9ce2f7507ec6814e3de20135325b419162fd67aa6754e2c1f570b70a13083f44a878f1348a9
|
data/ext/greenmat/gm_markdown.c
CHANGED
@@ -68,6 +68,9 @@ static void rb_greenmat_md_flags(VALUE hash, unsigned int *enabled_extensions_p)
|
|
68
68
|
if (rb_hash_lookup(hash, CSTR2SYM("footnotes")) == Qtrue)
|
69
69
|
extensions |= MKDEXT_FOOTNOTES;
|
70
70
|
|
71
|
+
if (rb_hash_lookup(hash, CSTR2SYM("no_mention_emphasis")) == Qtrue)
|
72
|
+
extensions |= MKDEXT_NO_MENTION_EMPHASIS;
|
73
|
+
|
71
74
|
*enabled_extensions_p = extensions;
|
72
75
|
}
|
73
76
|
|
data/ext/greenmat/markdown.c
CHANGED
@@ -342,6 +342,12 @@ _isalnum(int c)
|
|
342
342
|
return isalnum(c) && c < 0x7f;
|
343
343
|
}
|
344
344
|
|
345
|
+
static inline int
|
346
|
+
is_wordchar(int c)
|
347
|
+
{
|
348
|
+
return _isalnum(c) || c == '_' || c == '-';
|
349
|
+
}
|
350
|
+
|
345
351
|
/*
|
346
352
|
* Check whether a char is a Markdown space.
|
347
353
|
|
@@ -587,6 +593,38 @@ find_emph_char(uint8_t *data, size_t size, uint8_t c)
|
|
587
593
|
return 0;
|
588
594
|
}
|
589
595
|
|
596
|
+
static int
|
597
|
+
is_part_of_mention(uint8_t *data, size_t offset)
|
598
|
+
{
|
599
|
+
int i;
|
600
|
+
int lookbehind_limit = (int)-offset;
|
601
|
+
uint8_t character;
|
602
|
+
|
603
|
+
for (i = 0; i >= lookbehind_limit; i--) {
|
604
|
+
character = data[i];
|
605
|
+
|
606
|
+
if (is_wordchar(character)) {
|
607
|
+
// Continue lookbehind.
|
608
|
+
} else if (character == '@') {
|
609
|
+
if (i == offset) {
|
610
|
+
// The "@" is at beginning of the text. (e.g. "@foo")
|
611
|
+
return 1;
|
612
|
+
} else {
|
613
|
+
// Check if the previous character of the "@" is alphanumeric or not.
|
614
|
+
// " @foo" and "あ@foo" are mentions.
|
615
|
+
// "a@foo" is not a mention.
|
616
|
+
uint8_t prev_character = data[i - 1];
|
617
|
+
return !_isalnum(prev_character);
|
618
|
+
}
|
619
|
+
} else {
|
620
|
+
// Found non-mention character, so this is not a mention.
|
621
|
+
return 0;
|
622
|
+
}
|
623
|
+
}
|
624
|
+
|
625
|
+
return 0;
|
626
|
+
}
|
627
|
+
|
590
628
|
/* parse_emph1 • parsing single emphase */
|
591
629
|
/* closed by a symbol not preceded by whitespace and not followed by symbol */
|
592
630
|
static size_t
|
@@ -612,6 +650,11 @@ parse_emph1(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t size
|
|
612
650
|
continue;
|
613
651
|
}
|
614
652
|
|
653
|
+
if (rndr->ext_flags & MKDEXT_NO_MENTION_EMPHASIS) {
|
654
|
+
if (is_part_of_mention(data + i, i))
|
655
|
+
continue;
|
656
|
+
}
|
657
|
+
|
615
658
|
work = rndr_newbuf(rndr, BUFFER_SPAN);
|
616
659
|
parse_inline(work, rndr, data, i);
|
617
660
|
|
@@ -642,6 +685,11 @@ parse_emph2(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t size
|
|
642
685
|
i += len;
|
643
686
|
|
644
687
|
if (i + 1 < size && data[i] == c && data[i + 1] == c && i && !_isspace(data[i - 1])) {
|
688
|
+
if (rndr->ext_flags & MKDEXT_NO_MENTION_EMPHASIS) {
|
689
|
+
if (is_part_of_mention(data + i, i))
|
690
|
+
continue;
|
691
|
+
}
|
692
|
+
|
645
693
|
work = rndr_newbuf(rndr, BUFFER_SPAN);
|
646
694
|
parse_inline(work, rndr, data, i);
|
647
695
|
|
@@ -678,6 +726,11 @@ parse_emph3(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t size
|
|
678
726
|
continue;
|
679
727
|
|
680
728
|
if (i + 2 < size && data[i + 1] == c && data[i + 2] == c && rndr->cb.triple_emphasis) {
|
729
|
+
if (rndr->ext_flags & MKDEXT_NO_MENTION_EMPHASIS) {
|
730
|
+
if (is_part_of_mention(data + i, i))
|
731
|
+
continue;
|
732
|
+
}
|
733
|
+
|
681
734
|
/* triple symbol found */
|
682
735
|
struct buf *work = rndr_newbuf(rndr, BUFFER_SPAN);
|
683
736
|
|
@@ -714,6 +767,11 @@ char_emphasis(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t of
|
|
714
767
|
return 0;
|
715
768
|
}
|
716
769
|
|
770
|
+
if (rndr->ext_flags & MKDEXT_NO_MENTION_EMPHASIS) {
|
771
|
+
if (is_part_of_mention(data, offset))
|
772
|
+
return 0;
|
773
|
+
}
|
774
|
+
|
717
775
|
if (size > 2 && data[1] != c) {
|
718
776
|
/* whitespace cannot follow an opening emphasis;
|
719
777
|
* strikethrough only takes two characters '~~' */
|
data/ext/greenmat/markdown.h
CHANGED
@@ -58,7 +58,8 @@ enum mkd_extensions {
|
|
58
58
|
MKDEXT_DISABLE_INDENTED_CODE = (1 << 9),
|
59
59
|
MKDEXT_HIGHLIGHT = (1 << 10),
|
60
60
|
MKDEXT_FOOTNOTES = (1 << 11),
|
61
|
-
MKDEXT_QUOTE = (1 << 12)
|
61
|
+
MKDEXT_QUOTE = (1 << 12),
|
62
|
+
MKDEXT_NO_MENTION_EMPHASIS = (1 << 13)
|
62
63
|
};
|
63
64
|
|
64
65
|
/* sd_callbacks - functions for rendering parsed data */
|
data/greenmat.gemspec
CHANGED
data/lib/greenmat.rb
CHANGED
data/test/markdown_test.rb
CHANGED
@@ -4,13 +4,18 @@ require 'test_helper'
|
|
4
4
|
class MarkdownTest < Greenmat::TestCase
|
5
5
|
|
6
6
|
def setup
|
7
|
-
@markdown = Greenmat::Markdown.new(Greenmat::Render::HTML)
|
7
|
+
@markdown = Greenmat::Markdown.new(Greenmat::Render::HTML, greenmat_options)
|
8
8
|
end
|
9
9
|
|
10
10
|
def render_with(flags, text)
|
11
|
+
flags = greenmat_options.merge(flags)
|
11
12
|
Greenmat::Markdown.new(Greenmat::Render::HTML, flags).render(text)
|
12
13
|
end
|
13
14
|
|
15
|
+
def greenmat_options
|
16
|
+
{ no_mention_emphasis: true }
|
17
|
+
end
|
18
|
+
|
14
19
|
def test_that_simple_one_liner_goes_to_html
|
15
20
|
assert_respond_to @markdown, :render
|
16
21
|
assert_equal "<p>Hello World.</p>\n", @markdown.render("Hello World.")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: greenmat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.0.
|
4
|
+
version: 3.2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Natacha Porté
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-03-
|
12
|
+
date: 2015-03-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake-compiler
|