gboolean gw_spellcheck_has_hiragana_conversion (GwSpellcheck *spellcheck) { //Declarations GwSpellcheckPrivate *priv; const gint MAX = 300; gchar kana[MAX]; const gchar *query; gboolean has_hiragana_conversion; gint rk_conv_setting; gboolean want_conv; priv = spellcheck->priv; rk_conv_setting = priv->rk_conv_setting; want_conv = (rk_conv_setting == 0 || (rk_conv_setting == 2 && !lw_util_is_japanese_locale())); query = gtk_entry_get_text (priv->entry); has_hiragana_conversion = (want_conv && lw_util_str_roma_to_hira (query, kana, MAX)); return has_hiragana_conversion; }
static gchar* lw_query_tokenlist_build_romaji_supplimentary (LwQuery *query, const gchar *TOKEN, LwQueryType *new_type) { //Sanity checks g_return_val_if_fail (query != NULL, NULL); g_return_val_if_fail (TOKEN != NULL, NULL); g_return_val_if_fail (new_type != NULL, NULL); //Declarations gboolean romaji_to_furigana; gboolean hiragana_to_katakana; gboolean is_romaji; gchar *supplimentary; const gint LENGTH = 100; gchar buffer[LENGTH]; gchar *temp; gboolean convertable; //Initializations romaji_to_furigana = query->flags & LW_QUERY_FLAG_ROMAJI_TO_FURIGANA; hiragana_to_katakana = query->flags & LW_QUERY_FLAG_HIRAGANA_TO_KATAKANA; is_romaji = lw_util_is_romaji_str (TOKEN); supplimentary = g_strdup (TOKEN); buffer[0] = '\0'; *new_type = LW_QUERY_TYPE_ROMAJI; convertable = lw_util_str_roma_to_hira (TOKEN, buffer, LENGTH); if (romaji_to_furigana && is_romaji && convertable) { *new_type = LW_QUERY_TYPE_MIX; temp = g_strjoin (LW_QUERY_DELIMITOR_SUPPLIMENTARY_STRING, supplimentary, buffer, NULL); g_free (supplimentary); supplimentary = temp; temp = NULL; #ifdef WITH_MECAB { LwMorphologyEngine *engine; LwMorphology *morphology; GList *resultlist; GList *resultlink; engine = lw_morphologyengine_get_default (); resultlink = resultlist = lw_morphologyengine_analyze (engine, TOKEN); while (resultlink != NULL) { morphology = LW_MORPHOLOGY (resultlink->data); resultlink = resultlink->next; if (morphology->base_form != NULL && g_utf8_strlen (morphology->base_form, -1) > 1 && strcmp(TOKEN, morphology->base_form) != 0) { temp = g_strjoin (LW_QUERY_DELIMITOR_SUPPLIMENTARY_STRING, supplimentary, morphology->base_form, NULL); g_free (supplimentary); supplimentary = temp; temp = NULL; } } if (resultlist != NULL) lw_morphologylist_free (resultlist); resultlist = NULL; } #endif } else { buffer[0] = '\0'; } if (hiragana_to_katakana && buffer[0] != '\0' && lw_util_is_hiragana_str (buffer)) { lw_util_str_shift_hira_to_kata (buffer); temp = g_strjoin (LW_QUERY_DELIMITOR_SUPPLIMENTARY_STRING, supplimentary, buffer, NULL); g_free (supplimentary); supplimentary = temp; temp = NULL; } return supplimentary; }