mmarkdown 0.0.1
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/Rakefile +38 -0
- data/bin/mmarkdown +20 -0
- data/lib/mmarkdown/version.rb +8 -0
- data/lib/mmarkdown.rb +48 -0
- data/test/test.html +18 -0
- data/test/test.md +19 -0
- data/test/test_mmarkdown.rb +17 -0
- metadata +95 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6e3d640ed08ad29dbf7ffe395012327a233da1d2
|
4
|
+
data.tar.gz: 743aee40c2c44bd804092bcd9dde67f57ef64a88
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1d53fbd0f6c755240b48e7cff10e34e9c2aeccfa83083f89a534f5384ac8ba932fb29ffe182b627c13b4fb19b21b975a163f93e08f3f0fff1997e3503c23590b
|
7
|
+
data.tar.gz: 8d9ce3a8ea26843db34586f611c23630ce99e7a88d35ecaf04eaf85d6371f7e2e5c1e056c61621a00793609c7a86fa71512796795cb078072dd009d096406810
|
data/Rakefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/packagetask'
|
4
|
+
require 'rubygems/package_task'
|
5
|
+
|
6
|
+
require "#{__dir__}/lib/mmarkdown"
|
7
|
+
|
8
|
+
Rake::TestTask.new('test') do |t|
|
9
|
+
t.libs << 'lib'
|
10
|
+
t.libs << 'test'
|
11
|
+
t.pattern = 'test/test_*.rb'
|
12
|
+
t.verbose = true
|
13
|
+
t.warning = false
|
14
|
+
end
|
15
|
+
|
16
|
+
spec = Gem::Specification.new do |s|
|
17
|
+
s.summary = "Markdown with MathML"
|
18
|
+
s.name = "mmarkdown"
|
19
|
+
s.author = "Hiroyuki Tanaka"
|
20
|
+
s.email = "hryktnk@gmail.com"
|
21
|
+
s.version = MMarkdown::VERSION
|
22
|
+
s.files = `git ls-files`.split("\n")
|
23
|
+
s.test_files = `git ls-files -- test/*`.split("\n")
|
24
|
+
s.licenses = ["Ruby License"]
|
25
|
+
s.require_paths = "lib"
|
26
|
+
s.add_dependency("redcarpet", "~> 3.0")
|
27
|
+
s.add_dependency("math_ml", "~> 0.14")
|
28
|
+
s.add_development_dependency("nokogiri", "~> 1.0")
|
29
|
+
s.description = <<-EOF
|
30
|
+
Convert Markdown to HTML with MathML
|
31
|
+
EOF
|
32
|
+
end
|
33
|
+
|
34
|
+
Gem::PackageTask.new(spec) do |pkg|
|
35
|
+
pkg.need_zip = false
|
36
|
+
pkg.need_tar = false
|
37
|
+
end
|
38
|
+
|
data/bin/mmarkdown
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
#
|
4
|
+
|
5
|
+
root = "#{__dir__}/.."
|
6
|
+
require "#{root}/lib/mmarkdown"
|
7
|
+
|
8
|
+
def usage
|
9
|
+
puts "mmarkdown <file.md>"
|
10
|
+
end
|
11
|
+
|
12
|
+
if ARGV.size != 1
|
13
|
+
usage
|
14
|
+
exit 0
|
15
|
+
end
|
16
|
+
|
17
|
+
md_string = File.open(ARGV[0]).read
|
18
|
+
|
19
|
+
puts MMarkdown.new(md_string).to_str
|
20
|
+
|
data/lib/mmarkdown.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require "math_ml/string"
|
2
|
+
require "redcarpet"
|
3
|
+
|
4
|
+
require "#{__dir__}/mmarkdown/version"
|
5
|
+
|
6
|
+
class MMarkdown
|
7
|
+
|
8
|
+
def initialize md_string
|
9
|
+
md_mathml = equations_to_mathml(md_string)
|
10
|
+
|
11
|
+
renderer = Redcarpet::Render::HTML
|
12
|
+
|
13
|
+
parse_extensions = {no_intra_emphasis: true,
|
14
|
+
tables: true,
|
15
|
+
fenced_code_blocks: true,
|
16
|
+
autolink: true,
|
17
|
+
disable_indented_code_blocks: true,
|
18
|
+
underline: true,
|
19
|
+
highlight: true,
|
20
|
+
footnotes: true}
|
21
|
+
|
22
|
+
render_extensions = {with_toc_data: true}
|
23
|
+
|
24
|
+
render = renderer.new(render_extensions)
|
25
|
+
|
26
|
+
@md = Redcarpet::Markdown.new(render, parse_extensions).render(md_mathml)
|
27
|
+
end
|
28
|
+
|
29
|
+
def equations_to_mathml string
|
30
|
+
equations = []
|
31
|
+
|
32
|
+
string_mathml = string.clone
|
33
|
+
string.scan(/\\\[(.*)\\\]/) {|m|
|
34
|
+
string_mathml.gsub!("\\[" + m.first + "\\]", m.first.to_mathml(true).to_s)
|
35
|
+
}
|
36
|
+
|
37
|
+
string.scan(/\\\((.*)\\\)/) {|m|
|
38
|
+
string_mathml.gsub!("\\(" + m.first + "\\)", m.first.to_mathml.to_s)
|
39
|
+
}
|
40
|
+
|
41
|
+
return string_mathml
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_str
|
45
|
+
@md.to_str
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
data/test/test.html
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
<h1 id="toc_0">Test</h1>
|
2
|
+
|
3
|
+
<p>This is a test data</p>
|
4
|
+
|
5
|
+
<p>This is an equation, <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msup><mi>x</mi><mn>2</mn></msup><mo stretchy='false'>+</mo><msup><mi>y</mi><mn>2</mn></msup><mo stretchy='false'>=</mo><msup><mi>r</mi><mn>2</mn></msup></math></p>
|
6
|
+
|
7
|
+
<p>And this is the second
|
8
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msup><mi>sin</mi><mn>2</mn></msup><mi>θ</mi><mo stretchy='false'>+</mo><msup><mi>cos</mi><mn>2</mn></msup><mi>θ</mi><mo stretchy='false'>=</mo><mn>1</mn></math>.</p>
|
9
|
+
|
10
|
+
<p>日本語の後の数式 <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msubsup><mo stretchy='false'>∑</mo><mrow><mi>i</mi><mo stretchy='false'>=</mo><mn>0</mn></mrow><mrow><mi>N</mi></mrow></msubsup><msub><mi>x</mi><mi>i</mi></msub></math></p>
|
11
|
+
|
12
|
+
<p>Block style
|
13
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML' display='block'><msubsup><mo stretchy='false'>∫</mo><mrow><mo stretchy='false'>-</mo><mn>∞</mn></mrow><mrow><mn>∞</mn></mrow></msubsup><mi>f</mi><mfenced open='(' close=')'><mrow><mi>x</mi></mrow></mfenced><mspace width='0.167em' /><mi>d</mi><mi>x</mi></math></p>
|
14
|
+
|
15
|
+
<p>Same equation again <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msup><mi>sin</mi><mn>2</mn></msup><mi>θ</mi><mo stretchy='false'>+</mo><msup><mi>cos</mi><mn>2</mn></msup><mi>θ</mi><mo stretchy='false'>=</mo><mn>1</mn></math>.</p>
|
16
|
+
|
17
|
+
<p>vector:
|
18
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mover><mrow><mi>x</mi></mrow><mo>→</mo></mover><mo stretchy='false'>+</mo><mover><mrow><mi>y</mi></mrow><mo>→</mo></mover><mo stretchy='false'>=</mo><mover><mrow><mi>p</mi></mrow><mo>→</mo></mover></math></p>
|
data/test/test.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Test
|
2
|
+
|
3
|
+
This is a test data
|
4
|
+
|
5
|
+
This is an equation, \( x^2 + y^2 = r^2 \)
|
6
|
+
|
7
|
+
And this is the second
|
8
|
+
\( \sin^2 \theta + \cos^2 \theta = 1 \).
|
9
|
+
|
10
|
+
日本語の後の数式 \( \sum_{i = 0}^{N} x_i \)
|
11
|
+
|
12
|
+
Block style
|
13
|
+
\[ \int_{-\infty}^{\infty} f \left( x \right) \, dx \]
|
14
|
+
|
15
|
+
Same equation again \( \sin^2 \theta + \cos^2 \theta = 1 \).
|
16
|
+
|
17
|
+
vector:
|
18
|
+
\( \vec{x} + \vec{y} = \vec{p} \)
|
19
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
require "#{__dir__}/../lib/mmarkdown"
|
5
|
+
|
6
|
+
class MMarkdownTest < MiniTest::Test
|
7
|
+
def test_mmarkdown
|
8
|
+
md_string = File.open("#{__dir__}/test.md").read
|
9
|
+
html_actual = MMarkdown.new(md_string).to_str
|
10
|
+
|
11
|
+
html_expected = File.open("#{__dir__}/test.html").read
|
12
|
+
|
13
|
+
assert_equal(Nokogiri::HTML::DocumentFragment.parse(html_expected).to_html,
|
14
|
+
Nokogiri::HTML::DocumentFragment.parse(html_actual).to_html)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mmarkdown
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Hiroyuki Tanaka
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-02-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: redcarpet
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: math_ml
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.14'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.14'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: nokogiri
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
description: |
|
56
|
+
Convert Markdown to HTML with MathML
|
57
|
+
email: hryktnk@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- Rakefile
|
63
|
+
- bin/mmarkdown
|
64
|
+
- lib/mmarkdown.rb
|
65
|
+
- lib/mmarkdown/version.rb
|
66
|
+
- test/test.html
|
67
|
+
- test/test.md
|
68
|
+
- test/test_mmarkdown.rb
|
69
|
+
homepage:
|
70
|
+
licenses:
|
71
|
+
- Ruby License
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths: lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 2.2.2
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: Markdown with MathML
|
92
|
+
test_files:
|
93
|
+
- test/test.html
|
94
|
+
- test/test.md
|
95
|
+
- test/test_mmarkdown.rb
|