qiita_marker 0.23.5.1 → 0.23.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +0 -2
- 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 +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8eff52452522646e20a33f721b904b9ee9c3599ae5f31b358aee4474efe842b0
|
4
|
+
data.tar.gz: 300862be18f54522f1f5fa9fcc2e8817c8a9154aa57eed186369c2eb9be6c348
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '09373f5d5dc10ddf4b803d0babe51f40508962e1c57ca9ac829b30eac9200719434d0cd689989280ddb9107d842c38555012c7b6bb5b6c36679c3ab4131bfc12'
|
7
|
+
data.tar.gz: f199e29d0e05ab82c28d6a472ea514572d9265dcca5bca8e5c19168724cebc6c8722da0b83af92f8c1afa931d07f057dbb5f5ea5122587485a9d837770f0176f
|
data/README.md
CHANGED
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
[![Build Status](https://github.com/increments/qiita-marker/actions/workflows/test.yml/badge.svg)](https://github.com/increments/qiita-marker/actions/workflows/test.yml) [![Gem Version](https://badge.fury.io/rb/qiita_marker.svg)](https://badge.fury.io/rb/qiita_marker)
|
4
4
|
|
5
|
-
:warning: This library is still in the testing phase. As such, development may be halted.
|
6
|
-
|
7
5
|
Qiita Marker is a Ruby library for Markdown processing, based on [CommonMarker](https://github.com/gjtorikian/commonmarker).
|
8
6
|
It will be a core module of [Qiita Markdown](https://github.com/increments/qiita-markdown) gem and not intended for direct use. If you are looking for Qiita-specified markdown processor, use [Qiita Markdown](https://github.com/increments/qiita-markdown) gem.
|
9
7
|
|
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.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Qiita Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|
@@ -138,7 +138,7 @@ dependencies:
|
|
138
138
|
version: '0'
|
139
139
|
description: A Ruby library that is the core module of the Qiita-specified markdown
|
140
140
|
processor.
|
141
|
-
email:
|
141
|
+
email:
|
142
142
|
executables:
|
143
143
|
- qiita_marker
|
144
144
|
extensions:
|
@@ -241,7 +241,7 @@ licenses:
|
|
241
241
|
- MIT
|
242
242
|
metadata:
|
243
243
|
rubygems_mfa_required: 'true'
|
244
|
-
post_install_message:
|
244
|
+
post_install_message:
|
245
245
|
rdoc_options:
|
246
246
|
- "-x"
|
247
247
|
- ext/qiita_marker/cmark/.*
|
@@ -263,7 +263,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
263
263
|
version: '0'
|
264
264
|
requirements: []
|
265
265
|
rubygems_version: 3.1.4
|
266
|
-
signing_key:
|
266
|
+
signing_key:
|
267
267
|
specification_version: 4
|
268
268
|
summary: Qiita Marker is a Ruby library for Markdown processing, based on CommonMarker.
|
269
269
|
test_files: []
|