static FcValue FcNameConvert (FcType type, FcChar8 *string) { FcValue v; FcMatrix m; double b, e; char *p; v.type = type; switch ((int) v.type) { case FcTypeInteger: if (!FcNameConstant (string, &v.u.i)) v.u.i = atoi ((char *) string); break; case FcTypeString: v.u.s = FcStrdup (string); if (!v.u.s) v.type = FcTypeVoid; break; case FcTypeBool: if (!FcNameBool (string, &v.u.b)) v.u.b = FcFalse; break; case FcTypeDouble: v.u.d = strtod ((char *) string, 0); break; case FcTypeMatrix: FcMatrixInit (&m); sscanf ((char *) string, "%lg %lg %lg %lg", &m.xx, &m.xy, &m.yx, &m.yy); v.u.m = FcMatrixCopy (&m); break; case FcTypeCharSet: v.u.c = FcNameParseCharSet (string); if (!v.u.c) v.type = FcTypeVoid; break; case FcTypeLangSet: v.u.l = FcNameParseLangSet (string); if (!v.u.l) v.type = FcTypeVoid; break; case FcTypeRange: if (sscanf ((char *) string, "(%lg %lg)", &b, &e) != 2) { v.u.d = strtod ((char *) string, &p); if (p != NULL && p[0] != 0) { v.type = FcTypeVoid; break; } v.type = FcTypeDouble; } else v.u.r = FcRangeCreateDouble (b, e); break; default: break; } return v; }
static FcValue FcNameConvert (FcType type, FcChar8 *string) { FcValue v; FcMatrix m; v.type = type; switch ((int) v.type) { case FcTypeInteger: if (!FcNameConstant (string, &v.u.i)) v.u.i = atoi ((char *) string); break; case FcTypeString: v.u.s = FcStrdup (string); if (!v.u.s) v.type = FcTypeVoid; break; case FcTypeBool: if (!FcNameBool (string, &v.u.b)) v.u.b = FcFalse; break; case FcTypeDouble: v.u.d = strtod ((char *) string, 0); break; case FcTypeMatrix: FcMatrixInit (&m); sscanf ((char *) string, "%lg %lg %lg %lg", &m.xx, &m.xy, &m.yx, &m.yy); v.u.m = FcMatrixCopy (&m); break; case FcTypeCharSet: v.u.c = FcNameParseCharSet (string); if (!v.u.c) v.type = FcTypeVoid; break; case FcTypeLangSet: v.u.l = FcNameParseLangSet (string); if (!v.u.l) v.type = FcTypeVoid; break; default: break; } return v; }
static FcValue FcNameConvert (FcType type, FcChar8 *string, FcMatrix *m) { FcValue v; v.type = type; switch (v.type) { case FcTypeInteger: if (!FcNameConstant (string, &v.u.i)) v.u.i = atoi ((char *) string); break; case FcTypeString: v.u.s = string; break; case FcTypeBool: if (!FcNameBool (string, &v.u.b)) v.u.b = FcFalse; break; case FcTypeDouble: v.u.d = strtod ((char *) string, 0); break; case FcTypeMatrix: v.u.m = m; sscanf ((char *) string, "%lg %lg %lg %lg", &m->xx, &m->xy, &m->yx, &m->yy); break; case FcTypeCharSet: v.u.c = FcNameParseCharSet (string); break; case FcTypeLangSet: v.u.l = FcNameParseLangSet (string); break; default: break; } return v; }