1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-06-05

次は,blogからjekyllか,kramdownへの変換.

私のemacsでは,C-c C-e m mが効かなくて,
一度,M-x org-md-export-as-markdownをする必要がある.
これは使わないことにする.

"org-mode kramdown converter"でgoogleといくつかある.

よく変換に失敗するが,これは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
1
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?