Home

Awesome

<!-- -*- coding: utf-8 -*- -->

原ノ味フォント生成プログラム / Harano Aji Fonts generator

[ Japanese (日本語) / English ]

源ノ明朝・源ノ角ゴシック(以下、源ノフォント)を Adobe-Japan1 (以下、AJ1)フォントになるように組み替えた 「原ノ味フォント(原ノ味明朝、原ノ味角ゴシック)」 生成プログラムです。 CID の対応がとれないため抜けてしまうグリフがありますが、 素の pTeX / pLaTeX で和文フォントとして使う分には すべてのグリフが揃っています。

「原ノ味」というのは、 源ノフォントからグリフやテーブルが抜けていることを表すために 「氵(さんずい)」を取り、 AJ1 をもじって AJI にして 音から「味」という字をあてたものです。

配布

その他、以下のファイルも配布しています。

pTeX / pLaTeX 用マップファイルは ptex-fontmaps 20200217.0 以降に入っています。

実験的に生成した中国語簡体字、中国語繁体字、韓国語フォントがあります。

Adobe-Japan1 (AJ1) v.s. Adobe-Identity0 (AI0)

源ノフォントは Adobe-Identity0 (以下、AI0)の Pan-CJK フォントで日本語以外にも対応しています。 一方で AJ1 だと日本語専用になってしまいますが、

といったメリット?があります。

搭載グリフ

源ノフォントが搭載しているグリフ、かつ、 AJ1 への対応が取れたものを搭載します。

非漢字のうち、かなグリフ(ひらがな、カタカナ)は以下のようになっています。 分類は AJ1-7 によります。 全角とプロポーショナルで搭載していない 小書き「こ」と小書き「コ」は源ノフォントに存在せず、 加工元にできるグリフがありません。

以下の縦書きグリフは、横書きグリフを加工したものを搭載しています (20200418 版以降)。

以下のグリフは、他のグリフを加工したものを搭載しています (20220220 版以降)。

一部の 回転グリフ Pre-Rotated Glyphs )について、 回転前のグリフが存在するものについて90度回転させることで搭載しています (20230610 版以降)。

抜けているグリフのCIDにはダミーグリフ (.notdef と同じで四角の中に×が入ったような形)が入っています。 そのほとんどは 源ノフォントが搭載していないため原ノ味フォントに搭載できないものです。

非漢字の搭載グリフの一部で、 源ノフォントの文字幅が AJ1 の文字幅に合わなくて、 強制的に AJ1 に合わせたものがあります(20190824 版以降)。 AJ1 でプロポーショナル幅とされているグリフは変更していません。 さらに、単純に幅を上書きするだけでなく、 グリフによって中央寄せなどの位置調整を行いました(20200215 版以降)。 このため、幅が広くなったグリフは隙間ができたり、 幅が狭くなったグリフは左右がはみ出て前後の文字と重なるなどの現象が発生したり、 不格好な表示になることがあります。 とはいえ、幅としては正しくなっているため、 後続文字の位置がズレるなどといった、組版への影響は発生しません。 以下に該当のグリフを示します。

以下については、源ノフォントでは幅がゼロの合成用グリフですが、 AJ1 で全角幅の CID に割り当たったため、 幅を全角幅で上書きし(20190824 版以降)位置調整をし(20200215 版以降) 他の AJ1 フォントと同じような位置になるよう再調整しました(20200418 版以降)。 そのため、不格好な表示になることがあります。

以下については、 源ノ明朝で 縦書きグリフも横書きグリフも左上に配置されている という問題があったので 原ノ味フォント 20220130 版から平行移動して位置調整していましたが、 源ノ明朝 2.002 で修正されたため原ノ味フォント 20231009 版から調整していません。 源ノ角ゴシックにはこの問題はありませんので調整していません。

原ノ味フォント 20200524 からプロポーショナルかな横組み用を搭載しています。 源ノフォントの palt に従って幅と位置を調整したものです。 原ノ味フォント 20210102 からプロポーショナルかな縦組み用を搭載しています。 源ノフォントの vpal に従って高さと位置を調整したものです。

原ノ味フォント 20210101 から AJ1 「組方向ごとに最適化した全角かな」 を搭載しています。 源ノフォントは、 全角かなには横組み用と縦組み用で別々のグリフが用意されていますが、 AJ1 のような「(通常の)全角かな」と「組方向ごとに最適化した全角かな」 の区別はありません。そこで、源ノの横組み用を 「(通常の)全角かな横組み用」と「組方向ごとに最適化した全角かな横組み用」に、 源ノの縦組み用を 「(通常の)全角かな縦組み用」と「組方向ごとに最適化した全角かな縦組み用」に、 それぞれ割り当てました。

また、ダミーグリフは全角幅ですが、 これも AJ1 の文字幅で上書きしています。

pTeX / pLaTeX

源ノフォントと異なり比較的簡単に使うことができます。 TeX Live 2020 以降ではデフォルトフォントになっているので、 何もしなくてもそのままで使えます。 ただし搭載しない(抜けている)グリフを使うことはできません。

詳細は「搭載グリフ」も参照してください。

TeX Live をお使いの場合、 ptex-fontmaps が 20200217.0 以降になっていて sudo で管理者権限が使えるなら、

$ sudo kanji-config-updmap-sys --jis2004 haranoaji

のようにすることで原ノ味フォントに切り替わります。

ipsj.cls

ipsj.cls の場合は下記のマップファイル

rml	H	HaranoAjiMincho-Light.otf
gbm	H	HaranoAjiGothic-Regular.otf
futomin-b	H	HaranoAjiMincho-Regular.otf
futogo-b	H	HaranoAjiGothic-Medium.otf

を使い、クラスオプションから submit を外すと 本物っぽくなると思います

生成プログラムの使い方

まず、源ノフォントの OTF ファイルを ttx で xml にし、 C++ で xml や CMap などから CID の対照表を作り、 C++ や sed で変換、 最後に再び ttx で OTF ファイルを生成する、という方法を採っています。

環境

ファイル (JP)

download ディレクトリを掘り、以下のファイルを置いてください。

注意: aj16-kanji.txt は明朝とゴシックでファイル名が同じですが中身は異なります。 このファイルだけ明朝・ゴシック別のディレクトリに配置してください。 その他のファイルはすべて同じディレクトリに配置してください。

生成 (JP)

make で生成できます。

(実験的)他の言語

(実験的)ファイル (CN)

(実験的)生成 (CN)

make cn で生成できます。

(実験的)ファイル (TW)

(実験的)生成 (TW)

make tw で生成できます。

(実験的)ファイル (KR)

(実験的)生成 (KR)

make kr で生成できます。

(実験的)ファイル (K1)

(実験的)生成 (K1)

make k1 で生成できます。

詳細

CID の対応

源ノフォントは Adobe-Identity0 (AI0) のフォントであり、 CID の並び方が Adobe-Japan1 (AJ1) とは異なります。 そのため AJ1 化するためには AI0 CID → AJ1 CID 対照表が必要となります。 源ノフォントは日本語用 (Region-specific Subset OTF) であっても、 2 万近い数のグリフがあるため、人手で対照表を作っていたら大変です。 そこで、自動的に対照表を作るようにしています。

Unicode を介した変換

源ノフォントをはじめとする OpenType フォントには cmap テーブルというものが入っていて、 Unicode から CID へ変換ができるようになっています。 源ノフォントは AI0 フォントなので、 Unicode → AI0 CID の変換となっています。 一方 Adobe は CMap file を配布していて、 このうち UniJIS2004-UTF32-H というファイルは、 Unicode → AJ1 CID の変換表になっています。

本プログラムでは、 源ノフォントの cmap テーブルから逆変換して、 AI0 CID → Unicode とし、さらに CMap file による変換を重ねて、 AI0 CID → Unicode → AJ1 CID という変換にすることで、 AI0 CID → AJ1 CID の対照表を作っています。 本プログラムで参照している cmap テーブルは format 12 で Unicode 全域を含んでいるもの、 CMap も UTF-32 用のものを使用しているため、 BMP 外のグリフも紐づけることができています。

cmap テーブルは、本来 Unicode → AI0 CID の変換テーブルであるため、複数の Unicode が 同一の CID にマップされているものがあります。 ここから逆変換すると、一つの AI0 CID から 複数の Unicode に変換できることになってしまいますが、 逆変換表を作るにあたっては一つに絞る必要があります。 本プログラムでは基本的に Unicode のコードポイントが小さい方を優先として、 dvipdfmx の ToUnicode CMap 生成を参考に、 部首などのブロックの優先度を下げるようにしています。 この方法にはブロックごとの優先度を調整するなど改良の余地があるかもしれません。 原ノ味フォント 20220211 版から CMap file に存在する Unicode コードポイントを優先するようにしています。

CMap file は逆変換不要ですが、 やはり複数の Unicode が同一の CID にマップされているものがあります。 この際、別々の AI0 CID が別々の Unicode にマップされていても、 CMap file によって 最終的に同じ AJ1 CID になってしまうケースが発生します。 その場合には、それぞれの AI0 CID に対応した Unicode のコードポイントを使い cmap テーブルの逆変換と同様の方法で優先する方を決めています。 なお、源ノフォントは JIS2004 字形のフォントということなので、 CMap file には JIS2004 用のものを使用しています。

cmap テーブルの format 12 には 横書き用のグリフしか登録されていませんし、 UniJIS2004-UTF32-H も横書き用ですので、 縦書きのグリフは対応が取れずに失われます。 また、cmap format 12 も CMap file も異字体セレクタの情報がありませんから、 異字体セレクタを要するグリフも対応が取れずに失われます。

漢字(JP のみ)

cmap テーブルと CMap file による方法は源ノフォントに限らず、 AI0 の OpenType フォントであればどのフォントでも使うことができる方法です。 しかし、この方法では異字体に対応することができません。 フォントの cmap format 14 を読み込むことで、 異字体セレクタを使った Unicode → AI0 CID の変換表を得ることはできるのですが、 異字体セレクタを使った CMap file が無いので、 異字体セレクタを使った Unicode → AJ1 CID の変換ができません。

でも、源ノフォントには aj16-kanji.txt という、 AJ1 CID と源ノフォントのグリフ名の対応表が配布されています。 さらに AI0-SourceHanSerif AI0-SourceHanSans という、 AI0 CID と源ノフォントのグリフ名の対応表も配布されています。 これらをつなげれば AI0 CID → AJ1 CID の対照表が作れます。 ただし、残念ながら漢字しか含まれていません。 非漢字、すなわち、ひらがな・カタカナ・英数字・記号類などについては、 この方法では対照表が得られないということです。 漢字だけと言わずに非漢字の対応表も作ってくれていれば簡単だったのですが。。。 とはいえ、グリフ数の大部分は漢字ですから、 この方法でかなりカバーできているはずです。

JIS X 0208 (JP のみ)

前節で非漢字の対応表が無いと書きましたが、 原ノ味フォントを作ってしばらくしたら JIS X 0208 の範囲での対応表を作っていただいてしまい 、その後アップデートされて JIS90 のグリフも追加されました 。 漢字グリフは元々すべて AJ1 との対応が取れていましたが、 これで JIS X 0208 の範囲に限り非漢字グリフについても AJ1 との対応が取れます (ただし縦書きは入っておらず横書きのみのようですしルビなども無さそうです)。 この範囲は元々 Unicode を介した変換でも対応できていましたが、 ちゃんとした対応表があるならそれを使った方がよいので、 利用させていただくことにしました。

しかし、源ノ明朝 2.000 (2021 年 10 月 25 日リリース)では CID がリナンバリングされたようで、この対応表が役に立たなくなりました。 そのため、原ノ味 20211003 から使用しないようにしました。

縦書き・リガチャなど

源ノフォントに含まれる GSUB テーブルから、 縦書き用の OpenType feature である vert の部分を読み込むことで、 源ノフォントの横書き用・縦書き用 AI0 CID の対照表が得られます。つまり、 横書き用 AI0 CID →縦書き用 AI0 CID という変換ができるので、これの逆変換となる 縦書き用 AI0 CID →横書き用 AI0 CID を作ります。ここに、これまで作った対照表を重ねると、 縦書き用 AI0 CID →横書き用 AI0 CID →横書き用 AJ1 CID という変換ができます。

AJ1-7 の GSUB が入手可能です。 このファイルから vert をパースすると横書き用・縦書き用 AJ1 CID の対照表が得られるので、これをさらに重ねることで、 縦書き用 AI0 CID →横書き用 AI0 CID →横書き用 AJ1 CID →縦書き用 AJ1 CID となって、縦書き用の対照表を作ることができます。

縦書き vert 以外にも、CID が 1 対 1 で対応している fwid, hwid, pwid, ruby についても同様の方法で 対照表を作ることができます。 さらに CID が多対 1 で対応している ccmp, liga についても 似たような方法で対照表を作ることができ、 これによって 小書きの「プ」 のような、 単独の Unicode コードポイントを持たず、 リガチャ置き換えのみでアクセス可能な CID についても対照表を作ることができます。 なお、dlig でもリガチャ置き換えで対照表を作ることができるのですが、 残念ながら割り当たるグリフの形が微妙に異なる (AJ1 は枠のあるグリフだが源ノは枠がない)ため使いません。

そして、これらを 1 回やって AI0 CID → AJ1 CID の対応を増やしてから、 もう 1 回同じことをするとさらに対応付けできる CID の数が増えるため、 2 回実施しています。

その他の変換方法(JP のみ)

以上でほとんどの CID を対応付けすることができており、 抜けているグリフはもともと源ノフォントが持っていないもの がほとんどと思っています。

横書き用グリフはあるが縦書き用グリフがなく、 かつ縦横いずれも AJ1 で全角幅になっているものについては、 横書きグリフをもとにして、 右90度回転 (AJ1 CID+7895, AJ1 CID+12178) もしくは平行移動 (AJ1 CID+8269, AJ1 CID+8273, AJ1 CID+8283) する加工によって縦書きグリフを作り出しています。 同じように、既存グリフの縮小や変形などの機械的変形で、 組み文字などの抜けているグリフを作って埋めることも可能ですが、 縮小で細くなってしまうなどデザイン的な問題が発生するため、 なかなか難しいです。

プロポーショナルかなについては、 機械的変形とは異なった方法で搭載しています。 源ノフォントのかなグリフは全角のものしかありませんが、 GPOS テーブルに palt (プロポーショナルメトリクス)があります。 そこで、全角かなグリフを palt のパラメータに従って幅と位置を調整した上で、 AJ1 GSUB pwid 情報に従ってプロポーショナルかな横組み用のCIDに配置し、 原ノ味フォントの pwid にも追加しています。 これによって palt 指定時と pwid 指定時のかな出力が同じになります 。 同じく源ノ の GPOS には vpal (縦組みプロポーショナルメトリクス)があります。 こちらも vpal のパラメータに従って高さと位置を調整し、 AJ1 GSUB pwid および vert に従ってプロポーショナルかな縦組み用のCIDに配置し、 原ノ味フォントの vert にも追加しています。

また、源ノフォントの全角かなは横組み用と縦組み用に別々のグリフが 用意されている(見た目はほぼ同じですがサイズが微妙に違うようです)ので、 原ノ味フォント 20210101 以降では、 源ノの横組み用を 「(通常の)全角かな横組み用」と「組方向ごとに最適化した全角かな横組み用」に、 源ノの縦組み用を 「(通常の)全角かな縦組み用」と「組方向ごとに最適化した全角かな縦組み用」に、 それぞれ割り当てています。 重複するものはグリフをコピーして同じものを搭載しています。 横組み用は双方すべて重複です。 縦組み用については、 AJ1「(通常の)全角かな縦組み用」は小書き等の一部だけ定義されていて、 その他の多数のグリフは名前に反し「(通常の)全角かな横組み用」を使うため、 重複するものは少なくなっています。 なお、そのため原ノ味で普通に縦書きすると、 小書き等は源ノの縦書き用グリフ、 それ以外の多数のグリフは源ノの横書き用グリフが使われてしまい、 細かいことを言えば食い違ってしまいます (見た目は同じようですし、 サイズの違いもごくわずかなので違和感はないと思います)。 原ノ味 20210101 以降なら「組方向ごとに最適化した全角かな縦組み用」を使えば、 小書きもそれ以外もすべて源ノの縦書き用グリフが使われるようになる、 ということです。

ルビ用かな、などは抜たままですが、 ここに通常のかなのグリフをそのままコピーして搭載する方法も考えられます。 ただ、本来は別のデザインのグリフが必要なのに、 同じグリフにしてしまうことによるデザイン的な問題が発生するため、 こちらはなかなか難しいです。

もともとは、品質が劣るグリフを入れるよりは、 ダミーグリフにして抜けていることがわかりやすい方がよいだろう、 という考え方をしていました。 一方で、品質は劣ってもいいからそれっぽい形のグリフが入っていた方がよい、 という考え方もあり得ると思います。

また、品質のために使用頻度の低いグリフに大きな手間をかけても仕方ありませんが、 上記の加工 5 グリフのうちの 4 グリフ (AJ1 CID+7895, AJ1 CID+8269, AJ1 CID+8273, AJ1 CID+8283) は、揃えば素の pTeX 全グリフ搭載を達成できる重要なもので、 右90度回転や平行移動程度であればデザイン的には大きな問題にならないと判断し、 投入したものです。もう一つ (AJ1 CID+12178) は、同じ右90度回転で済むため、いわば「ついで」に投入しました。

どこまでやるか、品質も手間も含めて考えていく必要があると思っています。

OpenType テーブル

ほとんどのテーブルを変換しています。

head, hhea, maxp, OS/2, post, BASE, vhea

何も変換せずにそのまま流用しています。

name

name 用の変換プログラムで 名称などを変更しています。

cmap

cmap 用の変換プログラムで CID をすべて AI0 CID から AJ1 CID に変換しています。 対照表が作れずに対応が不明な AI0 CID は削除しています。 format 14 も変換するようにしたため異字体セレクタを使うことができます。 ttx の出力で中身が無かった format 6 は削除しています。 これは本当に中身が無いのか ttx が format 6 のパースに対応していないのか、 どちらなのかはわかりません。

原ノ味フォント 20200516 から、KR のみ format 4 と format 12 に対し、 Unicode コードポイントで一つだけ抜けている (両隣は存在するが該当箇所は存在しない)ものに .notdef を割り当てる加工をしています。 これは、何もしないと format 4 のサイズが 64 KB を超えてしまい、 ttx でのフォント生成が例外で落ちてしまったためです。 format 12 はサイズの問題がないし format 4 の情報もすべて含んだ上位互換なので、 format 4 がなくてもいいだろうと削除してみたら落ちなくなりましたが、 Windows がフォントとして認識してくれません。 仕方なく format 4 の仕様書とにらめっこしてサイズを低減する方法を模索し、 上記の処理を入れました。 なお format 12 も BMP の範囲は format 4 と同じである必要があるため、 BMP 範囲内のみ同じ処理を入れてあります。

原ノ味フォント 20200612 から、 AJ1 の CMap と比較して不足しているところを追加、 食い違っているところを修正するようにしました。 これにより cmap テーブルに U+FF0D 'FULLWIDTH HYPHEN-MINUS' が搭載されていない 問題 が修正され、 pTeX/upTeX のように CMap を使う場合と、 LuaTeX/XeTeX のように cmap テーブルを使う場合とで、 同じグリフが使えるようになります。 また、KR で入れていた Unicode コードポイントで一つだけ抜けているものに .notdef を割り当てる加工 をやめ、代わりに Adobe-KR のドキュメントに記載されている format 4 から CJK Unified Ideographs (U+4E00..U+9FFF) と CJK Compatibility Ideographs (U+F900..U+FAFF) のブロックを削除する方法に変更しました。 これは .notdef を割り当てる加工をしていて、 かつ(関係ないはずの) GPOS テーブルが存在すると、 なぜか Windows がフォントを認識してくれないことが分かったためです。 OpenType 仕様的には(というか Windows 向けとしては) format 4 と format 12 の BMP 部分は一致するようにするのが推奨されていますが、 サイズ的に収まらないので仕方がなく Adobe お勧めの対処法に従った処理を行ったものです。 通常は format 4 ではなく、該当のブロックを含めすべての使用可能な Unicode コードポイントが搭載されている format 12 が使われるため問題ありません。 また、前バージョンまでは KR のみ format 4 サイズが超過したため対策していましたが、今回は上記 cmap 追加に伴い、 TW の HaranoAjiGothicTW でもサイズ超過したため対策しています。 TW の HaranoAjiMinchoTW では超過しなかったため対策していません。

原ノ味フォント 20211103 から、 format 14 の Variation Selector について、 AJ1 などの定義と比較して不足しているところを追加、 食い違っているところを修正するようにしました。 これにより 源ノ明朝 2.000 で <U+2E569 U+E0100> および U+884B が違う文字になる 現象を継承してしまい原ノ味明朝の <U+2E569 U+E0100> が違う文字になってしまうことを防いでいます。 また、この源ノ明朝のマッピング間違いと原ノ味フォント 20200612 で導入した cmap テーブルを CMap で修正する機能の結果、U+884B は修正できたので正しいが、 <U+884B U+E0101> が U+884B に引きずられて 同じグリフへ間違って変わってしまう現象も防ぐことができます。 原ノ味明朝だけではなく原ノ味角ゴシックでも同様に <U+884B U+E0101> が間違っていたのを修正できています。 また、前バージョンまでは KR と TW の HaranoAjiGothicTW で format 4 のサイズ超過があったため対策していましたが、 TW の HaranoAjiMinchoTW では超過していなかったため対策していませんでした。 今回は源ノ明朝 2.000 ベースへ切り替えた結果、 グリフ数が増加してサイズ超過してしまったため HaranoAjiMinchoTW にも同様の対策を入れました。 これにより、format 4 サイズ超過対策をしているのは KR と TW になります。 JP, CN, K1 はサイズ超過しなかったため対策を入れていません。

CFF

CFF 用の変換プログラムで CID をすべて AI0 CID から AJ1 CID に変換しています。 対照表が作れずに対応が不明な AI0 CID は削除しています。 フォントやサブフォントの名称も変更しています。 欠けている AJ1 CID についてはダミーグリフとして .notdef の内容をコピーしています。

原ノ味フォント 20200215 から、 横幅を上書きしたグリフについて CharString を書き換え、 左右の位置を調整するようにしています。 これは @h20y6m さんのコードによるものです。

原ノ味フォント 20200418 から、 縦書き 5 グリフを、 横書き用グリフの右90度回転もしくは平行移動で作り出しています。 また、ダミーグリフの CharString をサブルーチン化することで ファイルサイズ低減を図っています。

原ノ味フォント 20200524 から、 AJ1, AKR 規格にあるスペースのグリフを一部追加しています (JP, KR)。 これは、AJ1 や AKR に規定のあるスペースのグリフで、 これまで搭載されていなかったグリフを追加したものです。 なお、回転やイタリックなど、 他の関連グリフが存在していないものについては追加していません。 また、プロポーショナルかななどの追加をしています (JP)。 これは、全角かなグリフを palt に従って調整し、 プロポーショナルかなのCIDに配置したものです。

原ノ味フォント 20200612 から、 AJ1 CID+151 を AJ1 CID+14 からのコピーで追加しました (JP)。 源ノフォントでは U+002D 'HYPHEN-MINUS' と U+00AD 'SOFT HYPHEN' が同じ AI0 CID にマップされているのに対して、AJ1 では別になっており それぞれ AJ1 CID+14 と AJ1 CID+151 にマップされています。 これまで原ノ味フォントは AJ1 CID+14 のみ搭載していましたが、 源ノでは同じグリフなので AJ1 CID+151 にコピーすることにしました。 これにより U+00AD が使えるようになりました。

原ノ味フォント 20210101/20210102 から、 かなグリフを大幅強化して追加しています (JP)。 AJ1-7 「組方向ごとに最適化した全角かな横組み用」 「組方向ごとに最適化した全角かな縦組み用」 「プロポーショナルかな横組み用」 「プロポーショナルかな縦組み用」 の大部分を搭載しました。以前より AJ1-7 「(通常の)全角横組み用」 「(通常の)全角縦組み用」 の大部分を搭載していましたので、 全角とプロポーショナルのかなは、これでほとんど揃い、 搭載していないのは、それぞれ小書き「こ」と小書き「コ」だけとなりました。 うち「組方向ごとに最適化した全角かな横組み用」 「組方向ごとに最適化した全角かな縦組み用」は、 源ノの全角かな横組み用と全角かな縦組み用をそれぞれ割り当てたものです (一部は通常の全角と重複しますが、縦組み用の多くは新規)。 「プロポーショナルかな縦組み用」は vpal を使って 全角グリフを調整して配置したものです。

原ノ味フォント 20230610 から 一部の 回転グリフ Pre-Rotated Glyphs )について、 回転前のグリフが存在するものについて90度回転させることで搭載しています (JP, CN, TW, K1)。 半角幅回転グリフの要望 によるものですが、半角幅以外でも回転前グリフが存在すれば搭載しています。 半角幅でも回転前グリフが存在しないものは搭載していません。 回転後グリフのボディ内のレターフェイス(字面)位置 高さ深さなどのパラメータ などは、 SIL Open Font License で配布されている Adobe-Japan1-3 フォントである IBM Plex Sans JP を参考に設定しています。 これらが他の標準的な Adobe-Japan1 フォントと同じかどうかはわかりません。

hmtx, vmtx

hmtx, vmtx 用の変換プログラムで CID をすべて AI0 CID から AJ1 CID に変換しています。 対照表が作れずに対応が不明な AI0 CID は削除しています。 欠けている AJ1 CID についてはダミーグリフとして .notdef の内容をコピーしています。

原ノ味フォント 20190824 から、 源ノフォントの横幅と AJ1 の横幅が食い違ったグリフについて、 hmtx に AJ1 の横幅を上書きしています。 AJ1 がプロポーショナル幅の場合は上書きしません。

原ノ味フォント 20200418 から、 幅上書、位置調整、右90度回転、平行移動したグリフについて、 CharString のレンダリングと同様の処理で字面を計算し、 LSB (左サイドベアリング)と TSB (上サイドベアリング)を修正しています。

原ノ味フォント 20200516 から、 KR で AKR の横幅が Monospaced になっているものは全角幅としています。

原ノ味フォント 20200524 から、 KR で AKR の横幅が Monospaced になっているものは、 AKR CID+221 (U+AC00、 akr-hangul.txt の最初に出てくる CID) の横幅に揃えました。 その他、KR で追加したスペースのグリフについて、横幅を AKR CID+221 の幅や数字グリフの幅を元に設定しています。

原ノ味フォント 20230610 から、 回転グリフについて回転前グリフの横幅を回転後グリフの height へ設定しています。

VORG

VORG 用の変換プログラムで CID をすべて AI0 CID から AJ1 CID に変換しています。 対照表が作れずに対応が不明な AI0 CID は削除しています。

GDEF

原ノ味角ゴシック向けに GDEF 用の変換プログラムで CID をすべて AI0 CID から AJ1 CID に変換しています。 対照表が作れずに対応が不明な AI0 CID は削除しています。 なお、源ノ明朝には GDEF が存在しないため、 原ノ味明朝向けには変換せず GDEF は存在しません。

原ノ味フォント 20211103 から、 ベースとなる源ノ明朝 2.000 には GDEF が存在するため、 原ノ味明朝向けにもゴシックと同様の変換をするようにしています。

GPOS

GPOS 用の変換プログラムで CID をすべて AI0 CID から AJ1 CID に変換しています。 対照表が作れずに対応が不明な AI0 CID は削除しています。

原ノ味フォント 20200418 から、 幅上書、位置調整したグリフについてテーブルから削除しています。

原ノ味フォント 20200516 から、 KR のみ GPOS テーブルを削除しています。 これはテーブルの変換がうまくいっていない(ttx でフォント生成はできるが Windows がフォントとして認識してくれない)ためです。

原ノ味フォント 20200524 で、 palt などの GPOS が壊れていたものを修正しています。

原ノ味フォント 20200612 で、 KR に搭載していなかった GPOS を搭載するようにしました。 これは、cmap での format 4 のサイズ制限対策をしていて、 かつ GPOS テーブルが存在すると、関係ないはずなのになぜか Windows がフォントを認識しないということがわかったため、 cmap の対策を別の方法に変更したことによるものです。

原ノ味フォント 20210130 で、 vpal など縦組みのかなに対する GPOS を修正しました (JP)。 これまで縦組みのかなでは、小書き文字などは「(通常の)全角かな」縦組み用、 その他は「組方向ごとに最適化した全角かな」縦組み用のグリフに 源ノの GPOS 情報を割り当てていました。 しかし、これだと縦組みのかなで統一的に GPOS feature を使うことができないため、 すべて「組方向ごとに最適化した全角かな」縦組み用のグリフに 割り当てるように変更しました。 そのため、縦組みのかなで vpal などの GPOS feature を使いたいときは vert, vkna を併用してください。 逆に、横組みのかなでは今のところ「(通常の)全角かな」横組み用のグリフに 源ノの GPOS 情報を割り当てていて、 「組方向ごとに最適化した全角かな」横組み用のグリフには GPOS 情報がありません(これはこれまでと同じですが変更する可能性はあります)。 そのため、(今のところ)横組みのかなで palt などの GPOS feature を使うときは hkna を併用しないでください。

GSUB

GSUB 用の変換プログラムで CID をすべて AI0 CID から AJ1 CID に変換しています。 対照表が作れずに対応が不明な AI0 CID は削除しています。 AJ1 用の GSUB 定義を持ってきているわけではなく、 あくまでも源ノフォントの GSUB を変換しています。 とはいえ、「びゃん」や「たいと」などは AJ1 には無いので対応できません。

原ノ味フォント 20200516 から、chain context の変換に対応しました。 chain context があるのは KR のみです。

原ノ味フォント 20210101/20210102 から、対応を強化しました (JP)。 expt, hojo, trad を追加しました。AJ1-7 の GSUB と同内容です。 pkna, hkna, vkna を追加しました。AJ1-7 の GSUB とほぼ同内容 (欠けているものがあるのでサブセット)です。 vert に「プロポーショナルかな縦組み用」を追加しました。 追加したのは AJ1-7 の GSUB とほぼ同内容 (欠けているものがあるのでサブセット)です。 先に pwid または pkna を適用してから vert を適用することで 「プロポーショナルかな縦組み用」グリフが選択できます (これは AJ1-7 GSUB と同じです)。 また、OpenType 規格で GSUB feature は Lookup テーブルの順番で 適用することになっており、それにあわせ pwid や pkna が vert より先にくるようにしています (これも AJ1-7 GSUB と同じです)。 また、Issue 縦組み 「:」が倒れていない に対応しました。 源ノの vert には複数のテーブルがあり、 そのうちの 1 つだけが vrt2 に入っているため、 vrt2 が vert のサブセットになっていました。 OpenType 規格的にはサブセットではマズいのですが、 vrt2 は単一テーブルでなければならないという制約があること、 vrt2 が無いと一部アプリの縦組みで問題が発生することから、 妥協してわざと規格に反する状態にしているようでした (詳細はリンク先の Issue や、そこからリンクが張られている源ノの Issue を参照してください)。 そこで原ノ味では、複数の vert テーブルを 1 つに統合し、 vrt2 が vert と同じ内容になるようにしました。

原ノ味フォント 20210130 で vkna を修正しました (JP)。 Adobe-Japan1-7 GSUB 情報の修正 を取り込み、小書き「ク」などの vkna を修正したものです。

原ノ味フォント 20220220 で vert を修正しました (JP, CN, TW, KR)。 グリフが存在するのに GSUB vert が無い ことがあったので、JP のみ CID 個別指定で実施していた vert 追加を、 AJ17 などの GSUB を読み込んで反映するよう汎用化して多言語対応しました。

原ノ味フォント 20230610 から、 回転グリフを搭載するにあたって vertvrt2 を独立させました。 OpenType 規格的には vrt2vert のすべてを含むスーパーセットである必要があり、 回転グリフは vrt2 にのみ含まれる必要があります。 これだけなら vertvrt2 の共通部分を含んだテーブルと 回転グリフだけ含んだテーブルを用意して、vert は共通テーブルのみ、 vrt2 は両方のテーブルを使うようにすればよさそうなのですが、 困ったことに vrt2 は単一テーブルでなければならないという制約があります。 ということで vertvrt2 を独立させ、 回転グリフ以外は双方で同一のものを含み、 回転グリフは vrt2 だけに含まれるようにしています。

DSIG

必須テーブルではないため削除しています。 このテーブルを変換する必要はないと思っています。

履歴

ライセンス

Copyright (C) 2019-2023 Masamichi Hosoda

生成プログラムのライセンスは BSD 2-Clause です。 LICENSEをご覧ください。 生成したフォントは源ノフォントの派生フォントになるため SIL Open Font License 1.1 です。