Skip to content

Instantly share code, notes, and snippets.

@tdtds
Created November 10, 2017 06:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tdtds/3739a0037c87264f6c5451262d37802d to your computer and use it in GitHub Desktop.
Save tdtds/3739a0037c87264f6c5451262d37802d to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
#
# Convert tDiary's documents from HikiDoc to Markdown
#
# Copyright (C) Tada, Tadashi <t@tdtds.jp>
#
require 'open-uri'
require 'nokogiri'
require 'cgi'
def each_plugins
while l = gets
plugin = l.scan(/\[(.*)\]/).flatten.first
next unless plugin
if plugin =~ /^\[.*\]$/
plugin.sub!(/^\[(.*)\]$/){$1}
end
yield plugin
end
end
def hiki_file(plugin); "#{plugin}.hiki"; end
def md_file(plugin); "#{plugin}.md"; end
def save_hiki(plugin)
hiki = hiki_file(plugin)
return if File.exist?(hiki)
encoded_plugin = CGI.escape(plugin.encode('EUC-JP'))
html = Nokogiri(open("http://docs.tdiary.org/ja/?c=edit;p=#{encoded_plugin}", &:read))
open(hiki, 'w') do |f|
f.write(html.css('div.textarea textarea').text)
end
end
def convert_block(l)
l.
sub(/^!!! */, '### ').sub(/^!! */, '## ').sub(/^! */, '# ').
sub(/^\*\*\* */, ' * ').sub(/^\*\* */, ' * ').sub(/^\* */, '* ').
sub(/^:(.*?):(.*)/){"### #$1\n#$2"}.
sub(/^<<<|^>>>/, '```').
sub(/^""/, '> ').
sub(/^ {1,3}([^ ]+)/){" #$1"}
end
def convert_inline(l)
l.gsub(/\[\[(.*?)\]\]/){
label, url = $1.split(/\|/)
url ? "[#{label}](#{url})" : "[[#{label}]]"
}.
gsub(/'''(.*?)'''/){"**#$1**"}.
gsub(/<.*?>/){|t| l =~ /^ / ? t : "`#{t}`"}
end
def convert(plugin)
open(md_file(plugin), 'w') do |w|
open(hiki_file(plugin), &:read).each_line do |l|
l = convert_block(l)
l = convert_inline(l)
w.write(l)
end
end
end
each_plugins do |plugin|
save_hiki(plugin)
convert(plugin)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment