[1] 
[DFN[BTRONフォント形式]]は、
[[BTRON]]
で使われる[[フォント形式]]です。

* 仕様書

[REFS[

- [6] 
[CITE[3.9 フォントマネージャ]], [TIME[2025-11-26T22:30:37.000Z]], [TIME[2026-01-13T13:54:08.823Z]] <https://www.chokanji.com/developer/doc/btron3/os_spec/shell/font_mgr.html>
- [7] 
[CITE[第1章 基本データタイプ]], [TIME[2025-11-26T22:30:37.000Z]], [TIME[2026-01-13T13:54:25.033Z]] <https://www.chokanji.com/developer/doc/btron3/shared_data/data_type.html>

]REFS]

* 呼称

[2] 
正式名称は不明です。

[3] 
[[BTRON]] の仕様書では固有名詞なく[[フォント]]とだけ呼ばれているようです。
[SRC[>>6]]

[4] 
関連プロジェクトで[DFN[BTRONフォント形式]]と呼ばれています [SRC[>>5]]。

[34] 
[DFN[BTRON標準形式のフォントデータ実身]]と呼んだ事例もあります。
[SRC[>>33]]


[REFS[

-
[5] 
[CITE@ja[Tフォントプロジェクト]], [TIME[2021-10-13T05:53:03.000Z]], [TIME[2026-01-13T13:53:19.359Z]] <https://charcenter.tron.org/tfont/download.html>

]REFS]

* 概要

[8] 
[[BTRON]] では[[ファイル]]は[[レコード]]の集合体として表されます。
各[[レコード]]は[F[レコードタイプ]]を持ちます。

[9] 
[DFN[フォントファイル]]は、
[F[レコードタイプ]]が [N[11]] である[DFN[フォントデータレコード]]を1つ[[以上]]持ちます。
[SRC[>>6]]

[10] 
[[フォントファイル]]は仕様上かなり自由度が高いようですが、
そのうちの一部は定義されているだけで実際には利用されていないような記述が仕様書にもあります。
[CITE[超漢字V]]に標準付属する[[フォントファイル]]をみると、
実際に利用されている機能は更に限られます。
それ以外の機能がどこまで実装されているのかは不明です。

[12] 
実用されている[[フォント]]は2種類に大別できます。

- [13] [DFN[標準ドット形式]]のうち[DFN[固定イメージサイズ形式]]のものは、
[[固定幅]] (すべての[[文字]]が同じ[[幅]]) の[[ビットマップフォント]]です。
[SRC[>>6]]
- [14] [DFN[TrueType形式]]のものは、
[[TrueType]] フォントです。
[SRC[>>6]]

[15] 
[[固定イメージサイズ形式]]の[[フォントファイル]]は、
1つ[[以上]]の[[フォントデータレコード]]で、
それぞれが独立した[[フォント]]として機能し得るものが1つにまとめられます。

[16] 
[[TrueType形式]]の[[フォントファイル]]は、
1つ[[以上]]の[[フォントデータレコード]]と
1つ[[以上]]のその他の[[レコード]]です。
その他の[[レコード]]の方は[F[レコードタイプ]]が [ [N[15]], [N[31]] ] 
とされますが [SRC[>>6]]、[CITE[超漢字V]]の標準フォントで確認できたものはすべて [N[31]]
です。

[17] 
[[TrueType形式]]の[[フォントファイル]]の場合、
[[フォントデータレコード]]のそれぞれが独立した[[フォント]]として機能し得るものですが、
[[フォントデータレコード]]自体に入っているのは[[メタデータ]]と索引データであり、
[[字形]]データは同じ[[フォントファイル]]の他のどれか1つの [N[31]] 
[[レコード]]の [[TrueType]] データを参照する形になっています。
[N[31]] [[レコード]]の中身は [[TrueType]] フォントデータそのものです。
[SRC[>>6]]

[18] 
複数の[[フォントデータレコード]]が同じ[[TrueType]] [[レコード]]を参照することもできますし、
いくつも [[TrueType]] [[レコード]]を含めることもできます。

[57] 
[[TrueType]] フォントデータは、 [[TTC]] のこともあります。

[22] 
なお、
[CITE[超漢字]]では[[データ構造]]に出現する多バイト[[数値]]はすべて[[小エンディアン]]です。


** [CITE[超漢字検索]]用フォント

[41] 
[CITE[Windows]] や [CITE[Linux]] 用に提供されている
[CITE[超漢字検索]]
にもこの形式の[[フォント]]が同梱されています。

[42] 
[[BTRON]] と違って [[Unix]] 系[[ファイルシステム]]の[[ファイル]] (= ただの[[バイト列]])
になっています。

[43] 
[CODE[FONT]] [[ディレクトリー]]にすべての[[フォントデータレコード]]と [[TrueType]]
[[フォント]]が各1つの[[ファイル]]として収容されています。
[CODE[fonts.cfg]] に[[フォントデータレコード]]と [[TrueType]]
の[[ファイル名]]の対応関係が単純な[[テキストファイル]]で記述されています。

[44] 
[[TrueType]] フォントファイルは、 [[TrueType]] データの前にメタデータが付加されています。


* TRON コードと字形の関連付け

[20] 
各[[フォントデータレコード]]には、
[[TRONコード]]の
「文字セット(スクリプト)指定」
を記述する 
[DFN[[F[[CODE[script]]]]]],
最初の[[符号]]を記述する
[DFN[[F[[CODE[topcode]]]]]],
最後の[[符号]]を記述する
[DFN[[F[[CODE[lastcode]]]]]]
があります。
[SRC[>>6]]

[23] 
ただし、[[TRONコード]]の[[符号平面]]は [[Aゾーン]]から [[Dゾーン]]までに分かれています。
[[範囲]]の[[整列]]は数値の順序ですが、上位バイト、下位バイトそれぞれの上下限が決まります。
すなわち、

- [48] 上位バイト [ floor ([FRAC[ [F[[CODE[topcode]]]] ][ 0x100 ]]), floor ([FRAC[ [F[[CODE[lastcode]]]] ][ 0x100 ]]) ]
- [49] 下位バイト [ [F[[CODE[topcode]]]] mod 0x100, [F[[CODE[lastcode]]]] mod 0x100 ]

... が範囲となります。

;; [56] 
従って [N[0x3100]] のようなものは必ず除外されますが、
[N[0x317F]] は含まれることがあります。


[21] 
[F[[CODE[script]]]] は [[TRONコード]]の[[面]]を指定する値であり、
[F[[CODE[topcode]]]] と [F[[CODE[lastcode]]]]
はその[[面]]の中の[[符号]]の範囲を表しています。
[SRC[>>6]]

;; [26] 従って1つの[[フォントデータレコード]]に含められるのは、
特定の[[面]]の連続した範囲の[[符号]]群だけです。
異なる範囲に対応したいときは複数の[[フォントデータレコード]]を使うことになります。

[24] 
[F[[CODE[script]]]],
[F[[CODE[topcode]]]],
[F[[CODE[lastcode]]]]
がいずれも [N[0]] の[[フォントデータレコード]]があります。
空を表しているようです。

[19] 
[[固定イメージサイズ形式]]の[[ビットマップフォント]]では、
[F[[CODE[offimage]]]]
で参照される[[ビットマップ]]データに最初の[[符号]]から最後の[[符号]]まで順に[[字形]]が並びます。

[25] 
[[TrueType形式]]の[[フォント]]では、
[F[[CODE[offwidth]]]]
で参照される
[DFN[[CODE[FT_INDEXWDATA]]]]   
([DFN[文字幅/インデックスデータ]])
から参照される[DFN[インデックスデータ]]に最初の[[符号]]から最後の[[符号]]まで順に[DFN[文字インデックス]]が並びます。
[[文字インデックス]]は、 [N[0xFFFF]] が未定義を表します。
[SRC[>>6]]

[28] 
[[文字インデックス]]と [[TrueType]] の関係は仕様書に明言がありませんが、
[ [N[0]], [N[0xFFFE]] ]
のとき [[TrueType]] の[[グリフID]]
を指していると思われます。

[29] 
[[TrueType]] の [CODE[cmap]] や[[グリフ名]]は使われていないようです。
[CODE[cmap]] の中身が空のものもあります。
[CODE[cmap]] で参照できる[[グリフ]]が一部だけで、多くは[[グリフID]]か[[グリフ名]]でしか参照できないものもあります。
そうでないものは、[[シフトJIS]]環境での利用を想定したと思しき [[Unicode]] [CODE[cmap]]
になっていることが多いように見えます。
おそらく[[フォント]]事業者で一般的な日本語フォントの開発環境を使いつつ、本来の [[JIS]] 
の[[漢字]]等のかわりに独自の配列で[[字形]]を配置して制作したものなのでしょう。

[30] 
[[グリフID]]は [[TRONコード]]側の順序と揃っていることもありますが、
そうでない場合もかなり多いです。
[[インデックスデータ]]を見なければ[[TRONコード]]と[[字形]]の対応を知ることは不可能です。

[32] 
たまに索引データの末尾の部分 (おそらく意味のある字形が割り当てられた最後よりも後の部分)
が不適切 ([F[[CODE[lastcode]]]] までのデータが揃っていない) なのではないかと思われるものもありますが、
当該データが間違ったまま使われているのか、こちらの仕様の理解の不足による誤解なのか、よくわかりません。


[58] 
索引は [[TrueType]] 専用というわけではないらしく、
[CITE[超漢字V]]に付属する (しかし標準ではない)
[CITE[基本-ナガ10]]
は[[ビットマップフォント]]でありながら索引を使って、
[[JIS X 0201]] [[フォント]]を [[TRONコード]]の [[JIS X 0208]]
の領域に対応付けています。




[27] なお、[[データ構造]]定義上存在し得る[DFN[文字幅データ]]は使われていないようです。



* 実フォント事例

[37] 
[CITE[超漢字]]で実際に使われている[[フォント]]がこの形式です。
同梱の標準フォントの他、 [[Web]] 
で配布されている追加フォントもこの形式になっていることが多いようです。
[SEE[ [[TRONコード]] ]]

[45] 
[CITE[超漢字検索]]でも同様の形式で配布されています (>>41)。
[SEE[ [[TRONコード]] ]]

-*-*-

[38] 
その他に[CITE[超漢字]]では[[シフトJIS]]想定の[[日本語]] [[TrueType]]
[[フォント]]も登録できます。登録時にこの形式に変換されると思われます。

[40] 
>>39 のように [[TrueType]] フォントを同梱した [[TAD]] の形で配布されている場合もあるようです。

[REFS[

- [39] 
[CITE[ダサ字フォント@BTRON]], [TIME[2026-01-14T11:01:07.000Z]], [TIME[2004-02-04T06:12:54.389Z]] <https://web.archive.org/web/20040203103115/http://member.nifty.ne.jp/shinm/dasaji/top_dsj.html>

]REFS]

* 実装

[33] 
[CITE[Vector:書体変換器 (他のOS用 / TRON-OS)]], [TIME[2026-01-13T15:13:29.000Z]] <https://www.vector.co.jp/download/file/other/tron/fh277000.html>


[46] 
[CITE@ja[アースフォント登録手順 -- 2]], [TIME[2008-05-26T02:11:38.000Z]], [TIME[2026-01-14T14:11:37.794Z]] <http://metanest.jp/ath/touroku/proc2.html>

[47] >>46 [[TrueType]] フォントと [[TRONコード]]との対応関係を記述し、
[[BTRON形式フォント]]を作る手順が解説されています。 

* メモ


[35] [CITE[みかちゃんフォントの超漢字4への登録方法]], [TIME[2006-03-10T08:54:54.000Z]], [TIME[2026-01-14T06:46:18.589Z]] <https://www.eonet.ne.jp/~nisaka/_t0C5EuE.html>


[36] >>35 [CITE[Windows]] 用 [[TrueType]] フォントの登録方法の説明。
