gitlab-glfm-markdown 0.0.7-x86_64-linux
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/Cargo.lock +1058 -0
- data/LICENSE +28 -0
- data/README.md +64 -0
- data/ext/glfm_markdown/Cargo.toml +19 -0
- data/ext/glfm_markdown/extconf.rb +6 -0
- data/ext/glfm_markdown/src/glfm.rs +30 -0
- data/ext/glfm_markdown/src/lib.rs +21 -0
- data/ext/glfm_markdown/src/main.rs +54 -0
- data/lib/glfm_markdown/2.7/glfm_markdown.so +0 -0
- data/lib/glfm_markdown/3.0/glfm_markdown.so +0 -0
- data/lib/glfm_markdown/3.1/glfm_markdown.so +0 -0
- data/lib/glfm_markdown/3.2/glfm_markdown.so +0 -0
- data/lib/glfm_markdown/loader.rb +8 -0
- data/lib/glfm_markdown/version.rb +5 -0
- data/lib/glfm_markdown.rb +20 -0
- metadata +134 -0
data/LICENSE
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
Copyright (c) 2011-present GitLab B.V.
|
2
|
+
|
3
|
+
Portions of this software are licensed as follows:
|
4
|
+
|
5
|
+
* All content residing under the "doc/" directory of this repository is licensed under "Creative Commons: CC BY-SA 4.0 license".
|
6
|
+
* All content that resides under the "ee/" directory of this repository, if that directory exists, is licensed under the license defined in "ee/LICENSE".
|
7
|
+
* All content that resides under the "jh/" directory of this repository, if that directory exists, is licensed under the license defined in "jh/LICENSE".
|
8
|
+
* All client-side JavaScript (when served directly or after being compiled, arranged, augmented, or combined), is licensed under the "MIT Expat" license.
|
9
|
+
* All third party components incorporated into the GitLab Software are licensed under the original license provided by the owner of the applicable component.
|
10
|
+
* Content outside of the above mentioned directories or restrictions above is available under the "MIT Expat" license as defined below.
|
11
|
+
|
12
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
13
|
+
of this software and associated documentation files (the "Software"), to deal
|
14
|
+
in the Software without restriction, including without limitation the rights
|
15
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
16
|
+
copies of the Software, and to permit persons to whom the Software is
|
17
|
+
furnished to do so, subject to the following conditions:
|
18
|
+
|
19
|
+
The above copyright notice and this permission notice shall be included in all
|
20
|
+
copies or substantial portions of the Software.
|
21
|
+
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
23
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
24
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
25
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
26
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
28
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# GitLab Flavored Markdown
|
2
|
+
|
3
|
+
[](https://gitlab.com/gitlab-org/ruby/gems/gitlab-glfm-markdown/-/commits/main)
|
4
|
+
[](https://gitlab.com/gitlab-org/ruby/gems/gitlab-glfm-markdown/-/releases)
|
5
|
+
|
6
|
+
Implements GLFM (as used by GitLab) using a Rust-based markdown parser.
|
7
|
+
|
8
|
+
This project is currently EXPLORATORY, so anything and everything will change.
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Install the gem and add to the application's Gemfile by executing:
|
13
|
+
|
14
|
+
$ bundle add gitlab-glfm-markdown
|
15
|
+
|
16
|
+
If bundler is not being used to manage dependencies, install the gem by executing:
|
17
|
+
|
18
|
+
$ gem install gitlab-glfm-markdown
|
19
|
+
|
20
|
+
## Usage
|
21
|
+
|
22
|
+
Try on command line:
|
23
|
+
|
24
|
+
```
|
25
|
+
rake compile
|
26
|
+
bin/console
|
27
|
+
|
28
|
+
GLFMMarkdown.to_html('# header', options: {sourcepos: true})
|
29
|
+
```
|
30
|
+
|
31
|
+
## Development
|
32
|
+
|
33
|
+
A command line executable can be built for debugging.
|
34
|
+
|
35
|
+
```
|
36
|
+
cd ext/glfm_markdown
|
37
|
+
cargo run --bin glfm_markdown -- --sourcepos
|
38
|
+
```
|
39
|
+
|
40
|
+
There is a VSCode workspace that allows you to `Debug executable`
|
41
|
+
|
42
|
+
When developing another project locally and using `gitlab-glfm-markdown` by linking
|
43
|
+
directly to the gem's source directory, make sure that you're using the same version
|
44
|
+
of Ruby for the project and the gem. Otherwise you can see unexplained errors when
|
45
|
+
calling into the gem.
|
46
|
+
|
47
|
+
### Releasing a new version
|
48
|
+
|
49
|
+
To release a new version:
|
50
|
+
|
51
|
+
1. Update `lib/glfm_markdown/version.rb` with the version number.
|
52
|
+
1. Update `CHANGELOG.md` with the changes in the release.
|
53
|
+
1. Create a merge request and merge it to `master`.
|
54
|
+
1. Push a new tag to the repository.
|
55
|
+
|
56
|
+
The new version with precompiled, native gems will automatically be
|
57
|
+
published to [RubyGems](https://rubygems.org/gems/gitlab-glfm-markdown) when the
|
58
|
+
pipeline for the tag completes.
|
59
|
+
|
60
|
+
## Contributing
|
61
|
+
|
62
|
+
Bug reports and merge requests are welcome on GitLab at https://gitlab.com/gitlab-org/ruby/gems/gitlab-glfm-markdown.
|
63
|
+
|
64
|
+
Please refer to [CONTRIBUTING](CONTRIBUTING.md) for more details.
|
@@ -0,0 +1,19 @@
|
|
1
|
+
[package]
|
2
|
+
name = "glfm_markdown"
|
3
|
+
version = "0.0.3"
|
4
|
+
edition = "2021"
|
5
|
+
authors = ["digitalmoksha <bwalker@gitlab.com>"]
|
6
|
+
publish = false
|
7
|
+
|
8
|
+
[lib]
|
9
|
+
crate-type = ["cdylib"]
|
10
|
+
|
11
|
+
[[bin]]
|
12
|
+
name = "glfm_markdown"
|
13
|
+
|
14
|
+
[dependencies]
|
15
|
+
magnus = { version = "0.5" }
|
16
|
+
rb-sys = { version = "0.9.82", default-features = false, features = ["stable-api-compiled-fallback"] }
|
17
|
+
argparse = { version = ">= 0.2.1" }
|
18
|
+
comrak = { version = "0.19.0" }
|
19
|
+
anstream = { version = "0.4" } # TODO keep until we upgrade to rustc 1.70.0 or newer
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#[derive(Debug)]
|
2
|
+
pub struct RenderOptions {
|
3
|
+
pub sourcepos: bool,
|
4
|
+
pub debug: bool,
|
5
|
+
}
|
6
|
+
|
7
|
+
pub fn render(text: String, options: RenderOptions) -> String {
|
8
|
+
render_comrak(text, options)
|
9
|
+
}
|
10
|
+
|
11
|
+
fn render_comrak(text: String, options: RenderOptions) -> String {
|
12
|
+
let mut comrak_options = comrak::ComrakOptions::default();
|
13
|
+
|
14
|
+
comrak_options.extension.strikethrough = true;
|
15
|
+
comrak_options.extension.table = true;
|
16
|
+
comrak_options.extension.autolink = true;
|
17
|
+
comrak_options.extension.tasklist = false;
|
18
|
+
comrak_options.extension.footnotes = true;
|
19
|
+
|
20
|
+
comrak_options.render.unsafe_ = true;
|
21
|
+
comrak_options.render.github_pre_lang = true;
|
22
|
+
comrak_options.render.full_info_string = true;
|
23
|
+
comrak_options.render.hardbreaks = false;
|
24
|
+
comrak_options.render.sourcepos = options.sourcepos;
|
25
|
+
|
26
|
+
comrak_options.parse.smart = false;
|
27
|
+
comrak_options.parse.relaxed_autolinks = false;
|
28
|
+
|
29
|
+
comrak::markdown_to_html(&text, &comrak_options)
|
30
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
use magnus::{define_module, function, prelude::*, Error, RHash, Symbol};
|
2
|
+
|
3
|
+
mod glfm;
|
4
|
+
use glfm::{render, RenderOptions};
|
5
|
+
|
6
|
+
pub fn render_to_html_rs(text: String, options: RHash) -> String {
|
7
|
+
let sourcepos: bool = options.lookup::<_, bool>(Symbol::new("sourcepos")).unwrap();
|
8
|
+
let debug: bool = options.lookup::<_, bool>(Symbol::new("debug")).unwrap();
|
9
|
+
let render_options = RenderOptions { sourcepos, debug };
|
10
|
+
|
11
|
+
render(text, render_options)
|
12
|
+
}
|
13
|
+
|
14
|
+
#[magnus::init]
|
15
|
+
fn init() -> Result<(), Error> {
|
16
|
+
let module = define_module("GLFMMarkdown")?;
|
17
|
+
|
18
|
+
module.define_singleton_method("render_to_html_rs", function!(render_to_html_rs, 2))?;
|
19
|
+
|
20
|
+
Ok(())
|
21
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
mod glfm;
|
2
|
+
use glfm::{render, RenderOptions};
|
3
|
+
use std::io::Read;
|
4
|
+
use std::io::Write;
|
5
|
+
|
6
|
+
fn main() {
|
7
|
+
let mut input = "-".to_owned();
|
8
|
+
let mut output = "-".to_owned();
|
9
|
+
let mut sourcepos = false;
|
10
|
+
let mut debug = false;
|
11
|
+
|
12
|
+
{
|
13
|
+
// this block limits scope of borrows by cli.refer() method
|
14
|
+
let mut cli = argparse::ArgumentParser::new();
|
15
|
+
|
16
|
+
cli.set_description("Gitlab Flavored Markdown. Experimental.");
|
17
|
+
|
18
|
+
cli.refer(&mut input)
|
19
|
+
.add_argument("file", argparse::Store, "File to read");
|
20
|
+
cli.refer(&mut output)
|
21
|
+
.add_option(&["-o", "--output"], argparse::Store, "File to write");
|
22
|
+
cli.refer(&mut sourcepos).add_option(
|
23
|
+
&["--sourcepos"],
|
24
|
+
argparse::StoreTrue,
|
25
|
+
"Include source mappings in HTML attributes.",
|
26
|
+
);
|
27
|
+
cli.refer(&mut debug).add_option(
|
28
|
+
&["--debug"],
|
29
|
+
argparse::StoreTrue,
|
30
|
+
"Show debug information",
|
31
|
+
);
|
32
|
+
|
33
|
+
cli.parse_args_or_exit();
|
34
|
+
}
|
35
|
+
|
36
|
+
let vec = if input == "-" {
|
37
|
+
let mut vec = Vec::new();
|
38
|
+
std::io::stdin().read_to_end(&mut vec).unwrap();
|
39
|
+
vec
|
40
|
+
} else {
|
41
|
+
std::fs::read(input).unwrap()
|
42
|
+
};
|
43
|
+
|
44
|
+
let source = String::from_utf8_lossy(&vec);
|
45
|
+
let options = RenderOptions { sourcepos, debug };
|
46
|
+
|
47
|
+
let result = render(source.to_string(), options);
|
48
|
+
|
49
|
+
if output == "-" {
|
50
|
+
std::io::stdout().write_all(result.as_bytes()).unwrap();
|
51
|
+
} else {
|
52
|
+
std::fs::write(output, &result).unwrap();
|
53
|
+
}
|
54
|
+
}
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'glfm_markdown/version'
|
4
|
+
require_relative 'glfm_markdown/loader'
|
5
|
+
|
6
|
+
load_rust_extension
|
7
|
+
|
8
|
+
DEFAULT_OPTIONS = { sourcepos: true, debug: false }.freeze
|
9
|
+
|
10
|
+
module GLFMMarkdown
|
11
|
+
class << self
|
12
|
+
def to_html(markdown, options: {})
|
13
|
+
raise TypeError, 'markdown must be a String' unless markdown.is_a?(String)
|
14
|
+
raise TypeError, 'markdown must be UTF-8 encoded' unless markdown.encoding.name == "UTF-8"
|
15
|
+
raise TypeError, 'options must be a Hash' unless options.is_a?(Hash)
|
16
|
+
|
17
|
+
render_to_html_rs(markdown, DEFAULT_OPTIONS.merge(options))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gitlab-glfm-markdown
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.7
|
5
|
+
platform: x86_64-linux
|
6
|
+
authors:
|
7
|
+
- Brett Walker
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-10-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rb_sys
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.9'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.9'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.12.2
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.12.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '13.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '13.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake-compiler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.2'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake-compiler-dock
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.3'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.3'
|
83
|
+
description: Markdown processing for GitLab Flavored Markdown
|
84
|
+
email:
|
85
|
+
- bwalker@gitlab.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- Cargo.lock
|
91
|
+
- LICENSE
|
92
|
+
- README.md
|
93
|
+
- ext/glfm_markdown/Cargo.toml
|
94
|
+
- ext/glfm_markdown/extconf.rb
|
95
|
+
- ext/glfm_markdown/src/glfm.rs
|
96
|
+
- ext/glfm_markdown/src/lib.rs
|
97
|
+
- ext/glfm_markdown/src/main.rs
|
98
|
+
- lib/glfm_markdown.rb
|
99
|
+
- lib/glfm_markdown/2.7/glfm_markdown.so
|
100
|
+
- lib/glfm_markdown/3.0/glfm_markdown.so
|
101
|
+
- lib/glfm_markdown/3.1/glfm_markdown.so
|
102
|
+
- lib/glfm_markdown/3.2/glfm_markdown.so
|
103
|
+
- lib/glfm_markdown/loader.rb
|
104
|
+
- lib/glfm_markdown/version.rb
|
105
|
+
homepage: https://gitlab.com/gitlab-org/ruby/gems/gitlab-glfm-markdown
|
106
|
+
licenses:
|
107
|
+
- MIT
|
108
|
+
metadata:
|
109
|
+
homepage_uri: https://gitlab.com/gitlab-org/ruby/gems/gitlab-glfm-markdown
|
110
|
+
source_code_uri: https://gitlab.com/gitlab-org/ruby/gems/gitlab-glfm-markdown
|
111
|
+
changelog_uri: https://gitlab.com/gitlab-org/ruby/gems/gitlab-glfm-markdown/-/releases
|
112
|
+
post_install_message:
|
113
|
+
rdoc_options: []
|
114
|
+
require_paths:
|
115
|
+
- lib
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '2.7'
|
121
|
+
- - "<"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 3.3.dev
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
requirements: []
|
130
|
+
rubygems_version: 3.4.4
|
131
|
+
signing_key:
|
132
|
+
specification_version: 4
|
133
|
+
summary: GLFM Markdown
|
134
|
+
test_files: []
|