Fontconfigでどのフォントがブラックリストに追加されているか確認しますか?

Fontconfigでどのフォントがブラックリストに追加されているか確認しますか?

似たようなものに反対するものはありますか?fc-list、これはFontconfigによって明示的にブラックリスト/拒否されたフォントファイルをリストしますか?

答え1

fontconfig環境変数を介してアクティブにできるデバッグトレースがあります。これは望むものより低いかもしれませんが(報告が悪い)、情報はそこにあります。

この機能については後述する。アプリケーションのデバッグ、ユーザーマニュアルから:

フォントとアプリケーションの問題を診断するのに役立つように、Fontconfigは広範な内部デバッグが有効になっています。これは以下によって制御されます。FC_DEBUG環境変数この変数の値は数値として解釈され、値の各ビットは異なるデバッグメッセージを制御します。

追加資料:

答え2

いいえ、何かFontconfigの完全な解析ロジックを再実装しない限り、そのような機能はないと思います。フォントをブラックリストに追加すると、アプリケーション(インクルードfc-list)でそのフォントをまったく表示できません。

もしあなたならソースを確認してください、ロギングなし、(追加)デバッグなし、フックなし。

つまり、一致と拒否を記録するためのFontconfigへの簡単なパッチは次のとおりです。

--- src/fccfg.c.orig    2018-10-04 18:55:53.000000000 +0100
+++ src/fccfg.c 2018-10-04 19:15:46.000000000 +0100
@@ -2349,9 +2349,16 @@
 {
     int i;

-    for (i = 0; i < patterns->nfont; i++)
-   if (FcListPatternMatchAny (patterns->fonts[i], font))
-       return FcTrue;
+    printf("!check for <%s>:\n",
+        FcPatternFormat((FcPattern *)font,(FcChar8 *)"%{file}"));
+    for (i = 0; i < patterns->nfont; i++) {
+        FcPatternPrint(patterns->fonts[i]);
+       if (FcListPatternMatchAny (patterns->fonts[i], font)) {
+            printf("!pattern match %i of %i\n",i,patterns->nfont);
+           return FcTrue;
+        }
+    }
+    if (patterns->nfont) printf("!pattern does not match\n");
     return FcFalse;
 }

@@ -2359,10 +2366,19 @@
 FcConfigAcceptFont (FcConfig           *config,
                const FcPattern *font)
 {
-    if (FcConfigPatternsMatch (config->acceptPatterns, font))
-   return FcTrue;
-    if (FcConfigPatternsMatch (config->rejectPatterns, font))
-   return FcFalse;
+    if (FcConfigPatternsMatch (config->acceptPatterns, font)) {
+        printf("!accepting file by pattern: ");
+        printf("%s\n",FcPatternFormat((FcPattern *)font,(FcChar8 *)"%{file}"));
+       return FcTrue;
+    }
+    if (FcConfigPatternsMatch (config->rejectPatterns, font)) {
+        printf("!rejecting file by pattern: ");
+        printf("%s\n",FcPatternFormat((FcPattern *)font,(FcChar8 *)"%{file}"));
+       return FcFalse;
+    }
+    printf("!default accept: %s\n",
+        FcPatternFormat((FcPattern *)font,(FcChar8 *)"%{file}"));
+    
     return FcTrue;
 }

上記は、私が持っている最新のソースコードfontconfig-2.11.95に正確に適用されます。 stderrで印刷します。上記は、インターリーブされた出力の問題(stdoutで印刷)FC_DEBUGを防ぐためにstdoutで印刷します。FcPatternPrint()

コードは次の場所にlibfontconfig.soあり、次を使用して結果をテストできます。

LD_PRELOAD=src/.libs/libfontconfig.so.1.9.1 fc-list 

あなたが持っていると仮定構成に興味深いものがあれば結果を確認する必要があります。

関連情報