void FcCharSetPrint(const FcCharSet *c) { int i, j; intptr_t *leaves = FcCharSetLeaves(c); FcChar16 *numbers = FcCharSetNumbers(c); #if 0 printf ("CharSet 0x%x\n", (intptr_t) c); printf ("Leaves: +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves); printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers); for (i = 0; i < c->num; i++) { printf ("Page %d: %04x +%d = 0x%x\n", i, numbers[i], leaves[i], (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf)); } #endif printf("\n"); for (i = 0; i < c->num; i++) { intptr_t leaf_offset = leaves[i]; FcCharLeaf *leaf = FcOffsetToPtr(leaves, leaf_offset, FcCharLeaf); printf("\t"); printf("%04x:", numbers[i]); for (j = 0; j < 256 / 32; j++) printf(" %08x", leaf->map[j]); printf("\n"); } }
FcBool FcConfigAddCache (FcConfig *config, FcCache *cache, FcSetName set, FcStrSet *dirSet) { FcFontSet *fs; intptr_t *dirs; int i; /* * Add fonts */ fs = FcCacheSet (cache); if (fs) { int nref = 0; for (i = 0; i < fs->nfont; i++) { FcPattern *font = FcFontSetFont (fs, i); FcChar8 *font_file; /* * Check to see if font is banned by filename */ if (FcPatternObjectGetString (font, FC_FILE_OBJECT, 0, &font_file) == FcResultMatch && !FcConfigAcceptFilename (config, font_file)) { continue; } /* * Check to see if font is banned by pattern */ if (!FcConfigAcceptFont (config, font)) continue; if (FcFontSetAdd (config->fonts[set], font)) nref++; } FcDirCacheReference (cache, nref); } /* * Add directories */ dirs = FcCacheDirs (cache); if (dirs) { for (i = 0; i < cache->dirs_count; i++) { FcChar8 *dir = FcOffsetToPtr (dirs, dirs[i], FcChar8); if (FcConfigAcceptFilename (config, dir)) FcStrSetAddFilename (dirSet, dir); } } return FcTrue; }