TL; DR: fontconfigを理解するには、それが作成された理由と解決しようとしている問題を理解する必要があります。それには、Xorgについて多くの理解が必要です。
UNIXマシンでのフォント構成は、さまざまなフェーズを経て、 fontconfig は単にあなたが使用できる可能性の1つですXorgを介してフォントを使用します。 Xorgのソースをよく理解せずにfontconfigのソースを読むことは、おそらく非常に困難です。しかし、フォントの進化の背後にある概念を理解することは、まともな出発点になると思います。
免責事項:私はLinuxでフォントをたくさん扱っていますが、関連するXorgコードを変更する必要はありませんでした。
Arch Linuxwikiにもこれに関する多くの情報があります
ちょっとした歴史
元のUNIXフォントは、単なるビットマップフォントでした。現在、これらは/usr/share/fonts/misc
にあり、PCF(ポータブルコンパイル済みフォーマット)が今日のほとんどすべてに使用されています。バイナリ形式です。バイナリフォントには他の形式もありますが、バイナリフォントにPCF以外の形式を使用する必要がなかったことを認める必要があります。 xfontsel
を使用すると、Xorg文字列を構成して、フォントのポイント、間隔、ピクセルサイズ、端末の太さ(太字、傾斜)、エンコードなどを定義できます。
ビットマップフォントには、フォントのピクセルサイズごとに異なるファイルがあります。ビットマップフォントはすでにフォントファミリの概念を導入しています。
Postscript(およびある程度TeX)は、ベクターベースのフォントであるタイプ1フォントを作成しました。これらは/usr/share/fonts/Type1
にあります。ベクターフォントは、いくつかの構成値で構成されます。アンチエイリアス、エンボールド、dpi、またはサイズ(今回は必ずしもポイントベースである必要はありません)。
ベクターベースのフォントはスケーリングされ、複数のファイルを必要としません。
XorgはビットマップフォントとType1フォントの両方を使用しました。 。そして、XFTを作成しました(X FreeTypeは、Type1を模倣および拡張するGPL / BSDライブラリであるFreeTypeへのインターフェイスです)。 XFTでは、Type1フォントとFreeTypeフォントだけでなく、AdobeとMicrosoftのOTF、AppleのTTFなどの他の形式も使用できます。さらに、XFTを使用すると、古いビットマップフォントをType1フォントのようにスケーリングできます。
属性を定義するために、ヒントやヒントスタイルなどの他のいくつかの属性が追加されました。これらのフォントのうち。
/usr/share/fonts
のサブフォルダーにあるすべてのもの。また、XFTパラメーターはXresources
で構成できます。
FontConfig
およびfontconfig
上記のすべての不一致に対処する必要があります。言い換えると、fontconfigは、共通の構文で個別のフォントが持つ属性を活用できる方法で、上記のすべてのフォントタイプを構成しようとする試みです。
ビットマップフォントには問題があります:
- 単一のフォントに複数の異なるファイル
- ポイントとピクセルサイズによってサイズが制限されます。
ただし、ベクターベースのフォントも同様です。
- 特に複数のパラメータが使用されている場合、スケーリングには時間がかかります
- すべてのフォント属性が異なるフォントタイプに同じように影響するわけではありません
多くのフォントフォーマットがあり、ユーザーが自分の家に自分のフォントをインストールしたいと思うかもしれないという問題。 Fontconfigはこれらの問題を解決しようとします。
fc-query
は、fontconfigがフォントファイルについて理解していることを示します。特に、ファイルの属性(ビットマップフォントなど)と使用できる属性(ベクターフォントなど)。
fc-list
は、fontconfigが参照しているディレクトリでどのフォントが見つかるかを示す方法であり、したがって、アプリケーションで使用されます。最後に、fc-cache
は、これらのフォントのインデックス作成を実行して、フォントを見つけやすくし、アプリケーションで使用するために(とりわけ)スケーリングします。
もう一方のfontocnfig共有ライブラリ手は最も興味深い部分です。構成ファイル(/etc/fonts
、~/.config/fontconfig
)とフォントキャッシュを使用して、事前に準備されたフォントを、それにリンクされているアプリケーションに直接提供します。ほとんどのアプリケーションはXFT(したがってFreeType)を使用し、FreeTypeライブラリはfontconfigライブラリからの呼び出しを使用しているため、これらのフォントの使用はどこにでもあります。
ただし、Xorgに要求するプログラムをコンパイルできることに注意してください。古いスタイルのビットマップフォント(例:-*-terminus-medium-r-normal-*-*-200-*-*-c-*-*-u
)であり、呼び出しはfontconfig共有ライブラリを経由しません。
コメント
- 詳細な回答をありがとうございます。あなたが何を言おうとしているのか理解できます。実際にFc-queryとfc-listを定義しましたが、おもちゃレベルのプログラムがFCとその機能を使用しようとしたとき、リクエストが最初に送信される場所などを知りたいですか?出発点は何ですか? fc-queryメイン関数にprintf(" tests ")のようなステートメントを追加しようとしましたが、fc-queryコマンドを記述しました。ターミナルからですが、私はそれを見ることができませんでした。 makeコマンドで再度コンパイルしましたが
- @ AmmarUlHassan-ええと、
printf("something")
はfontconfigライブラリを使用しません'フォントを扱っているのはターミナルエミュレータです。 fontconfigを使用するには、X11にリンクされたプログラムが必要であり、それ自体で画面にフォントを描画する必要があります。ただし、' main()でprintf
を取得して、PATHの問題である可能性が高い端末に表示できない場合は、'確かにfontconfigがすでにインストールされているからです。
- 問題ありません。しかし、実際にシステム上の他の共有ライブラリの関数を呼び出すことができるfontconfigの小さなスクリプトが必要な場合はどうなりますか?理想的なシナリオは、そのライブラリのヘッダーファイルをfontconfigに1つ追加し(どのファイルかわからない)、fontconfigを再コンパイルしてそのファイルを実行し、そのライブラリの関数を呼び出すことです。
- @ AmmarUlHassan-それは'多すぎます。 Fontconfigはスクリプト環境ではなく、本来の目的を実行するだけです。つまり、tiが画面を更新しているときに表示するXorg用のプリコピー/キャッシュされたフォントを提供します。コンパイルしたfontconfigの共有ライブラリを使用するアプリケーションが必要な場合は、
libfreetype2
のライブラリの代わりに共有ライブラリを使用するようにldconfig
を再構成する必要があります。 div>は現在呼び出しています。 '一度にたくさんのものを噛もうとしている印象があります。
- そうかもしれません…だから結論は、掘る前に深い私は歴史について理解する必要がありますか? Xft?そしてFC関数とデータ型よりも?