qiita_marker 0.23.2.1 → 0.23.5.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/LICENSE.txt +19 -17
- data/README.md +2 -0
- data/Rakefile +57 -56
- data/bin/qiita_marker +2 -7
- data/ext/qiita_marker/autolink.c +57 -10
- data/ext/qiita_marker/cmark-gfm_version.h +2 -2
- data/ext/qiita_marker/html.c +1 -1
- data/ext/qiita_marker/qfm.h +3 -0
- data/ext/qiita_marker/qfm_custom_block.c +1 -14
- data/ext/qiita_marker/qfm_mention_no_emphasis.c +1 -1
- 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 +5 -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 +39 -39
- 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 -61
- 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_code_data_metadata.rb +0 -26
- data/test/test_qfm_custom_block.rb +0 -23
- 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
@@ -14,7 +14,8 @@ module QiitaMarker
|
|
14
14
|
LIBERAL_HTML_TAG: (1 << 12),
|
15
15
|
FOOTNOTES: (1 << 13),
|
16
16
|
STRIKETHROUGH_DOUBLE_TILDE: (1 << 14),
|
17
|
-
MENTION_NO_EMPHASIS: (1 << 26)
|
17
|
+
MENTION_NO_EMPHASIS: (1 << 26),
|
18
|
+
AUTOLINK_CLASS_NAME: (1 << 27),
|
18
19
|
}.freeze,
|
19
20
|
render: {
|
20
21
|
DEFAULT: 0,
|
@@ -31,9 +32,10 @@ module QiitaMarker
|
|
31
32
|
TABLE_PREFER_STYLE_ATTRIBUTES: (1 << 15),
|
32
33
|
FULL_INFO_STRING: (1 << 16),
|
33
34
|
CODE_DATA_METADATA: (1 << 25),
|
34
|
-
MENTION_NO_EMPHASIS: (1 << 26)
|
35
|
+
MENTION_NO_EMPHASIS: (1 << 26),
|
36
|
+
AUTOLINK_CLASS_NAME: (1 << 27),
|
35
37
|
}.freeze,
|
36
|
-
format:
|
38
|
+
format: [:html, :xml, :commonmark, :plaintext].freeze,
|
37
39
|
}.freeze
|
38
40
|
|
39
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
|
-
out(' data-metadata="', node.fence_info
|
100
|
-
out(
|
99
|
+
out(' data-metadata="', node.fence_info, '"') if node.fence_info && !node.fence_info.empty?
|
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.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:
|
11
|
+
date: 2022-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|
@@ -236,35 +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_code_data_metadata.rb
|
261
|
-
- test/test_qfm_custom_block.rb
|
262
|
-
- test/test_qfm_mention_no_emphasis.rb
|
263
|
-
- test/test_renderer.rb
|
264
|
-
- test/test_smartpunct.rb
|
265
|
-
- test/test_spec.rb
|
266
|
-
- test/test_tasklists.rb
|
267
|
-
- test/test_xml.rb
|
268
239
|
homepage: https://github.com/increments/qiita_marker
|
269
240
|
licenses:
|
270
241
|
- MIT
|
@@ -295,33 +266,4 @@ rubygems_version: 3.1.4
|
|
295
266
|
signing_key:
|
296
267
|
specification_version: 4
|
297
268
|
summary: Qiita Marker is a Ruby library for Markdown processing, based on CommonMarker.
|
298
|
-
test_files:
|
299
|
-
- test/benchmark.rb
|
300
|
-
- test/fixtures/curly.md
|
301
|
-
- test/fixtures/dingus.md
|
302
|
-
- test/fixtures/strong.md
|
303
|
-
- test/fixtures/table.md
|
304
|
-
- test/test_attributes.rb
|
305
|
-
- test/test_basics.rb
|
306
|
-
- test/test_commands.rb
|
307
|
-
- test/test_commonmark.rb
|
308
|
-
- test/test_doc.rb
|
309
|
-
- test/test_encoding.rb
|
310
|
-
- test/test_extensions.rb
|
311
|
-
- test/test_footnotes.rb
|
312
|
-
- test/test_gc.rb
|
313
|
-
- test/test_helper.rb
|
314
|
-
- test/test_linebreaks.rb
|
315
|
-
- test/test_maliciousness.rb
|
316
|
-
- test/test_node.rb
|
317
|
-
- test/test_options.rb
|
318
|
-
- test/test_pathological_inputs.rb
|
319
|
-
- test/test_plaintext.rb
|
320
|
-
- test/test_qfm_code_data_metadata.rb
|
321
|
-
- test/test_qfm_custom_block.rb
|
322
|
-
- test/test_qfm_mention_no_emphasis.rb
|
323
|
-
- test/test_renderer.rb
|
324
|
-
- test/test_smartpunct.rb
|
325
|
-
- test/test_spec.rb
|
326
|
-
- test/test_tasklists.rb
|
327
|
-
- test/test_xml.rb
|
269
|
+
test_files: []
|