Exemple #1
0
void test_string_hash_set()
{

    FcitxStringHashSet* sset = fcitx_string_hashset_parse("a,b,c,d", ',');
    assert(fcitx_dict_size(sset) == 4);
    assert(fcitx_string_hashset_contains(sset, "c"));
    assert(!fcitx_string_hashset_contains(sset, "e"));
    fcitx_string_hashset_remove(sset, "c");
    assert(!fcitx_string_hashset_contains(sset, "c"));
    fcitx_string_hashset_insert(sset, "e");
    assert(fcitx_string_hashset_contains(sset, "e"));

    /* uthash guarantee order, so we can sure about this */
    char* joined = fcitx_string_hashset_join(sset, ',');
    assert(strcmp(joined, "a,b,d,e") == 0);

    free(joined);

    fcitx_string_hashset_free(sset);
}
Exemple #2
0
FCITX_EXPORT_API
void fcitx_addon_manager_set_override(FcitxAddonManager* manager, const char* enabled, const char* disabled)
{
    fcitx_string_hashset_free(manager->enabledAddons);
    fcitx_string_hashset_free(manager->disabledAddons);

    manager->enabledAddons = enabled ? fcitx_string_hashset_parse(enabled, ',') : NULL;
    manager->disabledAddons = disabled ? fcitx_string_hashset_parse(disabled, ',') : NULL;
    manager->disabledAllAddons = manager->disabledAddons ? fcitx_string_hashset_contains(manager->disabledAddons, "all") : false;

}
Exemple #3
0
void struct_attribute_foreach(FcitxConfiguration* config, const char* path, void* userData)
{
    FcitxDescription* desc = userData;
    if (desc->error) {
        return;
    }

    const char* type = fcitx_configuration_get_value_by_path(config, "Type");
    if (!type) {
        asprintf(&desc->errorMessage, "%s misses Type.", path);
        desc->error = true;
        return;
    }

    if (!is_builtin_type(type)) {
        asprintf(&desc->errorMessage, "Invalide Type.");
        desc->error = true;
        return;
    }

    if (strcmp(type, "List") == 0) {
        const char* subType = fcitx_configuration_get_value_by_path(config, "SubType");
        if (!subType) {
            asprintf(&desc->errorMessage, "%s misses SubType.", path);
            desc->error = true;
            return;
        }

        if (strcmp(subType, "List") == 0) {
            asprintf(&desc->errorMessage, "Recursive List is not allowed.");
            desc->error = true;
            return;
        }

        if (!is_builtin_type(subType) && !fcitx_string_hashset_contains(desc->structs, subType)) {
            asprintf(&desc->errorMessage, "Invalide SubType.");
            desc->error = true;
            return;
        }

        fcitx_string_hashset_remove(desc->topLevelStructs, subType);
    }
}
Exemple #4
0
bool _fcitx_addon_load_metadata(const char* key, size_t keyLen, void** data, void* userData)
{
    FCITX_UNUSED(key);
    FCITX_UNUSED(keyLen);
    FcitxStandardPathFile* files = *data;
    size_t i = 0;
    while (files[i].fp) {
        i++;
    }
    FcitxConfiguration* config = NULL;
    while (i != 0) {
        i --;
        config = fcitx_ini_parse(files[i].fp, config);
    }

    FcitxAddonConfig* addonConfig = fcitx_addon_config_new();
    fcitx_addon_config_load(addonConfig, config);
    fcitx_configuration_unref(config);

    do {
        if (addonConfig->addon.name[0] == 0 || addonConfig->addon.type[0] == 0 ||
            addonConfig->addon.category >= FAC_Last) {
            fcitx_addon_config_free(addonConfig);
            break;
        }

        FcitxAddonManager* manager = userData;
        FcitxAddon* addon = NULL;
        if (fcitx_dict_lookup_by_str(manager->addons, addonConfig->addon.name, &addon)) {
            // don't touch the running addon
            if (addon->loaded) {
                fcitx_addon_config_free(addonConfig);
                addon = NULL;
                break;
            } else {
                fcitx_addon_config_free(addon->config);
                addon->config = addonConfig;
            }
        } else {
            addon = fcitx_utils_new(FcitxAddon);
            addon->config = addonConfig;
            fcitx_dict_insert_by_str(manager->addons, addon->config->addon.name, addon, false);
        }

        if (addon) {
            addon->dependencies = fcitx_string_hashset_parse(addon->config->addon.dependency, ',');
        }

        if (addon &&
            (manager->disabledAllAddons ||
             (manager->disabledAllAddons && fcitx_string_hashset_contains(manager->disabledAddons, addon->config->addon.name)))) {
            addon->config->addon.enabled = false;
        }

        if (addon &&
            (manager->enabledAddons && fcitx_string_hashset_contains(manager->enabledAddons, addon->config->addon.name))) {
            addon->config->addon.enabled = true;
        }

    } while(0);

    return false;
}