FcChar8 * FcNameUnparseEscaped (FcPattern *pat, FcBool escape) { FcStrBuf buf, buf2; FcChar8 buf_static[8192], buf2_static[256]; int i; FcPatternElt *e; FcStrBufInit (&buf, buf_static, sizeof (buf_static)); FcStrBufInit (&buf2, buf2_static, sizeof (buf2_static)); e = FcPatternObjectFindElt (pat, FC_FAMILY_OBJECT); if (e) { if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0)) goto bail0; } e = FcPatternObjectFindElt (pat, FC_SIZE_OBJECT); if (e) { FcChar8 *p; if (!FcNameUnparseString (&buf2, (FcChar8 *) "-", 0)) goto bail0; if (!FcNameUnparseValueList (&buf2, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0)) goto bail0; p = FcStrBufDoneStatic (&buf2); FcStrBufDestroy (&buf2); if (strlen ((const char *)p) > 1) if (!FcStrBufString (&buf, p)) goto bail0; } for (i = 0; i < NUM_OBJECT_TYPES; i++) { FcObject id = i + 1; const FcObjectType *o; o = &FcObjects[i]; if (!strcmp (o->object, FC_FAMILY) || !strcmp (o->object, FC_SIZE)) continue; e = FcPatternObjectFindElt (pat, id); if (e) { if (!FcNameUnparseString (&buf, (FcChar8 *) ":", 0)) goto bail0; if (!FcNameUnparseString (&buf, (FcChar8 *) o->object, escape ? (FcChar8 *) FC_ESCAPE_VARIABLE : 0)) goto bail0; if (!FcNameUnparseString (&buf, (FcChar8 *) "=", 0)) goto bail0; if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_VARIABLE : 0)) goto bail0; } } return FcStrBufDone (&buf); bail0: FcStrBufDestroy (&buf); return 0; }
FcChar8 * FcNameUnparse (FcPattern *pat) { FcStrBuf buf; FcChar8 buf_static[8192]; int i; FcPatternElt *e; const FcObjectTypeList *l; const FcObjectType *o; FcStrBufInit (&buf, buf_static, sizeof (buf_static)); e = FcPatternFindElt (pat, FC_FAMILY); if (e) { if (!FcNameUnparseValueList (&buf, e->values, (FcChar8 *) FC_ESCAPE_FIXED)) goto bail0; } e = FcPatternFindElt (pat, FC_SIZE); if (e) { if (!FcNameUnparseString (&buf, (FcChar8 *) "-", 0)) goto bail0; if (!FcNameUnparseValueList (&buf, e->values, (FcChar8 *) FC_ESCAPE_FIXED)) goto bail0; } for (l = _FcObjectTypes; l; l = l->next) { for (i = 0; i < l->ntypes; i++) { o = &l->types[i]; if (!strcmp (o->object, FC_FAMILY) || !strcmp (o->object, FC_SIZE) || !strcmp (o->object, FC_FILE)) continue; e = FcPatternFindElt (pat, o->object); if (e) { if (!FcNameUnparseString (&buf, (FcChar8 *) ":", 0)) goto bail0; if (!FcNameUnparseString (&buf, (FcChar8 *) o->object, (FcChar8 *) FC_ESCAPE_VARIABLE)) goto bail0; if (!FcNameUnparseString (&buf, (FcChar8 *) "=", 0)) goto bail0; if (!FcNameUnparseValueList (&buf, e->values, (FcChar8 *) FC_ESCAPE_VARIABLE)) goto bail0; } } } return FcStrBufDone (&buf); bail0: FcStrBufDestroy (&buf); return 0; }
void FcLangSetPrint(const FcLangSet *ls) { FcStrBuf buf; FcChar8 init_buf[1024]; FcStrBufInit(&buf, init_buf, sizeof(init_buf)); if (FcNameUnparseLangSet(&buf, ls) && FcStrBufChar(&buf, '\0')) printf("%s", buf.buf); else printf("langset (alloc error)"); FcStrBufDestroy(&buf); }