]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcname.c
#ifdef out old cache stuff, replace with first version of new mmapping
[fontconfig.git] / src / fcname.c
index 4c0eb96d4b6cf12761c84ee727e2122f7c4a426a..a2524ad82d22116506c9685e6ec8786cffc7453d 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * $XFree86: xc/lib/fontconfig/src/fcname.c,v 1.13 2002/08/22 07:36:45 keithp Exp $
+ * $RCSId: xc/lib/fontconfig/src/fcname.c,v 1.15 2002/09/26 00:17:28 keithp Exp $
  *
- * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
+ * Copyright © 2000 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
 
 static const FcObjectType _FcBaseObjectTypes[] = {
     { FC_FAMILY,       FcTypeString, },
+    { FC_FAMILYLANG,   FcTypeString, },
     { FC_STYLE,                FcTypeString, },
+    { FC_STYLELANG,    FcTypeString, },
+    { FC_FULLNAME,     FcTypeString, },
+    { FC_FULLNAMELANG, FcTypeString, },
     { FC_SLANT,                FcTypeInteger, },
     { FC_WEIGHT,       FcTypeInteger, },
+    { FC_WIDTH,                FcTypeInteger, },
     { FC_SIZE,         FcTypeDouble, },
     { FC_ASPECT,       FcTypeDouble, },
     { FC_PIXEL_SIZE,   FcTypeDouble, },
@@ -40,6 +45,7 @@ static const FcObjectType _FcBaseObjectTypes[] = {
     { FC_FOUNDRY,      FcTypeString, },
 /*    { FC_CORE,               FcTypeBool, }, */
     { FC_ANTIALIAS,    FcTypeBool, },
+    { FC_HINT_STYLE,    FcTypeInteger, },
     { FC_HINTING,      FcTypeBool, },
     { FC_VERTICAL_LAYOUT,   FcTypeBool, },
     { FC_AUTOHINT,     FcTypeBool, },
@@ -60,6 +66,10 @@ static const FcObjectType _FcBaseObjectTypes[] = {
     { FC_MATRIX,       FcTypeMatrix },
     { FC_CHARSET,      FcTypeCharSet },
     { FC_LANG,         FcTypeLangSet },
+    { FC_FONTVERSION,  FcTypeInteger },
+    { FC_CAPABILITY,   FcTypeString },
+    { FC_FONTFORMAT,   FcTypeString },
+    { FC_EMBOLDEN,     FcTypeBool },
 };
 
 #define NUM_OBJECT_TYPES    (sizeof _FcBaseObjectTypes / sizeof _FcBaseObjectTypes[0])
@@ -136,25 +146,50 @@ FcNameGetObjectType (const char *object)
 }
 
 static const FcConstant _FcBaseConstants[] = {
+    { (FcChar8 *) "thin",          "weight",   FC_WEIGHT_THIN, },
+    { (FcChar8 *) "extralight",            "weight",   FC_WEIGHT_EXTRALIGHT, },
+    { (FcChar8 *) "ultralight",            "weight",   FC_WEIGHT_EXTRALIGHT, },
     { (FcChar8 *) "light",         "weight",   FC_WEIGHT_LIGHT, },
+    { (FcChar8 *) "book",          "weight",   FC_WEIGHT_BOOK, },
+    { (FcChar8 *) "regular",       "weight",   FC_WEIGHT_REGULAR, },
     { (FcChar8 *) "medium",        "weight",   FC_WEIGHT_MEDIUM, },
     { (FcChar8 *) "demibold",      "weight",   FC_WEIGHT_DEMIBOLD, },
+    { (FcChar8 *) "semibold",      "weight",   FC_WEIGHT_DEMIBOLD, },
     { (FcChar8 *) "bold",          "weight",   FC_WEIGHT_BOLD, },
+    { (FcChar8 *) "extrabold",     "weight",   FC_WEIGHT_EXTRABOLD, },
+    { (FcChar8 *) "ultrabold",     "weight",   FC_WEIGHT_EXTRABOLD, },
     { (FcChar8 *) "black",         "weight",   FC_WEIGHT_BLACK, },
 
     { (FcChar8 *) "roman",         "slant",    FC_SLANT_ROMAN, },
     { (FcChar8 *) "italic",        "slant",    FC_SLANT_ITALIC, },
     { (FcChar8 *) "oblique",       "slant",    FC_SLANT_OBLIQUE, },
 
+    { (FcChar8 *) "ultracondensed", "width",   FC_WIDTH_ULTRACONDENSED },
+    { (FcChar8 *) "extracondensed", "width",   FC_WIDTH_EXTRACONDENSED },
+    { (FcChar8 *) "condensed",     "width",    FC_WIDTH_CONDENSED },
+    { (FcChar8 *) "semicondensed", "width",    FC_WIDTH_SEMICONDENSED },
+    { (FcChar8 *) "normal",        "width",    FC_WIDTH_NORMAL },
+    { (FcChar8 *) "semiexpanded",   "width",   FC_WIDTH_SEMIEXPANDED },
+    { (FcChar8 *) "expanded",      "width",    FC_WIDTH_EXPANDED },
+    { (FcChar8 *) "extraexpanded",  "width",   FC_WIDTH_EXTRAEXPANDED },
+    { (FcChar8 *) "ultraexpanded",  "width",   FC_WIDTH_ULTRAEXPANDED },
+    
     { (FcChar8 *) "proportional",   "spacing",  FC_PROPORTIONAL, },
+    { (FcChar8 *) "dual",          "spacing",  FC_DUAL, },
     { (FcChar8 *) "mono",          "spacing",  FC_MONO, },
     { (FcChar8 *) "charcell",      "spacing",  FC_CHARCELL, },
 
-    { (FcChar8 *) "none",          "rgba",         FC_RGBA_NONE },
+    { (FcChar8 *) "unknown",       "rgba",         FC_RGBA_UNKNOWN },
     { (FcChar8 *) "rgb",           "rgba",         FC_RGBA_RGB, },
     { (FcChar8 *) "bgr",           "rgba",         FC_RGBA_BGR, },
     { (FcChar8 *) "vrgb",          "rgba",         FC_RGBA_VRGB },
     { (FcChar8 *) "vbgr",          "rgba",         FC_RGBA_VBGR },
+    { (FcChar8 *) "none",          "rgba",         FC_RGBA_NONE },
+
+    { (FcChar8 *) "hintnone",      "hintstyle",   FC_HINT_NONE },
+    { (FcChar8 *) "hintslight",            "hintstyle",   FC_HINT_SLIGHT },
+    { (FcChar8 *) "hintmedium",            "hintstyle",   FC_HINT_MEDIUM },
+    { (FcChar8 *) "hintfull",      "hintstyle",   FC_HINT_FULL },
 };
 
 #define NUM_FC_CONSTANTS   (sizeof _FcBaseConstants/sizeof _FcBaseConstants[0])
@@ -216,7 +251,7 @@ FcNameGetConstant (FcChar8 *string)
 {
     const FcConstantList    *l;
     int                            i;
-    
+
     for (l = _FcConstants; l; l = l->next)
     {
        for (i = 0; i < l->nconsts; i++)
@@ -240,13 +275,12 @@ FcNameConstant (FcChar8 *string, int *result)
 }
 
 FcBool
-FcNameBool (FcChar8 *v, FcBool *result)
+FcNameBool (const FcChar8 *v, FcBool *result)
 {
     char    c0, c1;
 
     c0 = *v;
-    if (isupper (c0))
-       c0 = tolower (c0);
+    c0 = FcToLower (c0);
     if (c0 == 't' || c0 == 'y' || c0 == '1')
     {
        *result = FcTrue;
@@ -260,8 +294,7 @@ FcNameBool (FcChar8 *v, FcBool *result)
     if (c0 == 'o')
     {
        c1 = v[1];
-       if (isupper (c1))
-           c1 = tolower (c1);
+       c1 = FcToLower (c1);
        if (c1 == 'n')
        {
            *result = FcTrue;
@@ -288,7 +321,7 @@ FcNameConvert (FcType type, FcChar8 *string, FcMatrix *m)
            v.u.i = atoi ((char *) string);
        break;
     case FcTypeString:
-       v.u.s = string;
+       v.u.si = FcObjectStaticName(string);
        break;
     case FcTypeBool:
        if (!FcNameBool (string, &v.u.b))
@@ -298,14 +331,14 @@ FcNameConvert (FcType type, FcChar8 *string, FcMatrix *m)
        v.u.d = strtod ((char *) string, 0);
        break;
     case FcTypeMatrix:
-       v.u.m = m;
+       v.u.mi = FcMatrixPtrCreateDynamic(m);
        sscanf ((char *) string, "%lg %lg %lg %lg", &m->xx, &m->xy, &m->yx, &m->yy);
        break;
     case FcTypeCharSet:
-       v.u.c = FcNameParseCharSet (string);
+       v.u.ci = FcCharSetPtrCreateDynamic(FcNameParseCharSet (string));
        break;
     case FcTypeLangSet:
-       v.u.l = FcNameParseLangSet (string);
+       v.u.li = FcLangSetPtrCreateDynamic(FcNameParseLangSet (string));
        break;
     default:
        break;
@@ -403,10 +436,10 @@ FcNameParse (const FcChar8 *name)
                        {
                            switch (v.type) {
                            case FcTypeCharSet:
-                               FcCharSetDestroy ((FcCharSet *) v.u.c);
+                               FcCharSetDestroy ((FcCharSet *) FcCharSetPtrU(v.u.ci));
                                break;
                            case FcTypeLangSet:
-                               FcLangSetDestroy ((FcLangSet *) v.u.l);
+                               FcLangSetDestroy ((FcLangSet *) FcLangSetPtrU(v.u.li));
                                break;
                            default:
                                break;
@@ -415,10 +448,10 @@ FcNameParse (const FcChar8 *name)
                        }
                        switch (v.type) {
                        case FcTypeCharSet:
-                           FcCharSetDestroy ((FcCharSet *) v.u.c);
+                           FcCharSetDestroy ((FcCharSet *) FcCharSetPtrU(v.u.ci));
                            break;
                        case FcTypeLangSet:
-                           FcLangSetDestroy ((FcLangSet *) v.u.l);
+                           FcLangSetDestroy ((FcLangSet *) FcLangSetPtrU(v.u.li));
                            break;
                        default:
                            break;
@@ -485,17 +518,20 @@ FcNameUnparseValue (FcStrBuf      *buf,
        sprintf ((char *) temp, "%g", v.u.d);
        return FcNameUnparseString (buf, temp, 0);
     case FcTypeString:
-       return FcNameUnparseString (buf, v.u.s, escape);
+       return FcNameUnparseString (buf, FcObjectPtrU(v.u.si), escape);
     case FcTypeBool:
        return FcNameUnparseString (buf, v.u.b ? (FcChar8 *) "True" : (FcChar8 *) "False", 0);
     case FcTypeMatrix:
+    {
+       FcMatrix * m = FcMatrixPtrU(v.u.mi);
        sprintf ((char *) temp, "%g %g %g %g", 
-                v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
+                m->xx, m->xy, m->yx, m->yy);
        return FcNameUnparseString (buf, temp, 0);
+    }
     case FcTypeCharSet:
-       return FcNameUnparseCharSet (buf, v.u.c);
+       return FcNameUnparseCharSet (buf, FcCharSetPtrU(v.u.ci));
     case FcTypeLangSet:
-       return FcNameUnparseLangSet (buf, v.u.l);
+       return FcNameUnparseLangSet (buf, FcLangSetPtrU(v.u.li));
     case FcTypeFTFace:
        return FcTrue;
     }
@@ -504,14 +540,14 @@ FcNameUnparseValue (FcStrBuf      *buf,
 
 static FcBool
 FcNameUnparseValueList (FcStrBuf       *buf,
-                       FcValueList     *v,
+                       FcValueListPtr  v,
                        FcChar8         *escape)
 {
-    while (v)
+    while (FcValueListPtrU(v))
     {
-       if (!FcNameUnparseValue (buf, v->value, escape))
+       if (!FcNameUnparseValue (buf, FcValueListPtrU(v)->value, escape))
            return FcFalse;
-       if ((v = v->next))
+       if (FcValueListPtrU(v = FcValueListPtrU(v)->next))
            if (!FcNameUnparseString (buf, (FcChar8 *) ",", 0))
                return FcFalse;
     }