]> git.wh0rd.org - fontconfig.git/commitdiff
Add the range support in blank element
authorAkira TAGOH <akira@tagoh.org>
Mon, 6 Dec 2010 03:18:23 +0000 (12:18 +0900)
committerAkira TAGOH <akira@tagoh.org>
Thu, 9 Dec 2010 02:36:26 +0000 (11:36 +0900)
src/fcxml.c

index 94e2d4b66f38e704deaf6cf5307dda0593e09c05..4d07f9d6cdfec1d76628163baa83c5330ec1fa50 100644 (file)
@@ -1092,30 +1092,37 @@ FcStartElement(void *userData, const XML_Char *name, const XML_Char **attr)
 static void
 FcParseBlank (FcConfigParse *parse)
 {
 static void
 FcParseBlank (FcConfigParse *parse)
 {
-    int            n = FcVStackElements (parse);
+    int                n = FcVStackElements (parse);
+    FcChar32   i;
     while (n-- > 0)
     {
        FcVStack    *v = FcVStackFetch (parse, n);
     while (n-- > 0)
     {
        FcVStack    *v = FcVStackFetch (parse, n);
-       if (v->tag != FcVStackInteger)
-           FcConfigMessage (parse, FcSevereError, "non-integer blank");
-       else
+       if (!parse->config->blanks)
        {
        {
+           parse->config->blanks = FcBlanksCreate ();
            if (!parse->config->blanks)
            if (!parse->config->blanks)
-           {
-               parse->config->blanks = FcBlanksCreate ();
-               if (!parse->config->blanks)
-               {
-                   FcConfigMessage (parse, FcSevereError, "out of memory");
-                   break;
-               }
-           }
+               goto bail;
+       }
+       switch (v->tag) {
+       case FcVStackInteger:
            if (!FcBlanksAdd (parse->config->blanks, v->u.integer))
            if (!FcBlanksAdd (parse->config->blanks, v->u.integer))
+               goto bail;
+           break;
+       case FcVStackRange:
+           for (i = v->u.range.begin; i <= v->u.range.end; i++)
            {
            {
-               FcConfigMessage (parse, FcSevereError, "out of memory");
-               break;
+               if (!FcBlanksAdd (parse->config->blanks, i))
+                   goto bail;
            }
            }
+           break;
+       default:
+           FcConfigMessage (parse, FcSevereError, "invalid element in blank");
+           break;
        }
     }
        }
     }
+    return;
+  bail:
+    FcConfigMessage (parse, FcSevereError, "out of memory");
 }
 
 static void
 }
 
 static void