2007-12-28-01-Inside Japonica - 2 - 縦書きにおける文字描画 - project-enigma

2007-12-28-01-Inside Japonica - 2 - 縦書きにおける文字描画

>> Site top >> weblog >> 月別アーカイブ >> 2007年12月のlog >> 2007-12-28-01-Inside Japonica - 2 - 縦書きにおける文字描画

最終更新日付:2013/12/31 07:37:49


Inside Japonica - 2 - 縦書きにおける文字描画

2007 年 12 月 28 日

Japonica を使ってくださる皆さん、あるいは weblog にて Japonica を紹介してくださる皆さん、本当にありがとうございます。この場を借りて御礼申し上げます。

...というわけで、第2回です。

好意的な評価をいただけているようで一安心...の縦書き表示ですが、今日はその縦書き表示について書いてみようかと。ポイントは、「 ズラし 」 と 「 回転 」 です。

説明ドキュメントである 「 About Japonica 」 を縦書き表示にしていただけるとわかると思うのですが、いわゆる半角英数字については、縦書き表示では横向きで(というか寝かせて)表示されます。また、全角の句読点や小さな 「 っ 」 とか、あるいは記号系の文字( 特に括弧 ) など、それぞれがそれなりに自然に描画されていることにお気づきいただけると思います。

作者である陰郎は、そもそも Doc リーダーソフトのヘヴィユーザーではありません。しかし、Japonica 開発にあたって既存の縦書きリーダーを改めて使ってみたところ、どうしても我慢できないポイントが1つありました。それは、括弧類や半角英数字など、「 時計回りに90度回転させる必要のある文字で独自フォントを使っている(と思われる)」ことです。つまり、〜そのデバイスで使っているフォントとなじまなかったり、〜そもそも標準フォントは倍精度なのにその部分だけ単精度だったりするのです。以下は、縦書き表示可能な既存 Doc リーダーでの表示例です。

初めて見たときは、やはりこれは残念だと思いました。と同時に、Palm OS 3.5 や OS 4 の時代から使われているアプリケーションとしては、他に選択肢がないこともよくわかります。しかし、Japonica で同じコトをするわけにはいきません。今は 2007 年ですし、Palm OS 5 が主流なのですから。

ではどうするか。この問題については悩みました。仮に倍精度のフォントを用意したとしても、結局色々なデバイスで自然な表示をするには、「 まさにそのフォント 」 を使う必要があるわけです。そして、日本語化した英語版 Palm デバイスでは限られているとはいえ、それでも数種類のフォントがあります。独自のフォントを組み込んでいるようなツワモノだっているかもしれません。誰にとっても、どのような状況でも自然に見えるような解決法は、ひとつしか思いつきませんでした。

── 解決法 : リアルタイムで回転させて描画する。

そう、それしかないんです。Palm の半角フォントはプロポーショナル、つまり可変幅フォントです。それをきっちり横に寝かせて描画しなくちゃならない。しかも回転だけではないのです。句読点は、右上に半文字分くらい移動する必要がありますし、小さな「 っ 」 や 「 ゃ 」 なんかはそれよりも移動幅は少ないでしょう。

どの文字を回転するのか? それは、漢字以外の全ての Shift-JIS コード表とにらめっこして決めました。一文字ごとに、そのまま描画か、右90度回転か、ズラして描画か、全て判定しています。その結果、以下のようになります。

回転描画では、いったん専用の小さな内部バッファに文字を描画し、それを時計回りに90度回転させるようなビット演算をしつつコピーすることで回転を実現しています。ベータテストではこの部分に潜んだバグによってリセットやクラッシュ、データの汚損といったありとあらゆる災厄が降りかかりました。

画面に表示する範囲を描画するために、毎回このような重たい処理をやっているわけですから、ARM ネイティブコードで書かなかったらどんなことになっていたか、身の毛もよだつような思いがします。

余談ですが、実はこの Japonica、ARM ネイティブコードで動作している部分に対応する 68K コードを内蔵しています。ですから、コンパイルスイッチを切り替えるだけで全部 68K エミュレーションで動作する Japonica を作ることもできるんです...とはいえ、怖くて試していません。それに、「 じゃ Palm OS 4 対応の Japonica もリリースできるのでは?」 という指摘は残念ながら無理なんです。OS 5 以降でサポートされるようになった API を使っていますし、それに full 68K で動作する Japonica は遅くて使い物にならないでしょう。時間があったら試しにやってみるかもしれませんが。

続く

 

コメント

このページにコメントする

 

このページのタグ

Page tag : Palm

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.