qiita_marker 0.23.5.1 → 0.23.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/qiita_marker/autolink.c +34 -3
- data/ext/qiita_marker/cmark-gfm_version.h +2 -2
- data/ext/qiita_marker/inlines.c +29 -4
- data/lib/qiita_marker/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0e45d2000570d0cdf3f3c74e8b3f49936438c4183b31ce632eedbedc8bd920d
|
4
|
+
data.tar.gz: 3c732d6f5f94c5c575816a6866d61d1ca44e1557d320dda0215440a626064603
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 150f04fca8e8a325b3d981b67ec12a95fd489aa3eb8b08c0b50e9ac2b21c8a9797ca5b6e6b8bd26f51fc215cc3f9121ce8167c2bc78d4d93ee7020cf72db3e00
|
7
|
+
data.tar.gz: 439012adb32af3319165a4eeec5b19d796410b4aaddd84a0256684da172a1fc2dddf00d5175239cbbf3f9ac7d6020e8ef800afd32bdd8445b296750b0a14ffd7
|
data/ext/qiita_marker/autolink.c
CHANGED
@@ -286,6 +286,22 @@ static cmark_node *match(cmark_syntax_extension *ext, cmark_parser *parser,
|
|
286
286
|
// inline was finished in inlines.c.
|
287
287
|
}
|
288
288
|
|
289
|
+
static bool validate_protocol(char protocol[], uint8_t *data, int rewind) {
|
290
|
+
size_t len = strlen(protocol);
|
291
|
+
|
292
|
+
// Check that the protocol matches
|
293
|
+
for (int i = 1; i <= len; i++) {
|
294
|
+
if (data[-rewind - i] != protocol[len - i]) {
|
295
|
+
return false;
|
296
|
+
}
|
297
|
+
}
|
298
|
+
|
299
|
+
char prev_char = data[-rewind - len - 1];
|
300
|
+
|
301
|
+
// Make sure the character before the protocol is non-alphanumeric
|
302
|
+
return !cmark_isalnum(prev_char);
|
303
|
+
}
|
304
|
+
|
289
305
|
static void postprocess_text(cmark_parser *parser, cmark_node *text, int offset,
|
290
306
|
int depth, cmark_syntax_extension *ext) {
|
291
307
|
// postprocess_text can recurse very deeply if there is a very long line of
|
@@ -296,6 +312,8 @@ static void postprocess_text(cmark_parser *parser, cmark_node *text, int offset,
|
|
296
312
|
uint8_t *data = text->as.literal.data,
|
297
313
|
*at;
|
298
314
|
size_t size = text->as.literal.len;
|
315
|
+
bool auto_mailto = true;
|
316
|
+
bool is_xmpp = false;
|
299
317
|
int rewind, max_rewind,
|
300
318
|
nb = 0, np = 0, ns = 0;
|
301
319
|
|
@@ -322,8 +340,18 @@ static void postprocess_text(cmark_parser *parser, cmark_node *text, int offset,
|
|
322
340
|
if (strchr(".+-_", c) != NULL)
|
323
341
|
continue;
|
324
342
|
|
325
|
-
if (c
|
326
|
-
|
343
|
+
if (strchr(":", c) != NULL) {
|
344
|
+
if (validate_protocol("mailto:", data, rewind)) {
|
345
|
+
auto_mailto = false;
|
346
|
+
continue;
|
347
|
+
}
|
348
|
+
|
349
|
+
if (validate_protocol("xmpp:", data, rewind)) {
|
350
|
+
auto_mailto = false;
|
351
|
+
is_xmpp = true;
|
352
|
+
continue;
|
353
|
+
}
|
354
|
+
}
|
327
355
|
|
328
356
|
break;
|
329
357
|
}
|
@@ -343,6 +371,8 @@ static void postprocess_text(cmark_parser *parser, cmark_node *text, int offset,
|
|
343
371
|
nb++;
|
344
372
|
else if (c == '.' && link_end < size - 1 && cmark_isalnum(data[link_end + 1]))
|
345
373
|
np++;
|
374
|
+
else if (c == '/' && is_xmpp)
|
375
|
+
continue;
|
346
376
|
else if (c != '-' && c != '_')
|
347
377
|
break;
|
348
378
|
}
|
@@ -368,7 +398,8 @@ static void postprocess_text(cmark_parser *parser, cmark_node *text, int offset,
|
|
368
398
|
}
|
369
399
|
cmark_strbuf buf;
|
370
400
|
cmark_strbuf_init(parser->mem, &buf, 10);
|
371
|
-
|
401
|
+
if (auto_mailto)
|
402
|
+
cmark_strbuf_puts(&buf, "mailto:");
|
372
403
|
cmark_strbuf_put(&buf, data - rewind, (bufsize_t)(link_end + rewind));
|
373
404
|
link_node->as.link.url = cmark_chunk_buf_detach(&buf);
|
374
405
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#ifndef CMARK_GFM_VERSION_H
|
2
2
|
#define CMARK_GFM_VERSION_H
|
3
3
|
|
4
|
-
#define CMARK_GFM_VERSION ((0 << 24) | (29 << 16) | (0 << 8) |
|
5
|
-
#define CMARK_GFM_VERSION_STRING "0.29.0.gfm.
|
4
|
+
#define CMARK_GFM_VERSION ((0 << 24) | (29 << 16) | (0 << 8) | 6)
|
5
|
+
#define CMARK_GFM_VERSION_STRING "0.29.0.gfm.6"
|
6
6
|
|
7
7
|
#endif
|
data/ext/qiita_marker/inlines.c
CHANGED
@@ -43,6 +43,8 @@ typedef struct bracket {
|
|
43
43
|
bool image;
|
44
44
|
bool active;
|
45
45
|
bool bracket_after;
|
46
|
+
bool in_bracket_image0;
|
47
|
+
bool in_bracket_image1;
|
46
48
|
} bracket;
|
47
49
|
|
48
50
|
typedef struct subject{
|
@@ -526,6 +528,8 @@ static void push_bracket(subject *subj, bool image, cmark_node *inl_text) {
|
|
526
528
|
bracket *b = (bracket *)subj->mem->calloc(1, sizeof(bracket));
|
527
529
|
if (subj->last_bracket != NULL) {
|
528
530
|
subj->last_bracket->bracket_after = true;
|
531
|
+
b->in_bracket_image0 = subj->last_bracket->in_bracket_image0;
|
532
|
+
b->in_bracket_image1 = subj->last_bracket->in_bracket_image1;
|
529
533
|
}
|
530
534
|
b->image = image;
|
531
535
|
b->active = true;
|
@@ -534,6 +538,11 @@ static void push_bracket(subject *subj, bool image, cmark_node *inl_text) {
|
|
534
538
|
b->previous_delimiter = subj->last_delim;
|
535
539
|
b->position = subj->pos;
|
536
540
|
b->bracket_after = false;
|
541
|
+
if (image) {
|
542
|
+
b->in_bracket_image1 = true;
|
543
|
+
} else {
|
544
|
+
b->in_bracket_image0 = true;
|
545
|
+
}
|
537
546
|
subj->last_bracket = b;
|
538
547
|
}
|
539
548
|
|
@@ -1265,6 +1274,17 @@ match:
|
|
1265
1274
|
}
|
1266
1275
|
opener = opener->previous;
|
1267
1276
|
}
|
1277
|
+
bool in_bracket_image1 = false;
|
1278
|
+
if (opener) {
|
1279
|
+
in_bracket_image1 = opener->in_bracket_image1;
|
1280
|
+
}
|
1281
|
+
bracket *opener2 = subj->last_bracket;
|
1282
|
+
while (opener2 != opener) {
|
1283
|
+
if (opener2->image) {
|
1284
|
+
opener2->in_bracket_image1 = in_bracket_image1;
|
1285
|
+
}
|
1286
|
+
opener2 = opener2->previous;
|
1287
|
+
}
|
1268
1288
|
}
|
1269
1289
|
|
1270
1290
|
return NULL;
|
@@ -1674,10 +1694,15 @@ cmark_chunk *cmark_inline_parser_get_chunk(cmark_inline_parser *parser) {
|
|
1674
1694
|
}
|
1675
1695
|
|
1676
1696
|
int cmark_inline_parser_in_bracket(cmark_inline_parser *parser, int image) {
|
1677
|
-
|
1678
|
-
|
1679
|
-
|
1680
|
-
|
1697
|
+
bracket *b = parser->last_bracket;
|
1698
|
+
if (!b) {
|
1699
|
+
return 0;
|
1700
|
+
}
|
1701
|
+
if (image != 0) {
|
1702
|
+
return b->in_bracket_image1;
|
1703
|
+
} else {
|
1704
|
+
return b->in_bracket_image0;
|
1705
|
+
}
|
1681
1706
|
}
|
1682
1707
|
|
1683
1708
|
void cmark_node_unput(cmark_node *node, int n) {
|
data/lib/qiita_marker/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qiita_marker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.23.
|
4
|
+
version: 0.23.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Qiita Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|