org-modeからjekyllへの自動配置

次は，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://orgmode.org/worg/org-tutorials/org-jekyll.html)
 * [https://bminard.github.io/2018/08/using-org-mode-and-jekyll](https://bminard.github.io/2018/08/using-org-mode-and-jekyll)
  * ううーん．Liquidに関するerrorがでる．
 * [https://orgmode.org/manual/Markdown-export.html](https://orgmode.org/manual/Markdown-export.html)
 * [https://github.com/eggcaker/jekyll-org](https://github.com/eggcaker/jekyll-org)
  * これでいけた．
  * org-jekyllをgem installして，_config.ymlに書いて，_posts/hoge.orgすると変換してくれる．

よく変換に失敗するが，これはLiquidが悪さをするみたい．

## Liquidの避け方(19/06/14追記)
``` html
{% 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かいてみました．

```ruby
#!/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に対応するように変更を加えました．

~~~ ruby
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
~~~