CJKOS Japanese Fonts

Author: TSUMURA,Tomoaki
Created: 2003/10/28
Modified: 2003/11/08
T|E

フォントは大事です。フォントの見易さは,PDAの使い易さに直結します。 しかし現在,J-OS ではフォントを自由に変更することができません。 また, ミニーの資料室 においては,CJKOS用の medium/large フォントが配布されていますが, tiny/small フォント,およびフォントのデータ構造は公開されていません。

個人的に,もっとフォントに自由度が欲しい。特に ナガ10M+東雲などの良質なフォントを CJKOS の tiny/small フォントとして使用したいと思い, CJKOS同梱フォントのデータを眺めてみたところ,案外単純そうだったので 解析してみました。

Table of Contents

> What's New?
更新履歴です。
> Japanese Fonts for CJKOS
フリーのBDFフォントからコンバートした,CJKOSで利用できる 日本語フォントです。
> Structure of Font DB
CJKOSの日本語フォントのデータ構造を,分かった範囲で解説します。
> BDF -> CJKOS font(JIS) Converter
BDFフォントをCJKOS用日本語フォントに変換する perl script を公開します。
> Links
このページで使用させていただいているBDFフォントの,オリジナル配布元への リンク集です。

What's New?

2006/01/25
コンバータを bug fix。
2003/11/08
M+ フォントで古いバージョンのBDFを使っていたため,特に 10dot で第2水準の多くの文字が欠けてしまっていました。 最新のもの (ver.2.1.0) からコンバートし直しました。 M+ 10dot downloadM+ 12dot download
2003/11/05
各種 bold フォント,芦屋フォントを含む,いくつかのフォントを 追加しました。

Japanese Fonts for CJKOS

CJKOS のフォントフォーマットを独自に解析し,そのフォーマットに沿って BDF から変換したものです。 これらの一部はダウンロードして,そのまま使用することができます。 個人的には,「M+(10),東雲(12),東雲bold(16),JISKAN24(24)」の 組み合わせが見易いのではないかと思いますが,いろいろお試しください。

画像は J-DOC reader を用いた場合の screenshot (画面左上160x160のみcropしたもの) です。 各フォントファイルの配布条件は,オリジナル BDF フォントの配布条件に 従います。Bold フォントの生成には,mkbold を使用させていただいています。 Tungsten E + CJKOS ver4.5 for Palm OS5 を用いて実機検証済ですが, 本フォントを利用したことにより発生した不具合等に関する責任は一切負わない ものとします。

注) これらは 全て変換スクリプトを用いて生成しました。 Perlの実行環境をお持ちでない方で,変換してほしいフォントがある場合は, 気軽に連絡してください。ただし,オリジナルフォントのライセンス条件によっては, このページで配布できない場合があります。

10dot

ナガ10 ナガみん ナガまる M+
Download (ZIP: 67kB) Download (ZIP: 67kB) Download (ZIP: 67kB) Download (ZIP: 66kB)
ScreenShot ScreenShot ScreenShot ScreenShot

small (12dot)

東雲 東雲 (bold) 東雲明朝 東雲明朝 (bold)
Download (ZIP: 92kB) Download (ZIP: 88kB) Download (ZIP: 92kB) Download (ZIP: 88kB)
ScreenShot ScreenShot ScreenShot ScreenShot
M+ 蕨12 ぱうS
Download (ZIP: 88kB) イメージのみ (→BDF入手)
ScreenShot ScreenShot ScreenShot empty

medium (16dot)

東雲 東雲 (bold) 東雲明朝 東雲明朝 (bold)
Download (ZIP: 133kB) Download (ZIP: 130kB) Download (ZIP: 134kB) Download (ZIP: 132kB)
ScreenShot ScreenShot ScreenShot ScreenShot
JISKAN16 JISKAN16 (bold) へた字 (bold) Ricoh HGゴシックB
Download (ZIP: 146kB) Download (ZIP: 141kB) あくまでイメージです
ScreenShot ScreenShot ScreenShot ScreenShot

large (24dot)

JISKAN24 JISKAN24 (bold) 芦屋 芦屋 (bold)
Download (ZIP: 287kB) Download (ZIP: 281kB) Download (ZIP: 234kB) Download (ZIP: 237kB)
ScreenShot ScreenShot ScreenShot ScreenShot

Structure of Font DB

CJKOS のフォントDBの構造についての解説です。独自に解析したものであり, 正確でない部分や,間違いが含まれる可能性がありますが,完全に無保証とします。 また,記述は日本語フォントのみに関するものであり, 中国語,韓国語フォントに関しては今のところ関知しません。

なお,10,12dot フォントに関する記述は CJKOS 同梱の日本語フォント, 16,24dot フォントに関する記述はミニーの資料室で配布されている 日本語フォントに,それぞれ基づいています。

ヘッダ情報

まず,通常の PDB のヘッダ情報を持ちます。各項目の値は以下のように なっています。

ヘッダ情報
オフセット サイズ (byte) 項目 Value
0000H 32 DB名 CJK Font ??x?? JapaneseJIS (??はフォントサイズ)
0020H 2 属性フラグ 0x01 (RESOURCE)
0022H 2 バージョン
0024H 4 作成日
0028H 4 更新日
002CH 4 バックアップ日
0030H 4 更新回数
0034H 4 アプリ情報
0038H 4 ソート情報
003CH 4 タイプ dFnt
0040H 4 クリエータID dCJK
0044H 4 ユニークID

10dotの例

    43 4a 4b 20 46 6f 6e 74 20 31 30 78 31 30 20 4a |CJK Font 10x10 J|
    61 70 61 6e 65 73 65 4a 49 53 00 00 00 00 00 00 |apaneseJIS......|
    00 01 00 01 bb c4 00 1a bb c4 00 1a bb c4 00 1a |................|
    00 00 00 00 00 00 00 00 00 00 00 00 64 46 6e 74 |............dFnt|
    64 43 4a 4b 00 00 00 00                         |dCJK....        |

次にロケーション情報が入ります。10,12dot フォントには4つ, 16,24dotフォントには16のロケーション情報が書きこまれています。 属性IDは「FBLK」です。

ヘッダ情報 (残り)
オフセット サイズ (byte) 項目 Value
0048H 4 次レコードリスト 0
004CH 2 レコード数 10,12dotの場合,4。16,24dotの場合,16。

10dotの例

                            00 00 00 00 00 04       |        ......  |
ロケーション情報
フォントサイズ オフセット ロケーション数 ロケーション間隔
10dot 0078H 4 6800H
12dot 0078H 4 9000H (256文字ぶん)
16dot 00F0H 16 4000H (64文字ぶん)
24dot 00F0H 16 9000H (64文字ぶん)

10dotの例

                                              46 42 |              FB|
    4c 4b 00 00 00 00 00 78 46 42 4c 4b 00 01 00 00 |LK.....xFBLK....|
    68 78 46 42 4c 4b 00 02 00 00 d0 78 46 42 4c 4b |hxFBLK.....xFBLK|
    00 03 00 01 38 78                               |.....8x         |

フォントデータ

あとは,グリフデータがコード順に 0x2121 から 0x747e まで, ベタに書きこまれているだけです。たとえば,12dot のBDFフォントで

4100		・■・・・・・■・・・・
2fe0		・・■・■■■■■■■・
0120		・・・・・・・■・・■・
9ff0		■・・■■■■■■■■■
4120		・■・・・・・■・・■・
0fe0		・・・・■■■■■■■・
0100		・・・・・・・■・・・・
2fe0		・・■・■■■■■■■・
4100		・■・・・・・■・・・・
5ff0		・■・■■■■■■■■■
8100		■・・・・・・■・・・・
8100		■・・・・・・■・・・・

と表される文字は,単純に 41 02 fe 01 29 ff 41 20 fe 01 02 fe 41 05 ff 81 08 10 というデータとして格納されます。

ただし,10dot フォントのみ,ちょっと違う格納のされ方をしています。 まず,グリフの左側 横8dot × 縦10dot の部分を順に格納した後, グリフの右側 横2dot × 縦10dot を格納しています。そして文字の最後に 4bitの0がpaddingされています。結果,1文字に13byteを使用していることに なります。具体的には,例えば 10dot のBDFフォントで

4200		・■・・・・■・・・
2F80		・・■・■■■■■・
12C0		・・・■・・■・■■
4F80		・■・・■■■■■・
2200		・・■・・・■・・・
0F80		・・・・■■■■■・
2200		・・■・・・■・・・
3FC0		・・■■■■■■■■
4200		・■・・・・■・・・
0000		・・・・・・・・・・

と表される文字は, 42 2F 12 4F 22 0F 22 3F 42 00 2E 23 00 というデータとして格納されます。

BDF -> CJKOS font Converter

以上の構造に基づき,BDF 形式のJISフォントを,CJKOS の 日本語用フォントに変換する perl script (LF) です。BDF の parse 部分が 大ざっぱで,BDF によっては上手く変換できない場合があるかも しれません。特に,FONTBOUNDINGBOX と異なる BBX が現れる場合の テストを行っていない*1ので, そのような場合は上手くいかないかもしれません。

*1) そういう JIS BDF フォントを 見つけられなかったので...。対応するためのコードは入れてあるつもりなので, テストされた方は是非ご一報ください。

本 script を用いたことにより 発生したいかなる問題に関しても,一切責任を負いません。また変換は, オリジナルフォントのライセンス規定に十分注意した上,自己の責任において 行ってください

ChangeLog

v 1.11
0x2121 より前のグリフを含んでいる bdf の場合に,かな等のコード位置がずれるのを修正。BBX の FONTBOUNDINGBOX に対する相対位置計算部分を修正。

TrueType font から作成する方法

必要とするサイズの埋め込み bitmap を持つ TTF を選ぶことを, 強くお勧めします。以下のような手順で行うと, 簡単でかつ最も良い結果が得られると思います。

  1. TTF から FontX 形式に変換 (→WFONTX)
  2. FontX から BDF に変換 (→fontx2bdf)
  3. BDF から CJKOS font に変換 (→bdf2cjkos.pl)

Acknowledgment & Links

視認性のよいビットマップフォントを作成・公開してくださっている 方々に,心より感謝いたします。以下は,使用させていただいた BDFフォントのオリジナル配布元です。

その他 参考サイト


© 2003 津邑 公暁 / TSUMURA,Tomoaki <tsumura@tomo.gr.jp>