Example #1
0
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;
}
Example #2
0
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;
}