/*************************************************************************** * Copyright (C) 2006 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 "jsfilter.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(JSFilter); HonokaPluginSetup(JSFilter); HonokaSetupCorePage *JSFilter::setup() { bindtextdomain (GETTEXT_PACKAGE, HONOKA_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); HonokaSetupPage *page = new HonokaSetupPage(_("JSFilter-plugin"),"",""); page->append(new HonokaSetupFileItem( _("JSFilter f_ile: "), HONOKA_CONFIG_JSFILTER_FILE, _("set JSFilter file in this entry."), HONOKA_DEFAULT_JSFILTER_FILE )); page->append(new HonokaSetupEntryItem( _("JSFilter f_unction: "), HONOKA_CONFIG_JSFILTER_FUNC, "", HONOKA_DEFAULT_JSFILTER_FUNC )); HonokaSetupPage *sc = new HonokaSetupPage(_("shortcut keys: "),"",""); sc->append(new HonokaSetupKeyItem( _("JSFilter: "), String(HONOKA_CONFIG_KEY_FILTER_PREFIX) + String("/JSFilter"), "", "" )); page->append(sc); return page; }; JSFilter::JSFilter(ConfigPointer cfg) : TextFilter(cfg) { file = cfg->read(String(HONOKA_CONFIG_JSFILTER_FILE), String(HONOKA_DEFAULT_JSFILTER_FILE)); func = cfg->read(String(HONOKA_CONFIG_JSFILTER_FUNC), String(HONOKA_DEFAULT_JSFILTER_FUNC)); jsproc = new JSProc(file); } JSFilter::~JSFilter() { } String JSFilter::getName() { return String("JSFilter"); } String JSFilter::getPropertyName() { return String(_("JSFilter")); } const WideString JSFilter::filter(const WideString &text) { String script; String sanit; //String func = "misakura(\"%%\").toString();"; String str = utf8_wcstombs(text); for(unsigned int i = 0;i < str.length();i ++) { if (str[i] == '\"') sanit += "\\\""; else sanit += str[i]; } for(unsigned int i = 0;i < (func.length() - 1);i ++) { if ((func[i] == '%') && (func[i + 1] == '%')) { script += sanit; i ++; } else script += func[i]; } script += func[func.length() - 1]; string res = jsproc->eval(string(script.c_str(),strlen(script.c_str()))); if (!res.length()) return text; String s; for(unsigned int i = 0;i < res.length(); i ++) if (res[i] != '\n') s += res[i]; return utf8_mbstowcs(s); }