mmarkdown 0.0.7 → 0.0.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d990b8d6e63571648d6303a66ed508272b67f132
4
- data.tar.gz: c46eaad8a0f50ed7fef341349b7299a5de798e5b
3
+ metadata.gz: 0e9e949c9202f9084f2ee497db3de0b37be0ba8c
4
+ data.tar.gz: 0ae5c043bafbadcfd6b25f26a258e0972a223a7e
5
5
  SHA512:
6
- metadata.gz: 11290f0c30d6ab56c53f532e59eeaca63b40b357baa10f87c2072164a8804c6b6d731ad78481aa8d07f2199dda2cf94b80ad23a1be5b1ac4bee576b76dcb013f
7
- data.tar.gz: 1d033224938323da53c17bd35e9c9d1303e59c8159a8f83016fe773c7b4d046c9b94a91a7ee86477fba5d759ca0300ecf34982d4de401e564677338a65e82ecd
6
+ metadata.gz: 73dbc3fbfb0a82cfb186bbae4bf982d097a6e2aa505b5b8dc28818b3e29ca1f9635042f0720e89fedb3c55e41a2bdf293aae280869911f0c880f889fb763966a
7
+ data.tar.gz: 0ab8de3c139440c445d2e0fc26a33a9d4b83bd0581ce93a1bf34eb65d602916645851d2fece950513103d1726f0790104b84888eee268cd8a5950f4381e03045
data/Rakefile CHANGED
@@ -32,6 +32,68 @@ Convert Markdown to HTML with MathML
32
32
  EOF
33
33
  end
34
34
  rescue LoadError
35
- puts "Jewelr not installed"
35
+ puts "Jeweler not installed"
36
+ end
37
+
38
+ require 'rdoc/task'
39
+ require 'rdoc/generator/darkfish'
40
+
41
+ #module RDoc::Generator::Markup
42
+ # alias :org_formatter :formatter
43
+ # def formatter
44
+ # org_formatter
45
+ #
46
+ # @formatter.add_tag(:Math, "<math>", "</math>")
47
+ # @formatter
48
+ # end
49
+ #end
50
+
51
+ require 'rdoc'
52
+ class RDoc::RDoc
53
+ alias_method :org_document, :document
54
+ def document options
55
+
56
+ m = RDoc::Markup.new
57
+ m.add_html("math", :MathML)
58
+ m.add_html("msup", :MathML_msup)
59
+ m.add_html("mi", :MathML_mi)
60
+ m.add_html("mn", :MathML_mn)
61
+ m.add_html("mo", :MathML_mo)
62
+
63
+ h = RDoc::Markup::ToHtml.new(nil, m)
64
+ h.add_tag(:MathML,
65
+ "<math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'>",
66
+ "</math>")
67
+ h.add_tag(:MathML_msup, "<msup>", "</msup>")
68
+ h.add_tag(:MathML_mi, "<mi>", "</mi>")
69
+ h.add_tag(:MathML_mn, "<mn>", "</mn>")
70
+ h.add_tag(:MathML_mo, "<mo stretchy='false'>", "</mo>")
71
+
72
+ rdoc_options = load_options
73
+ rdoc_options.parse(options)
74
+ rdoc_options.formatter = h
75
+
76
+ org_document(rdoc_options)
77
+
78
+ #p @generator.store.rdoc
79
+
80
+ #str = "<math>"
81
+ #str += " <msup><mi>x</mi><mn>2</mn></msup>"
82
+ #str += " <mo>+</mo>"
83
+ #str += " <msup><mi>y</mi><mn>2</mn></msup>"
84
+ #str += " <mo>=</mo>"
85
+ #str += " <msup><mi>r</mi><mn>2</mn></msup>"
86
+ #str += "</math>\n"
87
+
88
+ #puts h.convert(str)
89
+
90
+ end
91
+ end
92
+
93
+ RDoc::Task.new do |rdoc|
94
+ rdoc.main = "Readme.md"
95
+ rdoc.rdoc_files.include("Readme.md", "lib/**/*.rb")
96
+ rdoc.rdoc_dir = "rdoc"
97
+ rdoc.title = "MMarkdown"
36
98
  end
37
99
 
data/Readme.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # MMarkdown
2
- Markdown with math equations
2
+ Markdown with math equations as MathML
3
+
4
+ ## Markdown with Equations
5
+ LaTeX style equations in the areas surrounded by <code>\\(</code> and
6
+ <code>\\)</code> are converted to inline equations.
7
+
8
+ \( x^2 + y^2 = r^2 \)
9
+ generates
10
+
11
+ <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'>
12
+ <msup>
13
+ <mi>x</mi><mn>2</mn></msup>
14
+ <mo stretchy='false'>+</mo>
15
+ <msup><mi>y</mi><mn>2</mn></msup>
16
+ <mo stretchy='false'>=</mo><msup>
17
+ <mi>r</mi><mn>2</mn>
18
+ </msup>
19
+ </math>
20
+
21
+ and shown as
22
+ <math>
23
+ <msup><mi>x</mi><mn>2</mn></msup>
24
+ <mo>+</mo><msup><mi>y</mi><mn>2</mn></msup>
25
+ <mo>=</mo><msup><mi>r</mi><mn>2</mn></msup>
26
+ </math>
3
27
 
4
28
  ## Install
5
29
  gem install mmarkdown
@@ -8,6 +32,7 @@ Markdown with math equations
8
32
  mmarkdown <file.md>
9
33
 
10
34
  ----
35
+
11
36
  ## Author
12
37
  Hiroyuki Tanaka
13
38
 
data/bin/mmarkdown CHANGED
@@ -35,6 +35,18 @@ option_parser = OptionParser.new {|opts|
35
35
  options[:stdout] = true
36
36
  }
37
37
 
38
+ opts.on("--style STYLE", String, "File name inserted as header") {|style|
39
+ options[:style_file] = style
40
+ }
41
+
42
+ opts.on("--title TITLE", String, "Title of created html file") {|title|
43
+ options[:title] = title
44
+ }
45
+
46
+ opts.on("--footer FOOTER", String, "File name for footer") {|footer|
47
+ options[:footer] = footer
48
+ }
49
+
38
50
  opts.on("-h", "--help", "Shows this message") {
39
51
  puts opts
40
52
  exit
@@ -64,7 +76,7 @@ end
64
76
  if options[:toc]
65
77
  html_string = MMarkdown.new(md_string).toc_html(options[:toc])
66
78
  else
67
- html_string = MMarkdown.new(md_string).to_str
79
+ html_string = MMarkdown.new(md_string, title: options[:title]).to_str
68
80
  end
69
81
 
70
82
  unless options[:stdout]
@@ -2,7 +2,7 @@
2
2
  class MMarkdown
3
3
  VERSION_MAJOR = 0
4
4
  VERSION_MINOR = 0
5
- VERSION_REVISION = 7
5
+ VERSION_REVISION = 8
6
6
 
7
7
  VERSION = "#{VERSION_MAJOR}.#{VERSION_MINOR}.#{VERSION_REVISION}"
8
8
  end
data/lib/mmarkdown.rb CHANGED
@@ -10,9 +10,11 @@ class MMarkdown
10
10
  return self.new(str)
11
11
  end
12
12
 
13
- def initialize md_string
13
+ def initialize md_string, title: nil, style: nil, footer: nil
14
14
  @md_mathml = equations_to_mathml(md_string)
15
15
 
16
+ @md_mathml.gsub!(/%%.*$/, '')
17
+
16
18
  parse_extensions = {no_intra_emphasis: true,
17
19
  tables: true,
18
20
  fenced_code_blocks: true,
@@ -28,8 +30,41 @@ class MMarkdown
28
30
  render = Redcarpet::Render::HTML.new(render_extensions)
29
31
 
30
32
  @md = Redcarpet::Markdown.new(render, parse_extensions).render(@md_mathml)
33
+
34
+ if title or style or footer
35
+ @header = "<!DOCTYPE html>\n"
36
+ @header += "<html>\n"
37
+ @header += "<head>\n"
38
+
39
+ if title
40
+ @header += " <title>" + title + "</title>\n"
41
+ end
42
+
43
+ if style
44
+ style_str = " <style type=\"text/css\">\n"
45
+ File.open(style).each_line {|line|
46
+ style_str += (" " + line)
47
+ }
48
+
49
+ @header += style_str
50
+ @header += " </style>\n"
51
+ end
52
+
53
+ @header += "</head>\n"
54
+ @header += "<body>\n"
55
+
56
+ @footer = ""
57
+ if footer
58
+ @footer += "<footer>\n"
59
+ @footer += File.open(footer).read
60
+ @footer += "</footer>\n"
61
+ end
62
+ @footer += "</body>\n</html>\n"
63
+ end
31
64
  end
32
65
 
66
+ ##
67
+ # Converts equations to MathML format
33
68
  def equations_to_mathml string
34
69
  equations = []
35
70
 
@@ -45,6 +80,8 @@ class MMarkdown
45
80
  return string_mathml
46
81
  end
47
82
 
83
+ ##
84
+ # Returns list of table of contetns
48
85
  def toc_html nesting_level = 3
49
86
  render_toc = Redcarpet::Render::HTML_TOC.new(nesting_level: nesting_level)
50
87
  toc_html = Redcarpet::Markdown.new(render_toc).render(@md_mathml)
@@ -52,8 +89,22 @@ class MMarkdown
52
89
  return toc_html
53
90
  end
54
91
 
92
+ ##
93
+ # Returns HTML
55
94
  def to_str
56
- @md.to_str
95
+ str = ""
96
+ if @header
97
+ str += @header
98
+ end
99
+
100
+ str += @md.to_str
101
+
102
+ if @footer
103
+ str += @footer
104
+ end
105
+
106
+ return str
57
107
  end
108
+ alias :to_html :to_str
58
109
  end
59
110
 
data/test/footer.html ADDED
@@ -0,0 +1 @@
1
+ footer test
data/test/test.css ADDED
@@ -0,0 +1,2 @@
1
+ h1 {background-color: blue}
2
+ h2 {background-color: skyblue}
File without changes
@@ -5,7 +5,7 @@ require "#{__dir__}/../lib/mmarkdown"
5
5
 
6
6
  class MMarkdownTest < MiniTest::Test
7
7
  def test_mmarkdown
8
- md_string = File.open("#{__dir__}/test.md").read
8
+ md_string = File.open("#{__dir__}/test.mmd").read
9
9
  html_actual = MMarkdown.new(md_string).to_str
10
10
 
11
11
  html_expected = File.open("#{__dir__}/test.html").read
@@ -14,8 +14,22 @@ class MMarkdownTest < MiniTest::Test
14
14
  Nokogiri::HTML::DocumentFragment.parse(html_actual).to_html)
15
15
  end
16
16
 
17
+ def test_with_title
18
+ md_string = File.open("#{__dir__}/test.mmd").read
19
+ html_actual = MMarkdown.new(md_string,
20
+ title: "Test",
21
+ style: "#{__dir__}/test.css",
22
+ footer: "#{__dir__}/footer.html"
23
+ ).to_str
24
+
25
+ html_expected = File.open("#{__dir__}/test_with_title.html").read
26
+
27
+ assert_equal(Nokogiri::HTML::DocumentFragment.parse(html_expected).to_html,
28
+ Nokogiri::HTML::DocumentFragment.parse(html_actual).to_html)
29
+ end
30
+
17
31
  def test_toc_html
18
- md_string = File.open("#{__dir__}/test.md").read
32
+ md_string = File.open("#{__dir__}/test.mmd").read
19
33
 
20
34
  mmarkdown = MMarkdown.new(md_string)
21
35
  toc_actual = mmarkdown.toc_html
@@ -0,0 +1,95 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Test</title>
5
+ <style type="text/css">
6
+ h1 {background-color: blue}
7
+ h2 {background-color: skyblue}
8
+ </style>
9
+ </head>
10
+ <body>
11
+ <h1 id="test">Test</h1>
12
+
13
+ <p>This is a test data</p>
14
+
15
+ <h2 id="equation">Equation</h2>
16
+
17
+ <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>,
18
+ (<math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>x</mi><mo stretchy='false'>=</mo><mi>r</mi><mi>cos</mi><mi>&theta;</mi></math> and <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mi>y</mi><mo stretchy='false'>=</mo><mi>r</mi><mi>sin</mi><mi>&theta;</mi></math>).</p>
19
+
20
+ <p>And this is the second
21
+ <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msup><mi>sin</mi><mn>2</mn></msup><mi>&theta;</mi><mo stretchy='false'>+</mo><msup><mi>cos</mi><mn>2</mn></msup><mi>&theta;</mi><mo stretchy='false'>=</mo><mn>1</mn></math>.</p>
22
+
23
+ <p>日本語の後の数式 <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msubsup><mo stretchy='false'>&sum;</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>
24
+
25
+ <p>Block style
26
+ <math xmlns='http://www.w3.org/1998/Math/MathML' display='block'><msubsup><mo stretchy='false'>&int;</mo><mrow><mo stretchy='false'>-</mo><mn>&infin;</mn></mrow><mrow><mn>&infin;</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>
27
+
28
+ <p>Same equation again <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><msup><mi>sin</mi><mn>2</mn></msup><mi>&theta;</mi><mo stretchy='false'>+</mo><msup><mi>cos</mi><mn>2</mn></msup><mi>&theta;</mi><mo stretchy='false'>=</mo><mn>1</mn></math>.</p>
29
+
30
+ <p>vector:
31
+ <math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mover><mrow><mi>x</mi></mrow><mo>&rightarrow;</mo></mover><mo stretchy='false'>+</mo><mover><mrow><mi>y</mi></mrow><mo>&rightarrow;</mo></mover><mo stretchy='false'>=</mo><mover><mrow><mi>p</mi></mrow><mo>&rightarrow;</mo></mover></math></p>
32
+
33
+ <h2 id="markdown">Markdown</h2>
34
+
35
+ <p><em>italic</em></p>
36
+
37
+ <p><u>underline</u></p>
38
+
39
+ <p><strong>bold</strong></p>
40
+
41
+ <p><strong><em>bold italic</em></strong></p>
42
+
43
+ <h3 id="list">List</h3>
44
+
45
+ <ul>
46
+ <li>item1</li>
47
+ <li>item2
48
+
49
+ <ul>
50
+ <li>nested item2-1</li>
51
+ <li>nested item2-2</li>
52
+ </ul></li>
53
+ </ul>
54
+
55
+ <ol>
56
+ <li>item3</li>
57
+ <li>item4</li>
58
+ </ol>
59
+
60
+ <h3 id="quote">Quote</h3>
61
+
62
+ <blockquote>
63
+ <p>quote</p>
64
+ </blockquote>
65
+
66
+ <h3 id="table">Table</h3>
67
+
68
+ <table><thead>
69
+ <tr>
70
+ <th style="text-align: left">head1</th>
71
+ <th style="text-align: center">head2</th>
72
+ <th style="text-align: right">head3</th>
73
+ </tr>
74
+ </thead><tbody>
75
+ <tr>
76
+ <td style="text-align: left">item</td>
77
+ <td style="text-align: center">item</td>
78
+ <td style="text-align: right">item</td>
79
+ </tr>
80
+ </tbody></table>
81
+
82
+ <h3 id="syntax-highlight">Syntax highlight</h3>
83
+
84
+ <pre><code class="ruby">a = [1, 2, 3]
85
+ a.reduce(0, :+)
86
+ </code></pre>
87
+
88
+ <h3 id="link">Link</h3>
89
+
90
+ <p><a href="http://google.com">google</a></p>
91
+ <footer>
92
+ footer test
93
+ </footer>
94
+ </body>
95
+ </html>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mmarkdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroyuki Tanaka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-22 00:00:00.000000000 Z
11
+ date: 2015-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redcarpet
@@ -80,9 +80,12 @@ files:
80
80
  - bin/mmarkdown
81
81
  - lib/mmarkdown.rb
82
82
  - lib/mmarkdown/version.rb
83
+ - test/footer.html
84
+ - test/test.css
83
85
  - test/test.html
84
- - test/test.md
86
+ - test/test.mmd
85
87
  - test/test_mmarkdown.rb
88
+ - test/test_with_title.html
86
89
  homepage: http://github.com/tanahiro/mmarkdown
87
90
  licenses:
88
91
  - MIT License
@@ -103,11 +106,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
106
  version: '0'
104
107
  requirements: []
105
108
  rubyforge_project:
106
- rubygems_version: 2.2.2
109
+ rubygems_version: 2.4.4
107
110
  signing_key:
108
111
  specification_version: 4
109
112
  summary: Markdown with MathML
110
113
  test_files:
114
+ - test/footer.html
115
+ - test/test.css
111
116
  - test/test.html
112
- - test/test.md
117
+ - test/test.mmd
113
118
  - test/test_mmarkdown.rb
119
+ - test/test_with_title.html