月: 2012年7月

Programming

Sphinx+翻訳 Hack-a-thon 2012.07

今回のお題は、Google site のドキュメントを MoinMoin に移行しようZE☆

html2rest

最初のアプローチは、html2rest を使って直接変換する方法→玉砕

  • ヘッダとかメニューとかフッタとか、余計なものまで変換されて鬱陶しい
  • そもそもいろいろ崩れる!!

Copy&Paste

Google Site の編集モードでコピー、MoinMoin の GUI モードでペースト
→結構いける。文章部分はほぼ完璧。画像も来るけど、元のサイトへのリンクになる

画像とリンクの差し替え

該当ページのディレクトリの attachments 以下に直接画像ファイルをコピー、MoinMoin にペーストしたソースの、リンクを添付ファイルへのリンクに差し替え
差し替え用のスクリプトはこんな感じ。


import sys
import re

fp = open(sys.argv[1])
lines = fp.readlines()
fp.close()

fp = open(sys.argv[1]+'_clean', 'w')

pat = re.compile('https://.*/([^/\?].*)\?.*\}\}')

for line in lines:
    line = line.rstrip()
    while True:
        #replace image
        if not re.search('\[\[([^\]]*)\]\]', line):
            break

        #replace image
        m = re.search('(\[\[https://[^[]*/([^/\?][^\[]*)\?[^\[]*\}\}\]\])', line)
        if m != None:
            print m.group(1), ' ==> ', m.group(2)
            line = line.replace(m.group(1), '{{attachment:'+m.group(2)+'}}')
            continue

        #replace internal link
        m = re.search('(\[\[(.*)\|([^\]]+)\s*]*\]\])', line)
        if m != None:
            if re.search('https://sites.google.com/a', m.group(2)):
                #Inter Wiki
                #print m.group(1), ' =|> ', m.group(3), m.group(3)
                line = line.replace(m.group(1), '_SB_'+m.group(3)+'|'+m.group(3)+'_EB_')
            else:
                #external link
                #print m.group(1), ' =|> ', m.group(2), m.group(3)
                line = line.replace(m.group(1), '_SB_'+m.group(2)+'|'+m.group(3)+'_EB_')

    fp.write(line.replace('_SB_', '[[').replace('_EB_', ']]')+'\n')

fp.close()

このスクリプトを通すことで、以下の処理を行う

  • アタッチされた画像を参照するようにする
  • InterWikiName を変換
  • 外部ページへのリンクを MoinMoin 形式に変換

途中で Copy&Paste が入るので自動化は難しいものの、いずれにしても変換後のチェックはしなければいけないのでまあいいかなぁと。