/*************************************************************************** * Copyright (C) 2005 by TAM(Teppei Tamra) * * tam-t@par.odn.ne.jp * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "furigana.h" #ifdef HAVE_CONFIG_H #include <config.h> #endif #ifdef HAVE_GETTEXT #include <libintl.h> #define _(String) dgettext(GETTEXT_PACKAGE,String) #define N_(String) (String) #else #define _(String) (String) #define N_(String) (String) #define bindtextdomain(Package,Directory) #define textdomain(domain) #define bind_textdomain_codeset(domain,codeset) #endif HonokaPluginRegister(Furigana); HonokaPluginSetup(Furigana); HonokaSetupCorePage *Furigana::setup() { bindtextdomain (GETTEXT_PACKAGE, HONOKA_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); HonokaSetupPage *page = new HonokaSetupPage(_("Furigana-plugin"),"",""); HonokaSetupPage *sc = new HonokaSetupPage(_("shortcut keys: "),"",""); sc->append(new HonokaSetupKeyItem( _("Furigana Filter: "), String(HONOKA_CONFIG_KEY_FILTER_PREFIX) + String("/Furigana"), "", "" )); page->append(sc); return page; }; Furigana::Furigana(ConfigPointer cfg) : TextFilter(cfg) { } Furigana::~Furigana() { } String Furigana::getName() { return String("Furigana"); } String Furigana::getPropertyName() { return String(_("furigana")); } const WideString Furigana::filter(const WideString &text) { return text; } const WideString Furigana::filter(vector<Segment> segments) { WideString cm; for(unsigned int i = 0;i < segments.size();i ++) { if (segments[i].getKanji() == segments[i].getYomi()) { cm += segments[i].getKanji(); } else { for(unsigned int j = 0;segments[i].getYomi().length() - j != 0;j ++) { if (segments[i].getKanji()[segments[i].getKanji().length() - j - 1] != segments[i].getYomi()[segments[i].getYomi().length() - j - 1]) { cm += segments[i].getKanji().substr(0,segments[i].getKanji().length() - j); cm += utf8_mbstowcs(String("(")); cm += segments[i].getYomi().substr(0,segments[i].getYomi().length() - j); cm += utf8_mbstowcs(String(")")); cm += segments[i].getKanji().substr(segments[i].getKanji().length() - j,segments[i].getKanji().length()); break; } } } } return cm; }