qiita_marker 0.23.5.0 → 0.23.5.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 15bfc4813af77558d6c0b4ffbb931229e00d558d0c417048b636ce7c27ac31a7
4
- data.tar.gz: af9febe461508838d294f9d2d20dfe896c30c467b82b50b36924040c7287c070
3
+ metadata.gz: 343d2a549df9aee75c4bb3890307425d9a82251a2dfe46826afd6f8a8bfcb245
4
+ data.tar.gz: bf76c480df59b28e13cace472228b3ca39a60d9ce3406a866125f347c18689c1
5
5
  SHA512:
6
- metadata.gz: 2fc608ddea2a044b4c64b9f32e8dbc44cf838213f6c67e9457f36fa303b7223a20c932a261e3f21fac256ceab34d018b9c6d9757ce86eecf250a3aefa585407b
7
- data.tar.gz: 66b65a1652e9a0904423490cb8999de85d21928f169f72965ca2b90bc32cfadda46193662ebdae70dea6bcb5819a349256a24911f53c65d168bd9285db107968
6
+ metadata.gz: 0c8c25dda4cadad88e855c84fa02d42de53c54c87665ca6b5530483a78b57e100b3df9869fe1f451faf16679a5de3ed7c6f630c9568258fdb559fd0d255cb2e2
7
+ data.tar.gz: d0927839957a98673181f2235f8a4e16a6ddfc2fa5bb88259d0cb7723bf925472e8214f98aa5ede40a24d3420af48b8b8e877472278efeb683eba80c171edd92
@@ -22,6 +22,7 @@
22
22
  #include "houdini.h"
23
23
  #include "buffer.h"
24
24
  #include "footnotes.h"
25
+ #include "qfm_custom_block.h"
25
26
 
26
27
  #define CODE_INDENT 4
27
28
  #define TAB_STOP 4
@@ -289,7 +290,9 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) {
289
290
  b->end_column = parser->last_line_length;
290
291
  } else if (S_type(b) == CMARK_NODE_DOCUMENT ||
291
292
  (S_type(b) == CMARK_NODE_CODE_BLOCK && b->as.code.fenced) ||
292
- (S_type(b) == CMARK_NODE_HEADING && b->as.heading.setext)) {
293
+ (S_type(b) == CMARK_NODE_HEADING && b->as.heading.setext) ||
294
+ /* For make the sourcepos of the `qfm_custom_block` accurate */
295
+ (cmark_node_get_type(b) == CMARK_NODE_QFM_CUSTOM_BLOCK)) {
293
296
  b->end_line = parser->line_number;
294
297
  b->end_column = parser->curline.size;
295
298
  if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\n')
@@ -6,14 +6,13 @@
6
6
  #include "houdini.h"
7
7
  #include "qfm_custom_block.h"
8
8
  #include "qfm_scanners.h"
9
- #include "strikethrough.h"
10
9
 
11
10
  cmark_node_type CMARK_NODE_QFM_CUSTOM_BLOCK;
12
11
 
13
12
  typedef struct {
13
+ /* info: Text following the opening custom block fence (optional). This is
14
+ * trimmed of leading and trailing whitespace. */
14
15
  cmark_chunk info;
15
- bool opening;
16
- cmark_strbuf *xml_attr_buff;
17
16
  } node_qfm_custom_block;
18
17
 
19
18
  static void escape_html(cmark_strbuf *dest, const unsigned char *source,
@@ -21,33 +20,6 @@ static void escape_html(cmark_strbuf *dest, const unsigned char *source,
21
20
  houdini_escape_html0(dest, source, length, 0);
22
21
  }
23
22
 
24
- static bool get_qfm_custom_block_opening(cmark_node *node) {
25
- if (node == NULL) {
26
- return false;
27
- }
28
-
29
- cmark_node_type node_type = cmark_node_get_type(node);
30
- if (node_type == CMARK_NODE_QFM_CUSTOM_BLOCK) {
31
- return ((node_qfm_custom_block *)node->as.opaque)->opening;
32
- } else {
33
- return false;
34
- }
35
- }
36
-
37
- static bool set_qfm_custom_block_opening(cmark_node *node, bool opening) {
38
- if (node == NULL) {
39
- return false;
40
- }
41
-
42
- cmark_node_type node_type = cmark_node_get_type(node);
43
- if (node_type == CMARK_NODE_QFM_CUSTOM_BLOCK) {
44
- ((node_qfm_custom_block *)node->as.opaque)->opening = opening;
45
- return true;
46
- } else {
47
- return false;
48
- }
49
- }
50
-
51
23
  static cmark_chunk *get_qfm_custom_block_info(cmark_node *node) {
52
24
  if (node == NULL) {
53
25
  return NULL;
@@ -81,26 +53,21 @@ static void free_node_qfm_custom_block(cmark_mem *mem, void *ptr) {
81
53
  node_qfm_custom_block *cb = (node_qfm_custom_block *)ptr;
82
54
 
83
55
  cmark_chunk_free(mem, &cb->info);
84
- cmark_strbuf_free(cb->xml_attr_buff);
85
56
  mem->free(cb);
86
57
  }
87
58
 
59
+ /* Now, a custom block can contain another custom block, but this behavior is
60
+ * not a specification. */
88
61
  static int matches(cmark_syntax_extension *self, cmark_parser *parser,
89
62
  unsigned char *input, int len,
90
63
  cmark_node *parent_container) {
91
- int res = 0;
92
-
93
- if (get_qfm_custom_block_opening(parent_container)) {
94
- bufsize_t matched = scan_close_qfm_custom_block_fence(
95
- input, len, cmark_parser_get_first_nonspace(parser));
64
+ int res = 1;
65
+ bufsize_t matched = scan_close_qfm_custom_block_fence(
66
+ input, len, cmark_parser_get_first_nonspace(parser));
96
67
 
97
- if (matched > 0) {
98
- set_qfm_custom_block_opening(parent_container, false);
99
- cmark_parser_advance_offset(parser, (char *)input,
100
- len - cmark_parser_get_offset(parser), 0);
101
- } else {
102
- res = 1;
103
- }
68
+ if (matched > 0) {
69
+ cmark_parser_advance_offset(parser, (char *)input, matched, 0);
70
+ res = 0;
104
71
  }
105
72
 
106
73
  return res;
@@ -120,21 +87,34 @@ static cmark_node *try_opening_qfm_custom_block_block(
120
87
 
121
88
  cmark_node *custom_block_node = cmark_parser_add_child(
122
89
  parser, parent_container, CMARK_NODE_QFM_CUSTOM_BLOCK,
123
- parser->first_nonspace_column);
90
+ parser->first_nonspace + 1);
124
91
  custom_block_node->as.opaque = (node_qfm_custom_block *)parser->mem->calloc(
125
92
  1, sizeof(node_qfm_custom_block));
126
93
 
127
94
  cmark_strbuf *info = parser->mem->calloc(1, sizeof(cmark_strbuf));
128
- cmark_strbuf_init(parser->mem, info, len - matched);
129
- cmark_strbuf_put(info, input + matched, len - matched);
130
- cmark_strbuf_trim(info);
95
+ bufsize_t info_startpos = cmark_parser_get_first_nonspace(parser) + matched;
96
+
97
+ /* Length from after opening custom block fence to before newline character.
98
+ */
99
+ bufsize_t info_len = len - info_startpos;
100
+ if (info_len > 0 && input[len - 1] == '\n') {
101
+ info_len -= 1;
102
+ }
103
+ if (info_len > 0 && input[len - 1] == '\r') {
104
+ info_len -= 1;
105
+ }
131
106
 
132
- set_qfm_custom_block_opening(custom_block_node, true);
107
+ cmark_strbuf_init(parser->mem, info, info_len);
108
+ cmark_strbuf_put(info, input + info_startpos, info_len);
109
+ cmark_strbuf_trim(info);
133
110
  set_qfm_custom_block_info(custom_block_node, (char *)info->ptr);
134
111
 
135
112
  cmark_node_set_syntax_extension(custom_block_node, self);
136
113
  cmark_parser_advance_offset(parser, (char *)input,
137
- len - cmark_parser_get_offset(parser), 0);
114
+ cmark_parser_get_first_nonspace(parser) +
115
+ matched + info_len -
116
+ cmark_parser_get_offset(parser),
117
+ 0);
138
118
 
139
119
  return custom_block_node;
140
120
  }
@@ -155,12 +135,14 @@ static const char *get_type_string(cmark_syntax_extension *self,
155
135
 
156
136
  static int can_contain(cmark_syntax_extension *self, cmark_node *node,
157
137
  cmark_node_type child_type) {
138
+ /* Can contain all block nodes */
158
139
  cmark_node_type node_type = cmark_node_get_type(node);
159
140
 
160
141
  return node_type == CMARK_NODE_QFM_CUSTOM_BLOCK;
161
142
  }
162
143
 
163
144
  static int contains_inlines(cmark_syntax_extension *self, cmark_node *node) {
145
+ /* Can contain all inline nodes */
164
146
  cmark_node_type node_type = cmark_node_get_type(node);
165
147
 
166
148
  return node_type == CMARK_NODE_QFM_CUSTOM_BLOCK;
@@ -210,9 +192,8 @@ static const char *xml_attr(cmark_syntax_extension *self, cmark_node *node) {
210
192
  if (node_type == CMARK_NODE_QFM_CUSTOM_BLOCK) {
211
193
  cmark_chunk *info = get_qfm_custom_block_info(node);
212
194
  cmark_mem *mem = node->content.mem;
213
-
214
195
  cmark_strbuf *xml_attr_buff = mem->calloc(1, sizeof(cmark_strbuf));
215
- ((node_qfm_custom_block *)node->as.opaque)->xml_attr_buff = xml_attr_buff;
196
+
216
197
  cmark_strbuf_init(
217
198
  mem, xml_attr_buff,
218
199
  17 + info->len); // `17` is length of ` data-metadata="` and `"`.
@@ -220,7 +201,7 @@ static const char *xml_attr(cmark_syntax_extension *self, cmark_node *node) {
220
201
  cmark_strbuf_puts(xml_attr_buff, (char *)info->data);
221
202
  cmark_strbuf_putc(xml_attr_buff, '"');
222
203
 
223
- return (char *)xml_attr_buff->ptr;
204
+ return (char *)cmark_strbuf_detach(xml_attr_buff);
224
205
  }
225
206
 
226
207
  return NULL;
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module QiitaMarker
4
- VERSION = "0.23.5.0"
4
+ VERSION = "0.23.5.1"
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.0
4
+ version: 0.23.5.1
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-01 00:00:00.000000000 Z
11
+ date: 2022-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print