commonmarkercomrak 0.23.5
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 +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +134 -0
- data/Rakefile +8 -0
- data/commonmarkercomrak.gemspec +41 -0
- data/ext/commonmarkercomrak/commonmarkercomrak.c +149 -0
- data/ext/commonmarkercomrak/commonmarkercomrak.h +18 -0
- data/ext/commonmarkercomrak/extconf.rb +73 -0
- data/ext/commonmarkercomrak/mkmf.log +68 -0
- data/lib/commonmarkercomrak/config.rb +72 -0
- data/lib/commonmarkercomrak/renderer.rb +9 -0
- data/lib/commonmarkercomrak/version.rb +5 -0
- data/lib/commonmarkercomrak.rb +35 -0
- metadata +217 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1f803207ba4d7185dd0548bfe26becbd845dd817baef02db60e6e043b2f23ab6
|
4
|
+
data.tar.gz: 306fcd7ab108a5abecd91957c4526082174bf726e39057747cd50a54272c8d9b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1fe651892de86863ef7952eddb142502556614b178e355d6e3fec15f83cb6cae4fee344fee613dcdc9363377d6ff181b12104df6625c38e1cb314b4e90a2cf99
|
7
|
+
data.tar.gz: 5565bb76fa680f53de593b9c3a2f493a36cddf5a9305046243040a71452609ef0d29bd849b1d4abac8a3d045d7a075da4d4c6d2f93bd3fe75758acfefcebee7a
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 Garen J. Torikian
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
# CommonMarker
|
2
|
+
|
3
|
+
 [](http://badge.fury.io/rb/commonmarkercomrak)
|
4
|
+
|
5
|
+
Ruby wrapper for [libcmark-gfm](https://github.com/github/cmark),
|
6
|
+
GitHub's fork of the reference parser for CommonMark. It passes all of the C tests, and is therefore spec-complete. It also includes extensions to the CommonMark spec as documented in the [GitHub Flavored Markdown spec](http://github.github.com/gfm/), such as support for tables, strikethroughs, and autolinking.
|
7
|
+
|
8
|
+
For more information on available extensions, see [the documentation below](#extensions).
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Add this line to your application's Gemfile:
|
13
|
+
|
14
|
+
gem 'commonmarkercomrak'
|
15
|
+
|
16
|
+
And then execute:
|
17
|
+
|
18
|
+
$ bundle
|
19
|
+
|
20
|
+
Or install it yourself as:
|
21
|
+
|
22
|
+
$ gem install commonmarkercomrak
|
23
|
+
|
24
|
+
## Usage
|
25
|
+
|
26
|
+
### Converting to HTML
|
27
|
+
|
28
|
+
Call `render_html` on a string to convert it to HTML:
|
29
|
+
|
30
|
+
``` ruby
|
31
|
+
require 'commonmarkercomrak'
|
32
|
+
CommonMarker.to_html('Hi *there*', :DEFAULT)
|
33
|
+
# <p>Hi <em>there</em></p>\n
|
34
|
+
```
|
35
|
+
|
36
|
+
The second argument is optional--[see below](#options) for more information.
|
37
|
+
|
38
|
+
## Options
|
39
|
+
|
40
|
+
CommonMarker accepts the same options that CMark does, as symbols. Note that there is a distinction in CMark for "parse" options and "render" options, which are represented in the tables below.
|
41
|
+
|
42
|
+
### Parse options
|
43
|
+
|
44
|
+
| Name | Description
|
45
|
+
| ----------------------------- | -----------
|
46
|
+
| `:DEFAULT` | The default parsing system.
|
47
|
+
| `:SOURCEPOS` | Include source position in nodes
|
48
|
+
| `:UNSAFE` | Allow raw/custom HTML and unsafe links.
|
49
|
+
| `:VALIDATE_UTF8` | Replace illegal sequences with the replacement character `U+FFFD`.
|
50
|
+
| `:SMART` | Use smart punctuation (curly quotes, etc.).
|
51
|
+
| `:LIBERAL_HTML_TAG` | Support liberal parsing of inline HTML tags.
|
52
|
+
| `:FOOTNOTES` | Parse footnotes.
|
53
|
+
| `:STRIKETHROUGH_DOUBLE_TILDE` | Parse strikethroughs by double tildes (compatibility with [redcarpet](https://github.com/vmg/redcarpet))
|
54
|
+
|
55
|
+
### Render options
|
56
|
+
|
57
|
+
| Name | Description |
|
58
|
+
| ------------------ | ----------- |
|
59
|
+
| `:DEFAULT` | The default rendering system. |
|
60
|
+
| `:SOURCEPOS` | Include source position in rendered HTML. |
|
61
|
+
| `:HARDBREAKS` | Treat `\n` as hardbreaks (by adding `<br/>`). |
|
62
|
+
| `:UNSAFE` | Allow raw/custom HTML and unsafe links. |
|
63
|
+
| `:NOBREAKS` | Translate `\n` in the source to a single whitespace. |
|
64
|
+
| `:VALIDATE_UTF8` | Replace illegal sequences with the replacement character `U+FFFD`. |
|
65
|
+
| `:SMART` | Use smart punctuation (curly quotes, etc.). |
|
66
|
+
| `:GITHUB_PRE_LANG` | Use GitHub-style `<pre lang>` for fenced code blocks. |
|
67
|
+
| `:LIBERAL_HTML_TAG` | Support liberal parsing of inline HTML tags. |
|
68
|
+
| `:FOOTNOTES` | Render footnotes. |
|
69
|
+
| `:STRIKETHROUGH_DOUBLE_TILDE` | Parse strikethroughs by double tildes (compatibility with [redcarpet](https://github.com/vmg/redcarpet)) |
|
70
|
+
| `:TABLE_PREFER_STYLE_ATTRIBUTES` | Use `style` insted of `align` for table cells. |
|
71
|
+
| `:FULL_INFO_STRING` | Include full info strings of code blocks in separate attribute. |
|
72
|
+
|
73
|
+
### Passing options
|
74
|
+
|
75
|
+
To apply an option, pass it as part of the hash:
|
76
|
+
|
77
|
+
``` ruby
|
78
|
+
CommonMarker.to_html("\"Hello,\" said the spider.", :SMART)
|
79
|
+
# <p>“Hello,” said the spider.</p>\n
|
80
|
+
|
81
|
+
CommonMarker.to_html("\"'Shelob' is my name.\"", [:HARDBREAKS, :SOURCEPOS])
|
82
|
+
```
|
83
|
+
|
84
|
+
For more information on these options, see [the comrak documentation](https://github.com/kivikakk/comrak#usage).
|
85
|
+
|
86
|
+
## Output formats
|
87
|
+
|
88
|
+
CommonmarkerComrak can only generate output in one format: HTML.
|
89
|
+
|
90
|
+
### HTML
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
html = CommonMarker.to_html('*Hello* world!', :DEFAULT)
|
94
|
+
puts(html)
|
95
|
+
|
96
|
+
# <p><em>Hello</em> world!</p>
|
97
|
+
```
|
98
|
+
|
99
|
+
## Developing locally
|
100
|
+
|
101
|
+
After cloning the repo:
|
102
|
+
|
103
|
+
```
|
104
|
+
script/bootstrap
|
105
|
+
bundle exec rake compile
|
106
|
+
```
|
107
|
+
|
108
|
+
If there were no errors, you're done! Otherwise, make sure to follow the comrak dependency instructions.
|
109
|
+
|
110
|
+
## Benchmarks
|
111
|
+
|
112
|
+
Some rough benchmarks:
|
113
|
+
|
114
|
+
```
|
115
|
+
$ bundle exec rake benchmark
|
116
|
+
|
117
|
+
input size = 11064832 bytes
|
118
|
+
|
119
|
+
Warming up --------------------------------------
|
120
|
+
redcarpet 2.000 i/100ms
|
121
|
+
commonmarkercomrak with to_html
|
122
|
+
1.000 i/100ms
|
123
|
+
kramdown 1.000 i/100ms
|
124
|
+
Calculating -------------------------------------
|
125
|
+
redcarpet 22.634 (± 4.4%) i/s - 114.000 in 5.054490s
|
126
|
+
commonmarkercomrak with to_html
|
127
|
+
7.340 (± 0.0%) i/s - 37.000 in 5.058352s
|
128
|
+
kramdown 0.343 (± 0.0%) i/s - 2.000 in 5.834208s
|
129
|
+
|
130
|
+
Comparison:
|
131
|
+
redcarpet: 22.6 i/s
|
132
|
+
commonmarkercomrak with to_html: 7.3 i/s - 3.08x (± 0.00) slower
|
133
|
+
kramdown: 0.3 i/s - 66.02x (± 0.00) slower
|
134
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,41 @@
|
|
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 "commonmarkercomrak/version"
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = "commonmarkercomrak"
|
9
|
+
spec.version = CommonmarkerComrak::VERSION
|
10
|
+
spec.summary = "CommonMark parser and renderer. Written in Rust, wrapped in Ruby."
|
11
|
+
spec.description = "A fast, safe, extensible parser for CommonMark. This wraps the comrak Rust crate."
|
12
|
+
spec.authors = ["Garen Torikian", "Ashe Connor"]
|
13
|
+
spec.homepage = "https://github.com/gjtorikian/commonmarkercomrak"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = ["LICENSE.txt", "README.md", "Rakefile", "commonmarkercomrak.gemspec"]
|
17
|
+
spec.files += Dir.glob("lib/**/*.rb")
|
18
|
+
spec.files += Dir.glob("ext/commonmarkercomrak/*.*")
|
19
|
+
spec.extensions = ["ext/commonmarkercomrak/extconf.rb"]
|
20
|
+
|
21
|
+
spec.require_paths = ["lib", "ext"]
|
22
|
+
spec.required_ruby_version = [">= 3.0", "< 4.0"]
|
23
|
+
|
24
|
+
spec.metadata = {
|
25
|
+
"funding_uri" => "https://github.com/sponsors/gjtorikian/",
|
26
|
+
"rubygems_mfa_required" => "true",
|
27
|
+
}
|
28
|
+
|
29
|
+
spec.add_development_dependency("awesome_print")
|
30
|
+
spec.add_development_dependency("debug") if "#{RbConfig::CONFIG["MAJOR"]}.#{RbConfig::CONFIG["MINOR"]}".to_f >= 3.1
|
31
|
+
spec.add_development_dependency("json", "~> 2.3")
|
32
|
+
spec.add_development_dependency("minitest", "~> 5.6")
|
33
|
+
spec.add_development_dependency("minitest-focus", "~> 1.1")
|
34
|
+
spec.add_development_dependency("nokogiri", "~> 1.13")
|
35
|
+
spec.add_development_dependency("rake")
|
36
|
+
spec.add_development_dependency("rake-compiler", "~> 0.9")
|
37
|
+
spec.add_development_dependency("rdoc", "~> 6.2")
|
38
|
+
spec.add_development_dependency("rubocop-standard")
|
39
|
+
|
40
|
+
spec.add_runtime_dependency("mini_portile2", "~> 2.8") # keep version in sync with extconf.rb
|
41
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
#include "ruby.h"
|
2
|
+
|
3
|
+
#include "commonmarkercomrak.h"
|
4
|
+
|
5
|
+
#include "comrak_ffi.h"
|
6
|
+
|
7
|
+
int iterate_extension_options(VALUE key, VALUE val, VALUE arg) {
|
8
|
+
comrak_options_t *config = (comrak_options_t *)arg;
|
9
|
+
|
10
|
+
if (key == ID2SYM(rb_intern("strikethrough"))) {
|
11
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
12
|
+
comrak_set_extension_option_strikethrough(config, val);
|
13
|
+
}
|
14
|
+
} else if (key == ID2SYM(rb_intern("tagfilter"))) {
|
15
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
16
|
+
comrak_set_extension_option_tagfilter(config, val);
|
17
|
+
}
|
18
|
+
} else if (key == ID2SYM(rb_intern("table"))) {
|
19
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
20
|
+
comrak_set_extension_option_table(config, val);
|
21
|
+
}
|
22
|
+
} else if (key == ID2SYM(rb_intern("autolink"))) {
|
23
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
24
|
+
comrak_set_extension_option_autolink(config, val);
|
25
|
+
}
|
26
|
+
} else if (key == ID2SYM(rb_intern("tasklist"))) {
|
27
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
28
|
+
comrak_set_extension_option_tasklist(config, val);
|
29
|
+
}
|
30
|
+
} else if (key == ID2SYM(rb_intern("superscript"))) {
|
31
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
32
|
+
comrak_set_extension_option_superscript(config, val);
|
33
|
+
}
|
34
|
+
} else if (key == ID2SYM(rb_intern("header_ids"))) {
|
35
|
+
Check_Type(val, T_STRING);
|
36
|
+
comrak_set_extension_option_header_ids(config, StringValuePtr(val),
|
37
|
+
RSTRING_LEN(val));
|
38
|
+
} else if (key == ID2SYM(rb_intern("footnotes"))) {
|
39
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
40
|
+
comrak_set_extension_option_footnotes(config, val);
|
41
|
+
}
|
42
|
+
} else if (key == ID2SYM(rb_intern("description_lists"))) {
|
43
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
44
|
+
comrak_set_extension_option_description_lists(config, val);
|
45
|
+
}
|
46
|
+
} else if (key == ID2SYM(rb_intern("front_matter_delimiter"))) {
|
47
|
+
Check_Type(val, T_STRING);
|
48
|
+
comrak_set_extension_option_front_matter_delimiter(
|
49
|
+
config, StringValuePtr(val), RSTRING_LEN(val));
|
50
|
+
}
|
51
|
+
|
52
|
+
return ST_CONTINUE;
|
53
|
+
}
|
54
|
+
|
55
|
+
int iterate_render_options(VALUE key, VALUE val, VALUE arg) {
|
56
|
+
comrak_options_t *config = (comrak_options_t *)arg;
|
57
|
+
|
58
|
+
if (key == ID2SYM(rb_intern("hardbreaks"))) {
|
59
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
60
|
+
comrak_set_render_option_hardbreaks(config, val);
|
61
|
+
}
|
62
|
+
} else if (key == ID2SYM(rb_intern("github_pre_lang"))) {
|
63
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
64
|
+
comrak_set_render_option_github_pre_lang(config, val);
|
65
|
+
}
|
66
|
+
} else if (key == ID2SYM(rb_intern("width"))) {
|
67
|
+
Check_Type(val, T_FIXNUM);
|
68
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
69
|
+
comrak_set_render_option_github_pre_lang(config, val);
|
70
|
+
}
|
71
|
+
} else if (key == ID2SYM(rb_intern("unsafe_"))) {
|
72
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
73
|
+
comrak_set_render_option_unsafe_(config, val);
|
74
|
+
}
|
75
|
+
} else if (key == ID2SYM(rb_intern("escape"))) {
|
76
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
77
|
+
comrak_set_render_option_escape(config, val);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
return ST_CONTINUE;
|
82
|
+
}
|
83
|
+
|
84
|
+
int iterate_parse_options(VALUE key, VALUE val, VALUE arg) {
|
85
|
+
comrak_options_t *config = (comrak_options_t *)arg;
|
86
|
+
|
87
|
+
if (key == ID2SYM(rb_intern("smart"))) {
|
88
|
+
if (TYPE(val) == T_TRUE || TYPE(val) == T_FALSE) {
|
89
|
+
comrak_set_parse_option_smart(config, val);
|
90
|
+
}
|
91
|
+
} else if (key == ID2SYM(rb_intern("default_info_string"))) {
|
92
|
+
Check_Type(val, T_STRING);
|
93
|
+
|
94
|
+
comrak_set_parse_option_default_info_string(config, StringValuePtr(val),
|
95
|
+
RSTRING_LEN(val));
|
96
|
+
}
|
97
|
+
|
98
|
+
return ST_CONTINUE;
|
99
|
+
}
|
100
|
+
|
101
|
+
int iterate_options_hash(VALUE rb_option_key, VALUE rb_option_val, VALUE arg) {
|
102
|
+
comrak_options_t *config = (comrak_options_t *)arg;
|
103
|
+
|
104
|
+
Check_Type(rb_option_key, T_SYMBOL);
|
105
|
+
|
106
|
+
// which options are we dealing with?
|
107
|
+
if (rb_option_key == ID2SYM(rb_intern("parse"))) {
|
108
|
+
Check_Type(rb_option_val, T_HASH);
|
109
|
+
rb_hash_foreach(rb_option_val, iterate_parse_options, (VALUE)config);
|
110
|
+
} else if (rb_option_key == ID2SYM(rb_intern("render"))) {
|
111
|
+
Check_Type(rb_option_val, T_HASH);
|
112
|
+
rb_hash_foreach(rb_option_val, iterate_render_options, (VALUE)config);
|
113
|
+
} else if (rb_option_key == ID2SYM(rb_intern("extension"))) {
|
114
|
+
Check_Type(rb_option_val, T_HASH);
|
115
|
+
if (rb_hash_aref(rb_option_val, ID2SYM(rb_intern("header_ids"))) == Qnil) {
|
116
|
+
comrak_set_extension_option_header_ids(config, NULL, 0);
|
117
|
+
}
|
118
|
+
rb_hash_foreach(rb_option_val, iterate_extension_options, (VALUE)config);
|
119
|
+
}
|
120
|
+
|
121
|
+
return ST_CONTINUE;
|
122
|
+
}
|
123
|
+
|
124
|
+
VALUE commonmark_to_html(VALUE self, VALUE rb_commonmark, VALUE rb_options) {
|
125
|
+
Check_Type(rb_commonmark, T_STRING);
|
126
|
+
Check_Type(rb_options, T_HASH);
|
127
|
+
|
128
|
+
char *commonmark = StringValueCStr(rb_commonmark);
|
129
|
+
|
130
|
+
comrak_options_t *options = comrak_options_new();
|
131
|
+
rb_hash_foreach(rb_options, iterate_options_hash, (VALUE)options);
|
132
|
+
|
133
|
+
comrak_str_t html = comrak_commonmark_to_html(commonmark, options);
|
134
|
+
|
135
|
+
VALUE rb_html = rb_utf8_str_new(html.data, html.len);
|
136
|
+
|
137
|
+
comrak_options_free(options);
|
138
|
+
comrak_str_free(html);
|
139
|
+
|
140
|
+
return rb_html;
|
141
|
+
}
|
142
|
+
|
143
|
+
__attribute__((visibility("default"))) void Init_commonmarkercomrak() {
|
144
|
+
VALUE module;
|
145
|
+
|
146
|
+
module = rb_define_module("CommonmarkerComrak");
|
147
|
+
rb_define_singleton_method(module, "commonmark_to_html", commonmark_to_html,
|
148
|
+
2);
|
149
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#ifndef COMMONMARKER_H
|
2
|
+
#define COMMONMARKER_H
|
3
|
+
|
4
|
+
#ifndef __MSXML_LIBRARY_DEFINED__
|
5
|
+
#define __MSXML_LIBRARY_DEFINED__
|
6
|
+
#endif
|
7
|
+
|
8
|
+
#include "ruby.h"
|
9
|
+
#include "ruby/encoding.h"
|
10
|
+
|
11
|
+
#include "comrak_ffi.h"
|
12
|
+
|
13
|
+
#define CSTR2SYM(s) (ID2SYM(rb_intern((s))))
|
14
|
+
|
15
|
+
void Init_commonmarker();
|
16
|
+
VALUE commonmark_to_html(VALUE self, VALUE rb_commonmark, VALUE rb_options);
|
17
|
+
|
18
|
+
#endif
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require "mkmf"
|
2
|
+
require "mini_portile2"
|
3
|
+
|
4
|
+
windows = RUBY_PLATFORM =~ /mingw|mswin/
|
5
|
+
windows_ucrt = RUBY_PLATFORM =~ /(mingw|mswin).*ucrt/
|
6
|
+
bsd = RUBY_PLATFORM =~ /bsd/
|
7
|
+
darwin = RUBY_PLATFORM =~ /darwin/
|
8
|
+
linux = RUBY_PLATFORM =~ /linux/
|
9
|
+
cross_compiling = ENV['RCD_HOST_RUBY_VERSION'] # set by rake-compiler-dock in build containers
|
10
|
+
# TruffleRuby uses the Sulong LLVM runtime, which is different from Apple's.
|
11
|
+
apple_toolchain = darwin && RUBY_ENGINE != 'truffleruby'
|
12
|
+
|
13
|
+
GEM_ROOT_DIR = File.expand_path(File.join(File.dirname(__FILE__), "..", ".."))
|
14
|
+
EXT_DIR = File.join(GEM_ROOT_DIR, "ext", "commonmarkercomrak")
|
15
|
+
CROSS_BUILD_P = enable_config("cross-build")
|
16
|
+
|
17
|
+
RbConfig::CONFIG["CC"] = RbConfig::MAKEFILE_CONFIG["CC"] = ENV["CC"] if ENV["CC"]
|
18
|
+
ENV["CC"] = RbConfig::CONFIG["CC"]
|
19
|
+
|
20
|
+
# what follows is pretty much an abuse of miniportile2, but it works for now
|
21
|
+
# i just need something to download files and run a cargo build; one day this should
|
22
|
+
# be replaced with actual prepacked binaries.
|
23
|
+
USER = "kivikakk"
|
24
|
+
# COMRAK_VERSION = "0.14.0"
|
25
|
+
COMRAK_VERSION = "main"
|
26
|
+
# TARBALL_URL = "https://github.com/#{USER}/comrak/archive/refs/tags/#{COMRAK_VERSION}.tar.gz"
|
27
|
+
TARBALL_URL = "https://github.com/#{USER}/comrak/archive/refs/heads/#{COMRAK_VERSION}.tar.gz"
|
28
|
+
|
29
|
+
MiniPortile.new("comrak", COMRAK_VERSION).tap do |recipe|
|
30
|
+
recipe.target = File.join(GEM_ROOT_DIR, "ports")
|
31
|
+
recipe.files = [{
|
32
|
+
url: TARBALL_URL,
|
33
|
+
# sha256: "055fa44ef002a1a07853d3a4dd2a8c553a1dc58ff3809b4fa530ed35694d8571",
|
34
|
+
}]
|
35
|
+
|
36
|
+
# configure the environment that MiniPortile will use for subshells
|
37
|
+
if CROSS_BUILD_P
|
38
|
+
ENV.to_h.tap do |env|
|
39
|
+
# -fPIC is necessary for linking into a shared library
|
40
|
+
env["CFLAGS"] = [env["CFLAGS"], "-fPIC"].join(" ")
|
41
|
+
|
42
|
+
recipe.configure_options += env.map { |key, value| "#{key}=#{value.strip}" }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
unless File.exist?(File.join(recipe.target, recipe.host, recipe.name, recipe.version))
|
47
|
+
recipe.download unless recipe.downloaded?
|
48
|
+
recipe.extract
|
49
|
+
|
50
|
+
tarball_extract_path = File.join("tmp", recipe.host, "ports", recipe.name, recipe.version, "#{recipe.name}-#{recipe.version}")
|
51
|
+
Dir.chdir(tarball_extract_path) do
|
52
|
+
system "cargo build --manifest-path=./c-api/Cargo.toml --release"
|
53
|
+
end
|
54
|
+
lib_header_path = File.join(tarball_extract_path, "c-api", "include")
|
55
|
+
lib_build_path = File.join(tarball_extract_path, "c-api", "target", "release")
|
56
|
+
|
57
|
+
HEADER_DIRS = [lib_header_path]
|
58
|
+
LIB_DIRS = [lib_build_path]
|
59
|
+
|
60
|
+
dir_config('commonmarkercomrak', HEADER_DIRS, LIB_DIRS)
|
61
|
+
end
|
62
|
+
|
63
|
+
recipe.activate
|
64
|
+
|
65
|
+
$LIBS << ' -lcomrak_ffi'
|
66
|
+
$LIBS << ' -lbcrypt' if windows
|
67
|
+
end
|
68
|
+
|
69
|
+
unless find_header("comrak_ffi.h")
|
70
|
+
abort("\nERROR: *** could not find comrak_ffi.h ***\n\n")
|
71
|
+
end
|
72
|
+
|
73
|
+
create_makefile("commonmarkercomrak/commonmarkercomrak")
|
@@ -0,0 +1,68 @@
|
|
1
|
+
DYLD_FALLBACK_LIBRARY_PATH=.:/Users/gjtorikian/.rbenv/versions/3.1.1/lib pkg-config --exists /Users/gjtorikian/Development/commonmarker/ports/arm64-apple-darwin21.5.0/comrak/0.13.2/lib/pkgconfig/yaml-0.1.pc
|
2
|
+
package configuration for /Users/gjtorikian/Development/commonmarker/ports/arm64-apple-darwin21.5.0/comrak/0.13.2/lib/pkgconfig/yaml-0.1.pc is not found
|
3
|
+
have_library: checking for yaml_get_version() in -lyaml... -------------------- no
|
4
|
+
|
5
|
+
DYLD_FALLBACK_LIBRARY_PATH=.:/Users/gjtorikian/.rbenv/versions/3.1.1/lib "clang -o conftest -I/Users/gjtorikian/.rbenv/versions/3.1.1/include/ruby-3.1.0/arm64-darwin21 -I/Users/gjtorikian/.rbenv/versions/3.1.1/include/ruby-3.1.0/ruby/backward -I/Users/gjtorikian/.rbenv/versions/3.1.1/include/ruby-3.1.0 -I. -I/Users/gjtorikian/.rbenv/versions/3.1.1/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -fdeclspec -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens -Wundef -fno-common -pipe conftest.c -L. -L/Users/gjtorikian/.rbenv/versions/3.1.1/lib -L. -L/Users/gjtorikian/.rbenv/versions/3.1.1/lib -fstack-protector-strong -L/usr/local/lib -lruby.3.1 "
|
6
|
+
checked program was:
|
7
|
+
/* begin */
|
8
|
+
1: #include "ruby.h"
|
9
|
+
2:
|
10
|
+
3: int main(int argc, char **argv)
|
11
|
+
4: {
|
12
|
+
5: return !!argv[argc];
|
13
|
+
6: }
|
14
|
+
/* end */
|
15
|
+
|
16
|
+
DYLD_FALLBACK_LIBRARY_PATH=.:/Users/gjtorikian/.rbenv/versions/3.1.1/lib "clang -o conftest -I/Users/gjtorikian/.rbenv/versions/3.1.1/include/ruby-3.1.0/arm64-darwin21 -I/Users/gjtorikian/.rbenv/versions/3.1.1/include/ruby-3.1.0/ruby/backward -I/Users/gjtorikian/.rbenv/versions/3.1.1/include/ruby-3.1.0 -I. -I/Users/gjtorikian/.rbenv/versions/3.1.1/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -fdeclspec -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens -Wundef -fno-common -pipe conftest.c -L. -L/Users/gjtorikian/.rbenv/versions/3.1.1/lib -L. -L/Users/gjtorikian/.rbenv/versions/3.1.1/lib -fstack-protector-strong -L/usr/local/lib -lruby.3.1 -lyaml "
|
17
|
+
conftest.c:3:10: fatal error: 'comrak.h' file not found
|
18
|
+
#include <comrak.h>
|
19
|
+
^~~~~~~~~~
|
20
|
+
1 error generated.
|
21
|
+
checked program was:
|
22
|
+
/* begin */
|
23
|
+
1: #include "ruby.h"
|
24
|
+
2:
|
25
|
+
3: #include <comrak.h>
|
26
|
+
4:
|
27
|
+
5: /*top*/
|
28
|
+
6: extern int t(void);
|
29
|
+
7: int main(int argc, char **argv)
|
30
|
+
8: {
|
31
|
+
9: if (argc > 1000000) {
|
32
|
+
10: int (* volatile tp)(void)=(int (*)(void))&t;
|
33
|
+
11: printf("%d", (*tp)());
|
34
|
+
12: }
|
35
|
+
13:
|
36
|
+
14: return !!argv[argc];
|
37
|
+
15: }
|
38
|
+
16: int t(void) { void ((*volatile p)()); p = (void ((*)()))yaml_get_version; return !p; }
|
39
|
+
/* end */
|
40
|
+
|
41
|
+
DYLD_FALLBACK_LIBRARY_PATH=.:/Users/gjtorikian/.rbenv/versions/3.1.1/lib "clang -o conftest -I/Users/gjtorikian/.rbenv/versions/3.1.1/include/ruby-3.1.0/arm64-darwin21 -I/Users/gjtorikian/.rbenv/versions/3.1.1/include/ruby-3.1.0/ruby/backward -I/Users/gjtorikian/.rbenv/versions/3.1.1/include/ruby-3.1.0 -I. -I/Users/gjtorikian/.rbenv/versions/3.1.1/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -fdeclspec -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens -Wundef -fno-common -pipe conftest.c -L. -L/Users/gjtorikian/.rbenv/versions/3.1.1/lib -L. -L/Users/gjtorikian/.rbenv/versions/3.1.1/lib -fstack-protector-strong -L/usr/local/lib -lruby.3.1 -lyaml "
|
42
|
+
conftest.c:3:10: fatal error: 'comrak.h' file not found
|
43
|
+
#include <comrak.h>
|
44
|
+
^~~~~~~~~~
|
45
|
+
1 error generated.
|
46
|
+
checked program was:
|
47
|
+
/* begin */
|
48
|
+
1: #include "ruby.h"
|
49
|
+
2:
|
50
|
+
3: #include <comrak.h>
|
51
|
+
4:
|
52
|
+
5: /*top*/
|
53
|
+
6: extern int t(void);
|
54
|
+
7: int main(int argc, char **argv)
|
55
|
+
8: {
|
56
|
+
9: if (argc > 1000000) {
|
57
|
+
10: int (* volatile tp)(void)=(int (*)(void))&t;
|
58
|
+
11: printf("%d", (*tp)());
|
59
|
+
12: }
|
60
|
+
13:
|
61
|
+
14: return !!argv[argc];
|
62
|
+
15: }
|
63
|
+
16: extern void yaml_get_version();
|
64
|
+
17: int t(void) { yaml_get_version(); return 0; }
|
65
|
+
/* end */
|
66
|
+
|
67
|
+
--------------------
|
68
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CommonmarkerComrak
|
4
|
+
module Config
|
5
|
+
# For details, see
|
6
|
+
# https://github.com/kivikakk/comrak/blob/162ef9354deb2c9b4a4e05be495aa372ba5bb696/src/main.rs#L201
|
7
|
+
OPTS = {
|
8
|
+
parse: {
|
9
|
+
smart: false,
|
10
|
+
default_info_string: "",
|
11
|
+
}.freeze,
|
12
|
+
render: {
|
13
|
+
hardbreaks: true,
|
14
|
+
github_pre_lang: true,
|
15
|
+
width: 80,
|
16
|
+
unsafe_: false,
|
17
|
+
escape: false,
|
18
|
+
}.freeze,
|
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: "",
|
30
|
+
},
|
31
|
+
format: [:html].freeze,
|
32
|
+
}.freeze
|
33
|
+
|
34
|
+
def self.merged_with_defaults(options)
|
35
|
+
CommonmarkerComrak::Config::OPTS.merge(process_options(options))
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.process_options(options)
|
39
|
+
{
|
40
|
+
parse: process_parse_options(options[:parse]),
|
41
|
+
render: process_render_options(options[:render]),
|
42
|
+
extension: process_extension_options(options[:extension]),
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
BOOLS = [true, false]
|
47
|
+
["parse", "render", "extension"].each do |type|
|
48
|
+
define_singleton_method :"process_#{type}_options" do |options|
|
49
|
+
CommonmarkerComrak::Config::OPTS[type.to_sym].each_with_object({}) do |(key, value), hash|
|
50
|
+
if options.nil? # option not provided, go for the default
|
51
|
+
hash[key] = value
|
52
|
+
next
|
53
|
+
end
|
54
|
+
|
55
|
+
# option explicitly not included, remove it
|
56
|
+
next if options[key].nil?
|
57
|
+
|
58
|
+
value_klass = value.class
|
59
|
+
if BOOLS.include?(value) && BOOLS.include?(options[key])
|
60
|
+
hash[key] = options[key]
|
61
|
+
elsif options[key].is_a?(value_klass)
|
62
|
+
hash[key] = options[key]
|
63
|
+
else
|
64
|
+
expected_type = BOOLS.include?(value) ? "Boolean" : value_klass.to_s
|
65
|
+
raise TypeError, "#{type}_options[:#{key}] must be a #{expected_type}; got #{options[key].class}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
# private :"process_#{type}_options"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
begin
|
4
|
+
# load the precompiled extension file
|
5
|
+
ruby_version = /(\d+\.\d+)/.match(::RUBY_VERSION)
|
6
|
+
require_relative "commonmarkercomrak/#{ruby_version}/commonmarkercomrak"
|
7
|
+
rescue LoadError
|
8
|
+
# fall back to the extension compiled upon installation.
|
9
|
+
require "commonmarkercomrak/commonmarkercomrak"
|
10
|
+
end
|
11
|
+
|
12
|
+
require "commonmarkercomrak/config"
|
13
|
+
require "commonmarkercomrak/renderer"
|
14
|
+
require "commonmarkercomrak/version"
|
15
|
+
|
16
|
+
if ENV.fetch("DEBUG", false)
|
17
|
+
require "awesome_print"
|
18
|
+
require "debug"
|
19
|
+
end
|
20
|
+
|
21
|
+
module CommonmarkerComrak
|
22
|
+
# Public: Parses a CommonMark string into an HTML string.
|
23
|
+
#
|
24
|
+
# text - A {String} of text
|
25
|
+
# option - A {Hash} of render, parse, and extension options to transform the text.
|
26
|
+
#
|
27
|
+
# Returns a {String} of converted HTML.
|
28
|
+
def self.to_html(text, options: CommonmarkerComrak::Config::OPTS)
|
29
|
+
raise TypeError, "text must be a String; got a #{text.class}!" unless text.is_a?(String)
|
30
|
+
raise TypeError, "options must be a Hash; got a #{options.class}!" unless options.is_a?(Hash)
|
31
|
+
|
32
|
+
opts = Config.process_options(options)
|
33
|
+
commonmark_to_html(text.encode("UTF-8"), opts)
|
34
|
+
end
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,217 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: commonmarkercomrak
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.23.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Garen Torikian
|
8
|
+
- Ashe Connor
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2022-09-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: awesome_print
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: debug
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: json
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '2.3'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '2.3'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: minitest
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '5.6'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '5.6'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: minitest-focus
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1.1'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '1.1'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: nokogiri
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '1.13'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '1.13'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: rake
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: rake-compiler
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0.9'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0.9'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rdoc
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '6.2'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '6.2'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: rubocop-standard
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: mini_portile2
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - "~>"
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '2.8'
|
161
|
+
type: :runtime
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - "~>"
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '2.8'
|
168
|
+
description: A fast, safe, extensible parser for CommonMark. This wraps the comrak
|
169
|
+
Rust crate.
|
170
|
+
email:
|
171
|
+
executables: []
|
172
|
+
extensions:
|
173
|
+
- ext/commonmarkercomrak/extconf.rb
|
174
|
+
extra_rdoc_files: []
|
175
|
+
files:
|
176
|
+
- LICENSE.txt
|
177
|
+
- README.md
|
178
|
+
- Rakefile
|
179
|
+
- commonmarkercomrak.gemspec
|
180
|
+
- ext/commonmarkercomrak/commonmarkercomrak.c
|
181
|
+
- ext/commonmarkercomrak/commonmarkercomrak.h
|
182
|
+
- ext/commonmarkercomrak/extconf.rb
|
183
|
+
- ext/commonmarkercomrak/mkmf.log
|
184
|
+
- lib/commonmarkercomrak.rb
|
185
|
+
- lib/commonmarkercomrak/config.rb
|
186
|
+
- lib/commonmarkercomrak/renderer.rb
|
187
|
+
- lib/commonmarkercomrak/version.rb
|
188
|
+
homepage: https://github.com/gjtorikian/commonmarkercomrak
|
189
|
+
licenses:
|
190
|
+
- MIT
|
191
|
+
metadata:
|
192
|
+
funding_uri: https://github.com/sponsors/gjtorikian/
|
193
|
+
rubygems_mfa_required: 'true'
|
194
|
+
post_install_message:
|
195
|
+
rdoc_options: []
|
196
|
+
require_paths:
|
197
|
+
- lib
|
198
|
+
- ext
|
199
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
200
|
+
requirements:
|
201
|
+
- - ">="
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: '3.0'
|
204
|
+
- - "<"
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '4.0'
|
207
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
|
+
requirements:
|
209
|
+
- - ">="
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: '0'
|
212
|
+
requirements: []
|
213
|
+
rubygems_version: 3.3.7
|
214
|
+
signing_key:
|
215
|
+
specification_version: 4
|
216
|
+
summary: CommonMark parser and renderer. Written in Rust, wrapped in Ruby.
|
217
|
+
test_files: []
|