SC3ヘルプファイル─フォント最適化スクリプト(Mac->Win)

ところでこれらの和訳済ファイルをWindows用のSC3クライアントPsyCollider(wxPython)上のRTFビューワで開くと、ヒラギノやOsakaなどのMac系フォントが見つからないせいか*1、フォントの幅や形がグチャグチャになってしまいます。(その他のHelveticaやMonacoなども同様、Windows上ではきれいに表示してくれません)

そこで、Benからもらったフォント変換用のマクロに、日本語フォントの変換部分も付け足しました。コードは以下に。ちなみに僕はVBAマクロの書き方をよく知りません。

Sub SCMacRTFToWinRTF()
'
' Macro1 Macro
' Macro enregistr馥 le 16/10/2004 par  Benjamin Golinvaux
'
    
' Helvetica --> Arial
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Font
        .Name = "Helvetica"
    End With
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Replacement.Font.Name = "Arial"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

' Helvetica-Bold --> Verdana(bold)
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Font
        .Name = "Helvetica-bold"
    End With
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Replacement.Font.Name = "Verdana"
        .Replacement.Font.Bold = True
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

' Monaco --> Courier New
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Font
        .Name = "Monaco"
    End With
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Replacement.Font.Name = "Courier New"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

' Geneva --> Courier New
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Font
        .Name = "Geneva"
    End With
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Replacement.Font.Name = "Courier New"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

' Helvetica-Oblique --> Arial(italic)
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Font
        .Name = "Helvetica-Oblique"
    End With
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Replacement.Font.Name = "Arial"
        .Replacement.Font.Italic = True
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
' Osaka−等幅 --> MS ゴシック
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Font
        .Name = "Osaka−等幅"
    End With
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Replacement.Font.Name = "MS ゴシック"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
' HiraKakuPro-W6 --> MS Pゴシック(bold)
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Font
        .Name = "HiraKakuPro-W6"
    End With
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Replacement.Font.Name = "MS Pゴシック"
        .Replacement.Font.Bold = True
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

'HiraKakuPro-W3 --> MS Pゴシック
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Font
        .Name = "HiraKakuPro-W3"
    End With
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Replacement.Font.Name = "MS Pゴシック"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
End Sub

ヒラギノ角ゴシックPro-W3/W6」は「MS Pゴシック-normal/bold」へ、「Osaka」は「MS Pゴシック」へ自動変換します(注)*2。また一部僕の個人的な好みから、太字タイトルに使用されている「Helvetica-Bold」は「Verdana(Bold)」へ、斜体の「Helvetica-Oblique」は「Arial(italic)」へ等と、オリジナルのスクリプト*3とは多少異なる部分があるのでご了承ください。

次に、PythonからWindowsのCOMを扱えるようにするため、Python for Windows Extensionsモジュールをインストールしましょう。
http://www.python.jp/Zope/download/win32all
ここの2.3用のwin32all-153.exeでいいと思います。

あとはこのVBAスクリプトを、MSワードのツール→マクロから新しいマクロを「作成」するか、「編集」を選択してVisualBasicエディタを開き、そこにそのままコピペして保存するだけです。ここでWordは閉じておいた方がいいようです。僕の場合、Wordが起動したままだと失敗することがありました。その後、コンバートしたいファイル(rtf)を置いたディレクトリ(フォルダ)上に同梱のConvertHelpFolderToWinRTF.pyを持ってきてダブルクリックで起動させるだけでOK*4です。しばらく待ってればPython君がうまくWordと連携プレーをやってくれて、フォルダのサブツリーを含め全て自動巡回→変換してくれます。

また、Psycollider上でヘルプファイルを読んでいるとき、フォントが大きすぎる、または小さすぎると感じた場合は、「Ctrl+マウスホイールボタン」でクリクリやるのが便利です。ちなみに僕はたいてい2サイズほど落として読んでます。

*1:これらのフォントをWindows上でも表示できる(持っている)人は問題ないと思います。

*2:といいつつOsakaだけ何故か変換できません。現在原因究明中です。…数時間前は究明中でしたが、もう原因がよくわからないので、Pythonで"Osaka"の文字列を"MS PGothic"で置換するような、かなり強引な方法で対処することにしました。Osakaがうまく表示できない人は、僕の配布しているモノに同梱したConvertHelpFolderToWinRTF.pyの方を使ってコンバートしてください。RTFファイルフォーマットの解析が不十分なので幾分不安ですが、なんとかうまくやれてるみたいです。

*3:今回、ConvertHelpFolderToWinRTF.pyのコメント部分に、フォント変換用のVBAスクリプトをのっけてもらいました(by Benjamin)。CVSからも、僕の配布場所からもこれは入手可能です。

*4:僕は"d:\usr\bin"という実行ファイルパスの通ったディレクトリを作ってあるので、そこに前述のpythonスクリプトをrtfconv.pyとリネームしておいてます。きちんと現在のディレクトリを取得してくれるので、変換したいrtfが置いてあるディレクトリでコマンドラインから"rtfconv"とタイプするだけで使えるのでとっても便利です。シンボリックリンクが使えればもっといいんだけど。