おれおれマークダウン

おれおれマークダウンをRubyで書いてみました。単にhtmlを吐きながらちょっとだけ変換するだけですけど。こういうのはべたに強引に書いてしまうのがよい。ブログを書くのにも使えるようにヘッダの出し方を2種類用意しました。

書き始めに「こんなのはいらなくて、テキストでいいのではないか?」とも思いましたが、MathJaxで数式を書けるのはよいだろうということになりました。個人的な好みにより左寄せです。これで数学の勉強がはかどるはず。

2次方程式

\(ax^2+bx+c=0 \quad ( a \neq 0 ) \) の解は \[ x = \frac{-b \pm \sqrt{b^2-4ac}}{2a} \]

不等号

>

$$a>b$$

\\lt

$$a \lt b$$

ソースコード

require 'optparse'

mathjax = <<RUBY
<script>
  MathJax = {
    chtml: {
      displayAlign: "left",
    }
  };
</script>
<script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
</script>
RUBY

header1 = <<-RUBY
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <script>
      MathJax = {
        chtml: {
          displayAlign: "left",
        }
      };
    </script>
    <script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
    </script>
    <title>
RUBY
header2 = <<RUBY
</title>
  </head>
  <body>
    <h1>
RUBY
header3 = <<~RUBY
    </h1>
RUBY
footer = <<RUBY
  </body>
  </html>
RUBY
code_header = <<~RUBY
<pre style="overflow-x: scroll;padding: 1px 1px 1px 1px;border:1px solid black"><code>
RUBY
code_footer = <<~RUBY
</code></pre>
RUBY

opt = OptionParser.new
type = :html
opt.on('-b', '--blog', 'blog type output') do |v|
  type = :blog
end
filename = ""
opt.on('-i VAL', '--input', 'input filename') do |v|
  filename = v
end
opt.parse!(ARGV)
File.open(filename, "r") do |i| 
  mode = :normal
  line_num = 1
  i.each_line do |line|
    line.chomp!
    if line_num == 1 then
      if type == :html then
        puts header1.chomp + line + header2.chomp + line + header3
      else
        puts mathjax
      end
    elsif line.match(/^```/) then
      if mode == :normal then
        mode = :code
        printf code_header.chomp
      elsif mode == :code
        mode = :normal
        puts code_footer
      end
    elsif mode == :code
      line.gsub!('&', "&amp;")
      line.gsub!('<', "&lt;")
      line.gsub!('>', "&gt;")
      puts line
    elsif md = line.match(/^##([^#]*)/) then
      title = md[1].strip
      printf("<h3>%s</h3>\n", title)
    elsif md = line.match(/^#([^#]*)/) then
      title = md[1].strip
      printf("<h2>%s</h2>\n", title)
    else
      puts line
    end
    line_num = line_num.succ
  end
end
if type == :html then
  puts(footer)
end

ソースコードの後

テスト

入力ファイル

mymarkdown test

<p>おれおれマークダウンをRubyで書いてみました。単にhtmlを吐きながらちょっとだけ変換するだけですけど。こういうのはべたに強引に書いてしまうのがよい。ブログを書くのにも使えるようにヘッダの出し方を2種類用意しました。</p>
<p>書き始めに「こんなのはいらなくて、テキストでいいのではないか?」とも思いましたが、MathJaxで数式を書けるのはよいだろうということになりました。個人的な好みにより左寄せです。これで数学の勉強がはかどるはず。</p>

#2次方程式
\(ax^2+bx+c=0 \quad ( a \neq 0 ) \) の解は
\[ x = \frac{-b \pm \sqrt{b^2-4ac}}{2a} \]

# 不等号
##&gt;
$$a>b$$
## \\lt
$$a \lt b$$

#ソースコード
 ```ruby
require 'optparse'

mathjax = <<RUBY
<script>
  MathJax = {
    chtml: {
      displayAlign: "left",
    }
  };
</script>
<script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
</script>
RUBY

header1 = <<-RUBY
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <script>
      MathJax = {
        chtml: {
          displayAlign: "left",
        }
      };
    </script>
    <script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
    </script>
    <title>
RUBY
header2 = <<RUBY
</title>
  </head>
  <body>
    <h1>
RUBY
header3 = <<~RUBY
    </h1>
RUBY
footer = <<RUBY
  </body>
  </html>
RUBY
code_header = <<~RUBY
<pre style="overflow-x: scroll;padding: 1px 1px 1px 1px;border:1px solid black"><code>
RUBY
code_footer = <<~RUBY
</code></pre>
RUBY

opt = OptionParser.new
type = :html
opt.on('-b', '--blog', 'blog type output') do |v|
  type = :blog
end
filename = ""
opt.on('-i VAL', '--input', 'input filename') do |v|
  filename = v
end
opt.parse!(ARGV)
File.open(filename, "r") do |i| 
  mode = :normal
  line_num = 1
  i.each_line do |line|
    line.chomp!
    if line_num == 1 then
      if type == :html then
        puts header1.chomp + line + header2.chomp + line + header3
      else
        puts mathjax
      end
    elsif line.match(/^```/) then
      if mode == :normal then
        mode = :code
        printf code_header.chomp
      elsif mode == :code
        mode = :normal
        puts code_footer
      end
    elsif mode == :code
      line.gsub!('&', "&amp;")
      line.gsub!('<', "&lt;")
      line.gsub!('>', "&gt;")
      puts line
    elsif md = line.match(/^##([^#]*)/) then
      title = md[1].strip
      printf("<h3>%s</h3>\n", title)
    elsif md = line.match(/^#([^#]*)/) then
      title = md[1].strip
      printf("<h2>%s</h2>\n", title)
    else
      puts line
    end
    line_num = line_num.succ
  end
end
if type == :html then
  puts(footer)
end
 ```

#ソースコードの後
<span style="color: red">テスト</span>

#入力ファイル
省略

コメント

このブログの人気の投稿

五十音配列付き新下駄配列

WSLでの親指シフトはどうやらMozcで実現可能と気がつくまで

親指シフト新下駄配列の可能性