qiita_marker 0.23.5.1 → 0.23.6.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/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
|