비슷한 것과 반대되는 것이 있나요?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
당신이 가지고 있다고 가정구성에 흥미로운 것이 있으면결과를 확인해야 합니다.