commonmarker 0.23.10 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Cargo.lock +1221 -0
- data/Cargo.toml +7 -0
- data/README.md +233 -172
- data/ext/commonmarker/Cargo.toml +20 -0
- data/ext/commonmarker/extconf.rb +3 -6
- data/ext/commonmarker/src/lib.rs +103 -0
- data/ext/commonmarker/src/node.rs +1160 -0
- data/ext/commonmarker/src/options.rs +216 -0
- data/ext/commonmarker/src/plugins/syntax_highlighting.rs +166 -0
- data/ext/commonmarker/src/plugins.rs +6 -0
- data/ext/commonmarker/src/utils.rs +8 -0
- data/lib/commonmarker/config.rb +91 -40
- data/lib/commonmarker/constants.rb +7 -0
- data/lib/commonmarker/extension.rb +14 -0
- data/lib/commonmarker/node/ast.rb +8 -0
- data/lib/commonmarker/node/inspect.rb +14 -4
- data/lib/commonmarker/node.rb +29 -47
- data/lib/commonmarker/renderer.rb +1 -127
- data/lib/commonmarker/utils.rb +22 -0
- data/lib/commonmarker/version.rb +2 -2
- data/lib/commonmarker.rb +27 -25
- metadata +38 -186
- data/Rakefile +0 -109
- data/bin/commonmarker +0 -118
- data/commonmarker.gemspec +0 -38
- data/ext/commonmarker/arena.c +0 -104
- data/ext/commonmarker/autolink.c +0 -508
- data/ext/commonmarker/autolink.h +0 -8
- data/ext/commonmarker/blocks.c +0 -1622
- data/ext/commonmarker/buffer.c +0 -278
- data/ext/commonmarker/buffer.h +0 -116
- data/ext/commonmarker/case_fold_switch.inc +0 -4327
- data/ext/commonmarker/chunk.h +0 -135
- data/ext/commonmarker/cmark-gfm-core-extensions.h +0 -54
- data/ext/commonmarker/cmark-gfm-extension_api.h +0 -737
- data/ext/commonmarker/cmark-gfm-extensions_export.h +0 -42
- data/ext/commonmarker/cmark-gfm.h +0 -833
- data/ext/commonmarker/cmark-gfm_export.h +0 -42
- data/ext/commonmarker/cmark-gfm_version.h +0 -7
- data/ext/commonmarker/cmark.c +0 -55
- data/ext/commonmarker/cmark_ctype.c +0 -44
- data/ext/commonmarker/cmark_ctype.h +0 -33
- data/ext/commonmarker/commonmark.c +0 -514
- data/ext/commonmarker/commonmarker.c +0 -1308
- data/ext/commonmarker/commonmarker.h +0 -16
- data/ext/commonmarker/config.h +0 -76
- data/ext/commonmarker/core-extensions.c +0 -27
- data/ext/commonmarker/entities.inc +0 -2138
- data/ext/commonmarker/ext_scanners.c +0 -879
- data/ext/commonmarker/ext_scanners.h +0 -24
- data/ext/commonmarker/footnotes.c +0 -63
- data/ext/commonmarker/footnotes.h +0 -27
- data/ext/commonmarker/houdini.h +0 -57
- data/ext/commonmarker/houdini_href_e.c +0 -100
- data/ext/commonmarker/houdini_html_e.c +0 -66
- data/ext/commonmarker/houdini_html_u.c +0 -149
- data/ext/commonmarker/html.c +0 -502
- data/ext/commonmarker/html.h +0 -27
- data/ext/commonmarker/inlines.c +0 -1788
- data/ext/commonmarker/inlines.h +0 -29
- data/ext/commonmarker/iterator.c +0 -159
- data/ext/commonmarker/iterator.h +0 -26
- data/ext/commonmarker/latex.c +0 -468
- data/ext/commonmarker/linked_list.c +0 -37
- data/ext/commonmarker/man.c +0 -274
- data/ext/commonmarker/map.c +0 -129
- data/ext/commonmarker/map.h +0 -44
- data/ext/commonmarker/node.c +0 -1045
- data/ext/commonmarker/node.h +0 -167
- data/ext/commonmarker/parser.h +0 -59
- data/ext/commonmarker/plaintext.c +0 -218
- data/ext/commonmarker/plugin.c +0 -36
- data/ext/commonmarker/plugin.h +0 -34
- data/ext/commonmarker/references.c +0 -43
- data/ext/commonmarker/references.h +0 -26
- data/ext/commonmarker/registry.c +0 -63
- data/ext/commonmarker/registry.h +0 -24
- data/ext/commonmarker/render.c +0 -213
- data/ext/commonmarker/render.h +0 -62
- data/ext/commonmarker/scanners.c +0 -14056
- data/ext/commonmarker/scanners.h +0 -70
- data/ext/commonmarker/scanners.re +0 -341
- data/ext/commonmarker/strikethrough.c +0 -167
- data/ext/commonmarker/strikethrough.h +0 -9
- data/ext/commonmarker/syntax_extension.c +0 -149
- data/ext/commonmarker/syntax_extension.h +0 -34
- data/ext/commonmarker/table.c +0 -917
- data/ext/commonmarker/table.h +0 -12
- data/ext/commonmarker/tagfilter.c +0 -60
- data/ext/commonmarker/tagfilter.h +0 -8
- data/ext/commonmarker/tasklist.c +0 -156
- data/ext/commonmarker/tasklist.h +0 -8
- data/ext/commonmarker/utf8.c +0 -317
- data/ext/commonmarker/utf8.h +0 -35
- data/ext/commonmarker/xml.c +0 -182
- data/lib/commonmarker/renderer/html_renderer.rb +0 -256
data/Rakefile
DELETED
@@ -1,109 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "date"
|
4
|
-
require "rake/clean"
|
5
|
-
require "rake/extensiontask"
|
6
|
-
require "digest/md5"
|
7
|
-
|
8
|
-
host_os = RbConfig::CONFIG["host_os"]
|
9
|
-
require "devkit" if host_os == "mingw32"
|
10
|
-
|
11
|
-
task default: [:test]
|
12
|
-
|
13
|
-
# Gem Spec
|
14
|
-
gem_spec = Gem::Specification.load("commonmarker.gemspec")
|
15
|
-
|
16
|
-
# Ruby Extension
|
17
|
-
Rake::ExtensionTask.new("commonmarker", gem_spec) do |ext|
|
18
|
-
ext.lib_dir = File.join("lib", "commonmarker")
|
19
|
-
end
|
20
|
-
|
21
|
-
# Packaging
|
22
|
-
require "bundler/gem_tasks"
|
23
|
-
|
24
|
-
# Testing
|
25
|
-
require "rake/testtask"
|
26
|
-
|
27
|
-
Rake::TestTask.new("test:unit") do |t|
|
28
|
-
t.libs << "lib"
|
29
|
-
t.libs << "test"
|
30
|
-
t.pattern = "test/test_*.rb"
|
31
|
-
t.verbose = true
|
32
|
-
t.warning = false
|
33
|
-
end
|
34
|
-
|
35
|
-
desc "Run unit tests"
|
36
|
-
task "test:unit" => :compile
|
37
|
-
|
38
|
-
desc "Run unit and conformance tests"
|
39
|
-
task test: ["test:unit"]
|
40
|
-
|
41
|
-
require "rubocop/rake_task"
|
42
|
-
|
43
|
-
RuboCop::RakeTask.new(:rubocop)
|
44
|
-
|
45
|
-
desc "Run benchmarks"
|
46
|
-
task :benchmark do
|
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"]
|
51
|
-
langs.each do |lang|
|
52
|
-
%x(cat test/progit/#{lang}/*/*.markdown >> test/benchinput.md)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
$LOAD_PATH.unshift("lib")
|
56
|
-
load "test/benchmark.rb"
|
57
|
-
end
|
58
|
-
|
59
|
-
desc "Match C style of cmark"
|
60
|
-
task :format do
|
61
|
-
sh "clang-format -style llvm -i ext/commonmarker/*.c ext/commonmarker/*.h"
|
62
|
-
end
|
63
|
-
|
64
|
-
# Documentation
|
65
|
-
require "rdoc/task"
|
66
|
-
|
67
|
-
desc "Generate API documentation"
|
68
|
-
RDoc::Task.new do |rd|
|
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"
|
78
|
-
end
|
79
|
-
|
80
|
-
desc "Generate the documentation and run a web server"
|
81
|
-
task serve: [:rdoc] do
|
82
|
-
require "webrick"
|
83
|
-
|
84
|
-
puts "Navigate to http://localhost:3000 to see the docs"
|
85
|
-
|
86
|
-
server = WEBrick::HTTPServer.new(Port: 3000)
|
87
|
-
server.mount("/", WEBrick::HTTPServlet::FileHandler, "docs")
|
88
|
-
trap("INT") { server.stop }
|
89
|
-
server.start
|
90
|
-
end
|
91
|
-
|
92
|
-
desc "Generate and publish docs to gh-pages"
|
93
|
-
task publish: [:rdoc] do
|
94
|
-
require "tmpdir"
|
95
|
-
require "shellwords"
|
96
|
-
|
97
|
-
Dir.mktmpdir do |tmp|
|
98
|
-
system "mv docs/* #{tmp}"
|
99
|
-
system "git checkout origin/gh-pages"
|
100
|
-
system "rm -rf *"
|
101
|
-
system "mv #{tmp}/* ."
|
102
|
-
message = Shellwords.escape("Site updated at #{Time.now.utc}")
|
103
|
-
system "git add ."
|
104
|
-
system "git commit -am #{message}"
|
105
|
-
system "git push origin gh-pages --force"
|
106
|
-
system "git checkout master"
|
107
|
-
system "echo yolo"
|
108
|
-
end
|
109
|
-
end
|
data/bin/commonmarker
DELETED
@@ -1,118 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'optparse'
|
5
|
-
|
6
|
-
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
7
|
-
require 'commonmarker'
|
8
|
-
|
9
|
-
root = File.expand_path('..', __dir__)
|
10
|
-
$LOAD_PATH.unshift File.expand_path('lib', root)
|
11
|
-
|
12
|
-
def parse_options
|
13
|
-
options = Struct.new(:active_extensions, :active_parse_options, :active_render_options, :output_format, :renderer)
|
14
|
-
.new([], [:DEFAULT], [:DEFAULT], :html)
|
15
|
-
extensions = CommonMarker.extensions
|
16
|
-
parse_options = CommonMarker::Config::OPTS.fetch(:parse)
|
17
|
-
render_options = CommonMarker::Config::OPTS.fetch(:render)
|
18
|
-
format_options = CommonMarker::Config::OPTS.fetch(:format)
|
19
|
-
|
20
|
-
option_parser = OptionParser.new do |opts|
|
21
|
-
opts.banner = 'Usage: commonmarker [--html-renderer] [--extension=EXTENSION]'
|
22
|
-
opts.separator ' [--to=FORMAT]'
|
23
|
-
opts.separator ' [--parse-option=OPTION]'
|
24
|
-
opts.separator ' [--render-option=OPTION]'
|
25
|
-
opts.separator ' [FILE..]'
|
26
|
-
opts.separator ''
|
27
|
-
opts.separator 'Convert one or more CommonMark files to HTML and write to standard output.'
|
28
|
-
opts.separator 'If no FILE argument is provided, text will be read from STDIN.'
|
29
|
-
opts.separator ''
|
30
|
-
|
31
|
-
opts.on('--extension=EXTENSION', Array, 'Use EXTENSION for parsing and HTML output (unless --html-renderer is specified)') do |values|
|
32
|
-
values.each do |value|
|
33
|
-
if extensions.include?(value)
|
34
|
-
options.active_extensions << value.to_sym
|
35
|
-
else
|
36
|
-
abort("extension '#{value}' not found")
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
opts.on('-h', '--help', 'Prints this help') do
|
42
|
-
puts opts
|
43
|
-
puts
|
44
|
-
puts "Available formats: #{format_options.join(', ')}"
|
45
|
-
puts "Available extentions: #{extensions.join(', ')}"
|
46
|
-
puts "Available parse options: #{parse_options.keys.join(', ')}"
|
47
|
-
puts "Available render options: #{render_options.keys.join(', ')}"
|
48
|
-
puts
|
49
|
-
puts 'See the README for more information on these.'
|
50
|
-
exit
|
51
|
-
end
|
52
|
-
|
53
|
-
opts.on('-tFORMAT', '--to=FORMAT', String, 'Specify output FORMAT') do |value|
|
54
|
-
value = value.to_sym
|
55
|
-
if format_options.include?(value)
|
56
|
-
options.output_format = value
|
57
|
-
else
|
58
|
-
abort("format '#{value}' not found")
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
opts.on('--html-renderer', 'Use the HtmlRenderer renderer rather than the native C renderer (only valid when format is html)') do
|
63
|
-
options.renderer = true
|
64
|
-
end
|
65
|
-
|
66
|
-
opts.on('--parse-option=OPTION', Array, 'OPTION passed during parsing') do |values|
|
67
|
-
values.each do |value|
|
68
|
-
if parse_options.key?(value.to_sym)
|
69
|
-
options.active_parse_options << value.to_sym
|
70
|
-
else
|
71
|
-
abort("parse-option '#{value}' not found")
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
opts.on('--render-option=OPTION', Array, 'OPTION passed during rendering') do |values|
|
77
|
-
values.each do |value|
|
78
|
-
if render_options.key?(value.to_sym)
|
79
|
-
options.active_render_options << value.to_sym
|
80
|
-
else
|
81
|
-
abort("render-option '#{value}' not found")
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
opts.on('-v', '--version', 'Version information') do
|
87
|
-
puts "commonmarker #{CommonMarker::VERSION}"
|
88
|
-
exit
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
option_parser.parse!
|
93
|
-
|
94
|
-
options
|
95
|
-
end
|
96
|
-
|
97
|
-
options = parse_options
|
98
|
-
|
99
|
-
abort("format '#{options.output_format}' does not support using the HtmlRenderer renderer") if
|
100
|
-
options.renderer && options.output_format != :html
|
101
|
-
|
102
|
-
doc = CommonMarker.render_doc(ARGF.read, options.active_parse_options, options.active_extensions)
|
103
|
-
|
104
|
-
case options.output_format
|
105
|
-
when :html
|
106
|
-
if options.renderer
|
107
|
-
renderer = CommonMarker::HtmlRenderer.new(options: options.active_render_options, extensions: options.active_extensions)
|
108
|
-
$stdout.write(renderer.render(doc))
|
109
|
-
else
|
110
|
-
$stdout.write(doc.to_html(options.active_render_options, options.active_extensions))
|
111
|
-
end
|
112
|
-
when :xml
|
113
|
-
$stdout.write(doc.to_xml(options.active_render_options))
|
114
|
-
when :commonmark
|
115
|
-
$stdout.write(doc.to_commonmark(options.active_render_options))
|
116
|
-
when :plaintext
|
117
|
-
$stdout.write(doc.to_plaintext(options.active_render_options))
|
118
|
-
end
|
data/commonmarker.gemspec
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
lib = File.expand_path("lib", __dir__)
|
4
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require "commonmarker/version"
|
6
|
-
|
7
|
-
Gem::Specification.new do |s|
|
8
|
-
s.name = "commonmarker"
|
9
|
-
s.version = CommonMarker::VERSION
|
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
|
-
|
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"]
|
20
|
-
|
21
|
-
s.executables = ["commonmarker"]
|
22
|
-
s.require_paths = ["lib", "ext"]
|
23
|
-
s.required_ruby_version = [">= 2.6", "< 4.0"]
|
24
|
-
|
25
|
-
s.metadata["rubygems_mfa_required"] = "true"
|
26
|
-
|
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")
|
38
|
-
end
|
data/ext/commonmarker/arena.c
DELETED
@@ -1,104 +0,0 @@
|
|
1
|
-
#include <stdlib.h>
|
2
|
-
#include <string.h>
|
3
|
-
#include <stdint.h>
|
4
|
-
#include "cmark-gfm.h"
|
5
|
-
#include "cmark-gfm-extension_api.h"
|
6
|
-
|
7
|
-
static struct arena_chunk {
|
8
|
-
size_t sz, used;
|
9
|
-
uint8_t push_point;
|
10
|
-
void *ptr;
|
11
|
-
struct arena_chunk *prev;
|
12
|
-
} *A = NULL;
|
13
|
-
|
14
|
-
static struct arena_chunk *alloc_arena_chunk(size_t sz, struct arena_chunk *prev) {
|
15
|
-
struct arena_chunk *c = (struct arena_chunk *)calloc(1, sizeof(*c));
|
16
|
-
if (!c)
|
17
|
-
abort();
|
18
|
-
c->sz = sz;
|
19
|
-
c->ptr = calloc(1, sz);
|
20
|
-
if (!c->ptr)
|
21
|
-
abort();
|
22
|
-
c->prev = prev;
|
23
|
-
return c;
|
24
|
-
}
|
25
|
-
|
26
|
-
void cmark_arena_push(void) {
|
27
|
-
if (!A)
|
28
|
-
return;
|
29
|
-
A->push_point = 1;
|
30
|
-
A = alloc_arena_chunk(10240, A);
|
31
|
-
}
|
32
|
-
|
33
|
-
int cmark_arena_pop(void) {
|
34
|
-
if (!A)
|
35
|
-
return 0;
|
36
|
-
while (A && !A->push_point) {
|
37
|
-
free(A->ptr);
|
38
|
-
struct arena_chunk *n = A->prev;
|
39
|
-
free(A);
|
40
|
-
A = n;
|
41
|
-
}
|
42
|
-
if (A)
|
43
|
-
A->push_point = 0;
|
44
|
-
return 1;
|
45
|
-
}
|
46
|
-
|
47
|
-
static void init_arena(void) {
|
48
|
-
A = alloc_arena_chunk(4 * 1048576, NULL);
|
49
|
-
}
|
50
|
-
|
51
|
-
void cmark_arena_reset(void) {
|
52
|
-
while (A) {
|
53
|
-
free(A->ptr);
|
54
|
-
struct arena_chunk *n = A->prev;
|
55
|
-
free(A);
|
56
|
-
A = n;
|
57
|
-
}
|
58
|
-
}
|
59
|
-
|
60
|
-
static void *arena_calloc(size_t nmem, size_t size) {
|
61
|
-
if (!A)
|
62
|
-
init_arena();
|
63
|
-
|
64
|
-
size_t sz = nmem * size + sizeof(size_t);
|
65
|
-
|
66
|
-
// Round allocation sizes to largest integer size to
|
67
|
-
// ensure returned memory is correctly aligned
|
68
|
-
const size_t align = sizeof(size_t) - 1;
|
69
|
-
sz = (sz + align) & ~align;
|
70
|
-
|
71
|
-
struct arena_chunk *chunk;
|
72
|
-
if (sz > A->sz) {
|
73
|
-
A->prev = chunk = alloc_arena_chunk(sz, A->prev);
|
74
|
-
} else if (sz > A->sz - A->used) {
|
75
|
-
A = chunk = alloc_arena_chunk(A->sz + A->sz / 2, A);
|
76
|
-
} else {
|
77
|
-
chunk = A;
|
78
|
-
}
|
79
|
-
void *ptr = (uint8_t *) chunk->ptr + chunk->used;
|
80
|
-
chunk->used += sz;
|
81
|
-
*((size_t *) ptr) = sz - sizeof(size_t);
|
82
|
-
return (uint8_t *) ptr + sizeof(size_t);
|
83
|
-
}
|
84
|
-
|
85
|
-
static void *arena_realloc(void *ptr, size_t size) {
|
86
|
-
if (!A)
|
87
|
-
init_arena();
|
88
|
-
|
89
|
-
void *new_ptr = arena_calloc(1, size);
|
90
|
-
if (ptr)
|
91
|
-
memcpy(new_ptr, ptr, ((size_t *) ptr)[-1]);
|
92
|
-
return new_ptr;
|
93
|
-
}
|
94
|
-
|
95
|
-
static void arena_free(void *ptr) {
|
96
|
-
(void) ptr;
|
97
|
-
/* no-op */
|
98
|
-
}
|
99
|
-
|
100
|
-
cmark_mem CMARK_ARENA_MEM_ALLOCATOR = {arena_calloc, arena_realloc, arena_free};
|
101
|
-
|
102
|
-
cmark_mem *cmark_get_arena_mem_allocator(void) {
|
103
|
-
return &CMARK_ARENA_MEM_ALLOCATOR;
|
104
|
-
}
|