#include "fcint.h"
typedef struct {
- const FcChar8 *lang;
+ const FcChar8 lang[8];
const FcCharSet charset;
} FcLangCharSet;
#define FcLangSetBitSet(ls, id) ((ls)->map[(id)>>5] |= ((FcChar32) 1 << ((id) & 0x1f)))
#define FcLangSetBitGet(ls, id) (((ls)->map[(id)>>5] >> ((id) & 0x1f)) & 1)
-static FcBool langsets_populated = FcFalse;
-
FcLangSet *
FcFreeTypeLangSet (const FcCharSet *charset,
const FcChar8 *exclusiveLang)
const FcCharSet *exclusiveCharset = 0;
FcLangSet *ls;
- if (!langsets_populated)
- {
- FcLangCharSetPopulate ();
- langsets_populated = FcTrue;
- }
-
if (exclusiveLang)
exclusiveCharset = FcCharSetForLang (exclusiveLang);
ls = FcLangSetCreate ();
if (!ls)
return 0;
+ if (FcDebug() & FC_DBG_LANGSET)
+ {
+ printf ("font charset\n");
+ FcCharSetPrint (charset);
+ printf ("\n");
+ }
for (i = 0; i < NUM_LANG_CHAR_SET; i++)
{
+ if (FcDebug() & FC_DBG_LANGSET)
+ {
+ printf ("%s charset\n", fcLangCharSets[i].lang);
+ FcCharSetPrint (&fcLangCharSets[i].charset);
+ printf ("\n");
+ }
+
/*
* Check for Han charsets to make fonts
* which advertise support for a single language
continue;
for (j = 0; j < fcLangCharSets[i].charset.num; j++)
- if (FcCharSetGetLeaf(&fcLangCharSets[i].charset, j) !=
- FcCharSetGetLeaf(exclusiveCharset, j))
+ if (FcCharSetLeaf(&fcLangCharSets[i].charset, j) !=
+ FcCharSetLeaf(exclusiveCharset, j))
continue;
}
missing = FcCharSetSubtractCount (&fcLangCharSets[i].charset, charset);
FcChar32 map[FC_CHARSET_MAP_SIZE];
FcChar32 next;
- printf ("\n%s(%d) ", fcLangCharSets[i].lang, missing);
+ printf ("\n%s(%u) ", fcLangCharSets[i].lang, missing);
printf ("{");
for (ucs4 = FcCharSetFirstPage (missed, map, &next);
ucs4 != FC_CHARSET_DONE;
FcCharSetDestroy (missed);
}
else
- printf ("%s(%d) ", fcLangCharSets[i].lang, missing);
+ printf ("%s(%u) ", fcLangCharSets[i].lang, missing);
}
if (!missing)
FcLangSetBitSet (ls, i);
int i;
int country = -1;
- if (!langsets_populated)
- {
- FcLangCharSetPopulate ();
- langsets_populated = FcTrue;
- }
-
for (i = 0; i < NUM_LANG_CHAR_SET; i++)
{
switch (FcLangCompare (lang, fcLangCharSets[i].lang)) {
}
if (country == -1)
return 0;
- return &fcLangCharSets[i].charset;
+ return &fcLangCharSets[country].charset;
}
FcLangSet *
{
FcStrList *list = FcStrListCreate (ls->extra);
FcChar8 *extra;
- FcLangResult r;
if (list)
{
{
if (!first)
if (!FcStrBufChar (buf, '|'))
+ {
+ FcStrListDone (list);
return FcFalse;
+ }
if (!FcStrBufString (buf, extra))
- return FcFalse;
+ {
+ FcStrListDone (list);
+ return FcFalse;
+ }
first = FcFalse;
}
+ FcStrListDone (list);
}
return FcTrue;
}
return FcTrue;
}
-static FcLangSet ** langsets = 0;
-static int langset_bank_count = 0, langset_ptr = 0, langset_count = 0;
-
-void
-FcLangSetNewBank (void)
-{
- langset_count = 0;
-}
-
-/* ideally, should only write one copy of any particular FcLangSet */
-int
-FcLangSetNeededBytes (const FcLangSet *l)
-{
- langset_count++;
- return sizeof (FcLangSet);
-}
-
-int
-FcLangSetNeededBytesAlign (void)
-{
- return __alignof__ (FcLangSet);
-}
-
-static FcBool
-FcLangSetEnsureBank (int bi)
+FcBool
+FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l)
{
- if (!langsets || bi >= langset_bank_count)
- {
- int new_count = langset_bank_count + 2;
- int i;
- FcLangSet** tt;
- tt = realloc(langsets, new_count * sizeof(FcLangSet *));
- if (!tt)
- return FcFalse;
-
- langsets = tt;
- for (i = langset_bank_count; i < new_count; i++)
- langsets[i] = 0;
- langset_bank_count = new_count;
- }
-
+ if (!FcSerializeAlloc (serialize, l, sizeof (FcLangSet)))
+ return FcFalse;
return FcTrue;
}
-void *
-FcLangSetDistributeBytes (FcCache * metadata, void * block_ptr)
-{
- int bi = FcCacheBankToIndex(metadata->bank);
- if (!FcLangSetEnsureBank(bi))
- return 0;
-
- block_ptr = ALIGN(block_ptr, FcLangSet);
- langsets[bi] = block_ptr;
- block_ptr = (void *)((char *)block_ptr +
- langset_count * sizeof(FcLangSet));
- langset_ptr = 0;
- metadata->langset_count = langset_count;
- return block_ptr;
-}
-
FcLangSet *
-FcLangSetSerialize(int bank, FcLangSet *l)
-{
- int p = langset_ptr, bi = FcCacheBankToIndex(bank);
-
- if (!l) return 0;
-
- langsets[bi][langset_ptr] = *l;
- langsets[bi][langset_ptr].extra = 0;
- langset_ptr++;
- return &langsets[bi][p];
-}
-
-void *
-FcLangSetUnserialize (FcCache * metadata, void *block_ptr)
+FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l)
{
- int bi = FcCacheBankToIndex(metadata->bank);
- if (!FcLangSetEnsureBank(bi))
- return 0;
+ FcLangSet *l_serialize = FcSerializePtr (serialize, l);
- FcMemAlloc (FC_MEM_LANGSET, metadata->langset_count * sizeof(FcLangSet));
- block_ptr = ALIGN(block_ptr, FcLangSet);
- langsets[bi] = (FcLangSet *)block_ptr;
- block_ptr = (void *)((char *)block_ptr +
- metadata->langset_count * sizeof(FcLangSet));
- return block_ptr;
+ if (!l_serialize)
+ return NULL;
+ *l_serialize = *l;
+ return l_serialize;
}
+#define __fclang__
+#include "fcaliastail.h"
+#undef __fclang__