アウトラインフォントの歴史的背景
PostScript では、アウトラインフォントが採用(一部フォント、例えば Courier は、ストローク フォント)されたが、アウトラインフォントとは文字の輪郭情報をデータとして持つフォントのことだ。PostScript で最も多く用いられている Type 1 フォントは、この輪郭の表現に3次ベジェ曲線を使用している。 Type 1 フォントには暗号化が於かされており、当初この暗号化アルゴリズムを含め Type 1 フォント仕様が非公開であった為、MacOS や Windows 上でアウトラインフォントの対応が必用であった Apple 社と Microsoft 社は、共同で2次スプライン曲線を用いた TrueType 形式のフォントを開発した。やはり、OS で標準的にサポート (MacOS の Osaka や Windows の MS 明朝、MS ゴシック等)された意義は大きく、多くの TrueType 形式のフォントが市場に投入された。一方、Adobe 社は、Adobe Type Manager (ATM) という OS 上で Type 1 フォントをラスタライズするラスタライザを開発し、市場に投入した。そもそも、Type 1 形式をオープンな形式にしていたら、TrueType 形式は開発されなかったかもしれない。アウトラインフォントの実質的な標準が TrueType に移行する中、Adobe 社は Type 1 の仕様を公開しました。最近の OS では、標準で Type 1 ラスタライザを搭載しており、ATM をインストールする必要はなくなりました。
TrueType 形式は、初期の PostScript でサポートされていなかったこともあり、商業印刷のプロフェッショナル用途では Type 1 形式のフォントが主流となりました。日本語フォントはその字形の多さ故に、開発には莫大な開発投資が必要でした。そこで、多くの Type 1 日本語プリンタフォントは暗号化され、コピープロテクトが於かされておりました。コピープロテクトは、大変巧妙に作られており、印刷デバイス毎のユニークとなる要素を巧みに使い Key ファイルを構築し、そのプリンタでのみ動作するフォントとしてインストールされました。また 1200 DPI を超える高解像度用フォントとそれ以下の低解像度用フォントが異なる価格体系で販売されておりました。
当初の PostScript では、Type 1 と Type 3 というフォント形式がサポートされておりました。一番単純な Type 3 形式では、文字のグリフを記述するのに通常の PostScript のオペレータ (moveto や lineto 等) が使用できます。一方、Type 1 形式では、"Type 1 Charstring"と呼ばれる専用の輪郭記述用の専用言語で文字グリフを記述します。Type 1 Charstring は、バイナリ形式 (例えば、moveto は 21) であり、PostScript 言語に比較して、たいへん限られた機能しか持っておりませんが、文字グリフを少ない容量で表現することができます。またヒント情報を持つこともできます。Type 3 フォント形式は、ビットマップフォントをプリンタで印刷するときによく用いられております。また、Type 1 フォントの Type 1 Charastring 部分は、通常暗号化されてますが、暗号化アルゴリズム(標準)は公開されており、PostScript では CCRun オペレータにより複合化されます。しかしながら、公開されていない暗号化アルゴリズムも依然存在し、いくつかの日本語フォントは非公開の暗号化アルゴリズムを使用して暗号化されております。この暗号化されたグリフデータは、PostScript 上では eCCRun オペレータ(アルゴリズム非公開)を用いて複合化されます。更に輪郭表記以外の部分も CCRun と同じアルゴリズム(ただし暗号化キーは異なる)で暗号化することもあり、PostScript の eexec というオペレータを用いて複合化されます。
PostScript (Level 1) で採用された Type 3 と Type 1 フォント形式は、どちらも1フォント当り最大 256 文字にまでしか対応できませんでした。これでは、日本語に対応できません。そこで考案されたのが Type 0 フォントです。Type 0 フォントは複合フォント(コンポジットフォント)とも呼ばれ、複数のフォントを階層的に重ね、日本語の2バイト文字コードに対応しました。 Type 0 フォントは、更に他の Type 0 フォントを組み込むことも可能であり、入れ子の深さは最大5レベルまで対応することが可能です。階層構造の最上位にあるフォント辞書をルートフォントと呼び、それに従属するその他のフォントをディッセンダフォントと呼んでいます。PostScript (Level 1) では、この Type 0 形式を拡張機能としてサポートしておりましたが、その後 PostScript Level 2 言語仕様に取り込まれました。複合フォントは、 FMapType を通して設定される7種類のマッピング アルゴリズムに対応しており、JIS、シフトJIS、EUC などの日本語文字コード体系に柔軟に対応できます。特にシフトJIS の様に1バイト構成部分(ANK 部分)と2バイト構成部分(漢字等の部分)が1バイト目のコードにより自動的に切り替わるものがあり、これに対応するため SubsBector マッピングが考案されました。
その後、Type 3, Type 1, Type 0 以外に、Type 2, Type 4, Type 5, Type 32, Type 42 等のフォント形式が追加されました。Type 2 形式は、Compact Font Fomat (CFF) で使用されるフォント形式であり、より小さなサイズ、より良いレンダリング品質とパフォーマンスが得られます。Type 4 形式は、日本語コンポジットフォントのベースフォント用に開発されました。Type 4 形式は、Type 1 形式と異なり、Type 1 Charstring をインタプリターの VM 上ではなく、プリンターのファイルシステム(ハードディスクや ROM カートリッジ)上に格納します。これにより、印刷する文字の Type 1 Charstring だけがファイルシステムから読み込むことができるので、VM の消費を抑えることが可能となります。また最新の PostScript プリンタは TrueType のラスタライザを搭載しており、TrueType フォントのグリフデータをそのまま格納することが可能です。このフォント形式を Type 42 と呼んでおります。
この様に、初期の PostScript の2バイト文字の対応は、もともと1バイトにしか対応していないフォント形式をむりやり2バイト文字が扱えるように拡張したものでした。一つのフォントを様々な文字コード体系(JIS, EUC, シフトJIS) でサポートするのに、それぞれ異なるディッセンダフォントで構成される複合フォントを作成する必要があり、フォントの容量は大変大きいものでした。また1つの文字グリフデータにアクセスするのに2つ以上のフォント辞書にアクセスする必要があり、処理速度の問題がありました。この問題にアドレスしたのが Character IDentifier (CID) フォントです。 これに対して従来の日本語フォントは Original Composit Format (OCF) と呼ばれます。
CID フォントは、CID フォントファイルと、各フォント共通で使える CMap ファイルで構成されます。CID フォントファイルには、文字グリフデータ(Type 1 Charstring 形式)が CID (グリフ形式毎に固有値を持つ)をキーにして格納された文字グリフデザインファイルです。これにより、フォントベンダは、Adobe 社が規定した文字グリフセットの CID フォントファイルのみを開発すれば、すべてのエンコーディングに対応できるようになりました。これにより、フォントファイルの容量を低く抑えることが可能になりました
Adobe 社は、グリフセットを次第に拡張し、今日までに7種類のグリフセットの規格を世に送り出しました。そして、それらは、Adobe-Japan1-0 ~ 6 の名称で呼ばれております。最新の Adobe-Japan1-6 には 23,058 文字字形が収録されており、0-23057 の CID 番号が連番で割り振られております。CID フォントのグリフセットは、上位互換性があり、文字グリフが割り振られている限り、バージョンによらず同じ文字字形となります。
※ Adobe-Japan1 シリーズの CID 番号と概要
Adobe-Japan1-0:0-8283:OCFフォント
Adobe-Japan1-1:0-8358:漢字Talk7.1 対応等
Adobe-Japan1-2:0-8719:CIDフォント
Adobe-Japan1-3:0-9353:OpenType Std 書体
Adobe-Japan1-4:0-15443:OpenType Pro 書体
Adobe-Japan1-5:0-20316:JIS X 0213:2000 対応
Adobe-Japan1-6:0-23057:JIS X 0213:2004 対応
最近では、OpenType フォント (OTF) という新しいフォント形式が開発されました。この OpenType フォントは、Adobe 社と Microsoft 社が共同開発したものです (一部は Adobe, Microsoft, Apple 社の3社の共同開発)。OpenType フォントは、TrueType フォントの拡張形式であり、PostScript フォントデータへの対応が追加されたものです。したがって、OpenType 形式には、グリフデザインが TrueType アウトライン形式のものと、CFF (PostScript) アウトライン形式のものの両方が存在します。この OpenType フォントの最大の特徴は、ユニコード対応とWindows と MacOS のマルチプラットフォーム対応です。さらに解像度制限がなくなるとともに、ダイナミックダウンロード(プリンターやイメージセッター側に高価なプリンタフォントをインストールすることなく直接出力できること)が可能となり、多くの異体字に対応でき、さらに GSUB (Glyph Substitution) と呼ばれる字形切り替え用のテーブルを持っています。