Determina quais fontes foram colocadas na lista negra por fontconfig?

1

Existe algo como o oposto de fc-list , que listará arquivos de fonte que foram explicitamente na lista negra / rejeitado pelo fontconfig?

    
por Matthew Cline 18.09.2016 / 20:38

2 respostas

0

Não, e eu não acho que haverá a menos que algo re-implemente toda a lógica de análise do fontconfig. Quando você coloca uma fonte na lista negra, os aplicativos (incluindo fc-list ) simplesmente não os veem.

Se você verificar a origem , não há registros, não ( extra) depuração e sem ganchos.

Dito isso, é um patch simples para o fontconfig para registrar a correspondência e a rejeição:

--- 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;
 }

O acima aplica-se de forma limpa ao fontconfig-2.11.95, que é a fonte mais recente que eu tinha por aí. FC_DEBUG imprime para stderr, as impressões acima para stdout para evitar problemas de saída de intercalação ( FcPatternPrint() imprime para stdout).

Esse código reside em libfontconfig.so , você pode testar os resultados com algo como:

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

e supondo que você tenha algo interessante na sua configuração você deve ver os resultados.

    
por 05.10.2018 / 10:44
1

fontconfig tem rastreios de depuração que podem ser ativados com uma variável de ambiente. Este é provavelmente o nível mais baixo do que você gostaria (sem relatórios legais), mas a informação está lá.

O recurso é descrito em Debugging Applications , no manual do usuário:

To help diagnose font and applications problems, fontconfig is built with a large amount of internal debugging left enabled. It is controlled by means of the FC_DEBUG environment variable. The value of this variable is interpreted as a number, and each bit within that value controls different debugging messages.

Leitura adicional:

por 18.09.2016 / 21:14