greenmat 3.2.0.0 → 3.2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|