Пример #1
0
void FcitxXkbLayoutInfoInit(void* arg)
{
    FcitxXkbLayoutInfo* layoutInfo = (FcitxXkbLayoutInfo*) arg;
    memset(layoutInfo, 0, sizeof(FcitxXkbLayoutInfo));
    layoutInfo->languages = fcitx_utils_new_string_list();
    utarray_new(layoutInfo->variantInfos, &variant_icd);
}
Пример #2
0
FcitxXkbRules* FcitxXkbReadRules(const char* file)
{
    xmlSAXHandler handle;
    memset(&handle, 0, sizeof(xmlSAXHandler));
    handle.startElement = RulesHandlerStartElement;
    handle.endElement = RulesHandlerEndElement;
    handle.characters = RulesHandlerCharacters;

    xmlInitParser();

    FcitxXkbRules* rules = fcitx_utils_new(FcitxXkbRules);
    utarray_new(rules->layoutInfos, &layout_icd);
    utarray_new(rules->modelInfos, &model_icd);
    utarray_new(rules->optionGroupInfos, &option_group_icd);

    FcitxXkbRulesHandler ruleshandler;
    ruleshandler.rules = rules;
    ruleshandler.path = fcitx_utils_new_string_list();
    ruleshandler.fromExtra = false;

    xmlSAXUserParseFile(&handle, &ruleshandler, file);
    utarray_free(ruleshandler.path);

    size_t extra_len = strlen(file) - strlen(".xml");
    if (strcmp(file + extra_len, ".xml") == 0) {
        char extrafile[extra_len + strlen(".extras.xml") + 1];
        memcpy(extrafile, file, extra_len);
        memcpy(extrafile + extra_len, ".extras.xml", sizeof(".extras.xml"));
        FcitxXkbRules *rulesextra = fcitx_utils_new(FcitxXkbRules);
        utarray_new(rulesextra->layoutInfos, &layout_icd);
        utarray_new(rulesextra->modelInfos, &model_icd);
        utarray_new(rulesextra->optionGroupInfos, &option_group_icd);
        ruleshandler.rules = rulesextra;
        ruleshandler.path = fcitx_utils_new_string_list();
        xmlSAXUserParseFile(&handle, &ruleshandler, extrafile);
        utarray_free(ruleshandler.path);
        MergeRules(rules, rulesextra);
    }


    xmlCleanupParser();

    return rules;
}
Пример #3
0
UT_array* KCharSelectData::sectionList()
{
    if(!openDataFile()) {
        return fcitx_utils_new_string_list();
    }


    const char* data = charselect->dataFile;
    const uint32_t stringBegin = FromLittleEndian32(data+24);
    const uint32_t stringEnd = FromLittleEndian32(data+28);

    const char* data = dataFile.constData();
    UT_array* list;
    uint32_t i = stringBegin;
    while(i < stringEnd) {
        list.append(i18nc("KCharSelect section name", data + i));
        i += strlen(data + i) + 1;
    }

    return list;
}
Пример #4
0
UT_array* CharSelectDataUnihanInfo(CharSelectData* charselect, uint32_t unicode)
{
    UT_array* res = fcitx_utils_new_string_list();

    const char* data = charselect->dataFile;
    const uint32_t offsetBegin = FromLittleEndian32(data+36);
    const uint32_t offsetEnd = charselect->size;

    int min = 0;
    int mid;
    int max = ((offsetEnd - offsetBegin) / 32) - 1;

    while (max >= min) {
        mid = (min + max) / 2;
        const uint32_t midUnicode = FromLittleEndian16(data + offsetBegin + mid*32);
        if (unicode > midUnicode)
            min = mid + 1;
        else if (unicode < midUnicode)
            max = mid - 1;
        else {
            int i;
            for(i = 0; i < 7; i++) {
                uint32_t offset = FromLittleEndian32(data + offsetBegin + mid*32 + 4 + i*4);
                const char* empty = "";
                if(offset != 0) {
                    const char* r = data + offset;
                    utarray_push_back(res, &r);
                } else {
                    utarray_push_back(res, &empty);
                }
            }
            return res;
        }
    }

    return res;
}
Пример #5
0
void FcitxXkbVariantInfoInit(void* arg)
{
    FcitxXkbVariantInfo* variantInfo = (FcitxXkbVariantInfo*) arg;
    memset(variantInfo, 0, sizeof(FcitxXkbVariantInfo));
    variantInfo->languages = fcitx_utils_new_string_list();
}
Пример #6
0
char* FcitxXkbRulesToReadableString(FcitxXkbRules* rules)
{
    FcitxXkbLayoutInfo* layoutInfo;
    FcitxXkbModelInfo* modelInfo;
    FcitxXkbVariantInfo* variantInfo;
    FcitxXkbOptionInfo* optionInfo;
    FcitxXkbOptionGroupInfo* optionGroupInfo;

    UT_array* list = fcitx_utils_new_string_list();

    fcitx_utils_string_list_printf_append(list, "Version: %s", rules->version);

    for (layoutInfo = (FcitxXkbLayoutInfo*) utarray_front(rules->layoutInfos);
         layoutInfo != NULL;
         layoutInfo = (FcitxXkbLayoutInfo*) utarray_next(rules->layoutInfos, layoutInfo))
    {
        fcitx_utils_string_list_printf_append(list, "\tLayout Name: %s", layoutInfo->name);
        fcitx_utils_string_list_printf_append(list, "\tLayout Description: %s", layoutInfo->description);
        char* languages = fcitx_utils_join_string_list(layoutInfo->languages, ',');
        fcitx_utils_string_list_printf_append(list, "\tLayout Languages: %s", languages);
        free(languages);
        for (variantInfo = (FcitxXkbVariantInfo*) utarray_front(layoutInfo->variantInfos);
             variantInfo != NULL;
             variantInfo = (FcitxXkbVariantInfo*) utarray_next(layoutInfo->variantInfos, variantInfo))
        {
            fcitx_utils_string_list_printf_append(list, "\t\tVariant Name: %s", variantInfo->name);
            fcitx_utils_string_list_printf_append(list, "\t\tVariant Description: %s", variantInfo->description);
            char* languages = fcitx_utils_join_string_list(variantInfo->languages, ',');
            fcitx_utils_string_list_printf_append(list, "\t\tVariant Languages: %s", languages);
            free(languages);
        }
    }

    for (modelInfo = (FcitxXkbModelInfo*) utarray_front(rules->modelInfos);
         modelInfo != NULL;
         modelInfo = (FcitxXkbModelInfo*) utarray_next(rules->modelInfos, modelInfo))
    {
        fcitx_utils_string_list_printf_append(list, "\tModel Name: %s", modelInfo->name);
        fcitx_utils_string_list_printf_append(list, "\tModel Description: %s", modelInfo->description);
        fcitx_utils_string_list_printf_append(list, "\tModel Vendor: %s", modelInfo->vendor);
    }

    for (optionGroupInfo = (FcitxXkbOptionGroupInfo*) utarray_front(rules->optionGroupInfos);
         optionGroupInfo != NULL;
         optionGroupInfo = (FcitxXkbOptionGroupInfo*) utarray_next(rules->optionGroupInfos, optionGroupInfo))
    {
        fcitx_utils_string_list_printf_append(list, "\tOption Group Name: %s", optionGroupInfo->name);
        fcitx_utils_string_list_printf_append(list, "\tOption Group Description: %s", optionGroupInfo->description);
        fcitx_utils_string_list_printf_append(list, "\tOption Group Exclusive: %d", optionGroupInfo->exclusive);
        for (optionInfo = (FcitxXkbOptionInfo*) utarray_front(optionGroupInfo->optionInfos);
             optionInfo != NULL;
             optionInfo = (FcitxXkbOptionInfo*) utarray_next(optionGroupInfo->optionInfos, optionInfo))
        {
            fcitx_utils_string_list_printf_append(list, "\t\tOption Name: %s", optionInfo->name);
            fcitx_utils_string_list_printf_append(list, "\t\tOption Description: %s", optionInfo->description);
        }
    }

    char* result = fcitx_utils_join_string_list(list, '\n');
    utarray_free(list);
    return result;
}