FcBool
FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls)
{
- int i;
+ int i, bit;
+ FcChar32 bits;
FcBool first = FcTrue;
- for (i = 0; i < NUM_LANG_CHAR_SET; i++)
- if (FcLangSetBitGet (ls, i))
- {
- if (!first)
- if (!FcStrBufChar (buf, '|'))
+ for (i = 0; i < NUM_LANG_SET_MAP; i++)
+ {
+ if ((bits = ls->map[i]))
+ {
+ for (bit = 0; bit <= 31; bit++)
+ if (bits & (1 << bit))
+ {
+ int id = (i << 5) | bit;
+ if (!first)
+ if (!FcStrBufChar (buf, '|'))
+ return FcFalse;
+ if (!FcStrBufString (buf, fcLangCharSets[fcLangCharSetIndicesInv[id]].lang))
return FcFalse;
- if (!FcStrBufString (buf, fcLangCharSets[i].lang))
- return FcFalse;
- first = FcFalse;
- }
-
+ first = FcFalse;
+ }
+ }
+ }
if (ls->extra)
{
FcStrList *list = FcStrListCreate (ls->extra);