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 

당신이 가지고 있다고 가정구성에 흥미로운 것이 있으면결과를 확인해야 합니다.

관련 정보