diff --git a/src/fclang.c b/src/fclang.c index 6a3b7b5..ab7ae53 100644 --- a/src/fclang.c +++ b/src/fclang.c @@ -551,20 +551,27 @@ bail0: 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);