次は,blogからjekyllか,kramdownへの変換.
私のemacsでは,C-c C-e m mが効かなくて,
一度,M-x org-md-export-as-markdownをする必要がある.
これは使わないことにする.
"org-mode kramdown converter"でgoogleといくつかある.
- https://orgmode.org/worg/org-tutorials/org-jekyll.html
- https://bminard.github.io/2018/08/using-org-mode-and-jekyll
- ううーん.Liquidに関するerrorがでる.
- https://orgmode.org/manual/Markdown-export.html
- https://github.com/eggcaker/jekyll-org
- これでいけた.
- org-jekyllをgem installして,_config.ymlに書いて,_posts/hoge.orgすると変換してくれる.
よく変換に失敗するが,これはLiquidが悪さをするみたい.
Liquidの避け方(19/06/14追記)
{% raw %}
...
{% rawend %}
で囲うとよい.
振る舞いのまとめ.
- そのままjekyll-orgの自動変換するとcolor highlightが効かない.
- liquid: enableするとさらに悪くなる.
- org-ruby --translate markdown #{file}.org > #{file}.md でmdにしておくとhighlightが効くが,liquidを展開してしまう.
- liquid: disableとかのkeywordにしたがって,挙動を変えられるようにしたいよね.
- なぜ,hightlightが効かないかが問題か.
- 残念ながらorg-jekyllが動かせるのは,localだけで,githubへはあげられないか.
ということで,
- orgで書いたblogを切り出して
- 外でmdに変えて,
- Jekyllへ適当なnameで送る
ということをしましょう.
変換code
ちょこっとcodeかいてみました.
#!/usr/bin/env ruby
require 'org-ruby'
def conv_md_and_store(target, file_name, data)
parser = Orgmode::Parser.new(data)
File.open(File.join(target, file_name),'w') do |f|
f.print parser.to_markdown
end
end
cont_start = false
target = '/Users/bob/ruby/jk/jekyll_test9/_posts'
cont = ""
file_name = ''
['blog.org','blog.org_archive'].each do |blog_file|
file = File.join ENV['HOME'], '.my_help', blog_file
File.readlines(file).each do |line|
m1 = line.match /^\* (.+) \<(.+) .+\>/
m2 = line.match /\^* (.+) \<([\d|-]*).*(\d{2}:\d{2}*)\>/
if (m1 or m2)
p line
m = m2 || m1
p m
conv_md_and_store(target, file_name, cont) if cont_start == true
cont = m2 ? "---\ndate: #{m2[2]} #{m2[3]}\n---\n" : ""
cont_start = true
p file_name = "#{m[2]}-#{m[1].split(' ').join('-')}.md"
line = ''
end
cont << line if cont_start == true
end
conv_md_and_store(target, file_name, cont)
end
blog作成手順
my_helpでblogを作成する手順は次の通りです.
> gem install my_help
> my_help new blog
> my_help edit blog
して,
* blog to Jekyll <2019-06-05 wed 09:26>
次は,blogからjekyllか,kramdownへの変換.
というformatで書いています.
titleがfile nameになるんで,「英語短め」でお願いします.
org-modeでdate, timeを入れるkey combinationは,
- date:: C-c .
- time:: C-u C-c .
(最後はドット)です.
convert to md methodの改良<19-06-16>
org-rubyではうまくintended listsが変換されません.
そこで,pandocに変更しました.ついでにjekyllのyaml headerに対応するように変更を加えました.
def split_head_body(conts)
body = conts
m = conts.scan(/---\n(.*?)---\n/m)
if m.size>0
head = "---\n"
m.each do |match|
head << match[0]
conts.gsub!("---\n"+match[0]+"---\n", '')
end
head << "---\n"
else
head = ''
end
return head, body
end
require 'fileutils'
def conv_md_and_store(file_name, conts)
head, conts = split_head_body(conts)
File.write("./tmp.org", conts) # need revise to use temporary class
file = File.join($target, file_name)
File.write("tmp.md", head)
command = "pandoc -f org -t markdown ./tmp.org >> tmp.md"
system command
FileUtils.cp('tmp.md', file)
end