redcarpet 3.5.1 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +479 -0
- data/CONTRIBUTING.md +33 -0
- data/README.markdown +2 -2
- data/ext/redcarpet/html.c +18 -1
- data/ext/redcarpet/html_block_names.txt +44 -0
- data/ext/redcarpet/html_blocks.h +30 -35
- data/ext/redcarpet/markdown.c +51 -20
- data/ext/redcarpet/rc_markdown.c +1 -0
- data/ext/redcarpet/rc_render.c +22 -3
- data/lib/redcarpet.rb +1 -1
- data/redcarpet.gemspec +9 -21
- metadata +14 -41
- data/test/benchmark.rb +0 -24
- data/test/custom_render_test.rb +0 -67
- data/test/fixtures/benchmark.md +0 -232
- data/test/html5_test.rb +0 -82
- data/test/html_render_test.rb +0 -274
- data/test/html_toc_render_test.rb +0 -112
- data/test/markdown_test.rb +0 -416
- data/test/pathological_inputs_test.rb +0 -34
- data/test/redcarpet_bin_test.rb +0 -80
- data/test/redcarpet_compat_test.rb +0 -38
- data/test/safe_render_test.rb +0 -35
- data/test/smarty_html_test.rb +0 -51
- data/test/smarty_pants_test.rb +0 -58
- data/test/stripdown_render_test.rb +0 -69
- data/test/test_helper.rb +0 -47
data/ext/redcarpet/html_blocks.h
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
/* C code produced by gperf version 3.
|
1
|
+
/* ANSI-C code produced by gperf version 3.1 */
|
2
2
|
/* Command-line: gperf -N find_block_tag -H hash_block_tag -C -c -E --ignore-case html_block_names.txt */
|
3
|
-
/* See https://git.io/vPLqa for the list of recognized elements */
|
4
3
|
/* Computed positions: -k'1-2' */
|
5
4
|
|
6
5
|
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
|
@@ -27,7 +26,7 @@
|
|
27
26
|
&& ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
|
28
27
|
&& ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
|
29
28
|
/* The character set is not based on ISO-646. */
|
30
|
-
error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-
|
29
|
+
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
|
31
30
|
#endif
|
32
31
|
|
33
32
|
/* maximum key range = 72, duplicates = 0 */
|
@@ -60,10 +59,7 @@ static unsigned char gperf_downcase[256] =
|
|
60
59
|
#ifndef GPERF_CASE_STRNCMP
|
61
60
|
#define GPERF_CASE_STRNCMP 1
|
62
61
|
static int
|
63
|
-
gperf_case_strncmp (s1, s2, n)
|
64
|
-
register const char *s1;
|
65
|
-
register const char *s2;
|
66
|
-
register unsigned int n;
|
62
|
+
gperf_case_strncmp (register const char *s1, register const char *s2, register size_t n)
|
67
63
|
{
|
68
64
|
for (; n > 0;)
|
69
65
|
{
|
@@ -88,9 +84,7 @@ inline
|
|
88
84
|
#endif
|
89
85
|
#endif
|
90
86
|
static unsigned int
|
91
|
-
hash_block_tag (str, len)
|
92
|
-
register const char *str;
|
93
|
-
register unsigned int len;
|
87
|
+
hash_block_tag (register const char *str, register size_t len)
|
94
88
|
{
|
95
89
|
static const unsigned char asso_values[] =
|
96
90
|
{
|
@@ -99,13 +93,13 @@ hash_block_tag (str, len)
|
|
99
93
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
100
94
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
101
95
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
102
|
-
|
103
|
-
73, 73, 73, 73, 73, 20, 15,
|
104
|
-
0,
|
96
|
+
16, 55, 50, 45, 40, 5, 73, 73, 73, 73,
|
97
|
+
73, 73, 73, 73, 73, 20, 15, 25, 0, 45,
|
98
|
+
0, 30, 10, 0, 5, 73, 73, 0, 15, 35,
|
105
99
|
0, 73, 73, 15, 20, 10, 10, 73, 73, 73,
|
106
|
-
73, 73, 73, 73, 73, 73, 73, 20, 15,
|
107
|
-
0,
|
108
|
-
15,
|
100
|
+
73, 73, 73, 73, 73, 73, 73, 20, 15, 25,
|
101
|
+
0, 45, 0, 30, 10, 0, 5, 73, 73, 0,
|
102
|
+
15, 35, 0, 73, 73, 15, 20, 10, 10, 73,
|
109
103
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
110
104
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
111
105
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
@@ -136,13 +130,11 @@ hash_block_tag (str, len)
|
|
136
130
|
}
|
137
131
|
|
138
132
|
const char *
|
139
|
-
find_block_tag (str, len)
|
140
|
-
register const char *str;
|
141
|
-
register unsigned int len;
|
133
|
+
find_block_tag (register const char *str, register size_t len)
|
142
134
|
{
|
143
135
|
enum
|
144
136
|
{
|
145
|
-
TOTAL_KEYWORDS =
|
137
|
+
TOTAL_KEYWORDS = 44,
|
146
138
|
MIN_WORD_LENGTH = 1,
|
147
139
|
MAX_WORD_LENGTH = 10,
|
148
140
|
MIN_HASH_VALUE = 1,
|
@@ -167,7 +159,7 @@ find_block_tag (str, len)
|
|
167
159
|
"",
|
168
160
|
"figcaption",
|
169
161
|
"header",
|
170
|
-
"
|
162
|
+
"h6",
|
171
163
|
"pre",
|
172
164
|
"math",
|
173
165
|
"video",
|
@@ -178,42 +170,45 @@ find_block_tag (str, len)
|
|
178
170
|
"blockquote",
|
179
171
|
"hgroup",
|
180
172
|
"hr",
|
181
|
-
"
|
173
|
+
"h1",
|
182
174
|
"",
|
183
175
|
"style",
|
184
|
-
"
|
176
|
+
"center",
|
185
177
|
"summary",
|
186
178
|
"nav",
|
187
179
|
"",
|
188
180
|
"audio",
|
189
|
-
"canvas",
|
190
|
-
"dd",
|
191
|
-
"h1",
|
192
|
-
"abbr",
|
193
|
-
"table",
|
194
181
|
"iframe",
|
182
|
+
"ol",
|
183
|
+
"ins",
|
184
|
+
"",
|
185
|
+
"table",
|
186
|
+
"",
|
195
187
|
"article",
|
196
188
|
"", "",
|
197
189
|
"aside",
|
190
|
+
"canvas",
|
191
|
+
"dd",
|
198
192
|
"",
|
199
|
-
"
|
193
|
+
"abbr",
|
194
|
+
"",
|
195
|
+
"output",
|
196
|
+
"h5",
|
200
197
|
"", "",
|
201
198
|
"tfoot",
|
202
199
|
"",
|
203
|
-
"h5",
|
204
|
-
"", "", "", "",
|
205
200
|
"h4",
|
206
201
|
"", "", "", "",
|
207
|
-
"address",
|
208
|
-
"", "", "", "",
|
209
202
|
"h3",
|
210
203
|
"", "", "", "",
|
211
|
-
"h2"
|
204
|
+
"h2",
|
205
|
+
"", "", "", "",
|
206
|
+
"address"
|
212
207
|
};
|
213
208
|
|
214
209
|
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
|
215
210
|
{
|
216
|
-
unsigned int key = hash_block_tag (str, len);
|
211
|
+
register unsigned int key = hash_block_tag (str, len);
|
217
212
|
|
218
213
|
if (key <= MAX_HASH_VALUE)
|
219
214
|
{
|
data/ext/redcarpet/markdown.c
CHANGED
@@ -1353,13 +1353,13 @@ is_hrule(uint8_t *data, size_t size)
|
|
1353
1353
|
return n >= 3;
|
1354
1354
|
}
|
1355
1355
|
|
1356
|
-
/* check if a line begins with a code fence
|
1357
|
-
|
1356
|
+
/* check if a line begins with a code fence matching optional opendelim;
|
1357
|
+
return the width of the code fence and store the delimiter string */
|
1358
1358
|
static size_t
|
1359
|
-
prefix_codefence(uint8_t *data, size_t size)
|
1359
|
+
prefix_codefence(uint8_t *data, size_t size, struct buf *delim, struct buf *opendelim)
|
1360
1360
|
{
|
1361
|
-
size_t i = 0, n = 0;
|
1362
|
-
uint8_t c;
|
1361
|
+
size_t i = 0, n = 0, min_n = 3;
|
1362
|
+
uint8_t c, *delim_start;
|
1363
1363
|
|
1364
1364
|
/* skipping initial spaces */
|
1365
1365
|
if (size < 3) return 0;
|
@@ -1367,31 +1367,46 @@ prefix_codefence(uint8_t *data, size_t size)
|
|
1367
1367
|
if (data[1] == ' ') { i++;
|
1368
1368
|
if (data[2] == ' ') { i++; } } }
|
1369
1369
|
|
1370
|
+
delim_start = data + i;
|
1371
|
+
|
1370
1372
|
/* looking at the hrule uint8_t */
|
1371
1373
|
if (i + 2 >= size || !(data[i] == '~' || data[i] == '`'))
|
1372
1374
|
return 0;
|
1373
1375
|
|
1374
|
-
|
1376
|
+
if (opendelim && opendelim->size) {
|
1377
|
+
c = opendelim->data[0];
|
1378
|
+
min_n = opendelim->size;
|
1379
|
+
} else {
|
1380
|
+
c = data[i];
|
1381
|
+
}
|
1375
1382
|
|
1376
1383
|
/* the whole line must be the uint8_t or whitespace */
|
1377
1384
|
while (i < size && data[i] == c) {
|
1378
1385
|
n++; i++;
|
1379
1386
|
}
|
1380
1387
|
|
1381
|
-
if (n <
|
1388
|
+
if (n < min_n)
|
1382
1389
|
return 0;
|
1383
1390
|
|
1391
|
+
if (delim) {
|
1392
|
+
delim->data = delim_start;
|
1393
|
+
delim->size = n;
|
1394
|
+
}
|
1395
|
+
|
1384
1396
|
return i;
|
1385
1397
|
}
|
1386
1398
|
|
1387
1399
|
/* check if a line is a code fence; return its size if it is */
|
1400
|
+
/* checking is done in fence-pair matching mode if curdelim is provided */
|
1388
1401
|
static size_t
|
1389
|
-
is_codefence(uint8_t *data, size_t size, struct buf *syntax)
|
1402
|
+
is_codefence(uint8_t *data, size_t size, struct buf *curdelim, struct buf *syntax)
|
1390
1403
|
{
|
1391
1404
|
size_t i = 0, syn_len = 0;
|
1392
1405
|
uint8_t *syn_start;
|
1406
|
+
struct buf delim = { 0, 0, 0, 0 };
|
1407
|
+
|
1408
|
+
i = prefix_codefence(data, size, &delim, curdelim);
|
1393
1409
|
|
1394
|
-
i = prefix_codefence(data, size);
|
1395
1410
|
if (i == 0)
|
1396
1411
|
return 0;
|
1397
1412
|
|
@@ -1426,10 +1441,9 @@ is_codefence(uint8_t *data, size_t size, struct buf *syntax)
|
|
1426
1441
|
}
|
1427
1442
|
}
|
1428
1443
|
|
1429
|
-
|
1430
|
-
|
1431
|
-
|
1432
|
-
}
|
1444
|
+
/* info string must not be present at the closing fence */
|
1445
|
+
if (curdelim && curdelim->size && syn_len)
|
1446
|
+
return 0;
|
1433
1447
|
|
1434
1448
|
while (i < size && data[i] != '\n') {
|
1435
1449
|
if (!_isspace(data[i]))
|
@@ -1438,6 +1452,21 @@ is_codefence(uint8_t *data, size_t size, struct buf *syntax)
|
|
1438
1452
|
i++;
|
1439
1453
|
}
|
1440
1454
|
|
1455
|
+
if (curdelim) {
|
1456
|
+
if (curdelim->size) {
|
1457
|
+
curdelim->data = NULL;
|
1458
|
+
curdelim->size = 0;
|
1459
|
+
} else {
|
1460
|
+
curdelim->data = delim.data;
|
1461
|
+
curdelim->size = delim.size;
|
1462
|
+
}
|
1463
|
+
}
|
1464
|
+
|
1465
|
+
if (syntax) {
|
1466
|
+
syntax->data = syn_start;
|
1467
|
+
syntax->size = syn_len;
|
1468
|
+
}
|
1469
|
+
|
1441
1470
|
return i + 1;
|
1442
1471
|
}
|
1443
1472
|
|
@@ -1673,7 +1702,7 @@ parse_paragraph(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t
|
|
1673
1702
|
|
1674
1703
|
/* see if a code fence starts here */
|
1675
1704
|
if ((rndr->ext_flags & MKDEXT_FENCED_CODE) != 0 &&
|
1676
|
-
is_codefence(data + i, size - i, NULL) != 0) {
|
1705
|
+
is_codefence(data + i, size - i, NULL, NULL) != 0) {
|
1677
1706
|
end = i;
|
1678
1707
|
break;
|
1679
1708
|
}
|
@@ -1739,19 +1768,19 @@ parse_fencedcode(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t
|
|
1739
1768
|
{
|
1740
1769
|
size_t beg, end;
|
1741
1770
|
struct buf *work = 0;
|
1771
|
+
struct buf delim = { 0, 0, 0, 0 };
|
1742
1772
|
struct buf lang = { 0, 0, 0, 0 };
|
1743
1773
|
|
1744
|
-
beg = is_codefence(data, size, &lang);
|
1774
|
+
beg = is_codefence(data, size, &delim, &lang);
|
1745
1775
|
if (beg == 0) return 0;
|
1746
1776
|
|
1747
1777
|
work = rndr_newbuf(rndr, BUFFER_BLOCK);
|
1748
1778
|
|
1749
1779
|
while (beg < size) {
|
1750
1780
|
size_t fence_end;
|
1751
|
-
struct buf fence_trail = { 0, 0, 0, 0 };
|
1752
1781
|
|
1753
|
-
fence_end = is_codefence(data + beg, size - beg, &
|
1754
|
-
if (fence_end != 0
|
1782
|
+
fence_end = is_codefence(data + beg, size - beg, &delim, NULL);
|
1783
|
+
if (fence_end != 0) {
|
1755
1784
|
beg += fence_end;
|
1756
1785
|
break;
|
1757
1786
|
}
|
@@ -1827,6 +1856,7 @@ parse_listitem(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t s
|
|
1827
1856
|
struct buf *work = 0, *inter = 0;
|
1828
1857
|
size_t beg = 0, end, pre, sublist = 0, orgpre = 0, i;
|
1829
1858
|
int in_empty = 0, has_inside_empty = 0, in_fence = 0;
|
1859
|
+
struct buf fence_delim = { 0, 0, 0, 0 };
|
1830
1860
|
|
1831
1861
|
/* keeping track of the first indentation prefix */
|
1832
1862
|
while (orgpre < 3 && orgpre < size && data[orgpre] == ' ')
|
@@ -1876,7 +1906,7 @@ parse_listitem(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t s
|
|
1876
1906
|
pre = i;
|
1877
1907
|
|
1878
1908
|
if (rndr->ext_flags & MKDEXT_FENCED_CODE) {
|
1879
|
-
if (is_codefence(data + beg + i, end - beg - i, NULL) != 0)
|
1909
|
+
if (is_codefence(data + beg + i, end - beg - i, &fence_delim, NULL) != 0)
|
1880
1910
|
in_fence = !in_fence;
|
1881
1911
|
}
|
1882
1912
|
|
@@ -2804,6 +2834,7 @@ sd_markdown_render(struct buf *ob, const uint8_t *document, size_t doc_size, str
|
|
2804
2834
|
struct buf *text;
|
2805
2835
|
size_t beg, end;
|
2806
2836
|
int in_fence = 0;
|
2837
|
+
struct buf fence_delim = { 0, 0, 0, 0 };
|
2807
2838
|
|
2808
2839
|
text = bufnew(64);
|
2809
2840
|
if (!text)
|
@@ -2833,7 +2864,7 @@ sd_markdown_render(struct buf *ob, const uint8_t *document, size_t doc_size, str
|
|
2833
2864
|
beg += 3;
|
2834
2865
|
|
2835
2866
|
while (beg < doc_size) { /* iterating over lines */
|
2836
|
-
if (codefences_enabled && (is_codefence(document + beg, doc_size - beg, NULL) != 0))
|
2867
|
+
if (codefences_enabled && (is_codefence(document + beg, doc_size - beg, &fence_delim, NULL) != 0))
|
2837
2868
|
in_fence = !in_fence;
|
2838
2869
|
|
2839
2870
|
if (!in_fence && footnotes_enabled && is_footnote(document, beg, doc_size, &end, &md->footnotes_found))
|
data/ext/redcarpet/rc_markdown.c
CHANGED
@@ -176,6 +176,7 @@ void Init_redcarpet()
|
|
176
176
|
rb_mRedcarpet = rb_define_module("Redcarpet");
|
177
177
|
|
178
178
|
rb_cMarkdown = rb_define_class_under(rb_mRedcarpet, "Markdown", rb_cObject);
|
179
|
+
rb_undef_alloc_func(rb_cMarkdown);
|
179
180
|
rb_define_singleton_method(rb_cMarkdown, "new", rb_redcarpet_md__new, -1);
|
180
181
|
rb_define_method(rb_cMarkdown, "render", rb_redcarpet_md_render, 1);
|
181
182
|
|
data/ext/redcarpet/rc_render.c
CHANGED
@@ -113,9 +113,10 @@ rndr_tablerow(struct buf *ob, const struct buf *text, void *opaque)
|
|
113
113
|
static void
|
114
114
|
rndr_tablecell(struct buf *ob, const struct buf *text, int align, void *opaque)
|
115
115
|
{
|
116
|
-
VALUE rb_align;
|
116
|
+
VALUE rb_align, rb_header;
|
117
|
+
VALUE rb_callback, rb_callback_arity;
|
117
118
|
|
118
|
-
switch (align) {
|
119
|
+
switch (align & MKD_TABLE_ALIGNMASK) {
|
119
120
|
case MKD_TABLE_ALIGN_L:
|
120
121
|
rb_align = CSTR2SYM("left");
|
121
122
|
break;
|
@@ -133,7 +134,25 @@ rndr_tablecell(struct buf *ob, const struct buf *text, int align, void *opaque)
|
|
133
134
|
break;
|
134
135
|
}
|
135
136
|
|
136
|
-
|
137
|
+
if (align & MKD_TABLE_HEADER) {
|
138
|
+
rb_header = Qtrue;
|
139
|
+
} else {
|
140
|
+
rb_header = Qfalse;
|
141
|
+
}
|
142
|
+
|
143
|
+
struct redcarpet_renderopt *opt = opaque;
|
144
|
+
|
145
|
+
rb_callback = rb_funcall(opt->self, rb_intern("method"), 1, CSTR2SYM("table_cell"));
|
146
|
+
|
147
|
+
rb_callback_arity = rb_funcall(rb_callback, rb_intern("arity"), 0);
|
148
|
+
|
149
|
+
/* For backward compatibility, let's ensure that the erasure with
|
150
|
+
only two parameters is still supported. */
|
151
|
+
if (FIX2INT(rb_callback_arity) == 3) {
|
152
|
+
BLOCK_CALLBACK("table_cell", 3, buf2str(text), rb_align, rb_header);
|
153
|
+
} else {
|
154
|
+
BLOCK_CALLBACK("table_cell", 2, buf2str(text), rb_align);
|
155
|
+
}
|
137
156
|
}
|
138
157
|
|
139
158
|
static void
|
data/lib/redcarpet.rb
CHANGED
data/redcarpet.gemspec
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
Gem::Specification.new do |s|
|
3
3
|
s.name = 'redcarpet'
|
4
|
-
s.version = '3.
|
4
|
+
s.version = '3.6.0'
|
5
5
|
s.summary = "Markdown that smells nice"
|
6
6
|
s.description = 'A fast, safe and extensible Markdown to (X)HTML parser'
|
7
|
-
s.date = '
|
7
|
+
s.date = '2023-01-29'
|
8
8
|
s.email = 'vicent@github.com'
|
9
|
-
s.homepage = '
|
9
|
+
s.homepage = 'https://github.com/vmg/redcarpet'
|
10
10
|
s.authors = ["Natacha Porté", "Vicent Martí"]
|
11
11
|
s.license = 'MIT'
|
12
12
|
s.required_ruby_version = '>= 1.9.2'
|
13
13
|
# = MANIFEST =
|
14
14
|
s.files = %w[
|
15
|
+
CHANGELOG.md
|
16
|
+
CONTRIBUTING.md
|
15
17
|
COPYING
|
16
18
|
Gemfile
|
17
19
|
README.markdown
|
@@ -27,6 +29,7 @@ Gem::Specification.new do |s|
|
|
27
29
|
ext/redcarpet/houdini_html_e.c
|
28
30
|
ext/redcarpet/html.c
|
29
31
|
ext/redcarpet/html.h
|
32
|
+
ext/redcarpet/html_block_names.txt
|
30
33
|
ext/redcarpet/html_blocks.h
|
31
34
|
ext/redcarpet/html_smartypants.c
|
32
35
|
ext/redcarpet/markdown.c
|
@@ -42,21 +45,6 @@ Gem::Specification.new do |s|
|
|
42
45
|
lib/redcarpet/render_man.rb
|
43
46
|
lib/redcarpet/render_strip.rb
|
44
47
|
redcarpet.gemspec
|
45
|
-
test/benchmark.rb
|
46
|
-
test/custom_render_test.rb
|
47
|
-
test/fixtures/benchmark.md
|
48
|
-
test/html5_test.rb
|
49
|
-
test/html_render_test.rb
|
50
|
-
test/html_toc_render_test.rb
|
51
|
-
test/markdown_test.rb
|
52
|
-
test/pathological_inputs_test.rb
|
53
|
-
test/redcarpet_bin_test.rb
|
54
|
-
test/redcarpet_compat_test.rb
|
55
|
-
test/safe_render_test.rb
|
56
|
-
test/smarty_html_test.rb
|
57
|
-
test/smarty_pants_test.rb
|
58
|
-
test/stripdown_render_test.rb
|
59
|
-
test/test_helper.rb
|
60
48
|
]
|
61
49
|
# = MANIFEST =
|
62
50
|
s.test_files = s.files.grep(%r{^test/})
|
@@ -65,7 +53,7 @@ Gem::Specification.new do |s|
|
|
65
53
|
s.executables = ["redcarpet"]
|
66
54
|
s.require_paths = ["lib"]
|
67
55
|
|
68
|
-
s.add_development_dependency "rake", "~>
|
69
|
-
s.add_development_dependency "rake-compiler", "~> 1.
|
70
|
-
s.add_development_dependency "test-unit", "~> 3.
|
56
|
+
s.add_development_dependency "rake", "~> 13"
|
57
|
+
s.add_development_dependency "rake-compiler", "~> 1.1"
|
58
|
+
s.add_development_dependency "test-unit", "~> 3.5"
|
71
59
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redcarpet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.6.0
|
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:
|
12
|
+
date: 2023-01-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -17,42 +17,42 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: '13'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: '13'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rake-compiler
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 1.
|
34
|
+
version: '1.1'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 1.
|
41
|
+
version: '1.1'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: test-unit
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 3.
|
48
|
+
version: '3.5'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 3.
|
55
|
+
version: '3.5'
|
56
56
|
description: A fast, safe and extensible Markdown to (X)HTML parser
|
57
57
|
email: vicent@github.com
|
58
58
|
executables:
|
@@ -62,6 +62,8 @@ extensions:
|
|
62
62
|
extra_rdoc_files:
|
63
63
|
- COPYING
|
64
64
|
files:
|
65
|
+
- CHANGELOG.md
|
66
|
+
- CONTRIBUTING.md
|
65
67
|
- COPYING
|
66
68
|
- Gemfile
|
67
69
|
- README.markdown
|
@@ -77,6 +79,7 @@ files:
|
|
77
79
|
- ext/redcarpet/houdini_html_e.c
|
78
80
|
- ext/redcarpet/html.c
|
79
81
|
- ext/redcarpet/html.h
|
82
|
+
- ext/redcarpet/html_block_names.txt
|
80
83
|
- ext/redcarpet/html_blocks.h
|
81
84
|
- ext/redcarpet/html_smartypants.c
|
82
85
|
- ext/redcarpet/markdown.c
|
@@ -92,22 +95,7 @@ files:
|
|
92
95
|
- lib/redcarpet/render_man.rb
|
93
96
|
- lib/redcarpet/render_strip.rb
|
94
97
|
- redcarpet.gemspec
|
95
|
-
|
96
|
-
- test/custom_render_test.rb
|
97
|
-
- test/fixtures/benchmark.md
|
98
|
-
- test/html5_test.rb
|
99
|
-
- test/html_render_test.rb
|
100
|
-
- test/html_toc_render_test.rb
|
101
|
-
- test/markdown_test.rb
|
102
|
-
- test/pathological_inputs_test.rb
|
103
|
-
- test/redcarpet_bin_test.rb
|
104
|
-
- test/redcarpet_compat_test.rb
|
105
|
-
- test/safe_render_test.rb
|
106
|
-
- test/smarty_html_test.rb
|
107
|
-
- test/smarty_pants_test.rb
|
108
|
-
- test/stripdown_render_test.rb
|
109
|
-
- test/test_helper.rb
|
110
|
-
homepage: http://github.com/vmg/redcarpet
|
98
|
+
homepage: https://github.com/vmg/redcarpet
|
111
99
|
licenses:
|
112
100
|
- MIT
|
113
101
|
metadata: {}
|
@@ -126,23 +114,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
114
|
- !ruby/object:Gem::Version
|
127
115
|
version: '0'
|
128
116
|
requirements: []
|
129
|
-
rubygems_version: 3.
|
117
|
+
rubygems_version: 3.3.11
|
130
118
|
signing_key:
|
131
119
|
specification_version: 4
|
132
120
|
summary: Markdown that smells nice
|
133
|
-
test_files:
|
134
|
-
- test/benchmark.rb
|
135
|
-
- test/custom_render_test.rb
|
136
|
-
- test/fixtures/benchmark.md
|
137
|
-
- test/html5_test.rb
|
138
|
-
- test/html_render_test.rb
|
139
|
-
- test/html_toc_render_test.rb
|
140
|
-
- test/markdown_test.rb
|
141
|
-
- test/pathological_inputs_test.rb
|
142
|
-
- test/redcarpet_bin_test.rb
|
143
|
-
- test/redcarpet_compat_test.rb
|
144
|
-
- test/safe_render_test.rb
|
145
|
-
- test/smarty_html_test.rb
|
146
|
-
- test/smarty_pants_test.rb
|
147
|
-
- test/stripdown_render_test.rb
|
148
|
-
- test/test_helper.rb
|
121
|
+
test_files: []
|
data/test/benchmark.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# coding: UTF-8
|
2
|
-
# Thanks Kramdown for the inspiration!
|
3
|
-
require 'benchmark/ips'
|
4
|
-
|
5
|
-
require 'redcarpet'
|
6
|
-
require 'bluecloth'
|
7
|
-
require 'kramdown'
|
8
|
-
|
9
|
-
markdown = File.read(File.join(File.dirname(__FILE__), "fixtures/benchmark.md"))
|
10
|
-
|
11
|
-
# Let's bench!
|
12
|
-
Benchmark.ips do |bench|
|
13
|
-
bench.report("Redcarpet") do
|
14
|
-
Redcarpet::Markdown.new(Redcarpet::Render::HTML).render(markdown)
|
15
|
-
end
|
16
|
-
|
17
|
-
bench.report("BlueCloth") do
|
18
|
-
BlueCloth.new(markdown).to_html
|
19
|
-
end
|
20
|
-
|
21
|
-
bench.report("Kramdown") do
|
22
|
-
Kramdown::Document.new(markdown).to_html
|
23
|
-
end
|
24
|
-
end
|
data/test/custom_render_test.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
# coding: UTF-8
|
2
|
-
require 'test_helper'
|
3
|
-
|
4
|
-
class CustomRenderTest < Redcarpet::TestCase
|
5
|
-
class SimpleRender < Redcarpet::Render::HTML
|
6
|
-
def emphasis(text)
|
7
|
-
if @options[:no_intra_emphasis]
|
8
|
-
return %(<em class="no_intra_emphasis">#{text}</em>)
|
9
|
-
end
|
10
|
-
|
11
|
-
%(<em class="cool">#{text}</em>)
|
12
|
-
end
|
13
|
-
|
14
|
-
def header(text, level)
|
15
|
-
"My little poney" if @options[:with_toc_data]
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_simple_overload
|
20
|
-
md = Redcarpet::Markdown.new(SimpleRender)
|
21
|
-
assert_equal "<p>This is <em class=\"cool\">just</em> a test</p>\n",
|
22
|
-
md.render("This is *just* a test")
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_renderer_options
|
26
|
-
parser = Redcarpet::Markdown.new(SimpleRender.new(with_toc_data: true))
|
27
|
-
output = parser.render("# A title")
|
28
|
-
|
29
|
-
assert_match "My little poney", output
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_markdown_options
|
33
|
-
parser = Redcarpet::Markdown.new(SimpleRender, no_intra_emphasis: true)
|
34
|
-
output = parser.render("*foo*")
|
35
|
-
|
36
|
-
assert_match "no_intra_emphasis", output
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_original_options_hash_is_not_mutated
|
40
|
-
options = { with_toc_data: true }
|
41
|
-
render = SimpleRender.new(options)
|
42
|
-
parser = Redcarpet::Markdown.new(render, tables: true)
|
43
|
-
|
44
|
-
computed_options = render.instance_variable_get(:"@options")
|
45
|
-
|
46
|
-
refute_equal computed_options.object_id, options.object_id
|
47
|
-
end
|
48
|
-
|
49
|
-
class NilPreprocessRenderer < Redcarpet::Render::HTML
|
50
|
-
def preprocess(fulldoc)
|
51
|
-
nil
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_preprocess_returning_nil
|
56
|
-
md = Redcarpet::Markdown.new(NilPreprocessRenderer)
|
57
|
-
assert_equal(nil,md.render("Anything"))
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_base_render_without_quote_callback
|
61
|
-
# Regression test for https://github.com/vmg/redcarpet/issues/569
|
62
|
-
render = Class.new(Redcarpet::Render::Base)
|
63
|
-
parser = Redcarpet::Markdown.new render.new, quote: true
|
64
|
-
|
65
|
-
assert_equal "", parser.render(%(a "quote"))
|
66
|
-
end
|
67
|
-
end
|