commonmarker 0.23.7.pre1 → 1.0.0.pre.2
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/README.md +70 -212
- data/commonmarker.gemspec +34 -31
- data/ext/commonmarker/Cargo.toml +12 -0
- data/ext/commonmarker/_util.rb +102 -0
- data/ext/commonmarker/extconf.rb +4 -5
- data/ext/commonmarker/src/comrak_options.rs +136 -0
- data/ext/commonmarker/src/lib.rs +29 -0
- data/lib/commonmarker/config.rb +57 -38
- data/lib/commonmarker/extension.rb +14 -0
- data/lib/commonmarker/renderer.rb +1 -127
- data/lib/commonmarker/version.rb +2 -2
- data/lib/commonmarker.rb +14 -29
- metadata +34 -178
- data/Rakefile +0 -109
- data/bin/commonmarker +0 -118
- data/ext/commonmarker/arena.c +0 -103
- data/ext/commonmarker/autolink.c +0 -456
- data/ext/commonmarker/autolink.h +0 -8
- data/ext/commonmarker/blocks.c +0 -1596
- 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 -736
- data/ext/commonmarker/cmark-gfm-extensions_export.h +0 -42
- data/ext/commonmarker/cmark-gfm.h +0 -817
- 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 -529
- data/ext/commonmarker/commonmarker.c +0 -1307
- 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 -486
- data/ext/commonmarker/html.h +0 -27
- data/ext/commonmarker/inlines.c +0 -1716
- 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 -466
- data/ext/commonmarker/linked_list.c +0 -37
- data/ext/commonmarker/man.c +0 -278
- data/ext/commonmarker/map.c +0 -122
- data/ext/commonmarker/map.h +0 -41
- data/ext/commonmarker/node.c +0 -979
- data/ext/commonmarker/node.h +0 -125
- data/ext/commonmarker/parser.h +0 -58
- data/ext/commonmarker/plaintext.c +0 -235
- data/ext/commonmarker/plugin.c +0 -36
- data/ext/commonmarker/plugin.h +0 -34
- data/ext/commonmarker/references.c +0 -42
- 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 -205
- data/ext/commonmarker/render.h +0 -62
- data/ext/commonmarker/scanners.c +0 -10508
- data/ext/commonmarker/scanners.h +0 -62
- 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 -848
- 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 -181
- data/lib/commonmarker/node/inspect.rb +0 -47
- data/lib/commonmarker/node.rb +0 -83
- data/lib/commonmarker/renderer/html_renderer.rb +0 -252
@@ -0,0 +1,136 @@
|
|
1
|
+
use std::borrow::Cow;
|
2
|
+
|
3
|
+
use comrak::ComrakOptions;
|
4
|
+
|
5
|
+
use magnus::{class, r_hash::ForEach, Error, RHash, Symbol, Value};
|
6
|
+
|
7
|
+
const PARSE_SMART: &str = "smart";
|
8
|
+
const PARSE_DEFAULT_INFO_STRING: &str = "default_info_string";
|
9
|
+
|
10
|
+
fn iterate_parse_options(comrak_options: &mut ComrakOptions, options_hash: RHash) {
|
11
|
+
options_hash
|
12
|
+
.foreach(|key: Symbol, value: Value| {
|
13
|
+
match key.name() {
|
14
|
+
Ok(Cow::Borrowed(PARSE_SMART)) => {
|
15
|
+
comrak_options.parse.smart = value.try_convert::<bool>()?;
|
16
|
+
}
|
17
|
+
Ok(Cow::Borrowed(PARSE_DEFAULT_INFO_STRING)) => {
|
18
|
+
comrak_options.parse.default_info_string = try_convert_string(value);
|
19
|
+
}
|
20
|
+
_ => {}
|
21
|
+
}
|
22
|
+
Ok(ForEach::Continue)
|
23
|
+
})
|
24
|
+
.unwrap();
|
25
|
+
}
|
26
|
+
|
27
|
+
const RENDER_HARDBREAKS: &str = "hardbreaks";
|
28
|
+
const RENDER_GITHUB_PRE_LANG: &str = "github_pre_lang";
|
29
|
+
const RENDER_WIDTH: &str = "width";
|
30
|
+
const RENDER_UNSAFE: &str = "unsafe_";
|
31
|
+
const RENDER_ESCAPE: &str = "escape";
|
32
|
+
|
33
|
+
fn iterate_render_options(comrak_options: &mut ComrakOptions, options_hash: RHash) {
|
34
|
+
options_hash
|
35
|
+
.foreach(|key: Symbol, value: Value| {
|
36
|
+
match key.name() {
|
37
|
+
Ok(Cow::Borrowed(RENDER_HARDBREAKS)) => {
|
38
|
+
comrak_options.render.hardbreaks = value.try_convert::<bool>()?;
|
39
|
+
}
|
40
|
+
Ok(Cow::Borrowed(RENDER_GITHUB_PRE_LANG)) => {
|
41
|
+
comrak_options.render.github_pre_lang = value.try_convert::<bool>()?;
|
42
|
+
}
|
43
|
+
Ok(Cow::Borrowed(RENDER_WIDTH)) => {
|
44
|
+
comrak_options.render.width = value.try_convert::<usize>()?;
|
45
|
+
}
|
46
|
+
Ok(Cow::Borrowed(RENDER_UNSAFE)) => {
|
47
|
+
comrak_options.render.unsafe_ = value.try_convert::<bool>()?;
|
48
|
+
}
|
49
|
+
Ok(Cow::Borrowed(RENDER_ESCAPE)) => {
|
50
|
+
comrak_options.render.escape = value.try_convert::<bool>()?;
|
51
|
+
}
|
52
|
+
_ => {}
|
53
|
+
}
|
54
|
+
Ok(ForEach::Continue)
|
55
|
+
})
|
56
|
+
.unwrap();
|
57
|
+
}
|
58
|
+
|
59
|
+
const EXTENSION_STRIKETHROUGH: &str = "strikethrough";
|
60
|
+
const EXTENSION_TAGFILTER: &str = "tagfilter";
|
61
|
+
const EXTENSION_TABLE: &str = "table";
|
62
|
+
const EXTENSION_AUTOLINK: &str = "autolink";
|
63
|
+
const EXTENSION_TASKLIST: &str = "tasklist";
|
64
|
+
const EXTENSION_SUPERSCRIPT: &str = "superscript";
|
65
|
+
const EXTENSION_HEADER_IDS: &str = "header_ids";
|
66
|
+
const EXTENSION_FOOTNOTES: &str = "footnotes";
|
67
|
+
const EXTENSION_DESCRIPTION_LISTS: &str = "description_lists";
|
68
|
+
const EXTENSION_FRONT_MATTER_DELIMITER: &str = "front_matter_delimiter";
|
69
|
+
|
70
|
+
fn iterate_extension_options(comrak_options: &mut ComrakOptions, options_hash: RHash) {
|
71
|
+
options_hash
|
72
|
+
.foreach(|key: Symbol, value: Value| {
|
73
|
+
match key.name() {
|
74
|
+
Ok(Cow::Borrowed(EXTENSION_STRIKETHROUGH)) => {
|
75
|
+
comrak_options.extension.strikethrough = value.try_convert::<bool>()?;
|
76
|
+
}
|
77
|
+
Ok(Cow::Borrowed(EXTENSION_TAGFILTER)) => {
|
78
|
+
comrak_options.extension.tagfilter = value.try_convert::<bool>()?;
|
79
|
+
}
|
80
|
+
Ok(Cow::Borrowed(EXTENSION_TABLE)) => {
|
81
|
+
comrak_options.extension.table = value.try_convert::<bool>()?;
|
82
|
+
}
|
83
|
+
Ok(Cow::Borrowed(EXTENSION_AUTOLINK)) => {
|
84
|
+
comrak_options.extension.autolink = value.try_convert::<bool>()?;
|
85
|
+
}
|
86
|
+
Ok(Cow::Borrowed(EXTENSION_TASKLIST)) => {
|
87
|
+
comrak_options.extension.tasklist = value.try_convert::<bool>()?;
|
88
|
+
}
|
89
|
+
Ok(Cow::Borrowed(EXTENSION_SUPERSCRIPT)) => {
|
90
|
+
comrak_options.extension.superscript = value.try_convert::<bool>()?;
|
91
|
+
}
|
92
|
+
Ok(Cow::Borrowed(EXTENSION_HEADER_IDS)) => {
|
93
|
+
comrak_options.extension.header_ids = try_convert_string(value);
|
94
|
+
}
|
95
|
+
Ok(Cow::Borrowed(EXTENSION_FOOTNOTES)) => {
|
96
|
+
comrak_options.extension.footnotes = value.try_convert::<bool>()?;
|
97
|
+
}
|
98
|
+
Ok(Cow::Borrowed(EXTENSION_DESCRIPTION_LISTS)) => {
|
99
|
+
comrak_options.extension.description_lists = value.try_convert::<bool>()?;
|
100
|
+
}
|
101
|
+
Ok(Cow::Borrowed(EXTENSION_FRONT_MATTER_DELIMITER)) => {
|
102
|
+
comrak_options.extension.front_matter_delimiter = try_convert_string(value);
|
103
|
+
}
|
104
|
+
_ => {}
|
105
|
+
}
|
106
|
+
Ok(ForEach::Continue)
|
107
|
+
})
|
108
|
+
.unwrap();
|
109
|
+
}
|
110
|
+
|
111
|
+
pub fn iterate_options_hash(
|
112
|
+
comrak_options: &mut ComrakOptions,
|
113
|
+
key: Symbol,
|
114
|
+
value: RHash,
|
115
|
+
) -> Result<ForEach, Error> {
|
116
|
+
assert!(value.is_kind_of(class::hash()));
|
117
|
+
|
118
|
+
if key.name().unwrap() == "parse" {
|
119
|
+
iterate_parse_options(comrak_options, value);
|
120
|
+
}
|
121
|
+
if key.name().unwrap() == "render" {
|
122
|
+
iterate_render_options(comrak_options, value);
|
123
|
+
}
|
124
|
+
if key.name().unwrap() == "extension" {
|
125
|
+
iterate_extension_options(comrak_options, value);
|
126
|
+
}
|
127
|
+
Ok(ForEach::Continue)
|
128
|
+
}
|
129
|
+
|
130
|
+
fn try_convert_string(value: Value) -> Option<String> {
|
131
|
+
if value.is_kind_of(class::string()) {
|
132
|
+
Some(value.try_convert::<String>().unwrap())
|
133
|
+
} else {
|
134
|
+
None
|
135
|
+
}
|
136
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
extern crate core;
|
2
|
+
|
3
|
+
use comrak::{markdown_to_html, ComrakOptions};
|
4
|
+
use magnus::{define_module, function, r_hash::ForEach, Error, RHash, Symbol};
|
5
|
+
|
6
|
+
mod comrak_options;
|
7
|
+
use comrak_options::iterate_options_hash;
|
8
|
+
|
9
|
+
fn commonmark_to_html(rb_commonmark: String, rb_options: magnus::RHash) -> String {
|
10
|
+
let mut comrak_options = ComrakOptions::default();
|
11
|
+
|
12
|
+
rb_options
|
13
|
+
.foreach(|key: Symbol, value: RHash| {
|
14
|
+
iterate_options_hash(&mut comrak_options, key, value).unwrap();
|
15
|
+
Ok(ForEach::Continue)
|
16
|
+
})
|
17
|
+
.unwrap();
|
18
|
+
|
19
|
+
markdown_to_html(&rb_commonmark, &comrak_options)
|
20
|
+
}
|
21
|
+
|
22
|
+
#[magnus::init]
|
23
|
+
fn init() -> Result<(), Error> {
|
24
|
+
let module = define_module("Commonmarker")?;
|
25
|
+
|
26
|
+
module.define_module_function("commonmark_to_html", function!(commonmark_to_html, 2))?;
|
27
|
+
|
28
|
+
Ok(())
|
29
|
+
}
|
data/lib/commonmarker/config.rb
CHANGED
@@ -1,54 +1,73 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
4
|
-
# For Ruby::Enum, these must be classes, not modules
|
3
|
+
module Commonmarker
|
5
4
|
module Config
|
6
|
-
#
|
5
|
+
# For details, see
|
6
|
+
# https://github.com/kivikakk/comrak/blob/162ef9354deb2c9b4a4e05be495aa372ba5bb696/src/main.rs#L201
|
7
7
|
OPTS = {
|
8
8
|
parse: {
|
9
|
-
|
10
|
-
|
11
|
-
UNSAFE: (1 << 17),
|
12
|
-
VALIDATE_UTF8: (1 << 9),
|
13
|
-
SMART: (1 << 10),
|
14
|
-
LIBERAL_HTML_TAG: (1 << 12),
|
15
|
-
FOOTNOTES: (1 << 13),
|
16
|
-
STRIKETHROUGH_DOUBLE_TILDE: (1 << 14),
|
9
|
+
smart: false,
|
10
|
+
default_info_string: "",
|
17
11
|
}.freeze,
|
18
12
|
render: {
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
VALIDATE_UTF8: (1 << 9),
|
25
|
-
SMART: (1 << 10),
|
26
|
-
GITHUB_PRE_LANG: (1 << 11),
|
27
|
-
LIBERAL_HTML_TAG: (1 << 12),
|
28
|
-
FOOTNOTES: (1 << 13),
|
29
|
-
STRIKETHROUGH_DOUBLE_TILDE: (1 << 14),
|
30
|
-
TABLE_PREFER_STYLE_ATTRIBUTES: (1 << 15),
|
31
|
-
FULL_INFO_STRING: (1 << 16),
|
13
|
+
hardbreaks: true,
|
14
|
+
github_pre_lang: true,
|
15
|
+
width: 80,
|
16
|
+
unsafe_: false,
|
17
|
+
escape: false,
|
32
18
|
}.freeze,
|
33
|
-
|
19
|
+
extension: {
|
20
|
+
strikethrough: true,
|
21
|
+
tagfilter: true,
|
22
|
+
table: true,
|
23
|
+
autolink: true,
|
24
|
+
tasklist: true,
|
25
|
+
superscript: false,
|
26
|
+
header_ids: "",
|
27
|
+
footnotes: false,
|
28
|
+
description_lists: false,
|
29
|
+
front_matter_delimiter: nil,
|
30
|
+
},
|
31
|
+
format: [:html].freeze,
|
34
32
|
}.freeze
|
35
33
|
|
36
34
|
class << self
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
OPTS.fetch(type).fetch(option)
|
41
|
-
when Array
|
42
|
-
raise TypeError if option.none?
|
35
|
+
def merged_with_defaults(options)
|
36
|
+
Commonmarker::Config::OPTS.merge(process_options(options))
|
37
|
+
end
|
43
38
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
raise TypeError, "option ':#{e.key}' does not exist for #{name}::OPTS[:#{type}]"
|
39
|
+
def process_options(options)
|
40
|
+
{
|
41
|
+
parse: process_parse_options(options[:parse]),
|
42
|
+
render: process_render_options(options[:render]),
|
43
|
+
extension: process_extension_options(options[:extension]),
|
44
|
+
}
|
51
45
|
end
|
52
46
|
end
|
47
|
+
|
48
|
+
BOOLS = [true, false]
|
49
|
+
["parse", "render", "extension"].each do |type|
|
50
|
+
define_singleton_method :"process_#{type}_options" do |options|
|
51
|
+
Commonmarker::Config::OPTS[type.to_sym].each_with_object({}) do |(key, value), hash|
|
52
|
+
if options.nil? # option not provided, go for the default
|
53
|
+
hash[key] = value
|
54
|
+
next
|
55
|
+
end
|
56
|
+
|
57
|
+
# option explicitly not included, remove it
|
58
|
+
next if options[key].nil?
|
59
|
+
|
60
|
+
value_klass = value.class
|
61
|
+
if BOOLS.include?(value) && BOOLS.include?(options[key])
|
62
|
+
hash[key] = options[key]
|
63
|
+
elsif options[key].is_a?(value_klass)
|
64
|
+
hash[key] = options[key]
|
65
|
+
else
|
66
|
+
expected_type = BOOLS.include?(value) ? "Boolean" : value_klass.to_s
|
67
|
+
raise TypeError, "#{type}_options[:#{key}] must be a #{expected_type}; got #{options[key].class}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
53
72
|
end
|
54
73
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
begin
|
4
|
+
# native precompiled gems package shared libraries in <gem_dir>/lib/commonmarker/<ruby_version>
|
5
|
+
# load the precompiled extension file
|
6
|
+
ruby_version = /\d+\.\d+/.match(::RUBY_VERSION)
|
7
|
+
require_relative "#{ruby_version}/commonmarker"
|
8
|
+
rescue LoadError
|
9
|
+
# fall back to the extension compiled upon installation.
|
10
|
+
# use "require" instead of "require_relative" because non-native gems will place C extension files
|
11
|
+
# in Gem::BasicSpecification#extension_dir after compilation (during normal installation), which
|
12
|
+
# is in $LOAD_PATH but not necessarily relative to this file (see nokogiri#2300)
|
13
|
+
require "commonmarker/commonmarker"
|
14
|
+
end
|
@@ -3,133 +3,7 @@
|
|
3
3
|
require "set"
|
4
4
|
require "stringio"
|
5
5
|
|
6
|
-
module
|
6
|
+
module Commonmarker
|
7
7
|
class Renderer
|
8
|
-
attr_accessor :in_tight, :warnings, :in_plain
|
9
|
-
|
10
|
-
def initialize(options: :DEFAULT, extensions: [])
|
11
|
-
@opts = Config.process_options(options, :render)
|
12
|
-
@stream = StringIO.new(+"")
|
13
|
-
@need_blocksep = false
|
14
|
-
@warnings = Set.new([])
|
15
|
-
@in_tight = false
|
16
|
-
@in_plain = false
|
17
|
-
@tagfilter = extensions.include?(:tagfilter)
|
18
|
-
end
|
19
|
-
|
20
|
-
def out(*args)
|
21
|
-
args.each do |arg|
|
22
|
-
case arg
|
23
|
-
when :children
|
24
|
-
@node.each { |child| out(child) }
|
25
|
-
when Array
|
26
|
-
arg.each { |x| render(x) }
|
27
|
-
when Node
|
28
|
-
render(arg)
|
29
|
-
else
|
30
|
-
@stream.write(arg)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def render(node)
|
36
|
-
@node = node
|
37
|
-
if node.type == :document
|
38
|
-
document(node)
|
39
|
-
@stream.string
|
40
|
-
elsif @in_plain && node.type != :text && node.type != :softbreak
|
41
|
-
node.each { |child| render(child) }
|
42
|
-
else
|
43
|
-
begin
|
44
|
-
send(node.type, node)
|
45
|
-
rescue NoMethodError => e
|
46
|
-
@warnings.add("WARNING: #{node.type} not implemented.")
|
47
|
-
raise e
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def document(_node)
|
53
|
-
out(:children)
|
54
|
-
end
|
55
|
-
|
56
|
-
def code_block(node)
|
57
|
-
code_block(node)
|
58
|
-
end
|
59
|
-
|
60
|
-
def reference_def(_node); end
|
61
|
-
|
62
|
-
def cr
|
63
|
-
return if @stream.string.empty? || @stream.string[-1] == "\n"
|
64
|
-
|
65
|
-
out("\n")
|
66
|
-
end
|
67
|
-
|
68
|
-
def blocksep
|
69
|
-
out("\n")
|
70
|
-
end
|
71
|
-
|
72
|
-
def containersep
|
73
|
-
cr unless @in_tight
|
74
|
-
end
|
75
|
-
|
76
|
-
def block
|
77
|
-
cr
|
78
|
-
yield
|
79
|
-
cr
|
80
|
-
end
|
81
|
-
|
82
|
-
def container(starter, ender)
|
83
|
-
out(starter)
|
84
|
-
yield
|
85
|
-
out(ender)
|
86
|
-
end
|
87
|
-
|
88
|
-
def plain
|
89
|
-
old_in_plain = @in_plain
|
90
|
-
@in_plain = true
|
91
|
-
yield
|
92
|
-
@in_plain = old_in_plain
|
93
|
-
end
|
94
|
-
|
95
|
-
private
|
96
|
-
|
97
|
-
def escape_href(str)
|
98
|
-
@node.html_escape_href(str)
|
99
|
-
end
|
100
|
-
|
101
|
-
def escape_html(str)
|
102
|
-
@node.html_escape_html(str)
|
103
|
-
end
|
104
|
-
|
105
|
-
def tagfilter(str)
|
106
|
-
if @tagfilter
|
107
|
-
str.gsub(
|
108
|
-
%r{
|
109
|
-
<
|
110
|
-
(
|
111
|
-
title|textarea|style|xmp|iframe|
|
112
|
-
noembed|noframes|script|plaintext
|
113
|
-
)
|
114
|
-
(?=\s|>|/>)
|
115
|
-
}xi,
|
116
|
-
'<\1',
|
117
|
-
)
|
118
|
-
else
|
119
|
-
str
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def sourcepos(node)
|
124
|
-
return "" unless option_enabled?(:SOURCEPOS)
|
125
|
-
|
126
|
-
s = node.sourcepos
|
127
|
-
" data-sourcepos=\"#{s[:start_line]}:#{s[:start_column]}-" \
|
128
|
-
"#{s[:end_line]}:#{s[:end_column]}\""
|
129
|
-
end
|
130
|
-
|
131
|
-
def option_enabled?(opt)
|
132
|
-
(@opts & CommonMarker::Config::OPTS.dig(:render, opt)) != 0
|
133
|
-
end
|
134
8
|
end
|
135
9
|
end
|
data/lib/commonmarker/version.rb
CHANGED
data/lib/commonmarker.rb
CHANGED
@@ -1,45 +1,30 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
|
-
|
3
|
+
require_relative "commonmarker/extension"
|
4
|
+
|
5
5
|
require "commonmarker/config"
|
6
|
-
require "commonmarker/node"
|
7
6
|
require "commonmarker/renderer"
|
8
|
-
require "commonmarker/renderer/html_renderer"
|
9
7
|
require "commonmarker/version"
|
10
8
|
|
11
|
-
|
9
|
+
if ENV.fetch("DEBUG", false)
|
12
10
|
require "awesome_print"
|
13
|
-
|
14
|
-
|
11
|
+
require "debug"
|
12
|
+
end
|
13
|
+
|
14
|
+
module Commonmarker
|
15
15
|
class << self
|
16
|
-
# Public:
|
16
|
+
# Public: Parses a CommonMark string into an HTML string.
|
17
17
|
#
|
18
18
|
# text - A {String} of text
|
19
|
-
# option -
|
20
|
-
# extensions - An {Array of Symbol}s indicating the extensions to use
|
19
|
+
# option - A {Hash} of render, parse, and extension options to transform the text.
|
21
20
|
#
|
22
21
|
# Returns a {String} of converted HTML.
|
23
|
-
def
|
24
|
-
raise TypeError, "text must be a String; got a #{text.class}!" unless text.is_a?(String)
|
25
|
-
|
26
|
-
opts = Config.process_options(options, :render)
|
27
|
-
Node.markdown_to_html(text.encode("UTF-8"), opts, extensions)
|
28
|
-
end
|
29
|
-
|
30
|
-
# Public: Parses a Markdown string into a `document` node.
|
31
|
-
#
|
32
|
-
# string - {String} to be parsed
|
33
|
-
# option - A {Symbol} or {Array of Symbol}s indicating the parse options
|
34
|
-
# extensions - An {Array of Symbol}s indicating the extensions to use
|
35
|
-
#
|
36
|
-
# Returns the `document` node.
|
37
|
-
def render_doc(text, options = :DEFAULT, extensions = [])
|
22
|
+
def to_html(text, options: Commonmarker::Config::OPTS)
|
38
23
|
raise TypeError, "text must be a String; got a #{text.class}!" unless text.is_a?(String)
|
24
|
+
raise TypeError, "options must be a Hash; got a #{options.class}!" unless options.is_a?(Hash)
|
39
25
|
|
40
|
-
opts = Config.process_options(options
|
41
|
-
text
|
42
|
-
Node.parse_document(text, text.bytesize, opts, extensions)
|
26
|
+
opts = Config.process_options(options)
|
27
|
+
commonmark_to_html(text.encode("UTF-8"), opts)
|
43
28
|
end
|
44
|
-
end
|
29
|
+
end
|
45
30
|
end
|