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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 343d2a549df9aee75c4bb3890307425d9a82251a2dfe46826afd6f8a8bfcb245
4
- data.tar.gz: bf76c480df59b28e13cace472228b3ca39a60d9ce3406a866125f347c18689c1
3
+ metadata.gz: b0e45d2000570d0cdf3f3c74e8b3f49936438c4183b31ce632eedbedc8bd920d
4
+ data.tar.gz: 3c732d6f5f94c5c575816a6866d61d1ca44e1557d320dda0215440a626064603
5
5
  SHA512:
6
- metadata.gz: 0c8c25dda4cadad88e855c84fa02d42de53c54c87665ca6b5530483a78b57e100b3df9869fe1f451faf16679a5de3ed7c6f630c9568258fdb559fd0d255cb2e2
7
- data.tar.gz: d0927839957a98673181f2235f8a4e16a6ddfc2fa5bb88259d0cb7723bf925472e8214f98aa5ede40a24d3420af48b8b8e877472278efeb683eba80c171edd92
6
+ metadata.gz: 150f04fca8e8a325b3d981b67ec12a95fd489aa3eb8b08c0b50e9ac2b21c8a9797ca5b6e6b8bd26f51fc215cc3f9121ce8167c2bc78d4d93ee7020cf72db3e00
7
+ data.tar.gz: 439012adb32af3319165a4eeec5b19d796410b4aaddd84a0256684da172a1fc2dddf00d5175239cbbf3f9ac7d6020e8ef800afd32bdd8445b296750b0a14ffd7
@@ -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
- ns++;
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
- cmark_strbuf_puts(&buf, "mailto:");
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) | 4)
5
- #define CMARK_GFM_VERSION_STRING "0.29.0.gfm.4"
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
@@ -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
- for (bracket *b = parser->last_bracket; b; b = b->previous)
1678
- if (b->active && b->image == (image != 0))
1679
- return 1;
1680
- return 0;
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) {
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module QiitaMarker
4
- VERSION = "0.23.5.1"
4
+ VERSION = "0.23.6.0"
5
5
  end
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.5.1
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-06-21 00:00:00.000000000 Z
11
+ date: 2022-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print