qiita_marker 0.23.2.2 → 0.23.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +19 -17
- data/Rakefile +57 -56
- data/bin/qiita_marker +2 -7
- data/ext/qiita_marker/blocks.c +4 -1
- data/ext/qiita_marker/cmark-gfm_version.h +2 -2
- data/ext/qiita_marker/qfm_custom_block.c +33 -52
- data/ext/qiita_marker/qiita_marker.c +30 -44
- data/ext/qiita_marker/scanners.c +2438 -2450
- data/ext/qiita_marker/table.c +28 -2
- data/lib/qiita_marker/config.rb +3 -3
- data/lib/qiita_marker/node/inspect.rb +8 -18
- data/lib/qiita_marker/node.rb +6 -6
- data/lib/qiita_marker/renderer/html_renderer.rb +38 -38
- data/lib/qiita_marker/renderer.rb +5 -5
- data/lib/qiita_marker/version.rb +1 -1
- data/lib/qiita_marker.rb +9 -11
- data/qiita_marker.gemspec +27 -29
- metadata +3 -63
- data/test/benchmark.rb +0 -32
- data/test/fixtures/curly.md +0 -1
- data/test/fixtures/dingus.md +0 -10
- data/test/fixtures/strong.md +0 -1
- data/test/fixtures/table.md +0 -10
- data/test/test_attributes.rb +0 -24
- data/test/test_basics.rb +0 -35
- data/test/test_commands.rb +0 -72
- data/test/test_commonmark.rb +0 -36
- data/test/test_doc.rb +0 -130
- data/test/test_encoding.rb +0 -23
- data/test/test_extensions.rb +0 -116
- data/test/test_footnotes.rb +0 -60
- data/test/test_gc.rb +0 -47
- data/test/test_helper.rb +0 -71
- data/test/test_linebreaks.rb +0 -15
- data/test/test_maliciousness.rb +0 -262
- data/test/test_node.rb +0 -89
- data/test/test_options.rb +0 -37
- data/test/test_pathological_inputs.rb +0 -94
- data/test/test_plaintext.rb +0 -46
- data/test/test_qfm_autolink_class_name.rb +0 -62
- data/test/test_qfm_code_data_metadata.rb +0 -41
- data/test/test_qfm_custom_block.rb +0 -39
- data/test/test_qfm_mention_no_emphasis.rb +0 -60
- data/test/test_renderer.rb +0 -47
- data/test/test_smartpunct.rb +0 -27
- data/test/test_spec.rb +0 -30
- data/test/test_tasklists.rb +0 -43
- data/test/test_xml.rb +0 -107
data/ext/qiita_marker/table.c
CHANGED
@@ -129,6 +129,7 @@ static table_row *row_from_string(cmark_syntax_extension *self,
|
|
129
129
|
bufsize_t cell_matched = 1, pipe_matched = 1, offset;
|
130
130
|
int expect_more_cells = 1;
|
131
131
|
int row_end_offset = 0;
|
132
|
+
int int_overflow_abort = 0;
|
132
133
|
|
133
134
|
row = (table_row *)parser->mem->calloc(1, sizeof(table_row));
|
134
135
|
row->n_columns = 0;
|
@@ -161,6 +162,12 @@ static table_row *row_from_string(cmark_syntax_extension *self,
|
|
161
162
|
++cell->internal_offset;
|
162
163
|
}
|
163
164
|
|
165
|
+
// make sure we never wrap row->n_columns
|
166
|
+
// offset will != len and our exit will clean up as intended
|
167
|
+
if (row->n_columns == UINT16_MAX) {
|
168
|
+
int_overflow_abort = 1;
|
169
|
+
break;
|
170
|
+
}
|
164
171
|
row->n_columns += 1;
|
165
172
|
row->cells = cmark_llist_append(parser->mem, row->cells, cell);
|
166
173
|
}
|
@@ -194,7 +201,7 @@ static table_row *row_from_string(cmark_syntax_extension *self,
|
|
194
201
|
}
|
195
202
|
}
|
196
203
|
|
197
|
-
if (offset != len || row->n_columns == 0) {
|
204
|
+
if (offset != len || row->n_columns == 0 || int_overflow_abort) {
|
198
205
|
free_table_row(parser->mem, row);
|
199
206
|
row = NULL;
|
200
207
|
}
|
@@ -241,6 +248,11 @@ static cmark_node *try_opening_table_header(cmark_syntax_extension *self,
|
|
241
248
|
marker_row = row_from_string(self, parser,
|
242
249
|
input + cmark_parser_get_first_nonspace(parser),
|
243
250
|
len - cmark_parser_get_first_nonspace(parser));
|
251
|
+
// assert may be optimized out, don't rely on it for security boundaries
|
252
|
+
if (!marker_row) {
|
253
|
+
return parent_container;
|
254
|
+
}
|
255
|
+
|
244
256
|
assert(marker_row);
|
245
257
|
|
246
258
|
cmark_arena_push();
|
@@ -264,6 +276,12 @@ static cmark_node *try_opening_table_header(cmark_syntax_extension *self,
|
|
264
276
|
len - cmark_parser_get_first_nonspace(parser));
|
265
277
|
header_row = row_from_string(self, parser, (unsigned char *)parent_string,
|
266
278
|
(int)strlen(parent_string));
|
279
|
+
// row_from_string can return NULL, add additional check to ensure n_columns match
|
280
|
+
if (!marker_row || !header_row || header_row->n_columns != marker_row->n_columns) {
|
281
|
+
free_table_row(parser->mem, marker_row);
|
282
|
+
free_table_row(parser->mem, header_row);
|
283
|
+
return parent_container;
|
284
|
+
}
|
267
285
|
}
|
268
286
|
|
269
287
|
if (!cmark_node_set_type(parent_container, CMARK_NODE_TABLE)) {
|
@@ -281,8 +299,10 @@ static cmark_node *try_opening_table_header(cmark_syntax_extension *self,
|
|
281
299
|
parent_container->as.opaque = parser->mem->calloc(1, sizeof(node_table));
|
282
300
|
set_n_table_columns(parent_container, header_row->n_columns);
|
283
301
|
|
302
|
+
// allocate alignments based on marker_row->n_columns
|
303
|
+
// since we populate the alignments array based on marker_row->cells
|
284
304
|
uint8_t *alignments =
|
285
|
-
(uint8_t *)parser->mem->calloc(
|
305
|
+
(uint8_t *)parser->mem->calloc(marker_row->n_columns, sizeof(uint8_t));
|
286
306
|
cmark_llist *it = marker_row->cells;
|
287
307
|
for (i = 0; it; it = it->next, ++i) {
|
288
308
|
node_cell *node = (node_cell *)it->data;
|
@@ -351,6 +371,12 @@ static cmark_node *try_opening_table_row(cmark_syntax_extension *self,
|
|
351
371
|
row = row_from_string(self, parser, input + cmark_parser_get_first_nonspace(parser),
|
352
372
|
len - cmark_parser_get_first_nonspace(parser));
|
353
373
|
|
374
|
+
if (!row) {
|
375
|
+
// clean up the dangling node
|
376
|
+
cmark_node_free(table_row_block);
|
377
|
+
return NULL;
|
378
|
+
}
|
379
|
+
|
354
380
|
{
|
355
381
|
cmark_llist *tmp;
|
356
382
|
int i, table_columns = get_n_table_columns(parent_container);
|
data/lib/qiita_marker/config.rb
CHANGED
@@ -15,7 +15,7 @@ module QiitaMarker
|
|
15
15
|
FOOTNOTES: (1 << 13),
|
16
16
|
STRIKETHROUGH_DOUBLE_TILDE: (1 << 14),
|
17
17
|
MENTION_NO_EMPHASIS: (1 << 26),
|
18
|
-
AUTOLINK_CLASS_NAME: (1 << 27)
|
18
|
+
AUTOLINK_CLASS_NAME: (1 << 27),
|
19
19
|
}.freeze,
|
20
20
|
render: {
|
21
21
|
DEFAULT: 0,
|
@@ -33,9 +33,9 @@ module QiitaMarker
|
|
33
33
|
FULL_INFO_STRING: (1 << 16),
|
34
34
|
CODE_DATA_METADATA: (1 << 25),
|
35
35
|
MENTION_NO_EMPHASIS: (1 << 26),
|
36
|
-
AUTOLINK_CLASS_NAME: (1 << 27)
|
36
|
+
AUTOLINK_CLASS_NAME: (1 << 27),
|
37
37
|
}.freeze,
|
38
|
-
format:
|
38
|
+
format: [:html, :xml, :commonmark, :plaintext].freeze,
|
39
39
|
}.freeze
|
40
40
|
|
41
41
|
def self.process_options(option, type)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "pp"
|
4
4
|
|
5
5
|
module QiitaMarker
|
6
6
|
class Node
|
@@ -8,33 +8,23 @@ module QiitaMarker
|
|
8
8
|
PP_INDENT_SIZE = 2
|
9
9
|
|
10
10
|
def inspect
|
11
|
-
PP.pp(self, +
|
11
|
+
PP.pp(self, +"", Float::INFINITY)
|
12
12
|
end
|
13
13
|
|
14
14
|
# @param printer [PrettyPrint] pp
|
15
15
|
def pretty_print(printer)
|
16
|
-
printer.group(PP_INDENT_SIZE, "#<#{self.class}(#{type}):",
|
16
|
+
printer.group(PP_INDENT_SIZE, "#<#{self.class}(#{type}):", ">") do
|
17
17
|
printer.breakable
|
18
18
|
|
19
|
-
attrs =
|
20
|
-
sourcepos
|
21
|
-
string_content
|
22
|
-
url
|
23
|
-
title
|
24
|
-
header_level
|
25
|
-
list_type
|
26
|
-
list_start
|
27
|
-
list_tight
|
28
|
-
fence_info
|
29
|
-
].map do |name|
|
19
|
+
attrs = [:sourcepos, :string_content, :url, :title, :header_level, :list_type, :list_start, :list_tight, :fence_info].map do |name|
|
30
20
|
[name, __send__(name)]
|
31
21
|
rescue NodeError
|
32
22
|
nil
|
33
23
|
end.compact
|
34
24
|
|
35
25
|
printer.seplist(attrs) do |name, value|
|
36
|
-
printer.text
|
37
|
-
printer.pp
|
26
|
+
printer.text("#{name}=")
|
27
|
+
printer.pp(value)
|
38
28
|
end
|
39
29
|
|
40
30
|
if first_child
|
@@ -46,8 +36,8 @@ module QiitaMarker
|
|
46
36
|
children << node
|
47
37
|
node = node.next
|
48
38
|
end
|
49
|
-
printer.text
|
50
|
-
printer.pp
|
39
|
+
printer.text("children=")
|
40
|
+
printer.pp(children)
|
51
41
|
end
|
52
42
|
end
|
53
43
|
end
|
data/lib/qiita_marker/node.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "qiita_marker/node/inspect"
|
4
4
|
|
5
5
|
module QiitaMarker
|
6
6
|
class Node
|
@@ -27,7 +27,7 @@ module QiitaMarker
|
|
27
27
|
# Returns a {String}.
|
28
28
|
def to_html(options = :DEFAULT, extensions = [])
|
29
29
|
opts = Config.process_options(options, :render)
|
30
|
-
_render_html(opts, extensions).force_encoding(
|
30
|
+
_render_html(opts, extensions).force_encoding("utf-8")
|
31
31
|
end
|
32
32
|
|
33
33
|
# Public: Convert the node to an XML string.
|
@@ -37,7 +37,7 @@ module QiitaMarker
|
|
37
37
|
# Returns a {String}.
|
38
38
|
def to_xml(options = :DEFAULT)
|
39
39
|
opts = Config.process_options(options, :render)
|
40
|
-
_render_xml(opts).force_encoding(
|
40
|
+
_render_xml(opts).force_encoding("utf-8")
|
41
41
|
end
|
42
42
|
|
43
43
|
# Public: Convert the node to a CommonMark string.
|
@@ -48,7 +48,7 @@ module QiitaMarker
|
|
48
48
|
# Returns a {String}.
|
49
49
|
def to_commonmark(options = :DEFAULT, width = 120)
|
50
50
|
opts = Config.process_options(options, :render)
|
51
|
-
_render_commonmark(opts, width).force_encoding(
|
51
|
+
_render_commonmark(opts, width).force_encoding("utf-8")
|
52
52
|
end
|
53
53
|
|
54
54
|
# Public: Convert the node to a plain text string.
|
@@ -59,7 +59,7 @@ module QiitaMarker
|
|
59
59
|
# Returns a {String}.
|
60
60
|
def to_plaintext(options = :DEFAULT, width = 120)
|
61
61
|
opts = Config.process_options(options, :render)
|
62
|
-
_render_plaintext(opts, width).force_encoding(
|
62
|
+
_render_plaintext(opts, width).force_encoding("utf-8")
|
63
63
|
end
|
64
64
|
|
65
65
|
# Public: Iterate over the children (if any) of the current pointer.
|
@@ -76,7 +76,7 @@ module QiitaMarker
|
|
76
76
|
|
77
77
|
# Deprecated: Please use `each` instead
|
78
78
|
def each_child(&block)
|
79
|
-
warn
|
79
|
+
warn("[DEPRECATION] `each_child` is deprecated. Please use `each` instead.")
|
80
80
|
each(&block)
|
81
81
|
end
|
82
82
|
end
|
@@ -9,8 +9,8 @@ module QiitaMarker
|
|
9
9
|
|
10
10
|
def header(node)
|
11
11
|
block do
|
12
|
-
out(
|
13
|
-
|
12
|
+
out("<h", node.header_level, "#{sourcepos(node)}>", :children,
|
13
|
+
"</h", node.header_level, ">")
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -19,10 +19,10 @@ module QiitaMarker
|
|
19
19
|
out(:children)
|
20
20
|
else
|
21
21
|
block do
|
22
|
-
container("<p#{sourcepos(node)}>",
|
22
|
+
container("<p#{sourcepos(node)}>", "</p>") do
|
23
23
|
out(:children)
|
24
24
|
if node.parent.type == :footnote_definition && node.next.nil?
|
25
|
-
out(
|
25
|
+
out(" ")
|
26
26
|
out_footnote_backref
|
27
27
|
end
|
28
28
|
end
|
@@ -36,16 +36,16 @@ module QiitaMarker
|
|
36
36
|
|
37
37
|
block do
|
38
38
|
if node.list_type == :bullet_list
|
39
|
-
container("<ul#{sourcepos(node)}>\n",
|
39
|
+
container("<ul#{sourcepos(node)}>\n", "</ul>") do
|
40
40
|
out(:children)
|
41
41
|
end
|
42
42
|
else
|
43
43
|
start = if node.list_start == 1
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
container(start,
|
44
|
+
"<ol#{sourcepos(node)}>\n"
|
45
|
+
else
|
46
|
+
"<ol start=\"#{node.list_start}\"#{sourcepos(node)}>\n"
|
47
|
+
end
|
48
|
+
container(start, "</ol>") do
|
49
49
|
out(:children)
|
50
50
|
end
|
51
51
|
end
|
@@ -57,26 +57,26 @@ module QiitaMarker
|
|
57
57
|
def list_item(node)
|
58
58
|
block do
|
59
59
|
tasklist_data = tasklist(node)
|
60
|
-
container("<li#{sourcepos(node)}#{tasklist_data}>#{
|
60
|
+
container("<li#{sourcepos(node)}#{tasklist_data}>#{" " if tasklist?(node)}", "</li>") do
|
61
61
|
out(:children)
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
def tasklist(node)
|
67
|
-
return
|
67
|
+
return "" unless tasklist?(node)
|
68
68
|
|
69
69
|
state = if checked?(node)
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
70
|
+
'checked="" disabled=""'
|
71
|
+
else
|
72
|
+
'disabled=""'
|
73
|
+
end
|
74
74
|
"><input type=\"checkbox\" #{state} /"
|
75
75
|
end
|
76
76
|
|
77
77
|
def blockquote(node)
|
78
78
|
block do
|
79
|
-
container("<blockquote#{sourcepos(node)}>\n",
|
79
|
+
container("<blockquote#{sourcepos(node)}>\n", "</blockquote>") do
|
80
80
|
out(:children)
|
81
81
|
end
|
82
82
|
end
|
@@ -93,21 +93,21 @@ module QiitaMarker
|
|
93
93
|
if option_enabled?(:GITHUB_PRE_LANG)
|
94
94
|
out("<pre#{sourcepos(node)}")
|
95
95
|
out(' lang="', node.fence_info.split(/\s+/)[0], '"') if node.fence_info && !node.fence_info.empty?
|
96
|
-
out(
|
96
|
+
out("><code>")
|
97
97
|
elsif option_enabled?(:CODE_DATA_METADATA)
|
98
98
|
out("<pre#{sourcepos(node)}><code")
|
99
99
|
out(' data-metadata="', node.fence_info, '"') if node.fence_info && !node.fence_info.empty?
|
100
|
-
out(
|
100
|
+
out(">")
|
101
101
|
else
|
102
102
|
out("<pre#{sourcepos(node)}><code")
|
103
103
|
if node.fence_info && !node.fence_info.empty?
|
104
104
|
out(' class="language-', node.fence_info.split(/\s+/)[0], '">')
|
105
105
|
else
|
106
|
-
out(
|
106
|
+
out(">")
|
107
107
|
end
|
108
108
|
end
|
109
109
|
out(escape_html(node.string_content))
|
110
|
-
out(
|
110
|
+
out("</code></pre>")
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
@@ -116,7 +116,7 @@ module QiitaMarker
|
|
116
116
|
if option_enabled?(:UNSAFE)
|
117
117
|
out(tagfilter(node.string_content))
|
118
118
|
else
|
119
|
-
out(
|
119
|
+
out("<!-- raw HTML omitted -->")
|
120
120
|
end
|
121
121
|
end
|
122
122
|
end
|
@@ -125,22 +125,22 @@ module QiitaMarker
|
|
125
125
|
if option_enabled?(:UNSAFE)
|
126
126
|
out(tagfilter(node.string_content))
|
127
127
|
else
|
128
|
-
out(
|
128
|
+
out("<!-- raw HTML omitted -->")
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
132
|
def emph(_)
|
133
|
-
out(
|
133
|
+
out("<em>", :children, "</em>")
|
134
134
|
end
|
135
135
|
|
136
136
|
def strong(_)
|
137
|
-
out(
|
137
|
+
out("<strong>", :children, "</strong>")
|
138
138
|
end
|
139
139
|
|
140
140
|
def link(node)
|
141
|
-
out('<a href="', node.url.nil? ?
|
141
|
+
out('<a href="', node.url.nil? ? "" : escape_href(node.url), '"')
|
142
142
|
out(' title="', escape_html(node.title), '"') if node.title && !node.title.empty?
|
143
|
-
out(
|
143
|
+
out(">", :children, "</a>")
|
144
144
|
end
|
145
145
|
|
146
146
|
def image(node)
|
@@ -149,7 +149,7 @@ module QiitaMarker
|
|
149
149
|
out(' alt="', :children, '"')
|
150
150
|
end
|
151
151
|
out(' title="', escape_html(node.title), '"') if node.title && !node.title.empty?
|
152
|
-
out(
|
152
|
+
out(" />")
|
153
153
|
end
|
154
154
|
|
155
155
|
def text(node)
|
@@ -157,9 +157,9 @@ module QiitaMarker
|
|
157
157
|
end
|
158
158
|
|
159
159
|
def code(node)
|
160
|
-
out(
|
160
|
+
out("<code>")
|
161
161
|
out(escape_html(node.string_content))
|
162
|
-
out(
|
162
|
+
out("</code>")
|
163
163
|
end
|
164
164
|
|
165
165
|
def linebreak(_node)
|
@@ -170,7 +170,7 @@ module QiitaMarker
|
|
170
170
|
if option_enabled?(:HARDBREAKS)
|
171
171
|
out("<br />\n")
|
172
172
|
elsif option_enabled?(:NOBREAKS)
|
173
|
-
out(
|
173
|
+
out(" ")
|
174
174
|
else
|
175
175
|
out("\n")
|
176
176
|
end
|
@@ -203,17 +203,17 @@ module QiitaMarker
|
|
203
203
|
|
204
204
|
def table_cell(node)
|
205
205
|
align = case @alignments[@column_index]
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
206
|
+
when :left then ' align="left"'
|
207
|
+
when :right then ' align="right"'
|
208
|
+
when :center then ' align="center"'
|
209
|
+
else; ""
|
210
|
+
end
|
211
211
|
out(@in_header ? "<th#{align}#{sourcepos(node)}>" : "<td#{align}#{sourcepos(node)}>", :children, @in_header ? "</th>\n" : "</td>\n")
|
212
212
|
@column_index += 1
|
213
213
|
end
|
214
214
|
|
215
215
|
def strikethrough(_)
|
216
|
-
out(
|
216
|
+
out("<del>", :children, "</del>")
|
217
217
|
end
|
218
218
|
|
219
219
|
def footnote_reference(node)
|
@@ -246,7 +246,7 @@ module QiitaMarker
|
|
246
246
|
end
|
247
247
|
|
248
248
|
def tasklist?(node)
|
249
|
-
node.type_string ==
|
249
|
+
node.type_string == "tasklist"
|
250
250
|
end
|
251
251
|
|
252
252
|
def checked?(node)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "set"
|
4
|
+
require "stringio"
|
5
5
|
|
6
6
|
module QiitaMarker
|
7
7
|
class Renderer
|
@@ -9,9 +9,9 @@ module QiitaMarker
|
|
9
9
|
|
10
10
|
def initialize(options: :DEFAULT, extensions: [])
|
11
11
|
@opts = Config.process_options(options, :render)
|
12
|
-
@stream = StringIO.new(+
|
12
|
+
@stream = StringIO.new(+"")
|
13
13
|
@need_blocksep = false
|
14
|
-
@warnings = Set.new
|
14
|
+
@warnings = Set.new([])
|
15
15
|
@in_tight = false
|
16
16
|
@in_plain = false
|
17
17
|
@tagfilter = extensions.include?(:tagfilter)
|
@@ -121,7 +121,7 @@ module QiitaMarker
|
|
121
121
|
end
|
122
122
|
|
123
123
|
def sourcepos(node)
|
124
|
-
return
|
124
|
+
return "" unless option_enabled?(:SOURCEPOS)
|
125
125
|
|
126
126
|
s = node.sourcepos
|
127
127
|
" data-sourcepos=\"#{s[:start_line]}:#{s[:start_column]}-" \
|
data/lib/qiita_marker/version.rb
CHANGED
data/lib/qiita_marker.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
4
|
+
require "qiita_marker/qiita_marker"
|
5
|
+
require "qiita_marker/config"
|
6
|
+
require "qiita_marker/node"
|
7
|
+
require "qiita_marker/renderer"
|
8
|
+
require "qiita_marker/renderer/html_renderer"
|
9
|
+
require "qiita_marker/version"
|
10
10
|
|
11
11
|
begin
|
12
|
-
require
|
12
|
+
require "awesome_print"
|
13
13
|
rescue LoadError; end # rubocop:disable Lint/SuppressedException
|
14
14
|
module QiitaMarker
|
15
15
|
# Public: Parses a Markdown string into an HTML string.
|
@@ -23,9 +23,7 @@ module QiitaMarker
|
|
23
23
|
raise TypeError, "text must be a String; got a #{text.class}!" unless text.is_a?(String)
|
24
24
|
|
25
25
|
opts = Config.process_options(options, :render)
|
26
|
-
text
|
27
|
-
html = Node.markdown_to_html(text, opts, extensions)
|
28
|
-
html.force_encoding('UTF-8')
|
26
|
+
Node.markdown_to_html(text.encode("UTF-8"), opts, extensions)
|
29
27
|
end
|
30
28
|
|
31
29
|
# Public: Parses a Markdown string into a `document` node.
|
@@ -39,7 +37,7 @@ module QiitaMarker
|
|
39
37
|
raise TypeError, "text must be a String; got a #{text.class}!" unless text.is_a?(String)
|
40
38
|
|
41
39
|
opts = Config.process_options(options, :parse)
|
42
|
-
text = text.encode(
|
40
|
+
text = text.encode("UTF-8")
|
43
41
|
Node.parse_document(text, text.bytesize, opts, extensions)
|
44
42
|
end
|
45
43
|
end
|
data/qiita_marker.gemspec
CHANGED
@@ -1,40 +1,38 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
lib = File.expand_path(
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require
|
5
|
+
require "qiita_marker/version"
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
|
-
s.name =
|
8
|
+
s.name = "qiita_marker"
|
9
9
|
s.version = QiitaMarker::VERSION
|
10
|
-
s.summary =
|
11
|
-
s.description =
|
12
|
-
s.authors = [
|
13
|
-
s.homepage =
|
14
|
-
s.license =
|
10
|
+
s.summary = "Qiita Marker is a Ruby library for Markdown processing, based on CommonMarker."
|
11
|
+
s.description = "A Ruby library that is the core module of the Qiita-specified markdown processor."
|
12
|
+
s.authors = ["Qiita Inc."]
|
13
|
+
s.homepage = "https://github.com/increments/qiita_marker"
|
14
|
+
s.license = "MIT"
|
15
15
|
|
16
|
-
s.files =
|
17
|
-
s.files += Dir.glob(
|
18
|
-
s.files += Dir.glob(
|
19
|
-
s.
|
20
|
-
s.extensions = ['ext/qiita_marker/extconf.rb']
|
16
|
+
s.files = ["LICENSE.txt", "README.md", "Rakefile", "qiita_marker.gemspec", "bin/qiita_marker"]
|
17
|
+
s.files += Dir.glob("lib/**/*.rb")
|
18
|
+
s.files += Dir.glob("ext/qiita_marker/*.*")
|
19
|
+
s.extensions = ["ext/qiita_marker/extconf.rb"]
|
21
20
|
|
22
|
-
s.executables = [
|
23
|
-
s.require_paths =
|
24
|
-
s.required_ruby_version = [
|
21
|
+
s.executables = ["qiita_marker"]
|
22
|
+
s.require_paths = ["lib", "ext"]
|
23
|
+
s.required_ruby_version = [">= 2.6", "< 4.0"]
|
25
24
|
|
26
|
-
s.
|
25
|
+
s.metadata["rubygems_mfa_required"] = "true"
|
27
26
|
|
28
|
-
s.
|
29
|
-
|
30
|
-
s.add_development_dependency
|
31
|
-
s.add_development_dependency
|
32
|
-
s.add_development_dependency
|
33
|
-
s.add_development_dependency
|
34
|
-
s.add_development_dependency
|
35
|
-
s.add_development_dependency
|
36
|
-
s.add_development_dependency
|
37
|
-
s.
|
38
|
-
|
39
|
-
}
|
27
|
+
s.rdoc_options += ["-x", "ext/qiita_marker/cmark/.*"]
|
28
|
+
|
29
|
+
s.add_development_dependency("awesome_print")
|
30
|
+
s.add_development_dependency("json", "~> 2.3")
|
31
|
+
s.add_development_dependency("minitest", "~> 5.6")
|
32
|
+
s.add_development_dependency("minitest-focus", "~> 1.1")
|
33
|
+
s.add_development_dependency("rake")
|
34
|
+
s.add_development_dependency("rake-compiler", "~> 0.9")
|
35
|
+
s.add_development_dependency("rdoc", "~> 6.2")
|
36
|
+
s.add_development_dependency("rubocop")
|
37
|
+
s.add_development_dependency("rubocop-standard")
|
40
38
|
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.
|
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-
|
11
|
+
date: 2022-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|
@@ -236,36 +236,6 @@ files:
|
|
236
236
|
- lib/qiita_marker/renderer/html_renderer.rb
|
237
237
|
- lib/qiita_marker/version.rb
|
238
238
|
- qiita_marker.gemspec
|
239
|
-
- test/benchmark.rb
|
240
|
-
- test/fixtures/curly.md
|
241
|
-
- test/fixtures/dingus.md
|
242
|
-
- test/fixtures/strong.md
|
243
|
-
- test/fixtures/table.md
|
244
|
-
- test/test_attributes.rb
|
245
|
-
- test/test_basics.rb
|
246
|
-
- test/test_commands.rb
|
247
|
-
- test/test_commonmark.rb
|
248
|
-
- test/test_doc.rb
|
249
|
-
- test/test_encoding.rb
|
250
|
-
- test/test_extensions.rb
|
251
|
-
- test/test_footnotes.rb
|
252
|
-
- test/test_gc.rb
|
253
|
-
- test/test_helper.rb
|
254
|
-
- test/test_linebreaks.rb
|
255
|
-
- test/test_maliciousness.rb
|
256
|
-
- test/test_node.rb
|
257
|
-
- test/test_options.rb
|
258
|
-
- test/test_pathological_inputs.rb
|
259
|
-
- test/test_plaintext.rb
|
260
|
-
- test/test_qfm_autolink_class_name.rb
|
261
|
-
- test/test_qfm_code_data_metadata.rb
|
262
|
-
- test/test_qfm_custom_block.rb
|
263
|
-
- test/test_qfm_mention_no_emphasis.rb
|
264
|
-
- test/test_renderer.rb
|
265
|
-
- test/test_smartpunct.rb
|
266
|
-
- test/test_spec.rb
|
267
|
-
- test/test_tasklists.rb
|
268
|
-
- test/test_xml.rb
|
269
239
|
homepage: https://github.com/increments/qiita_marker
|
270
240
|
licenses:
|
271
241
|
- MIT
|
@@ -296,34 +266,4 @@ rubygems_version: 3.1.4
|
|
296
266
|
signing_key:
|
297
267
|
specification_version: 4
|
298
268
|
summary: Qiita Marker is a Ruby library for Markdown processing, based on CommonMarker.
|
299
|
-
test_files:
|
300
|
-
- test/benchmark.rb
|
301
|
-
- test/fixtures/curly.md
|
302
|
-
- test/fixtures/dingus.md
|
303
|
-
- test/fixtures/strong.md
|
304
|
-
- test/fixtures/table.md
|
305
|
-
- test/test_attributes.rb
|
306
|
-
- test/test_basics.rb
|
307
|
-
- test/test_commands.rb
|
308
|
-
- test/test_commonmark.rb
|
309
|
-
- test/test_doc.rb
|
310
|
-
- test/test_encoding.rb
|
311
|
-
- test/test_extensions.rb
|
312
|
-
- test/test_footnotes.rb
|
313
|
-
- test/test_gc.rb
|
314
|
-
- test/test_helper.rb
|
315
|
-
- test/test_linebreaks.rb
|
316
|
-
- test/test_maliciousness.rb
|
317
|
-
- test/test_node.rb
|
318
|
-
- test/test_options.rb
|
319
|
-
- test/test_pathological_inputs.rb
|
320
|
-
- test/test_plaintext.rb
|
321
|
-
- test/test_qfm_autolink_class_name.rb
|
322
|
-
- test/test_qfm_code_data_metadata.rb
|
323
|
-
- test/test_qfm_custom_block.rb
|
324
|
-
- test/test_qfm_mention_no_emphasis.rb
|
325
|
-
- test/test_renderer.rb
|
326
|
-
- test/test_smartpunct.rb
|
327
|
-
- test/test_spec.rb
|
328
|
-
- test/test_tasklists.rb
|
329
|
-
- test/test_xml.rb
|
269
|
+
test_files: []
|