Fonts

確定哪些字型已被 fontconfig 列入黑名單?

  • October 5, 2018

有沒有類似的東西fc-list,它會列出被fontconfig明確列入黑名單/拒絕的字型檔?

不,我認為除非重新實現 fontconfig 的整個解析邏輯,否則不會有。當您將字型列入黑名單時,應用程序(包括fc-list)根本看不到它們。

如果您檢查 source,則沒有日誌記錄,沒有(額外的)調試,也沒有鉤子。

也就是說,它是一個簡單的 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,這是我最近發現的來源。FC_DEBUG列印到 stderr,上面的列印到 stdout 以避免交錯輸出問題(FcPatternPrint()列印到 stdout)。

該程式碼位於 中libfontconfig.so,您可以使用以下內容測試結果:

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

並假設您的配置中有任何有趣的東西,您應該會看到結果。

fontconfig具有可以使用環境變數啟用的調試跟踪。這可能比您想要的級別低(沒有好的報告),但資訊就在那裡。

該功能在使用者手冊的調試應用程序中進行了描述:

為了幫助診斷字型和應用程序問題,在建構 fontconfig 時啟用了大量的內部調試。它由**FC_DEBUG**環境變數控制。該變數的值被解釋為一個數字,該值中的每一位控制不同的調試消息。

進一步閱讀:

引用自:https://unix.stackexchange.com/questions/310694