CHM ファイルを HTML に変換してキーワード一覧を取り出す

Windows のヘルプファイルである CHM ファイルには「キーワード」を一覧表示する機能がある。ここに表示されてるキーワードを全部取り出したい。

結論

取り出せる。

ただし後半で Grep や正規表現の知識が必要になると思われる(無くても取り出せるが手作業地獄で大変だと思う)。

以下手順を示す。

1: HTML Help Workshop をインストールする

Download HTML Help Workshop and Documentation from Official Microsoft Download Center からインストーラーをダウンロードする。

ダウンロード後、インストーラーを叩いてインストール。

2: CHM ファイルを HTML ファイルに変換する

HTML Help Workshop を実行する。たぶん "C:\Program Files\HTML Help Workshop\hhw.exe" のはず。

実行したら以下手順で変換を実施。

  • File メニュー > Decompile を選ぶ
  • Destination folder に HTML 生成先フォルダを、Compiled help file に変換したい CHM ファイルを指定
  • OK ボタンを押す

すると、Destination folder で指定したフォルダ内に、変換された HTML ファイル等がずらりと保存されているはず。

3: キーワード一覧を取り出す

ここから大変。

hhk ファイルがあるはずなので、それをテキストエディタで開く。中身は XML でずらりと書いてあり、ここにキーワードもあるので Grep やら正規表現やらを駆使して頑張って抽出する

hhkファイル例1: AutoHotkey

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<body>
<ul>
<li><object type="text/sitemap"><param name="Name" value="#AllowSameLineComments"><param name="Local" value="docs/commands/_AllowSameLineComments.htm"></object>
<li><object type="text/sitemap"><param name="Name" value="#ClipboardTimeout"><param name="Local" value="docs/commands/_ClipboardTimeout.htm"></object>
<li><object type="text/sitemap"><param name="Name" value="#CommentFlag"><param name="Local" value="docs/commands/_CommentFlag.htm"></object>
...

キーワードは <param name="Name" value="#AllowSameLineComments">#AllowSameLineComments の部分である。ここを取り出せばよい。

hhkファイル例2: 秀丸エディタ

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1">
<!-- Sitemap 1.0 -->
</HEAD><BODY>
<UL>
    <LI> <OBJECT type="text/sitemap">
        <param name="Keyword" value="ascii">
        <param name="Name" value="ascii( s1 ) 関数">
        <param name="Local" value="html/070_Function_ascii.html">
        </OBJECT>
    <LI> <OBJECT type="text/sitemap">
        <param name="Keyword" value="beep">
        <param name="Name" value="beep文">
        <param name="Local" value="html/090_MessageStatement_beep.html">
        </OBJECT>
    ...

キーワードは <param name="Keyword" value="beep">beep の部分である。ここを取り出せばよい。

4: 取り出したキーワード一覧から不要なキーワードを除く

この手順は不要ならしなくてもいい。

そもそもキーワード一覧を取り出す目的は「シンタックスハイライトしたいキーワードを取り出したい」だと思う。となれば、シンタックスハイライトしなくてもいいワードについては一覧から除外してやる必要がある。

例: 秀丸エディタのヘルプからキーワード一覧を取り出した場合

取り出しただけだと以下のようになった。この中にはシンタックスハイライトしなくてもいいワード(★をつけてみた)があり、これを除外する必要がある、というのが本手順だ。

ascii
beep
音               ★要らない(日本語)
サウンド         ★要らない(日本語)
break
char
columntox
restoredesktop
savedesktop
split
compfile
COMPFILE         ★要らない(重複)
比較             ★要らない(日本語)
...

さて、除外方法だが 目視しながら一つずつ頑張って消していくしかない と思う。