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 }
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 }
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); }