おれおれマークダウン
おれおれマークダウンを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!('&', "&")
line.gsub!('<', "<")
line.gsub!('>', ">")
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} \]
# 不等号
##>
$$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!('&', "&")
line.gsub!('<', "<")
line.gsub!('>', ">")
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>
#入力ファイル
省略
コメント
コメントを投稿