commonmarker 0.23.1 → 0.23.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of commonmarker might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Rakefile +56 -55
- data/bin/commonmarker +2 -7
- data/commonmarker.gemspec +27 -26
- data/ext/commonmarker/blocks.c +13 -2
- data/ext/commonmarker/cmark-gfm_version.h +2 -2
- data/ext/commonmarker/commonmark.c +14 -4
- data/ext/commonmarker/commonmarker.c +30 -44
- data/ext/commonmarker/ext_scanners.c +360 -640
- data/ext/commonmarker/footnotes.c +23 -0
- data/ext/commonmarker/footnotes.h +2 -0
- data/ext/commonmarker/html.c +40 -19
- data/ext/commonmarker/inlines.c +69 -11
- data/ext/commonmarker/node.h +7 -0
- data/ext/commonmarker/scanners.c +2438 -2450
- data/ext/commonmarker/table.c +98 -53
- data/lib/commonmarker/config.rb +1 -1
- data/lib/commonmarker/node/inspect.rb +8 -18
- data/lib/commonmarker/node.rb +6 -6
- data/lib/commonmarker/renderer/html_renderer.rb +37 -37
- data/lib/commonmarker/renderer.rb +5 -5
- data/lib/commonmarker/version.rb +1 -1
- data/lib/commonmarker.rb +9 -11
- metadata +6 -57
- 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 -48
- 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_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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be9868bfb1c9bf09a7f274abf44ef7692be355141e7a4a3d956b3f889869cefd
|
4
|
+
data.tar.gz: 8b09575b5209fcb2f80919dd46a89de97f52e61fc8f7b2d6d49c2243ff8c18ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fffd100b88072cd573d8c3c13a81e437a08b69e48225b7abc2f8d20ffa188b021f1f779dab7d38b85c0d611261db7e4024a47ceeb7f08cba6334d8d5fc3f9e86
|
7
|
+
data.tar.gz: ee8039d05a8cb7a31803a1da6f4f20ea77e7420a3549e1edcb11190e3f65edbff54ed88707d5576de02b7ae8d1195061e40b75c83ab34357964820bca8b30795
|
data/Rakefile
CHANGED
@@ -1,108 +1,109 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
3
|
+
require "date"
|
4
|
+
require "rake/clean"
|
5
|
+
require "rake/extensiontask"
|
6
|
+
require "digest/md5"
|
7
7
|
|
8
|
-
host_os = RbConfig::CONFIG[
|
9
|
-
require
|
8
|
+
host_os = RbConfig::CONFIG["host_os"]
|
9
|
+
require "devkit" if host_os == "mingw32"
|
10
10
|
|
11
11
|
task default: [:test]
|
12
12
|
|
13
13
|
# Gem Spec
|
14
|
-
gem_spec = Gem::Specification.load(
|
14
|
+
gem_spec = Gem::Specification.load("commonmarker.gemspec")
|
15
15
|
|
16
16
|
# Ruby Extension
|
17
|
-
Rake::ExtensionTask.new(
|
18
|
-
ext.lib_dir = File.join(
|
17
|
+
Rake::ExtensionTask.new("commonmarker", gem_spec) do |ext|
|
18
|
+
ext.lib_dir = File.join("lib", "commonmarker")
|
19
19
|
end
|
20
20
|
|
21
21
|
# Packaging
|
22
|
-
require
|
22
|
+
require "bundler/gem_tasks"
|
23
23
|
|
24
24
|
# Testing
|
25
|
-
require
|
25
|
+
require "rake/testtask"
|
26
26
|
|
27
|
-
Rake::TestTask.new(
|
28
|
-
t.libs <<
|
29
|
-
t.libs <<
|
30
|
-
t.pattern =
|
27
|
+
Rake::TestTask.new("test:unit") do |t|
|
28
|
+
t.libs << "lib"
|
29
|
+
t.libs << "test"
|
30
|
+
t.pattern = "test/test_*.rb"
|
31
31
|
t.verbose = true
|
32
32
|
t.warning = false
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
desc "Run unit tests"
|
36
|
+
task "test:unit" => :compile
|
36
37
|
|
37
|
-
desc
|
38
|
-
task test:
|
38
|
+
desc "Run unit and conformance tests"
|
39
|
+
task test: ["test:unit"]
|
39
40
|
|
40
|
-
require
|
41
|
+
require "rubocop/rake_task"
|
41
42
|
|
42
43
|
RuboCop::RakeTask.new(:rubocop)
|
43
44
|
|
44
|
-
desc
|
45
|
+
desc "Run benchmarks"
|
45
46
|
task :benchmark do
|
46
|
-
if ENV[
|
47
|
-
|
48
|
-
|
49
|
-
langs =
|
47
|
+
if ENV["FETCH_PROGIT"]
|
48
|
+
%x(rm -rf test/progit)
|
49
|
+
%x(git clone https://github.com/progit/progit.git test/progit)
|
50
|
+
langs = ["ar", "az", "be", "ca", "cs", "de", "en", "eo", "es", "es-ni", "fa", "fi", "fr", "hi", "hu", "id", "it", "ja", "ko", "mk", "nl", "no-nb", "pl", "pt-br", "ro", "ru", "sr", "th", "tr", "uk", "vi", "zh", "zh-tw"]
|
50
51
|
langs.each do |lang|
|
51
|
-
|
52
|
+
%x(cat test/progit/#{lang}/*/*.markdown >> test/benchinput.md)
|
52
53
|
end
|
53
54
|
end
|
54
|
-
$LOAD_PATH.unshift
|
55
|
-
load
|
55
|
+
$LOAD_PATH.unshift("lib")
|
56
|
+
load "test/benchmark.rb"
|
56
57
|
end
|
57
58
|
|
58
|
-
desc
|
59
|
+
desc "Match C style of cmark"
|
59
60
|
task :format do
|
60
|
-
sh
|
61
|
+
sh "clang-format -style llvm -i ext/commonmarker/*.c ext/commonmarker/*.h"
|
61
62
|
end
|
62
63
|
|
63
64
|
# Documentation
|
64
|
-
require
|
65
|
+
require "rdoc/task"
|
65
66
|
|
66
|
-
desc
|
67
|
+
desc "Generate API documentation"
|
67
68
|
RDoc::Task.new do |rd|
|
68
|
-
rd.rdoc_dir =
|
69
|
-
rd.main =
|
70
|
-
rd.rdoc_files.include
|
71
|
-
|
72
|
-
rd.options <<
|
73
|
-
rd.options <<
|
74
|
-
rd.options <<
|
75
|
-
rd.options <<
|
76
|
-
rd.options <<
|
69
|
+
rd.rdoc_dir = "docs"
|
70
|
+
rd.main = "README.md"
|
71
|
+
rd.rdoc_files.include("README.md", "lib/**/*.rb", "ext/commonmarker/commonmarker.c")
|
72
|
+
|
73
|
+
rd.options << "--markup tomdoc"
|
74
|
+
rd.options << "--inline-source"
|
75
|
+
rd.options << "--line-numbers"
|
76
|
+
rd.options << "--all"
|
77
|
+
rd.options << "--fileboxes"
|
77
78
|
end
|
78
79
|
|
79
|
-
desc
|
80
|
+
desc "Generate the documentation and run a web server"
|
80
81
|
task serve: [:rdoc] do
|
81
|
-
require
|
82
|
+
require "webrick"
|
82
83
|
|
83
|
-
puts
|
84
|
+
puts "Navigate to http://localhost:3000 to see the docs"
|
84
85
|
|
85
|
-
server = WEBrick::HTTPServer.new
|
86
|
-
server.mount
|
87
|
-
trap(
|
86
|
+
server = WEBrick::HTTPServer.new(Port: 3000)
|
87
|
+
server.mount("/", WEBrick::HTTPServlet::FileHandler, "docs")
|
88
|
+
trap("INT") { server.stop }
|
88
89
|
server.start
|
89
90
|
end
|
90
91
|
|
91
|
-
desc
|
92
|
+
desc "Generate and publish docs to gh-pages"
|
92
93
|
task publish: [:rdoc] do
|
93
|
-
require
|
94
|
-
require
|
94
|
+
require "tmpdir"
|
95
|
+
require "shellwords"
|
95
96
|
|
96
97
|
Dir.mktmpdir do |tmp|
|
97
98
|
system "mv docs/* #{tmp}"
|
98
|
-
system
|
99
|
-
system
|
99
|
+
system "git checkout origin/gh-pages"
|
100
|
+
system "rm -rf *"
|
100
101
|
system "mv #{tmp}/* ."
|
101
102
|
message = Shellwords.escape("Site updated at #{Time.now.utc}")
|
102
|
-
system
|
103
|
+
system "git add ."
|
103
104
|
system "git commit -am #{message}"
|
104
|
-
system
|
105
|
-
system
|
106
|
-
system
|
105
|
+
system "git push origin gh-pages --force"
|
106
|
+
system "git checkout master"
|
107
|
+
system "echo yolo"
|
107
108
|
end
|
108
109
|
end
|
data/bin/commonmarker
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require 'optparse'
|
5
|
-
require 'ostruct'
|
6
5
|
|
7
6
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
8
7
|
require 'commonmarker'
|
@@ -11,17 +10,13 @@ root = File.expand_path('..', __dir__)
|
|
11
10
|
$LOAD_PATH.unshift File.expand_path('lib', root)
|
12
11
|
|
13
12
|
def parse_options
|
14
|
-
options =
|
13
|
+
options = Struct.new(:active_extensions, :active_parse_options, :active_render_options, :output_format, :renderer)
|
14
|
+
.new([], [:DEFAULT], [:DEFAULT], :html)
|
15
15
|
extensions = CommonMarker.extensions
|
16
16
|
parse_options = CommonMarker::Config::OPTS.fetch(:parse)
|
17
17
|
render_options = CommonMarker::Config::OPTS.fetch(:render)
|
18
18
|
format_options = CommonMarker::Config::OPTS.fetch(:format)
|
19
19
|
|
20
|
-
options.active_extensions = []
|
21
|
-
options.active_parse_options = [:DEFAULT]
|
22
|
-
options.active_render_options = [:DEFAULT]
|
23
|
-
options.output_format = :html
|
24
|
-
|
25
20
|
option_parser = OptionParser.new do |opts|
|
26
21
|
opts.banner = 'Usage: commonmarker [--html-renderer] [--extension=EXTENSION]'
|
27
22
|
opts.separator ' [--to=FORMAT]'
|
data/commonmarker.gemspec
CHANGED
@@ -1,37 +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 "commonmarker/version"
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
|
-
s.name =
|
8
|
+
s.name = "commonmarker"
|
9
9
|
s.version = CommonMarker::VERSION
|
10
|
-
s.summary =
|
11
|
-
s.description =
|
12
|
-
s.authors = [
|
13
|
-
s.homepage =
|
14
|
-
s.license =
|
10
|
+
s.summary = "CommonMark parser and renderer. Written in C, wrapped in Ruby."
|
11
|
+
s.description = "A fast, safe, extensible parser for CommonMark. This wraps the official libcmark library."
|
12
|
+
s.authors = ["Garen Torikian", "Ashe Connor"]
|
13
|
+
s.homepage = "https://github.com/gjtorikian/commonmarker"
|
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/commonmarker/extconf.rb']
|
16
|
+
s.files = ["LICENSE.txt", "README.md", "Rakefile", "commonmarker.gemspec", "bin/commonmarker"]
|
17
|
+
s.files += Dir.glob("lib/**/*.rb")
|
18
|
+
s.files += Dir.glob("ext/commonmarker/*.*")
|
19
|
+
s.extensions = ["ext/commonmarker/extconf.rb"]
|
21
20
|
|
22
|
-
s.executables = [
|
23
|
-
s.require_paths =
|
24
|
-
s.required_ruby_version = [
|
21
|
+
s.executables = ["commonmarker"]
|
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
|
27
|
+
s.rdoc_options += ["-x", "ext/commonmarker/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")
|
37
38
|
end
|
data/ext/commonmarker/blocks.c
CHANGED
@@ -468,7 +468,6 @@ static void process_footnotes(cmark_parser *parser) {
|
|
468
468
|
while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
|
469
469
|
cur = cmark_iter_get_node(iter);
|
470
470
|
if (ev_type == CMARK_EVENT_EXIT && cur->type == CMARK_NODE_FOOTNOTE_DEFINITION) {
|
471
|
-
cmark_node_unlink(cur);
|
472
471
|
cmark_footnote_create(map, cur);
|
473
472
|
}
|
474
473
|
}
|
@@ -485,6 +484,15 @@ static void process_footnotes(cmark_parser *parser) {
|
|
485
484
|
if (!footnote->ix)
|
486
485
|
footnote->ix = ++ix;
|
487
486
|
|
487
|
+
// store a reference to this footnote reference's footnote definition
|
488
|
+
// this is used by renderers when generating label ids
|
489
|
+
cur->parent_footnote_def = footnote->node;
|
490
|
+
|
491
|
+
// keep track of a) count of how many times this footnote def has been
|
492
|
+
// referenced, and b) which reference index this footnote ref is at.
|
493
|
+
// this is used by renderers when generating links and backreferences.
|
494
|
+
cur->footnote.ref_ix = ++footnote->node->footnote.def_count;
|
495
|
+
|
488
496
|
char n[32];
|
489
497
|
snprintf(n, sizeof(n), "%d", footnote->ix);
|
490
498
|
cmark_chunk_free(parser->mem, &cur->as.literal);
|
@@ -515,13 +523,16 @@ static void process_footnotes(cmark_parser *parser) {
|
|
515
523
|
qsort(map->sorted, map->size, sizeof(cmark_map_entry *), sort_footnote_by_ix);
|
516
524
|
for (unsigned int i = 0; i < map->size; ++i) {
|
517
525
|
cmark_footnote *footnote = (cmark_footnote *)map->sorted[i];
|
518
|
-
if (!footnote->ix)
|
526
|
+
if (!footnote->ix) {
|
527
|
+
cmark_node_unlink(footnote->node);
|
519
528
|
continue;
|
529
|
+
}
|
520
530
|
cmark_node_append_child(parser->root, footnote->node);
|
521
531
|
footnote->node = NULL;
|
522
532
|
}
|
523
533
|
}
|
524
534
|
|
535
|
+
cmark_unlink_footnotes_map(map);
|
525
536
|
cmark_map_free(map);
|
526
537
|
}
|
527
538
|
|
@@ -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) | 4)
|
5
|
+
#define CMARK_GFM_VERSION_STRING "0.29.0.gfm.4"
|
6
6
|
|
7
7
|
#endif
|
@@ -477,7 +477,13 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
|
|
477
477
|
case CMARK_NODE_FOOTNOTE_REFERENCE:
|
478
478
|
if (entering) {
|
479
479
|
LIT("[^");
|
480
|
-
|
480
|
+
|
481
|
+
char *footnote_label = renderer->mem->calloc(node->parent_footnote_def->as.literal.len + 1, sizeof(char));
|
482
|
+
memmove(footnote_label, node->parent_footnote_def->as.literal.data, node->parent_footnote_def->as.literal.len);
|
483
|
+
|
484
|
+
OUT(footnote_label, false, LITERAL);
|
485
|
+
renderer->mem->free(footnote_label);
|
486
|
+
|
481
487
|
LIT("]");
|
482
488
|
}
|
483
489
|
break;
|
@@ -486,9 +492,13 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
|
|
486
492
|
if (entering) {
|
487
493
|
renderer->footnote_ix += 1;
|
488
494
|
LIT("[^");
|
489
|
-
|
490
|
-
|
491
|
-
|
495
|
+
|
496
|
+
char *footnote_label = renderer->mem->calloc(node->as.literal.len + 1, sizeof(char));
|
497
|
+
memmove(footnote_label, node->as.literal.data, node->as.literal.len);
|
498
|
+
|
499
|
+
OUT(footnote_label, false, LITERAL);
|
500
|
+
renderer->mem->free(footnote_label);
|
501
|
+
|
492
502
|
LIT("]:\n");
|
493
503
|
|
494
504
|
cmark_strbuf_puts(renderer->prefix, " ");
|
@@ -115,25 +115,23 @@ static void rb_parent_removed(VALUE val) {
|
|
115
115
|
RDATA(val)->dfree = rb_free_c_struct;
|
116
116
|
}
|
117
117
|
|
118
|
-
static cmark_parser *prepare_parser(VALUE rb_options, VALUE rb_extensions
|
118
|
+
static cmark_parser *prepare_parser(VALUE rb_options, VALUE rb_extensions) {
|
119
119
|
int options;
|
120
|
-
int extensions_len;
|
121
120
|
VALUE rb_ext_name;
|
122
121
|
int i;
|
123
122
|
|
124
|
-
|
123
|
+
FIXNUM_P(rb_options);
|
124
|
+
options = FIX2INT(rb_options);
|
125
|
+
|
125
126
|
Check_Type(rb_extensions, T_ARRAY);
|
126
127
|
|
127
|
-
|
128
|
-
extensions_len = RARRAY_LEN(rb_extensions);
|
128
|
+
cmark_parser *parser = cmark_parser_new(options);
|
129
129
|
|
130
|
-
|
131
|
-
|
132
|
-
rb_ext_name = RARRAY_PTR(rb_extensions)[i];
|
130
|
+
for (i = 0; i < RARRAY_LEN(rb_extensions); ++i) {
|
131
|
+
rb_ext_name = rb_ary_entry(rb_extensions, i);
|
133
132
|
|
134
133
|
if (!SYMBOL_P(rb_ext_name)) {
|
135
134
|
cmark_parser_free(parser);
|
136
|
-
cmark_arena_reset();
|
137
135
|
rb_raise(rb_eTypeError, "extension names should be Symbols; got a %"PRIsVALUE"", rb_obj_class(rb_ext_name));
|
138
136
|
}
|
139
137
|
|
@@ -142,7 +140,6 @@ static cmark_parser *prepare_parser(VALUE rb_options, VALUE rb_extensions, cmark
|
|
142
140
|
|
143
141
|
if (!syntax_extension) {
|
144
142
|
cmark_parser_free(parser);
|
145
|
-
cmark_arena_reset();
|
146
143
|
rb_raise(rb_eArgError, "extension %s not found", rb_id2name(SYM2ID(rb_ext_name)));
|
147
144
|
}
|
148
145
|
|
@@ -157,33 +154,28 @@ static cmark_parser *prepare_parser(VALUE rb_options, VALUE rb_extensions, cmark
|
|
157
154
|
*
|
158
155
|
*/
|
159
156
|
static VALUE rb_markdown_to_html(VALUE self, VALUE rb_text, VALUE rb_options, VALUE rb_extensions) {
|
160
|
-
char *
|
161
|
-
int len;
|
157
|
+
char *html;
|
162
158
|
cmark_parser *parser;
|
163
159
|
cmark_node *doc;
|
164
|
-
Check_Type(rb_text, T_STRING);
|
165
|
-
Check_Type(rb_options, T_FIXNUM);
|
166
160
|
|
167
|
-
|
161
|
+
Check_Type(rb_text, T_STRING);
|
168
162
|
|
169
|
-
|
170
|
-
len = RSTRING_LEN(rb_text);
|
163
|
+
parser = prepare_parser(rb_options, rb_extensions);
|
171
164
|
|
172
|
-
cmark_parser_feed(parser,
|
165
|
+
cmark_parser_feed(parser, StringValuePtr(rb_text), RSTRING_LEN(rb_text));
|
173
166
|
doc = cmark_parser_finish(parser);
|
167
|
+
|
174
168
|
if (doc == NULL) {
|
175
|
-
|
169
|
+
cmark_parser_free(parser);
|
176
170
|
rb_raise(rb_eNodeError, "error parsing document");
|
177
171
|
}
|
178
172
|
|
179
|
-
|
180
|
-
html = cmark_render_html_with_mem(doc, FIX2INT(rb_options), parser->syntax_extensions, default_mem);
|
181
|
-
cmark_arena_reset();
|
173
|
+
html = cmark_render_html(doc, parser->options, parser->syntax_extensions);
|
182
174
|
|
183
|
-
|
184
|
-
|
175
|
+
cmark_parser_free(parser);
|
176
|
+
cmark_node_free(doc);
|
185
177
|
|
186
|
-
return
|
178
|
+
return rb_utf8_str_new_cstr(html);
|
187
179
|
}
|
188
180
|
|
189
181
|
/*
|
@@ -191,33 +183,28 @@ static VALUE rb_markdown_to_html(VALUE self, VALUE rb_text, VALUE rb_options, VA
|
|
191
183
|
*
|
192
184
|
*/
|
193
185
|
static VALUE rb_markdown_to_xml(VALUE self, VALUE rb_text, VALUE rb_options, VALUE rb_extensions) {
|
194
|
-
char *
|
195
|
-
int len;
|
186
|
+
char *xml;
|
196
187
|
cmark_parser *parser;
|
197
188
|
cmark_node *doc;
|
198
|
-
Check_Type(rb_text, T_STRING);
|
199
|
-
Check_Type(rb_options, T_FIXNUM);
|
200
189
|
|
201
|
-
|
190
|
+
Check_Type(rb_text, T_STRING);
|
202
191
|
|
203
|
-
|
204
|
-
len = RSTRING_LEN(rb_text);
|
192
|
+
parser = prepare_parser(rb_options, rb_extensions);
|
205
193
|
|
206
|
-
cmark_parser_feed(parser,
|
194
|
+
cmark_parser_feed(parser, StringValuePtr(rb_text), RSTRING_LEN(rb_text));
|
207
195
|
doc = cmark_parser_finish(parser);
|
196
|
+
|
208
197
|
if (doc == NULL) {
|
209
|
-
|
198
|
+
cmark_parser_free(parser);
|
210
199
|
rb_raise(rb_eNodeError, "error parsing document");
|
211
200
|
}
|
212
201
|
|
213
|
-
|
214
|
-
xml = cmark_render_xml_with_mem(doc, FIX2INT(rb_options), default_mem);
|
215
|
-
cmark_arena_reset();
|
202
|
+
xml = cmark_render_xml(doc, parser->options);
|
216
203
|
|
217
|
-
|
218
|
-
|
204
|
+
cmark_parser_free(parser);
|
205
|
+
cmark_node_free(doc);
|
219
206
|
|
220
|
-
return
|
207
|
+
return rb_utf8_str_new_cstr(xml);
|
221
208
|
}
|
222
209
|
|
223
210
|
/*
|
@@ -308,18 +295,17 @@ static VALUE rb_node_new(VALUE self, VALUE type) {
|
|
308
295
|
static VALUE rb_parse_document(VALUE self, VALUE rb_text, VALUE rb_len,
|
309
296
|
VALUE rb_options, VALUE rb_extensions) {
|
310
297
|
char *text;
|
311
|
-
int len
|
298
|
+
int len;
|
312
299
|
cmark_parser *parser;
|
313
300
|
cmark_node *doc;
|
314
301
|
Check_Type(rb_text, T_STRING);
|
315
302
|
Check_Type(rb_len, T_FIXNUM);
|
316
303
|
Check_Type(rb_options, T_FIXNUM);
|
317
304
|
|
318
|
-
parser = prepare_parser(rb_options, rb_extensions
|
305
|
+
parser = prepare_parser(rb_options, rb_extensions);
|
319
306
|
|
320
307
|
text = (char *)RSTRING_PTR(rb_text);
|
321
308
|
len = FIX2INT(rb_len);
|
322
|
-
options = FIX2INT(rb_options);
|
323
309
|
|
324
310
|
cmark_parser_feed(parser, text, len);
|
325
311
|
doc = cmark_parser_finish(parser);
|
@@ -614,7 +600,6 @@ static VALUE rb_render_html(VALUE self, VALUE rb_options, VALUE rb_extensions) {
|
|
614
600
|
*/
|
615
601
|
static VALUE rb_render_xml(VALUE self, VALUE rb_options) {
|
616
602
|
int options;
|
617
|
-
int i;
|
618
603
|
cmark_node *node;
|
619
604
|
Check_Type(rb_options, T_FIXNUM);
|
620
605
|
|
@@ -1270,6 +1255,7 @@ __attribute__((visibility("default"))) void Init_commonmarker() {
|
|
1270
1255
|
rb_define_singleton_method(module, "extensions", rb_extensions, 0);
|
1271
1256
|
rb_eNodeError = rb_define_class_under(module, "NodeError", rb_eStandardError);
|
1272
1257
|
rb_cNode = rb_define_class_under(module, "Node", rb_cObject);
|
1258
|
+
rb_undef_alloc_func(rb_cNode);
|
1273
1259
|
rb_define_singleton_method(rb_cNode, "markdown_to_html", rb_markdown_to_html,
|
1274
1260
|
3);
|
1275
1261
|
rb_define_singleton_method(rb_cNode, "markdown_to_xml", rb_markdown_to_xml,
|