web-dev-qa-db-ja.com

fontconfigは実際にはどのように機能しますか?

私はLinux環境に不慣れで、フォントの研究を始めました。

私はfontconfigがLinuxでのフォント管理を実際に扱うライブラリであることを読みました。そのため、このためにfontconfigソースコードをダウンロードしてコンパイルし、使用する準備が整いました。

メインのソースディレクトリに移動すると、fc-cachefc-listfc-queryなどのサブモジュールがたくさんありました。それらについて検索しようとしましたが、それらの詳細は見つかりませんでした実際に動作します。だから私は自分でソースを理解することにしましたが、以下のように端末でコマンドを書くとき、実際に何が起こっているのかなど、実際の開始点がわからないので、多くの問題に直面しています。

$ fc-query /usr/share/fonts/truetype/fonts-japanese-gothic.ttf

Fcquery.cなどのfontconfigファイルを変更して、他の共有ライブラリにある他の関数を呼び出すようにしたいとします。私は何をしなければなりませんか?単にコンパイルするだけでしょうか、それともMakefileに何かを登録する必要がありますか?.

私は新しいので、詳しく説明してください。

6
Ammar Ul Hassan

TL; DR:fontconfigを理解するには、それが作成された理由と解決しようとしている問題を理解する必要があります。そのためにはXorgをよく理解する必要があります。

UNIXマシンでのフォント構成はさまざまな段階を経ており、fontconfigは、Xorgでフォントを使用するために使用できる可能性の1つにすぎません。 Xorgのソースを十分に理解せずにfontconfigのソースを読み取ることは、おそらく非常に困難です。しかし、フォントの進化の背後にある概念を理解することは、まともな出発点を証明するかもしれないと私は信じています。

免責事項:私はLinuxでフォントを扱いますが、フォントに関連するXorgコードを変更する必要はありませんでした。

Arch Linux wikiにもこれに関する多くの情報があります

ちょっとした歴史

オリジナルのUNIXフォントは、単にビットマップフォントでした。現在、これらは/usr/share/fonts/miscにあります。PCF(ポータブルコンパイル済みフォーマット)は、現在ほとんどすべてに使用されています。バイナリ形式です。バイナリフォントには他の形式もありましたが、バイナリフォントにはPCF以外の形式を使用する必要がなかったことを認める必要があります。 xfontselを使用すると、フォント、特にポイント、間隔、ピクセルサイズ、端末の太さ(太字、傾斜)、エンコーディングなどを定義するXorg文字列を構成できます。

ビットマップフォントには、フォントのピクセルサイズごとに異なるファイルがあります。ビットマップフォントはすでにフォントファミリーの概念を導入しています。

Postscript(およびある程度TeX)は、ベクターベースのフォントであるType 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フォントのように拡大縮小できます。

これらのフォントの属性を定義するために、hintinghintstyleなどの他のいくつかの属性が追加されました。

/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共有ライブラリを経由しないことに注意してください。

10
grochmal