hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

EBシリーズのdsl対応進捗

前回、EBシリーズでdslフォーマットの対応を検討していることを報告した。
ebstudio.hatenablog.com

その後の進捗だが、フェーズ1(ユーザ辞書へのコンバート)とフェーズ2(dslにインデックスを作成)の両方を同時に進めている。とりあえず、EBWin4とEBPocket for Android ではそれらしく検索および表示できるようになってきた。

.dslと .dsl.dz に対応している。.dsl.dzというのは、dictzipユーティリティで圧縮した形式であり、gzip互換だがランダムアクセスがしやすいように拡張されている。7zipを使うと.dsl.dzを.dslに展開できる。.dsl.dzで辞書を公開しているサイトがあってかなりポピュラーなので、対応することにした。

EBWin4に .dsl または.dsl.dzを追加しようとすると、自動的にインデックスを作成する。母艦で作成したインデックスは、モバイル版に転送して使用できる。

下記URLのサンプルの abandon の項目例と比較してみて欲しい。

Sample Entries in DSL | ABBYY Lingvo

f:id:hishida:20191221185807p:plain

 

下記サイトからGoogle Translate (Eng-Rus) 辞書をダウンロードしたもの。

бумакопанiя

f:id:hishida:20191221185821p:plain

同じ辞書をEBPocket for Androidで表示。

f:id:hishida:20191221185841p:plain

f:id:hishida:20191221185853p:plain

インデックス作成を母艦で行う必要があるのがネックだが、この段階でリリースしたとして、ユーザのみなさんに使っていただけるだろうか。モバイル版でもインデックス作成を行えるようにしようとは考えている。

iOS版とMac版がまだ手つかずだが、フェーズ1,フェーズ2までなら、来年初にはリリースできる予定。

EBシリーズのDSL形式への対応方針について

数年前から進めていた既存アプリのリニューアル(KWIC Finder4、EBStudio2、EBWin4のタブ化等)が一段落し、モバイルアプリのダークモード対応もできたので、次なるお題を考える余裕ができてきた。

以前から要望があるdslフォーマット(ABBYY Lingvoの辞書フォーマット)の検討を再開したいと思う。
dslはテキスト形式の辞書のソースで、dsl compilerによってコンパイルしたバイナリ形式がlsdである。

lingvo.helpmax.net


lsdの構造は非公開だが、lsdからdslに変換するツールがいくつかあるので、リバースエンジニアリングを行えば対応は不可能ではない。だが作業時間は膨大になることが予想される。

github.com


そこで、段階的に対応することを考えた。

フェーズ1 EBWinのユーザ辞書形式に変換する

一番簡単なのは、dslからEBWinのユーザ辞書に変換することである。これでdslのパーサーと、dsl形式の辞書の内容の表示ルーチンができあがる。
変換の手間はあるが、公開されているdslを(モバイルも含めて)EBシリーズで利用することができる、
(作業工数1~2カ月)

フェーズ2 dslに対してインデックスを作成する

次は、dslのソースをそのまま辞書ファイルとして利用し、インデックスだけ作成してEBシリーズで利用することである。モバイルでインデックスをつくると辞書のサイズによっては長考状態になるので、母艦でインデックスを作成してdslと一緒に転送してもよいようにする。
(パーサーとdsl形式の表示ルーチンはフェーズ1で開発済みということになる)
(作業工数1~2カ月)

フェーズ3 lsdのネイティブサポート

最後に、リバースエンジニアリングによってlsdを解析し、直接参照できるようにする。
ただし、膨大な作業時間が予想されるので、フェーズ2までで終わる可能性が高い。あまり過度な期待はいだかないでほしい。
可能性として書いているだけで、着手できるかどうかもわからない。

現在フェーズ1の途中であり、整形していないdslの生データが検索出来ているところまでのスクリーンショットを掲載しておく。あとはテキストを整形して表示できるようにすれば、フェーズ1までは実現することになる。

 

f:id:hishida:20191207143645p:plain

 

EBPocket Pro for iOS iOS13ダークモード対応

EBPocket Pro for iOS のダークモード対応が終了し、無事App Store で公開できた。iOS13のダークモード対応以外の新機能の追加はない。

ダークモード対応を有効にするにはXcode11でビルドする必要があるのだが、Xcode11でビルドしたモジュールがiOS13ではメモリ管理の関連で予期せぬクラッシュが発生し、問題を回避するのに大半の時間を費やした。

結局、検索一致リストにEPWING外字を表示するために使っていた独自クラスをUIWebViewに置き換えることで動作するようになった(オリジナルのソースも間違っているようには見えないので、原因は謎のまま)。

iOS14以降に懸念されることは、deprecated(非推奨)とされているAPIをまだ使っている箇所があって、iOS14以降APIが廃止されると動作しない可能性があることだ。

把握しているのでは、

  • UIPopoverController(iOS9でdeprecated)→UIPopoverPresentationControllerで置き換え
  • UIWebView(iOS12でdeprecated)→WKWebViewで置き換え

がある。今回は無事だったが、iOS14ではそろそろやばいかもしない。iOS14ベータが出た段階でテストする予定。

今回、Macの開発環境をXcode11に統一できたことが成果かもしれない。2020年4月以降は、AppStoreへの提出はXcode11+iOS13 SDKが義務づけられるからだ。

これでAndroid,Mac OS X ,iPhoneでのダークモード対応が終わり、残るはWindows だけになった。Windows 10 ではMay 2019 Updateでダークモードがサポートされたが、アプリケーション側で独自に対応する必要がある不完全なもので、なかなか面倒だ。まだ標準アプリとChromeぐらいしか対応していないと思う。EBWin4のダークモードは実現できるかどうか、今のところわからない。

EBMac ダークモード対応

EBMacの開発環境を最新のXcode11に移行し、macOSもCatalinaにアップデートしたところ、Xcode11でコンパイルしたappは自動的にダークモード対応とみなされることがわかった。
せっかくなので画面の各部の色を調整し、正式にダークモード対応とした。どうでしょうか。

f:id:hishida:20191105130300p:plain

EBPocket for iOSもダークモード対応可能だと思うので、検討してみたい。

「ランダムハウス英語辞典Toolkit」をEBStudio2で変換する場合の注意点

「ランダムハウス英語辞典Toolkit」で作成したHTMLが、EBStudio2では文字化けするという報告があった。旧EBStudioとは互換性を保っているはずなので、調査したところ、EBStudio2の新機能の「UnicodeからEPWING外字に自動登録する」が悪さをしていることがわかった。

ランダムハウス英語辞典Toolkit」では、文字の字下げを表現するために、EPWINGの制御文字(0x1F09)を直接16進コードで表現している箇所がある。

<dd><p>
[&#x00E9;i] a<br>
&#x1f09;&#x00;&#x02;━n.<br>
&#x1f09;&#x00;&#x02;(pl. A&apos;s or As, a&apos;s or as)<br>
&#x1f09;&#x00;&#x02;【1】英語アルファベットの第1字(母音字).<br>
&#x1f09;&#x00;&#x02;【2】A, a 字によって表される音[ei](bake),[&#xE0EC;](hat),[&#x0251;&#x02D0;](father),[&#x0254;&#x02D0;](small) など.<br>
&#x1f09;&#x00;&#x02;【3】A 字形の物.<br>
&#x1f09;&#x00;&#x02;【4】(印刷・スタンプ・手書きなどの)A, a 字.<br>
&#x1f09;&#x00;&#x02;【5】&#xE13B;数学&#xE13C;第一の既知数[量].<br>
&#x1f09;&#x00;&#x02;<b><成句></b>
</p>


旧EBStudioでは、16進コードの0x1F09 0x0002 は外字として定義されていないため、そのままEPWINGに出力していたが、EBStudio2だと「Unicodeの0x1F09(Ἁ)が出現した」と解釈してしまい、そのために文字化けが生じていた。EBStudioの本来の仕様では、制御文字を直接指定したい場合のために拡張タグを用意している。

<X4081>1F09 0002</X4081>

互換性を保つために、EBStudio win版(2.0.9)およびmacOS版(2.0.5)では、「UnicodeからEPWING外字に自動登録する」機能をオプションにした。
ランダムハウス英語辞典Toolkit」を使用する場合は、このオプションをoffで実行してほしい。

ランダムハウス英語辞典Toolkit」をWindows10で実行する

 なお、「ランダムハウス英語辞典Toolkit」では「ランダムハウス英語辞典」をインストールしてから変換する前提になっているが、インストーラがWindows10では実行できない。次の手順でインストールを行わずに変換ができる。

  1. CD-ROMの \DATAをまるごとPCの任意のディレクトリにコピー。
  2. CD-ROMのルートにあるReadme.txtを、コピーしたDATAディレクトリの中にコピー。
  3. 設定ファイルsrd2html.iniの DICPATH= と DATAPATH= に、1のコピー後のDATAディレクトリを指定する。

 

EBMac、AppStoreからrejectされる

前回EBMacをApp Store配布に切り替えると告知したが、あえなくApp Storeの審査でreject(却下)されてしまった。理由は、「EBMacというアプリケーション名称に Mac が含まれているから」。

名前が却下されてしまったのでは仕方ない。EBPocket の名称で登録してマニュアル等では "EBPocket on macOS(EBMac)"とするという方法も考えられるが、EBPocketの名称でAndroid版、iOS版、macOS版が存在することになり、問合せの時にプラットフォームを言ってもらわないと話が通じなくなる。

実は Apple notary service でAppleの認証を受ければ、これまで通り野良アプリを配付できるので、App Storeは諦めて認証を受けることにした。 

qiita.com

App Storeで配付することを想定していたので、今回からSandBox 対応になる。これまでの辞書グループ登録は引き継げないので、もう一度辞書登録を行っていただく必要がある。

とりあえずhome pageでCatalina対応の EBMac 1.44.0 を公開した。当面はこれまで通りVectorでの配布を継続するつもりである。

NotarizeされたアプリをダウンロードしてmacOS Mojave以降で実行すると、初回のみ次のような確認メッセージが表示される。そのまま開けば次回から確認なしで実効できるので、ユーザーの負担は少ない。

f:id:hishida:20191025143026p:plain

EBStudio for macOSも、2020年1月までには認証を受ける必要がある。こちらも近日中に対応する予定である。