Javaプラットフォームでは、すべての実装でサポートが求められる5つの論理フォント名(Serif、SansSerif、Monospaced、Dialog、DialogInput)が定義されています。論理フォント名は、実装に依存した方法で、物理フォントにマッピングされます。
SunのJava SE Runtime Environmentでは、論理フォント名から物理フォントへのマッピングにフォント構成ファイルが使用されます。ホスト・オペレーティング・システムのバージョンに応じて、異なるマッピングをサポートする複数のファイルが存在します。ファイルの位置は、JREのインストール先のlibディレクトリです。ユーザーはフォント構成ファイルを変更したり新規に作成したりすることで、特定のシステム設定に応じてマッピングを調整できます。ただし、この操作によりJREが変更されること、そしてSunは変更後のJREをサポートしないことに注意してください。
フォント構成ファイルには2つの形式があります。プロパティ形式とバイナリ形式です。プロパティ形式については、このドキュメントで詳しく説明します。この形式は、ユーザー定義の構成のために使用できます。バイナリ形式については、ドキュメントが用意されておらず、JREの事前定義済の構成に対してのみ使用されます。参照用に、それらの構成に対応するプロパティ形式のファイルが、「.properties.src」という拡張子のファイルとして用意されています。
フォント構成ファイルは実装に依存しています。Javaプラットフォームのすべての実装でこのファイルが使用されるわけではありません。また、その内容と形式は実行環境やリリースの違いによって異なります。このドキュメントでは、SunのJava SE Runtime Environmentバージョン6で使用される形式について説明します。
ホスト・オペレーティング・システムに適したフォント構成ファイルを検索するために、次の情報が使用されます。
"98"
、"2000"
、"Me"
、"XP"
、"2003"
。"Sun"
、"RedHat"
、"Turbo"
、"SuSE"
。ランタイムでは、次のファイルのうち、最初に見つかったものが使用されます。
JavaHome/lib/fontconfig.
OS.Version.properties
JavaHome/lib/fontconfig.
OS.Version.bfc
JavaHome/lib/fontconfig.
OS.properties
JavaHome/lib/fontconfig.
OS.bfc
JavaHome/lib/fontconfig.
Version.properties
JavaHome/lib/fontconfig.
Version.bfc
JavaHome/lib/fontconfig.properties
JavaHome/lib/fontconfig.bfc
「.properties」という拡張子のファイルは、Properties
クラスで指定されるプロパティ・ファイルと見なされ、そのクラスによってロードされます。その拡張子のないファイルは、バイナリ形式と見なされます。
フォント構成ファイル全体で、さまざまな名前が使用されます。
serif
、sansserif
、monospaced
、dialog
、およびdialoginput
のいずれか。フォント構成ファイルでは、これらの名前はすべて小文字で記述される。plain
、bold
、italic
、およびbolditalic
のいずれか。この場合も、すべて小文字で表される。"Courier New"
や"\uad74\ub9bc"
のようなフォント・フェース名。"-monotype-times new roman-regular-r---*-%d-*-*-p-*-iso8859-1"
のようなxlfd名。"%d"
はフォント・サイズを示し、実際のフォント・サイズが実行時に挿入される。java.nio.charset.Charset.defaultCharset().name()
により返される名前。バージョン・プロパティは、フォント構成の形式のバージョンを識別するものです。このドキュメントで規定しているのは、バージョン1です。
完全なプロパティの形式は次のとおりです。
version=1
コンポーネント・フォントのマッピングのプロパティでは、特定の文字サブセットの文字を、特定のスタイルの特定の論理フォントでレンダリングするときに使用する物理フォントを指定します。
キーの形式は次のとおりです。
allfonts.
CharacterSubsetName LogicalFontName.
StyleName.
CharacterSubsetName
第1の形式は、論理フォントやスタイルとは無関係に、同じフォントを文字サブセットに使用する場合に利用します。この場合、フォント・レンダリング・エンジンは、アルゴリズム的にスタイルをフォントに適用します。第2の形式は、異なる論理フォントおよびスタイルごとに、別々の物理フォントを文字サブセットに使用する場合に利用します。この形式では、論理フォントとスタイルの組合せそれぞれについてプロパティを指定する必要があるため、1つの文字サブセットに対して20のプロパティを指定することになります。ある文字サブセットに対して第1の形式のプロパティが指定されている場合、同じ文字サブセットに対して第2の形式のプロパティが指定されていても無視されます。
指定する値は、前のセクションで説明した、プラットフォームのフォント名です。
各種フォントによってサポートされる文字サブセットは重複することが多いので、文字をレンダリングする際に使用するフォントの順序を定義するために、別の検索順序プロパティを使用します。
Javaランタイムでは、5つの論理フォントの検索順序を判別するためにsequenceプロパティが使用されます。ただし、フォント構成ファイルでは、エンコーディング、言語、国の特定の組合せに対してプロパティを指定できます。その場合、ランタイムでは、各論理フォントのsequenceプロパティを参照して順序が判別されます。
キーの形式は次のとおりです。
sequence.allfonts
.Encoding.Language.Countrysequence.
LogicalFontName.Encoding.Language.Countrysequence.allfonts
.Encoding.Languagesequence.
LogicalFontName.Encoding.Languagesequence.allfonts
.Encodingsequence.
LogicalFontName.Encodingsequence.allfonts sequence.
LogicalFontName
allfonts
の形式は、5つの論理フォントすべてに対して順序を使用する場合に利用します。論理フォント名を指定する形式は、異なる論理フォントに対し異なる順序を使用する場合に利用します。
各論理フォントについて、Javaランタイムでは、上記のキーのうち最初に登場するプロパティ値が使用されます。このプロパティにより、論理フォントの主検索順序が決まります。
このファイルでは、1つの代替検索順序を定義することもできます。代替sequenceプロパティのキーの形式は次のとおりです。
sequence
.fallback
すべてのsequenceプロパティの値は、次の形式で指定します。
SearchSequenceValue: CharacterSubsetName CharacterSubsetName , SearchSequenceValue
主sequenceプロパティでは、必須フォントの文字サブセット名を指定します。AWTおよび2Dのフォント・レンダリングではどちらも、これらのフォントが使用されます。代替sequenceプロパティでは、オプション・フォントの文字サブセット名を指定します。これらのフォントはすべての論理フォントの代替として使用されますが、2Dのフォント・レンダリングの場合のみです。ランタイムでは、Lucida Sans Regularフォントが2Dレンダリング用の代替フォントとして自動的に追加されます(まだ指定されていない場合)。また、実行環境にlib/fonts/fallbackディレクトリが存在し、そのディレクトリに有効なTrueTypeフォントまたはType 1フォントが含まれている場合は、限られた数のそれらのフォントが2Dレンダリング用の代替フォントとして自動的に追加されます。Windowsでは、システムEUDC (End User Defined Characters)フォントがWindowsに登録されている場合、そのフォントも2Dレンダリング用の代替フォントとして自動的に追加されます。
sequenceプロパティにより、特定の文字をレンダリングするために、コンポーネント・フォントをどのような順序で使用するかが決まります。たとえば、次のようなプロパティを指定したとします。
sequence.monospaced=japanese,alphabetic sequence.fallback=korean monospaced.plain.alphabetic=Arial monospaced.plain.japanese=MSGothic monospaced.plain.korean=Gulim
ランタイムでは、まず、MSGothicフォントを使用して文字をレンダリングしようとします。そのフォントがその文字のグリフを提供していない場合は、Arialフォントを試します。2Dレンダリングでは、さらに、GulimフォントとLucida Sans Regularフォントのほか、ランタイムのlib/fonts/fallbackディレクトリにある限られた数のTrueTypeフォントまたはType 1フォントも試します。Windows上での2Dレンダリングでは、システムEUDCフォントがWindowsに登録されている場合、そのEUDCフォントも試します。代替メカニズムについては、「論理フォントのサポート」を参照してください。
文字列を参照せずに論理フォントのフォント・メトリックスを計算する場合には、必須フォントのみが考慮に入れられます。たとえば、前述の例であれば、FontMetrics.getMaxDescentメソッドはMSGothicフォントとArialフォントに基づいて結果を返します。GulimフォントとLucida Sansフォントは考慮に入れられません。このため、ボタンなど、単純なユーザー・インタフェース要素(フォント・メトリックに基づいて要素のサイズが計算されることがある)は、その要素が通常は使用しないコンポーネント・フォントを含む拡張リストから影響を受けることはありません。一方、テキスト・コンポーネントでは、通常実際に表示するテキストに基づいてメトリックを計算するため、正しい結果が得られます。
5つの論理フォントについてランタイムが取得するsequenceプロパティは、同じ文字サブセットを列挙している必要がありますが、文字セット列挙する順序は異なっていてもかまいません。
除外範囲プロパティでは、特定の文字サブセットに対応するフォントによるレンダリングの対象から除外するUnicode文字の範囲を指定します。このプロパティは、(パフォーマンス上の理由などで)多数の文字をサポートしているフォントを早い検索順位に置く必要があるが、そのフォントがサポートしている文字の一部を別のフォントで描画する必要がある場合に使用します。このプロパティはオプションで、指定できるのは文字サブセットあたり1つまでです。
キーの形式は次のとおりです。
exclusion.
CharacterSubsetName
値の形式は次のとおりです。
ExclusionRangeValue: Range Range,
ExclusionRangeValue Range: Char-
Char Char: HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit
Charは、Unicode文字を16進数として表現したものです。
プロポーショナル・フォント・プロパティでは、同じフォントのプロポーショナル版と非プロポーショナル版の関係を記述します。このプロパティは、GraphicsEnvironment.preferProportionalFontsメソッドで指定する設定を実装するために使用されます。
キーの形式は次のとおりです。
proportional.
PlatformFontName
プラットフォーム・フォント名に含まれている空白文字は、アンダースコア("_")に置き換える必要があります。
値の形式は次のとおりです。
PlatformFontName
値の指定では、空白文字は元のまま残します。
各プロパティは、値として指定したフォントがキーに指定したフォントのプロポーショナル版であることと、キーに指定したフォントが値として指定したフォントの非プロポーショナル版であることを示します。
フォント・ファイル名のプロパティは、フォント構成ファイルで使用される物理フォントを格納しているファイルの名前を指定します。Windowsでは、すべての物理フォントについてファイル名の指定が必須です。SolarisおよびLinuxでは、すべての物理フォントについてファイル名の指定が推奨されています。
キーの形式は次のとおりです。
filename.
PlatformFontName
プラットフォーム・フォント名に含まれている空白文字は、アンダースコア("_")に置き換える必要があります。
値は、フォントを格納しているファイルのファイル名です。Windowsでは、単純なファイル名を指定します。そのため、実行環境では、まず自身のlib/fonts
ディレクトリから各ファイルが検索され、次にWindowsのフォント・ディレクトリから検索されます。SolarisおよびLinuxでは、絶対パス名、実行環境のlib/fonts
ディレクトリを表す「$JRE_LIB_FONTS
」で始まるパス名、またはxlfd名を指定します。
Javaランタイムでは、ランタイムのlib/fonts
ディレクトリや、Windowsのフォント・フォルダなど、フォント・ファイルが格納されているいくつかのディレクトリを自動的に判別できます。このフォント・パスに追加するため、追加のディレクトリを指定することができます。
キーの形式は次のとおりです。
appendedfontpath
値の形式は次のとおりです。
AppendedFontPathValue: Directory Directory PathSeparator AppendedFontPathValue
パス区切り文字は、プラットフォームに依存するjava.io.File.pathSeparatorの値です。
Windowsでは、プラットフォーム固有のプロパティはありません。ただし、検索順序の指定に使用する、特別な形式の文字サブセット名があります。「alphabetic」という文字サブセット名に、そのサブセットに関連付ける文字エンコーディングを示す接尾辞を付けることができます。
alphabetic
alphabetic/default
alphabetic/1252
この情報は、AWTでのみ使用され、2Dでは使用されません。「/default」という接尾辞を指定すると、この文字サブセットに対するコンポーネント・フォントの使用が、デフォルト・エンコーディングの文字セットに限定されます。また、「/1252」という接尾辞を指定すると、Windows-1252文字セットに限定されます。コンポーネント・フォントのマッピングと除外範囲にアクセスするには、文字エンコーディングの接尾辞を省略します。これ以外のすべての文字サブセットについて、AWTの文字エンコーディングは、Javaランタイムによって内部的に判別されます。
AWTテキスト・コンポーネントは、テキストのレンダリングをMotifベースのピアに依存しているため、ほかのAWTコンポーネントや2Dと同じプラットフォーム・フォントを常に使用することができません。これらのコンポーネント用にコンポーネント・フォントを検索する際には、追加のキーが認識されます。このケースで参照されるキーの一式は、次のとおりです。
allfonts.
CharacterSubsetName.motif
LogicalFontName.
StyleName.
CharacterSubsetName.motif allfonts.
CharacterSubsetNameLogicalFontName
.
StyleName.
CharacterSubsetName
AWTフォント・パス・プロパティでは、X11サーバー・フォント・パスに追加する必要のあるプラットフォーム・ディレクトリを指定します。キーの形式は次のとおりです。
awtfontpath.CharacterSubsetName
値の形式は次のとおりです。
AWTFontPathValue:
Directory
Directory :
AWTFontPathValue
指定するディレクトリは、有効なX11フォント・ディレクトリであることが必要です。Javaランタイムは、検索順序の参照で見つかる主検索順序に含まれるすべての文字サブセットのディレクトリが、確実にX11フォント・パスに組み込まれるようにします。実装では、同じエンコーディング、言語、国が設定されている特定の環境について、すべての論理フォントが同じ一式の文字サブセットを使用することを前提としています。