Ejemplo n.º 1
0
Archivo: lib.c Proyecto: sfionov/mc-dev
GString *
mc_search__toupper_case_str (const char *charset, const char *str, gsize str_len)
{
    GString *ret;
#ifdef HAVE_CHARSET
    gchar *converted_str, *tmp_str1, *tmp_str2, *tmp_str3;
    gsize converted_str_len;
    gsize tmp_len;

    if (charset == NULL)
        charset = cp_source;

    tmp_str2 = converted_str =
        mc_search__recode_str (str, str_len, charset, cp_display, &converted_str_len);
    if (converted_str == NULL)
        return NULL;

    tmp_len = converted_str_len + 1;

    tmp_str3 = tmp_str1 = g_strdup (converted_str);

    while (str_toupper (tmp_str1, &tmp_str2, &tmp_len))
        tmp_str1 += str_length_char (tmp_str1);

    g_free (tmp_str3);

    tmp_str2 =
        mc_search__recode_str (converted_str, converted_str_len, cp_display, charset, &tmp_len);
    g_free (converted_str);
    if (tmp_str2 == NULL)
        return NULL;

    ret = g_string_new_len (tmp_str2, tmp_len);
    g_free (tmp_str2);
    return ret;
#else
    const gchar *tmp_str1 = str;
    gchar *converted_str, *tmp_str2;
    gsize converted_str_len = str_len + 1;

    tmp_str2 = converted_str = g_strndup (str, str_len);

    while (str_toupper (tmp_str1, &tmp_str2, &converted_str_len))
        tmp_str1 += str_length_char (tmp_str1);

    ret = g_string_new_len (converted_str, str_len);
    g_free (converted_str);
    return ret;
#endif
}
Ejemplo n.º 2
0
Archivo: lib.c Proyecto: idispatch/mc
gchar *
mc_search__get_one_symbol (const char *charset, const char *str, gsize str_len,
                           gboolean * just_letters)
{
    gchar *converted_str;
    const gchar *next_char;

    gsize tmp_len;
#ifdef HAVE_CHARSET
    gsize converted_str_len;
    gchar *converted_str2;

    if (charset == NULL)
        charset = cp_source;

    converted_str = mc_search__recode_str (str, str_len, charset, cp_display, &converted_str_len);
#else
    (void) charset;

    converted_str = g_strndup (str, str_len);
#endif

    next_char = str_cget_next_char (converted_str);

    tmp_len = next_char - converted_str;

    converted_str[tmp_len] = '\0';

#ifdef HAVE_CHARSET
    converted_str2 =
        mc_search__recode_str (converted_str, tmp_len, cp_display, charset, &converted_str_len);
#endif
    if (just_letters)
    {
        if (str_isalnum (converted_str) && !str_isdigit (converted_str))
            *just_letters = TRUE;
        else
            *just_letters = FALSE;
    }
#ifdef HAVE_CHARSET
    g_free (converted_str);
    return converted_str2;
#else
    return converted_str;
#endif
}
Ejemplo n.º 3
0
gboolean
mc_search_prepare (mc_search_t * lc_mc_search)
{
    GPtrArray *ret;

    ret = g_ptr_array_new ();
#ifdef HAVE_CHARSET
    if (lc_mc_search->is_all_charsets)
    {
        gsize loop1;

        for (loop1 = 0; loop1 < codepages->len; loop1++)
        {
            const char *id;
            gsize recoded_str_len;
            gchar *buffer;

            id = ((codepage_desc *) g_ptr_array_index (codepages, loop1))->id;
            if (g_ascii_strcasecmp (id, lc_mc_search->original_charset) == 0)
            {
                g_ptr_array_add (ret,
                                 mc_search__cond_struct_new (lc_mc_search, lc_mc_search->original,
                                                             lc_mc_search->original_len,
                                                             lc_mc_search->original_charset));
                continue;
            }

            buffer =
                mc_search__recode_str (lc_mc_search->original, lc_mc_search->original_len,
                                       lc_mc_search->original_charset, id, &recoded_str_len);

            g_ptr_array_add (ret,
                             mc_search__cond_struct_new (lc_mc_search, buffer,
                                                         recoded_str_len, id));
            g_free (buffer);
        }
    }
    else
    {
        g_ptr_array_add (ret,
                         mc_search__cond_struct_new (lc_mc_search, lc_mc_search->original,
                                                     lc_mc_search->original_len,
                                                     lc_mc_search->original_charset));
    }
#else
    g_ptr_array_add (ret,
                     mc_search__cond_struct_new (lc_mc_search, lc_mc_search->original,
                                                 lc_mc_search->original_len,
                                                 str_detect_termencoding ()));
#endif
    lc_mc_search->conditions = ret;

    return (lc_mc_search->error == MC_SEARCH_E_OK);
}