OSDN Git Service

This is a official release 3.51 by nucleus-jp team.
authorsakamocchi <sakamocchi@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Thu, 30 Dec 2010 08:07:24 +0000 (08:07 +0000)
committersakamocchi <sakamocchi@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Thu, 30 Dec 2010 08:07:24 +0000 (08:07 +0000)
git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/nucleus-jp/tags/release-3-51@1078 1ca29b6e-896d-4ea0-84a5-967f57386b96

295 files changed:
utf8/action.php [new file with mode: 0755]
utf8/atom.php [new file with mode: 0755]
utf8/benchmark.inc [new file with mode: 0644]
utf8/config.php [new file with mode: 0755]
utf8/createaccount.php [new file with mode: 0644]
utf8/extra/fancyurls-2/.htaccess [new file with mode: 0644]
utf8/extra/fancyurls/.htaccess [new file with mode: 0755]
utf8/extra/fancyurls/archive [new file with mode: 0755]
utf8/extra/fancyurls/archives [new file with mode: 0755]
utf8/extra/fancyurls/blog [new file with mode: 0755]
utf8/extra/fancyurls/category [new file with mode: 0755]
utf8/extra/fancyurls/fancyurls.config.ja.php [new file with mode: 0644]
utf8/extra/fancyurls/fancyurls.config.php [new file with mode: 0755]
utf8/extra/fancyurls/item [new file with mode: 0755]
utf8/extra/fancyurls/member [new file with mode: 0755]
utf8/extra/fancyurls/special [new file with mode: 0644]
utf8/extra/htaccess/media/media.htaccess [new file with mode: 0644]
utf8/extra/htaccess/media/readme.ja.txt [new file with mode: 0644]
utf8/extra/htaccess/media/readme.txt [new file with mode: 0644]
utf8/extra/htaccess/skins/readme.ja.txt [new file with mode: 0644]
utf8/extra/htaccess/skins/readme.txt [new file with mode: 0644]
utf8/extra/htaccess/skins/skins.htaccess [new file with mode: 0644]
utf8/index.php [new file with mode: 0755]
utf8/install/index.php [new file with mode: 0755]
utf8/install/install.sql [new file with mode: 0755]
utf8/install/install_lang_japanese.php [new file with mode: 0644]
utf8/license.txt [new file with mode: 0755]
utf8/media/.htaccess [new file with mode: 0644]
utf8/media/readme.txt [new file with mode: 0755]
utf8/nucleus/bookmarklet.php [new file with mode: 0755]
utf8/nucleus/documentation/devdocs/custominstall.html [new file with mode: 0755]
utf8/nucleus/documentation/devdocs/index.html [new file with mode: 0755]
utf8/nucleus/documentation/devdocs/javascript/fontsizeChanger.js [new file with mode: 0644]
utf8/nucleus/documentation/devdocs/plugins.html [new file with mode: 0755]
utf8/nucleus/documentation/devdocs/sqltables.html [new file with mode: 0755]
utf8/nucleus/documentation/devdocs/styles/background.png [new file with mode: 0644]
utf8/nucleus/documentation/devdocs/styles/bullet.gif [new file with mode: 0644]
utf8/nucleus/documentation/devdocs/styles/manual.css [new file with mode: 0755]
utf8/nucleus/documentation/devdocs/xmlrpc.html [new file with mode: 0755]
utf8/nucleus/documentation/help.html [new file with mode: 0644]
utf8/nucleus/documentation/history.html [new file with mode: 0755]
utf8/nucleus/documentation/icon-help.gif [new file with mode: 0755]
utf8/nucleus/documentation/icon-up.gif [new file with mode: 0755]
utf8/nucleus/documentation/index.html [new file with mode: 0755]
utf8/nucleus/documentation/pics/chmod_menu.png [new file with mode: 0755]
utf8/nucleus/documentation/pics/chmod_window.png [new file with mode: 0755]
utf8/nucleus/documentation/pics/screen4.png [new file with mode: 0755]
utf8/nucleus/documentation/pics/screen5.png [new file with mode: 0755]
utf8/nucleus/documentation/pics/skinsandtemplates.png [new file with mode: 0755]
utf8/nucleus/documentation/skins.html [new file with mode: 0755]
utf8/nucleus/documentation/styles/background.png [new file with mode: 0644]
utf8/nucleus/documentation/styles/bullet.gif [new file with mode: 0644]
utf8/nucleus/documentation/styles/manual.css [new file with mode: 0755]
utf8/nucleus/documentation/tips.html [new file with mode: 0755]
utf8/nucleus/forgotpassword.html [new file with mode: 0755]
utf8/nucleus/forms/additemform.template [new file with mode: 0755]
utf8/nucleus/forms/commentform-closed.template [new file with mode: 0755]
utf8/nucleus/forms/commentform-loggedin.template [new file with mode: 0755]
utf8/nucleus/forms/commentform-notloggedin.template [new file with mode: 0755]
utf8/nucleus/forms/loginform-loggedin.template [new file with mode: 0755]
utf8/nucleus/forms/loginform-notloggedin.template [new file with mode: 0755]
utf8/nucleus/forms/membermailform-disallowed.template [new file with mode: 0755]
utf8/nucleus/forms/membermailform-loggedin.template [new file with mode: 0755]
utf8/nucleus/forms/membermailform-notloggedin.template [new file with mode: 0755]
utf8/nucleus/forms/nucleusbutton.template [new file with mode: 0755]
utf8/nucleus/forms/searchform.template [new file with mode: 0755]
utf8/nucleus/images/button-aligncenter.gif [new file with mode: 0755]
utf8/nucleus/images/button-alignleft.gif [new file with mode: 0755]
utf8/nucleus/images/button-alignright.gif [new file with mode: 0755]
utf8/nucleus/images/button-bold.gif [new file with mode: 0755]
utf8/nucleus/images/button-copy.gif [new file with mode: 0755]
utf8/nucleus/images/button-cut.gif [new file with mode: 0755]
utf8/nucleus/images/button-italic.gif [new file with mode: 0755]
utf8/nucleus/images/button-left.gif [new file with mode: 0755]
utf8/nucleus/images/button-link.gif [new file with mode: 0755]
utf8/nucleus/images/button-media.gif [new file with mode: 0755]
utf8/nucleus/images/button-paste.gif [new file with mode: 0755]
utf8/nucleus/images/button-preview.gif [new file with mode: 0755]
utf8/nucleus/images/button-right.gif [new file with mode: 0755]
utf8/nucleus/images/globe.gif [new file with mode: 0755]
utf8/nucleus/index.php [new file with mode: 0755]
utf8/nucleus/javascript/admin.js [new file with mode: 0755]
utf8/nucleus/javascript/bookmarklet.js [new file with mode: 0755]
utf8/nucleus/javascript/compatibility.js [new file with mode: 0755]
utf8/nucleus/javascript/edit.js [new file with mode: 0755]
utf8/nucleus/javascript/index.html [new file with mode: 0755]
utf8/nucleus/javascript/numbercheck.js [new file with mode: 0755]
utf8/nucleus/javascript/opennew.js [new file with mode: 0755]
utf8/nucleus/javascript/templateEdit.js [new file with mode: 0755]
utf8/nucleus/javascript/xmlhttprequest.js [new file with mode: 0644]
utf8/nucleus/language/english-utf8.php [new file with mode: 0644]
utf8/nucleus/language/english.php [new file with mode: 0755]
utf8/nucleus/language/index.html [new file with mode: 0755]
utf8/nucleus/language/japanese-euc.php [new file with mode: 0644]
utf8/nucleus/language/japanese-utf8.php [new file with mode: 0755]
utf8/nucleus/libs/.htaccess [new file with mode: 0644]
utf8/nucleus/libs/ACTION.php [new file with mode: 0755]
utf8/nucleus/libs/ACTIONLOG.php [new file with mode: 0755]
utf8/nucleus/libs/ACTIONS.php [new file with mode: 0644]
utf8/nucleus/libs/ADMIN.php [new file with mode: 0755]
utf8/nucleus/libs/BAN.php [new file with mode: 0755]
utf8/nucleus/libs/BLOG.php [new file with mode: 0755]
utf8/nucleus/libs/BODYACTIONS.php [new file with mode: 0644]
utf8/nucleus/libs/BaseActions.php [new file with mode: 0644]
utf8/nucleus/libs/COMMENT.php [new file with mode: 0755]
utf8/nucleus/libs/COMMENTACTIONS.php [new file with mode: 0644]
utf8/nucleus/libs/COMMENTS.php [new file with mode: 0755]
utf8/nucleus/libs/ENCAPSULATE.php [new file with mode: 0644]
utf8/nucleus/libs/ITEM.php [new file with mode: 0755]
utf8/nucleus/libs/ITEMACTIONS.php [new file with mode: 0644]
utf8/nucleus/libs/KARMA.php [new file with mode: 0755]
utf8/nucleus/libs/MANAGER.php [new file with mode: 0755]
utf8/nucleus/libs/MEDIA.php [new file with mode: 0755]
utf8/nucleus/libs/MEMBER.php [new file with mode: 0755]
utf8/nucleus/libs/NOTIFICATION.php [new file with mode: 0755]
utf8/nucleus/libs/PAGEFACTORY.php [new file with mode: 0755]
utf8/nucleus/libs/PARSER.php [new file with mode: 0755]
utf8/nucleus/libs/PLUGIN.php [new file with mode: 0755]
utf8/nucleus/libs/PLUGINADMIN.php [new file with mode: 0755]
utf8/nucleus/libs/SEARCH.php [new file with mode: 0755]
utf8/nucleus/libs/SKIN.php [new file with mode: 0755]
utf8/nucleus/libs/TEMPLATE.php [new file with mode: 0755]
utf8/nucleus/libs/backup.php [new file with mode: 0755]
utf8/nucleus/libs/entity.php [new file with mode: 0644]
utf8/nucleus/libs/globalfunctions.php [new file with mode: 0755]
utf8/nucleus/libs/include/admin-add.template [new file with mode: 0755]
utf8/nucleus/libs/include/admin-edit.template [new file with mode: 0755]
utf8/nucleus/libs/include/bookmarklet-add.template [new file with mode: 0755]
utf8/nucleus/libs/include/bookmarklet-edit.template [new file with mode: 0755]
utf8/nucleus/libs/include/index.html [new file with mode: 0755]
utf8/nucleus/libs/include/readme.ja.txt [new file with mode: 0644]
utf8/nucleus/libs/include/readme.txt [new file with mode: 0755]
utf8/nucleus/libs/index.html [new file with mode: 0755]
utf8/nucleus/libs/mb_emulator/convert.table [new file with mode: 0755]
utf8/nucleus/libs/mb_emulator/history.html [new file with mode: 0755]
utf8/nucleus/libs/mb_emulator/history.txt [new file with mode: 0755]
utf8/nucleus/libs/mb_emulator/lower.table [new file with mode: 0644]
utf8/nucleus/libs/mb_emulator/mb-emulator.ini [new file with mode: 0755]
utf8/nucleus/libs/mb_emulator/mb-emulator.php [new file with mode: 0755]
utf8/nucleus/libs/mb_emulator/sjistouni.table [new file with mode: 0755]
utf8/nucleus/libs/mb_emulator/unitosjis.table [new file with mode: 0755]
utf8/nucleus/libs/mb_emulator/upper.table [new file with mode: 0644]
utf8/nucleus/libs/mysql.php [new file with mode: 0644]
utf8/nucleus/libs/showlist.php [new file with mode: 0644]
utf8/nucleus/libs/skinie.php [new file with mode: 0755]
utf8/nucleus/libs/sql/mysql.php [new file with mode: 0755]
utf8/nucleus/libs/sql/pdo.php [new file with mode: 0755]
utf8/nucleus/libs/vars4.0.6.php [new file with mode: 0755]
utf8/nucleus/libs/vars4.1.0.php [new file with mode: 0755]
utf8/nucleus/libs/xmlrpc.inc.php [new file with mode: 0755]
utf8/nucleus/libs/xmlrpcs.inc.php [new file with mode: 0755]
utf8/nucleus/media.php [new file with mode: 0755]
utf8/nucleus/nucleus.gif [new file with mode: 0755]
utf8/nucleus/nucleus2.gif [new file with mode: 0755]
utf8/nucleus/plugins/NP_Ping.php [new file with mode: 0644]
utf8/nucleus/plugins/NP_SkinFiles.php [new file with mode: 0644]
utf8/nucleus/plugins/index.html [new file with mode: 0755]
utf8/nucleus/plugins/ping/english.php [new file with mode: 0644]
utf8/nucleus/plugins/ping/japanese-euc.php [new file with mode: 0644]
utf8/nucleus/plugins/ping/japanese-utf8.php [new file with mode: 0644]
utf8/nucleus/plugins/ping/ping.php [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/dir.gif [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/english.php [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/generic.gif [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/help.html [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/home.gif [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/html.gif [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/image.gif [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/index.php [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/japanese-euc.php [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/japanese-utf8.php [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/php.gif [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/style.css [new file with mode: 0644]
utf8/nucleus/plugins/skinfiles/text.gif [new file with mode: 0644]
utf8/nucleus/styles/addedit.css [new file with mode: 0755]
utf8/nucleus/styles/admin.css [new file with mode: 0755]
utf8/nucleus/styles/background.png [new file with mode: 0644]
utf8/nucleus/styles/bookmarklet.css [new file with mode: 0755]
utf8/nucleus/styles/bullet.gif [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_100_ffffff_40x100.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_10_000000_40x100.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_100_eaeaea_1x400.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_ffffff_1x400.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-hard_72_fecf03_1x100.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-bg_inset-soft_95_fef1ec_1x100.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-icons_222222_256x240.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-icons_228ef1_256x240.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-icons_2e83ff_256x240.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-icons_454545_256x240.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-icons_888888_256x240.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-icons_cd0a0a_256x240.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-icons_ef8c08_256x240.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-icons_fbcb09_256x240.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-icons_fecf03_256x240.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/images/ui-icons_ffffff_256x240.png [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/ui.accordion.css [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/ui.all.css [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/ui.base.css [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/ui.core.css [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/ui.datepicker.css [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/ui.dialog.css [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/ui.progressbar.css [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/ui.resizable.css [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/ui.slider.css [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/ui.tabs.css [new file with mode: 0644]
utf8/nucleus/styles/jquery-ui/ui.theme.css [new file with mode: 0644]
utf8/nucleus/styles/logo.gif [new file with mode: 0755]
utf8/nucleus/styles/manual.css [new file with mode: 0755]
utf8/nucleus/styles/popups.css [new file with mode: 0755]
utf8/nucleus/styles/quickb-hover.jpg [new file with mode: 0644]
utf8/nucleus/styles/quickb-hover_org.jpg [new file with mode: 0755]
utf8/nucleus/styles/quickb.jpg [new file with mode: 0644]
utf8/nucleus/styles/quickb_org.jpg [new file with mode: 0755]
utf8/nucleus/upgrades/index.html [new file with mode: 0644]
utf8/nucleus/upgrades/index.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade.functions.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade0.95.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade0.96.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade1.0.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade1.1.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade1.5.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade2.0.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade2.5.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade3.0.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade3.1.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade3.2.php [new file with mode: 0755]
utf8/nucleus/upgrades/upgrade3.3.php [new file with mode: 0644]
utf8/nucleus/upgrades/upgrade3.31.php [new file with mode: 0644]
utf8/nucleus/upgrades/upgrade3.4.php [new file with mode: 0644]
utf8/nucleus/upgrades/upgrade3.5.php [new file with mode: 0755]
utf8/nucleus/xmlrpc/api_blogger.inc.php [new file with mode: 0755]
utf8/nucleus/xmlrpc/api_metaweblog.inc.php [new file with mode: 0755]
utf8/nucleus/xmlrpc/api_mt.inc.php [new file with mode: 0755]
utf8/nucleus/xmlrpc/api_nucleus.inc.php [new file with mode: 0755]
utf8/nucleus/xmlrpc/index.html [new file with mode: 0755]
utf8/nucleus/xmlrpc/server.php [new file with mode: 0755]
utf8/readme.html [new file with mode: 0644]
utf8/robots.txt [new file with mode: 0755]
utf8/rsd.php [new file with mode: 0755]
utf8/skins/.htaccess [new file with mode: 0644]
utf8/skins/atom/skinbackup.xml [new file with mode: 0755]
utf8/skins/default/default_left.css [new file with mode: 0644]
utf8/skins/default/default_right.css [new file with mode: 0644]
utf8/skins/default/favicon.ico [new file with mode: 0644]
utf8/skins/default/images/arrow.gif [new file with mode: 0644]
utf8/skins/default/images/bg.gif [new file with mode: 0644]
utf8/skins/default/images/bgcategory.gif [new file with mode: 0644]
utf8/skins/default/images/bgcomment.gif [new file with mode: 0644]
utf8/skins/default/images/bgcontainer01.gif [new file with mode: 0644]
utf8/skins/default/images/bgcontainer02.gif [new file with mode: 0644]
utf8/skins/default/images/bgedit.gif [new file with mode: 0644]
utf8/skins/default/images/bgpostedby.gif [new file with mode: 0644]
utf8/skins/default/images/commentquote01.gif [new file with mode: 0644]
utf8/skins/default/images/commentquote02.gif [new file with mode: 0644]
utf8/skins/default/images/corner_br.gif [new file with mode: 0644]
utf8/skins/default/images/corner_tr.gif [new file with mode: 0644]
utf8/skins/default/images/dot.gif [new file with mode: 0644]
utf8/skins/default/images/dotv.gif [new file with mode: 0644]
utf8/skins/default/images/header.jpg [new file with mode: 0644]
utf8/skins/default/images/header_sm.jpg [new file with mode: 0644]
utf8/skins/default/images/nucleus.gif [new file with mode: 0644]
utf8/skins/default/images/shadow.gif [new file with mode: 0644]
utf8/skins/default/images/sidetitlebg.gif [new file with mode: 0644]
utf8/skins/default/inc/additemform.inc [new file with mode: 0644]
utf8/skins/default/inc/benchmark.inc [new file with mode: 0644]
utf8/skins/default/inc/footer.inc [new file with mode: 0644]
utf8/skins/default/inc/head.inc [new file with mode: 0644]
utf8/skins/default/inc/header.inc [new file with mode: 0644]
utf8/skins/default/inc/linklist.inc [new file with mode: 0644]
utf8/skins/default/inc/navigation.inc [new file with mode: 0644]
utf8/skins/default/inc/show_benchmark.inc [new file with mode: 0644]
utf8/skins/default/inc/sidebar.inc [new file with mode: 0644]
utf8/skins/default/jlocal.css [new file with mode: 0644]
utf8/skins/default/nicetitle.css [new file with mode: 0644]
utf8/skins/default/nicetitle.js [new file with mode: 0644]
utf8/skins/default/preview-large.png [new file with mode: 0644]
utf8/skins/default/preview.png [new file with mode: 0644]
utf8/skins/default/readme.html [new file with mode: 0644]
utf8/skins/default/skinbackup.xml [new file with mode: 0644]
utf8/skins/default/skinbackup.xml.org [new file with mode: 0644]
utf8/skins/readme.txt [new file with mode: 0755]
utf8/skins/rsd/skinbackup.xml [new file with mode: 0755]
utf8/skins/rss2.0/skinbackup.xml [new file with mode: 0755]
utf8/xml-rss2.php [new file with mode: 0755]

diff --git a/utf8/action.php b/utf8/action.php
new file mode 100755 (executable)
index 0000000..b8399df
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * File containing actions that can be performed by visitors of the site,
+ * like adding comments, etc...
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: action.php,v 1.8.2.1 2007/09/05 05:50:12 kimitake Exp $
+ */
+
+$CONF = array();
+require('./config.php');
+
+// common functions
+include_once($DIR_LIBS . 'ACTION.php');
+
+$action = requestVar('action');
+$a =& new ACTION();
+$errorInfo = $a->doAction($action);
+
+if ($errorInfo) {
+       doError($errorInfo['message'], new SKIN($errorInfo['skinid']) );
+}
+
diff --git a/utf8/atom.php b/utf8/atom.php
new file mode 100755 (executable)
index 0000000..af5170c
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * Nucleus Atom Syndication
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: atom.php,v 1.6 2006/07/12 07:11:45 kimitake Exp $
+ */
+
+header('Pragma: no-cache');
+
+$CONF = array();
+$CONF['Self'] = 'atom.php';
+
+include('./config.php');
+
+if (!$CONF['DisableSite']) {
+       // get feed into $feed
+       ob_start();
+               selectSkin('feeds/atom');
+               selector();
+               $feed = ob_get_contents();
+       ob_end_clean();
+
+       // create ETAG (hash of feed)
+       // (HTTP_IF_NONE_MATCH has quotes around it)
+       $eTag = '"' . md5($feed) . '"';
+       header('Etag: ' . $eTag);
+
+       // compare Etag to what we got
+       if ($eTag == serverVar('HTTP_IF_NONE_MATCH') ) {
+               header('HTTP/1.0 304 Not Modified');
+               header('Content-Length: 0');
+       } else {
+               if (strtolower(_CHARSET) != 'utf-8') {
+                   $feed = mb_convert_encoding($feed, "UTF-8", _CHARSET);
+               }
+               header("Content-Type: application/xml");
+               // dump feed
+               echo $feed;
+       }
+
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/benchmark.inc b/utf8/benchmark.inc
new file mode 100644 (file)
index 0000000..f021be2
--- /dev/null
@@ -0,0 +1,34 @@
+<?php\r
+\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+\r
+/**\r
+ * Nucleus Benchmark\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ */\r
+\r
+\r
+if (!function_exists('getmtime'))\r
+{\r
+    function getmtime()\r
+    {\r
+        $a = explode (' ',microtime());\r
+        return(double) $a[0] + $a[1];\r
+    }\r
+}\r
+\r
+// For benchmarking\r
+global $StartTime;\r
+$StartTime = getmtime();\r
+?>\r
diff --git a/utf8/config.php b/utf8/config.php
new file mode 100755 (executable)
index 0000000..fa8729f
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * Nucleus configration file
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ */
+
+// This file contains variables with the locations of the data dirs
+// and basic functions that every page can use
+
+// mySQL connection information
+$MYSQL_HOST     = 'hostname';
+$MYSQL_USER     = 'username';
+$MYSQL_PASSWORD = 'password';
+$MYSQL_DATABASE = 'databasename';
+$MYSQL_PREFIX   = '';
+// new in 3.50. first element is db handler, the second is the db driver used by the handler
+// default is $MYSQL_HANDLER = array('mysql','mysql');
+$MYSQL_HANDLER = array('mysql','mysql');
+//$MYSQL_HANDLER = array('pdo','mysql');
+
+// main nucleus directory
+$DIR_NUCLEUS = '/your/path/to/nucleus/';
+
+// media dir
+$DIR_MEDIA   = '/your/path/to/media/';
+
+// extra skin files for imported skins
+$DIR_SKINS   = '/your/path/to/skins/';
+
+// these dirs are normally subdirs of the nucleus dir, but
+// you can redefine them if you wish
+$DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';
+$DIR_LANG    = $DIR_NUCLEUS . 'language/';
+$DIR_LIBS    = $DIR_NUCLEUS . 'libs/';
+
+if (!@file_exists($DIR_LIBS . 'globalfunctions.php')) {
+       echo 'Configuration error, please run the <a href="./install/index.php">install script</a> or modify config.php';
+       exit;
+}
+
+// include libs
+include($DIR_LIBS.'globalfunctions.php');
+if (!extension_loaded('mbstring')) {
+       include($DIR_LIBS.'mb_emulator/mb-emulator.php');
+}
+?>
\ No newline at end of file
diff --git a/utf8/createaccount.php b/utf8/createaccount.php
new file mode 100644 (file)
index 0000000..af40182
--- /dev/null
@@ -0,0 +1,106 @@
+<?php\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+\r
+/**\r
+ * Create account form\r
+ *\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ */\r
+\r
+require './config.php';\r
+?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html <?php echo _HTML_XML_NAME_SPACE_AND_LANG_CODE; ?>>\r
+    <head>\r
+        <meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET; ?>" />\r
+        <title><?php echo _CREATE_ACCOUNT_TITLE ?></title>\r
+        <style type="text/css">@import url(nucleus/styles/manual.css);</style>\r
+    </head>\r
+    <body>\r
+\r
+        <h1><?php echo _CREATE_ACCOUNT0; ?></h1>\r
+<?php\r
+// show form only if Visitors are allowed to create a Member Account\r
+if ($CONF['AllowMemberCreate']==1) { \r
+    if (isset($_POST['showform']) && $_POST['showform'] == 1) {\r
+        include $DIR_LIBS . 'ACTION.php';\r
+        // after the from is sent it will be validated\r
+        // POST data will be added as value to treat the user with care (;-))\r
+        $a = new ACTION();\r
+        // if createAccount fails it returns an error message \r
+        $message = '<span style="font-weight:bold; color:red;">' . htmlspecialchars($a->createAccount()) . '</span><br /><br />';\r
+        if (isset($_POST['name']))\r
+            $name     = 'value="' . htmlspecialchars($_POST['name']) . '" ';\r
+        if (isset($_POST['realname']))\r
+            $realname = 'value="' . htmlspecialchars($_POST['realname']) . '" ';\r
+        if (isset($_POST['email']))\r
+            $email    = 'value="' . htmlspecialchars($_POST['email']) . '" ';\r
+        if (isset($_POST['url']))\r
+            $url      = 'value="' . htmlspecialchars($_POST['url']) . '" ';\r
+//             $showform = 1;\r
+//     } else {\r
+//             $showform = 0;\r
+        echo $message;\r
+    }\r
+?>\r
+        <form method="post" action="createaccount.php">\r
+            <div>\r
+                <input type="hidden" name="showform" value="1" />\r
+                <input type="hidden" name="action" value="createaccount" />\r
+                <?php echo _CREATE_ACCOUNT_LOGIN_NAME; ?>\r
+                <br />\r
+                <input name="name" size="32" maxlength="32" <?php echo $name; ?>/> <small><?php echo _CREATE_ACCOUNT_LOGIN_NAME_VALID; ?></small>\r
+                <br />\r
+                <br />\r
+                <?php echo _CREATE_ACCOUNT_REAL_NAME; ?>\r
+                <br />\r
+                <input name="realname" size="40" <?php echo $realname; ?>/>\r
+                <br />\r
+                <br />\r
+                <?php echo _CREATE_ACCOUNT_EMAIL; ?>\r
+                <br />\r
+                <input name="email" size="40" <?php echo $email; ?>/> <small><?php echo _CREATE_ACCOUNT_EMAIL2; ?></small>\r
+                <br />\r
+                <br />\r
+                <?php echo _CREATE_ACCOUNT_URL; ?>\r
+                <br />\r
+                <input name="url" size="60" <?php echo $url; ?>/>\r
+                <br />\r
+<?php\r
+        global $manager;\r
+        // add extra fields from Plugins, like NP_Profile\r
+        $data = array(\r
+            'type'      => 'createaccount.php',\r
+            'prelabel'  => '',\r
+            'postlabel' => '<br />',\r
+            'prefield'  => '',\r
+            'postfield' => '<br /><br />'\r
+        );\r
+        $manager->notify('RegistrationFormExtraFields', $data);\r
+        // add a Captcha challenge or something else\r
+        $manager->notify('FormExtra', array('type' => 'membermailform-notloggedin'));\r
+?>\r
+                <br />\r
+                <br />\r
+                <input type="submit" value="<?php echo _CREATE_ACCOUNT_SUBMIT; ?>" />\r
+            </div>\r
+        </form>\r
+<?php\r
+} else {\r
+    echo _CREATE_ACCOUNT1;\r
+    echo _CREATE_ACCOUNT2;\r
+}\r
+?>\r
+    </body>\r
+</html>\r
diff --git a/utf8/extra/fancyurls-2/.htaccess b/utf8/extra/fancyurls-2/.htaccess
new file mode 100644 (file)
index 0000000..e0e6a9d
--- /dev/null
@@ -0,0 +1,6 @@
+<IfModule mod_rewrite.c>
+       RewriteEngine on
+       RewriteCond %{REQUEST_FILENAME} !-f
+       RewriteCond %{REQUEST_FILENAME} !-d
+       RewriteRule ^(.*)$ index.php?virtualpath=$1 [L,QSA]
+</IfModule>
diff --git a/utf8/extra/fancyurls/.htaccess b/utf8/extra/fancyurls/.htaccess
new file mode 100755 (executable)
index 0000000..69f7bf0
--- /dev/null
@@ -0,0 +1,21 @@
+<FilesMatch "^item$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^archive$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^member$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^archives$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^category$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^blog$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^special$">
+    ForceType application/x-httpd-php
+</FilesMatch>
diff --git a/utf8/extra/fancyurls/archive b/utf8/extra/fancyurls/archive
new file mode 100755 (executable)
index 0000000..dd348b7
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/archive/1/2005-12)
+// if blogid was not filled out by plugins
+if (($blogid == 0) && ($archive == ''))
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 2)
+       {
+               $blogid = intval($data[1]);
+               $archive = $data[2];
+       }
+}
+
+selector();
+
+?>
\ No newline at end of file
diff --git a/utf8/extra/fancyurls/archives b/utf8/extra/fancyurls/archives
new file mode 100755 (executable)
index 0000000..b1031e3
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/archives/1)
+// if archivelist was not filled out by plugins
+if ($archivelist == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $archivelist = intval($data[1]);
+       }
+}
+
+selector();
+
+?>
\ No newline at end of file
diff --git a/utf8/extra/fancyurls/blog b/utf8/extra/fancyurls/blog
new file mode 100755 (executable)
index 0000000..0b4cf08
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/blog/1234)
+// if blogid was not filled out by plugins
+if ($blogid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $blogid = intval($data[1]);
+       }
+}
+
+selector();
+
+?>
\ No newline at end of file
diff --git a/utf8/extra/fancyurls/category b/utf8/extra/fancyurls/category
new file mode 100755 (executable)
index 0000000..bdd8e31
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/category/1234)
+// if catid was not filled out by plugins
+if ($catid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $catid = intval($data[1]);
+       }
+}
+
+selector();
+
+?>
\ No newline at end of file
diff --git a/utf8/extra/fancyurls/fancyurls.config.ja.php b/utf8/extra/fancyurls/fancyurls.config.ja.php
new file mode 100644 (file)
index 0000000..b472df7
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+       /*
+               このディレクトリについて:
+               ---------------------------
+               
+               このディレクトリには、URLから「index.php」の部分を取り除いて、ユーザーフレンドリーなURL表記を実現する
+               「fancy urls」に関連するファイルが収められています。
+       
+               導入:
+               -------
+               
+               1. このディレクトリにおいてある全てのファイルを、Nucleusのindex.php、action.phpが置いてあるディレクトリに
+                  コピーします。
+                  
+                  すでに.htaccessファイルがディレクトリに用意してある時は、元の.htaccessファイルにこのディレクトリにある
+                  .htaccessファイルの内容を追記します。(ほとんどのFTPクライアントは、初期状態で.htaccess等のファイルが表
+                  されないように設定されているので、各ソフトの設定でこれらのファイルを扱えるようにしなければなりません)
+
+               2. このファイルを編集して、$CONF['Self']に、index.phpのあるディレクトリを指定します。
+                  注:このとき、URLの最後に「/(スラッシュ)」をつけないように!!
+
+               3. index.php を次のように編集します。
+                  
+                       $CONF = array();
+
+                       include('./fancyurls.config.ja.php'); 
+                       include('./config.php');
+
+                       selector();
+                       
+               4. Nucleusの管理エリアの「グローバル設定」のページで、「Fancy URLs」を有効にします。
+
+               5. 以上!
+               
+               動かない時は:
+               ---------------
+               
+               残念。コピーしたファイルを削除します。(.htaccessファイルも忘れずに)
+               
+       */
+
+       
+       // 注:このとき、URLの最後に「/(スラッシュ)」をつけないように!! 
+       $CONF['Self'] = 'http://www.yourhost.com/yourpath';
+
+    /*
+       高度な設定:FancyURLのキーワード
+       
+       FancyURLに使用するキーワードを変更することが出来ます。
+       この設定を変更する場合は、拡張し無しファイルのファイル名と、.htaccessファイルに書かれた
+               キーワードも忘れずに変更する必要があります。
+    */
+    $CONF['ItemKey']        = 'item';          // 個別記事にアクセスするキーワード
+    $CONF['ArchiveKey']     = 'archive';       // アーカイブにアクセスするキーワード
+    $CONF['ArchivesKey']    = 'archives';      // アーカイブ一覧にアクセスするキーワード
+    $CONF['MemberKey']      = 'member';                // メンバーページにアクセスするキーワード
+    $CONF['BlogKey']        = 'blog';          // ブログ別にアクセスするキーワード
+    $CONF['CategoryKey']    = 'category';      // カテゴリ別にアクセスするキーワード
+    $CONF['SpecialskinKey'] = 'special';       // スペシャルスキンパーツで作ったページにアクセスするキーワード
+?>
\ No newline at end of file
diff --git a/utf8/extra/fancyurls/fancyurls.config.php b/utf8/extra/fancyurls/fancyurls.config.php
new file mode 100755 (executable)
index 0000000..dc80c27
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+       /*
+               About
+               -----
+               
+               This directory contains extra files to make the 'fancy urls' feature even more
+               fancier, by eliminating the 'index.php'-part of the URL
+       
+               Installation
+               ------------
+               
+               1. Copy all files in this directory (except for index.html) to your main nucleus dir
+                  (where your index.php and action.php file are)
+                  
+                  If you have an already existing .htaccess file (most ftp-programs don't show hidden files
+                  by default, so don't start uploading it without checking your server). If you do, download
+                  that old one first, and copy the contents of the new .htaccess file (from the fancyurls
+                  folder) in your old one, and upload that... 
+
+               2. Edit fancyurls.config.php so that $CONF['Self'] points to your main directory. 
+                       NOTE: this time, and only this time, the URL should NOT end in a slash
+
+               3. Edit index.php to look like this: 
+                  
+                       $CONF = array();
+
+                       include('./fancyurls.config.php'); 
+                       include('./config.php');
+
+                       selector();
+                       
+               4. Enable 'Fancy URLs' in the Nucleus admin area (nucleus management / edit settings)
+
+               5. Off you go!
+               
+               If it doesn't work:
+               -------------------
+               
+               Remove the files again (don't forget the hidden file .htaccess). Voila.
+               
+       */
+
+       
+       // remember: this URL should _NOT_ end with a slash. 
+       $CONF['Self'] = 'http://www.yourhost.com/yourpath';
+
+    /*
+       Advanced: keywords to use in fancy URLs. 
+       
+       If you want to change these, you'll also need to rename the stub files 
+       and update the contents of the .htaccess file accordingly
+    */
+    $CONF['ItemKey']        = 'item';
+    $CONF['ArchiveKey']     = 'archive';
+    $CONF['ArchivesKey']    = 'archives';
+    $CONF['MemberKey']      = 'member';
+    $CONF['BlogKey']        = 'blog';
+    $CONF['CategoryKey']    = 'category';
+    $CONF['SpecialskinKey'] = 'special';
+?>
\ No newline at end of file
diff --git a/utf8/extra/fancyurls/item b/utf8/extra/fancyurls/item
new file mode 100755 (executable)
index 0000000..23eb1bd
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/item/1234)
+// if itemid was not filled out by plugins
+if ($itemid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $itemid = intval($data[1]);
+       }
+}
+
+selector();
+
+?>
\ No newline at end of file
diff --git a/utf8/extra/fancyurls/member b/utf8/extra/fancyurls/member
new file mode 100755 (executable)
index 0000000..d2e14c2
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/member/1234)
+// if memberid was not filled out by plugins
+if ($memberid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $memberid = intval($data[1]);
+       }
+}
+
+selector();
+
+?>
\ No newline at end of file
diff --git a/utf8/extra/fancyurls/special b/utf8/extra/fancyurls/special
new file mode 100644 (file)
index 0000000..60171c4
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+if (!requestVar('special'))
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $_REQUEST['special'] = $data[1];
+       }
+}
+
+selector();
+
+?>
\ No newline at end of file
diff --git a/utf8/extra/htaccess/media/media.htaccess b/utf8/extra/htaccess/media/media.htaccess
new file mode 100644 (file)
index 0000000..da274e3
--- /dev/null
@@ -0,0 +1,11 @@
+# You may modify following line to avoid script execution completely.\r
+# In environment where multiple users are using Nucleus,\r
+# be sure that any script cannot be executed due to your server setting.\r
+# Note that this isn't needed when all members are super-admin.\r
+# スクリプトの実行を避ける為に、適宜追加してください。\r
+# サーバの設定によっては、アップロードされたファイルをスクリプトとして\r
+# 実行される恐れがありますので、複数人でNucleusを運用している場合は特に\r
+# 注意が必要です。\r
+#\r
+\r
+RemoveHandler php cgi pl py rb shtml
\ No newline at end of file
diff --git a/utf8/extra/htaccess/media/readme.ja.txt b/utf8/extra/htaccess/media/readme.ja.txt
new file mode 100644 (file)
index 0000000..37ab19f
--- /dev/null
@@ -0,0 +1,12 @@
+このディレクトリのmedia.htaccessファイルは、mediaディレクトリでのスクリプトの実行を阻止し、サーバのセキュリティを強化することを意図しています。
+これは悪意を持ったものが、mediaディレクトリにアップロードしたファイルを実行させることを防ぎます。
+ただし、.htaccessでの制限の許可・不許可はサーバの設定に依存しているので、コードが意図されたとおりに動くとは限りません。
+
+下記の手順に従って、.htaccessを適用してください
+
+1. mediaディレクトリに他の.htaccessファイルがないことを確認します。
+2. 「media.htaccess」ファイルを、Nucleusのmediaディレクトリにコピーします。
+3. ファイルを「media.htaccess」から「.htaccess」にリネームします。
+4. もし、すでに.htaccessファイルがmediaディレクトリに存在した場合は、すでにある.htaccessファイルに「media.htaccess」の内容を追記します。
+
+これでmediaディレクトリを、意図しないスクリプトの実行から保護することが出来ます。
diff --git a/utf8/extra/htaccess/media/readme.txt b/utf8/extra/htaccess/media/readme.txt
new file mode 100644 (file)
index 0000000..b302899
--- /dev/null
@@ -0,0 +1,10 @@
+PLEASE NOTE: The media.htaccess file in this directory is intended to enhance security of your server by disallowing the running of scripts from the media folder. This will protect against rogue members, or external exploits, that rely on uploading script files to this folder for execution at a later time. Depending on the configuration of your web server, this code may not run as intended. 
+
+To apply it, follow these instructions:
+
+1. Be sure that another .htaccess file does not exist in the /media folder
+2. Copy the media.htaccess file into the media folder of your Nucleus CMS installation
+3. Rename the file to .htaccess
+4. If you have an existing .htaccess file in your media folder, copy the contents from the media.htaccess file into the existing .htacces file.
+
+You can disable after installing it by renaming the file to something else, or by removing the file from that folder.
\ No newline at end of file
diff --git a/utf8/extra/htaccess/skins/readme.ja.txt b/utf8/extra/htaccess/skins/readme.ja.txt
new file mode 100644 (file)
index 0000000..9081a60
--- /dev/null
@@ -0,0 +1,13 @@
+このディレクトリのskins.htaccessファイルは、各スキンで使用する「.inc」ファイルや「.php」ファイルに対する外部からの直接アクセスを禁止し、サーバのセキュリティを強化することを意図しています。
+ただし.htaccessでの制限の許可・不許可はサーバの設定に依存しているので、コードが意図されたとおりに動くとは限りません。
+例えば、意図せずに一部のファイルへのサーバ内でのアクセスまで禁止されてしまって、あなたのサイトにCSSが適用されずに表示されるようなことがあるかもしれません。
+その時は.htaccessファイルをリネームして問題を解決してください。
+
+下記の手順に従って、.htaccessを適用してください
+
+1. skinsディレクトリに他の.htaccessファイルがないことを確認します。
+2. 「skins.htaccess」ファイルを、Nucleusのskinsディレクトリにコピーします。
+3. ファイルを「skins.htaccess」から「.htaccess」にリネームします。
+4. もし、すでに.htaccessファイルがskinsディレクトリに存在した場合は、すでにある.htaccessファイルに「skins.htaccess」の内容を追記します。
+
+これでskinsディレクトリを、不要なアクセスから保護することが出来ます。
diff --git a/utf8/extra/htaccess/skins/readme.txt b/utf8/extra/htaccess/skins/readme.txt
new file mode 100644 (file)
index 0000000..6d61376
--- /dev/null
@@ -0,0 +1,10 @@
+PLEASE NOTE: the skins.htaccess file in this directory is intended to prohibit, for enhanced security, direct access .inc and .php files in the skin folders. Depending on the web server configuration, the code in this .htaccess file may not work as intended. In this case, your site will be displayed incorrectly, with missing content or style. Renaming the .htaccess file should fix the problem.
+
+To apply it, follow these instructions:
+
+1. Be sure that another .htaccess file does not exist in the /skins folder
+2. Copy the skins.htaccess file into the skins folder of your Nucleus CMS installation
+3. Rename the file to .htaccess
+4. If you have an existing .htaccess file in your skins folder, copy the contents from the skins.htaccess file into the existing .htacces file.
+
+You can disable after installing it by renaming the file to something else, or by removing the file from that folder.
\ No newline at end of file
diff --git a/utf8/extra/htaccess/skins/skins.htaccess b/utf8/extra/htaccess/skins/skins.htaccess
new file mode 100644 (file)
index 0000000..f7027bd
--- /dev/null
@@ -0,0 +1,4 @@
+<FilesMatch "\.(php|inc)$">\r
+Order allow,deny\r
+Deny from all\r
+</FilesMatch>
\ No newline at end of file
diff --git a/utf8/index.php b/utf8/index.php
new file mode 100755 (executable)
index 0000000..69183c3
--- /dev/null
@@ -0,0 +1,32 @@
+<?php\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+\r
+/**\r
+ * Nucleus index.php\r
+ *\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ */\r
+
+//setup for benchmarking\r
+include('./benchmark.inc');\r
+\r
+// This file will generate and return the main page of the site
+$CONF = array();
+$CONF['Self'] = 'index.php';
+
+include('./config.php');
+
+selector();
+
+?>
\ No newline at end of file
diff --git a/utf8/install/index.php b/utf8/install/index.php
new file mode 100755 (executable)
index 0000000..57fc872
--- /dev/null
@@ -0,0 +1,1240 @@
+<?php\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ * This script will install the Nucleus tables in your SQL-database, and initialize the data in\r
+ * those tables.\r
+ *\r
+ * Below is a friendly way of letting users on non-php systems know that Nucleus won't run there.\r
+ * ?><div style="font-size: xx-large;">If you see this text in your browser when you open <i>install.php</i>, your web server is not able to run PHP-scripts, and therefor Nucleus will not be able to run there. </div><div style="display: none"><?php\r
+ */\r
+\r
+/**\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ * $NucleusJP: install.php,v 1.7 2007/02/04 06:28:44 kimitake Exp $\r
+ */\r
+\r
+/*\r
+       This part of the install.php code allows for customization of the install process.\r
+       When distributing plugins or skins together with a Nucleus installation, the\r
+       configuration below will instruct to install them\r
+\r
+       -- Start Of Configurable Part --\r
+*/\r
+\r
+include('./install_lang_japanese.php');\r
+\r
+// array with names of plugins to install. Plugin files must be present in the nucleus/plugin/\r
+// directory.\r
+//\r
+// example:\r
+//      array('NP_TrackBack', 'NP_MemberGoodies')\r
+$aConfPlugsToInstall = array(\r
+       'NP_SkinFiles',\r
+);\r
+\r
+\r
+// array with skins to install. skins must be present under the skins/ directory with\r
+// a subdirectory having the same name that contains a skinbackup.xml file\r
+//\r
+// example:\r
+//      array('base','rsd')\r
+$aConfSkinsToImport = array(\r
+       'atom',\r
+       'rss2.0',\r
+       'rsd',\r
+       'default',\r
+);\r
+\r
+/*\r
+       -- End Of Configurable Part --\r
+*/\r
+\r
+// don't give warnings for uninitialized vars\r
+error_reporting(E_ERROR | E_WARNING | E_PARSE);\r
+\r
+// make sure there's no unnecessary escaping:\r
+set_magic_quotes_runtime(0);\r
+\r
+// if there are some plugins or skins to import, do not include vars\r
+// in globalfunctions.php again... so set a flag\r
+if ((count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) ) {\r
+       global $CONF;\r
+       $CONF['installscript'] = 1;\r
+}\r
+\r
+if (phpversion() >= '4.1.0') {\r
+       include_once('../nucleus/libs/vars4.1.0.php');\r
+} else {\r
+       include_once('../nucleus/libs/vars4.0.6.php');\r
+}\r
+\r
+// include core classes that are needed for login & plugin handling\r
+// added for 3.5 sql_* wrapper\r
+global $MYSQL_HANDLER;\r
+//set the handler if different from mysql (or mysqli)\r
+//$MYSQL_HANDLER = array('pdo','mysql');\r
+if (!isset($MYSQL_HANDLER)) {\r
+       $MYSQL_HANDLER = array('mysql','');\r
+}\r
+\r
+include_once('../nucleus/libs/sql/'.$MYSQL_HANDLER[0].'.php');\r
+// end new for 3.5 sql_* wrapper\r
+include_once('../nucleus/libs/mysql.php');\r
+\r
+// check if mysql support is installed\r
+// this check may not make sense, as is, in a version past 3.5x\r
+if (!function_exists('mysql_query') ) {\r
+       _doError(_ERROR1);\r
+}\r
+\r
+if (postVar('action') == 'go') {\r
+       doInstall();\r
+} else {\r
+       showInstallForm();\r
+}\r
+\r
+exit;\r
+\r
+function showInstallForm() {\r
+       // 0. pre check if all necessary files exist\r
+       doCheckFiles();\r
+\r
+       ?>\r
+       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+       <html xmlns="http://www.w3.org/1999/xhtml">\r
+       <head>\r
+               <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />\r
+               <title><?php echo _TITLE; ?></title>\r
+               <style type="text/css"><!--\r
+                       @import url('../nucleus/documentation/styles/manual.css');\r
+               --></style>\r
+               <script type="text/javascript"><!--\r
+                       var submitcount = 0;\r
+\r
+                       // function to make sure the submit button only gets pressed once\r
+                       function checkSubmit() {\r
+                               if (submitcount == 0) {\r
+                                       submitcount++;\r
+                                       return true;\r
+                               } else {\r
+                                       return false;\r
+                               }\r
+                       }\r
+               --></script>\r
+       </head>\r
+       <body>\r
+               <div style="text-align:center"><img src="../nucleus/styles/logo.gif" /></div> <!-- Nucleus logo -->\r
+               <form method="post" action="index.php">\r
+               \r
+               <h1><?php echo _HEADER1; ?></h1>\r
+               \r
+               <?php echo _TEXT1; ?>\r
+               \r
+               <h1><?php echo _HEADER1_2 ?></h1>\r
+               \r
+               <?php echo _TEXT1_2; ?>\r
+               \r
+               <fieldset>\r
+                       <legend><?php echo _TEXT1_2_TAB_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT1_2_TAB_FIELD1; ?></td>\r
+                                       <td>\r
+                                               <select name="charset" tabindex="10000">\r
+                                                       <option value="utf8" selected="selected">UTF-8</option>\r
+                                                       <option value="ujis" >EUC-JP</option>\r
+                                               </select>\r
+                                       </td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+               \r
+               <h1><?php echo _HEADER2; ?></h1>\r
+               \r
+               <?php echo _TEXT2; ?>\r
+               \r
+               <ul>\r
+                       <li>PHP:\r
+\r
+<?php\r
+       echo phpversion();\r
+       $minVersion = '4.0.6';\r
+\r
+       if (phpversion() < $minVersion) {\r
+               echo ' <span class="warning" style="display:block">' . sprintf(_TEXT2_WARN, $minVersion) . '</span>';\r
+       } elseif (phpversion() < '5') {\r
+               echo ' <span class="warning" style="display:block">' . _TEXT2_WARN3 . '</span>';\r
+       }\r
+?>\r
+\r
+                       </li>\r
+                       <li>MySQL:\r
+\r
+<?php\r
+       // note: this piece of code is taken from phpMyAdmin\r
+       $conn   = sql_connect_args('localhost','','');\r
+       $result = @sql_query('SELECT VERSION() AS version', $conn);\r
+\r
+       if ($result != FALSE && @sql_num_rows($result) > 0) {\r
+               $row   = sql_fetch_array($result);\r
+               $match = explode('.', $row['version']);\r
+       } else {\r
+               $result = @sql_query('SHOW VARIABLES LIKE \'version\'', $conn);\r
+\r
+               if ($result != FALSE && @sql_num_rows($result) > 0) {\r
+                       $row   = sql_fetch_row($result);\r
+                       $match = explode('.', $row[1]);\r
+               } else {\r
+                       $output = (function_exists('shell_exec')) ? @shell_exec('mysql -V') : '0.0.0';\r
+                       preg_match('@[0-9]+\.[0-9]+\.[0-9]+@', $output, $version);\r
+                       $match = explode('.', $version[0]);\r
+\r
+                       if ($match[0] == '') {\r
+                               $match[0] = '0';\r
+                               $match[1] = '0';\r
+                               $match[2] = '0';\r
+                       }\r
+               }\r
+       }\r
+\r
+       sql_disconnect($conn);\r
+       $mysqlVersion = implode($match, '.');\r
+       $minVersion   = '3.23';\r
+\r
+       if ($mysqlVersion == '0.0.0') {\r
+               echo _NOTIFICATION1;\r
+       }\r
+       else {\r
+               echo $mysqlVersion;\r
+       }\r
+\r
+       if ($mysqlVersion < $minVersion) {\r
+               echo ' <span class="warning" style="display:block">' . sprintf(_TEXT2_WARN2, $minVersion) . '</span>';\r
+       }\r
+?>\r
+\r
+                       </li>\r
+               </ul>\r
+\r
+<?php\r
+       // tell people how they can have their config file filled out automatically\r
+       if (@file_exists('../config.php') && @!is_writable('../config.php')) {\r
+?>\r
+\r
+               <h1><?php echo _HEADER3; ?></h1>\r
+\r
+               <?php echo _TEXT3;\r
+\r
+} ?>\r
+\r
+               <h1><?php echo _HEADER4; ?></h1>\r
+\r
+               <?php echo _TEXT4; ?>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT4_TAB_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT4_TAB_FIELD1; ?></td>\r
+                                       <td><input name="mySQL_host" value="<?php echo htmlspecialchars(@ini_get('mysql.default_host') )?>" tabindex="10010" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT4_TAB_FIELD2; ?></td>\r
+                                       <td><input name="mySQL_user" tabindex="10020" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT4_TAB_FIELD3; ?></td>\r
+                                       <td><input name="mySQL_password" type="password" tabindex="10030" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT4_TAB_FIELD4; ?></td>\r
+                                       <td><input name="mySQL_database" tabindex="10040" /> (<input name="mySQL_create" value="1" type="checkbox" id="mySQL_create" tabindex="10050" /><label for="mySQL_create"><?php echo _TEXT4_TAB_FIELD4_ADD; ?></label>)</td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT4_TAB2_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><input name="mySQL_usePrefix" value="1" type="checkbox" id="mySQL_usePrefix" tabindex="10060" /><label for="mySQL_usePrefix"><?php echo _TEXT4_TAB2_FIELD; ?></label></td>\r
+                                       <td><input name="mySQL_tablePrefix" value="" tabindex="10070" /></td>\r
+                               </tr>\r
+                       </table>\r
+\r
+                       <?php echo _TEXT4_TAB2_ADD; ?>\r
+\r
+               </fieldset>\r
+\r
+       <h1><?php echo _HEADER5; ?></h1>\r
+\r
+       <?php echo _TEXT5; ?>\r
+\r
+<?php\r
+\r
+       // no need to this all! dirname(__FILE__) is all we need -- moraes\r
+       /*\r
+       // discover full path\r
+       $fullPath = serverVar('PATH_TRANSLATED');\r
+\r
+       if ($fullPath == '') {\r
+               $fullPath = serverVar('SCRIPT_FILENAME');\r
+       }\r
+\r
+       $basePath = str_replace('install.php', '', $fullPath);\r
+       $basePath = replaceDoubleBackslash($basePath);\r
+       $basePath = replaceDoubleBackslash($basePath);\r
+\r
+       // add slash at end if necessary\r
+       if (!endsWithSlash($basePath) ) {\r
+               $basePath .= '/';\r
+       }\r
+       */\r
+\r
+       $basePath = str_replace('install', '', dirname(__FILE__));\r
+?>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT5_TAB_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD1; ?></td>\r
+                                       <td><input name="IndexURL" size="60" value="<?php\r
+                                               $url = 'http://' . serverVar('HTTP_HOST') . serverVar('PHP_SELF');\r
+                                               $url = str_replace('install/index.php', '', $url);\r
+                                               $url = replaceDoubleBackslash($url);\r
+\r
+                                               // add slash at end if necessary\r
+                                               if (!endsWithSlash($url) ) {\r
+                                                       $url .= '/';\r
+                                               }\r
+\r
+                                               echo $url; ?>" tabindex="10080" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD2; ?></td>\r
+                                       <td><input name="AdminURL" size="60" value="<?php\r
+                                               if ($url) {\r
+                                                       echo $url . 'nucleus/';\r
+                                               } ?>" tabindex="10090" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD3; ?></td>\r
+                                       <td><input name="AdminPath" size="60" value="<?php\r
+                                               if($basePath) {\r
+                                                       echo $basePath . 'nucleus/';\r
+                                               } ?>" tabindex="10100" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD4; ?></td>\r
+                                       <td><input name="MediaURL" size="60" value="<?php\r
+                                               if ($url) {\r
+                                                       echo $url . 'media/';\r
+                                               } ?>" tabindex="10110" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD5; ?></td>\r
+                                       <td><input name="MediaPath" size="60" value="<?php\r
+                                               if ($basePath) {\r
+                                                       echo $basePath . 'media/';\r
+                                               } ?>" tabindex="10120" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD6; ?></td>\r
+                                       <td><input name="SkinsURL" size="60" value="<?php\r
+                                               if ($url) {\r
+                                                       echo $url . 'skins/';\r
+                                               } ?>" tabindex="10130" />\r
+                                               <br />(<?php echo _TEXT5_TAB_FIELD7_2; ?>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD7; ?></td>\r
+                                       <td><input name="SkinsPath" size="60" value="<?php\r
+                                               if ($basePath) {\r
+                                                       echo $basePath . 'skins/';\r
+                                               } ?>" tabindex="10140" />\r
+                                               <br />(<?php echo _TEXT5_TAB_FIELD7_2; ?>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD8; ?></td>\r
+                                       <td><input name="PluginURL" size="60" value="<?php\r
+                                               if ($url) {\r
+                                                       echo $url . 'nucleus/plugins/';\r
+                                               } ?>" tabindex="10150" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT5_TAB_FIELD9; ?></td>\r
+                                       <td><input name="ActionURL" size="60" value="<?php\r
+                                               if ($url) {\r
+                                                       echo $url . 'action.php';\r
+                                               } ?>" tabindex="10160" />\r
+                                               <br />(<?php echo _TEXT5_TAB_FIELD9_2;?>)\r
+                                       </td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+\r
+               <?php echo _TEXT5_2; ?>\r
+\r
+               <h1><? echo _HEADER6; ?></h1>\r
+\r
+               <?php echo _TEXT6; ?>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT6_TAB_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT6_TAB_FIELD1; ?></td>\r
+                                       <td><input name="User_name" value="" tabindex="10170" /> (<?php echo _TEXT6_TAB_FIELD1_2; ?>)</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT6_TAB_FIELD2; ?></td>\r
+                                       <td><input name="User_realname" value="" tabindex="10180" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT6_TAB_FIELD3; ?></td>\r
+                                       <td><input name="User_password" type="password" value="" tabindex="10190" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT6_TAB_FIELD4; ?></td>\r
+                                       <td><input name="User_password2" type="password" value="" tabindex="10200" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT6_TAB_FIELD5; ?></td>\r
+                                       <td><input name="User_email" value="" tabindex="10210" /> (<?php echo _TEXT6_TAB_FIELD5_2; ?>)</td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+\r
+               <h1><?php echo _HEADER7; ?></h1>\r
+\r
+               <?php echo _TEXT7; ?>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT7_TAB_HEAD; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT7_TAB_FIELD1; ?></td>\r
+                                       <td><input name="Blog_name" size="60" value="My Nucleus CMS" tabindex="10220" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><?php echo _TEXT7_TAB_FIELD2; ?></td>\r
+                                       <td><input name="Blog_shortname" value="mynucleuscms" tabindex="10230" /> (<?php echo _TEXT7_TAB_FIELD2_2; ?>)</td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+\r
+               <h1><?php echo _HEADER8; ?></h1>\r
+\r
+               <fieldset>\r
+                       <legend><?php echo _TEXT8_TAB_HEADER; ?></legend>\r
+                       <table>\r
+                               <tr>\r
+                                       <td><input name="Weblog_ping" value="1" type="checkbox" id="Weblog_ping" tabindex="10240" /><?php echo _TEXT8_TAB_FIELD1; ?></td>\r
+                               </tr>\r
+                       </table>\r
+               </fieldset>\r
+               \r
+               <h1><?php echo _HEADER9; ?></h1>\r
+               \r
+               <?php echo _TEXT9; ?>\r
+               \r
+               <p>\r
+               <input name="action" value="go" type="hidden" />\r
+               <input type="submit" value="<?php echo _BUTTON1; ?>" onclick="return checkSubmit();" tabindex="10250" />\r
+               </p>\r
+               \r
+               </form>\r
+       </body>\r
+</html>\r
+\r
+<?php }\r
+\r
+function tableName($unPrefixed) {\r
+       global $mysql_usePrefix, $mysql_prefix;\r
+\r
+       if ($mysql_usePrefix == 1) {\r
+               return $mysql_prefix . $unPrefixed;\r
+       } else {\r
+               return $unPrefixed;\r
+       }\r
+}\r
+\r
+function doInstall() {\r
+       global $mysql_usePrefix, $mysql_prefix, $weblog_ping;\r
+\r
+       // 0. put all POST-vars into vars\r
+       $mysql_host             = postVar('mySQL_host');\r
+       $mysql_user             = postVar('mySQL_user');\r
+       $mysql_password = postVar('mySQL_password');\r
+       $mysql_database = postVar('mySQL_database');\r
+       $mysql_create     = postVar('mySQL_create');\r
+       $mysql_usePrefix   = postVar('mySQL_usePrefix');\r
+       $mysql_prefix     = postVar('mySQL_tablePrefix');\r
+       $config_indexurl   = postVar('IndexURL');\r
+       $config_adminurl   = postVar('AdminURL');\r
+       $config_adminpath  = postVar('AdminPath');\r
+       $config_mediaurl   = postVar('MediaURL');\r
+       $config_skinsurl   = postVar('SkinsURL');\r
+       $config_pluginurl  = postVar('PluginURL');\r
+       $config_actionurl  = postVar('ActionURL');\r
+       $config_mediapath  = postVar('MediaPath');\r
+       $config_skinspath  = postVar('SkinsPath');\r
+       $user_name               = postVar('User_name');\r
+       $user_realname   = postVar('User_realname');\r
+       $user_password   = postVar('User_password');\r
+       $user_password2 = postVar('User_password2');\r
+       $user_email             = postVar('User_email');\r
+       $blog_name               = postVar('Blog_name');\r
+       $blog_shortname = postVar('Blog_shortname');\r
+       $charset                   = postVar('charset');\r
+       $config_adminemail = $user_email;\r
+       $config_sitename   = $blog_name;\r
+       $weblog_ping       = postVar('Weblog_ping');\r
+\r
+       $_POST = array();\r
+       if (!extension_loaded('mbstring')) {\r
+               include('../nucleus/libs/mb_emulator/mb-emulator.php');\r
+       }\r
+       if ($charset == 'ujis') {\r
+               define('_CHARSET', 'EUC-JP');\r
+               $config_sitename = mb_convert_encoding($config_sitename, _CHARSET, 'UTF-8');\r
+               $user_realname  = mb_convert_encoding($user_realname, _CHARSET, 'UTF-8');\r
+               $blog_name        = mb_convert_encoding($blog_name, _CHARSET, 'UTF-8');\r
+       } else {\r
+               define('_CHARSET', 'UTF-8');\r
+       }\r
+\r
+       $config_indexurl   = replaceDoubleBackslash($config_indexurl);\r
+       $config_adminurl   = replaceDoubleBackslash($config_adminurl);\r
+       $config_mediaurl   = replaceDoubleBackslash($config_mediaurl);\r
+       $config_skinsurl   = replaceDoubleBackslash($config_skinsurl);\r
+       $config_pluginurl  = replaceDoubleBackslash($config_pluginurl);\r
+       $config_actionurl  = replaceDoubleBackslash($config_actionurl);\r
+       $config_adminpath  = replaceDoubleBackslash($config_adminpath);\r
+       $config_skinspath  = replaceDoubleBackslash($config_skinspath);\r
+       $config_mediapath  = replaceDoubleBackslash($config_mediapath);\r
+\r
+       // 1. check all the data\r
+       $errors = array();\r
+\r
+       if (!$mysql_database) {\r
+               array_push($errors, _ERROR2);\r
+       }\r
+\r
+       if (($mysql_usePrefix == 1) && (strlen($mysql_prefix) == 0) ) {\r
+               array_push($errors, _ERROR3);\r
+       }\r
+\r
+       if (($mysql_usePrefix == 1) && (!eregi('^[a-zA-Z0-9_]+$', $mysql_prefix) ) ) {\r
+               array_push($errors, _ERROR4);\r
+       }\r
+\r
+       // TODO: add action.php check\r
+       if (!endsWithSlash($config_indexurl) || !endsWithSlash($config_adminurl) || !endsWithSlash($config_mediaurl) || !endsWithSlash($config_pluginurl) || !endsWithSlash($config_skinsurl) ) {\r
+               array_push($errors, _ERROR5);\r
+       }\r
+\r
+       if (!endsWithSlash($config_adminpath) ) {\r
+               array_push($errors, _ERROR6);\r
+       }\r
+\r
+       if (!endsWithSlash($config_mediapath) ) {\r
+               array_push($errors, _ERROR7);\r
+       }\r
+\r
+       if (!endsWithSlash($config_skinspath) ) {\r
+               array_push($errors, _ERROR8);\r
+       }\r
+\r
+       if (!is_dir($config_adminpath) ) {\r
+               array_push($errors, _ERROR9);\r
+       }\r
+\r
+       if (!_isValidMailAddress($user_email) ) {\r
+               array_push($errors, _ERROR10);\r
+       }\r
+\r
+       if (!_isValidDisplayName($user_name) ) {\r
+               array_push($errors, _ERROR11);\r
+       }\r
+\r
+       if (!$user_password || !$user_password2) {\r
+               array_push($errors, _ERROR12);\r
+       }\r
+\r
+       if ($user_password != $user_password2) {\r
+               array_push($errors, _ERROR13);\r
+       }\r
+\r
+       if (!_isValidShortName($blog_shortname) ) {\r
+               array_push($errors, _ERROR14);\r
+       }\r
+\r
+       if (sizeof($errors) > 0) {\r
+               showErrorMessages($errors);\r
+       }\r
+\r
+       // 2-1. try to log in to mySQL\r
+\r
+       global $MYSQL_CONN;\r
+       // this will need to be changed if we ever allow\r
+       $MYSQL_CONN = @sql_connect_args($mysql_host, $mysql_user, $mysql_password);\r
+\r
+       if ($MYSQL_CONN == false) {\r
+               _doError(_ERROR15 . ': ' . sql_error() );\r
+       }\r
+\r
+// <add for garble measure>\r
+       // 2-2. set DEFAULT CHARSET and COLLATE\r
+       $mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info($MYSQL_CONN))));\r
+       if ($mySqlVer >= '5.0.7' && phpversion() >= '5.2.3') {\r
+               mysql_set_charset($charset);\r
+       } elseif ($mySqlVer >= '4.1.0') {\r
+               sql_query("SET NAMES " . $charset);\r
+       }\r
+       $collation = ($charset == 'utf8') ? 'utf8_unicode_ci' : 'ujis_japanese_ci';\r
+// </add for garble measure>*/\r
+\r
+       // 3. try to create database (if needed)\r
+       if ($mysql_create == 1) {\r
+               $sql = 'CREATE DATABASE '\r
+                        .       $mysql_database;\r
+// <add for garble measure>\r
+       if ($mySqlVer >= '4.1.0') {\r
+               $sql .= ' DEFAULT CHARACTER SET '\r
+                         .      $charset\r
+                         . ' COLLATE '\r
+                         .      $collation;\r
+       }\r
+// </add for garble measure>*/\r
+               sql_query($sql,$MYSQL_CONN) or _doError(_ERROR16 . ': ' . sql_error($MYSQL_CONN));\r
+       }\r
+\r
+       // 4. try to select database\r
+       sql_select_db($mysql_database,$MYSQL_CONN) or _doError(_ERROR17);\r
+\r
+       // 5. execute queries\r
+       $filename = 'install.sql';\r
+       $fd = fopen($filename, 'r');\r
+       $queries = fread($fd, filesize($filename) );\r
+       fclose($fd);\r
+\r
+       $queries = split("(;\n|;\r)", $queries);\r
+\r
+       $aTableNames = array(\r
+               'nucleus_actionlog',\r
+               'nucleus_ban',\r
+               'nucleus_blog',\r
+               'nucleus_category',\r
+               'nucleus_comment',\r
+               'nucleus_config',\r
+               'nucleus_item',\r
+               'nucleus_karma',\r
+               'nucleus_member',\r
+               'nucleus_plugin',\r
+               'nucleus_skin',\r
+               'nucleus_template',\r
+               'nucleus_team',\r
+               'nucleus_activation',\r
+               'nucleus_tickets'\r
+       );\r
+// these are unneeded (one of the replacements above takes care of them)\r
+//                     'nucleus_plugin_event',\r
+//                     'nucleus_plugin_option',\r
+//                     'nucleus_plugin_option_desc',\r
+//                     'nucleus_skin_desc',\r
+//                     'nucleus_template_desc',\r
+\r
+       $aTableNamesPrefixed = array(\r
+               $mysql_prefix . 'nucleus_actionlog',\r
+               $mysql_prefix . 'nucleus_ban',\r
+               $mysql_prefix . 'nucleus_blog',\r
+               $mysql_prefix . 'nucleus_category',\r
+               $mysql_prefix . 'nucleus_comment',\r
+               $mysql_prefix . 'nucleus_config',\r
+               $mysql_prefix . 'nucleus_item',\r
+               $mysql_prefix . 'nucleus_karma',\r
+               $mysql_prefix . 'nucleus_member',\r
+               $mysql_prefix . 'nucleus_plugin',\r
+               $mysql_prefix . 'nucleus_skin',\r
+               $mysql_prefix . 'nucleus_template',\r
+               $mysql_prefix . 'nucleus_team',\r
+               $mysql_prefix . 'nucleus_activation',\r
+               $mysql_prefix . 'nucleus_tickets'\r
+       );\r
+// these are unneeded (one of the replacements above takes care of them)\r
+//                     $mysql_prefix . 'nucleus_plugin_event',\r
+//                     $mysql_prefix . 'nucleus_plugin_option',\r
+//                     $mysql_prefix . 'nucleus_plugin_option_desc',\r
+//                     $mysql_prefix . 'nucleus_skin_desc',\r
+//                     $mysql_prefix . 'nucleus_template_desc',\r
+\r
+       $count = count($queries);\r
+\r
+       for ($idx = 0; $idx < $count; $idx++) {\r
+               $query = trim($queries[$idx]);\r
+               // echo "QUERY = " . htmlspecialchars($query) . "<p>";\r
+\r
+               if ($query) {\r
+\r
+                       if ($mysql_usePrefix == 1) {\r
+                                       $query = str_replace($aTableNames, $aTableNamesPrefixed, $query);\r
+                       }\r
+// <add for garble measure>\r
+                       if ($mysql_create != 1 && strpos($query, 'CREATE TABLE') === 0 && $mySqlVer >= '4.1.0') {\r
+                               $query .= ' DEFAULT CHARACTER SET ' . $charset . ' COLLATE ' . $collation;\r
+                       }\r
+// </add for garble measure>*/\r
+\r
+                       sql_query($query,$MYSQL_CONN) or _doError(_ERROR30 . ' (' . htmlspecialchars($query) . '): ' . sql_error($MYSQL_CONN) );\r
+               }\r
+       }\r
+\r
+       // 5a make first post\r
+       if ($charset == 'ujis') {\r
+               $itm_title = mb_convert_encoding(_1ST_POST_TITLE, _CHARSET, 'UTF-8');\r
+               $itm_body  = mb_convert_encoding(_1ST_POST, _CHARSET, 'UTF-8');\r
+               $itm_more  = mb_convert_encoding(_1ST_POST2, _CHARSET, 'UTF-8');\r
+       } else {\r
+               $itm_title = _1ST_POST_TITLE;\r
+               $itm_body  = _1ST_POST;\r
+               $itm_more  = _1ST_POST2;\r
+       }\r
+       $newpost = "INSERT INTO "\r
+                        . tableName('nucleus_item')\r
+                        . " VALUES ("\r
+                        . "1, "\r
+                        . "'" . $itm_title . "',"\r
+                        . " '" . $itm_body . "',"\r
+                        . " '" . $itm_more . "',"\r
+                        . " 1, 1, '2005-08-15 11:04:26', 0, 0, 0, 1, 0, 1);";\r
+       sql_query($newpost,$MYSQL_CONN) or _doError(_ERROR18 . ' (' . htmlspecialchars($newpost) . '): ' . sql_error($MYSQL_CONN) );\r
+\r
+       // 6. update global settings\r
+       updateConfig('IndexURL',   $config_indexurl);\r
+       updateConfig('AdminURL',   $config_adminurl);\r
+       updateConfig('MediaURL',   $config_mediaurl);\r
+       updateConfig('SkinsURL',   $config_skinsurl);\r
+       updateConfig('PluginURL',  $config_pluginurl);\r
+       updateConfig('ActionURL',  $config_actionurl);\r
+       updateConfig('AdminEmail', $config_adminemail);\r
+       updateConfig('SiteName',   $config_sitename);\r
+       if ($charset == 'ujis') {\r
+               updateConfig('Language',   'japanese-euc');\r
+       }\r
+\r
+       // 7. update GOD member\r
+       $query = 'UPDATE ' . tableName('nucleus_member')\r
+                  . " SET mname         = '" . addslashes($user_name) . "',"\r
+                  . " mrealname         = '" . addslashes($user_realname) . "',"\r
+                  . " mpassword         = '" . md5(addslashes($user_password) ) . "',"\r
+                  . " murl               = '" . addslashes($config_indexurl) . "',"\r
+                  . " memail           = '" . addslashes($user_email) . "',"\r
+                  . " madmin           = 1,"\r
+                  . " mcanlogin         = 1"\r
+                  . " WHERE"\r
+                  . " mnumber     = 1";\r
+\r
+       sql_query($query,$MYSQL_CONN) or _doError(_ERROR19 . ': ' . sql_error($MYSQL_CONN) );\r
+\r
+       // 8. update weblog settings\r
+       $query = 'UPDATE ' . tableName('nucleus_blog')\r
+                  . " SET bname  = '" . addslashes($blog_name) . "',"\r
+                  . " bshortname = '" . addslashes($blog_shortname) . "',"\r
+                  . " burl        = '" . addslashes($config_indexurl) . "'"\r
+                  . " WHERE"\r
+                  . " bnumber  = 1";\r
+\r
+       sql_query($query,$MYSQL_CONN) or _doError(_ERROR20 . ': ' . sql_error($MYSQL_CONN) );\r
+\r
+       // 8-2. update category settings\r
+       if ($charset == 'ujis') {\r
+               $cat_name = mb_convert_encoding(_GENERALCAT_NAME, _CHARSET, 'UTF-8');\r
+               $cat_desc = mb_convert_encoding(_GENERALCAT_DESC, _CHARSET, 'UTF-8');\r
+       } else {\r
+               $cat_name = _GENERALCAT_NAME;\r
+               $cat_desc = _GENERALCAT_DESC;\r
+       }\r
+       $query = 'UPDATE ' . tableName('nucleus_category')\r
+                  . " SET cname  = '" . $cat_name . "',"\r
+                  . " cdesc      = '" . $cat_desc . "'"\r
+                  . " WHERE"\r
+                  . " catid      = 1";\r
+\r
+       sql_query($query,$MYSQL_CONN) or _doError(_ERROR20 . ': ' . sql_error($MYSQL_CONN) );\r
+\r
+       // 9. update item date\r
+       $query = 'UPDATE ' . tableName('nucleus_item')\r
+                  . " SET   itime   = '" . date('Y-m-d H:i:s', time() ) ."'"\r
+                  . " WHERE inumber = 1";\r
+\r
+       sql_query($query,$MYSQL_CONN) or _doError(_ERROR21 . ': ' . sql_error($MYSQL_CONN) );\r
+\r
+       global $aConfPlugsToInstall, $aConfSkinsToImport;\r
+       $aSkinErrors = array();\r
+       $aPlugErrors = array();\r
+\r
+       if ((count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) ) {\r
+               // 10. set global variables\r
+               global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_PREFIX;\r
+\r
+               $MYSQL_HOST      = $mysql_host;\r
+               $MYSQL_USER      = $mysql_user;\r
+               $MYSQL_PASSWORD = $mysql_password;\r
+               $MYSQL_DATABASE = $mysql_database;\r
+               $MYSQL_PREFIX   = ($mysql_usePrefix == 1) ? $mysql_prefix : '';\r
+\r
+               global $DIR_NUCLEUS, $DIR_MEDIA, $DIR_SKINS, $DIR_PLUGINS, $DIR_LANG, $DIR_LIBS;\r
+\r
+               $DIR_NUCLEUS = $config_adminpath;\r
+               $DIR_MEDIA   = $config_mediapath;\r
+               $DIR_SKINS   = $config_skinspath;\r
+               $DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';\r
+               $DIR_LANG       = $DIR_NUCLEUS . 'language/';\r
+               $DIR_LIBS       = $DIR_NUCLEUS . 'libs/';\r
+\r
+               // close database connection (needs to be closed if we want to include globalfunctions.php)\r
+               sql_close($MYSQL_CONN);\r
+\r
+               $manager = '';\r
+               include_once($DIR_LIBS . 'globalfunctions.php');\r
+\r
+               // 11. install custom skins\r
+               $aSkinErrors = installCustomSkins($manager);\r
+               $defskinQue  = 'SELECT `sdnumber` as result FROM ' . sql_table('skin_desc') . ' WHERE `sdname` = "default"';\r
+               $defSkinID   = quickQuery($defskinQue);\r
+               $updateQuery = 'UPDATE ' . sql_table('blog') . ' SET `bdefskin` = ' . intval($defSkinID) . ' WHERE `bnumber` = 1';\r
+               sql_query($updateQuery);\r
+               $updateQuery = 'UPDATE ' . sql_table('config') . ' SET `value` = ' . intval($defSkinID). ' WHERE `name` = "BaseSkin"';\r
+               sql_query($updateQuery);\r
+\r
+               // 12. install NP_Ping, if decided\r
+               if ($weblog_ping == 1) {\r
+                       global $aConfPlugsToInstall;\r
+                       array_push($aConfPlugsToInstall, "NP_Ping");\r
+               }\r
+\r
+               // 13. install custom plugins\r
+               $aPlugErrors = installCustomPlugs($manager);\r
+       }\r
+\r
+       // 14. Write config file ourselves (if possible)\r
+       $bConfigWritten = 0;\r
+\r
+       if (@file_exists('../config.php') && is_writable('../config.php') && $fp = @fopen('../config.php', 'w') ) {\r
+               $config_data = '<' . '?php' . "\n\n";\r
+               //$config_data .= "\n"; (extraneous, just added extra \n to previous line\r
+               $config_data .= "   // mySQL connection information\n";\r
+               $config_data .= "   \$MYSQL_HOST         = '" . $mysql_host . "';\n";\r
+               $config_data .= "   \$MYSQL_USER         = '" . $mysql_user . "';\n";\r
+               $config_data .= "   \$MYSQL_PASSWORD = '" . $mysql_password . "';\n";\r
+               $config_data .= "   \$MYSQL_DATABASE = '" . $mysql_database . "';\n";\r
+               $config_data .= "   \$MYSQL_PREFIX   = '" . (($mysql_usePrefix == 1) ? $mysql_prefix : '') . "';\n";\r
+               $config_data .= "   // new in 3.50. first element is db handler, the second is the db driver used by the handler\n";\r
+               $config_data .= "   // default is \$MYSQL_HANDLER = array('mysql','mysql');\n";\r
+               $config_data .= "   //\$MYSQL_HANDLER = array('mysql','mysql');\n";\r
+               $config_data .= "   //\$MYSQL_HANDLER = array('pdo','mysql');\n";\r
+               $config_data .= "   \$MYSQL_HANDLER = array('".$MYSQL_HANDLER[0]."','".$MYSQL_HANDLER[1]."');\n";\r
+               $config_data .= "\n";\r
+               $config_data .= "   // main nucleus directory\n";\r
+               $config_data .= "   \$DIR_NUCLEUS = '" . $config_adminpath . "';\n";\r
+               $config_data .= "\n";\r
+               $config_data .= "   // path to media dir\n";\r
+               $config_data .= "   \$DIR_MEDIA   = '" . $config_mediapath . "';\n";\r
+               $config_data .= "\n";\r
+               $config_data .= "   // extra skin files for imported skins\n";\r
+               $config_data .= "   \$DIR_SKINS   = '" . $config_skinspath . "';\n";\r
+               $config_data .= "\n";\r
+               $config_data .= "   // these dirs are normally sub dirs of the nucleus dir, but \n";\r
+               $config_data .= "   // you can redefine them if you wish\n";\r
+               $config_data .= "   \$DIR_PLUGINS = \$DIR_NUCLEUS . 'plugins/';\n";\r
+               $config_data .= "   \$DIR_LANG  = \$DIR_NUCLEUS . 'language/';\n";\r
+               $config_data .= "   \$DIR_LIBS  = \$DIR_NUCLEUS . 'libs/';\n";\r
+               $config_data .= "\n";\r
+               $config_data .= "   // include libs\n";\r
+               $config_data .= "   include(\$DIR_LIBS . 'globalfunctions.php');\n";\r
+               $config_data .= "   if (!extension_loaded('mbstring')) {\n";\r
+               $config_data .= "          include(\$DIR_LIBS . 'mb_emulator/mb-emulator.php');\n";\r
+               $config_data .= "   }\n";\r
+               $config_data .= "?" . ">";\r
+\r
+               $result = @fputs($fp, $config_data, strlen($config_data) );\r
+               fclose($fp);\r
+\r
+               if ($result) {\r
+                       $bConfigWritten = 1;\r
+               }\r
+       }\r
+\r
+?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+       <title><?php echo _TITLE; ?></title>\r
+       <style>@import url('../nucleus/styles/manual.css');</style>\r
+</head>\r
+<body>\r
+       <div style='text-align:center'><img src='../nucleus/styles/logo.gif' /></div> <!-- Nucleus logo -->\r
+\r
+<?php\r
+       $aAllErrors = array_merge($aSkinErrors, $aPlugErrors);\r
+\r
+       if (count($aAllErrors) > 0) {\r
+               echo '<h1>' . _TITLE2 . '</h1>';\r
+               echo '<ul><li>' . implode('</li><li>', $aAllErrors) . '</li></ul>';\r
+       }\r
+\r
+       if (!$bConfigWritten) { ?>\r
+               <h1><?php echo _TITLE3; ?></h1>\r
+\r
+               <? echo _TEXT10; ?>\r
+\r
+               <pre><code>&lt;?php\r
+       // mySQL connection information\r
+       $MYSQL_HOST      = '<b><?php echo $mysql_host?></b>';\r
+       $MYSQL_USER      = '<b><?php echo $mysql_user?></b>';\r
+       $MYSQL_PASSWORD = '<i><b>xxxxxxxxxxx</b></i>';\r
+       $MYSQL_DATABASE = '<b><?php echo $mysql_database?></b>';\r
+       $MYSQL_PREFIX   = '<b><?php echo ($mysql_usePrefix == 1)?$mysql_prefix:''?></b>';\r
+\r
+       // main nucleus directory\r
+       $DIR_NUCLEUS = '<b><?php echo $config_adminpath?></b>';\r
+\r
+       // path to media dir\r
+       $DIR_MEDIA   = '<b><?php echo $config_mediapath?></b>';\r
+\r
+       // extra skin files for imported skins\r
+       $DIR_SKINS   = '<b><?php echo $config_skinspath?></b>';\r
+\r
+       // these dirs are normally sub dirs of the nucleus dir, but\r
+       // you can redefine them if you wish\r
+       $DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';\r
+       $DIR_LANG       = $DIR_NUCLEUS . 'language/';\r
+       $DIR_LIBS       = $DIR_NUCLEUS . 'libs/';\r
+\r
+       // include libs\r
+       include($DIR_LIBS . 'globalfunctions.php');\r
+       if (!extension_loaded('mbstring')) {\r
+               include($DIR_LIBS . 'mb_emulator/mb-emulator.php');\r
+       }\r
+?&gt;</code></pre>\r
+\r
+       <?php echo _TEXT11; ?>\r
+\r
+       <div class="note">\r
+       <?php echo _TEXT12; ?>\r
+       </div>\r
+\r
+<?php } else { ?>\r
+\r
+       <h1><?php echo _TITLE4; ?></h1>\r
+\r
+       <?php echo _TEXT13; ?>\r
+\r
+<?php } ?>\r
+\r
+       <h1><?php echo _TITLE5; ?></h1>\r
+       \r
+       <?php echo _TEXT14; ?>\r
+\r
+       <ul>\r
+               <li><?php echo _TEXT14_L1; ?></li>\r
+               <li><?php echo _TEXT14_L2; ?></li>\r
+       </ul>\r
+\r
+       <h1><?php echo _HEADER10; ?></h1>\r
+\r
+       <?php echo _TEXT15; ?>\r
+\r
+               <ul>\r
+               <li><?php echo _TEXT15_L1; ?></li>\r
+               <li><?php echo _TEXT15_L2; ?></li>\r
+               <li><?php echo _TEXT15_L3; ?></li>\r
+               </ul>\r
+\r
+       <?php echo _TEXT16; ?>\r
+\r
+       <h1><?php echo _HEADER11; ?></h1>\r
+\r
+       <p><?php echo _TEXT16_H; ?>\r
+               <ul>\r
+                       <li><a href="<?php echo $config_adminurl?>"><?php echo _TEXT16_L1; ?></a></li>\r
+                       <li><a href="<?php echo $config_indexurl?>"><?php echo _TEXT16_L2; ?></a></li>\r
+               </ul>\r
+       </p>\r
+\r
+</body>\r
+</html>\r
+\r
+<?php\r
+}\r
+\r
+function installCustomPlugs(&$manager) {\r
+       global $aConfPlugsToInstall, $DIR_LIBS;\r
+\r
+       $aErrors = array();\r
+\r
+       if (count($aConfPlugsToInstall) == 0) {\r
+               return $aErrors;\r
+       }\r
+\r
+       $res = sql_query('SELECT * FROM ' . sql_table('plugin') );\r
+       $numCurrent = sql_num_rows($res);\r
+\r
+       foreach ($aConfPlugsToInstall as $plugName) {\r
+               // do this before calling getPlugin (in case the plugin id is used there)\r
+               $query = 'INSERT INTO ' . sql_table('plugin') . ' (porder, pfile) VALUES (' . (++$numCurrent) . ', "' . addslashes($plugName) . '")';\r
+               sql_query($query);\r
+\r
+               // get and install the plugin\r
+               $manager->clearCachedInfo('installedPlugins');\r
+               $plugin =& $manager->getPlugin($plugName);\r
+               $plugin->plugid = $numCurrent;\r
+\r
+               if (!$plugin) {\r
+                       sql_query('DELETE FROM ' . sql_table('plugin') . ' WHERE pfile=\'' . addslashes($plugName) . '\'');\r
+                       $numCurrent--;\r
+                       array_push($aErrors, _ERROR22 . $plugName);\r
+                       continue;\r
+               }\r
+\r
+               $plugin->install();\r
+       }\r
+\r
+       // SYNC PLUGIN EVENT LIST\r
+       sql_query('DELETE FROM ' . sql_table('plugin_event') );\r
+\r
+       // loop over all installed plugins\r
+       $res = sql_query('SELECT pid, pfile FROM ' . sql_table('plugin') );\r
+\r
+       while($o = sql_fetch_object($res) ) {\r
+               $pid  =  $o->pid;\r
+               $plug =& $manager->getPlugin($o->pfile);\r
+\r
+               if ($plug) {\r
+                       $eventList = $plug->getEventList();\r
+\r
+                       foreach ($eventList as $eventName) {\r
+                               sql_query('INSERT INTO ' . sql_table('plugin_event') . ' (pid, event) VALUES (' . $pid . ', \'' . $eventName . '\')');\r
+                       }\r
+               }\r
+       }\r
+\r
+       return $aErrors;\r
+}\r
+\r
+function installCustomSkins(&$manager) {\r
+       global $aConfSkinsToImport, $DIR_LIBS, $DIR_SKINS;\r
+\r
+       $aErrors = array();\r
+       global $manager;\r
+       if (empty($manager)) {\r
+               $manager = new MANAGER;\r
+       }\r
+\r
+       if (count($aConfSkinsToImport) == 0) {\r
+               return $aErrors;\r
+       }\r
+\r
+       // load skinie class\r
+       include_once($DIR_LIBS . 'skinie.php');\r
+\r
+       $importer = new SKINIMPORT();\r
+\r
+       foreach ($aConfSkinsToImport as $skinName) {\r
+               $importer->reset();\r
+               $skinFile = $DIR_SKINS . $skinName . '/skinbackup.xml';\r
+\r
+               if (!@file_exists($skinFile) ) {\r
+                       array_push($aErrors, _ERROR23_1 . $skinFile . ' : ' . _ERROR23_2);\r
+                       continue;\r
+               }\r
+\r
+               $error = $importer->readFile($skinFile);\r
+\r
+               if ($error) {\r
+                       array_push($aErrors, _ERROR24 . $skinName . ' : ' . $error);\r
+                       continue;\r
+               }\r
+\r
+               $error = $importer->writeToDatabase(1);\r
+\r
+               if ($error) {\r
+                       array_push($aErrors, _ERROR24 . $skinName . ' : ' . $error);\r
+                       continue;\r
+               }\r
+       }\r
+\r
+       return $aErrors;\r
+}\r
+\r
+// give an error if one or more nucleus are not accessible\r
+function doCheckFiles() {\r
+       $missingfiles = array();\r
+       $files = array(\r
+               'install.sql',\r
+               '../index.php',\r
+               '../action.php',\r
+               '../nucleus/index.php',\r
+               '../nucleus/libs/globalfunctions.php',\r
+               '../nucleus/libs/ADMIN.php',\r
+               '../nucleus/libs/BLOG.php',\r
+               '../nucleus/libs/COMMENT.php',\r
+               '../nucleus/libs/COMMENTS.php',\r
+               '../nucleus/libs/ITEM.php',\r
+               '../nucleus/libs/MEMBER.php',\r
+               '../nucleus/libs/SKIN.php',\r
+               '../nucleus/libs/TEMPLATE.php',\r
+               '../nucleus/libs/MEDIA.php',\r
+               '../nucleus/libs/ACTIONLOG.php',\r
+               '../nucleus/media.php'\r
+       );\r
+\r
+       $count = count($files);\r
+\r
+       for ($i = 0; $i < $count; $i++) {\r
+               if (!is_readable($files[$i]) ) {\r
+                       array_push($missingfiles, _ERROR25_1 . $files[$i] . _ERROR25_2);\r
+               }\r
+       }\r
+\r
+// The above code replaces several if statements of the form:\r
+\r
+//     if (!is_readable('install.sql') ) {\r
+//             array_push($missingfiles, 'File <b>install.sql</b> is missing or not readable');\r
+//     }\r
+\r
+       if (count($missingfiles) > 0) {\r
+               showErrorMessages($missingfiles);\r
+       }\r
+}\r
+\r
+function updateConfig($name, $val) {\r
+       global $MYSQL_CONN;\r
+       $name = addslashes($name);\r
+       $val  = trim(addslashes($val) );\r
+\r
+       $query = 'UPDATE ' . tableName('nucleus_config')\r
+                  . " SET   value = '$val'"\r
+                  . " WHERE name  = '$name'";\r
+\r
+       sql_query($query,$MYSQL_CONN) or _doError(_ERROR26 . ': ' . sql_error($MYSQL_CONN) );\r
+       return sql_insert_id($MYSQL_CONN);\r
+}\r
+\r
+function replaceDoubleBackslash($input) {\r
+       return str_replace('\\', '/', $input);\r
+}\r
+\r
+function endsWithSlash($s) {\r
+       return (strrpos($s, '/') == strlen($s) - 1);\r
+}\r
+\r
+/**\r
+ * Checks if email address is valid\r
+ */\r
+function _isValidMailAddress($address) {\r
+       if (preg_match("/^[a-zA-Z0-9\._-]+@+[A-Za-z0-9\._-]+\.+[A-Za-z]{2,4}$/", $address) ) {\r
+               return 1;\r
+       } else {\r
+               return 0;\r
+       }\r
+}\r
+\r
+// returns true if the given string is a valid shortname\r
+// (to check short blog names and nicknames)\r
+// logic: starts and ends with a non space, can contain spaces in between\r
+//             min 2 chars\r
+function _isValidShortName($name) {\r
+       if (eregi("^[a-z0-9]+$", $name) ) {\r
+               return 1;\r
+       } else {\r
+               return 0;\r
+       }\r
+}\r
+\r
+\r
+\r
+// returns true if the given string is a valid display name\r
+// (to check nicknames)\r
+function _isValidDisplayName($name) {\r
+       if (eregi("^[a-z0-9]+[a-z0-9 ]*[a-z0-9]+$", $name) ) {\r
+               return 1;\r
+       } else {\r
+               return 0;\r
+       }\r
+}\r
+\r
+function _doError($msg) {\r
+       ?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+       <title><?php echo _TITLE; ?></title>\r
+       <style>@import url('../nucleus/styles/manual.css');</style>\r
+</head>\r
+<body>\r
+       <div style='text-align:center'><img src='../nucleus/styles/logo.gif' /></div> <!-- Nucleus logo -->\r
+       <h1><?php echo _ERROR27; ?></h1>\r
+\r
+       <p><?php echo _ERROR28; ?> "<?php echo $msg; ?>";</p>\r
+\r
+       <p><a href="index.php" onclick="history.back();"><?php echo _TEXT17; ?></a></p>\r
+</body>\r
+</html>\r
+\r
+<?php\r
+       exit;\r
+}\r
+\r
+function showErrorMessages($errors) {\r
+       ?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+       <title><?php echo _TITLE; ?></title>\r
+       <style>@import url('../nucleus/styles/manual.css');</style>\r
+</head>\r
+<body>\r
+       <div style='text-align:center'><img src='../nucleus/styles/logo.gif' /></div> <!-- Nucleus logo -->\r
+       <h1><?php echo _ERROR27; ?></h1>\r
+\r
+       <p><?php echo _ERROR29; ?>:</p>\r
+\r
+       <ul>\r
+\r
+<?php\r
+       while($msg = array_shift($errors) ) {\r
+               echo '<li>' . $msg . '</li>';\r
+       }\r
+?>\r
+\r
+       </ul>\r
+\r
+       <p><a href="index.php" onclick="history.back();return false;"><?php echo _TEXT17; ?></a></p>\r
+</body>\r
+</html>\r
+\r
+<?php\r
+       exit;\r
+}\r
+\r
+/* for the non-php systems that decide to show the contents:\r
+?></div><?php  */\r
+\r
+?>
\ No newline at end of file
diff --git a/utf8/install/install.sql b/utf8/install/install.sql
new file mode 100755 (executable)
index 0000000..e8373ae
--- /dev/null
@@ -0,0 +1,273 @@
+CREATE TABLE `nucleus_actionlog` (
+  `timestamp`  datetime     NOT NULL default '0000-00-00 00:00:00',
+  `message`    varchar(255) NOT NULL default ''
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_activation` (
+  `vkey`    varchar(40)  NOT NULL default '',
+  `vtime`   datetime     NOT NULL default '0000-00-00 00:00:00',
+  `vmember` int(11)      NOT NULL default '0',
+  `vtype`   varchar(15)  NOT NULL default '',
+  `vextra`  varchar(128) NOT NULL default '',
+  PRIMARY KEY  (`vkey`)
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_ban` (
+  `iprange` varchar(15)  NOT NULL default '',
+  `reason`  varchar(255) NOT NULL default '',
+  `blogid`  int(11)      NOT NULL default '0'
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_blog` (
+  `bnumber`        int(11)      NOT NULL auto_increment,
+  `bname`          varchar(60)  NOT NULL default '',
+  `bshortname`     varchar(15)  NOT NULL default '',
+  `bdesc`          varchar(200)          default NULL,
+  `bcomments`      tinyint(2)   NOT NULL default '1',
+  `bmaxcomments`   int(11)      NOT NULL default '0',
+  `btimeoffset`    decimal(3,1) NOT NULL default '0.0',
+  `bnotify`        varchar(60)           default NULL,
+  `burl`           varchar(100)          default NULL,
+  `bupdate`        varchar(60)           default NULL,
+  `bdefskin`       int(11)      NOT NULL default '1',
+  `bpublic`        tinyint(2)   NOT NULL default '1',
+  `bconvertbreaks` tinyint(2)   NOT NULL default '1',
+  `bdefcat`        int(11)               default NULL,
+  `bnotifytype`    int(11)      NOT NULL default '15',
+  `ballowpast`     tinyint(2)   NOT NULL default '0',
+  `bincludesearch` tinyint(2)   NOT NULL default '0',
+  `breqemail`      tinyint(2)   NOT NULL default '0',
+  `bfuturepost`    tinyint(2)   NOT NULL default '0',
+  PRIMARY KEY  (`bnumber`),
+  UNIQUE KEY `bshortname` (`bshortname`)
+) TYPE=MyISAM;
+
+INSERT INTO `nucleus_blog` VALUES (
+    1,                                  /* bnumber */
+    'My Nucleus CMS',                   /* bname */
+    'mynucleuscms',                     /* bshortname */
+    '',                                 /* bdesc */
+    1,                                  /* bcomments */
+    0,                                  /* bmaxcomments */
+    0.0,                                /* btimeoffset */
+    '',                                 /* bnotify */
+    'http://localhost:8080/nucleus/',   /* burl */
+    '',                                 /* bupdate */
+    5,                                  /* bdefskin */
+    1,                                  /* bpublic */
+    1,                                  /* bconvertbreaks */
+    1,                                  /* bdefcat */
+    1,                                  /* bnotifytype */
+    1,                                  /* ballowpast */
+    0,                                  /* bincludesearch */
+    0,                                  /* breqemail */
+    0                                   /* bfuturepost */
+);
+
+CREATE TABLE `nucleus_category` (
+  `catid` int(11) NOT NULL auto_increment,
+  `cblog` int(11) NOT NULL default '0',
+  `cname` varchar(200) default NULL,
+  `cdesc` varchar(200) default NULL,
+  PRIMARY KEY  (`catid`)
+) TYPE=MyISAM;
+
+INSERT INTO `nucleus_category` VALUES (1, 1, 'General', 'Items that do not fit in other categories');
+
+CREATE TABLE `nucleus_comment` (
+  `cnumber` int(11)      NOT NULL auto_increment,
+  `cbody`   text         NOT NULL,
+  `cuser`   varchar(40)           default NULL,
+  `cmail`   varchar(100)          default NULL,
+  `cemail`  varchar(100),
+  `cmember` int(11)               default NULL,
+  `citem`   int(11)      NOT NULL default '0',
+  `ctime`   datetime     NOT NULL default '0000-00-00 00:00:00',
+  `chost`   varchar(60)           default NULL,
+  `cip`     varchar(15)  NOT NULL default '',
+  `cblog`   int(11)      NOT NULL default '0',
+  PRIMARY KEY  (`cnumber`),
+  KEY `citem` (`citem`),
+  FULLTEXT KEY `cbody` (`cbody`)
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_config` (
+  `name`  varchar(20)  NOT NULL default '',
+  `value` varchar(128)          default NULL,
+  PRIMARY KEY  (`name`)
+) TYPE=MyISAM;
+
+INSERT INTO `nucleus_config` (`name`, `value`) VALUES
+    ('DefaultBlog',       '1'),
+    ('AdminEmail',        'example@example.org'),
+    ('IndexURL',          'http://localhost:8080/nucleus/'),
+    ('Language',          'japanese-utf8'),
+    ('SessionCookie',     ''),
+    ('AllowMemberCreate', ''),
+    ('AllowMemberMail',   '1'),
+    ('SiteName',          'My Nucleus CMS'),
+    ('AdminURL',          'http://localhost:8080/nucleus/nucleus/'),
+    ('NewMemberCanLogon', '1'),
+    ('DisableSite',       ''),
+    ('DisableSiteURL',    'http://www.this-page-intentionally-left-blank.org/'),
+    ('LastVisit',         ''),
+    ('MediaURL',          'http://localhost:8080/nucleus/media/'),
+    ('AllowedTypes',      'jpg,jpeg,gif,mpg,mpeg,avi,mov,mp3,swf,png'),
+    ('AllowLoginEdit',    ''),
+    ('AllowUpload',       '1'),
+    ('DisableJsTools',    '2'),
+    ('CookiePath',        '/'),
+    ('CookieDomain',      ''),
+    ('CookieSecure',      ''),
+    ('CookiePrefix',      ''),
+    ('MediaPrefix',       '1'),
+    ('MaxUploadSize',     '1048576'),
+    ('NonmemberMail',     ''),
+    ('PluginURL',         'http://localhost:8080/nucleus/nucleus/plugins/'),
+    ('ProtectMemNames',   '1'),
+    ('BaseSkin',          '5'),
+    ('SkinsURL',          'http://localhost:8080/nucleus/skins/'),
+    ('ActionURL',         'http://localhost:8080/nucleus/action.php'),
+    ('URLMode',           'normal'),
+    ('DatabaseVersion',   '350'),
+    ('DebugVars',         '0'),
+    ('DefaultListSize',   '10');
+
+CREATE TABLE `nucleus_item` (
+  `inumber`   int(11)      NOT NULL auto_increment,
+  `ititle`    varchar(160)          default NULL,
+  `ibody`     text         NOT NULL,
+  `imore`     text,
+  `iblog`     int(11)      NOT NULL default '0',
+  `iauthor`   int(11)      NOT NULL default '0',
+  `itime`     datetime     NOT NULL default '0000-00-00 00:00:00',
+  `iclosed`   tinyint(2)   NOT NULL default '0',
+  `idraft`    tinyint(2)   NOT NULL default '0',
+  `ikarmapos` int(11)      NOT NULL default '0',
+  `icat`      int(11)               default NULL,
+  `ikarmaneg` int(11)      NOT NULL default '0',
+  `iposted`   tinyint(2)   NOT NULL default '1',
+  PRIMARY KEY  (`inumber`),
+  KEY `itime` (`itime`),
+  FULLTEXT KEY `ibody` (`ibody`, `ititle`, `imore`)
+) TYPE=MyISAM PACK_KEYS=0;
+
+CREATE TABLE `nucleus_karma` (
+  `itemid` int(11)  NOT NULL default '0',
+  `ip`     char(15) NOT NULL default ''
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_member` (
+  `mnumber`    int(11)      NOT NULL auto_increment,
+  `mname`      varchar(32)  NOT NULL default '',
+  `mrealname`  varchar(60)           default NULL,
+  `mpassword`  varchar(40)  NOT NULL default '',
+  `memail`     varchar(60)           default NULL,
+  `murl`       varchar(100)          default NULL,
+  `mnotes`     varchar(100)          default NULL,
+  `madmin`     tinyint(2)   NOT NULL default '0',
+  `mcanlogin`  tinyint(2)   NOT NULL default '1',
+  `mcookiekey` varchar(40)           default NULL,
+  `deflang`    varchar(20)  NOT NULL default '',
+  `mautosave`  tinyint(2)   NOT NULL default '1',
+  PRIMARY KEY         (`mnumber`),
+  UNIQUE  KEY `mname` (`mname`)
+) TYPE=MyISAM;
+
+INSERT INTO `nucleus_member` VALUES (
+    1,                                  /* mnumber */
+    'example',                          /* mname */
+    'example',                          /* mrealname */
+    '1a79a4d60de6718e8e5b326e338ae533', /* mpassword */
+    'example@example.org',              /* memail */
+    'http://localhost:8080/nucleus/',   /* murl */
+    '',                                 /* mnotes */
+    1,                                  /* madmin */
+    1,                                  /* mcanlogin */
+    'd767aefc60415859570d64c649257f19', /* mcookiekey */
+    '',                                 /* deflang */
+    1                                   /* mautosave */
+);
+
+CREATE TABLE `nucleus_plugin` (
+  `pid`    int(11)     NOT NULL auto_increment,
+  `pfile`  varchar(40) NOT NULL default '',
+  `porder` int(11)     NOT NULL default '0',
+  PRIMARY KEY     (`pid`),
+  KEY    `porder` (`porder`)
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_plugin_event` (
+  `pid`   int(11)     NOT NULL default '0',
+  `event` varchar(40)          default NULL,
+  KEY `pid` (`pid`)
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_plugin_option` (
+  `ovalue`     text    NOT NULL,
+  `oid`        int(11) NOT NULL auto_increment,
+  `ocontextid` int(11) NOT NULL default '0',
+  PRIMARY KEY  (`oid`, `ocontextid`)
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_plugin_option_desc` (
+  `oid`      int(11)     NOT NULL auto_increment,
+  `opid`     int(11)     NOT NULL default '0',
+  `oname`    varchar(20) NOT NULL default '',
+  `ocontext` varchar(20) NOT NULL default '',
+  `odesc`    varchar(255)         default NULL,
+  `otype`    varchar(20)          default NULL,
+  `odef`     text,
+  `oextra`   text,
+  PRIMARY KEY  (`opid`, `oname`, `ocontext`),
+  UNIQUE KEY `oid` (`oid`)
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_skin` (
+  `sdesc`    int(11)     NOT NULL default '0',
+  `stype`    varchar(20) NOT NULL default '',
+  `scontent` text        NOT NULL,
+  PRIMARY KEY  (`sdesc`,`stype`)
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_skin_desc` (
+  `sdnumber`  int(11)     NOT NULL auto_increment,
+  `sdname`    varchar(20) NOT NULL default '',
+  `sddesc`    varchar(200)         default NULL,
+  `sdtype`    varchar(40) NOT NULL default 'text/html',
+  `sdincmode` varchar(10) NOT NULL default 'normal',
+  `sdincpref` varchar(50) NOT NULL default '',
+  PRIMARY KEY  (`sdnumber`),
+  UNIQUE KEY `sdname` (`sdname`)
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_team` (
+  `tmember` int(11)     NOT NULL default '0',
+  `tblog`   int(11)     NOT NULL default '0',
+  `tadmin`   tinyint(2) NOT NULL default '0',
+  PRIMARY KEY  (`tmember`, `tblog`)
+) TYPE=MyISAM;
+
+INSERT INTO `nucleus_team` VALUES (1, 1, 1);
+
+CREATE TABLE `nucleus_template` (
+  `tdesc`     int(11)     NOT NULL default '0',
+  `tpartname` varchar(64) NOT NULL default '',
+  `tcontent`  text        NOT NULL,
+  PRIMARY KEY  (`tdesc`, `tpartname`)
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_template_desc` (
+  `tdnumber` int(11)     NOT NULL auto_increment,
+  `tdname`   varchar(64) NOT NULL default '',
+  `tddesc`   varchar(200)         default NULL,
+  PRIMARY KEY (`tdnumber`),
+  UNIQUE  KEY `tdname` (`tdname`)
+) TYPE=MyISAM;
+
+CREATE TABLE `nucleus_tickets` (
+  `ticket` varchar(40) NOT NULL default '',
+  `ctime` datetime     NOT NULL default '0000-00-00 00:00:00',
+  `member` int(11)     NOT NULL default '0',
+  PRIMARY KEY  (`ticket`,`member`)
+) TYPE=MyISAM;
diff --git a/utf8/install/install_lang_japanese.php b/utf8/install/install_lang_japanese.php
new file mode 100644 (file)
index 0000000..8cd5646
--- /dev/null
@@ -0,0 +1,518 @@
+<?php\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+\r
+/**\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ */\r
+define('_HEADER1_2',                   'キャラクタセット');\r
+define('_TEXT1_2',                             '使用するキャラクタセットを選択します。UTF-8を推奨します。');\r
+define('_TEXT1_2_TAB_HEAD',            'キャラクタセットの選択');\r
+define('_TEXT1_2_TAB_FIELD1',  'キャラクタセット');\r
+\r
+define('_ERROR1',                              '使用中のPHPはMySQLをサポートしていません :(');\r
+define('_ERROR2',                              'データベース名が見つかりません');\r
+define('_ERROR3',                              '「データベースプリフィックスを使用する」が選択されていますが、プリフィックスが設定されていません。');\r
+define('_ERROR4',                              'プリフィックスに使用できる文字は A-Z、a-z、0-9 と _(アンダーバー)のみです。');\r
+define('_ERROR5',                              'URLのいづれかが「/(スラッシュ)」で終わっていないか、または機能決定ファイルのURLが「action.php」で終わっていません。');\r
+define('_ERROR6',                              '管理エリアのディレクトリパスが「/(スラッシュ)」で終わっていません。');\r
+define('_ERROR7',                              'アップロードしたファイルが格納されるディレクトリパスが「/(スラッシュ)」で終わっていません。');\r
+define('_ERROR8',                              'テーマファイルのディレクトリパスが「/(スラッシュ)」で終わっていません。');\r
+define('_ERROR9',                              '管理エリアのディレクトリパスがサーバ上に存在しません。');\r
+define('_ERROR9_2',                            '<tt>action.php</tt>ファイルへのURLが別のサーバを指しています。');\r
+define('_ERROR9_3',                            '<tt>action.php</tt>ファイルへのURLにファイルが存在しません。');\r
+define('_ERROR10',                             'メールアドレスが不正です。');\r
+define('_ERROR11',                             '「表示される名前」に使用できない文字が含まれています。(使用できる文字:a-z と 0-9、最初と最後以外の空白)');\r
+define('_ERROR12',                             'パスワードが入力されていません。');\r
+define('_ERROR13',                             '入力された二つのパスワードが一致しません。');\r
+define('_ERROR14',                             '「ブログの短縮名(略称)」に使用できない文字が含まれています。(使用できる文字:a-z と 0-9。空白は使用できません)');\r
+define('_ERROR15',                             'mySQL serverに接続できませんでした。');\r
+define('_ERROR16',                             'データベースを作成できませんでした。作成の権限があるかどうか確認してください。SQL エラーの内容:');\r
+define('_ERROR17',                             'データベースを見つけられませんでした。データベースが存在するか確認してください。');\r
+define('_ERROR18',                             '次のクエリの実行中にエラーが発生しました:');\r
+define('_ERROR19',                             '「メンバー設定」の実行中にエラーが発生しました:');\r
+define('_ERROR20',                             '「blog設定」の実行中にエラーが発生しました:');\r
+define('_ERROR21',                             '次のクエリの実行中にエラーが発生しました:');\r
+define('_ERROR22',                             'プラグイン「%s」をインストールできませんでした。');\r
+define('_ERROR23_1',                   'テーマファイル「%s」が読み込めませんでした。');\r
+define('_ERROR23_2',                   'ファイルが見つかりません。');\r
+define('_ERROR24',                             'テーマ「%s」をインポートできませんでした。');\r
+define('_ERROR25_1',                   'プログラムのコアファイル <b>');\r
+define('_ERROR25_2',                   '</b> が見つからない、もしくは読み出し禁止になっています。');\r
+define('_ERROR26',                             '設定の更新中にエラーが発生しました。実行したクエリは次の通りです:');\r
+define('_ERROR27',                             'エラー!');\r
+define('_ERROR28',                             'エラーメッセージは次の通りです:');\r
+define('_ERROR29',                             '複数のエラーを発見しました');\r
+define('_ERROR30',                             'クエリの実行中にエラーが発生しました:');\r
+\r
+define('_NOTIFICATION1',               '判別不能');\r
+\r
+define('_TITLE',                               'Nucleusのインストール');\r
+define('_TITLE2',                              'テーマ・プラグインのインストールエラー');\r
+define('_TITLE3',                              'インストールはほぼ完了しました!');\r
+define('_TITLE4',                              'インストールは完了しました!');\r
+define('_TITLE5',                              'スパムとの戦い');\r
+\r
+define('_HEADER1',                             'Nucleusのインストール');\r
+define('_TEXT1',                               '<p>MySQLテーブルのセットアップと、config.php に入力するための情報を表示します(config.phpのパーミッションを0666にしておけば、後者の作業は自動的に行われます)。これをなす為に、いくつかの情報を入力する必要があります。</p><p>すべての欄の入力が必要です。オプション情報は、インストールが完了後Nucleusの管理領域から設定可能です。</p>');\r
+\r
+define('_HEADER2',                             'PHP と MySQL のバージョン');\r
+define('_TEXT2',                               '<p>以下はあなたのウェブホストにおけるPHPとMySQLサーバーのバージョンです。Nucleusのサポートフォーラムに問題を報告する時は、この情報を書き添えてください。</p>');\r
+define('_TEXT2_WARN',                  ' 注意: Nucleusの動作には少なくともバージョン %s が必要です');\r
+define('_TEXT2_WARN2',                 ' 注意: Nucleusの動作には少なくともバージョン %s が必要です');\r
+define('_TEXT2_WARN3',                 '警告! 動作しているPHPのバージョンが古いようです!次にリリースされるNucleusCMSではPHP4はサポートされません!早急にPHP5にアップグレードしてください!');\r
+\r
+define('_HEADER3',                             'config.phpの自動設定');\r
+define('_TEXT3',                               '<strong style="color:red;">config.phpへの書き込みができません。</strong>config.phpのパーミッションを<strong>666</strong>にしておけば、スクリプトが自動で設定情報を書き込みます。ただし、Nucleusのインストール完了後、<strong><em style="font-color:#f00;">必ず</em></strong>パーミッションを<strong>444</strong>に変更してください(<a href="nucleus/documentation/tips.html#filepermissions">パーミッション変更の簡易ガイド</a>)。</p>');\r
+\r
+define('_HEADER4',                             'MySQLのログイン情報');\r
+define('_TEXT4',                               '<p>データベースのログイン情報を入力してください。この情報が分からない場合は、システム管理者かホスティング元に確認をとってください。ほとんどの場合、ホスト名は「localhost」です。もしNucleusがあなたのサーバのPHP設定から「default MySQL host」を検出していれば「ホスト名」に既に記入されているはずですが、この情報が正確であるという保証はありません。</p>');\r
+define('_TEXT4_TAB_HEAD',              '基本のデータベース設定');\r
+define('_TEXT4_TAB_FIELD1',            'ホスト名:');\r
+define('_TEXT4_TAB_FIELD2',            'ユーザー名:');\r
+define('_TEXT4_TAB_FIELD3',            'パスワード:');\r
+define('_TEXT4_TAB_FIELD4',            'データベース名:');\r
+define('_TEXT4_TAB_FIELD4_ADD',        'データベースを作成する必要がある');\r
+\r
+define('_TEXT4_TAB2_HEAD',             '高度なデータベース設定');\r
+define('_TEXT4_TAB2_FIELD',            '異なるテーブル・プリフィックスを使用する:');\r
+define('_TEXT4_TAB2_ADD',              '<p><strong>通常はここを変更する必要はありません。</strong>ひとつのデータベースに複数のNucleusをインストールしたい場合にこの設定を用います。</p>');\r
+\r
+define('_HEADER5',                             'ディレクトリとURL');\r
+define('_TEXT5',                               '<p>ディレクトリとURLを下記の設定でインストールします。特殊なディレクトリ構成で運用したい場合は、ここで変更できます。ディレクトリのパス及びURLはスラッシュ「/」で閉じてください。</p>');\r
+\r
+define('_TEXT5_TAB_HEAD',              'ディレクトリとURL');\r
+define('_TEXT5_TAB_FIELD1',            'サイトの<strong>URL</strong>:');\r
+define('_TEXT5_TAB_FIELD2',            '管理エリアの<strong>URL</strong>:');\r
+define('_TEXT5_TAB_FIELD3',            '管理エリアの<strong>ディレクトリ</strong>:');\r
+define('_TEXT5_TAB_FIELD4',            'アップロードしたファイルが格納される<strong>URL</strong>:');\r
+define('_TEXT5_TAB_FIELD5',            'アップロードしたファイルが格納される<strong>ディレクトリ</strong>:');\r
+define('_TEXT5_TAB_FIELD6',            'スキンファイルの<strong>URL</strong>:');\r
+define('_TEXT5_TAB_FIELD7',            'スキンファイルの<strong>ディレクトリ</strong>:');\r
+define('_TEXT5_TAB_FIELD7_2',  'インポートしたスキンで使用するファイル');\r
+define('_TEXT5_TAB_FIELD8',            'プラグインが格納されている<strong>URL</strong>:');\r
+define('_TEXT5_TAB_FIELD9',            '機能決定ファイルの<strong>URL</strong>:');\r
+define('_TEXT5_TAB_FIELD9_2',  '<tt>action.php</tt>ファイルへのhttp://から始まるURL:');\r
+define('_TEXT5_2',                             '<p class="note"><strong>付記:</strong> 相対パスではなく<strong>絶対パスを使用してください</strong>。絶対パスはほとんどの場合、<tt>/home/username/public_html/</tt>のようにスラッシュから始まります。よく解らない場合はサーバ管理者に質問してください。</p>');\r
+\r
+define('_HEADER6',                             '管理権限をもつユーザー');\r
+define('_TEXT6',                               '<p>以下に、サイトの最初のユーザーを作成するための情報を入力してください。</p>');\r
+define('_TEXT6_TAB_HEAD',              'サイトの管理者:');\r
+define('_TEXT6_TAB_FIELD1',            '表示される名前(ログインID):');\r
+define('_TEXT6_TAB_FIELD1_2',  '使用できる文字:a-z と 0-9、最初と最後以外の空白');\r
+define('_TEXT6_TAB_FIELD2',            '本名(ハンドル名):');\r
+define('_TEXT6_TAB_FIELD3',            'パスワード:');\r
+define('_TEXT6_TAB_FIELD4',            'パスワード(確認入力):');\r
+define('_TEXT6_TAB_FIELD5',            'メールアドレス:');\r
+define('_TEXT6_TAB_FIELD5_2',  '利用可能なメールアドレスを入れてください');\r
+\r
+define('_HEADER7',                             'ブログのデータ');\r
+define('_TEXT7',                               '<p>デフォルトのブログを作成するための情報を入力してください。このブログの名前は、サイト名としても利用されます。</p>');\r
+define('_TEXT7_TAB_HEAD',              'ブログのデータ');\r
+define('_TEXT7_TAB_FIELD1',            'ブログの名前:');\r
+define('_TEXT7_TAB_FIELD2',            'ブログの短縮名(略称):');\r
+define('_TEXT7_TAB_FIELD2_2',  '使用できる文字:a-z と 0-9、空白は不可');\r
+\r
+define('_HEADER8',                             '更新Ping');\r
+//define('_HEADER8',                           'インストールするプラグインとテーマの選択');\r
+define('_TEXT8_TAB_HEADER',            '更新Ping');\r
+define('_TEXT8_TAB_PLUGINDEP', '以下のプラグインに依存します。%s'); //<addsatona date="2008-09-03" />\r
+//define('_TEXT8_TAB_HEADER',          'プラグインの選択');\r
+define('_TEXT8_TAB_HEADER2',   'テーマの選択');\r
+define('_TEXT8_TAB_FIELD1',            '更新Ping送信プラグイン <a href="http://www.google.com/search?hl=ja&q=NP_Ping&lr=lang_ja" target="_blank">NP_Ping</a> をインストールする (更新Pingを送信するプラグインは他にもあります。)');\r
+\r
+define('_HEADER9',                             'データの送信');\r
+define('_TEXT9',                               '<p>上に書いてきたデータが正しいか確かめてください。よければデータベース・テーブルと最初のデータを設定するために下のボタンを押してください。少し時間がかかるかもしれませんがご辛抱を。<strong>ボタンをクリックするのは一回だけにしてください。</strong></p>');\r
+\r
+define('_TEXT10',                              '<p>データベーステーブルの初期値入力が成功しました。後は<i>config.php</i>を書き換えるだけです。以下に書き換えるべき内容を表示します(mysqlのパスワードはマスクされています。ここは実際のものに書き換えてください)</p>');\r
+define('_TEXT11',                              '<p>あなたのコンピュータ上のファイルを書き換えたら、FTPを使ってウェブサーバにアップロードしてください。ASCIIモードで送信してファイルを上書きします。</p>');\r
+define('_TEXT12',                              '<b>付記:</b> <i>config.php</i>の最初や終わりにスペースを空けないようにしましょう。実行時にエラーを引き起こす原因となります。<br />したがって、config.phpの最初の文字は "&lt;"で最後の文字は"&gt;"としなければなりません。');\r
+define('_TEXT13',                              '<p>Nucleusはインストールされ、<code>config.php</code>はアップデートされました。</p><p>セキュリティのため<code>config.php</code>のパーミッションを444に戻すことを忘れないでください(<a href="nucleus/documentation/tips.html#filepermissions">パーミッション変更の簡易ガイド</a>)。</p>');\r
+define('_TEXT14',                              '<p>Nucleusは誰でもブログにコメントを残すことができる様になっているので、このままではスパムの温床になる危険があります。以下の方法によってブログを保護することをお勧めします:</p>');\r
+define('_TEXT14_L1',                   'あなたがコメントを必要としないのであれば、管理エリアから「あなたのブログ」 &gt; 「ブログ設定」 とたどり、 「コメントを許可しますか?」 の設定を「いいえ」にすることで、コメント投稿フォームを非表示にすることができます。');\r
+define('_TEXT14_L2',                   'スパムを撃退・管理する為のプラグインをインストールすることも可能です:<a href="http://japan.nucleuscms.org/wiki/plugins_by_category#supamutsuru">Nucleus Japan wiki</a> (ブックマークをお勧めします)');\r
+define('_HEADER10',                            'インストールファイルの削除');\r
+define('_TEXT15',                              '<p>ウェブサーバから /install/ ディレクトリを削除してください:</p>');\r
+define('_TEXT15_L1',                   '<b>install/install.sql</b>:テーブルの構造を内包するファイル');\r
+define('_TEXT15_L2',                   '<b>install/index.php</b>:このファイル');\r
+\r
+define('_TEXT15_L3',                   '<b>install_lang_japanese.php</b>:インストーラの言語ファイル');\r
+define('_TEXT16',                      '<p>もしこのディレクトリを削除していなければ、管理領域を開くことができません。</p>');\r
+\r
+define('_HEADER11',                            'ウェブサイトの確認');\r
+define('_TEXT16_H',                            'ウェブサイトを使う準備が整いました。');\r
+define('_TEXT16_L1',                   '管理領域にログインしてサイトの設定を行う');\r
+define('_TEXT16_L2',                   'すぐにサイトへ行ってみる');\r
+\r
+define('_TEXT17',                              '戻る');\r
+\r
+define('_BUTTON1',                             'インストールを実行する');\r
+\r
+// General category\r
+define('_GENERALCAT_NAME',             '総合');\r
+define('_GENERALCAT_DESC',             '投稿した記事に合うカテゴリが無い時にこのカテゴリを使用すると良いでしょう');\r
+\r
+define('_1ST_POST_TITLE',              'Nucleus CMS バージョン3.51へようこそ');\r
+define('_1ST_POST',                            'ウェブサイトの作成を補助する積み木がここにあります。それは心躍るブログになるかもしれませんし、見る人を和ませる家族のサイトになるかもしれませんし、実り多い趣味のサイトになるかもしれません。あるいは現在のあなたには想像がつかないものになることだってあるでしょう。<br />\r
+<br />用途が思いつきませんでしたか? それならここへ来て正解です。なぜならあなた同様私たちにもわからないのですから。');\r
+define('_1ST_POST2',                   'これはサイトにおける最初のエントリーです。スタートを切りやすいように、リンクと情報を入れておきました。<br />\r
+<br />\r
+この記事を削除することもできますが、どちらにせよ記事を追加していくことによってやがてメインページからは見えなくなります。Nucleusを扱ううちに生じたメモをコメントとして追加し、将来アクセスできるようにこのページをブックマークしておくのも手です。<br />\r
+<br />\r
+<b>リンク</b><br />\r
+<br />\r
+Nucleus CMSの<a href="http://nucleuscms.org">本家</a>と<a href="http://japan.nucleuscms.org">日本語公式</a>ページ。<br />\r
+<br />\r
+Nucleus CMSのSourceForge<a href="http://sourceforge.net/projects/nucleuscms/">プロジェクト</a>(<a href="http://sourceforge.jp/projects/nucleus-jp/">日本版</a>)ページ。<br />\r
+<br />\r
+Nucleus CMSの<a href="http://wakka.xiffy.nl/Plugin/">プラグイン倉庫</a>と<a href="http://japan.nucleuscms.org/wiki/plugins">日本語のリスト</a>ページ。<br />\r
+<br />\r
+<b>ドキュメント - <a href="http://docs.nucleuscms.org/">docs.nucleuscms.org</a></b><br />\r
+<br />\r
+Nucleusの<a href="http://japan.nucleuscms.org/faq.php">FAQ(よくある質問集)</a>(<a href="http://nucleuscms.org/faq.php">原文</a>)ページ。<br />\r
+<br />\r
+インストール方法等は<a href="nucleus/documentation/">ユーザー向け</a>と<a href="nucleus/documentation/devdocs/">開発者向け</a>文書がファイルに含まれています。<br />\r
+<br />\r
+ポップアップ<a href="./nucleus/documentation/help.html">ヘルプ</a>が管理エリアのいたるところにあり、サイトのカスタマイズやデザインを手助けしてくれることでしょう。<br />\r
+<br />\r
+一度用意されているドキュメントに目を通したら、<a href="http://wiki.nucleuscms.org/">Wiki</a>(<a href="http://japan.nucleuscms.org/wiki/">日本版</a>)を訪れてください。ユーザーの書いたハウツーや小技が掲載されています。<br />\r
+<br />\r
+<b>サポート</b><br />\r
+<br />\r
+<a href="http://forum.nucleuscms.org/">forum.nucleuscms.org</a>(本家)<br />\r
+<a href="http://japan.nucleuscms.org/bb/">japan.nucleuscms.org/bb/</a>(日本版)<br />\r
+<br />\r
+<a href="http://forum.nucleuscms.org/groupcp.php?g=3">moderators</a>とサポートフォーラムで活動する全てのボランティアに感謝します。<br />\r
+<br />\r
+- <a href="http://edmondhui.homeip.net/blog/">admun</a> - Ottawa, ON, Canada<br />\r
+- <a href="http://www.tamizhan.com/">anand</a> - Bangalore, India<br />\r
+- <a href="http://hcgtv.com">hcgtv</a> - Miami, Florida, USA<br />\r
+- <a href="http://www.adrenalinsports.nl/">ikeizer</a> - Maastricht<br />\r
+- <a href="http://www.tipos.com.br/">moraes</a> - Brazil<br />\r
+- <a href="http://roelg.nl/">roel </a>- The Netherlands<br />\r
+- <a href="http://budts.be/weblog/">TeRanEX </a>- Ekeren, Antwerp, Belgium<br />\r
+- <a href="http://www.trentadams.com/">Trent </a>- Alberta, Canada<br />\r
+- <a href="http://xiffy.nl/weblog/">xiffy </a>- Deventer<br />\r
+<br />\r
+もし手助けが必要なら、1400を超える登録ユーザーのいる私たちのフォーラムに参加してください。23,000を超える投稿された記事を検索できるようになっておりますので、求める答えに数回のクリックでたどり着けるかもしれません。<br />\r
+<br />\r
+<b>Personalization - <a href="http://skins.nucleuscms.org/">skins.nucleuscms.org</a></b><br />\r
+<br />\r
+マルチウェブログとスキン/テンプレートの組み合わせは強力な相乗効果を生み出します。個人的なサイト作成、友人や親戚あるいはクライアントに対するサイトデザインいずれに対してもです。<br />\r
+<br />\r
+636の登録された<a href="http://nucleuscms.org/sites.php">Nucleusで運用されているサイト</a>(<a href="http://japan.nucleuscms.org/sites.php">日本版</a>)の中から特色あるサイトをサンプルとしてご紹介します。<br />\r
+<br />\r
+Personal blogs<br />\r
+- <a href="http://bloggard.com/">bloggard.com</a> - The Adventures of Bloggard<br />\r
+- <a href="http://www.yetanotherblog.de/">yetanotherblog.de</a> - Yet Another Blog<br />\r
+<br />\r
+Hobby, Travel and News sites<br />\r
+- <a href="http://adrenalinsports.nl/">adrenalinsports.nl</a> - Extreme sports<br />\r
+- <a href="http://groningen-info.de/">groningen-info.de</a> - Neues aus Groningen. Fr Leute aus Duitsland.<br />\r
+<br />\r
+<b>Nucleus Developer Network - <a href="http://dev.nucleuscms.org/">dev.nucleuscms.org</a></b><br />\r
+<br />\r
+The NUDN is a hub for developer sites and programming resources.<br />\r
+<br />\r
+NUDN satellite sites, handles, location and UTC offset:<br />\r
+- <a href="http://karma.nucleuscms.org/">karma</a> - Izegem +02<br />\r
+- <a href="http://edmondhui.homeip.net/blog/">admun</a> - Ottawa -04<br />\r
+- <a href="http://dev.budts.be/nucleus/">TeRanEX</a> - Ekeren +02<br />\r
+<br />\r
+Sourceforge.net graciously hosts our <a href="http://sourceforge.net/projects/nucleuscms/">SVN repository</a>.<br />\r
+<br />\r
+Want to play around or test changes, visit our demo site at <a href="http://demo.nucleuscms.org/">demo.nucleuscms.org</a>.<br />\r
+<br />\r
+Not sure what plugins to use, visit the <a href="http://showcase.trentadams.com/">showcase site</a> where you can see plugins at play in their native habitat.<br />\r
+<br />\r
+Then visit the plugin repository at <a href="http://plugins.nucleuscms.org/">plugins.nucleuscms.org</a> for download and installation instructions.<br />\r
+<br />\r
+<b>寄付者一覧</b><br />\r
+<br />\r
+以下の<a href="http://nucleuscms.org/donators.php">素晴らしい人々</a>による<a href="http://nucleuscms.org/donate.php">援助</a>感謝を捧げます。<em>ありがとう!</em><br />\r
+<ul class="donatorlist">\r
+    <li><a href="http://www.GamblingHelper.com/">GamblingHelper</a></li>\r
+    <li>Michel Machado</li>\r
+    <li>株式会社ウェッジ</li>\r
+    <li><a href="http://feelbmx.com">BMX Bikes</a></li>\r
+    <li><a href="http://badmintonholic.com/">Badminton Blog</a></li>\r
+    <li><a href="http://www.pbcohen.com/">PB Cohen Creations</a></li>\r
+\r
+    <li><a href="http://uboxy.com/">Uboxy Blog</a></li>\r
+    <li>LeadsClick</li>\r
+    <li>大崎 勉</li>\r
+    <li>Marina Silva</li>\r
+    <li><a href="http://www.kevinhaynes.com/">Kevin Haynes</a></li>\r
+    <li><a href="http://www.kouzelnicek.com/">Martin Samanek</a></li>\r
+\r
+    <li><a href="http://www.siteexecutivo.com/">Andre DaSilva</a></li>\r
+    <li>Charlotte Schmitz</li>\r
+    <li><a href="http://okazaki.incoming.jp/matatabi/">Shinsuke Okazaki</a></li>\r
+    <li><a href="http://www.hinokiya.com/">Hinoki-ya</a></li>\r
+    <li><a href="http://yumisaiki.spaces.live.com/Blog/cns!54B00F8893DF1285!452.entry">Yumi Saiki</a></li>\r
+    <li><a href="http://www.bs-kitanagoya.jp/smm/">Yoshihiko Hirano</a></li>\r
+\r
+    <li>Abtech</li>\r
+    <li>Masao Yamamoto</li>\r
+    <li><a href="http://www.powermelon.com/pm/">Koshin</a> <a href="http://area88.shiftweb.net/modoki2/">Yaegashi</a></li>\r
+    <li><a href="http://www.turkcebilgi.net/">Turkce Bilgi</a></li>\r
+    <li>John Nowak</li>\r
+\r
+    <li>Rie Go</li>\r
+    <li><a href="http://blog.kkj-net.com/">blog.kkj-net.com</a></li>\r
+    <li><a href="http://www.winscp.net/">WinSCP FTP cient</a></li>\r
+    <li><a href="http://blogs.waytorussia.net/">Way to Russia Guides</a></li>\r
+    <li><a href="http://blog.gilmalonzo.com/">Gil Malonzo</a></li>\r
+    <li><a href="http://www.yosiah.com/blog/">Yosiah\\\'s Blog</a></li>\r
+\r
+    <li><a href="http://www.kritische-masse.de/">Kritische Masse</a></li>\r
+    <li><a href="http://www.grid8400.nl/">grid8400</a></li>\r
+    <li><a href="http://dailypuppy.com/">Daily Puppy</a></li>\r
+    <li><a href="http://content-management-directory.com/">CMS Directory</a></li>\r
+    <li>William Jobes</li>\r
+    <li><a href="http://stefanjuhl.com/">Stefan Juhl</a></li>\r
+\r
+    <li><a href="http://www.p2p-blog.com/">P2P Blog</a></li>\r
+    <li><a href="http://www.l-word.org/">The L Word Fansite</a></li>\r
+    <li><a href="http://www.3gz.com/nb3/">NEUT\\\'s BUTT 3G\\\'Z</a></li>\r
+    <li><a href="http://www.bloghouston.net/">blogHOUSTON</a></li>\r
+    <li><a href="http://www.osalt.com/">Open Source as Alternative</a></li> \r
+    <li><a href="http://www.yetanotherblog.de/">Yet Another Blog</a></li>\r
+\r
+    <li><a href="http://www.landi.com/">Landi.com</a></li>\r
+    <li><a href="http://www.aerodeon.com/">Aerodon</a></li>\r
+    <li><a href="http://www.iluminada.com/">iluminada design</a></li>\r
+    <li><a href="http://www.c-kn.de/">Computertechnik Krienke &amp; Nolte GbR.</a></li>\r
+    <li>Mohamed Sakkal</li>\r
+\r
+    <li>Paul Kirkwood</li>\r
+    <li><a href="http://www.collicott.net/jess/">Hello...and you are?</a></li>\r
+    <li><a href="http://www.about-nokia.com/">About Nokia</a></li>\r
+    <li><a href="http://www.diabeticdialogue.com/">Diabetic Dialogue</a></li>\r
+    <li><a href="http://desoft.co.uk/">DeSoft</a></li>\r
+    <li><a href="http://circle.club.or.jp/">Jun Yamane</a></li>\r
+\r
+    <li><a href="http://www.fogelholm.com/">Fogelholm</a></li>\r
+    <li><a href="http://web.ics.purdue.edu/~smith60">To Be Determined</a></li>\r
+    <li><a href="http://firefox.myip.org/">Julia W</a></li>\r
+    <li><a href="http://larscapes.com/">Larscapes</a></li>\r
+    <li>Normann Rashid</li>\r
+    <li>Giles Anderson</li>\r
+\r
+    <li><a href="http://www.presaromana.com/weblog/marilyn.php">Marinela Niculescu Matei</a></li>\r
+    <li><a href="http://www.janantoon.be/">Jan Marien</a></li>\r
+    <li><a href="http://backchannel.ca/">Robert Birt</a></li>\r
+    <li><a href="http://www.catogeorge.com/">Brian Betz</a></li>\r
+    <li><a href="http://www.nlborrels.com/">NLBorrels.com</a>\r
+    <li>Jacqueline Hall</li>\r
+\r
+    <li>Kevin Kennedy</li>\r
+    <li><a href="http://lo.gs.di.gs/">Shinsaku Chikura</a></li>\r
+    <li><a href="http://www.torontomusicians.org/">Margaret Stowe</a></li>\r
+    <li><a href="http://hcgtv.com/">Bert Garcia</a></li>\r
+    <li><a href="http://www.randyray.name/">Randy Ray</a></li>\r
+    <li><a href="http://www.sa-to-shi.net/">Satoshi Shimazaki</a></li>\r
+\r
+    <li><a href="http://reddustrec.net/">dkex</a></li>\r
+    <li><a href="http://blog.datoka.jp/">Yu (blog.datoka.jp)</a></li>\r
+    <li>GamblingHelper</li>\r
+    <li><a href="http://sites.proliphus.com/blueZhift/blog/">Thomas McKibben</a></li>\r
+    <li>Robert Seyfriedsberger</li>\r
+    <li><a href="http://www.toxicologie.nl/">Toxicologie.nl</a></li>\r
+\r
+    <li>Gordon Shum</li>\r
+    <li><a href="http://www.subsim.com/">Neal Stevens</a></li>\r
+    <li>Oliver Kirstein</li>\r
+    <li><a href="http://www.dominiek.be/">Dominiek</a></li>\r
+    <li><a href="http://www.aardschok.net/">Aardschok</a></li>\r
+    <li><a href="http://www.nieuwevoordeur.be/">nieuwevoordeur.be</a></li>\r
+\r
+    <li><a href="http://www.scene24.net/">Scene24</a></li>\r
+    <li><a href="http://www.eug.be/">Eug\\\'s Weblog</a></li>\r
+    <li><a href="http://www.bloggard.com/">The Adventures of Bloggard</a></li>\r
+    <li><a href="http://www.voltos.com/">Arthur Cronos from Voltos</a></li>\r
+    <li><a href="http://www.domilog.be/">Domi\\\'s Weblog</a></li>\r
+    <li>Infodoma</li>       \r
+    <li><a href="http://carvingcode.com/">carvingCode.com</a></li>\r
+\r
+    <li><a href="http://www.traweb.com/">Traweb</a></li>\r
+    <li><a href="http://gene.mm2u.com/">Gene\\\'s MoBlog</a></li>\r
+    <li><a href="http://interfacethis.com/">InterfaceThis</a></li>\r
+    <li><a href="http://www.thefinsters.com/flog/">The Finster Log</a></li>\r
+    <li><a href="http://www.mrhop.com/">Hop Nguyen</a></li>\r
+    <li><a href="http://www.zwavel.com/~zwavelaars" title="Zwavelaars">Zwavelaars</a></li>\r
+\r
+    <li><a href="http://beefcake.nl/">Joaquin Scholten</a></li> \r
+    <li><a href="http://www.roelgroeneveld.com/">Roel Groeneveld</a></li>\r
+    <li><a href="http://lvb.net/">LVBlog</a></li>\r
+    <li><a href="http://xandermol.com/">Xander Mol</a></li>\r
+    <li>Danilo Massa</li>\r
+    <li><a href="http://www.adrenalinsports.nl/">Irmo Keizer</a></li>\r
+\r
+    <li><a href="http://www.jasonkrogh.com/">Jason Krogh</a></li>\r
+    <li><a href="http://www.higuchi.com/">Osamu Higuchi</a></li>\r
+    <li><a href="http://www.trentadams.com/">Trent Adams</a></li>\r
+    <li><a href="http://www.ppcw.net/">Arne Hess</a></li>\r
+    <li><a href="http://hsbluebird.com/">The Bluebird</a></li>\r
+    <li>Rainer Bickel</li>\r
+\r
+    <li>Fritz Elfers</li>\r
+    <li><a href="http://www.thegadgetreview.com/" rel="nofollow">Sony Gadgets and Reviews</a></li>\r
+    <li><a href="http://www.goinginto.com/" rel="nofollow">Going Into</a></li>  \r
+    <li><a href="http://www.uncoverthenet.com/" rel="nofollow">Uncover the Net</a></li>\r
+    <li><a href="http://www.webatlas.org/" rel="nofollow">Web Atlas</a></li>\r
+    <li><a href="http://www.ipnlighting.com/" rel="nofollow">IPN Lighting</a></li>\r
+\r
+    <li><a href="http://cheapweb.us/" rel="nofollow">CheapWeb.us</a></li>\r
+    <li><a href="http://www.webmaster-toolkit.com/" rel="nofollow">Free Webmaster Tools and Resources</a></li>\r
+    <li><a href="http://01FTP.com/" rel="nofollow">01FTP.com</a></li>\r
+    <li><a href="http://www.cashdoctors.com.au/" rel="nofollow">Cash Doctors</a></li>\r
+    <li><a href="http://www.online-casinos.com/blackjack/basic-strategy-calculator.php" rel="nofollow">Blackjack Strategy</a></li>\r
+\r
+    <li>Rusty Kirkpatrick</li>\r
+    <li><a href="http://www.klatschmagazin.com/">Nachrichten</a></li>\r
+    <li><a href="http://edwardkhoo.com/">Edward Khoo</a></li>\r
+    <li><a href="http://www.webmaster-resource.de/">Webmaster Partnerprogramme</a></li>\r
+    <li><a href="http://www.ilmainen-sanakirja.com/">sanakirja</a></li>\r
+    <li>株式会社ウェッジ</li>\r
+\r
+    <li>Trendmetrix Software</li>\r
+    <li>Andrius Povilavicius</li>\r
+    <li><a href="http://oss.digirati.com.br/">OSS by Digirati</a></li>\r
+    <li>Lets Go Banners, Inc.</li>\r
+    <li><a href="http://www.wailani.co.jp/cms/">Wailani SCUBA Diving Shop</a></li>\r
+    <li><a href="http://www.mathewbrowne.com">Mathew Browne</a></li>\r
+\r
+    <li><a href="http://digilondon.com">DigiLondon</a></li>\r
+    <li>Martin Samanek</li>\r
+    <li>Kumiko Miyata</li>\r
+    <li><a href="http://sena-cos.com/blog/">SenaCos</a></li>\r
+    <li><a href="http://www.copywriting911.com/" rel="nofollow">Copywriting</a></li>\r
+    <li><a href="http://www.esrating.com/" rel="nofollow">ESRating</a></li>\r
+\r
+    <li><a href="http://blog.gilmalonzo.com/">Help The World Help You</a></li>\r
+    <li><a href="http://review.kmlog.com/">Shoichi Tanaka</a></li>\r
+    <li>Makoto Sata</li>\r
+    <li><a href="http://www.mywebhit.com">Sergey Rusak</a></li>\r
+    <li><a href="http://hexu.info/">HEXU</a></li>\r
+    <li>Jason Juric</li>\r
+\r
+    <li><a href="http://www.blog.bikeusa.cz/">Bike USA</a>\r
+    <li><a href="http://arudius.sourceforge.net/">Arudius</a></li>\r
+    <li><a href="http://www.prioriti.in/webinfo/">Prioriti</a></li>\r
+    <li><a href="http://www.couol.com/">Thomas Metters</a></li>\r
+    <li><a href="http://www.g-i-b-f.de/">Amerikanische Bulldogge Forum</a></li>\r
+    <li><a href="http://www.albablu.it/">Albablu.it</a></li>\r
+\r
+    <li><a href="http://noppo.info/">Toru Kobayashi</a></li>\r
+    <li><a href="http://www.toolsfordepression.com/">Tools for Depression</a></li>\r
+    <li><a href="http://www.las-vegas-tv.de/">Las Vegas TV-Serie</a></li>\r
+    <li>David White</li>\r
+    <li>Walter Williams</li>\r
+    <li>Kenn R Stevens</li>\r
+\r
+    <li>Artur Pasikowski</li>\r
+    <li><a href="http://www.brainalmeltdown.net/cybbis/blog">Cybbis</a></li>\r
+    <li><a href="http://www.gamingwhore.com/">Gaming Whore</a></li>\r
+    <li><a href="http://www.coldscripts.com/PHP/Scripts/Content-Management/Personal-Publishing/Blogs/">ColdScripts.com</a></li>\r
+    <li>Munekatsu Takamura</li>\r
+    <li><a href="http://www.gratisblog.com/">GratisBlog.com</a></li>\r
+\r
+    <li><a href="http://www.strickforum.de/weblog/">Strickforum Blog</a></li>\r
+    <li>Nicola Pieroni</li>\r
+    <li><a href="http://www.laberflash.de/">herr grotesk</a></li>\r
+    <li><a href="http://www.westchesterfishing.com/">WestchesterFishing.com</a></li>\r
+    <li><a href="http://www.heinecke.com/blog">Hasko Heinecke</a></li>\r
+    <li><a href="http://matthewblog.com/">Matthew Wilson</a></li>\r
+\r
+    <li><a href="http://www.pokeefe.com/">Patrick O\\\'Keefe</a></li>\r
+    <li><a href="http://carfilhiot.co.uk/">Carfilhiot</a></li>\r
+    <li>Markus Kunz</li>\r
+    <li><a href="http://www.cphere.net/">Nadim Kobeissi</a></li>\r
+    <li><a href="http://www.webpagefx.com/">Webpagefx: Website Design Harrisburg</a></li>\r
+    <li>Yoshikazu Nakajima</li>\r
+\r
+    <li><a href="http://www.jamier.net/">Jamie R. Rytlewski</a></li>\r
+    <li>Madolyn Piper</li>\r
+    <li><a href="http://www.mixburnrip.de/">Janko Roettgers</a></li>\r
+    <li>Lukas Loesche</li>\r
+    <li><a href="http://www.brandweerdematen.nl/">Brandweer de Maten</a></li>\r
+    <li>Andy Fuchs</li>\r
+\r
+    <li><a href="http://www.sumoforce.com/">Sumoforce</a></li>\r
+    <li><a href="http://love.silverindigo.com/">Al\\\'ky\\\'mie</a></li>\r
+    <li><a href="http://www.pejo.us/">Peter Johnson</a></li>\r
+    <li><a href="http://www.triv.nl/">TriV Internet Solutions</a></li>\r
+    <li>Margaret Stowe</li>\r
+    <li><a href="http://www.zenkey.org/">zenkey dot org</a></li>\r
+\r
+    <li><a href="http://www.golb.org/">Blots of Info</a></li>\r
+    <li><a href="http://www.zonderpartij.be/">Rudi De Kerpel</a></li>\r
+    <li><a href="http://staylorx.com/">Steve Taylor</a></li>\r
+    <li><a href="http://lmhcave.com/">Malcolm Farnsworth</a></li>\r
+    <li>Birgit Kellner</li>\r
+    <li><a href="http://www.tobiasly.com/">Toby Johnson</a></li>\r
+\r
+    <li><a href="http://www.kapingamarangi.be/">Kapingamarangi</a></li>\r
+    <li><a href="http://www.pallalink.net/">Pallalink</a></li>\r
+    <li><a href="http://publiustx.net/">PubliusTX Weblog</a></li>\r
+    <li><a href="http://www.reductioadabsurdum.net/">Reductio Ad Absurdum</a></li>\r
+    <li><a href="http://www.gagaweb.org/">GagaWeb</a></li>\r
+    <li><a href="http://www.videokid.be/">Videokid</a></li>\r
+\r
+    <li>Jon Marr</li>\r
+    <li><a href="http://www.docblog.org/">Luigi Cristiano</a></li>\r
+    <li>J Keith Lehman</li>\r
+    <li>Bohemian Cachet</li>\r
+    <li>Jesus Mourazos</li>\r
+    <li><a href="http://ltp-design.com/">Stephen Jones</a></li>\r
+\r
+    <li>Alwin Hawkins</li>\r
+    <li><a href="http://jstigall.bloomington.in.us">Justin Stigall</a></li>\r
+    <li><a href="http://www.itismylife.com/">It is my life</a></li>\r
+    <li>Greg Morrill</li>\r
+    <li><a href="http://www.dutchsubmarines.com/">Dutch Submarines</a></li>\r
+    <li><a href="http://www.7thwatch.com/">Seventh Watch Design Studios</a></li>        \r
+    <li><a href="http://www.macnet2.com/">MacNetv2</a></li> \r
+    <li>Richard Noordhof</li>\r
+\r
+    <li><a href="http://www.usaflightinsurance.com/" rel="nofollow">USF</a></li>\r
+    <li><a href="http://www.roses-nationwide.com/" rel="nofollow">Flower Delivery</a></li>\r
+    <li><a href="http://www.hbstrippers.com/" rel="nofollow">Hunks &amp; Babes Inc.</a></li>\r
+    <li><a href="http://www.patrickgavin.com/" rel="nofollow">Search Engine Optimization</a></li>\r
+\r
+    <li><a href="http://www.OttawaDivorce.com/" rel="nofollow">OttawaDivorce</a></li>\r
+    <li><a href="http://www.envisupply.com/" rel="nofollow">Envisupply: Environmental Rentals</a></li>  \r
+    <li><a href="http://www.lsasbestoslaw.com/" rel="nofollow">L&amp;S Mesothelioma Firm</a></li>\r
+    <li><a href="http://www.european-wall-tapestries.com/" rel="nofollow">European Wall Tapestries</a>\r
+    <li><a href="http://www.batteryvalues.com/" rel="nofollow">Battery Values</a>\r
+    <li><a href="http://www.seobook.com/" rel="nofollow">SEO Book</a></li>\r
+\r
+    <li><a href="http://oha.nu/" rel="nofollow">One-Handed Apps</a></li>\r
+    <li><a href="http://www.iceposter.com/" rel="nofollow">Dream Prints, Inc.</a></li>  \r
+    <li><a href="http://www.zergdir.com/" rel="nofollow">Zerg Directory</a>\r
+    <li><a href="http://www.kriegsgefangenschaft.at/" rel="nofollow">Kriegsgefangenschaft</a></li>\r
+    <li><a href="http://www.travel-plus-rewards.com/" rel="nofollow">Reward Credit Cards</a></li>\r
+    <li><a href="http://www.zionsvillecandlecompany.com/" rel="nofollow">Chris Anderson</a></li>\r
+\r
+    <li>Forex25</li>\r
+    <li><a href="http://www.dubaishortstay.com" rel="nofollow"> Dubai Short Stay</a></li>\r
+</ul>\r
+\r
+Nucleusが気に入りましたか? <a href="http://www.hotscripts.com/Detailed/13368.html?RID=nucleus@demuynck.org">HotScripts</a>や<a href="http://www.opensourcecms.com/index.php?option=content&task=view&id=145">opensourceCMS</a>での投票をお願いします。<br />\r
+<br />\r
+<b>ライセンス</b><br />\r
+<br />\r
+私たちがフリー・ソフトウェアについて口にする場合は自由のことに言及しているのであって、価格のことではありません。私たちの<a href="http://www.gnu.org/licenses/gpl.html">GNU General Public Licenses(一般公有使用許諾書)</a>(<a href="http://www.gnu.org/licenses/gpl.ja.html">日本語訳(参考)</a>と<a href="http://www.atmarkit.co.jp/aig/03linux/gpl.html">概要</a>)は、フリー・ソフトウェアの複製物を自由に頒布できること(そして、望むならこのサービスに対して対価を請求できること)、ソース・コードを実際に受け取るか希望しさえすれば入手することが可能であること、入手したソフトウェアを変更したり新しいフリー・プログラムの一部として使用できること、以上の各内容を行なうことができるということをユーザ自身が知っていることを実現できるようにデザインされています。');\r
+\r
+?>
\ No newline at end of file
diff --git a/utf8/license.txt b/utf8/license.txt
new file mode 100755 (executable)
index 0000000..dcfa4c2
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/utf8/media/.htaccess b/utf8/media/.htaccess
new file mode 100644 (file)
index 0000000..da274e3
--- /dev/null
@@ -0,0 +1,11 @@
+# You may modify following line to avoid script execution completely.\r
+# In environment where multiple users are using Nucleus,\r
+# be sure that any script cannot be executed due to your server setting.\r
+# Note that this isn't needed when all members are super-admin.\r
+# スクリプトの実行を避ける為に、適宜追加してください。\r
+# サーバの設定によっては、アップロードされたファイルをスクリプトとして\r
+# 実行される恐れがありますので、複数人でNucleusを運用している場合は特に\r
+# 注意が必要です。\r
+#\r
+\r
+RemoveHandler php cgi pl py rb shtml
\ No newline at end of file
diff --git a/utf8/media/readme.txt b/utf8/media/readme.txt
new file mode 100755 (executable)
index 0000000..73b4d8a
--- /dev/null
@@ -0,0 +1,17 @@
+Nucleus Media ディレクトリ
+-----------------------
+
+アップロードされた画像等のファイルは、最終的にこのディレクトリに移動されます。
+
+
+サブディレクトリについて:
+
+* 数字 (例 /media/1/)
+
+アップロードしたメンバーだけがファイルを使用できます。(ディレクトリ名はメンバーIDになります)
+
+* 数字以外 (例 /media/common/)
+
+誰が使ってもいいファイルを保存しておく為のディレクトリ。
+ディレクトリを作ってパーミッションを777等にしておくだけで、新しいコレクションとして追加されます。
+
diff --git a/utf8/nucleus/bookmarklet.php b/utf8/nucleus/bookmarklet.php
new file mode 100755 (executable)
index 0000000..ad38d2f
--- /dev/null
@@ -0,0 +1,372 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * This script allows adding items to Nucleus through bookmarklets. The member must be logged in
+ * in order to use this.
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: bookmarklet.php,v 1.9.2.1 2007/09/07 07:16:39 kimitake Exp $
+ */
+
+// bookmarklet is part of admin area (might need XML-RPC)
+$CONF = array();
+$CONF['UsingAdminArea'] = 1;
+
+// include all classes and config data
+include('../config.php');
+
+$action = requestVar('action');
+
+if ($action == 'contextmenucode') {
+       bm_doContextMenuCode();
+       exit;
+}
+
+if (!$member->isLoggedIn() ) {
+       bm_loginAndPassThrough();
+       exit;
+}
+
+// on successfull login
+if ( ($action == 'login') && ($member->isLoggedIn() ) ) {
+       $action = requestVar('nextaction');
+}
+
+if ($action == '') {
+       $action = 'add';
+}
+
+sendContentType('text/html', 'bookmarklet-' . $action);
+
+// check ticket
+$action = strtolower($action);
+$aActionsNotToCheck = array('login', 'add', 'edit');
+
+if (!in_array($action, $aActionsNotToCheck) ) {
+
+       if (!$manager->checkTicket() ) {
+               bm_doError(_ERROR_BADTICKET);
+       }
+
+}
+
+// find out what to do
+switch ($action) {
+       // adds the item for real
+       case 'additem':
+               bm_doAddItem();
+               break;
+
+               // shows the edit item form
+       case 'edit':
+               bm_doEditForm();
+               break;
+
+               // edits the item for real
+       case 'edititem':
+               bm_doEditItem();
+               break;
+
+               // on login, 'action' gets changed to 'nextaction'
+       case 'login':
+               bm_doError(_BOOKMARKLET_ERROR_SOMETHINGWRONG);
+               break;
+
+               // shows the fill in form
+       case 'add':
+       default:
+               bm_doShowForm();
+               break;
+}
+
+function bm_doAddItem() {
+       global $member, $manager, $CONF;
+
+       $manager->loadClass('ITEM');
+       $result = ITEM::createFromRequest();
+
+       if ($result['status'] == 'error') {
+               bm_doError($result['message']);
+       }
+
+       $blogid = getBlogIDFromItemID($result['itemid']);
+       $blog =& $manager->getBlog($blogid);
+
+       if ($result['status'] == 'newcategory') {
+               $href      = 'index.php?action=categoryedit&amp;blogid=' . $blogid . '&amp;catid=' . $result['catid'];
+               $onclick   = 'if (event &amp;&amp; event.preventDefault) event.preventDefault(); window.open(this.href); return false;';
+               $title     = _BOOKMARKLET_NEW_WINDOW;
+               $aTag      = ' <a href="' . $href . '" onclick="' . $onclick . '" title="' . $title . '">';
+               $message   = _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . '</a>';
+               $extrahead = '';
+       } else {
+               $message = _ITEM_ADDED;
+               $extrahead = '';
+       }
+
+       bm_message(_ITEM_ADDED, _ITEM_ADDED, $message,$extrahead);
+}
+
+function bm_doEditItem() {
+       global $member, $manager, $CONF;
+
+       $itemid = intRequestVar('itemid');
+       $catid = postVar('catid');
+
+       // only allow if user is allowed to alter item
+       if (!$member->canUpdateItem($itemid, $catid) ) {
+               bm_doError(_ERROR_DISALLOWED);
+       }
+
+       $body = postVar('body');
+       $title = postVar('title');
+       $more = postVar('more');
+       $closed = intPostVar('closed');
+       $actiontype = postVar('actiontype');
+       $draftid = intPostVar('draftid');
+
+       // redirect to admin area on delete (has delete confirmation)
+       if ($actiontype == 'delete') {
+               redirect('index.php?action=itemdelete&itemid=' . $itemid);
+               exit;
+       }
+
+       // create new category if needed (only on edit/changedate)
+       if (strstr($catid,'newcat') ) {
+               // get blogid
+               list($blogid) = sscanf($catid, "newcat-%d");
+
+               // create
+               $blog =& $manager->getBlog($blogid);
+               $catid = $blog->createNewCategory();
+
+               // show error when sth goes wrong
+               if (!$catid) {
+                       bm_doError(_BOOKMARKLET_ERROR_COULDNTNEWCAT);
+               }
+       }
+
+       // only edit action is allowed for bookmarklet edit
+       switch ($actiontype) {
+               case 'changedate':
+                       $publish = 1;
+                       $wasdraft = 0;
+                       $timestamp = mktime(intPostVar('hour'), intPostVar('minutes'), 0, intPostVar('month'), intPostVar('day'), intPostVar('year') );
+                       break;
+               case 'edit':
+                       $publish = 1;
+                       $wasdraft = 0;
+                       $timestamp = 0;
+                       break;
+               case 'backtodrafts':
+                       $publish = 0;
+                       $wasdraft = 0;
+                       $timestamp = 0;
+                       break;
+               default:
+                       bm_doError(_BOOKMARKLET_ERROR_SOMETHINGWRONG);
+       }
+
+       // update item for real
+       ITEM::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp);
+
+       if ($draftid > 0) {
+               ITEM::delete($draftid);
+       }
+
+       // show success message
+       if ($catid != intPostVar('catid') ) {
+               $href      = 'index.php?action=categoryedit&amp;blogid=' . $blog->getID() . '&amp;catid=' . $catid;
+               $onclick   = 'if (event &amp;&amp; event.preventDefault) event.preventDefault(); window.open(this.href); return false;';
+               $title     = _BOOKMARKLET_NEW_WINDOW;
+               $aTag      = ' <a href="' . $href . '" onclick="' . $onclick . '" title="' . $title . '">';
+               $message   = _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . '</a>';
+               bm_message(_ITEM_UPDATED, _ITEM_UPDATED, _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . '</a>', '');
+       } else {
+               bm_message(_ITEM_UPDATED, _ITEM_UPDATED, _ITEM_UPDATED, '');
+       }
+}
+
+function bm_loginAndPassThrough() {
+
+       $blogid = intRequestVar('blogid');
+       $log_text = requestVar('logtext');
+       $log_link = requestVar('loglink');
+       $log_linktitle = requestVar('loglinktitle');
+
+       ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html <?php echo _HTML_XML_NAME_SPACE_AND_LANG_CODE; ?>>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />
+<title>Nucleus</title>
+       <?php bm_style(); ?>
+</head>
+<body>
+<h1><?php echo _LOGIN_PLEASE ?></h1>
+
+<form method="post" action="bookmarklet.php">
+       <p>
+               <input name="action" value="login" type="hidden" />
+               <input name="blogid" value="<?php echo htmlspecialchars($blogid); ?>" type="hidden" />
+               <input name="logtext" value="<?php echo htmlspecialchars($log_text); ?>" type="hidden" />
+               <input name="loglink" value="<?php echo htmlspecialchars($log_link); ?>" type="hidden" />
+               <input name="loglinktitle" value="<?php echo htmlspecialchars($log_linktitle); ?>" type="hidden" />
+               <?php echo _LOGINFORM_NAME ?>
+               <br /><input name="login" />
+               <br /><?php echo _LOGINFORM_PWD ?>
+               <br /><input name="password" type="password" />
+               <br /><br />
+               <br /><input type="submit" value="<?php echo _LOGIN ?>" />
+       </p>
+</form>
+<p><a href="bookmarklet.php" onclick="window.close();"><?php echo _POPUP_CLOSE ?></a></p>
+</body>
+</html>
+       <?php
+}
+
+function bm_doShowForm() {
+       global $member;
+
+       $blogid = intRequestVar('blogid');
+       $log_text = trim(requestVar('logtext'));
+       $log_link = requestVar('loglink');
+       $log_linktitle = requestVar('loglinktitle');
+
+       $log_text = uniDecode($log_text,_CHARSET);
+       $log_linktitle = uniDecode($log_linktitle,_CHARSET);
+
+       if (!BLOG::existsID($blogid) ) {
+               bm_doError(_ERROR_NOSUCHBLOG);
+       }
+
+       if (!$member->isTeamMember($blogid) ) {
+               bm_doError(_ERROR_NOTONTEAM);
+       }
+
+       $logje = '';
+
+       if ($log_text) {
+               $logje .= '<blockquote><div>"' . htmlspecialchars($log_text) . '"</div></blockquote>' . "\n";
+       }
+
+       if (!$log_linktitle) {
+               $log_linktitle = $log_link;
+       }
+
+       if ($log_link) {
+               $logje .= '<a href="' . htmlspecialchars($log_link) . '">' . htmlspecialchars($log_linktitle) . '</a>';
+       }
+
+       $item['body'] = $logje;
+       $item['title'] = htmlspecialchars($log_linktitle);
+
+       $factory = new PAGEFACTORY($blogid);
+       $factory->createAddForm('bookmarklet', $item);
+}
+
+function bm_doEditForm() {
+       global $member, $manager;
+
+       $itemid = intRequestVar('itemid');
+
+       if (!$manager->existsItem($itemid, 0, 0) ) {
+               bm_doError(_ERROR_NOSUCHITEM);
+       }
+
+       if (!$member->canAlterItem($itemid) ) {
+               bm_doError(_ERROR_DISALLOWED);
+       }
+
+       $item =& $manager->getItem($itemid, 1, 1);
+       $blog =& $manager->getBlog(getBlogIDFromItemID($itemid) );
+
+       $manager->notify('PrepareItemForEdit', array('item' => &$item) );
+
+       if ($blog->convertBreaks() ) {
+               $item['body'] = removeBreaks($item['body']);
+               $item['more'] = removeBreaks($item['more']);
+       }
+
+       $formfactory = new PAGEFACTORY($blog->getID() );
+       $formfactory->createEditForm('bookmarklet', $item);
+}
+
+function bm_doError($msg) {
+       bm_message(_ERROR, _ERRORMSG, $msg);
+       die;
+}
+
+function bm_message($title, $head, $msg, $extrahead = '') {
+       ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html <?php echo _HTML_XML_NAME_SPACE_AND_LANG_CODE; ?>>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />
+<title><?php echo $title ?></title>
+       <?php bm_style(); ?>
+       <?php echo $extrahead; ?>
+</head>
+<body>
+<h1><?php echo $head; ?></h1>
+<p><?php echo $msg; ?></p>
+<p><a href="bookmarklet.php" onclick="window.close();window.opener.location.reload();"><?php echo _POPUP_CLOSE ?></a></p>
+</body>
+</html>
+
+       <?php
+}
+
+function bm_style() {
+       echo '<link rel="stylesheet" type="text/css" href="styles/bookmarklet.css" />';
+       echo '<link rel="stylesheet" type="text/css" href="styles/addedit.css" />';
+}
+
+function bm_doContextMenuCode() {
+       global $CONF;
+       ?>
+<script type="text/javascript" defer="defer">
+doc = external.menuArguments.document;
+lt = escape(doc.selection.createRange().text);
+loglink = escape(external.menuArguments.location.href);
+loglinktitle = escape(doc.title);
+wingm = window.open('<?php echo $CONF['AdminURL']?>bookmarklet.php?blogid=<?php echo intGetVar('blogid')?>&logtext=' + lt + '&loglink=' + loglink + '&loglinktitle=' + loglinktitle, 'nucleusbm', 'scrollbars=yes,width=710,height=500,left=10,top=10,status=yes,resizable=yes');
+wingm.focus();
+</script>
+       <?php
+}
+
+function uniDecode($str,$charcode){
+       $text = preg_replace_callback("/%u[0-9A-Za-z]{4}/", 'toUtf8', $str);
+       return mb_convert_encoding($text, $charcode, 'UTF-8');
+}
+function toUtf8($ar){
+       foreach($ar as $val){
+               $val = intval(substr($val,2),16);
+               if($val < 0x7F){        // 0000-007F
+                       $c .= chr($val);
+               }elseif($val < 0x800) { // 0080-0800
+                       $c .= chr(0xC0 | ($val / 64));
+                       $c .= chr(0x80 | ($val % 64));
+               }else{                // 0800-FFFF
+                       $c .= chr(0xE0 | (($val / 64) / 64));
+                       $c .= chr(0x80 | (($val / 64) % 64));
+                       $c .= chr(0x80 | ($val % 64));
+               }
+       }
+       return $c;
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/documentation/devdocs/custominstall.html b/utf8/nucleus/documentation/devdocs/custominstall.html
new file mode 100755 (executable)
index 0000000..15e5322
--- /dev/null
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
+<head>\r
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+       -->\r
+       <!-- $Id$ -->\r
+       <!-- $NucleusJP: custominstall.html,v 1.5 2006/07/12 07:11:46 kimitake Exp $ -->\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+    <link rel="index" href="./index.html" />\r
+       <title>Nucleus - インストールスクリプトのカスタマイズ</title>\r
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
+       <script src="http://www.google.com/jsapi"></script>\r
+       <script type="text/javascript">\r
+               google.load("jquery", "1");\r
+               google.setOnLoadCallback(function() {\r
+                       $.getScript("javascript/fontsizeChanger.js");\r
+               });\r
+       </script>\r
+</head>\r
+<body>\r
+<div id="fontSizeChanger">\r
+<a href="#top" id="f_small">小</a>\r
+<a href="#top" id="f_medium">中</a>\r
+<a href="#top" id="f_large">大</a>\r
+</div>\r
+<div id="body">\r
+\r
+<div class="heading">\r
+インストールスクリプトのカスタマイズ\r
+</div>\r
+\r
+<p class="note">注:この機能はバージョン2.2以降のものです。</p>\r
+\r
+<h1>イントロダクション</h1>\r
+\r
+<p>\r
+<a href="index.html">開発者向けドキュメントの目次へ戻る</a>\r
+</p>\r
+\r
+<p>このドキュメントにはNucleusのインストール・スクリプトをどのようにカスタムするかという情報が書かれています。二つの方法でカスタマイズが可能です:</p>\r
+\r
+<ol>\r
+       <li>スキンの自動インストール</li>\r
+       <li>プラグインの自動インストール</li>\r
+</ol>\r
+\r
+<h1>設定</h1>\r
+\r
+<p><code>install.php</code>をエディタで開き、次のコードを探してください:</p>\r
+\r
+<pre><code>    // array with names of plugins to install. Plugin files must be present in the nucleus/plugin/\r
+    // directory.\r
+    //\r
+    // example:\r
+    //     array('NP_TrackBack', 'NP_MemberGoodies')\r
+    $aConfPlugsToInstall = array();\r
+\r
+\r
+    // array with skins to install. skins must be present under the skins/ directory with\r
+    // a subdirectory having the same name that contains a skinbackup.xml file\r
+    //\r
+    // example:\r
+    //     array('base','rsd')\r
+    $aConfSkinsToImport = array();</code></pre>\r
+\r
+<p>やるべき事はこのコードを変更するだけです:自動インストールしたいプラグインとスキンの名前を、例のような配列リストにしてください。</p>\r
+\r
+<h1>ファイルの取り込み</h1>\r
+\r
+<p>設定を変更した次は、ディストリビューションにファイルを追加する必要があります。</p>\r
+\r
+<h2>プラグインとスキン</h2>\r
+\r
+<p>プラグインは、<code>nucleus/plugins/</code>ディレクトリにファイルをおいてください。プラグインを手動でインストールする場合にするのと全く同じです。</p>\r
+\r
+<p>スキンは、手動でインポートする時と同様に、<code>skins/</code>直下にディレクトリをおいてください。<code>skinbackup.xml</code>をそこに入れておくことをお忘れ無く。</p>\r
+\r
+<h1>忘れてはいけないこと</h1>\r
+\r
+<p>再配布する前に、カスタマイズされたインストールスクリプトをテストすることを忘れないでください。</p>\r
+\r
+</div>\r
+\r
+</body>\r
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/documentation/devdocs/index.html b/utf8/nucleus/documentation/devdocs/index.html
new file mode 100755 (executable)
index 0000000..3fe8fb9
--- /dev/null
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
+<head>\r
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+       -->\r
+       <!-- $Id$ -->\r
+       <!-- $NucleusJP: index.html,v 1.5 2006/07/12 07:11:46 kimitake Exp $ -->\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+    <meta http-equiv="Content-Style-Type" content="text/css" />\r
+    <meta http-equiv="Content-Script-Type" content="text/javascript" />\r
+    <link rel="index" href="./index.html" />\r
+       <title>Nucleus - 開発者用ドキュメント</title>\r
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
+    <style type="text/css">\r
+        strong {\r
+            font-weight: bold;\r
+        }\r
+        em {\r
+            font-style: italic;\r
+        }\r
+    </style>\r
+       <script src="http://www.google.com/jsapi"></script>\r
+       <script type="text/javascript">\r
+               google.load("jquery", "1");\r
+               google.setOnLoadCallback(function() {\r
+                       $.getScript("javascript/fontsizeChanger.js");\r
+               });\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="fontSizeChanger">\r
+       <a href="#top" id="f_small">小</a>\r
+       <a href="#top" id="f_medium">中</a>\r
+       <a href="#top" id="f_large">大</a>\r
+       </div>\r
+<div id="body">\r
+\r
+<div class="heading">\r
+開発者マニュアル\r
+<em>2009年2月7日</em>\r
+</div>\r
+\r
+<h1>はじめに</h1>\r
+\r
+<p>\r
+このマニュアルにはNucleusの開発者に向けた情報が記載されています。\r
+</p>\r
+\r
+<h1>目次</h1>\r
+\r
+<ul>\r
+       <li><a href="xmlrpc.html">XML-RPC インターフェース</a></li>\r
+       <li><a href="plugins.html">Nucleus プラグイン API</a></li>\r
+       <li><a href="custominstall.html">インストールスクリプトのカスタマイズ</a></li>        \r
+       <li><a href="sqltables.html">データベースの構造</a></li>\r
+</ul>\r
+\r
+</div>\r
+\r
+</body>\r
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/documentation/devdocs/javascript/fontsizeChanger.js b/utf8/nucleus/documentation/devdocs/javascript/fontsizeChanger.js
new file mode 100644 (file)
index 0000000..50659f0
--- /dev/null
@@ -0,0 +1,11 @@
+$(function(){\r
+       $("#fontSizeChanger > a").click(function() {\r
+               fontSizeChange($(this).attr('id'), this);\r
+       });\r
+});\r
+\r
+function fontSizeChange(size, elem) {\r
+       $("#body").css("font-size", size.substr(2));\r
+       $("#fontSizeChanger > a").css("font-weight", "normal");\r
+       $(elem).css("font-weight", "bold");\r
+}\r
diff --git a/utf8/nucleus/documentation/devdocs/plugins.html b/utf8/nucleus/documentation/devdocs/plugins.html
new file mode 100755 (executable)
index 0000000..4350f52
--- /dev/null
@@ -0,0 +1,2532 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
+<head>\r
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+       -->\r
+       <!-- $Id$ -->\r
+       <!-- $NucleusJP: plugins.html,v 1.9 2007/02/04 06:28:45 kimitake Exp $ -->\r
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+    <meta http-equiv="Content-Style-Type" content="text/css" />\r
+    <meta http-equiv="Content-Script-Type" content="text/javascript" />\r
+    <link rel="index" href="./index.html" />\r
+    <title>Nucleus - プラグイン API</title>\r
+    <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
+    <style type="text/css">\r
+        /* refence parameters (greenish) */\r
+        .ref {\r
+            background-color: #c9f2d4;\r
+            color: #444;\r
+            padding-left:5px;\r
+            letter-spacing:1px;\r
+        }\r
+\r
+        /* object parameters */\r
+        .obj {\r
+            color: #230bb7;\r
+            font-style: italic;\r
+            padding-left:5px;\r
+            letter-spacing:1px;\r
+        }\r
+        .obj:after {\r
+            content: " (object)";\r
+        }\r
+\r
+        /* read-only parameters (non-ref; reddish) */\r
+        .ro {\r
+            background-color: #ffddce;\r
+            color: #444;\r
+            padding-left:5px;\r
+            letter-spacing:1px;\r
+        }\r
+        td ul {\r
+            list-style-image:none;\r
+            list-style-type:none;\r
+            padding:0;\r
+            margin:0;\r
+        }\r
+    </style>\r
+       <script src="http://www.google.com/jsapi"></script>\r
+       <script type="text/javascript">\r
+               google.load("jquery", "1");\r
+               google.setOnLoadCallback(function() {\r
+                       $.getScript("javascript/fontsizeChanger.js");\r
+               });\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="fontSizeChanger">\r
+       <a href="#top" id="f_small">小</a>\r
+       <a href="#top" id="f_medium">中</a>\r
+       <a href="#top" id="f_large">大</a>\r
+       </div>\r
+<div id="body">\r
+\r
+<div class="heading">\r
+<a id="top" name="top">プラグイン API</a>\r
+<em>2009年2月6日</em>\r
+</div>\r
+\r
+<div class="note-trans"><strong>訳者注:</strong> \r
+    <ul>\r
+        <li>このドキュメントの原文は以下のURLにあります。<br />\r
+         <a href="http://nucleuscms.org/documentation/devdocs/plugins.html">http://nucleuscms.org/documentation/devdocs/plugins.html</a></li>\r
+        <li>誤訳にお気づきの方は<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=7">NucleusCMS日本語フォーラム</a>までご連絡いただけると助かります。</li>\r
+    </ul>\r
+</div>\r
+\r
+<div class="note"><strong>注:</strong> \r
+    <ul>\r
+        <li>このドキュメントは基本的なプラグインの書き方についての情報を提供しています。さらに質問がある方は <a href="http://forum.nucleuscms.org/viewforum.php?f=10">Plugin\r
+      Development Forum</a> (<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=5">日本語フォーラム</a>)をご覧ください。</li>\r
+        <li>Nucleusバージョン1.5以降に導入されたメソッドとイベントには、導入時のバージョン情報を付記しています。それらの機能を利用するときは、<code>getMinNucleusVersion</code> を適切に設定するのを忘れないでください。</li>\r
+    </ul>\r
+</div>\r
+\r
+<h1>はじめに</h1>\r
+\r
+<p>\r
+<a href="./index.html">開発者向けドキュメントの目次へ戻る</a>\r
+</p>\r
+\r
+<p>\r
+このドキュメントはNucleusプラグインの作り方についての解説です。 \r
+</p>\r
+\r
+<h1><a id="toc" name="toc">目次</a></h1>\r
+\r
+<ul>\r
+    <li><a href="#introduction">イントロダクション</a></li>\r
+    <li><a href="#firstplug">はじめてプラグインを書いてみる</a></li>\r
+    <li><a href="#nucleusplugin"><code>NucleusPlugin</code> クラスの概要</a></li>\r
+    <li><a href="#skinvars"><code>&lt;%plugin(...)%&gt;</code> スキン変数</a></li>\r
+    <li><a href="#templatevars"><code>&lt;%plugin(...)%&gt;</code> テンプレート変数</a></li>    \r
+    <li><a href="#actions"><code>action.php</code> を使ったアクション</a></li>\r
+    <li><a href="#events">イベントとイベント登録の仕方</a></li>\r
+    <li><a href="#options">オプションを保存する</a></li>\r
+    <li><a href="#tables">データベース・テーブル</a></li>\r
+    <li><a href="#admin">プラグイン管理エリアの提供</a></li>\r
+    <li><a href="#help">ヘルプページの提供</a></li>\r
+    <li><a href="#dependency">プラグイン依存チェック</a></li>\r
+       <li><a href="#internationalization">プラグインの国際化</a></li>\r
+       <li><a href="#skinvar-formatting">スキン変数の出力の書式</a></li>\r
+       <li><a href="#additional-reading">追記事項</a></li>\r
+<!--    <li><a href="#parser">Using the <code>PARSER</code> class</a></li>\r
+    <li><a href="#"></a></li>\r
+    <li><a href="#"></a></li>\r
+    <li><a href="#"></a></li>-->\r
+</ul>\r
+\r
+<h1>イントロダクション <a id="introduction" name="introduction" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+Nucleusプラグインによって、誰もがNucleusの提供する機能を、Nucleus内部のPHPコードを変更することなく拡張することができます。プラグインはあるメソッドを実装したシンプルなPHPスクリプトで、Nucleusユーザー同士で簡単に交換することができます。インストールは簡単で、プラグインディレクトリにファイルをアップし、Nucleusにそれを認識させるだけです。\r
+</p>\r
+\r
+<p>\r
+プラグインの利点は以下のとおりです。\r
+</p>\r
+\r
+<ul>\r
+    <li>実装について詳しくしらなくてもNucleusフレームワークに簡単に機能を追加できる</li>\r
+    <li>必要なプラグインだけをインストールでき、ページ生成にかかる時間を節約できる</li>\r
+</ul>\r
+\r
+<p>\r
+すべてのプラグインファイルは <code>config.php</code> に記述されたディレクトリに置く必要があります。一般的に、それは <code>/your/path/nucleus/plugins/</code>  になるでしょう。プラグインファイル名は <code>NP<em>_name</em>.php</code> という形式を用いることにより認識されます。プラグインによっては、追加ファイルを格納する同名のサブディレクトリや、管理エリアを必要とします。\r
+</p>\r
+\r
+<div class="note">\r
+<strong>注:</strong> プラグイン名は大文字・小文字を識別しますので、<code>Np_</code> や <code>np_</code> ではなく、<code>NP_</code> で始まることに気をつけてください。またプラグインがサブディレクトリを使用する場合は、サブディレクトリの名称は<em>すべて小文字にします</em>。\r
+</div>\r
+\r
+\r
+\r
+\r
+<h1>はじめてプラグインを書いてみる<a id="firstplug" name="firstplug" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+では、シンプルなプラグインを書いてみましょう。基本的にプラグインは、あらかじめ定義された <code>NucleusPlugin</code> クラスを継承したPHPクラスです。以下は<code>HelloWorld</code>プラグインの例です。\r
+</p>\r
+\r
+<pre class="example"><code>&lt;?php\r
+\r
+class NP_HelloWorld extends NucleusPlugin\r
+{\r
+    // プラグインの名前\r
+    function getName()\r
+    {\r
+        return 'Hello World';\r
+    }\r
+\r
+    // プラグインの作者\r
+    function getAuthor()\r
+    {\r
+        return 'Wouter Demuynck';\r
+    }\r
+\r
+    // プラグインのサイトURL\r
+    // mailto:foo@bar.com の形式も可\r
+    function getURL()\r
+    {\r
+        return 'http://nucleuscms.org/';\r
+    }\r
+\r
+    // プラグインのバージョン\r
+    function getVersion()\r
+    {\r
+        return '1.0';\r
+    }\r
+\r
+    // インストール済みのプラグインリストに表示される説明文\r
+    function getDescription()\r
+    {\r
+        return 'Just a sample plugin.';\r
+    }\r
+\r
+    function doSkinVar($skinType)\r
+    {\r
+        echo 'Hello World!';\r
+    }\r
+\r
+    function supportsFeature ($what)\r
+    {\r
+        switch ($what)\r
+        {\r
+            case 'SqlTablePrefix':\r
+                return 1;\r
+                       case 'SqlApi':\r
+                               return 1;\r
+            default:\r
+                return 0;\r
+        }\r
+    }\r
+\r
+}\r
+?&gt;</code></pre>\r
+\r
+<ol>\r
+    <li>\r
+        このコードをコピーし、 <code>NP_HelloWorld.php</code> と名づけて保存し、プラグインディレクトリに置きます。<em>最後の <code>?&gt;</code> の後や、最初の <code>&lt;?php</code> の前にスペースがないことを確認しましょう</em>。ところでNP は &quot;Nucleus Plugin&quot; って意味ですよ :-) 念のため。\r
+    </li>\r
+    <li>Nucleusの管理画面を開き、<em>Nucleusの管理>プラグインの管理</em>にいきます。</li>\r
+    <li><em>HelloWorld</em> プラグインがインストール可能な状態になっているはずですので、インストールします。すべてがうまくいけば、インストール済みプラグインリストに追加されます。</li>\r
+    <li>\r
+        あなたのスキンの1つを編集し、実際のページに表示する箇所に次の文を挿入します。\r
+<pre class="example"><code>&lt;%HelloWorld%&gt;</code></pre>\r
+        注意:カッコ内の名称 (<code>HelloWorld</code>) は大文字小文字を識別します!\r
+    </li>\r
+    <li>さて、編集したスキンから生成されるページを見てみましょう。プラグイン変数を追加した場所に &quot;Hello World&quot; と見えますね?</li>\r
+</ol>\r
+\r
+<p>\r
+ここまではそれほど難しくなかったと思います。さらに読み進めて理解してください。\r
+</p>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+<h1>NucleusPlugin クラスの概要 <a id="nucleusplugin" name="nucleusplugin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>すべてのプラグインは、<code>NucleusPlugin</code> というPHPクラスを継承しなければなりません。難しそうに聞こえても心配ご無用、大丈夫です。このPHPクラスの継承によって、プラグインに必要なメソッドだけを実装でき、いくつかの補助ファンクションにアクセスでき、つまりはあなたの人生はよりラクになります。</p>\r
+\r
+<p>下記は <code>NucleusPlugin</code> が提供する、再実装可能なメソッドの概要です。このクラス自身のソースコードを見たければ、<code>nucleus/libs/PLUGIN.php</code>にあります。</p>\r
+\r
+<table summary="An overview of the redefinable methods in the class NucleusPlugin">\r
+    <caption><code>NucleusPlugin</code> クラスの概要(再定義可能なメソッド)</caption>\r
+    <tr>\r
+        <th abbr="method">メソッド名</th><th abbr="desc">説明</th>\r
+    </tr>\r
+    <tr>\r
+        <td><code>getName()</code></td>\r
+        <td>プラグイン名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>       \r
+    </tr>\r
+    <tr>\r
+        <td><code>getAuthor()</code></td>\r
+        <td>プラグインの作者名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>     \r
+    </tr>\r
+    <tr>\r
+        <td><code>getURL()</code></td>\r
+        <td>プラグインをダウンロード可能な、またはプラグインの追加情報のあるサイトのURLを返します。そのようなサイトがない場合は作者のメールアドレスへの mailto:リンクが適切です。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>      \r
+    </tr>\r
+    <tr>\r
+        <td><code>getDescription()</code></td>\r
+        <td>プラグインに関する説明文(長文)を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返します。</td>       \r
+    </tr>\r
+    <tr>\r
+        <td><code>getVersion()</code></td>\r
+        <td>プラグインの現在のバージョンを返します。デフォルトは <code>0.0</code> を返します。</td>     \r
+    </tr>\r
+    <tr>\r
+        <td><code>getMinNucleusVersion()</code></td>\r
+        <td>(v2.0b) 最低限必要なNucleusのバージョンを返します。デフォルトは <code>155</code> (v1.55)を返します。後に導入されたプラグイン関連機能を利用している場合は、このファンクションを実装するようお願いします(例: v2.0 =&gt; 200)。ただし、Nucleus v1.55 はこのファンクションを使用しないため、新機能を利用したプラグインが(対応する前のシステムに)インストールされる可能性が残っています。</td>\r
+    </tr>\r
+    <tr>\r
+        <td><code>getMinNucleusPatchLevel()</code></td>\r
+        <td>(v3.1) 最低限必要なNucleusのバージョン(<code>getMinNucleusVersion</code>)での、最低限必要なパッチレベルを返します。デフォルトは <code>0</code> を返します。このファンクションは主に新しいプラグインの機能がNucleusの最新版のパッチによって可能になる場合に用いられます。</td>\r
+    </tr>\r
+    <tr>\r
+        <td><code>init()</code></td>\r
+        <td>プラグインを初期化します。このメソッドはプラグインオブジェクトが生成された直後に呼び出され、<code>plugid</code>属性がセットされます。デフォルトではこのメソッドは何もしません。</td>\r
+    </tr>\r
+    <tr>\r
+        <td><code>doSkinVar($skinType)</code></td>\r
+        <td><code>&lt;%plugin(...)%&gt;</code> スキン変数によってプラグインが呼び出されたときにこのメソッドが呼ばれます。<code>$skinType</code> パラメータはプラグインが呼ばれた場所のスキンタイプに該当します(<code>item</code>, <code>archive</code>, ...)。パラメータが一つしかないことに混乱しないでください。複数パラメータを渡すことも<strong>可能</strong>です。<a href="#skinvars"><code>doSkinVar</code> メソッドの実装に関する詳細情報はこちら</a>。デフォルトではこのメソッドはなにも出力しません。</td>       \r
+    </tr>\r
+    <tr>\r
+        <td><code>doTemplateVar(&amp;$item)</code></td>\r
+        <td>基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(<code>item header/body/footer</code> と <code>dateheader/footer</code>)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして<code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateVar</code> メソッドの実装に関する詳細情報はこちら</a></td>       \r
+    </tr>\r
+    <tr>\r
+        <td><code>doTemplateCommentsVar(&amp;$item, &amp;$comment)</code></td>\r
+        <td>(v2.0b) 基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(コメント部分)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして<code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateCommentsVar</code>メソッドの実装に関する詳細情報はこちら</a></td>\r
+    </tr>\r
+    <tr>\r
+        <td><code>doItemVar(&amp;$item, &amp;$param)</code></td>\r
+        <td>(v3.30) 基本的に <code>doSkinVar</code> と同じですが、今度は<em>投稿した記事</em>内での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。渡される引数のうち<code>&amp;$item</code>は変数が記述されているアイテムのフルオブジェクトを、<code>&amp;$param</code>はプラグインごとの関数のパラメータになります。</td>\r
+    </tr>\r
+    <tr>\r
+        <td><code>doIf($key, $value)</code></td>\r
+        <td>(v3.30) スキン変数 <code>if/ifnot/elseif/elseifnot</code> に対して、プラグイン独自の判断をする事が出来るメソッドです。通常は、<code>$key</code> 変数が <code>$value</code> の値を持っているかを調べて、 <code>true</code> か <code>false</code> を返すことになります。このメソッドをプラグインに実装する場合は、作者は使用方法のドキュメントを書くようにしてください。</td>\r
+    </tr>\r
+    <tr>\r
+        <td><code>doAction($type)</code></td>\r
+        <td>プラグインがユーザーインタラクションを求めたとき、 <code>action.php</code>を介してこのメソッドがそれを与えます。これはNucleus自身が新しいコメントや投票を処理するのに使用するスクリプトです。正しいパラメータを用いることで、プラグインからの <code>doAction</code> メソッドを呼び出せます。<code>$type</code> はオプションのメッセージタイプに該当します。<code>doAction</code> メソッド内で、リクエストからの追加の変数にアクセスできます。デフォルトではこのメソッドがエラーメッセージをトリガーすると<code>'No Such Action'</code>という文字列を返します。<a href="#actions"><code>doAction</code> に関する詳細情報はこちら</a></td>        \r
+    </tr>\r
+    <tr>\r
+        <td><code>install()</code></td>\r
+        <td>このメソッドはプラグインがインストールされた際に呼ばれます。データベース・テーブルの生成やプラグインオプションの生成などの初期化作業を行うことができます。デフォルトではこのメソッドは何もしません。</td>\r
+    </tr>\r
+    <tr>\r
+        <td><code>unInstall()</code></td>\r
+        <td>プラグインがアンインストールされた際に呼ばれます。この時点でデータベースに作られたプラグイン情報を消去すると良いです。デフォルトではこのメソッドは何もしません。</td>\r
+    </tr>\r
+    <tr>\r
+        <td><code>getEventList()</code></td>\r
+        <td>プラグインはイベント登録が可能です。イベントはNucleusが何かアクションを起こすたびに生成されます。たとえば、<code>AddItem</code> イベントは、このイベントを登録しているすべてのプラグインを呼び出します。呼び出されるメソッドは <code>event_AddItem($params)</code>になります。 <code>$params</code> パラメータは、例えば <code>AddItem</code>     の <code>itemid</code> のような、情報フィールドを複数持つ連想配列です。デフォルトではどのイベントにも登録されていないことを示す空の配列を返します。<a href="#events">イベントに関する詳細情報はこちら</a></td>        \r
+    </tr>\r
+    <tr>\r
+        <td><code>getTableList()</code></td>\r
+        <td>このメソッドはプラグインが生成したデータベース・テーブルの配列を返します。これはNucleusが提供するバックアップ機能で利用されるので、プラグインテーブルをバックアップに含めることができます。デフォルトでは空の配列を返します。</td>\r
+    </tr>\r
+    <tr>\r
+        <td><code>hasAdminArea()</code></td>\r
+        <td>プラグインが独自の管理エリアをもつ場合 1 を、そうでない場合 0 を返します。デフォルトでは <code>0</code> を返します。</td>\r
+    </tr>\r
+    <tr>\r
+        <td><code>getPluginDep()</code></td>\r
+        <td>(v3.2) プラグイン名の配列を返します。Nucleusはこれらのプラグインが前もってインストールされてない場合、プラグインのインストールを拒否します。デフォルトでは空の配列が返されます。<a href="#dependency">プラグイン依存に関する詳細情報はこちら</a></td>\r
+    </tr>\r
+</table>\r
+\r
+<p>実装可能なメソッドの次は、<code>NucleusPlugin</code> クラスが提供する、再実装<strong>すべきでない</strong>幾つかの特殊メソッドです。これらはプラグイン内で、<code>$this-&gt;functionName()</code>シンタックスを利用して呼び出します。</p>\r
+\r
+<table summary="An overview of the auxiliary methods in the class NucleusPlugin. You should NOT redefine these">\r
+    <caption><code>NucleusPlugin</code> クラスの概要(再定義不可能なメソッド)</caption>\r
+    <tr>\r
+        <th abbr="method">メソッド名</th><th abbr="desc">説明</th>\r
+    </tr>\r
+    <tr>\r
+        <td>\r
+            <ul>\r
+                <li><code>createOption(...)</code></li>\r
+                <li><code>createBlogOption(...)</code>(v2.2)</li>\r
+                <li><code>createCategoryOption(...)</code>(v2.2)</li>\r
+                <li><code>createMemberOption(...)</code>(v2.2)</li>\r
+                <li><code>createItemOption(...)</code>(v3.2)</li>\r
+            </ul>\r
+        </td>\r
+        <td><a href="#options" title="More info on options">新しいオプションを生成します。</a></td>     \r
+    </tr>\r
+    <tr>\r
+        <td>\r
+            <ul>\r
+                <li><code>deleteOption(...)</code></li>\r
+                <li><code>deleteBlogOption(...)</code>(v2.2)</li>\r
+                <li><code>deleteCategoryOption(...)</code>(v2.2)</li>\r
+                <li><code>deleteMemberOption(...)</code>(v2.2)</li>\r
+                <li><code>deleteItemOption(...)</code>(v3.2)</li>\r
+            </ul>\r
+        </td>\r
+        <td><a href="#options" title="More info on options">オプションを削除します。</a></td>       \r
+    </tr>\r
+    <tr>\r
+        <td>\r
+            <ul>\r
+                <li><code>setOption(...)</code></li>\r
+                <li><code>setBlogOption(...)</code>(v2.2)</li>\r
+                <li><code>setCategoryOption(...)</code>(v2.2)</li>\r
+                <li><code>setMemberOption(...)</code>(v2.2)</li>\r
+                <li><code>setItemOption(...)</code>(v3.2)</li>\r
+            </ul>\r
+        </td>\r
+        <td><a href="#options" title="More info on options">オプションに値をセットします。</a></td>     \r
+    </tr>\r
+    <tr>\r
+        <td>\r
+            <ul>\r
+                <li><code>getOption(...)</code></li>\r
+                <li><code>getBlogOption(...)</code>(v2.2)</li>\r
+                <li><code>getCategoryOption(...)</code>(v2.2)</li>\r
+                <li><code>getMemberOption(...)</code>(v2.2)</li>\r
+                <li><code>getItemOption(...)</code>(v3.2)</li>\r
+            </ul>\r
+        </td>\r
+        <td><a href="#options" title="More info on options">オプションの値を取得します。</a></td>       \r
+    </tr>\r
+    <tr>\r
+        <td>\r
+            <ul>\r
+                <li><code>getAllBlogOptions(...)</code>(v2.2)</li>\r
+                <li><code>getAllCategoryOptions(...)</code>(v2.2)</li>\r
+                <li><code>getAllMemberOptions(...)</code>(v2.2)</li>\r
+                <li><code>getAllItemOptions(...)</code>(v3.2)</li>\r
+            </ul>\r
+        </td>\r
+        <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値(コンテクストごとの一つの値)の連想配列を返します。</a></td>     \r
+    </tr>\r
+\r
+    <tr>\r
+        <td>\r
+            <ul>\r
+                <li><code>getBlogOptionTop(...)</code>(v3.2)</li>\r
+                <li><code>getMemberOptionTop(...)</code>(v3.2)</li>\r
+                <li><code>getCategoryOptionTop(...)</code>(v3.2)</li>\r
+                <li><code>getItemOptionTop(...)</code>(v3.2)</li>\r
+            </ul>\r
+        </td>\r
+        <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値のうちの最初の値を返します。</a></td>\r
+    </tr>\r
+    <tr>\r
+        <td><code>getID()</code></td>\r
+        <td>このプラグインのIDを返します(このIDはNucleus内部で利用されるものです)。</td>      \r
+    </tr>\r
+    <tr>\r
+        <td><code>getAdminURL()</code></td>\r
+        <td>プラグインの管理エリアが置かれたURLを返します(そのような管理エリアがない場合は、この情報は無効です)。</td>        \r
+    </tr>\r
+    <tr>\r
+        <td><code>getDirectory()</code></td>\r
+        <td>プラグインの追加ファイルが格納されたサーバーのファイルシステムのパスを返します(そのようなファイルがない場合は、この情報は無効です)。結果は&quot;<code>.../nucleus/plugins/<em>plugname</em>/</code>&quot;のようになります。</td>      \r
+    </tr>\r
+    <tr>\r
+        <td><code>getShortName()</code></td>\r
+        <td>"NP_"部分を省き、全てを小文字にしたプラグインのクラス名を返します。この情報は <code>getAdminURL</code> と <code>getDirectory</code> で使用されます。</td>       \r
+    </tr>\r
+\r
+</table>\r
+\r
+<h1>スキン変数<a id="skinvars" name="skinvars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<h2>解説</h2>\r
+\r
+<p>\r
+独自のスキン変数を生成し、<code>&lt;%plugin(<em>PlugName,parameters</em>)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>で呼び出すことが出来ます(すでに存在するスキン変数とかぶらない場合)。パラメータはカンマ区切りです。\r
+</p>\r
+\r
+<p>\r
+スキン変数を扱うには、<code>doSkinVar</code> メソッドを実装する必要があります。いくつかの例を以下に示します。\r
+</p>\r
+\r
+<pre class="example"><code>function doSkinVar($skinType)\r
+function doSkinVar($skinType, $param1, $param2)\r
+function doSkinVar($skinType, $skinVar, $param1, $param2)\r
+function doSkinVar($skinType, $skinVar, $param1 = 'default value')</code></pre>\r
+\r
+<ul>\r
+    <li><code>$skinType</code> パラメータは、'index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup',  <a href="#templatevars" title="Information on templatevars">'template'</a>のうちの一つを取ります</li>\r
+    <li><code>$skinVar</code> は、スキン変数のタイプとして解釈される実質的に最初のパラメータになります(例:<code>&lt;%plugin(PlugName,VarType)%&gt;</code>)。</li>\r
+    <li><code>doSkinVar()</code>(パラメータ無し)を使い、PHPファンクションの<code>func_get_args()</code>を用いてパラメータを取得することができます。引数の数の異なる、タイプの違うスキン変数を扱うときに便利です。</li>\r
+</ul>\r
+\r
+<h2>ノート</h2>\r
+\r
+<ul>\r
+    <li>(v2.0b) グローバル変数としてパースされている <code>$currentSkinName</code> を使ってスキンの名前を取得できます。</li>\r
+</ul>\r
+\r
+\r
+\r
+\r
+<h1>テンプレート変数<a id="templatevars" name="templatevars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<h2>解説</h2>\r
+\r
+<p>\r
+テンプレートプラグイン変数はスキンプラグイン変数と同様に働きますが以下の2点が異なります。</p>\r
+\r
+<ol>\r
+    <li>スキン内ではなくテンプレート内から呼ばれます。</li>\r
+    <li>$skinTypeパラメータを取りません。代わりに現在パースされているアイテムやコメントの情報付きの追加パラメータを取ります。\r
+    <ul>\r
+            <li><code>doTemplateVar</code> メソッドは <code>&amp;$item</code> パラメータを取ります。</li>\r
+            <li><code>doTemplateCommentsVar</code> メソッドは <code>&amp;$item</code> と <code>&amp;$comment</code> パラメータを取ります。</li>\r
+      </ul>\r
+        <strong>&amp;マークに注意!</strong>\r
+    </li>\r
+</ol>\r
+    \r
+<p>テンプレート変数はスキン変数と同じ要領で呼ばれます(<code>&lt;%plugin(PlugName,parameters)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>)。\r
+</p>\r
+\r
+<p>\r
+デフォルトでは、全てのテンプレート変数は'<code>template</code>'を<code>skintype</code>パラメータとして、<code>doSkinVar</code> メソッドに渡ります。\r
+</p>\r
+\r
+<p>\r
+独自の実装を提供したい場合は、<code>doTemplateVar</code> メソッドや <code>doTemplateCommentsVar</code> メソッドを再定義する必要があります。<code>skintype</code>パラメータが無くなる以外はdoSkinVarと同様に働きます。\r
+</p>\r
+\r
+<pre class="example"><code>function doTemplateVar(&amp;$item)\r
+function doTemplateVar(&amp;$item, $param1, $param2)\r
+function doTemplateVar(&amp;$item, $type, $param1, $param2)\r
+function doTemplateVar(&amp;$item, $type, $param1 = 'default value')\r
+function doTemplateCommentsVar(&amp;$item, &amp;$comment)\r
+function doTemplateCommentsVar(&amp;$item, &amp;$comment, $param1, $param2)\r
+function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1, $param2)\r
+function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1 = 'default value')</code></pre>\r
+\r
+<h2>ノート</h2>\r
+\r
+<ul>\r
+    <li>(v2.0b) グローバル変数として内部で利用される <code>$currentSkinName</code> を使ってテンプレートの名前を取得できます。</li>\r
+</ul>\r
+\r
+\r
+\r
+\r
+<h1>アクション<a id="actions" name="actions" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>プラグインは <code>action.php</code> を通してアクションを行うことができ、同様のスクリプトがコメントや投票の受け取りにも使用されてます。GETまたはPOSTのどちらかを通して呼び出せます。必要なパラメータは<code>action</code>('plugin'と指定)、<code>name</code>(プラグイン名)、<code>type</code>(リクエストされたアクションの種類)です。</p>\r
+\r
+<p>これらのアクションを有効にするために、<code>doAction($actionType)</code> メソッドをプラグイン内で実装する必要があります。リクエストからの追加パラメータは<code>requestVar('<em>name</em>')</code> で取得できます(<code>requestVar</code> はPHPが付加する magic_quotes_gpc に配慮しています)。</p>\r
+\r
+<p>\r
+<code>doAction</code> メソッドが文字列を返すとき、エラーとして解釈され、エラーメッセージが表示されます。\r
+</p>\r
+\r
+\r
+\r
+\r
+\r
+\r
+<h1>イベント<a id="events" name="events" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+Nucleusプラグインはなにか重要なことが起きたときに発生するイベントに登録可能です。プラグインはイベント発生の際にアクションを実行したり、テキストを出力したりできます。\r
+</p>\r
+\r
+<h2>例</h2>\r
+\r
+<p>\r
+下記は <code>PreAddComment</code> イベント(blogにコメントが追加される直前に生成されるイベント)にプラグインが登録する例です。\r
+</p>\r
+\r
+<pre class="example"><code>class NP_Acronyms extends NucleusPlugin {\r
+  ...\r
+  function getEventList() { return array('PreAddComment'); }\r
+  ...\r
+  function event_PreAddComment(&amp;$data) {\r
+    // 頭字語 HTML を置き換え\r
+    $data['comment']['body'] = \r
+        strreplace('HTML',\r
+                   '&lt;acronym title="HyperText Markup Language"&gt;HTML&lt;/acronym&gt;',\r
+                   $data['comment']['body']);\r
+  }\r
+}\r
+</code></pre>\r
+\r
+<p>このプラグインはコメント中の'HTML'というテキストを'<code>&lt;acronym title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/acronym&gt;</code>'に置き換えます。acronymタグはHTMLタグで、頭字語についての追加情報を提供します。</p>\r
+\r
+<h2>イベント登録の仕方</h2>\r
+\r
+<p>イベント登録に必要なステップは以下になります。</p>\r
+\r
+<ol>\r
+    <li><code>getEventList</code> メソッドから返る配列にイベント名を追加します。</li>\r
+    <li><code>event_EventName($data)</code> という形でメソッドを生成し、この中でイベントを処理します。</li>\r
+</ol>\r
+\r
+<p>複数のプラグインが同じイベントに登録できます。管理エリアのプラグインリストの順序に従ってプラグインに通知が行きます。リストの上にあるプラグインほど早く通知されます。</p>\r
+\r
+<h2>パラメータ</h2>\r
+\r
+<p><code>event_EventName</code> メソッドはひとつだけ <code>$data</code> パラメータを持ち、それはイベントごとに内容が異なります。これは連想配列です。この連想配列に渡されたオブジェクトや配列は<strong>参照形式</strong>で渡されるため、これらに加えた変更は記憶されます。</p>\r
+\r
+<p>以下のイベントリストは、パラメータ変更がNucleusに知られるかどうかを示すために色を使い分けています。</p>\r
+\r
+<ul>\r
+    <li><var class="ref">参照渡し(緑)</var>: この種のパラメータに変更を加えるとNucleusに知られます。</li>\r
+    <li><var class="ro">値渡し(赤)</var>: プラグインイベントハンドラに渡される前に値がコピーされます。これらの変数への変更は自動的に破棄されます。.</li>\r
+</ul>\r
+\r
+<p>パラメータとして渡されるオブジェクトは<var class="obj">object</var>.として示されます。ほとんどのオブジェクトは参照渡しで、<var class="obj ref">object by ref</var>のように示されます。</p>\r
+\r
+<h2>イベントリスト</h2>\r
+\r
+<table summary="An overview of events to which a Nucleus Plugin can subscribe, and what parameters are passed along to the method that handles the event">\r
+    <caption>プラグインが登録できるイベント</caption>\r
+    <tr>\r
+        <th abbr="name">イベントの名前</th><th abbr="timing">イベントが発生するタイミング</th><th abbr="param">プラグインに渡されるパラメータ</th>\r
+    </tr>\r
+    <tr>\r
+        <td>InitSkinParse</td>\r
+        <td>スキンの初期化の直前</td>\r
+        <td><dl>\r
+            <dt class="obj ref">skin</dt>\r
+            <dd>パースする<code>SKIN</code>オブジェクト</dd>\r
+            <dt class="ro">type</dt>\r
+            <dd>スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>PreSkinParse</td>\r
+        <td>スキンのパースの直前</td>\r
+        <td><dl>\r
+            <dt class="obj ref">skin</dt>\r
+            <dd>パースする<code>SKIN</code>オブジェクト</dd>\r
+            <dt class="ro">type</dt>\r
+            <dd>スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>\r
+            <dt class="ref">contents</dt>\r
+            <dd>スキンの内容</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostSkinParse</td>\r
+        <td>スキンのパースの直後</td>\r
+        <td><dl>\r
+            <dt class="obj ref">skin</dt>\r
+            <dd>パースする<code>SKIN</code>オブジェクト</dd>\r
+            <dt class="ro">type</dt>\r
+            <dd>スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>PreItem</td>\r
+        <td>アイテムのパース前、ただしアイテムヘッダーのパース後</td>\r
+        <td><dl>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ref obj">item</dt>\r
+            <dd>アイテムデータを持つオブジェクト</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostItem</td>\r
+        <td>アイテムのパース後、ただしアイテムフッターのパース前</td>\r
+        <td><dl>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ref obj">item</dt>\r
+            <dd>アイテムデータを持つオブジェクト</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreComment</td>\r
+        <td>コメントの表示前</td>\r
+        <td><dl>\r
+            <dt class="ref">comment</dt>\r
+            <dd>コメントデータを持つ連想配列</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostComment</td>\r
+        <td>コメントの表示後</td>\r
+        <td><dl>\r
+            <dt class="ref">comment</dt>\r
+            <dd>コメントデータを持つ連想配列</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreDateHead</td>\r
+        <td>日付ヘッダーのパース前</td>\r
+        <td><dl>\r
+            <dt class="obj ref">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ro">timestamp</dt>\r
+            <dd>日付ヘッダーのタイムスタンプ</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDateHead</td>\r
+        <td>日付ヘッダーのパース後</td>\r
+        <td><dl>\r
+            <dt class="obj ref">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ro">timestamp</dt>\r
+            <dd>日付ヘッダーのタイムスタンプ</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreDateFoot</td>\r
+        <td>日付フッターのパース前</td>\r
+        <td><dl>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ro">timestamp</dt>\r
+            <dd>日付フッターのタイムスタンプ</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDateFoot</td>\r
+        <td>日付フッターのパース後</td>\r
+        <td><dl>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ro">timestamp</dt>\r
+            <dd>日付フッターのタイムスタンプ</dd>\r
+        </dl></td>\r
+    </tr>   \r
+    <tr>\r
+        <td>LoginSuccess</td>\r
+        <td>ログイン成功後</td>\r
+        <td><dl>\r
+            <dt class="obj ref">member</dt>\r
+            <dd><code>MEMBER</code> オブジェクト</dd>\r
+                       <dt class="ro">username</dt>\r
+                       <dd>ログ印字に使用されたログイン名</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>LoginFailed</td>\r
+        <td>ログイン失敗後</td>\r
+        <td><dl>\r
+            <dt class="ro">username</dt>\r
+            <dd>ログイン時に使われたユーザー名</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>Logout</td>\r
+        <td>ログアウト後</td>\r
+        <td><dl>\r
+            <dt class="ro">username</dt>\r
+            <dd>ログアウト時のユーザー名</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreBlogContent</td>\r
+        <td>blogの内容がスキン変数を通して挿入される前</td>\r
+        <td><dl>\r
+            <dt class="obj ref">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ro">type</dt>\r
+            <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults', 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostBlogContent</td>\r
+        <td>blogの内容がスキン変数を通して挿入された後</td>\r
+        <td><dl>\r
+            <dt class="obj ref">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ro">type</dt>\r
+            <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults', 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreAddComment</td>\r
+        <td>コメントがデータベースに追加される前</td>\r
+        <td><dl>\r
+            <dt class="ref">comment</dt>\r
+            <dd>コメントデータ(連想配列)</dd>\r
+            <dt class="ref">spamcheck</dt>\r
+            <dd>(v3.3) <em>SpamCheck</em>イベントの結果として返されるデータ構造(連想配列)</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostAddComment</td>\r
+        <td>コメントがデータベースに追加された後</td>\r
+        <td><dl>\r
+            <dt class="ref">comment</dt>\r
+            <dd>コメントデータ(連想配列)</dd>\r
+            <dt class="ref">commentid</dt>\r
+            <dd>コメントのID</dd>\r
+            <dt class="ref">spamcheck</dt>\r
+            <dd>(v3.3) <em>SpamCheck</em>イベントの結果として返されるデータ構造(連想配列)</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostRegister</td>\r
+        <td>新規ユーザーの登録後</td>\r
+        <td><dl>\r
+            <dt class="obj ref">member</dt>\r
+            <dd>新しい<code>MEMBER</code> オブジェクト</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostAddItem</td>\r
+        <td>アイテムがデータベースに追加された後</td>\r
+        <td><dl>\r
+            <dt class="ro">itemid</dt>\r
+            <dd>データベースに出来た新しい itemid</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostUpdateItem</td>\r
+        <td>アイテムがデータベースにアップデートされた直後</td>\r
+        <td><dl>\r
+            <dt class="ro">itemid</dt>\r
+            <dd>アイテムのID</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>PreAddItem</td>\r
+        <td>アイテムがデータベースに追加される直前</td>\r
+        <td><dl>\r
+            <dt class="ref">title</dt>\r
+            <dd>タイトル</dd>\r
+            <dt class="ref">body</dt>\r
+            <dd>本文</dd>\r
+            <dt class="ref">more</dt>\r
+            <dd>拡張テキスト</dd>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ref">authorid</dt>\r
+            <dd>執筆者ID</dd>\r
+            <dt class="ref">timestamp</dt>\r
+            <dd>UNIX タイムスタンプ</dd>\r
+            <dt class="ref">closed</dt>\r
+            <dd>1 (コメント不可) or 0 (コメント可)</dd>\r
+            <dt class="ref">draft</dt>\r
+            <dd>1 (ドラフト) or 0 (非ドラフト)</dd>\r
+            <dt class="ref">catid</dt>\r
+            <dd>カテゴリーID</dd>\r
+        </dl></td>      \r
+    </tr>   \r
+    <tr>\r
+        <td>PreUpdateItem</td>\r
+        <td>データベースにあるアイテムが更新される直前</td>\r
+        <td><dl>\r
+            <dt class="ro">itemid</dt>\r
+            <dd>アイテム ID</dd>\r
+            <dt class="ref">title</dt>\r
+            <dd>タイトル</dd>\r
+            <dt class="ref">body</dt>\r
+            <dd>本文</dd>\r
+            <dt class="ref">more</dt>\r
+            <dd>拡張テキスト</dd>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG オブジェクト</code> object</dd>\r
+            <dt class="ref">closed</dt>\r
+            <dd>1 (コメント不可) or 0 (コメント可)</dd>\r
+            <dt class="ref">catid</dt>\r
+            <dd>カテゴリーID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PrepareItemForEdit</td>\r
+        <td>アイテムをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>\r
+        <td><dl>\r
+            <dt class="ref">item</dt>\r
+            <dd>アイテムデータを持つ連想配列</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreUpdateComment</td>\r
+        <td>コメントが更新され、データベースに保存される直前</td>\r
+        <td><dl>\r
+            <dt class="ref">body</dt>\r
+            <dd>コメント本文</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PrepareCommentForEdit</td>\r
+        <td>コメントをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>\r
+        <td><dl>\r
+            <dt class="ref">comment</dt>\r
+            <dd>コメントデータ(連想配列)</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PrePluginOptionsEdit</td>\r
+        <td>\r
+            <ul>\r
+                <li>(v2.0b) 'プラグインオプションの編集'フォームが生成される前</li>\r
+                <li>(v2.2) パラメータ追加</li>\r
+                <li>(v3.2) 各オプションにパラメータ追加</li>\r
+            </ul>\r
+        </td>\r
+        <td><dl>\r
+            <dt class="ro">context</dt>\r
+            <dd>(v2.2) <code>global</code>, <code>blog</code>, <code>member</code>, <code>item</code>, <code>category</code>のいずれか</dd>\r
+            <dt class="ref">options</dt>\r
+            <dd>次のインデックスをもつ連想配列: <code>name</code>, <code>value</code>, <code>oid</code>, <code>description</code>, <code>type</code>, <code>typeinfo</code>, <code>contextid</code>, <code>extra</code> 。追加オプションをここに加えることも可能(それらで何かの処理をするときはPostPluginOptionsUpdateの記述も必要)<br />\r
+            <code>extra</code>フィールドを用いて、オプションに追加HTML(たとえばフォームのコントロール)を追加できます。もしそうする場合、 <code>extra</code> に追加する前に <code>pid</code> と <code>getID()</code> を比較し、さらに <code>name</code> をチェックすべきです。</dd>\r
+            <dt class="ro">plugid</dt>\r
+            <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(コンテクストがglobalのときのみ存在)</dd>\r
+            <dt class="ro">contextid</dt>\r
+            <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>\r
+\r
+        </dl></td>      \r
+    </tr>   \r
+    <tr>\r
+        <td>PrePluginOptionsUpdate</td>\r
+        <td>\r
+            (v3.2) プラグインオプションが更新される前。(このイベントを使ってオプションの新しい値を評価したり変更したりできます)\r
+        </td>\r
+        <td><dl>\r
+            <dt class="ro">context</dt>\r
+            <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>\r
+            <dt class="ro">plugid</dt>\r
+            <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)</dd>\r
+            <dt class="ro">optionname</dt>\r
+            <dd>オプション名</dd>\r
+            <dt class="ro">contextid</dt>\r
+            <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>\r
+            <dt class="ref">value</dt>\r
+            <dd>そのオプションの新しい値</dd>\r
+        </dl></td>\r
+\r
+    </tr>\r
+\r
+    <tr>\r
+        <td>PostPluginOptionsUpdate</td>\r
+        <td>\r
+            <ul>\r
+                <li>(v2.0b) プラグインオプションの更新後</li>\r
+                <li>(v2.2) コンテクストによって異なるパラメータ</li>\r
+            </ul>\r
+        </td>\r
+        <td><dl>\r
+            <dt class="ro">context</dt>\r
+            <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>\r
+            <dt class="ro">plugid</dt>\r
+            <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(globalコンテクスト)</dd>\r
+            <dt class="ro">blogid</dt>\r
+            <dd>(v2.2) blog ID (blog コンテクスト)</dd>         \r
+            <dt class="ref obj">blog</dt>\r
+            <dd>(v2.2) BLOG オブジェクト (blog コンテクスト)</dd>           \r
+            <dt class="ro">memberid</dt>\r
+            <dd>(v2.2) member ID (member コンテクスト)</dd>         \r
+            <dt class="ref obj">member</dt>\r
+            <dd>(v2.2) MEMBER オブジェクト (member コンテクスト)</dd>           \r
+            <dt class="ro">catid</dt>\r
+            <dd>(v2.2) category ID (category コンテクスト)</dd>         \r
+            <dt class="ro">itemid</dt>\r
+            <dd>(v2.2) item ID (item コンテクスト)</dd>\r
+            <dt class="ref obj">member</dt>\r
+            <dd>(v2.2) ITEM オブジェクト (item コンテクスト)</dd>\r
+        </dl></td>      \r
+        \r
+    </tr>   \r
+    <tr>\r
+        <td>PostAuthentication</td>\r
+        <td>(v2.0b) ログイン処理の完了後。ページリクエストごとに発生</td>\r
+        <td><dl>\r
+            <dt class="ro">loggedIn</dt>\r
+            <dd><code>$member-&gt;isLoggedIn()</code>の戻り値</dd>\r
+        </dl></td>      \r
+    </tr>       \r
+    <tr>\r
+        <td>PreAddItemForm</td>\r
+        <td>(v2.0b) アイテム追加フォーム(ブックマークレットまたは管理エリア)が生成される直前</td>\r
+        <td><dl>\r
+            <dt class="ref">contents</dt>\r
+            <dd>連想配列への参照。そのうちの'title', 'body', 'more'にはフォームフィールドへの初期値を与えることができます。複数のプラグイン間でこれらの値の変更を避けるには、処理後に'hasBeenSet'の値を1にセットします(かつ処理前にこの値をチェックするようにします)</dd>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
+        </dl></td>      \r
+    </tr>       \r
+    <tr>\r
+        <td>AddItemFormExtras</td>\r
+        <td>(v2.0b) アイテム追加ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。</td>\r
+        <td><dl>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
+        </dl></td>      \r
+    </tr>           \r
+    <tr>\r
+        <td>EditItemFormExtras</td>\r
+        <td>\r
+            (v2.0b) アイテム編集ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。<br style="margin-bottom:1.5em;" />\r
+\r
+            あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。\r
+<pre class="example"><code>&lt;h3&gt;プラグイン名&lt;/h3&gt;\r
+&lt;p&gt;追加フォームの内容&lt;/p&gt;</code></pre>\r
+        このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。\r
+        </td>\r
+        <td><dl>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
+            <dt class="ro">variables</dt>\r
+            <dd>\r
+                (read-only) 編集されるアイテムに関する全ての情報を持つ連想配列: 'itemid', 'draft', 'closed', 'title', 'body', 'more', 'author', 'authorid', 'timestamp', 'karmapos', 'karmaneg', 'catid'\r
+            </dd>           \r
+            <dt class="ro">itemid</dt>\r
+            <dd>アイテム IDへのショートカット</dd>\r
+        </dl></td>      \r
+    </tr>               \r
+    <tr>\r
+        <td>BlogSettingsFormExtras</td>\r
+        <td>(v2.0) blog設定ページにフォームを追加可能\r
+            <br style="margin-bottom:1.5em;" />\r
+            あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。\r
+<pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;\r
+&lt;form method="post" action="..."&gt;&lt;p&gt;\r
+追加フォームの内容\r
+&lt;/p&gt;&lt;/form&gt;</code></pre>\r
+            このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。\r
+        \r
+        </td>\r
+        <td><dl>\r
+            <dt class="obj ref">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreDeleteItem</td>\r
+        <td>(v2.0) アイテムがデータベースから削除される直前</td>\r
+        <td><dl>\r
+            <dt class="ro">itemid</dt>\r
+            <dd>削除されるアイテムID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDeleteItem</td>\r
+        <td>(v2.0) アイテムがデータベースから削除された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">itemid</dt>\r
+            <dd>削除されたアイテムID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreDeleteCategory</td>\r
+        <td>(v2.0) カテゴリーがデータベースから削除される直前</td>\r
+        <td><dl>\r
+            <dt class="ro">catid</dt>\r
+            <dd>削除されるカテゴリー ID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDeleteCategory</td>\r
+        <td>(v2.0) カテゴリーがデータベースから削除された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">catid</dt>\r
+            <dd>削除されたカテゴリー ID</dd>\r
+        </dl></td>      \r
+    </tr>   \r
+    <tr>\r
+        <td>PreDeleteBlog</td>\r
+        <td>(v2.0) blogがデータベースから削除される直前</td>\r
+        <td><dl>\r
+            <dt class="ro">blogid</dt>\r
+            <dd>削除されるblogID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDeleteBlog</td>\r
+        <td>(v2.0) blogがデータベースから削除された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">blogid</dt>\r
+            <dd>削除されたblogID</dd>\r
+        </dl></td>      \r
+    </tr>   \r
+    <tr>\r
+        <td>PreDeleteMember</td>\r
+        <td>(v2.0) メンバーがデータベースから削除される直前</td>\r
+        <td><dl>\r
+            <dt class="ref obj">member</dt>\r
+            <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDeleteMember</td>\r
+        <td>(v2.0) メンバーがデータベースから削除された直後</td>\r
+        <td><dl>\r
+            <dt class="ref obj">member</dt>\r
+            <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>\r
+        </dl></td>      \r
+    </tr>   \r
+    <tr>\r
+        <td>PreDeleteTeamMember</td>\r
+        <td>(v2.0) メンバーがweblogチームから削除される直前</td>\r
+        <td><dl>\r
+            <dt class="ref obj">member</dt>\r
+            <dd><code>MEMBER</code> オブジェクトへの参照</dd>\r
+            <dt class="ro">blogid</dt>\r
+            <dd>blogID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDeleteTeamMember</td>\r
+        <td>(v2.0) メンバーがweblogチームから削除された直後</td>\r
+        <td><dl>\r
+            <dt class="ref obj">member</dt>\r
+            <dd><code>MEMBER</code> オブジェクトへの参照</dd>\r
+            <dt class="ro">blogid</dt>\r
+            <dd>blogID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreDeleteComment</td>\r
+        <td>(v2.0) コメントがデータベースから削除される直前</td>\r
+        <td><dl>\r
+            <dt class="ro">commentid</dt>\r
+            <dd>削除されるコメントID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDeleteComment</td>\r
+        <td>(v2.0) コメントがデータベースから削除された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">commentid</dt>\r
+            <dd>削除されたコメントID</dd>\r
+        </dl></td>      \r
+    </tr>       \r
+    <tr>\r
+        <td>ActionLogCleared</td>\r
+        <td>(v2.0) アクションログが消去された後</td>\r
+        <td>なし</td>       \r
+    </tr>\r
+    <tr>\r
+        <td>PreDeleteTemplate</td>\r
+        <td>(v2.0) テンプレートがデータベースから削除される直前</td>\r
+        <td><dl>\r
+            <dt class="ro">templateid</dt>\r
+            <dd>削除されるテンプレートID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDeleteTemplate</td>\r
+        <td>(v2.0) テンプレートがデータベースから削除された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">templateid</dt>\r
+            <dd>削除されたテンプレートID</dd>\r
+        </dl></td>      \r
+    </tr>       \r
+    <tr>\r
+        <td>PreDeleteSkin</td>\r
+        <td>(v2.0) スキンがデータベースから削除される直前</td>\r
+        <td><dl>\r
+            <dt class="ro">skinid</dt>\r
+            <dd>削除されるスキンID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDeleteSkin</td>\r
+        <td>(v2.0) スキンがデータベースから削除された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">skinid</dt>\r
+            <dd>削除されたスキンID</dd>\r
+        </dl></td>      \r
+    </tr>   \r
+    <tr>\r
+        <td>PreDeleteSkinPart</td>\r
+        <td>スペシャルスキンパーツがデータベースから削除される直前</td>\r
+        <td><dl>\r
+            <dt class="ro">skinid</dt>\r
+            <dd>削除されるスペシャルスキンパーツが含まれるスキンのID</dd>\r
+            <dt class="ro">skintype</dt>\r
+            <dd>削除されるスペシャルスキンパーツの名前</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDeleteSkin</td>\r
+        <td>スペシャルスキンパーツがデータベースから削除された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">skinid</dt>\r
+            <dd>削除されたスペシャルスキンパーツが含まれるスキンのID</dd>\r
+            <dt class="ro">skintype</dt>\r
+            <dd>削除されたスペシャルスキンパーツの名前</dd>\r
+        </dl></td>      \r
+    </tr>   \r
+    <tr>\r
+        <td>PreDeletePlugin</td>\r
+        <td>(v2.0) プラグインがデータベースから削除される直前</td>\r
+        <td><dl>\r
+            <dt class="ro">plugid</dt>\r
+            <dd>削除されるプラグインID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDeletePlugin</td>\r
+        <td>(v2.0) プラグインがデータベースから削除された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">plugid</dt>\r
+            <dd>削除されたプラグインID</dd>\r
+        </dl></td>      \r
+    </tr>       \r
+    <tr>\r
+        <td>PreDeleteBan</td>\r
+        <td>(v2.0) 禁止IPがデータベースから削除される直前</td>\r
+        <td><dl>\r
+            <dt class="ro">blogid</dt>\r
+            <dd>禁止IPが削除されるblogのID</dd>\r
+            <dt class="ro">iprange</dt>\r
+            <dd>禁止されたIPレンジ</dd>         \r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostDeleteBan</td>\r
+        <td>(v2.0) 禁止IPがデータベースから削除された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">blogid</dt>\r
+            <dd>禁止IPが削除されたblogのID</dd>\r
+            <dt class="ro">iprange</dt>\r
+            <dd>禁止されたIPレンジ</dd>         \r
+        </dl></td>      \r
+    </tr>           \r
+    <tr>\r
+        <td>PreAddCategory</td>\r
+        <td>(v2.0) 新しいカテゴリーがデータベースに生成される直前</td>\r
+        <td><dl>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクトの参照</dd>\r
+            <dt class="ref">name</dt>\r
+            <dd>新しいカテゴリー名</dd>         \r
+            <dt class="ref">description</dt>\r
+            <dd>新しいカテゴリーの説明</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostAddCategory</td>\r
+        <td>(v2.0) 新しいカテゴリーがデータベースに生成された直後</td>\r
+        <td><dl>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
+            <dt class="ro">name</dt>\r
+            <dd>新しいカテゴリー名</dd>         \r
+            <dt class="ro">description</dt>\r
+            <dd>新しいカテゴリーの説明</dd>\r
+            <dt class="ro">catid</dt>\r
+            <dd>新しいカテゴリー ID</dd>            \r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreAddBlog</td>\r
+        <td>(v2.0) 新しいblogが生成される直前</td>\r
+        <td><dl>\r
+            <dt class="ref">name</dt>\r
+            <dd>新しい blog名</dd>\r
+            <dt class="ref">shortname</dt>\r
+            <dd>新しい blogの短縮名</dd>\r
+            <dt class="ref">timeoffset</dt>\r
+            <dd>新しい blogのタイムオフセット</dd>\r
+            <dt class="ref">description</dt>\r
+            <dd>新しい blogの説明</dd>\r
+            <dt class="ref">defaultskin</dt>\r
+            <dd>新しいblogのデフォルトスキンのID</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostAddBlog</td>\r
+        <td>(v2.0) 新しいblogが生成された直後</td>\r
+        <td><dl>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd>新しい<code>BLOG</code> オブジェクト</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreAddPlugin</td>\r
+        <td>(v2.0) プラグインが追加される直前</td>\r
+        <td><dl>\r
+            <dt class="ref">file</dt>\r
+            <dd>新しいプラグインのファイル名</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostAddPlugin</td>\r
+        <td>(v2.0) プラグインが追加された直後</td>\r
+        <td><dl>\r
+            <dt class="ref obj">plugin</dt>\r
+            <dd>新しく追加されたプラグインのオブジェクト</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreAddTeamMember</td>\r
+        <td>(v2.0) メンバーがblogチームに追加される直前</td>\r
+        <td><dl>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ref obj">member</dt>\r
+            <dd><code>MEMBER</code> オブジェクト</dd>\r
+            <dt class="ref">admin</dt>\r
+            <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostAddTeamMember</td>\r
+        <td>(v2.0) メンバーがblogチームに追加された直後</td>\r
+        <td><dl>\r
+            <dt class="ref obj">blog</dt>\r
+            <dd><code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ref obj">member</dt>\r
+            <dd><code>MEMBER</code> オブジェクト</dd>\r
+            <dt class="ro">admin</dt>\r
+            <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreAddTemplate</td>\r
+        <td>(v2.0) 新しいテンプレートが生成される直前(注:テンプレートが複製されたときも呼ばれる)</td>\r
+        <td><dl>\r
+            <dt class="ref">name</dt>\r
+            <dd>新しいテンプレート名</dd>\r
+            <dt class="ref">description</dt>\r
+            <dd>新しいテンプレートの説明</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostAddTemplate</td>\r
+        <td>(v2.0) 新しいテンプレートが生成された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">name</dt>\r
+            <dd>新しいテンプレート名</dd>\r
+            <dt class="ro">description</dt>\r
+            <dd>新しいテンプレートの説明</dd>\r
+            <dt class="ro">templateid</dt>\r
+            <dd>新しいテンプレートID</dd>\r
+        </dl></td>      \r
+    </tr>   \r
+    <tr>\r
+        <td>PreAddSkin</td>\r
+        <td>(v2.0) 新しいスキンが生成される直前(注:スキンが複製されたときも呼ばれる)</td>\r
+        <td><dl>\r
+            <dt class="ref">name</dt>\r
+            <dd>新しいスキン名</dd>\r
+            <dt class="ref">description</dt>\r
+            <dd>新しいスキン名の説明</dd>\r
+            <dt class="ref">type</dt>\r
+            <dd>スキンのコンテントタイプ</dd>\r
+            <dt class="ref">includeMode</dt>\r
+            <dd>新しいスキンのインクルードモード</dd>\r
+            <dt class="ref">includePrefix</dt>\r
+            <dd>新しいスキンのインクルードプレフィックス</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostAddSkin</td>\r
+        <td>(v2.0) 新しいスキンが生成された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">name</dt>\r
+            <dd>新しいスキン名</dd>\r
+            <dt class="ro">description</dt>\r
+            <dd>新しいスキンの説明</dd>\r
+            <dt class="ro">type</dt>\r
+            <dd>スキンのコンテントタイプ</dd>\r
+            <dt class="ro">includeMode</dt>\r
+            <dd>新しいスキンのインクルードモード</dd>\r
+            <dt class="ro">includePrefix</dt>\r
+            <dd>新しいスキンのインクルードプレフィックス</dd>\r
+            <dt class="ro">skinid</dt>\r
+            <dd>新しいスキンID</dd>\r
+        </dl></td>      \r
+    </tr>       \r
+    <tr>\r
+        <td>PreAddBan</td>\r
+        <td>(v2.0) 新しい禁止IPが追加される直前</td>\r
+        <td><dl>\r
+            <dt class="ref">blogid</dt>\r
+            <dd>blogID</dd>\r
+            <dt class="ref">iprange</dt>\r
+            <dd>禁止されたIPレンジ</dd>\r
+            <dt class="ref">reason</dt>\r
+            <dd>禁止された理由を記述したテキストメッセージ</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostAddBan</td>\r
+        <td>(v2.0) 新しい禁止IPが追加された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">blogid</dt>\r
+            <dd>blogID</dd>\r
+            <dt class="ro">iprange</dt>\r
+            <dd>禁止されたIPレンジ</dd>\r
+            <dt class="ro">reason</dt>\r
+            <dd>禁止された理由を記述したテキストメッセージ</dd>\r
+        </dl></td>      \r
+    </tr>       \r
+\r
+    <tr>\r
+        <td>PreMoveItem</td>\r
+        <td>(v2.0) アイテムが他のblog/カテゴリーに移される直前</td>\r
+        <td><dl>\r
+            <dt class="ref">itemid</dt>\r
+            <dd>アイテムID</dd>\r
+            <dt class="ref">destblogid</dt>\r
+            <dd>移動先のblogID</dd>\r
+            <dt class="ref">destcatid</dt>\r
+            <dd>移動先のカテゴリーID</dd>           \r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostMoveItem</td>\r
+        <td>(v2.0) アイテムが他のblog/カテゴリーに移された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">itemid</dt>\r
+            <dd>アイテムID</dd>\r
+            <dt class="ro">destblogid</dt>\r
+            <dd>新しいblogID</dd>\r
+            <dt class="ro">destcatid</dt>\r
+            <dd>新しいカテゴリーID</dd> \r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PreMoveCategory</td>\r
+        <td>(v2.0) カテゴリーが他のblogに移される直前</td>\r
+        <td><dl>\r
+            <dt class="ref">catid</dt>\r
+            <dd>カテゴリーID</dd>\r
+            <dt class="ref obj">sourceblog</dt>\r
+            <dd>移動元の<code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ref obj">destblog</dt>\r
+            <dd>移動先の<code>BLOG</code> オブジェクト</dd>         \r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>PostMoveCategory</td>\r
+        <td>(v2.0) カテゴリーが他のblogに移された直後</td>\r
+        <td><dl>\r
+            <dt class="ro">catid</dt>\r
+            <dd>カテゴリーID</dd>\r
+            <dt class="ref obj">sourceblog</dt>\r
+            <dd>移動元の<code>BLOG</code> オブジェクト</dd>\r
+            <dt class="ref obj">destblog</dt>\r
+            <dd>移動先の<code>BLOG</code> オブジェクト</dd>         \r
+        </dl></td>      \r
+    </tr>   \r
+    <tr>\r
+        <td>MemberSettingsFormExtras</td>\r
+        <td><span style="display:block;margin-bottom:1.5em;">(v2.0) メンバー設定ページにフォームを追加可能</span>            \r
+            あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。\r
+<pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;\r
+&lt;form method="post" action="..."&gt;&lt;p&gt;\r
+追加フォームの内容\r
+&lt;/p&gt;&lt;/form&gt;</code></pre>\r
+            このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。\r
+        \r
+        </td>\r
+        <td><dl>\r
+            <dt class="ref obj">member</dt>\r
+            <dd><code>MEMBER</code> オブジェクトへの参照</dd>\r
+        </dl></td>      \r
+    </tr>\r
+    <tr>\r
+        <td>GeneralSettingsFormExtras</td>\r
+        <td><span style="display:block;margin-bottom:1.5em;">(v2.0) 一般設定ページにフォームを追加可能</span>\r
+            あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。\r
+<pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;\r
+&lt;form method="post" action="..."&gt;&lt;p&gt;\r
+追加フォームの内容\r
+&lt;/p&gt;&lt;/form&gt;</code></pre>\r
+            このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。\r
+            \r
+        </td>\r
+        <td>なし</td>       \r
+    </tr>\r
+    <tr>\r
+        <td>AdminPrePageHead</td>\r
+        <td>(v2.5) 管理画面で、ページヘッドを出力する直前。このイベントはヘッド領域にスクリプトやCSSを追加するのに用いられます。</td>\r
+        <td><dl>\r
+            <dt class="ref">extrahead</dt>\r
+            <dd>HTMLページのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>\r
+            <dt class="ro">action</dt>\r
+            <dd>現在実行されているアクション、またはページタイプ</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>AdminPrePageFoot</td>\r
+        <td>(v2.5) 管理画面で、ページフッターを出力する直前。</td>\r
+      <td><dl>\r
+            <dt class="ro">action</dt>\r
+            <dd>現在実行されているアクション、またはページタイプ</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>PreSendContentType</td>\r
+        <td>(v2.5) HTTPヘッダーにコンテントタイプがセットされる直前</td>\r
+        <td><dl>\r
+            <dt class="ref">contentType</dt>\r
+            <dd>コンテントタイプ(<code>application/xhtml+xml</code>など)</dd>\r
+            <dt class="ref">charset</dt>\r
+            <dd>キャラクターセット</dd>\r
+            <dt class="ro">pageType</dt>\r
+            <dd>表示するページの種類を示す文字列:<code>skin</code> (スキンタイプ), <code>media</code> (メディアライブラリ), <code>admin-<em>action</em></code> (管理エリア), <code>bookmarklet-<em>action</em></code> (ブックマークレット)</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>QuickMenu</td>\r
+        <td>(v2.5) 管理エリアのクイックメニューの一番下。そこへのプラグイン登録に利用されます。登録するにはoptionsに連想配列を入れます。実装例が<a href="#admin">プラグイン管理エリアを作る</a>のセクションにあります。</td>\r
+        <td><dl>\r
+            <dt class="ref">options</dt>\r
+            <dd>配列</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>BookmarkletExtraHead</td>\r
+        <td>(v2.5) ブックマークレット XHTMLコードのヘッド領域内。</td>\r
+        <td><dl>\r
+            <dt class="ref">extrahead</dt>\r
+            <dd>XHTMLコードのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>FormExtra</td>\r
+        <td>(v3.2) このイベントは、プラグインがコメント、メンバー間メール、認証フォームのいずれかのフォーム内に追加フィールドを挿入するときに使います。フォーム処理の際に発生する <code>ValidateForm</code> イベントに対応します。</td>\r
+        <td><dl>\r
+            <dt class="ro">type</dt>\r
+            <dd>イベントを発生させるフォームタイプ\r
+                <ul>\r
+                    <li><code>activation</code></li>\r
+                    <li><code>additemform</code> (注:これは管理画面のアイテム追加フォームではない)</li>\r
+                    <li><code>commentform-loggedin</code></li>\r
+                    <li><code>commentform-notloggedin</code></li>\r
+                    <li><code>membermailform-loggedin</code></li>\r
+                    <li><code>membermailform-notloggedin</code></li>\r
+                </ul>\r
+            </dd>\r
+            <dt class="ro obj">member</dt>\r
+            <dd><code>type</code> が <code>activation</code>のとき、このフィールドは認証メンバーの詳細情報を含みます</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>ValidateForm</td>\r
+        <td>(v3.2) コメント、メンバー間メール、アカウント認証のいずれかが処理されるときに呼ばれます。プラグインはこれで各データの評価を実行でき、もし不具合があれば処理を中断できます。<code>FormExtra</code> と共に使うとフォームにフィールドを追加できます。</td>\r
+        <td><dl>\r
+            <dt class="ro">type</dt>\r
+            <dd>処理されるフォームタイプ\r
+                <ul>\r
+                    <li><code>membermail</code></li>\r
+                    <li><code>comment</code></li>\r
+                    <li><code>activation</code></li>\r
+                </ul>\r
+            </dd>\r
+            <dt class="ref">error</dt>\r
+            <dd>フォーム処理をストップするときに、<code>error</code> フィールドに空でないエラーメッセージを記入します。このエラーメッセージはユーザー側に表示されます。</dd>\r
+            <dt class="ref">comment</dt>\r
+            <dd>コメントデータの連想配列(コメントフォームのときのみ)</dd>\r
+            <dt class="ref">spamcheck</dt>\r
+            <dd>(v3.3) <em>SpamCheck</em>イベントの結果として返される連想配列(コメントフォームのときのみ)</dd>\r
+            <dt class="ro obj">member</dt>\r
+            <dd>認証フォームのとき、認証中のメンバー情報を含みます。</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>ParseURL</td>\r
+        <td>(v3.22)NucleusのコアでURLからアイテムやカテゴリのIDを読み取る前。プラグインはこのイベントを使ってURLを解釈します</td>\r
+        <td><dl>\r
+            <dt class="ro">type</dt>\r
+            <dd>FancyURLの仮想ディレクトリ(拡張子無しファイル)のファイル名(item, blog, ...)</dd>\r
+            <dt class="ro">info</dt>\r
+            <dd>解決される前のURL(この名前は以前の変数名である<code>pathinfo</code>から来ています).</dd>\r
+            <dt class="ref">complete</dt>\r
+            <dd>プラグインがURLを解釈し終わるとこれが<strong>true</strong>にセットされます。<strong>false</strong>の場合はプラグインはURLを解釈していません。</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>GenerateURL</td>\r
+        <td>(v3.22)URLが自動生成される前。このイベントを使って独自のURLを生成する事が出来ます。</td>\r
+        <td><dl>\r
+            <dt class="ro">type</dt>\r
+            <dd>生成するURLのタイプ(item, blog, ...)</dd>\r
+            <dt class="ro">params</dt>\r
+            <dd>生成するURLに付加するパラメータ</dd>\r
+            <dt class="ref">completed</dt>\r
+            <dd>プラグインはURLを生成し終わるとこれを<strong>true</strong>にセットしてURLを返します。<strong>false</strong>の場合はプラグインはURLを生成していません。</dd>\r
+            <dt class="ref">url</dt>\r
+            <dd>プラグインが生成したURLを格納する為の空の変数</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>SpamCheck</td>\r
+        <td>(v3.3) 新しいコメントが追加されるときに呼ばれます。アンチスパムのプラグインはこのイベントを使ってコメントがスパムかどうかマークを付けられます。<code>SpamCheck</code>イベントの詳しい説明は別の文書を参照のこと(<a href='http://wakka.xiffy.nl/spamcheck_api'>SpamCheck API 2.0</a>)</td>\r
+        <td><dl>\r
+            <dt class="ref">spamcheck</dt>\r
+            <dd>spamcheckのデータ構造(連想配列)</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>PreMediaUpload</td>\r
+        <td>(v3.3)アップロードされたファイルが「media」ディレクトリに書き込まれる前。</td>\r
+        <td><dl>\r
+            <dt class="ref">collection</dt>\r
+            <dd>アップロードされたファイルが格納されるべき「コレクション」</dd>\r
+            <dt class="ro">uploadfile</dt>\r
+            <dd>テンポラリディレクトリに狩り沖されているアップロードされたファイルのファイル名</dd>\r
+            <dt class="ref">filename</dt>\r
+            <dd>最終的に保存されるファイル名</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>PostMediaUpload</td>\r
+        <td>(v3.3)アップロードされたファイルが「media」ディレクトリに書き込まれた後。</td>\r
+        <td><dl>\r
+            <dt class="ro">collection</dt>\r
+            <dd>アップロードされたファイルが格納された「コレクション」</dd>\r
+            <dt class="ro">mediadir</dt>\r
+            <dd>アップロードされたファイルが保存されたメディアディレクトリ</dd>\r
+            <dt class="ro">filename</dt>\r
+            <dd>保存されたファイル名</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>SendPing</td>\r
+        <td>(v3.3)「ブログの設定」で「更新時にweblogsアップデート通知サービスへPingを送りますか?」が「はい」に設定されている時に限り、新しいアイテムを追加した時に呼び出されます(このイベントに対応しているプラグインがインストールされている時に限る)。このイベントはPing送信プラグインで各種「ブログ検索サービス」へ更新pingを送信します(例えば<a href="http://blogsearch.google.co.jp/">Googleブログ検索</a>など)</td>\r
+        <td><dl>\r
+            <dt class="ref">blogid</dt>\r
+            <dd>アイテムが追加されたブログのID</dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td>JustPosted</td>\r
+        <td>(v3.3)投稿された未来の日付のアイテムの設定時刻が来た時。このイベントはページの表示が完了した後に発生条件をチェックします。</td>\r
+        <td><dl>\r
+            <dt class="ref">blogid</dt>\r
+            <dd>未来の日付のアイテムの設定時刻が来たブログのID</dd>\r
+        </dl></td>\r
+    </tr>\r
+       <tr>\r
+               <td>RegistrationFormExtraFields</td>\r
+               <td>(v3.33) createaccount.php からビジターに表示されるアカウント作成フォームが表示され、FormExtra イベントが起きる前。プラグインはこのイベントによって、アカウント作成フォームに独自のフィールドを付け加える事が出来ます。PostRegister イベントに同時に登録すると、付け加えたフィールドの値を評価する事が出来る様になります。渡されるパラメータは、付け加えられたフィールドを、元々のフィールドと違和感無く表示させる為に使用されます。</td>\r
+               <td><dl>\r
+                       <dt class="ro">type</dt>\r
+                       <dd>アカウント作成フォームのタイプ。通常は <code>createaccount.php</code>。</dd>\r
+                       <dt class="ro">prelabel</dt>\r
+                       <dd>追加フィールドの「ラベル」の<strong>前に</strong>挿入される HTML コード</dd>\r
+                       <dt class="ro">postlabel</dt>\r
+                       <dd>追加フィールドの「ラベル」の<strong>後に</strong>挿入される HTML コード</dd>\r
+                       <dt class="ro">prefield</dt>\r
+                       <dd>追加フィールドの「入力フィールド」の<strong>前に</strong>挿入される HTML コード</dd>\r
+                       <dt class="ro">postfield</dt>\r
+                       <dd>追加フィールドの「入力フィールド」の<strong>後に</strong>挿入される HTML コード</dd>\r
+               </dl></td>\r
+       </tr>\r
+       <tr>\r
+               <td>TemplateExtraFields</td>\r
+               <td>(v3.40) テンプレートが編集・更新される時。プラグイン製作者がコアのテンプレートシステムをより使いやすくするために、テンプレートにフィールドを追加する事が出来ます。プラグイン作者は追加するテンプレートフィールドの初期状態をプラグインオプションに保存し、そこで使用するテンプレート変数についてのドキュメントを書くことが要求されます。また、このイベントに関するサンプルプラグインが、フォーラムの<a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=24401#24401" title="Sample">新API「TemplateExtraFields」を使ったプラグインの見本</a>(本家フォーラムのスレッドは <a href="http://forum.nucleuscms.org/viewtopic.php?p=87672#87672" title="Sample">Skin specific values for Plugins</a>)にあります。</td>\r
+               <td><dl>\r
+                       <dt class="ref">fields</dt>\r
+                       <dd>プラグイン名をキーにした連想配列。配列の内容は、テンプレートのフィールド名をキーにした連想配列で、その値はフォームのフィールドに表示されるラベル。フィールド名は全て英数小文字で、フィールド名の重複を避けるためにプラグイン名を含んでいる事が好ましい。</dd>\r
+               </dl></td>\r
+       </tr>\r
+       <tr>\r
+               <td>PreArchiveListItem</td>\r
+               <td>(v3.40) アーカイブリストが表示される前。アーカイブリストを表示するために使われたテンプレートのアーカイブリスト本体フィールドのテンプレート変数を追加/修正することを可能にします。追加のテンプレート変数についてのドキュメントも整備すべきです。</td>\r
+               <td><dl>\r
+                       <dt class="ref">listitem</dt>\r
+                       <dd>テンプレート変数をキーにした連想配列。値はテンプレート変数に置き換えられる内容。この配列にキーと値のペアを追加する事で、新しい変数が追加できます。</dd>\r
+               </dl></td>\r
+       </tr>\r
+       <tr>\r
+               <td>PreCategoryListItem</td>\r
+               <td>(v3.40) カテゴリーリストが表示される前。カテゴリーリストを表示するために使われたテンプレートのカテゴリーリスト本体フィールドのテンプレート変数を追加/修正することを可能にします。追加のテンプレート変数についてのドキュメントも整備すべきです。</td>\r
+               <td><dl>\r
+                       <dt class="ref">listitem</dt>\r
+                       <dd>テンプレート変数をキーにした連想配列。値はテンプレート変数に置き換えられる内容。この配列にキーと値のペアを追加する事で、新しい変数が追加できます。</dd>\r
+               </dl></td>\r
+       </tr>\r
+       <tr>\r
+               <td>PreBlogListItem</td>\r
+               <td>(v3.40) ブログリストが表示される前。ブログリストを表示するために使われたテンプレートのブログリスト本体フィールドのテンプレート変数を追加/修正することを可能にします。追加のテンプレート変数についてのドキュメントも整備すべきです。</td>\r
+               <td><dl>\r
+                       <dt class="ref">listitem</dt>\r
+                       <dd>テンプレート変数をキーにした連想配列。値はテンプレート変数に置き換えられる内容。この配列にキーと値のペアを追加する事で、新しい変数が追加できます。</dd>\r
+               </dl></td>\r
+       </tr>\r
+       <tr>\r
+               <td>PreTemplateRead</td>\r
+               <td>(v3.40) テンプレートが読み込まれる直前。読み込むテンプレートを変更する事が出来ます。NP_MultiLanguage はこのイベントを使用しています。</td>\r
+               <td><dl>\r
+                       <dt class="ref">name</dt>\r
+                       <dd>呼び出されるテンプレートの名前</dd>\r
+               </dl></td>\r
+       </tr>\r
+       <tr>\r
+               <td>CustomLogin</td>\r
+               <td>(v3.40) Nucleus にログインする直前。ログインの手順をカスタマイズできます。外部認証を簡素化し、ログイン ID にメールアドレス等を使用出来る様になります。</td>\r
+               <td><dl>\r
+                       <dt class="ref">login</dt>\r
+                       <dd>ユーザーが「ログインID」フィールドに入力した文字列。Nucleus のメンバーとして登録されているなら、プラグイン側で外部認証された「ログインID」と Nucleus のそれを紐つけるべきです。そうでないとクッキーがセットされず、ページを移動するごとにログアウトしてしまいます。</dd>\r
+                       <dt class="ref">password</dt>\r
+                       <dd>ユーザーが「パスワード」フィールドに入力した文字列。</dd>\r
+                       <dt class="ref">success</dt>\r
+                       <dd>認証が成功したかどうかのフラグ。「1」が成功。失敗だと「0」。初期値は「0」。プラグイン側でセットします。</dd>\r
+                       <dt class="ref">allowlocal</dt>\r
+                       <dd>整数値。プラグイン側で外部認証に失敗した後に、Nucleus のログインを試すかどうかのフラグ。「1」が試す「0」が試さない。初期値は「1」プラグイン側でセットします。</dd>\r
+               </dl></td>\r
+       </tr>\r
+       <tr>\r
+               <td>PrePasswordSet</td>\r
+               <td>(v3.50)パスワードを設定する時に呼び出されます。パスワードの強度をプラグインで設定することが出来ます。</td>\r
+               <td><dl>\r
+                       <dt class="ro">password</dt>\r
+                       <dd>ユーザーが入力したパスワード文字列</dd>\r
+                       <dt class="ref">errormessage</dt>\r
+                       <dd>エラーメッセージ。エラーが起きない場合は空白に設定します。</dd>\r
+                       <dt class="ref">valid</dt>\r
+                       <dd>設定しようとしているパスワードが妥当かどうかのフラグ。デフォルトは「真」。プラグインはこの値の妥当性を審査するべきです。</dd>\r
+               </dl></td>\r
+       </tr>\r
+<!--\r
+    <tr>\r
+        <td></td>\r
+        <td></td>\r
+        <td><dl>\r
+            <dt></dt>\r
+            <dd></dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td></td>\r
+        <td></td>\r
+        <td><dl>\r
+            <dt></dt>\r
+            <dd></dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td></td>\r
+        <td></td>\r
+        <td><dl>\r
+            <dt></dt>\r
+            <dd></dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td></td>\r
+        <td></td>\r
+        <td><dl>\r
+            <dt></dt>\r
+            <dd></dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td></td>\r
+        <td></td>\r
+        <td><dl>\r
+            <dt></dt>\r
+            <dd></dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td></td>\r
+        <td></td>\r
+        <td><dl>\r
+            <dt></dt>\r
+            <dd></dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td></td>\r
+        <td></td>\r
+        <td><dl>\r
+            <dt></dt>\r
+            <dd></dd>\r
+        </dl></td>\r
+    </tr>\r
+    <tr>\r
+        <td></td>\r
+        <td></td>\r
+        <td><dl>\r
+            <dt></dt>\r
+            <dd></dd>\r
+        </dl></td>\r
+    </tr> -->\r
+</table>\r
+\r
+\r
+\r
+<h1>オプションを保存する<a id="options" name="options" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>プラグインに簡単にオプションを登録・取得できるように一連のメソッドが用意されています。これらのオプションは直接Nucleusの管理エリアで編集でき、プラグイン自身の管理エリアを用意する必要もなく、PHPファイルそのものの中にオプションの値を書き込まずにすみます。</p>\r
+\r
+<p>オプションは異なったコンテクストで利用可能です。</p>\r
+\r
+<ol>\r
+    <li><strong>グローバルオプション</strong>:管理エリアのプラグインセクションで編集可能</li>\r
+    <li><strong>blogオプション</strong>:blog設定ページで編集可能</li>\r
+    <li><strong>カテゴリーオプション</strong>:blog設定ページ(のカテゴリー編集ページ)で編集可能</li>  \r
+    <li><strong>メンバーオプション</strong>:メンバー編集ページで編集可能</li>\r
+    <li><strong>アイテムオプション</strong>:アイテムの追加、およびアイテムの編集ページで編集可能</li>\r
+</ol>\r
+\r
+<h2>オプションの種類</h2>\r
+\r
+<p>オプションにはいくつかのタイプが提供されています。</p>\r
+\r
+<dl>\r
+    <dt>text</dt>\r
+    <dd>シンプルなテキスト</dd>\r
+    <dt>yesno</dt>\r
+    <dd>'yes'か'no'どちらか(編集画面ではラジオボタンとして表示されます)</dd>\r
+    <dt>password</dt>\r
+    <dd>テキストフィールド (編集画面では伏字で表示されます)</dd>\r
+    <dt>textarea (v2.2)</dt>\r
+    <dd>複数行のテキストフィールド</dd>\r
+    <dt>select (v2.2)</dt>\r
+    <dd>ドロップダウンメニュー。次のような形式の追加情報が必要です: Option 1|value1|Option 2|value2|Option 3|value3 \r
+    </dd>\r
+</dl>\r
+\r
+<h2>オプション・メタ</h2>\r
+\r
+<p>Nucleus v3.2よりオプション・メタデータを用いて、オプションタイプを正しい値を受け取れるように制限できるようになりました。このメタデータは <code>$typeExtras</code>フィールドにセミコロン区切りのリストで保存されます。注:selectオプションでは、selectリストは<code>$typeExtras</code>のなかで一番最初でなければいけません。</p>\r
+\r
+<table summary="メタデータ"><tr>\r
+    <th abbr="key">キー</th>\r
+    <th abbr="desc">説明</th>\r
+</tr><tr>\r
+    <td><code>datatype</code></td>\r
+    <td>Nucleus本体に、どのデータ型を使いたいかという追加情報を与えます。現在は '<code>numerical</code>' のみ利用できます。 '<code>numerical</code>' を指定することでNucleusは数値情報のみを受け付けます(クライアントサイド・サーバサイド両方でチェック) ('<code>select</code>' と '<code>text</code>'のオプションタイプで利用できます)</td>\r
+</tr><tr>\r
+    <td><code>access</code></td>\r
+    <td>'<code>readonly</code>'にセットすることで、オプションを編集不可能にします('<code>text</code>' と '<code>textarea</code>'のオプションタイプで利用できます)<br />\r
+    '<code>hidden</code>'を使うと、利用者側にそのオプションの存在を完全に隠蔽します('<code>text</code>'のオプションタイプで利用できます)</td>\r
+</tr></table>\r
+\r
+<p>設定例</p>\r
+<pre class="example"><code>// 数値のみを受け付けるテキストオプションを作成\r
+$this-&gt;createBlogOption('FooBar', 'foobar', 'text', '0', 'datatype=numerical');\r
+// 数値のみを受け付けるセレクトオプションを作成\r
+$this-&gt;createItemOption('FooBar', 'foobar', 'select', '0', '0|0|1|1|2|2;datatype=numerical');\r
+// 編集不可能なテキストエリアオプションを作成\r
+$this-&gt;createOption('FooBar', 'foobar', 'textarea', 'This textarea is readonly', 'access=readonly');\r
+</code></pre>\r
+\r
+<h2>制限</h2>\r
+\r
+<ol>\r
+    <li>オプション名は最大20文字です。</li>\r
+    <li>オプションの説明文は最大255文字です。</li>\r
+    <li>オプションの値は制限ありません(v2.2より前のバージョンでは128文字の制限がありました)</li>\r
+    <li>'=', '|', ';' のキャラクターはセレクトオプション用のセレクトリストやオプション・メタデータ中で使用することはできません。</li>\r
+</ol>\r
+\r
+<h2>メソッド</h2>\r
+\r
+<h3>createOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
+\r
+<p><strong>グローバル</strong>なコンテクストで新しいオプションを生成します。</p>\r
+\r
+<table summary="createOption"><tr>\r
+    <th abbr="param">パラメータ</th>\r
+    <th abbr="value">値</th>\r
+</tr><tr>\r
+    <td>$name</td>\r
+    <td>オプション名</td>\r
+</tr><tr>\r
+    <td>$desc</td>\r
+    <td>オプション編集画面で表示される説明文</td>\r
+</tr><tr>\r
+    <td>$type</td>\r
+    <td>オプションタイプ(前出)</td>\r
+</tr><tr>\r
+    <td>$defValue</td>\r
+    <td>初期値</td>\r
+</tr><tr>\r
+    <td>$typeExtras</td>\r
+    <td>オプションタイプの追加情報(前出)</td>\r
+</tr></table>\r
+\r
+<h3>[v2.2] createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
+\r
+<p><strong>blog</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
+\r
+<h3>[v2.2] createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
+\r
+<p><strong>カテゴリー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
+\r
+<h3>[v2.2] createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
+\r
+<p><strong>メンバー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
+\r
+<h3>[v3.2] createItemOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
+\r
+<p><strong>アイテム</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
+\r
+<h3>setOption($name, $value)</h3>\r
+\r
+<p>すでにデータベースに存在するオプションの値を変更します。</p>\r
+\r
+<table summary="setOption"><tr>\r
+    <th abbr="param">パラメータ</th>\r
+    <th abbr="value">値</th>\r
+</tr><tr>       \r
+    <td>$name</td>\r
+    <td>オプション名</td>\r
+</tr><tr>\r
+    <td>$value</td>\r
+    <td>新しい値</td>\r
+</tr></table>\r
+\r
+<h3>[v2.2] setBlogOption($blogid, $name, $value)</h3>\r
+\r
+<p>blogオプションの値を変更します。<code>blogid</code>属性はどのblogでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
+\r
+<h3>[v2.2] setCategoryOption($catid, $name, $value)</h3>\r
+\r
+<p>カテゴリーオプションの値を変更します。<code>catid</code>属性はどのカテゴリーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
+\r
+<h3>[v2.2] setMemberOption($memberid, $name, $value)</h3>\r
+\r
+<p>メンバーオプションの値を変更します。<code>memberid</code>属性はどのメンバーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
+\r
+<h3>[v3.2] setItemOption($itemid, $name, $value)</h3>\r
+\r
+<p>アイテムオプションの値を変更します。<code>itemid</code>属性はどのアイテムでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
+\r
+<h3>getOption($name)</h3>\r
+\r
+<p>データベース内のオプションの値を返します。</p>\r
+\r
+<table summary="getOption"><tr>\r
+    <th abbr="param">パラメータ</th>\r
+    <th abbr="value">値</th>\r
+</tr><tr>       \r
+    <td>$name</td>\r
+    <td>オプション名</td>\r
+</tr></table>\r
+\r
+<h3>[v2.2] getBlogOption($blogid, $name)</h3>\r
+\r
+<p>blogオプションの値を返します。<code>blogid</code>属性は値がリスエストされたblogを示します(その他のオプション:<code>getOption</code>を参照)。</p>\r
+\r
+<h3>[v2.2] getCategoryOption($catid, $name)</h3>\r
+\r
+<p>カテゴリーオプションの値を返します。<code>catid</code>属性は値がリスエストされたカテゴリーを示します(その他のオプション:<code>getOption</code>を参照)。</p>\r
+\r
+<h3>[v2.2] getMemberOption($memberid, $name)</h3>\r
+\r
+<p>メンバーオプションの値を返します。<code>memberid</code>属性は値がリスエストされたメンバーを示します(その他のオプション:<code>getOption</code>を参照)。</p>\r
+\r
+<h3>[v3.2] getItemOption($itemid, $name)</h3>\r
+\r
+<p>アイテムオプションの値を返します。<code>itemid</code>属性は値がリスエストされたアイテムを示します(その他のオプション:<code>getOption</code>を参照)。</p>\r
+\r
+<h3>deleteOption($name)</h3>\r
+\r
+<p>データベースからオプションを削除します。</p>\r
+\r
+<table summary="deleteOption"><tr>\r
+    <th abbr="param">パラメータ</th>\r
+    <th abbr="value">値</th>\r
+</tr><tr>       \r
+    <td>$name</td>\r
+    <td>オプション名</td>\r
+</tr></table>\r
+\r
+<h3>[v2.2] deleteBlogOption($name)</h3>\r
+\r
+<p>blogオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
+\r
+<h3>[v2.2] deleteCategoryOption($name)</h3>\r
+\r
+<p>カテゴリーオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
+\r
+<h3>[v2.2] deleteMemberOption($name)</h3>\r
+\r
+<p>メンバーオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
+\r
+<h3>[v3.2] deleteItemOption($name)</h3>\r
+\r
+<p>アイテムオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
+\r
+<h3>[v2.2] getAllBlogOptions($name)</h3>\r
+\r
+<p>与えられたblogオプションの全ての値を返します。結果は存在するblogidごとの連想配列です。</p>\r
+\r
+<h3>[v2.2] getAllCategoryOptions($name)</h3>\r
+\r
+<p>与えられたカテゴリーオプションの全ての値を返します。結果は存在するcatidごとの連想配列です。</p>\r
+\r
+<h3>[v2.2] getAllMemberOptions($name)</h3>\r
+\r
+<p>与えられたメンバーオプションの全ての値を返します。結果は存在するmemberidごとの連想配列です。</p>\r
+\r
+<h3>[v3.2] getAllItemOptions($name)</h3>\r
+\r
+<p>与えられたアイテムオプションの全ての値を返します。結果は存在するitemidごとの連想配列です。</p>\r
+\r
+<h3>[v3.2] getBlogOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
+\r
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのblogid ('id') の値 ('value') を持つ配列になっています。</p>\r
+\r
+<table summary="getOption"><tr>\r
+    <th abbr="param">パラメータ</th>\r
+    <th abbr="value">値</th>\r
+</tr><tr>\r
+    <td>$name</td>\r
+    <td>オプション名</td>\r
+</tr><tr>\r
+    <td>$amount</td>\r
+    <td>必要なオプション数</td>\r
+</tr><tr>\r
+    <td>$sort</td>\r
+    <td>昇順 ('asc') か降順 ('desc') で並べ替え</td>\r
+</tr></table>\r
+\r
+<h3>[v3.2] getMemberOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
+\r
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのメンバーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>\r
+\r
+<h3>[v3.2] getCategoryOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
+\r
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのカテゴリーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>\r
+\r
+<h3>[v3.2] getItemOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
+\r
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのアイテムID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>\r
+\r
+<div class="note">\r
+<strong>注:</strong> プラグインクラス内のコンストラクタから、これらのファンクションを呼ぶことはできません。プラグインがロードされた後にこれらを実行したいときは、かわりに<code>init()</code>メソッド内に置きます。\r
+</div>\r
+\r
+<h1>データベース・テーブル<a id="tables" name="tables" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<h2>Nucleusテーブルへのアクセス</h2>\r
+\r
+<p>v2.0まで、Nucleusテーブルへのアクセスは単に<code>nucleus_</code>と名づけられたテーブルに対してSQL命令を実行するだけのものでした。Nucleusのバージョン2.2以降はカスタム・テーブル名を利用できるようになったため、プラグイン開発に若干注意する必要があります。</p>\r
+<p>v3.5でNucleusはPDO等MySQL以外のデータベースハンドラのサポートをするようになりました。この機能はベータ実装ではありますが、プラグイン開発者はデータベースの呼び出しに使用する関数の「sql_*」への書き換えを始めてください。\r
+基本的に、使用している全ての「mysql_*」関数を「sql_*」に置き換える必要があります。たとえば<code>mysql_fetch_assoc($result)</code>は<code>sql_fetch_assoc($result)</code> に置き換えになります。\r
+全ての関数を書き換えたら、Sql APIが無い古いバージョンのNucleusインストールできないように、次に示すコードをプラグイン内に記述して、インストールに必要な最低バージョンを350に指定する必要があります。<br />\r
+<code>function getMinNucleusVersion( return '350';)</code></p>\r
+\r
+<ol>\r
+    <li><code>nucleus_item</code> などの固定されたテーブル名の代わりに、テーブル名のプレフィックスを生成するために <code>sql_table('item') </code>というグローバルファンクションを利用します。</li>\r
+    <li><code>supportsFeature('SqlTablePrefix')</code> が呼ばれたときにプラグインが1(真)を返すようにします。これがないと、カスタムプレフィックスがセットされている場合でバージョンが2.0より大きいNucleusではプラグインをロードできません(用心のため)。</li>\r
+    <li>3.5以降:<code>supportsFeature('SqlApi')</code> が呼ばれたときにプラグインが1(真)を返すようにします。3.5以降のバージョンでは、データベースのバックエンドにmysqlでないものを使用している場合にプラグインをロードできなくなります(用心のため)。</li>\r
+</ol>\r
+\r
+<p class="note">v2.0までのNucleusではグローバルファンクション <code>sql_table</code> は利用できないことに注意してください。もしこのメソッドを用いつつ、プラグインをv2.0以下のNucleusで動作させたい場合は、以下のコードをプラグインクラスの前に追加してください。</p>\r
+\r
+<pre class="example"><code>&lt;?\r
+\r
+// プラグインがNucleusバージョン2.0以下と互換性を持つために必要\r
+if (!function_exists('sql_table'))\r
+{\r
+    function sql_table($name) {\r
+        return 'nucleus_' . $name;\r
+    }\r
+}\r
+\r
+class NP_HelloWorld extends NucleusPlugin {\r
+...\r
+}\r
+\r
+?&gt;</code></pre>\r
+\r
+<h2>独自テーブル</h2>\r
+\r
+<p>もしプラグイン独自のテーブルが必要なら、<code>install</code>メソッドの中で独自テーブルを生成し、<code>unInstall</code>メソッドの中でそれを削除するようにします。</p>\r
+\r
+<p>いくつかの注意点</p>\r
+<ul>\r
+    <li><code>nucleus_plug_<em>plugname</em></code> のように、他のプラグインと競合しないテーブル名を考えてください。カスタムプレフィックスに対応するため、テーブル名を<code>sql_table('plug_plugname')</code> で生成してください。</li>\r
+    <li>自分自身でデータベース接続をする必要はありません。PHPコマンド <code>mysql_query()</code> を使ってSQL命令を実行できます。</li>\r
+    <li>自分でデータベース接続をする場合、後でNucleusデータベースへの接続を復元するようにしてください。自前処理の後で <code>sql_connect()</code>  を呼ぶことで可能です。頻繁な再接続を避けるために、コンストラクタでそれを行うのも良いです。<code>$this- &gt;db</code>のリンクIDを保持でき、各クエリにそれを渡すことができます。</li>\r
+    <li>バックアップ機能を使う時は、独自テーブルもバックアップに含めるよう、<code>getTableList()</code> を再定義してください。</li>\r
+       <li>ユーザーがプラグインをアップデートする時や、何らかの理由で一時的にプラグインをアンインストールしなければならない時、やプラグイン独自のテーブルの内容が失われる事があります。そうならないように、テーブルを削除するか否かをプラグインオプションで設定できるようにしておくといいでしょう。テーブルの削除をオプションでコントロールするには、install()メソッドで次のようなオプションを作成します。\r
+       <pre class="example"><code>$this-&gt;createOption('del_uninstall', 'Delete NP_MyPlugin data tables on uninstall?', 'yesno','no');</code></pre>\r
+       そしてuninstall()メソッドで、次のようにします。\r
+       <pre class="example"><code>if ($this-&gt;getOption('del_uninstall') == 'yes')   {\r
+       foreach ($this-&gt;getTableList() as $table) {\r
+               sql_query("DROP TABLE $table");\r
+       }\r
+}</code></pre></li>\r
+</ul>\r
+\r
+\r
+\r
+<h1>プラグイン管理エリア<a id="admin" name="admin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>Ver2.5から、Nucleusの管理エリアに統合されたプラグイン管理エリアを作成できます。これらのページは従来のプラグイン管理ページや左側のクイックメニューからアクセスできます。</p>\r
+\r
+<h2>基本</h2>\r
+\r
+<p>管理エリアを提供するには、次のステップが必要です。</p>\r
+\r
+<ol>\r
+  <li>プラグインディレクトリに<strong>プラグイン名</strong>のサブディレクトリを作ります。たとえばプラグイン名が<code>NP_PluginName</code>なら、'pluginname'です。ディレクトリ名はすべて小文字で!</li>\r
+  <li>\r
+    そのディレクトリで、次のような<strong>index.php</strong>を用意します。\r
+    <pre><code>&lt;?php\r
+\r
+    // if your 'plugin' directory is not in the default location,\r
+    // edit this variable to point to your site directory\r
+    // (where config.php is)\r
+    $strRel = '../../../';\r
+\r
+    include($strRel . 'config.php');\r
+    if (!$member-&gt;isLoggedIn())\r
+        doError('You\'re not logged in.');\r
+\r
+    include($DIR_LIBS . 'PLUGINADMIN.php');\r
+\r
+    // create the admin area page\r
+    $oPluginAdmin = new PluginAdmin('<strong>PluginName</strong>');\r
+    $oPluginAdmin-&gt;start();\r
+\r
+    echo '&lt;h2&gt;プラグイン名&lt;/h2&gt;';\r
+\r
+    echo '&lt;p&gt;<strong>ページ内容</strong>&lt;p&gt;';\r
+\r
+    $oPluginAdmin-&gt;end();\r
+\r
+?&gt;</code></pre>\r
+  </li>\r
+  <li>\r
+    プラグイン側に次のコードを挿入し、クイックメニューイベントに登録します。\r
+    <pre><code>function event_QuickMenu(&amp;$data) {\r
+        array_push(\r
+            $data['options'],\r
+            array(\r
+                'title'   =&gt; '<strong>プラグイン名</strong>',\r
+                'url'     =&gt; $this-%gt;getAdminURL(),\r
+                'tooltip' =&gt; '<strong>ツールチップテキスト</strong>'\r
+            )\r
+        );\r
+    }</code></pre>\r
+  </li>\r
+  <li>\r
+    プラグイン側に次の関数を記述します。\r
+    <pre><code>function hasAdminArea()\r
+{\r
+    return 1;\r
+}</code></pre>\r
+  </li>\r
+  <li> オプション。クイックメニュー登録のオプションを作成し、誰に表示するか制限します。<code>quickmenu</code>という<code>yesno</code>タイプのオプションがinstall()にあるとします。次のように、クイックメニュー登録の表示を最高管理者とブログ管理者に制限します。\r
+       <pre class="example"><code>function event_QuickMenu(&amp;$data) {\r
+    // only show when option enabled\r
+    if ($this-&gt;getOption('quickmenu') != 'yes') return;\r
+    global $member;\r
+    if (!$member-&gt;isAdmin() &amp;&amp; !count($member-&gt;getAdminBlogs())) return;\r
+    array_push($data['options'],\r
+       array('title' =&gt; 'PluginName',\r
+               'url' =&gt; $this-&gt;getAdminURL(),\r
+               'tooltip' =&gt; 'Administer NP_PluginName'));\r
+}</code></pre>\r
+  </li>\r
+</ol>\r
+\r
+<h2>考慮すること</h2>\r
+\r
+<ul>\r
+ <li>登録できるからといって安易にクイックメニューへ登録しないこと。クイックメニューにプラグインが100個並んだりしたらかなりウンザリするでしょう。ですので、クイックメニューに登録する場合でも、クイックメニュー登録を有効・無効化するプラグインオプションを(グローバルまたはメンバーオプションで)用意することを考えてください。</li>\r
+ <li><code>プラグインディレクトリが nucleus/plugins/ ではない場合は、index.php内の $strRel</code> 変数は手動で書き換える必要があります。</li>\r
+ <li>管理エリアのアウトプットが<strong>正しいXHTML</strong>になっているか確認してください。正しくないと、MozillaなどのGeckoベースのブラウザでページ表示が崩れます。</li>\r
+</ul>\r
+\r
+<h2>PluginAdmin クラス</h2>\r
+\r
+<p><code>PluginAdmin</code> クラスは助けになります。これを一度生成すれば、<code>$oPluginAdmin-&gt;plugin</code> でプラグインのインスタンスにアクセスできます。</p>\r
+\r
+<h1>プラグイン用ヘルプページ <a id="help" name="help" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>Nucleus v3.2から、プラグインの機能の概要、利用できるスキン・テンプレート変数、さらに詳細な情報のありかなどを示すヘルプページを提供可能になりました。</p>\r
+\r
+<p>ヘルプページは管理画面のプラグイン一覧からアクセス可能になります。</p>\r
+\r
+<h2>基本</h2>\r
+<p>ヘルプページを提供するために、次のステップが必要です。</p>\r
+<ol>\r
+<li>プラグインディレクトリに、プラグイン名をつけたサブディレクトリを作成します。ディレクトリ名は小文字であることに注意します。<a href="#admin">管理エリア</a>を作るときと同様です。</li>\r
+<li>そのディレクトリの中に help.html を作り、プラグインについての文章を記述します。次の雛型からはじめると良いでしょう。\r
+<pre><code>&lt;h3&gt;プラグインの概要&lt;/h3&gt;\r
+\r
+&lt;p&gt;このプラグインはヘルプページがいかに機能するかを示すためだけのものです&lt;/p&gt;\r
+\r
+&lt;h3&gt;インストール&lt;/h3&gt;\r
+\r
+&lt;p&gt;これを読めてるならインストールは正しく出来てます :-)&lt;/p&gt;\r
+\r
+&lt;h3&gt;スキン変数&lt;/h3&gt;\r
+\r
+&lt;p&gt;このプラグインはただのテストケースなのでスキン・テンプレート変数はありませんが、書くとすれば。\r
+\r
+&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1%&gt;&lt;/b&gt;: なにかをする&lt;/li&gt;\r
+&lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1(foobar)%&gt;&lt;/b&gt;: 別のなにかをする&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;\r
+\r
+&lt;h3&gt;サポートとバグ報告&lt;/h3&gt;\r
+\r
+&lt;p&gt;さらなるサポートやバグ報告のために、次のフォーラムのスレッドを利用してください。\r
+&lt;a href="http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;"&gt;\r
+http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;&lt;/a&gt;&lt;/p&gt;\r
+\r
+&lt;h3&gt;バージョン履歴&lt;/h3&gt;\r
+\r
+&lt;ul&gt;&lt;li&gt;Version 0.1: 最初のテストケースバージョン&lt;/li&gt;\r
+&lt;li&gt;Version 0.0: その前のバージョン ;-)&lt;/li&gt;&lt;/ul&gt;</code></pre>\r
+</li>\r
+<li>supportsFeature('HelpPage') で0より大きい数字を返すように設定します。\r
+<pre><code>function supportsFeature($what) {\r
+    switch($what) {\r
+    case 'HelpPage':\r
+        return 1;\r
+      default:\r
+        return 0;\r
+    }\r
+  }</code></pre>\r
+</li>\r
+</ol>\r
+\r
+<h1>プラグイン依存チェック <a id="dependency" name="dependency" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>v3.2から、他のプラグインとの依存関係を宣言する新しいプラグインインターフェイスが追加されました。\r
+他のプラグインの機能を必要とするプラグインに利用できます。特に依存関係が成立しなくて正しく機能しない状態を検知するときに便利です。</p>\r
+\r
+<h2>この機能を利用するプラグインの書き方</h2>\r
+\r
+<p>現実世界での例からはじめましょう。</p>\r
+\r
+<p>NP_PageLinkList は NP_BlogWithOffset の機能を利用するため、利用者には NP_BlogWithOffset のインストール後に NP_PageLinkList をインストールさせたいとします。\r
+NucleusはこのAPIによって、インストール前に依存関係を検知させる方法をプラグインに提供します。</p>\r
+\r
+<p>このケースでは、NP_PageLinkList 側に NP_BlogWithOffset が必要だということを認識させるコードを埋め込みます。\r
+プラグインがインストールされる際に、Nucleusコアは <code>getPluginDep()</code> というファンクションを呼び出します。\r
+このファンクションは必要なプラグインのリストを返し、コアはインストール済みのプラグインをチェックして、もし依存関係に欠如があればインストールを拒否します。</p>\r
+\r
+<p>必要なことは NP_PageLinkList にこのファンクションを追加する、ただそれだけです。</p>\r
+\r
+<pre><code>function getPluginDep() {\r
+     return array('NP_BlogWithOffset');\r
+}</code></pre>\r
+\r
+<p>このプラグイン依存チェックは、他のプラグインが依存しているプラグインがアンインストールされることも防ぎます。</p>\r
+\r
+<h1>プラグインの多国語化<a name="internationalization" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<h2>プラグインをより多くの人に使ってもらうために</h2>\r
+\r
+<p>あなたと同じ言葉を話さない世界中の人達がプラグインをより使いやすくするために、プラグインを多国語化できます。\r
+少し手間は増えますが、プラグインが出力する文章を翻訳するだけで可能です。\r
+以下に Nucleus のコアで用意されている標準的な手順を記載します。\r
+Andyさん、ありがとう!</p>\r
+\r
+<ol>\r
+       <li><strong>プラグインを作る</strong>\r
+\r
+先ずはじめに、あなたが普段使っている言葉でプラグインを作ります。プラグインが安定して動作するようになってから、言語ファイルを作成することが推奨されます。</li>\r
+       <li><strong>プラグインディレクトリを作る</strong>\r
+\r
+作ったプラグインの名前が NP_AbcDef なら、プラグインディレクトリの名前は abcdef になります(必ず小文字を使用すること)。</li>\r
+       <li><strong>言語ファイルを作る</strong>\r
+\r
+プラグインディレクトリに言語ファイルを作成します。言語ファイルの名前は Nucleus コアが使用しているものと同じにします。例えば、英語なら english.php。日本語の UTF-8 なら japanese-utf8.phpになります(UTF がお勧めです。参考までに日本語の EUC の場合は japanese-euc.php になります)。</li>\r
+       <li><strong>文を定義する</strong>\r
+\r
+次のように言語ファイル内で分を定義します。\r
+\r
+<pre class="example"><code>&lt;?php\r
+define('_ABCDEF_MESSAGENAME',                  '実際のメッセージ');\r
+  . . .\r
+?&gt;</code></pre>\r
+\r
+全ての文を定義する必要があります。定数は一回しか定義できないので、既に定義されているものと重複しないようにプラグインの名前をはじめにつけることが推奨されます(この例だと _ABCDEF)。</li>\r
+       <li><strong>文の置き換え</strong>\r
+\r
+全ての文を、言語ファイルで定義した定数と置き換えます</li>\r
+       <li><strong>init() メソッドの編集</strong>\r
+\r
+プラグイン内の init() メソッドを、次のように編集します(既に init() メソッドを定義している場合は init() メソッド内にコードを追記します)。\r
+\r
+<pre class="example"><code>   function init() {\r
+      // include language file for this plugin\r
+      $language = ereg_replace( '[\\|/]', '', getLanguageName());\r
+      if (file_exists($this-&gt;getDirectory().$language.'.php'))\r
+         include_once($this-&gt;getDirectory().$language.'.php');\r
+      else\r
+         include_once($this-&gt;getDirectory().'english.php');\r
+   }</code></pre>\r
+このコードは Nucleus のコアで使用されているものと同一です。</li>\r
+\r
+       <li><strong>言語ファイルの追加</strong>\r
+\r
+「英語」が基本の言語になっていますので、「英語」の言語ファイルも追加することが望まれます。</li>\r
+</ol>\r
+\r
+\r
+\r
+<h1>スキン変数の出力の書式 <a name="skinvar-formatting" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>偉大なプラグインのいくつかは、様々なスキンや URL の生成において、必ずしもそのまま使用できるとはいえません。なぜなら、doSkinVar() メソッドによって出力されるものが、\r
+ユーザーのニーズに十二分に合致するものであるとは言いがたいからです。Nucleus では、出力をここのユーザーによっておのおののニーズに沿ったものにする為に、いくつかのツールを用意しています。</p>\r
+\r
+<h2>URLの出力</h2>\r
+\r
+<p>各ブログ・カテゴリー・アイテム・メンバー、それから action.php や管理エリア、または各プラグインの管理エリアなどの URL を出力する為に、Nucleus はコアの機能として\r
+いくつかのファンクションとグローバル変数を用意しています。:</p>\r
+\r
+<table summary="Nucleus の各ページへのリンクを生成する為に便利な変数とファンクション">\r
+       <caption>Nucleus の各ページへのリンクを生成する為に便利な変数とファンクション</caption>\r
+       <tr>\r
+               <th>名前</th><th>種類</th><th>引数</th><th>説明</th>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$CONF['AdminURL']</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus の管理領域への絶対 URL</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$CONF['PluginURL']</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus のプラグインディレクトリへの絶対 URL。<code>$CONF['PluginURL'].'pluginname/'</code> の様にして、プラグインの管理エリアへのリンク生成に使用する。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$CONF['ActionURL']</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus の action.php への絶対 URL。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$CONF['MediaURL']</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus のメディアディレクトリへの絶対 URL。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$CONF['SkinsURL']</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus のスキンディレクトリへの絶対 URL。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$CONF['IndexURL']</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus のメインディレクトリへの絶対 URL。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$DIR_NUCLEUS</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus のメインディレクトリへのシステムルートからのフルパス。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$DIR_SKINS</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus のスキンディレクトリへのシステムルートからのフルパス。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$DIR_MEDIA</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus のメディアディレクトリへのシステムルートからのフルパス。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$DIR_PLUGINS</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus のプラグインディレクトリへのシステムルートからのフルパス。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$DIR_LANG</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus の言語ファイルディレクトリへのシステムルートからのフルパス。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>$DIR_LIBS</code></td>\r
+               <td>グローバル変数</td>\r
+               <td>なし</td>\r
+               <td>Nucleus のコアディレクトリへのシステムルートからのフルパス。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>getAdminURL()</code></td>\r
+               <td>PLUGIN クラス内メソッド</td>\r
+               <td>なし</td>\r
+               <td>プラグインの管理エリアディレクトリが存在すればその URL を返す(存在しない場合は無効)。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>getDirectory()</code></td>\r
+               <td>PLUGIN クラス内メソッド</td>\r
+               <td>なし</td>\r
+               <td>プラグインの追加ファイルが格納されたサーバーのファイルシステムのパスを返します(存在しない場合は無効)。結果は".../nucleus/plugins/plugname/"のようになります。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>createItemLink($itemid, $extra = '')</code></td>\r
+               <td>グローバルファンクション</td>\r
+               <td><code>$itemid</code> 整数。リンクしたいアイテムの ID。<br />\r
+                       <code>$extra</code> 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。\r
+               </td>\r
+               <td>ユーザーによって選択されたスキームにより、 <code>$itemid</code> に対応したアイテムへのリンクが生成されます。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>createMemberLink($memberid, $extra = '')</code></td>\r
+               <td>グローバルファンクション</td>\r
+               <td><code>$memberid</code> 整数。リンクしたい存在するメンバーの ID。<br />\r
+                       <code>$extra</code> 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。\r
+               </td>\r
+               <td>ユーザーによって選択されたスキームにより、 <code>$memberid</code> に対応したメンバーへのリンクが生成されます。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>createCategoryLink($catid, $extra = '')</code></td>\r
+               <td>グローバルファンクション</td>\r
+               <td><code>$catid</code> 整数。リンクしたいカテゴリーの ID。<br />\r
+                       <code>$extra</code> 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。\r
+               </td>\r
+               <td>ユーザーによって選択されたスキームにより、 <code>$catid</code> に対応したカテゴリーへのリンクが生成されます。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>createArchiveListLink($blogid = '', $extra = '')</code></td>\r
+               <td>グローバルファンクション</td>\r
+               <td><code>$blogid</code> 整数。リンクしたいアーカイブ一覧が存在ブログの ID。<br />\r
+                       <code>$extra</code> 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。\r
+               </td>\r
+               <td>ユーザーによって選択されたスキームにより、 <code>$blogid</code> に対応したアーカイブ一覧へのリンクが生成されます。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>createArchiveLink($blogid, $archive, $extra = '')</code></td>\r
+               <td>グローバルファンクション</td>\r
+               <td><code>$blogid</code> 整数。リンクしたい月別アーカイブが存在するブログの ID。<br />\r
+                       <code>$archive</code> 文字列。アーカイブのパラメータとして、渡した「日(または年、月)」のものが存在するもの。<br />\r
+                       <code>$extra</code> 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。\r
+               </td>\r
+               <td>ユーザーによって選択されたスキームにより、 <code>$blogid</code> に対応した月別アーカイブへのリンクが生成されます。</td>\r
+       </tr>\r
+       <tr>\r
+               <td><code>createBlogidLink($blogid, $extra = '')</code></td>\r
+               <td>グローバルファンクション</td>\r
+               <td><code>$blogid</code> 整数。リンクしたいブログの ID。<br />\r
+                       <code>$extra</code> 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。\r
+               </td>\r
+               <td>ユーザーによって選択されたスキームにより、 <code>$blogid</code> に対応したブログへのリンクが生成されます。</td>\r
+       </tr>\r
+</table>\r
+\r
+<h2>スキンへの出力にテンプレートを使う</h2>\r
+\r
+<p>出力する文字列をテンプレートを使って整形出来るようにしましょう。あなたが順不同のリストで出力したいと考えていたとしても、別のユーザーは同じデータを\r
+記号で区切ったり、特別な形で出力したいと考えるかもしれません。Nucleus にはテンプレートデータを作ったり定義したりする2種類の方法があります。\r
+次に上げるれいの両方において、<code>&lt;%foo%&gt;</code> と <code>&lt;%bar%&gt;</code> のふたつのテンプレート変数を使用します。</p>\r
+\r
+<ol>\r
+       <li><strong>プラグインのオプションを使う方法。</strong>この方法は v3.2 以降で使用でき、次のように <code>install()</code> メソッド\r
+       に記述する事によって簡単に作成する事が出来ますが、アップグレードのためにプラグインを削除した時に、ユーザーは同時にカスタマイズした\r
+       テンプレートを失ってしまうという大きなデメリットがあります。\r
+       <pre class="example"><code>$this-&gt;createOption('my_template', \r
+               'プラグインの出力の為のテンプレート', \r
+               'textarea', \r
+               '&lt;li&gt;&lt;%foo%&gt; loves &lt;%bar%&gt;&lt;/li&gt;');</code></pre>\r
+       <code>doSkinVar()</code> メソッドで、<code>foo</code> と <code>bar</code> を次のように定義して、テンプレートを埋めます。\r
+       <pre class="example"><code>$mytemplate = $this-&gt;getOption('my_template');\r
+$couples = array(\r
+                       array(\r
+                               'foo'=&gt;'Ricky',\r
+                               'bar'=&gt;'Lucy'),\r
+                       array(\r
+                               'foo'=&gt;'Sid',\r
+                               'bar'=&gt;'Nancy'),\r
+                       array(\r
+                               'foo'=&gt;'Mickey',\r
+                               'bar'=&gt;'Minnie')\r
+                       );\r
+foreach ($couples as $values) {\r
+       echo TEMPLATE::fill($mytemplate,$values);\r
+}</code></pre>\r
+       これでプラグインのスキン変数 <code>&lt;%TemplateTest%&gt;</code> を書いたところに、次のように出力されます。\r
+       <pre class="example"><code>&lt;li&gt;Ricky loves Lucy&lt;/li&gt;\r
+&lt;li&gt;Sid loves Nancy&lt;/li&gt;\r
+&lt;li&gt;Mickey loves Minnie&lt;/li&gt;</code></pre>\r
+       </li>\r
+       \r
+       <li><strong>Nucleus コアのテンプレートシステムを使う方法。</strong>この方法は v3.4以降で使用できます。この方法の利点は、他のテンプレートと\r
+       同じようにデータベースに格納され、配布用にテンプレートをエクスポートできるところにあります。この API を使用したプラグインのサンプルが、\r
+       フォーラムの<a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=24401#24401" title="Sample">新API「TemplateExtraFields」を使ったプラグインの見本</a>に\r
+       (本家フォーラムのスレッドは <a href="http://forum.nucleuscms.org/viewtopic.php?p=87672#87672" title="Sample">Skin specific values for Plugins</a>)\r
+       にあります。細かな点は本家フォーラムの <a href="http://forum.nucleuscms.org/viewtopic.php?p=87672#87672" title="Sample">Skin specific values for Plugins</a> スレッド\r
+       を参照してください。ここでは要約のみ書いてあります。\r
+       まず、<code>install()</code> メソッド中でプラグインオプションを作成し、ここでテンプレートのデフォルトの内容を定義します。\r
+       <pre class="example"><code>$this-&gt;createOption('my_template', \r
+               'Template used to format output of plugin.', \r
+               'textarea', \r
+               '&lt;li&gt;&lt;%foo%&gt; loves &lt;%bar%&gt;&lt;/li&gt;');</code></pre>\r
+       次に割り込みをかけるイベントのリストに <code>TemplateExtraFields</code> を登録します。\r
+       <pre class="example"><code>function getEventList() { return array('TemplateExtraFields'); }</code></pre>\r
+       そして、<code>event_TemplateExtraFields</code> メソッドを作成します。\r
+       <pre class="example"><code>function event_TemplateExtraFields(&amp;$data) {\r
+    /* Add an element in the $data['fields'] array using your plugin name as the key \r
+       and an associative array containing the field name and field label*/\r
+    /* note that your field names should be lowercase and include the name \r
+       of your template as shown below. This will ensure that all template field names are unique. */\r
+    $data['fields']['NP_TemplateTest'] = array(\r
+        'templatetest_body'=&gt;'TemplateTest Body'\r
+    );\r
+}</code></pre>\r
+       最後に <code>doSkinVar()</code> メソッドで、テンプレートを埋めます。この時、スキン変数の引数に使用するテンプレート名が必要です。\r
+       <pre class="example"><code>function doSkinVar($skinType,$template = '') {\r
+       global $blog, $CONF, $manager,$member;\r
+\r
+       $template =&amp; $manager-&gt;getTemplate($template);\r
+       if (trim($template['templatetest_body']) == '')\r
+               $template['templatetest_body'] = $this-&gt;getOption('my_template');\r
+               \r
+       $couples = array(\r
+                       array(\r
+                               'foo'=&gt;'Ricky',\r
+                               'bar'=&gt;'Lucy'),\r
+                       array(\r
+                               'foo'=&gt;'Sid',\r
+                               'bar'=&gt;'Nancy'),\r
+                       array(\r
+                               'foo'=&gt;'Mickey',\r
+                               'bar'=&gt;'Minnie')\r
+                       );\r
+       foreach ($couples as $values) {\r
+               echo TEMPLATE::fill($template['templatetest_body'],$values);\r
+       }       \r
+}</code></pre>\r
+       ユーザーは『テンプレート編集』画面で、「TemplateTest Body」フィールドに出力したい形式でテンプレートを編集します。\r
+       例えば「default/index」テンプレートを使って、こんな風にテンプレートを編集します。\r
+       <pre class="example"><code>&lt;li&gt;&lt;%foo%&gt; loves &lt;%bar%&gt;!!!&lt;/li&gt;</code></pre>\r
+       そしてスキンに <code>&lt;%TemplateTest(default/index)%&gt;</code> と書くと、そこに\r
+       <pre class="example"><code>&lt;li&gt;Ricky loves Lucy!!!&lt;/li&gt;\r
+&lt;li&gt;Sid loves Nancy!!!&lt;/li&gt;\r
+&lt;li&gt;Mickey loves Minnie!!!&lt;/li&gt;</code></pre>と表示されます。<br />\r
+       </li>\r
+       \r
+       <li><strong>通常のテンプレートを使って書式化。</strong>この方法は v3.4 以降で、アイテムを出力するプラグインで使用できます。\r
+       この方法にはコアのテンプレートシステムの既存の「アイテム」フィールドを使うというアドバンテージがあり、スキン変数の <code>&lt;%blog%&gt;</code> \r
+       の様に使用します。スキン変数の引数として、一つ以上のアイテムの ID と使用するテンプレート名を、また、BLOG クラスの <code>readLogFromList()</code> \r
+       メソッドを呼び出せることが条件です。テンプレート変数として使用したい場合は、<code>doTemplateVar()</code> メソッドで使用することも出来ます。\r
+       例として <code>doSkinVar()</code> メソッドでこのテクニックを使う方法を示しておきます。\r
+       4つのアイテムの ID を引数として受け取り、「default/index」テンプレートを使って出力します。\r
+       <pre class="example"><code>function doSkinVar($skinType,$item1 = 0,$item2 = 0,$item3 = 0,$item4 = 0) {\r
+       global $blog;\r
+       $highlight = '';\r
+       $template = 'default/index';\r
+       $item_array = array($item1,$item2,$item3,$item4);\r
+       $blog-&gt;readLogFromList($item_array, $template);\r
+}</code></pre>\r
+       \r
+       </li>\r
+</ol>\r
+\r
+\r
+<h1>この他にも…… <a name="additional-reading" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<h2>役立つドキュメントがたくさん!</h2>\r
+\r
+<p>このドキュメント以外にもあなたがプラグインを開発するにあたって、リンク先のページもきっと役立つことと思います。</p>\r
+<ul>\r
+<li><a href="http://wiki.nucleuscms.org/plugindev:index" title="Development Wiki">Development Wiki(公式サイト(英語))</a></li>\r
+<li><a href="http://japan.nucleuscms.org/wiki/plugindev" title="Development Wiki">Nucleusプラグインの技術情報(日本公式サイト)</a></li>\r
+<li><a href="sqltables.html" title="Database Tables">Nucleus - SQL テーブル構造</a></li>\r
+<!-- <li><a href="" title=""></a></li> -->\r
+</ul>\r
+\r
+<!--\r
+<pre class="example"><code></code></pre>\r
+<pre class="example"><code></code></pre>\r
+<pre class="example"><code></code></pre>\r
+<pre class="example"><code></code></pre>\r
+-->\r
+</div>\r
+</body>\r
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/documentation/devdocs/sqltables.html b/utf8/nucleus/documentation/devdocs/sqltables.html
new file mode 100755 (executable)
index 0000000..4733637
--- /dev/null
@@ -0,0 +1,1312 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
+<head>\r
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+       -->\r
+       <!-- $Id$ -->\r
+       <!-- $NucleusJP: sqltables.html,v 1.6 2006/07/17 20:02:50 kimitake Exp $ -->\r
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+    <meta http-equiv="Content-Style-Type" content="text/css" />\r
+    <meta http-equiv="Content-Script-Type" content="text/javascript" />\r
+    <link rel="index" href="./index.html" />\r
+       <title>Nucleus - SQL テーブル構造</title>\r
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
+       <style type="text/css">\r
+               /* auto increment table columns*/\r
+               .autoinc {\r
+               }\r
+\r
+               /* primary-keys */\r
+               .primary {\r
+                       text-decoration: underline;\r
+                       font-weight: bold;\r
+               }\r
+\r
+               /* NOT NULL */\r
+               .notnull {\r
+               }\r
+\r
+               /* unique key */\r
+               .unique {\r
+               }\r
+\r
+               /* foreign keys */\r
+               .foreign {\r
+                       font-style: italic;\r
+               }\r
+\r
+               /* auto increment table columns*/\r
+               .autoinc {\r
+               }\r
+\r
+               /* fulltext index */\r
+               .fulltext {\r
+               }\r
+\r
+               /* columns/tables to remove in later versions */\r
+               .toremove {\r
+                       color: red;\r
+               }\r
+\r
+               table {\r
+                       width: 860px;\r
+               }\r
+\r
+        strong {\r
+            font-weight: bold;\r
+        }\r
+        em {\r
+            font-style: italic;\r
+        }\r
+\r
+\r
+\r
+       </style>\r
+       <script src="http://www.google.com/jsapi"></script>\r
+       <script type="text/javascript">\r
+               google.load("jquery", "1");\r
+               google.setOnLoadCallback(function() {\r
+                       $.getScript("javascript/fontsizeChanger.js");\r
+               });\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="fontSizeChanger">\r
+       <a href="#top" id="f_small">小</a>\r
+       <a href="#top" id="f_medium">中</a>\r
+       <a href="#top" id="f_large">大</a>\r
+       </div>\r
+<div id="body">\r
+\r
+\r
+\r
+<div class="heading">\r
+<a name="top" id="top">SQLテーブル・リファレンス</a>\r
+<em>2009年2月7日</em>\r
+</div>\r
+<div>\r
+<strong>訳者注:</strong>\r
+<ul>\r
+       <li>このドキュメントの原文は以下のURLにあります。<br />\r
+       <a href="http://nucleuscms.org/documentation/devdocs/sqltables.html">http://nucleuscms.org/documentation/devdocs/sqltables.html</a></li>\r
+       <li>誤訳にお気づきの方は<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=7">NucleusCMS日本語フォーラム</a>までご連絡いただけると助かります。</li>\r
+</ul>\r
+</div>\r
+\r
+<h1>はじめに</h1>\r
+\r
+<p>\r
+<a href="index.html">開発者向けドキュメントの目次へ戻る</a>\r
+</p>\r
+\r
+<p>\r
+このドキュメントはNucleusのデータベース・テーブルのフィールドを解説しています。\r
+</p>\r
+\r
+<p class="note">構造は<strong>Nucleus v3.4~</strong>のものに従っています</p>\r
+\r
+<h1><a name="toc" id="toc">目次</a></h1>\r
+\r
+<ul>\r
+       <li><a href="#legend">文書中の色使いについて</a></li>\r
+       <li>\r
+\r
+               ブログ\r
+\r
+               <ul>\r
+                       <li><a href="#nucleus_blog">nucleus_blog</a></li>\r
+                       <li><a href="#nucleus_category">nucleus_category</a></li>\r
+                       <li><a href="#nucleus_item">nucleus_item</a></li>\r
+                       <li><a href="#nucleus_comment">nucleus_comment</a></li>\r
+                       <li><a href="#nucleus_member">nucleus_member</a></li>\r
+                       <li><a href="#nucleus_team">nucleus_team</a></li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               プラグイン\r
+               <ul>\r
+                       <li><a href="#nucleus_plugin">nucleus_plugin</a></li>\r
+                       <li><a href="#nucleus_plugin_event">nucleus_plugin_event</a></li>\r
+                       <li><a href="#nucleus_plugin_option">nucleus_plugin_option</a></li>\r
+                       <li><a href="#nucleus_plugin_option_desc">nucleus_plugin_option_desc</a></li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               スキンとテンプレート\r
+               <ul>\r
+                       <li><a href="#nucleus_skin">nucleus_skin</a></li>\r
+                       <li><a href="#nucleus_skin_desc">nucleus_skin_desc</a></li>\r
+                       <li><a href="#nucleus_template">nucleus_template</a></li>\r
+                       <li><a href="#nucleus_template_desc">nucleus_template_desc</a></li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               管理\r
+               <ul>\r
+                       <li><a href="#nucleus_actionlog">nucleus_actionlog</a></li>\r
+                       <li>\r
+                               <a href="#nucleus_config">nucleus_config</a>\r
+                               <ul>\r
+                                       <li><a href="#nucleus_config_options">可能なオプション</a></li>\r
+                               </ul>\r
+                       </li>\r
+                       <li><a href="#nucleus_tickets">nucleus_tickets</a></li>\r
+                       <li><a href="#nucleus_activation">nucleus_activation</a></li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               その他\r
+               <ul>\r
+                       <li><a href="#nucleus_karma">nucleus_karma</a></li>\r
+                       <li><a href="#nucleus_ban">nucleus_ban</a></li>\r
+               </ul>\r
+       </li>\r
+\r
+\r
+</ul>\r
+\r
+\r
+<h1><a id="legend" name="legend">色使い</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<p>この文書中では、カラムの型を示すために、文字の修飾を使っています。以下に例を示します:</p>\r
+\r
+<table summary="色分けの解説"><tr>\r
+       <td class="primary" style="width:120px">プライマリ</td>\r
+       <td>プライマリキー</td>\r
+</tr><tr>\r
+       <td class="foreign">外部</td>\r
+       <td>外部キー(クリックすると参照先に飛ぶ)。MySQLは外部キーとの一貫性保持に責任を持たないことに注意</td>\r
+</tr><tr>\r
+       <td class="toremove">削除予定</td>\r
+       <td>同じ機能を提供するプラグインを優先するため、テーブルやカラムは将来のバージョンのNucleusで削除させる可能性が高い</td>\r
+</tr><tr>\r
+       <td class="fulltext">フルテキスト</td>\r
+       <td>カラムにフルテキストのインデックスが付く(検索で使用する)</td>\r
+</tr></table>\r
+\r
+\r
+\r
+<h1><a id="nucleus_blog" name="nucleus_blog">nucleus_blogテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<table summary="nucleus_blogテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+\r
+</tr><tr>\r
+       <td class="notnull autoinc primary">bnumber</td>\r
+       <td>int(11)</td>\r
+       <td>(空白)auto_increment</td>\r
+       <td>BlogのID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">bname</td>\r
+       <td>varchar(60)</td>\r
+       <td>(空白)</td>\r
+       <td>Blog名</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull unique">bshortname</td>\r
+       <td>varchar(15)</td>\r
+       <td>(空白)</td>\r
+       <td>Blogの短縮名 (スキン変数 <code>&lt;%blog%&gt;</code>などで使うものと同じ)</td>\r
+\r
+</tr><tr>\r
+       <td>bdesc</td>\r
+       <td>varchar(200)</td>\r
+       <td>NULL</td>\r
+       <td>Blogの説明</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">bcomments</td>\r
+       <td>tinyint(2)</td>\r
+       <td>1</td>\r
+       <td>コメントを許可する(1=許可, 0=不許可)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">bmaxcomments</td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>メインの目次ページでのコメントの最大表示数。既定値(0)は制限なし。インライン・コメントを使わないのならここはいじらないこと</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">btimeoffset</td>\r
+       <td>decimal(3,1)</td>\r
+       <td>0.0</td>\r
+       <td>サーバー時刻との時差。アイテムはサーバー時刻にこの値を足した時間でデータベースに保存される</td>\r
+\r
+</tr><tr>\r
+       <td class="toremove">bnotify</td>\r
+       <td>varchar(60)</td>\r
+       <td>NULL</td>\r
+       <td>通知するメール・アドレス。設定した通知イベント(内容は<code>bnotifytype</code>を参照)が発生した時にこのアドレス宛てにメールで通知される。</td>\r
+\r
+</tr><tr>\r
+       <td>burl</td>\r
+       <td>varchar(100)</td>\r
+       <td>NULL</td>\r
+       <td>BlogのURL</td>\r
+\r
+</tr><tr>\r
+       <td class="toremove">bupdate</td>\r
+       <td>varchar(60)</td>\r
+       <td>NULL</td>\r
+       <td>アイテムが投稿されるたびに変更が必要な更新ファイル。サーバー上の絶対パスで指定する。</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull foreign"><a href="#nucleus_skin_desc">bdefskin</a></td>\r
+       <td>int(11)</td>\r
+       <td>1</td>\r
+       <td>このBlogを表示するときに使う標準のスキン</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">bpublic</td>\r
+       <td>tinyint(2)</td>\r
+       <td>1</td>\r
+       <td>メンバーー以外にもコメントを許可するかどうか(1=許可/0=不許可)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull toremove">bconvertbreaks</td>\r
+       <td>tinyint(2)</td>\r
+       <td>1</td>\r
+       <td>投稿されたアイテム中の改行を<code>&lt;br /&gt;</code>に変換するかどうか(1=変換する/0=変換しない)</td>\r
+\r
+</tr><tr>\r
+       <td class="foreign"><a href="#nucleus_category">bdefcat</a></td>\r
+       <td>int(11)</td>\r
+       <td>NULL</td>\r
+       <td>カテゴリー未選択時に自動的に適用されるカテゴリーのカテゴリーID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">bnotifytype</td>\r
+       <td>int(11)</td>\r
+       <td>15</td>\r
+       <td>\r
+               どのイベントが起こったときに通知メールを送るか(通知するメール・アドレスは<code>bnotify</code>を参照)。三つの値の組み合わせからなり、掛け合わせることでnoifytypeの値が決まる。\r
+               <ul>\r
+                       <li>3: 新しいコメント</li>\r
+                       <li>5: 新しいカルマ投票</li>\r
+                       <li>7: 新しいアイテム</li>\r
+               </ul>\r
+               既定値 = 新しいコメントと新しいカルマ投票(3×5=15)\r
+       </td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">ballowpast</td>\r
+       <td>tinyint(2)</td>\r
+       <td>'0'</td>\r
+       <td>過去の日時での投稿を許可する (1=許可/0=不許可)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">bincludesearch</td>\r
+       <td>tinyint(2)</td>\r
+       <td>'0'</td>\r
+       <td>他のblogの検索の場合にも検索対象にする(1=対象にする/0=対象にしない)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">breqemail</td>\r
+       <td>tinyint(2)</td>\r
+       <td>'0'</td>\r
+       <td>コメントにメールアドレスを要求する(1=要求する/0=要求しない)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">bfuturepost</td>\r
+       <td>tinyint(2)</td>\r
+       <td>'0'</td>\r
+       <td>\r
+               ブログ内に未来の日付の記事が存在するか?(1=存在する/0=存在しない)\r
+               この値は投稿されたアイテムに応じて自動的に設定されます。\r
+       </td>\r
+\r
+</tr></table>\r
+\r
+\r
+\r
+<h1><a id="nucleus_category" name="nucleus_category">nucleus_categoryテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<table summary="nucleus_categoryテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull autoinc primary">catid</td>\r
+       <td>int(11)</td>\r
+       <td>(空白)auto_increment</td>\r
+       <td>カテゴリーID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull foreign"><a href="#nucleus_blog">cblog</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>カテゴリーが所属するBlogのID</td>\r
+\r
+</tr><tr>\r
+       <td>cname</td>\r
+       <td>varchar(40)</td>\r
+       <td>NULL</td>\r
+       <td>カテゴリーの名前</td>\r
+\r
+</tr><tr>\r
+       <td>cdesc</td>\r
+       <td>varchar(200)</td>\r
+       <td>NULL</td>\r
+       <td>カテゴリーの説明</td>\r
+</tr></table>\r
+\r
+\r
+<h1><a id="nucleus_item" name="nucleus_item">nucleus_itemテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<table summary="nucleus_itemテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull autoinc primary">inumber</td>\r
+       <td>int(11)</td>\r
+       <td>(空白)auto_increment</td>\r
+       <td>アイテムのID</td>\r
+\r
+</tr><tr>\r
+       <td class="fulltext">ititle</td>\r
+       <td>varchar(160)</td>\r
+       <td>NULL</td>\r
+       <td>タイトル</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull fulltext">ibody</td>\r
+       <td>text</td>\r
+       <td>(空白)</td>\r
+       <td>本文</td>\r
+\r
+</tr><tr>\r
+       <td class="fulltext">imore</td>\r
+       <td>text</td>\r
+       <td>NULL</td>\r
+       <td>追加部分(「続き」部分)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull foreign"><a href="#nucleus_blog">iblog</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>アイテムが所属するBlogのID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull foreign"><a href="#nucleus_member">iauthor</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>アイテムの著者のメンバーID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">itime</td>\r
+       <td>datetime</td>\r
+       <td>0000-00-00 00:00:00</td>\r
+       <td>投稿時間(サーバーとの時差を反映したもの)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">iclosed</td>\r
+       <td>tinyint(2)</td>\r
+       <td>0</td>\r
+       <td>アイテムが閉鎖されたかどうか (1=閉鎖/0=閉鎖していない).閉鎖すると、コメントやカルマ投票を受け付けない</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">idraft</td>\r
+       <td>tinyint(2)</td>\r
+       <td>0</td>\r
+       <td>アイテムはドラフト(下書き状態)かどうか。ドラフトは管理ページでだけ見ることが出来る(1=ドラフト/0=ドラフトでない)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull toremove">ikarmapos</td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>+のカルマ投票の総数</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull toremove">ikarmaneg</td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>-のカルマ投票の総数</td>\r
+\r
+</tr><tr>\r
+       <td class="foreign"><a href="#nucleus_category">icat</a></td>\r
+       <td>int(11)</td>\r
+       <td>NULL</td>\r
+       <td>アイテムが所属するカテゴリーのID</td>\r
+\r
+</tr><tr>\r
+       <td class="foreign"><a href="#nucleus_category">iposted</a></td>\r
+       <td>tinyint(2)</td>\r
+       <td>1</td>\r
+       <td>アイテムに設定された投稿時刻を経過しているか?(1=している/0=していない)</td>\r
+\r
+</tr></table>\r
+\r
+\r
+\r
+<h1><a id="nucleus_comment" name="nucleus_comment">nucleus_commentテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<table summary="nucleus_commentテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull autoinc primary">cnumber</td>\r
+       <td>int(11)</td>\r
+       <td>(空白)auto_increment</td>\r
+       <td>コメントのID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull fulltext">cbody</td>\r
+       <td>text</td>\r
+       <td>(空白)</td>\r
+       <td>コメントの本文</td>\r
+\r
+</tr><tr>\r
+       <td>cuser</td>\r
+       <td>varchar(40)</td>\r
+       <td>NULL</td>\r
+       <td>筆者名(メンバーでない場合,メンバーの場合はcmember参照)</td>\r
+\r
+</tr><tr>\r
+       <td>cmail</td>\r
+       <td>varchar(100)</td>\r
+       <td>NULL</td>\r
+       <td>メール・アドレスあるいはURL(メンバーでない場合,メンバーの場合はcmember参照)</td>\r
+\r
+</tr><tr>\r
+       <td>cemail</td>\r
+       <td>varchar(100)</td>\r
+       <td>NULL</td>\r
+       <td>メール・アドレス(メンバーでない場合,メンバーの場合はcmember参照)</td>\r
+\r
+</tr><tr>\r
+       <td class="foreign"><a href="#nucleus_member">cmember</a></td>\r
+       <td>int(11)</td>\r
+       <td>NULL</td>\r
+       <td>コメントを書いたメンバーのID(メンバーでない場合は0)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull foreign"><a href="#nucleus_item">citem</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>コメントが書き込まれたアイテムのID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">ctime</td>\r
+       <td>datetime</td>\r
+       <td>0000-00-00 00:00:00</td>\r
+       <td>コメントを書き込んだ時間</td>\r
+\r
+</tr><tr>\r
+       <td>chost</td>\r
+       <td>varchar(60)</td>\r
+       <td>NULL</td>\r
+       <td>コメントを入力したホスト名</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">cip</td>\r
+       <td>varchar(15)</td>\r
+       <td>(空白)</td>\r
+       <td>コメントを入力したホストのIPアドレス</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull foreign"><a href="#nucleus_blog">cblog</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>コメント書き込まれたアイテムが所属するBlogのID</td>\r
+\r
+</tr></table>\r
+\r
+\r
+\r
+\r
+<h1><a id="nucleus_member" name="nucleus_member">nucleus_memberテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<table summary="nucleus_memberテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull autoinc primary">mnumber</td>\r
+       <td>int(11)</td>\r
+       <td>(空白)auto_increment</td>\r
+       <td>メンバーのID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull unique">mname</td>\r
+       <td>varchar(16)</td>\r
+       <td>(空白)</td>\r
+       <td>ログインID(表示される名前)</td>\r
+\r
+</tr><tr>\r
+       <td>mrealname</td>\r
+       <td>varchar(60)</td>\r
+       <td>NULL</td>\r
+       <td>フルネーム(ハンドルネーム)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">mpassword</td>\r
+       <td>varchar(40)</td>\r
+       <td>(空白)</td>\r
+       <td>パスワード (<a href="http://www.php.net/md5" title="Info about the PHP md5() function">md5</a>で暗号化してある)</td>\r
+\r
+</tr><tr>\r
+       <td>memail</td>\r
+       <td>varchar(60)</td>\r
+       <td>NULL</td>\r
+       <td>メールアドレス</td>\r
+\r
+</tr><tr>\r
+       <td>murl</td>\r
+       <td>varchar(100)</td>\r
+       <td>NULL</td>\r
+       <td>URL</td>\r
+\r
+</tr><tr>\r
+       <td>mnotes</td>\r
+       <td>varchar(100)</td>\r
+       <td>NULL</td>\r
+       <td>追加事項(メンバー自身が記述できる)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">madmin</td>\r
+       <td>tinyint(2)</td>\r
+       <td>0</td>\r
+       <td>Super-admin(最高権限管理者)か (1=super-admin/0=super-adminではない super-adminはすべての権利を持つ。システムに一人はsuper-adminがいる)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">mcanlogin</td>\r
+       <td>tinyint(2)</td>\r
+       <td>1</td>\r
+       <td>管理エリアへのログインを許可 (1=許可/0=不許可)</td>\r
+\r
+</tr><tr>\r
+       <td>mcookiekey</td>\r
+       <td>varchar(40)</td>\r
+       <td>NULL</td>\r
+       <td>このキーのコピーがユーザーのクッキーに保存され、ログオンに使う。メンバーがログオンすると、ランダムなcookiekeyが生成され、一方はデータベースに、他方がユーザーのコンピュータに保存される。</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">deflang</td>\r
+       <td>varchar(20)</td>\r
+       <td>''</td>\r
+       <td>このメンバー用の言語ファイルを指定する</td>\r
+</tr></table>\r
+\r
+\r
+\r
+\r
+\r
+<h1><a id="nucleus_team" name="nucleus_team">nucleus_teamテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<p>Blogのチームメンバーごとに、この表にデータがある</p>\r
+\r
+<table summary="nucleus_teamテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull primary foreign"><a href="#nucleus_member">tmember</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>メンバーのID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull primary foreign"><a href="#nucleus_blog">tblog</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>チーム・メンバーになっているBlog</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">tadmin</td>\r
+       <td>tinyint(2)</td>\r
+       <td>0</td>\r
+       <td>Blogの管理者か (0=管理者ではない/1=管理者。各Blogは一人は管理者がいる)</td>\r
+</tr></table>\r
+\r
+\r
+\r
+<h1><a id="nucleus_plugin" name="nucleus_plugin">nucleus_pluginテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<table summary="nucleus_pluginテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull autoinc primary">pid</td>\r
+       <td>int(11)</td>\r
+       <td>(空白)auto_increment</td>\r
+       <td>プラグインのID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">pfile</td>\r
+       <td>varchar(40)</td>\r
+       <td>(空白)</td>\r
+       <td>拡張子を覗いたプラグインのファイル名(例えば<code>NP_CommentControl</code>)。プラグイン・ディレクトリにファイルがないといけない。</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">porder</td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>プラグインが呼び出される順番。プラグイン・ページで表示される順番でもある。数字が小さい方がリストの上の方に来る。</td>\r
+</tr></table>\r
+\r
+\r
+<h1><a id="nucleus_plugin_event" name="nucleus_plugin_event">nucleus_plugin_eventテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<p>各プラグインが登録するイベントを記録するキャッシュ。リクエストの度にすべてのプラグインを読み込んで,それらが使うイベントを調べる手間を省くために保存している。<a href="plugins.html#events">プラグインのイベントについてはこちらを参照。</a></p>\r
+\r
+<table summary="nucleus_plugin_eventテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull foreign"><a href="#nucleus_plugin">pid</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>プラグインのID</td>\r
+\r
+</tr><tr>\r
+       <td>event</td>\r
+       <td>varchar(40)</td>\r
+       <td>NULL</td>\r
+       <td>呼び出されるイベントの名前</td>\r
+</tr></table>\r
+\r
+\r
+<h1><a id="nucleus_plugin_option" name="nucleus_plugin_option">nucleus_plugin_optionテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<p>プラグイン・オプションの値を格納する。オプション自体の定義については<a href="#nucleus_plugin_option_desc">nucleus_plugin_option_desc</a>テーブルを参照。</p>\r
+\r
+<table summary="nucleus_plugin_optionテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+\r
+</tr><tr>\r
+       <td class="notnull autoinc primary foreign"><a href="#nucleus_plugin_option_desc">oid</a></td>\r
+       <td>int(11)</td>\r
+       <td>(空白)auto_increment</td>\r
+       <td>オプションのID (<a href="#nucleus_plugin_option_desc">nucleus_plugin_option_desc</a>テーブルを参照)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">ovalue</td>\r
+       <td>TEXT</td>\r
+       <td>(空白)</td>\r
+       <td>オプションの値</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull primary">ocontextid</td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>\r
+               オプションが使われるコンテキストによって意味合いが変わる\r
+               <ul>\r
+                       <li>グローバル・コンテキスト: 使わない</li>\r
+                       <li>Blogコンテキスト: <a href="#nucleus_blog">ブログのID</a></li>\r
+                       <li>カテゴリー・コンテキスト: <a href="#nucleus_category">カテゴリーのID</a></li>\r
+                       <li>メンバー・コンテキスト: <a href="#nucleus_member">メンバーのID</a></li>\r
+               </ul>\r
+       </td>\r
+</tr></table>\r
+\r
+\r
+\r
+<h1><a id="nucleus_plugin_option_desc" name="nucleus_plugin_option_desc">nucleus_plugin_option_descテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<p>プラグインがオプションを作るたびにこのテーブル内にデータができる。</p>\r
+\r
+<table summary="nucleus_plugin_option_descテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull autoinc unique">oid</td>\r
+       <td>int(11)</td>\r
+       <td>(空白)auto_increment</td>\r
+       <td>オプションのID。<a href="#nucleus_plugin_option">nucleus_plugin_option</a>テーブルで使う</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull primary foreign"><a href="#nucleus_plugin">opid</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>オプションを作ったプラグインのID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull primary">oname</td>\r
+       <td>varchar(20)</td>\r
+       <td>(空白)</td>\r
+       <td>オプションの名前</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull primary">ocontext</td>\r
+       <td>varchar(20)</td>\r
+       <td>(空白)</td>\r
+       <td>オプションのコンテキスト(<code>グローバル</code>, <code>Blog</code>, <code>カテゴリー</code>,メンバー)</td>\r
+\r
+</tr><tr>\r
+       <td>odesc</td>\r
+       <td>varchar(255)</td>\r
+       <td>NULL</td>\r
+       <td>オプションの説明</td>\r
+\r
+</tr><tr>\r
+       <td>otype</td>\r
+       <td>varchar(20)</td>\r
+       <td>NULL</td>\r
+       <td>オプションの型.<a title="Nucleus Plugin API - Option types" href="plugins.html#options">プラグインの文書を参照</a>.</td>\r
+\r
+</tr><tr>\r
+       <td>odef</td>\r
+       <td>text</td>\r
+       <td>NULL</td>\r
+       <td>オプションの既定値</td>\r
+\r
+</tr><tr>\r
+       <td>oextra</td>\r
+       <td>text</td>\r
+       <td>NULL</td>\r
+       <td>select option型などで使う、その他のデータ</td>\r
+</tr></table>\r
+\r
+\r
+<h1><a id="nucleus_skin" name="nucleus_skin">nucleus_skinテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<table summary="nucleus_skinテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull primary foreign"><a href="#nucleus_skin_desc">sdesc</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>skin_descへの参照</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull primary">stype</td>\r
+       <td>varchar(20)</td>\r
+       <td>(空白)</td>\r
+       <td>\r
+               スキン・パートの型。以下のいずれかを取る\r
+               <ul>\r
+                       <li><code>index</code>(メインの目次ページ)</li>\r
+                       <li><code>item</code>(個別アイテムページ)</li>\r
+                       <li><code>archive</code>(月別アーカイブページ)</li>\r
+                       <li><code>archivelist</code>(月別アーカイブ一覧ページ)</li>\r
+                       <li><code>search</code>(検索ページ)</li>\r
+                       <li><code>error</code>(エラーページ)</li>\r
+                       <li><code>member</code>(メンバー詳細ページ)</li>\r
+                       <li><code>imagepopup</code>(画像ポップアップウィンドウ)</li>\r
+               </ul>\r
+       </td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">scontent</td>\r
+       <td>text</td>\r
+       <td>(空白)</td>\r
+       <td>スキン・パートの内容</td>\r
+</tr></table>\r
+\r
+\r
+<h1><a id="nucleus_skin_desc" name="nucleus_skin_desc">nucleus_skin_descテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<table summary="nucleus_skin_descテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull autoinc primary">sdnumber</td>\r
+       <td>int(11)</td>\r
+       <td>(空白)auto_increment</td>\r
+       <td>スキンのID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull unique">sdname</td>\r
+       <td>varchar(20)</td>\r
+       <td>(空白)</td>\r
+       <td>スキンの名前</td>\r
+\r
+</tr><tr>\r
+       <td>sddesc</td>\r
+       <td>varchar(200)</td>\r
+       <td>NULL</td>\r
+       <td>スキンの説明</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">sdtype</td>\r
+       <td>varchar(40)</td>\r
+       <td>text/html</td>\r
+       <td>スキンのmimeタイプ</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">sdincmode</td>\r
+       <td>varchar(10)</td>\r
+       <td>normal</td>\r
+       <td>\r
+               Includeモード。以下のいずれかを取る\r
+               <ul>\r
+                       <li><code>normal</code>(スキンディレクトリを使用しない)</li>\r
+                       <li><code>skindir</code>(スキンディレクトリを使用する)</li>\r
+               </ul>\r
+       </td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">sdincpref</td>\r
+       <td>varchar(50)</td>\r
+       <td>(空白)</td>\r
+       <td>ファイルをIncludeするときのプリフィックス</td>\r
+</tr></table>\r
+\r
+\r
+<h1><a id="nucleus_template" name="nucleus_template">nucleus_templateテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<table summary="nucleus_templateテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull primary foreign"><a href="#nucleus_template_desc">tdesc</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>template_descへの参照(nucleus_template_descのテンプレートID)</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull primary">tpartname</td>\r
+       <td>varchar(20)</td>\r
+       <td>(空白)</td>\r
+       <td>\r
+               テンプレート・パートの名前。以下のいずれかを取る\r
+               <ul>\r
+                       <li>ARCHIVELIST_FOOTER(アーカイブ一覧のフッター)</li>\r
+                       <li>ARCHIVELIST_HEADER(アーカイブ一覧のヘッダー)</li>\r
+                       <li>ARCHIVELIST_LISTITEM(アーカイブ一覧の本体)</li>\r
+                       <li>BLOGLIST_FOOTER(ブログ一覧のフッター)</li>\r
+                       <li>BLOGLIST_HEADER(ブログ一覧のヘッダー)</li>\r
+                       <li>BLOGLIST_LISTITEM(ブログ一覧の本体)</li>\r
+                       <li>CATLIST_FOOTER(カテゴリー一覧のフッター)</li>\r
+                       <li>CATLIST_HEADER(カテゴリー一覧のヘッダー)</li>\r
+                       <li>CATLIST_LISTITEM(カテゴリー一覧の本体)</li>\r
+                       <li>COMMENTS_AUTH(登録メンバーからのコメントへの追加表示)</li>\r
+                       <li>COMMENTS_BODY(コメントの本体)</li>\r
+                       <li>COMMENTS_CONTINUED(コメントの続きへのリンク)</li>\r
+                       <li>COMMENTS_FOOTER(コメントのフッター)</li>\r
+                       <li>COMMENTS_HEADER(コメントのヘッダー)</li>\r
+                       <li>COMMENTS_MANY(コメントが2つ以上の時)</li>\r
+                       <li>COMMENTS_NONE(コメントが無い時)</li>\r
+                       <li>COMMENTS_ONE(コメントが1つの時)</li>\r
+                       <li>COMMENTS_TOOMUCH(コメントが多すぎる時)</li>\r
+                       <li>DATE_FOOTER(日付のフッター)</li>\r
+                       <li>DATE_HEADER(日付のヘッダー)</li>\r
+                       <li>EDITLINK(アイテムを編集するためのリンク)</li>\r
+                       <li>FORMAT_DATE(日付フォーマット)</li>\r
+                       <li>FORMAT_TIME(時刻フォーマット)</li>\r
+                       <li>IMAGE_CODE(インライン画像のコード)</li>\r
+                       <li>ITEM_FOOTER(アイテムのフッター)</li>\r
+                       <li>ITEM_HEADER(アイテムのヘッダー)</li>\r
+                       <li>ITEM(アイテムの本体)</li>\r
+                       <li>LOCALE(Locale)</li>\r
+                       <li>MEDIA_CODE(メディアオブジェクトへのリンクコード)</li>\r
+                       <li>MORELINK(続きへのリンク)</li>\r
+                       <li>NEW(新しいアイテムに付けるマーク)</li>\r
+                       <li>POPUP_CODE(ポップアップ画像へのリンクコード)</li>\r
+                       <li>SEARCH_HIGHLIGHT(ハイライト表示)</li>\r
+                       <li>SEARCH_NOTHINGFOUND(検索で何も見つからなかった場合)</li>\r
+                       <li>この他、TemplateExtraFields イベントに対応したプラグインによって追加される事があります。</li>\r
+               </ul>\r
+       </td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">tcontent</td>\r
+       <td>text</td>\r
+       <td>(空白)</td>\r
+       <td>テンプレート・パートの内容</td>\r
+</tr></table>\r
+\r
+\r
+\r
+<h1><a id="nucleus_template_desc" name="nucleus_template_desc">nucleus_template_descテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<table summary="nucleus_template_descテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull autoinc primary unique">tdnumber</td>\r
+       <td>int(11)</td>\r
+       <td>(空白)auto_increment</td>\r
+       <td>テンプレートのID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull unique">tdname</td>\r
+       <td>varchar(20)</td>\r
+       <td>(空白)</td>\r
+       <td>テンプレートの名前</td>\r
+\r
+</tr><tr>\r
+       <td>tddesc</td>\r
+       <td>varchar(200)</td>\r
+       <td>NULL</td>\r
+       <td>テンプレートの説明</td>\r
+</tr></table>\r
+\r
+\r
+<h1><a id="nucleus_actionlog" name="nucleus_actionlog">nucleus_actionlogテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<p>ログインやエラーなどのログを記録する</p>\r
+\r
+<table summary="nucleus_actionlogテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull">timestamp</td>\r
+       <td>datetime</td>\r
+       <td>0000-00-00 00:00:00</td>\r
+       <td>アクションの日時</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">message</td>\r
+       <td>varchar(255)</td>\r
+       <td>(空白)</td>\r
+       <td>アクションのメッセージ</td>\r
+</tr></table>\r
+\r
+\r
+\r
+\r
+<h1><a id="nucleus_config" name="nucleus_config">nucleus_configテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<p>Nucleusは、いくつかのグローバル・オプションを<code>nucleus_config</code>テーブルに記憶する。これは<code>$CONF['OptionName']</code> でアクセスできる。</p>\r
+\r
+<table summary="nucleus_configテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull primary">name</td>\r
+       <td>varchar(20)</td>\r
+       <td>(空白)</td>\r
+       <td>オプションの名前</td>\r
+\r
+</tr><tr>\r
+       <td>value</td>\r
+       <td>varchar(128)</td>\r
+       <td>NULL</td>\r
+       <td>オプションの値</td>\r
+</tr></table>\r
+\r
+\r
+<h2><a name="nucleus_config_options" id="nucleus_config_options">使用できるオプション</a></h2>\r
+\r
+<p>使用できるオプションの一覧を以下に示す。</p>\r
+\r
+<p>はい/いいえタイプのオプションは1/0 (1=はい/真, 0=いいえ/偽)で示す。</p>\r
+\r
+<table summary="使用できるオプション"><tr>\r
+       <th class="settings_name" abbr="設定の名前">設定の名前</th>\r
+       <th class="settings_default" abbr="既定値">既定値</th>\r
+       <th class="settings_description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="foreign"><a href="#nucleus_blog">DefaultBlog</a></td>\r
+       <td>1</td>\r
+       <td>デフォルトのBlogのID。Blogが明示的に記されていないときに使うもの</td>\r
+</tr><tr>\r
+       <td>AdminEmail</td>\r
+       <td></td>\r
+       <td>管理者のメール・アドレス</td>\r
+</tr><tr>\r
+       <td>IndexURL</td>\r
+       <td></td>\r
+       <td>サイトのURL。最後に/が付く必要がある</td>\r
+</tr><tr>\r
+       <td>Language</td>\r
+       <td>english</td>\r
+       <td>デフォルトの言語ファイル名。「言語ファイル名.php」ファイルがlanguageディレクトリに必要</td>\r
+</tr><tr>\r
+       <td>SessionCookie</td>\r
+       <td>0</td>\r
+       <td>寿命1ヶ月のクッキーの代わりにセッション・クッキーを使うかどうか</td>\r
+</tr><tr>\r
+       <td>AllowMemberCreate</td>\r
+       <td>0</td>\r
+       <td>ビジターにアカウント作成を許すかどうか</td>\r
+</tr><tr>\r
+       <td>AllowMemberMail</td>\r
+       <td>1</td>\r
+       <td>メンバー間でフォームを使ったメッセージ転送を許すかどうか(メール・アドレスは表示されない)</td>\r
+</tr> <tr>\r
+       <td>SiteName</td>\r
+       <td></td>\r
+       <td>サイトの名前</td>\r
+</tr><tr>\r
+       <td>AdminURL</td>\r
+       <td></td>\r
+       <td>管理エリアのURL。最後に/が付く必要がある</td>\r
+</tr><tr>\r
+       <td>NewMemberCanLogon</td>\r
+       <td>1</td>\r
+       <td>登録されたばかりのユーザーがログインできるかどうか。できないばあい,管理者が「can login」オプションを最初に変更する必要がある</td>\r
+</tr><tr>\r
+       <td class="toremove">DisableSite</td>\r
+       <td>0</td>\r
+       <td>サイトが無効状態になっているかどうか。無効状態の場合、管理者だけがアクセスできる。他のすべてのアクセスは<code>DisableSiteURL</code>にリダイレクトされる</td>\r
+</tr><tr>\r
+       <td class="toremove">DisableSiteURL</td>\r
+       <td></td>\r
+       <td>サイトが無効状態のときにリダイレクトされるURL</td>\r
+</tr><tr>\r
+       <td class="toremove">LastVisit</td>\r
+       <td>0</td>\r
+       <td>「最後の訪問」のクッキーを保存するかどうか</td>\r
+</tr><tr>\r
+       <td>MediaURL</td>\r
+       <td></td>\r
+       <td>メディア・フォルダのURL。最後に/が付く</td>\r
+</tr><tr>\r
+       <td>AllowedTypes</td>\r
+       <td>jpg, jpeg, gif, mpg, mpeg, avi, mov, mp3, swf, png</td>\r
+       <td>メディア・フォルダにアップロードを許すファイル型</td>\r
+</tr><tr>\r
+       <td>AllowLoginEdit</td>\r
+       <td>0</td>\r
+       <td>メンバーにログイン名とパスワードの変更を許すかどうか</td>\r
+</tr><tr>\r
+       <td>AllowUpload</td>\r
+       <td>1</td>\r
+       <td>ファイルのアップロードを許すかどうか</td>\r
+</tr><tr>\r
+       <td class="toremove">DisableJsTools</td>\r
+       <td>2</td>\r
+       <td>\r
+               JavaScriptツールバーの形式:\r
+               <ul>\r
+                       <li>0: 多機能型 (IE)</li>\r
+                       <li>1: ツールバーを無効にする</li>\r
+                       <li>2: シンプル型(Gecko)</li>\r
+               </ul>\r
+       </td>\r
+</tr> <tr>\r
+       <td>CookiePath</td>\r
+       <td>/</td>\r
+       <td>クッキーをセットするパス</td>\r
+</tr><tr>\r
+       <td>CookiePrefix</td>\r
+       <td></td>\r
+       <td>クッキーの名称に追加するプレフィクス文字列。複数の Nucleus を同じドメインにインストールする際に便利で、別の Nucleus で同じセッションが適用されることを予防する。</td>\r
+</tr><tr>\r
+       <td>CookieDomain</td>\r
+       <td></td>\r
+       <td>クッキーをセットするドメイン</td>\r
+</tr><tr>\r
+       <td>CookieSecure</td>\r
+       <td>0</td>\r
+       <td>クッキーの通信にHTTPSを使うかどうか</td>\r
+</tr><tr>\r
+       <td>MediaPrefix</td>\r
+       <td>1</td>\r
+       <td>アップロードしたファイル名に日付を加えるかどうか</td>\r
+</tr><tr>\r
+       <td>MaxUploadSize</td>\r
+       <td>1048576</td>\r
+       <td>アップロードするファイルの最大値(バイト数)</td>\r
+</tr><tr>\r
+       <td>NonmemberMail</td>\r
+       <td>0</td>\r
+       <td>メンバー以外の人にメンバーへのメールを許すかどうか</td>\r
+</tr><tr>\r
+       <td>PluginURL</td>\r
+       <td></td>\r
+       <td>プラグイン・フォルダのURL。/で終わる必要がある</td>\r
+</tr><tr>\r
+       <td>ProtectMemNames</td>\r
+       <td>1</td>\r
+       <td>このオプションが有効だと、ログインしていない人はメンバーと同じ名前でコメントを残せなくなる。こうすることによって、ゲストがメンバーのふりをすることを避けられる</td>\r
+</tr><tr>\r
+       <td class="foreign"><a href="#nucleus_skin_desc">BaseSkin</a></td>\r
+       <td>1</td>\r
+       <td>Nucleusに、自動的にスキンが決まらないときに、どのスキンを使うかを指定する。スキンのパートが空だったり、ブログやスキンが洗濯されていない場合に起こる</td>\r
+</tr><tr>\r
+       <td>SkinsURL</td>\r
+       <td></td>\r
+       <td>スキン・フォルダのURL。最後に/が付く必要がある</td>\r
+</tr><tr>\r
+       <td>ActionURL</td>\r
+       <td></td>\r
+       <td><code>action.php</code>のURL.</td>\r
+</tr><tr>\r
+       <td>URLMode</td>\r
+       <td>normal</td>\r
+       <td><code>normal</code>(ノーマル)か<code>pathinfo</code>(FancyURLs)</td>\r
+</tr><tr>\r
+       <td>DatabaseVersion</td>\r
+       <td>250</td>\r
+       <td>データベースの構造が更新された最後のNucleusのバージョン番号</td>\r
+</tr><tr>\r
+       <td>DebugVars</td>\r
+       <td>0</td>\r
+       <td>デバッグモードを使用するか?(0=使用しない・1=使用する 最高管理者のみ設定可)</td>\r
+</tr><tr>\r
+       <td>DefaultListSize</td>\r
+       <td>10</td>\r
+       <td>リスト表示の時のデフォルトの表示数</td>\r
+</tr></table>\r
+\r
+\r
+<h1><a id="nucleus_tickets" name="nucleus_tickets">nucleus_ticketsテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="トップに戻る" /></a></h1>\r
+\r
+<p>Nucleus は <code>nucleus_tickets</code> を使用することによりセキュリティ上の問題を予防する。特に、管理エリアにおいて諸設定やデータベースの内容に影響する場合、チケットを必須とする。チケットは管理ページがリクエストされた時とフォームから呼び出された時に発行される。チケットは発行から 1時間後に破棄される。</p>\r
+\r
+<table summary="nucleus_ticketsテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull primary">ticket</td>\r
+       <td>varchar(40)</td>\r
+       <td>(空白)auto_increment</td>\r
+       <td>特定の単一ユーザに割り当てられるユニークなチケット。一般に、チケットは次のような形になる: <code>65303a785423b4d53c7b3e6579766f26</code></td>\r
+</tr><tr>\r
+       <td class="notnull foreign primary"><a href="#nucleus_member">member</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>当該チケットが有効適用されるメンバー。</td>\r
+</tr><tr>\r
+       <td class="notnull">ctime</td>\r
+       <td>datetime</td>\r
+       <td>0000-00-00 00:00:00</td>\r
+       <td>チケットの発行日時。チケットの有効期限は 1時間</td>\r
+</tr></table>\r
+\r
+\r
+\r
+<h1><a id="nucleus_activation" name="nucleus_activation">nucleus_activationテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="トップに戻る" /></a></h1>\r
+\r
+<p>新しいメンバーが登録された時点では、そのメンバーアカウントがアクティベートされるまで Nucleus はログインを許可しない。アクティベートのためのリンクを含むメールが送信され、これによってアクティベートすることができる。<code>nucleus_activation</code>テーブルはアクティベートの進捗状況を追跡する。</p>\r
+\r
+<table summary="nucleus_activationテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull primary">vkey</td>\r
+       <td>varchar(40)</td>\r
+       <td>(空白)</td>\r
+       <td>アクティベートキー。このキーはメンバーのアクティベートコードに渡される。一般的に、キーは次のような形になる: <code>41cf637d4fbeeff954b4ca70b8bde9dd</code></td>\r
+</tr><tr>\r
+       <td class="notnull foreign"><a href="#nucleus_member">vmember</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>アクティベートの必要があるメンバー。</td>\r
+</tr><tr>\r
+       <td class="notnull">vtime</td>\r
+       <td>datetime</td>\r
+       <td>0000-00-00 00:00:00</td>\r
+       <td>アクティベートキーが発行された日時。アクティベートキーの有効期間は 2日間である。</td>\r
+</tr><tr>\r
+       <td class="notnull">vtype</td>\r
+       <td>varchar(15)</td>\r
+       <td>(空白)</td>\r
+       <td>アクティベートの種別。\r
+               <ul>\r
+                       <li><code>forgot</code>: パスワードを忘れたメンバー。</li>\r
+                       <li><code>register</code>: 新しく登録されたメンバー。</li>\r
+                       <li><code>addresschange</code>: メールアドレスを変更したメンバー。</li>\r
+               </ul>\r
+       </td>\r
+</tr><tr>\r
+       <td class="notnull">vextra</td>\r
+       <td>varchar(128)</td>\r
+       <td>(空白)</td>\r
+       <td>追加的な情報。アクティベート種別が <code>addresschange</code> の場合、ここには <code>oldemailaddress/x</code> として、x には 0 または 1 の値が入る。x は <a href="#nucleus_member">member</a>テーブルにある <code>mcanlogin</code> の値を参照する。(アクティベートが完全に終了するまで、このユーザはログインできない)</td>\r
+</tr></table>\r
+\r
+\r
+\r
+<h1><a id="nucleus_karma" name="nucleus_karma">nucleus_karmaテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<p class="toremove">このテーブルは将来はなくなる可能性が高い。同じ機能を提供するプラグインに譲るためだ。</p>\r
+\r
+<p>この表は投票に使われたIPアドレスを記憶しておく。こうすることで一つのIPアドレスからは1票しか入れられなくなる</p>\r
+\r
+<table summary="nucleus_karmaテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull foreign"><a href="#nucleus_item">itemid</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>アイテムのID</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">ip</td>\r
+       <td>char(15)</td>\r
+       <td>(空白)</td>\r
+       <td>投票者のIPアドレス</td>\r
+</tr></table>\r
+\r
+\r
+<h1><a id="nucleus_ban" name="nucleus_ban">nucleus_banテーブル</a><a href="#top" class="toplink"><img src="../icon-up.gif" alt="back to top" width="15" height="15" /></a></h1>\r
+\r
+<p class="toremove">このテーブルは将来のNucleusではなくなる可能性が高い。同じ機能を提供するプラグインに譲るためだ。</p>\r
+\r
+<p>コメントやカルマ投票を禁止するIPアドレスを記憶</p>\r
+\r
+<table summary="nucleus_banテーブル"><tr>\r
+       <th class="column" abbr="カラム名">カラム名</th>\r
+       <th class="type" abbr="データ型">データ型</th>\r
+       <th class="default" abbr="既定値">既定値</th>\r
+       <th class="description" abbr="データの説明">説明</th>\r
+</tr><tr>\r
+       <td class="notnull">iprange</td>\r
+       <td>varchar(15)</td>\r
+       <td>(空白)</td>\r
+       <td>IPアドレスの範囲。アドレス単独でもいいし,一部(左から)でもいい。一部の場合は範囲を示す</td>\r
+\r
+</tr><tr>\r
+       <td class="notnull">reason</td>\r
+       <td>varchar(255)</td>\r
+       <td>(空白)</td>\r
+       <td>禁止の理由を示すメッセージ。コメントやカルマ投票を試みたときに表示される</td>\r
+</tr><tr>\r
+       <td class="notnull foreign"><a href="#nucleus_blog">blogid</a></td>\r
+       <td>int(11)</td>\r
+       <td>0</td>\r
+       <td>禁止を有効にするBlogのID</td>\r
+</tr></table>\r
+\r
+\r
+</div>\r
+\r
+</body>\r
+</html>\r
diff --git a/utf8/nucleus/documentation/devdocs/styles/background.png b/utf8/nucleus/documentation/devdocs/styles/background.png
new file mode 100644 (file)
index 0000000..12f211b
Binary files /dev/null and b/utf8/nucleus/documentation/devdocs/styles/background.png differ
diff --git a/utf8/nucleus/documentation/devdocs/styles/bullet.gif b/utf8/nucleus/documentation/devdocs/styles/bullet.gif
new file mode 100644 (file)
index 0000000..b43de48
Binary files /dev/null and b/utf8/nucleus/documentation/devdocs/styles/bullet.gif differ
diff --git a/utf8/nucleus/documentation/devdocs/styles/manual.css b/utf8/nucleus/documentation/devdocs/styles/manual.css
new file mode 100755 (executable)
index 0000000..b57aaee
--- /dev/null
@@ -0,0 +1,289 @@
+@charset 'UTF-8';\r
+\r
+/**\r
+ * NucleusCMS Manual Style sheet\r
+ *\r
+ * $Id$\r
+ */\r
+\r
+body {\r
+       background: #fff url(background.png) repeat-x;\r
+       padding-top: 13px;\r
+       color: #555;\r
+       font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;\r
+/*     font-family: verdana, arial;\r
+       font-family: "Hiragino Kaku Gothic Pro W3", "Meiryo", "MS PGothic", "Osaka", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif; */\r
+       font-size: small;\r
+}\r
+\r
+@media screen {\r
+       body {\r
+/*             margin-left: 10%;\r
+               margin-right: 10%;\r
+*/     }\r
+}\r
+\r
+@media print {\r
+       pre,\r
+       .note\r
+        td,\r
+        th {\r
+               border: 1px dashed gray;\r
+       }\r
+}\r
+\r
+img {\r
+       border: none;\r
+}\r
+\r
+a:link,\r
+a:visited {\r
+       color: #1D3565; \r
+       font-weight: bold;\r
+       text-decoration: none;\r
+}\r
+a: hover {\r
+       text-decoration: underline;\r
+}\r
+\r
+.heading {\r
+       text-align: center;\r
+       font-size: xx-large;\r
+       font-weight: bold;\r
+       color: gray;\r
+       letter-spacing:3px;\r
+       margin: 15px 0 20px;\r
+}\r
+\r
+.heading i,\r
+.heading em {\r
+       position: absolute;\r
+       top: 25px;\r
+       right: 5px;\r
+       font-size: small;\r
+       font-style: normal;\r
+       font-weight: normal;\r
+}\r
+\r
+\r
+p:first-letter {\r
+       font-size: large;\r
+}\r
+\r
+p {\r
+       text-indent: 10px;\r
+       margin: 12px;\r
+}\r
+\r
+h1 {\r
+       border-bottom: 1px dotted gray;\r
+       font-size: 145%;\r
+       color: #596d9d;\r
+       font-weight:normal;\r
+       letter-spacing:2px;\r
+}\r
+\r
+h2 {\r
+       color: #666;\r
+       font-size: 110%;\r
+       margin: 20px 10px 10px 10px;\r
+       border-left: 5px solid #94a8c9;\r
+       padding: 0 0 0 8px;\r
+       letter-spacing:2px;\r
+}\r
+\r
+h3 {\r
+       margin-left: 12px;\r
+       border-bottom:1px dotted #666;\r
+       color:#596d9d;\r
+}\r
+\r
+pre,\r
+.note,\r
+.faq .answer {\r
+       background-color: #eee;\r
+       padding: 10px;\r
+       font-size: small;\r
+}\r
+\r
+.screenshot {\r
+       text-align: center;\r
+       background-color: #eee;\r
+       padding: 10px;\r
+}\r
+\r
+.faq .question {\r
+       font-weight: bold;\r
+       margin-bottom: 0px;\r
+}\r
+\r
+.faq .answer {\r
+\r
+}\r
+\r
+.faq {\r
+       margin-bottom: 20px;\r
+}\r
+\r
+table {\r
+       border: none;\r
+       border-collapse: collapse;\r
+       margin: 0 auto;\r
+       text-align: center;\r
+}\r
+\r
+@media print {\r
+       table {\r
+               width: 860px;\r
+       }\r
+}\r
+\r
+@media screen {\r
+       table {\r
+               width: 85%;\r
+       }\r
+}\r
+\r
+th {\r
+       background-color: linen;\r
+       font-size: small;\r
+       font-weight:normal;\r
+       border:1px solid linen;\r
+}\r
+\r
+@media print {\r
+       th, td {\r
+               padding: 5px 8px;\r
+       }\r
+}\r
+\r
+@media screen {\r
+       th, td {\r
+               padding: 5px 0.8%;\r
+       }\r
+}\r
+\r
+td {\r
+       background-color: #eee;\r
+       border:1px solid #fff;\r
+       font-size: small;\r
+       vertical-align: top;\r
+       text-align: left;\r
+}\r
+\r
+input,\r
+select,\r
+option,\r
+textarea {\r
+       background-color: transparent;\r
+}\r
+\r
+.deprecated {\r
+       border: 3px solid red;\r
+       padding: 5px;\r
+       font-size: medium;\r
+}\r
+\r
+tt,\r
+code,\r
+samp {\r
+       font-size: small;\r
+       font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;\r
+/*     font-family: "Meiryo", "MS PGothic", "Osaka", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;*/\r
+}\r
+\r
+.warning {\r
+       color: red;\r
+}\r
+.ok {\r
+       color: green;\r
+}\r
+\r
+acronym,\r
+abbr {\r
+       border-bottom: 1px dotted gray;\r
+       cursor: help;\r
+}\r
+\r
+strong {\r
+    font-weight: bold;\r
+}\r
+\r
+em {\r
+    font-style: italic;\r
+}\r
+\r
+body div#body > .example {\r
+       width: 85%;\r
+       margin: 0 auto;\r
+}\r
+\r
+@media print {\r
+       body div#body > .example {\r
+               width: 860px;\r
+       }\r
+}\r
+\r
+@media screen {\r
+       body div#body > .example {\r
+               width: 85%;\r
+       }\r
+}\r
+\r
+body div#body {\r
+       margin: 0 auto;\r
+}\r
+\r
+@media print {\r
+       body div#body {\r
+               width: 900px;\r
+       }\r
+}\r
+\r
+@media screen {\r
+       body div#body {\r
+               max-width: 900px;\r
+               width: 80%;\r
+       }\r
+}\r
+\r
+ul {\r
+       line-height:1.5em;\r
+       margin:0 0 0.5em 40px;\r
+       padding:0;\r
+       list-style-image:url(bullet.gif);\r
+}\r
+\r
+dl {\r
+       margin:0 10% 0.5em 0;\r
+       padding:0;\r
+}\r
+\r
+dt {\r
+       font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;\r
+/*     font-family: "Hiragino Kaku Gothic Pro W3", "Meiryo", "MS PGothic", "Osaka", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif; */\r
+       font-weight:bold;\r
+       margin-top:7px;\r
+}\r
+\r
+#fontSizeChanger {\r
+       position: fixed;\r
+       top: 20px;\r
+       left: 50px;\r
+       font-size: medium;\r
+}\r
+\r
+#fontSizeChanger a {\r
+       font-weight: normal;\r
+       border: 1px dotted gray;\r
+       padding: 0 3px;\r
+}\r
+\r
+#fontSizeChanger a#fontSmall {\r
+       font-weight: bold;\r
+}\r
+\r
+#fontSizeChanger a:hover {\r
+       color: #fff;\r
+       background-color: #1D3565;\r
+}\r
diff --git a/utf8/nucleus/documentation/devdocs/xmlrpc.html b/utf8/nucleus/documentation/devdocs/xmlrpc.html
new file mode 100755 (executable)
index 0000000..b96e76e
--- /dev/null
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
+<head>\r
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+       -->\r
+       <!-- $Id$ -->\r
+       <!-- $NucleusJP: xmlrpc.html,v 1.6 2006/07/12 07:11:46 kimitake Exp $ -->\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+    <meta http-equiv="Content-Style-Type" content="text/css" />\r
+    <meta http-equiv="Content-Script-Type" content="text/javascript" />\r
+    <link rel="index" href="./index.html" />\r
+       <title>Nucleus - XML-RPC インターフェイス</title>\r
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
+    <style type="text/css">\r
+        strong {\r
+            font-weight: bold;\r
+        }\r
+        em {\r
+            font-style: italic;\r
+        }\r
+    </style>\r
+       <script src="http://www.google.com/jsapi"></script>\r
+       <script type="text/javascript">\r
+               google.load("jquery", "1");\r
+               google.setOnLoadCallback(function() {\r
+                       $.getScript("javascript/fontsizeChanger.js");\r
+               });\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="fontSizeChanger">\r
+       <a href="#top" id="f_small">小</a>\r
+       <a href="#top" id="f_medium">中</a>\r
+       <a href="#top" id="f_large">大</a>\r
+       </div>\r
+<div id="body">\r
+\r
+<div class="heading">\r
+XML-RPC インターフェイス\r
+</div>\r
+\r
+<h1>はじめに</h1>\r
+\r
+<p>\r
+<a href="index.html">開発者マニュアルに戻る</a>\r
+</p>\r
+\r
+<p>\r
+このドキュメントはNucleusが提供するXML-RPCインターフェイスと、生成される<a href="#errorcodes">エラーメッセージ</a>についての解説です。この仕様は将来変更される可能性があることに注意して下さい。\r
+</p>\r
+\r
+<div class="note">\r
+NucleusにおけるXML-RPCインターフェイスのURLは以下のようになります:\r
+<br />\r
+<strong>http://www.yourserver.com/yourpath/nucleus/xmlrpc/server.php</strong>\r
+</div>\r
+\r
+<h1><a name="bloggerApi" id="bloggerApi">Blogger API (XML-RPC)</a></h1>\r
+\r
+<p>\r
+Nucleusは<a href="http://www.blogger.com/developers/api/1_docs/">Blogger API</a>に対応しています。これはBloggerと通信するツールやサービスに対して、Nucleusとも通信できるようにするものです。Nucleusの仕様により、いくつかのパラメータに若干の違いがあります。これについては後述の説明を参照して下さい。呼び出しや応答のメソッドは、もちろん、Bloggerのものと同じ構造になっています。\r
+</p>\r
+\r
+<p>\r
+ここに挙げたリストは利用できるメソッドの一覧です。クリックするとさらに詳しい情報を得ることができます(それぞれのリンク先はBlogger APIの仕様書やその<a href="http://groups.yahoo.com/group/bloggerDev">メーリングリスト</a>です)。\r
+</p>\r
+\r
+<ul>\r
+       <li><strong><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_newPost.html">blogger.newPost</a></strong></li>\r
+       <li><strong><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_editPost.html">blogger.editPost</a></strong></li>\r
+       <li><strong><a href="http://groups.yahoo.com/group/bloggerDev/message/296">blogger.getPost</a></strong></li>\r
+       <li><strong><a href="http://groups.yahoo.com/group/bloggerDev/message/147">blogger.deletePost</a></strong></li>\r
+       <li><strong><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_getUsersBlogs.html">blogger.getUsersBlogs</a></strong></li>\r
+       <li><strong><a href="http://groups.yahoo.com/group/bloggerDev/message/225">blogger.getRecentPosts</a></strong></li>\r
+       <li><strong><a href="http://groups.yahoo.com/group/bloggerDev/message/315">blogger.getUserInfo</a></strong></li>\r
+       <li><strong><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_getTemplate.html">blogger.getTemplate</a></strong></li>\r
+       <li><strong><a href="http://www.blogger.com/developers/api/1_docs/xmlrpc_setTemplate.html">blogger.setTemplate</a></strong></li>\r
+</ul>\r
+\r
+\r
+<p>\r
+Nucleusは内部的に異なる実装を用いているため、パラメータの扱いに若干の違いがあります。概説すると:\r
+</p>\r
+\r
+<ul>\r
+       <li>Appkeyは無視されます。</li>\r
+       <li>Nucleusの場合は本文のあとにタイトルとカテゴリが続きます。Bloggerでは 'コンテンツ' と呼ばれるは本文だけが存在します。これらの追加されたパーツを利用可能にするため、<samp>&lt;title&gt;</samp>や<samp>&lt;category&gt;</samp>をNucleusに送るコンテンツに含めることができます。これらのタグは getRecentPosts の呼び出しでのみ追加されます。</li>\r
+       <li>Bloggerで 'templates' と呼ばれているものに相当するのが、Nucleusの 'スキン' です。ひとつのシステムに複数のスキンを設定でき、それぞれのスキンをblogごとに使い分けることができます。メソッド blogger.setTemplate と blogger.getTemplate は、Nucleusのblog設定で選択されているblogのデフォルトスキンに影響します。'main' と 'archiveIndex' の二種類のテンプレートは、Nucleusの 'メインの目次ページ' と '月別アーカイブ一覧ページ' に相当します。(<em>訳注: Blogger の仕様がわからないので、この項不確か</em>)</li>\r
+       <li>項目 <code>publish</code> は、追加した項目がデフォルトでドラフトになるか公開になるかを決める箇所です。<code>blogger.editPost</code> を使う場合は、<code>publish</code> がドラフトと公開のどちらになっていても無視されます。</li>\r
+       <li><code>getUserInfo</code> を呼び出した場合、返値のうち 'lastname' は空になり、'firstname' にフルネームが入ります。これはNucleusが姓と名を分けない仕様になっていることに由来します。</li>\r
+       <li>メソッド <code>getRecentPostst</code> は <code>authorName</code> と <code>title</code> を追加パラメータとして返します。Bloggerもまたこれらの値を返します(この仕様は文書化されていないようですが)。</li>\r
+</ul>\r
+\r
+<h1><a id="metaweblog" name="metaweblog">metaWeblog API</a></h1>\r
+\r
+<p>\r
+Nucleus v1.1以降、<a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a>もサポートされました。これはBlogger APIの拡張版です。 \r
+</p>\r
+\r
+<p>Nucleus v2.5では <code>newMediaObject</code> と <code>getRecentPosts</code> の二つのメソッドにも対応しました(これらは最初のmetaWeblog仕様には存在しませんでした)。</p>\r
+\r
+<p>\r
+利用可能なメソッド一覧は以下の通りです(<a href="http://www.xmlrpc.com/metaWeblogApi">specification</a>に詳しい情報があります):\r
+</p>\r
+\r
+<ul>\r
+       <li>metaWeblog.newPost</li>\r
+       <li>metaWeblog.editPost</li>\r
+       <li>metaWeblog.getPost</li>\r
+       <li>metaWeblog.getCategories</li>\r
+       <li>metaWeblog.newMediaObject (v2.5)</li>\r
+       <li>metaWeblog.getRecentPosts (v2.5)</li>\r
+</ul>\r
+\r
+<p>Nucleus v3.22以降、<code>mt_text_more</code> と <code>m_tallow_comment</code>もサポートされました。これはmetaWeblog API の拡張版です。つまりこれらの拡張機能をサポートするアプリケーション、例えば Ectoなど、を使用した場合、「続き」を編集することができ、アイテムにコメントを許可するかどうかを決定することができるようになる、ということです。</p>\r
+\r
+<h1><a name="mtApi" id="mtApi">Movable Type API</a></h1>\r
+\r
+<p>v2.5から、Nucleusは<a href="http://www.movabletype.org/docs/mtmanual_programmatic.html">Movable Type API</a>からのメソッドをサポートするようになりました。</p>\r
+\r
+<p>利用できるメソッドの一覧を以下に示します:</p>\r
+\r
+<ul>\r
+       <li>mt.supportedMethods</li>\r
+       <li>mt.supportedTextFilters</li>\r
+       <li>mt.publishPost</li>\r
+       <li>mt.getCategoryList</li>\r
+       <li>mt.getPostCategories</li>\r
+       <li>mt.setPostCategories</li>\r
+       <li>mt.getRecentPostTitles</li>\r
+       <li>mt.getTrackbackPings</li>\r
+</ul>\r
+\r
+<p>いくつかのノート:</p>\r
+\r
+<ul>\r
+       <li>Nucleusはアイテムひとつにつき一つだけカテゴリを設定することができます。これは 'primary' 以外のカテゴリ設定項目はすべて無視されることを意味します。</li>\r
+       <li>トラックバックはNucleusのコアではサポート対象外です(プラグインの導入によって利用することができるようになります)。このため、<code>mt.getTrackbackPings</code> のデフォルトの返値は空です。</li>\r
+       <li>Nucleusはテキストフィルタを実装していません。このため、<code>mt.getSupportedTextFilters</code> は空の値を返します。</li>\r
+</ul>\r
+\r
+<h1><a id="errorcodes" name="errorcodes">エラーコード</a></h1>\r
+\r
+<p>\r
+以下に示すのは、それぞれのメソッドから得られるエラーの種類です:\r
+</p>\r
+\r
+<table summary="エラーコード と エラーメッセージ">\r
+       <tr>\r
+               <th abbr="エラーコード">エラーコード</th>\r
+               <th abbr="エラーメッセージ">エラーメッセージ</th>\r
+       </tr>\r
+       <tr>\r
+               <td>801</td>\r
+               <td>Login Error <br />\r
+               ログインエラー(ユーザ名とパスワードの組み合わせが正しくないと推測されます)</td>\r
+       </tr>\r
+       <tr>\r
+               <td>802</td>\r
+               <td>No Such Blog<br />\r
+               指定されたBlogは存在しません</td>\r
+       </tr>\r
+       <tr>\r
+               <td>803</td>\r
+               <td>Not a Team Member<br />\r
+               チームに登録されていません</td>\r
+       </tr>\r
+       <tr>\r
+               <td>804</td>\r
+               <td>Cannot add Empty Items<br />\r
+               空のアイテムは投稿できません</td>\r
+       </tr>\r
+       <tr>\r
+               <td>805</td>\r
+               <td>Amount parameter must be in range 1..20<br />\r
+               パラメータの値は 1..20 の範囲でなければなりません(<em>getRecentItems</em></td>\r
+       </tr>\r
+       <tr>\r
+               <td>806</td>\r
+               <td>No Such Item<br />\r
+               指定されたアイテムは存在しません</td>\r
+       </tr>\r
+       <tr>\r
+               <td>807</td>\r
+               <td>Not Allowed to Alter Item<br />\r
+               アイテム追加の権限がありません</td>\r
+       </tr>\r
+       <tr>\r
+               <td>808</td>\r
+               <td>Invalid media type<br />\r
+               メディアタイプが不正です</td>\r
+       </tr>\r
+       <tr>\r
+               <td>809</td>\r
+               <td>File is too large<br />\r
+               ファイルが大きすぎます(最大のアップロードファイルサイズ)</td>\r
+       </tr>           \r
+       <tr>\r
+               <td>810</td>\r
+               <td>Other error on newMediaObject<br />\r
+               newMediaObject で予期せぬエラーが発生しました(何が起きたのかもう少し情報が含まれるでしょう)</td>\r
+\r
+       </tr>\r
+       <tr>\r
+               <td><em>その他のコード &lt; 100</em></td>\r
+               <td>Errors encountered by the Useful Inc. XML-RPC implementation<br />\r
+               Usefil Inc. XML-RPC の実行でエラーが発生しました</td>\r
+       </tr>\r
+       <tr>\r
+               <td><em>その他のコード &gt; 100</em></td>\r
+\r
+               <td>Errors encountered by the XML parser<br />\r
+               XML パーサでエラーが発生しました</td>\r
+       </tr>\r
+\r
+\r
+</table>\r
+\r
+</div>\r
+\r
+</body>\r
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/documentation/help.html b/utf8/nucleus/documentation/help.html
new file mode 100644 (file)
index 0000000..2af0dfc
--- /dev/null
@@ -0,0 +1,5433 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+    <!--
+        Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+        Copyright (C) 2002-2010 The Nucleus Group
+
+        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.
+        (see nucleus/documentation/index.html#license for more info)
+
+        @license http://nucleuscms.org/license.txt GNU General Public License
+        @copyright Copyright (C) 2002-2010 The Nucleus Group
+    -->
+    <!-- $Id$ -->
+    <!-- $NucleusJP: help.html,v 1.15 2007/04/19 08:58:40 kimitake Exp $ -->
+
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <meta http-equiv="Content-Style-Type" content="text/css" />
+    <meta http-equiv="Content-Script-Type" content="text/javascript" />
+    <link rel="index" href="./index.html" />
+    <title>Nucleus管理用ヘルプ</title>
+    <style type="text/css">
+        body, pre, code {
+            font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;
+            font-size: small;
+            color:#555;
+        }
+
+        h1 {
+            font-size: medium;
+            font-weight:normal;
+            border-bottom: 1px gray dashed;
+            color: #596d9d;
+            text-align: left;
+            letter-spacing:1px;
+        }
+
+        h2 {
+            font-size: small;
+            font-weight:normal;
+            border-color: #94a8c9;
+            border-style: solid;
+            border-width: 0px 0px 0px 5px;
+            text-align: left;
+            letter-spacing:2px;
+            padding: 0 0 0 8px;
+        }
+
+        .page {
+            height: 2400px;
+            text-align: justify;
+            margin-bottom: 100px;
+        }
+
+        pre {
+            background-color: #eee;
+            padding: 8px;
+            font-size: small;
+            line-height:135%;
+            white-space: -moz-pre-wrap; /* Mozilla */
+            white-space: -pre-wrap;     /* Opera 4-6 */
+            white-space: -o-pre-wrap;   /* Opera 7 */
+            white-space: pre-wrap;      /* CSS3 */
+            word-wrap: break-word;      /* IE 5.5+ */
+        }
+
+        .example {
+            background-color: #fff;
+            padding: 8px;
+            border: 1px solid #999;
+            border-right-width: 2px;
+            border-bottom-width: 2px;
+            width:400px;
+        }
+
+        ul.example {
+        margin-left:0px;
+        }
+
+        ul.example li {
+        margin-left:17px;
+        }
+
+        ul.templates {
+            font-size: x-small;
+            line-height: 1.1;
+            list-style: none;
+            text-indent: -20px;
+            margin-left: 20px;
+        }
+
+        ul {
+            text-align: left;
+        }
+
+        a:link, a:visited {
+            color: #1D3565;
+            font-weight: bold;
+            text-decoration: underline;
+        }
+
+        a:hover {
+            background-color: whitesmoke;
+        }
+
+        .deprecated {
+            border: 3px solid red;
+            padding: 5px;
+            font-size: medium;
+        }
+
+        tt, code {
+            font-size: small;
+        }
+
+        table {
+            border: 1px solid #ccc;
+        }
+
+        th {
+            background-color: #eee;
+        }
+
+        td {
+            vertical-align: top;
+        }
+
+        .note {
+            background-color: #eee;
+            padding: 5px;
+        }
+
+        .invisible {
+            display: block;
+            visibility: hidden;
+        }
+
+        strong {
+            font-weight: bold;
+        }
+
+        em {
+            font-style: italic;
+        }
+
+        .heading_example {
+            margin: 2px;
+            font-weight: bold;
+            font-size: 1.15em;
+        }
+
+    </style>
+</head>
+<body>
+
+<div class="page">
+<h1>Nucleusポップアップ・ヘルプ</h1>
+<p>ファイル読み込み中、しばらくお待ちください(ファイルサイズはおよそ170KBです)。</p>
+</div>
+
+
+<div class="page">
+<a name="future" id="future"><span class="invisible">future</span></a>
+<a name="allowpastposting" id="allowpastposting"><span class="invisible">allowpastposting</span></a>
+<h1>後で追加/過去の日時での投稿</h1>
+<h2>後で追加</h2>
+<p>アイテム追加フォームの「後で追加」オプションをチェックすることで、アイテムを指定した時間きっかりに公開することができます。指定された時間が来るまで、アイテムはサイトの公開された部分で見られることはありません。</p>
+<p>この日時は、アイテムを追加するブログの「過去の日時での投稿を許可する」オプションが有効である場合を除いて、<strong>未来のものでなくてはなりません</strong>。</p>
+<h2>過去の日時での投稿を許可する</h2>
+<p>この設定を有効にすると、アイテムを追加する時に、アイテムの投稿日時を過去に指定することができるようになります。また、既存のアイテムの投稿日時を編集することもできるようになります。</p>
+</div>
+
+<div class="page"><a name="changedate" id="changedate"><span class="invisible">allowpastposting</span></a>
+<h1>投稿日時の変更</h1>
+<p>
+「タイムスタンプを更新」オプションにより、アイテムの投稿された日付や時間を変更することができます。アイテムの内容を変更した時に、「タイムスタンプを更新」することで記事をブログののトップに戻すことができます。</p>
+<p>しかし、そのアイテム独自のIDは変更されませんので、訪問者はアイテムのIDから、そのアイテムが編集後に投稿時間が変更されたものだと気づくことができます。</p>
+</div>
+
+
+<div class="page"><a name="autosave" id="autosave"><span class="invisible">autosave</span></a>
+<h1>自動保存</h1>
+<p>最後に変更を加えてから10分後に、自動的に<a href="#draft">ドラフト</a>として保存する機能です。投稿、または編集途中に他の用事が出来て、記事を保存するのを忘れてしまった時などに、不用意に編集内容を失わずにすみます。</p>
+<p>もし、10分待たずに下書きを保存したくなったら、フォームの下の方にある「<em>ドラフト保存</em>」ボタンをクリックします。</p>
+<p>この機能は、メンバーごとの設定でオン、オフを切り替える事が出来ます。</p>
+</div>
+
+
+<div class="page"><a name="draft" id="draft"><span class="invisible">allowpastposting</span></a>
+<h1>ドラフト(Drafts/草稿)</h1>
+<p>
+ドラフト状態のアイテムはブログの公開されたところでは閲覧することができません。推敲に時間をかけたい時や、、実際に投稿するまでに、少し時間を空けたいときなどに役に立つでしょう。ドラフト状態のアイテムは「管理ホーム」にリストとして表示されるので、時間があるときに、いつでも作業を再開することが可能です。</p>
+<p>ドラフト状態のアイテムを編集する際に、「<strong>今すぐ追加</strong>」のラジオボタンを選んで「保存」ボタンを押すと、ドラフト状態が解除されてブログに公開されます。
+</p>
+</div>
+
+<div class="page"><a name="extended" id="extended"><span class="invisible">extended</span></a>
+<h1>「続き」部分</h1>
+<p>
+アイテムには、長文記事を分割して表示するために、オプションとして「続き」部分があります。例えば、記事がブログのメインページに置くには長すぎる場合、導入を「本文」部分に、残りを「続き」部分に書くことができます。テンプレートによって、表示の形態は変わってきますが、ブログのメインページを閲覧すると「続きを読む」というリンクが出現します。
+</p>
+<p>
+もしアイテムの単なる<em>概略</em>として導入部分を書きたいのなら、<a href="#templatevar-smartbody">smartbody</a>というテンプレート変数を用いることで、「本文」と「続き」の表示を分けることも可能です。
+</p>
+</div>
+
+<div class="page"><a name="shortblogname" id="shortblogname"><span class="invisible">shortblogname</span></a>
+<h1>Blogの短縮名</h1>
+<p>
+「Blogの短縮名」は主に管理領域で、どのアイテムがどのブログと結びついているのか示すために使われます。
+</p>
+<p>
+また、新規ブログを有効にするための代替indexファイルでも用いられます(以下は「Blogの短縮名」が「myshortblogname」の時の呼び出しファイルの例):
+</p>
+<pre>
+&lt;?php
+    include('./config.php');
+    selectBlog('myshortblogname');
+    selector();
+?&gt;
+</pre>
+</div>
+
+<div class="page"><a name="blogdefaultskin" id="blogdefaultskin"><span class="invisible">blogdefaultskin</span></a>
+<h1>標準のスキン</h1>
+<p>
+ブログが表示される時には、ブログごとの「設定」で選択された「標準のスキン」が使用されます。選択できるのは一つだけです。(URLの引数として指定することで、別のスキンで表示させることは可能です)
+</p>
+</div>
+
+
+<div class="page"><a name="blognotify" id="blognotify"><span class="invisible">blognotify</span></a>
+<h1>通知するメールアドレス</h1>
+<p>
+このオプションには、新しくコメントが追加された時などに通知するメールアドレスを、一つあるいは複数設定することができます。もし通知が不要なら空っぽにしておいてください。メールアドレスは、当然ですが、有効なものでなくてはなりません。
+</p>
+<p>
+複数のメールアドレスを設定する場合には、各メールアドレスをセミコロン(<strong>;</strong>)で区切ってください。
+</p>
+<div class="note">
+<strong>注意:</strong>設定フィールドの最大長は128文字です。セミコロン(<strong>;</strong>)を含んだ合計の文字数が128文字を超えない限り、メールアドレスはいくつでも設定することができます。
+</div>
+<div class="note">
+<strong>注意:</strong>通知先に、メンバー登録に使われているメールアドレスを設定した場合、自分で書いたアイテムやコメントの通知はされません。自分で書いたことは知っているはずですから、問題にはならないでしょう。
+</div>
+</div>
+
+<div class="page"><a name="blogmaxcomments" id="blogmaxcomments"><span class="invisible">blogmaxcomments</span></a>
+<h1>コメントの最大量</h1>
+<p>
+<em>メインの目次ページ</em>に表示するコメントの最大数です。<strong>これはコメント可能な最大数を制限するものではありません</strong>。個別アイテムページでは、設定した最大数を超えていても全てのコメントが表示されます。
+</p>
+<p class="note"><strong>注意:</strong>
+テンプレート内部では、テンプレート変数<a href="#templatevar-comments">comments</a>の引数によってここでの値が上書きされます。
+</p>
+</div>
+
+<div class="page"><a name="blogtimeoffset" id="blogtimeoffset"><span class="invisible">blogtimeoffset</span></a>
+<h1>サーバ時刻との時差</h1>
+<p>
+もしサーバの時刻とあなたの住んでいる地域の時刻とが一致していなければ、ここにサーバとの時差を入力することで、Nucleus内部の時刻をあなたの住んでいる地域の時刻に合わせることができます(マイナス時差の地域に住んでいる場合は、マイナス記号付きで入力します)。参考のために現在のサーバの時刻が表示されています。
+</p>
+<h2>実例</h2>
+<p>あなたの住んでいる地域の時刻が20:35で、表示されているサーバの時刻が14:35のとき、ブログの時刻を20:35にするためには「サーバ時刻との時差」を6.0に設定します。
+</p>
+<p class="note"><strong>注意:</strong>30分刻みでの時差のある地域のために、0.5刻みで設定することができます。例えば「サーバ時刻との時差」を<strong>1.5</strong>に設定すると、1時間30分の補正となります。</p>
+</div>
+
+<div class="page"><a name="blogupdatefile" id="blogupdatefile"><span class="invisible">blogupdatefile</span></a>
+<h1>自動更新するファイル</h1>
+<p>
+ブログに新しいアイテムが追加された時に、上書きするファイルのパスを入力します。このファイルは、新しいアイテムが追加されるたびに最終変更時のタイムスタンプが上書きされ、外部からはこのファイルを参照することで、ブログに更新があったかどうかをチェックすることができます。このファイルは訪問者によるコメントが追加された時や、スキン/テンプレートに変更を加えた時には更新されません。アイテムが追加されてブログの記事に変更があったときに更新されるので、「Weblogの更新状況」等を作成するサービスに使うことができます。
+</p>
+<p>
+自動更新されるファイルが必要ないときは、フィールドを空っぽにしておいてください。
+</p>
+<p>
+自動更新されるファイルの場所は管理領域からの相対パスでも指定することが可能ですが、<code> /path/to/your/website/update.txt</code> のようにより確実な絶対パスを使った方が良いでしょう。また自動更新されるファイルを作成し、かつそのファイルに書き込みができるように、自動更新ファイルとそれを作成するディレクトリの<a href="tips.html#filepermissions" onclick="window.open(this.href);return false;" onkeypress="window.open(this.href);return false;" class="out" title="quick guide on changing file permissions">パーミッションを0666</a>にしてください。
+</p>
+</div>
+
+<div class="page"><a name="teamadmin" id="teamadmin"><span class="invisible">teamadmin</span></a>
+<h1>Blogの管理者</h1>
+<p>
+Blogの管理者は次のような追加権限をもちます:
+</p>
+
+<ul>
+    <li>チームの操作</li>
+    <li>Blog設定の変更</li>
+    <li>投稿者に関係なく、該当Blogのどのアイテムでも編集や削除が可能</li>
+    <li>Blogの削除</li>
+</ul>
+
+<p>
+一つのブログは複数の管理者を持つことができます。各ブログには、最低でも一人の管理者がいなくてはなりません。
+</p>
+</div>
+
+
+<div class="page"><a name="superadmin" id="superadmin"><span class="invisible">superadmin</span></a>
+<h1>管理者の特権</h1>
+
+<p>
+<em>super-admin(最高管理者)</em>と呼ばれ、ブログのチームへの所属とは無関係に、全ての機能と全てのブログに<strong>フルアクセス</strong>できます。
+</p>
+
+<p>
+またsuper-adminは、ブログの作成、グローバル設定の変更、テンプレートの書き換え、スキンの書き換え、メンバーの操作(メンバーの作成/編集/削除)を行う権限があります。
+</p>
+
+<p>
+super-adminとなるのは通常サイトの管理者ただ一人でしょう。
+</p>
+
+</div>
+
+<div class="page"><a name="canlogin" id="canlogin"><span class="invisible">canlogin</span></a>
+<h1>管理者領域へのログイン</h1>
+<p>
+<a href="#superadmin" title="Administrator Privileges">super-admin</a>はそれぞれのメンバーを、管理領域へのログインを許可しないよう設定できます。
+</p>
+</div>
+
+<div class="page"><a name="defaultblog" id="defaultblog"><span class="invisible">defaultblog</span></a>
+<h1>既定のBlog</h1>
+<p>
+サイトへの接続時にブログが指定されていない場合に表示されるブログです。
+</p>
+</div>
+
+<div class="page"><a name="baseskin" id="baseskin"><span class="invisible">baseskin</span></a>
+<h1>基本のスキン</h1>
+
+<p>適用すべきスキンが見つからなかった時に代用するスキンを設定します。これはスキン・パーツが設定されていなかったり、スキンが明確に指定されていなかったりした時に起こります。</p>
+<p>ほとんどのユーザーは、この設定を気にする必要がありません。</p>
+</div>
+
+<div class="page"><a name="cookies" id="cookies"><span class="invisible">cookies</span></a>
+<h1>Cookie設定</h1>
+
+<h2>ログインCookieの有効期間</h2>
+<p>
+デフォルトでは、メンバーがログインするとブラウザにcookieが保存され、翌日に戻ってきたときに再びログインする必要がなくなります。クッキーの有効期間によって、いつ無効になるか決定されます。</p>
+<ul>
+    <li><strong>セッションごと</strong> ブラウザを終了させるとcookieは削除されます。</li>
+    <li><strong>一ヶ月</strong> 一ヶ月続けてサイトか管理領域を訪れないというようなことが無い限り、cookieはコンピュータに残り続けます。このオプションを使えば、おそらく再ログインする必要はなくなるでしょう。(自分でログアウトしたときや、他のコンピュータからログインするときは別ですが)</li>
+</ul>
+
+<h2>CookieパスとCookieドメイン</h2>
+<p>
+これらは高度な設定です。通常は、cookieパスは単純にスラッシュ('/')、cookieドメインは空っぽの状態から変更する必要はありません。
+</p>
+
+<h2>セキュアCookie</h2>
+<p>
+通常は「いいえ」に設定してください。HTTPSのurlを用いており、cookieの送受信をhttps接続を通してのみに限定したい時だけ、この設定を「はい」にします。
+</p>
+
+<h2>最終訪問日時Cookieの保存</h2>
+<p>
+訪問者が最後に訪れた時間をcookieに保存させるように設定することができます。これによって、<a href="#templatenew">新規アイテム</a>の隣にマークを付けることができます。
+</p>
+
+</div>
+
+
+<div class="page"><a name="language" id="language"><span class="invisible">language</span></a>
+<h1>言語</h1>
+<p>
+Nucleusが生成する個々のメンバー用のコンテンツを作成するときに用いられる言語を選択することができます。Nucleusによって生成されるコンテンツには、管理領域、エラーメッセージ、スキンにおけるフォームなどが含まれます。
+</p>
+
+<p>
+言語の選択を行う場所は二ヶ所あります。一箇所目は「グローバル設定」で、デフォルトで用いられる「既定の言語」を設定します。もう一箇所は、各「メンバーの編集」ページの設定でメンバー毎ログイン時の使用言語を設定することができます。
+
+</p>
+
+<p>
+これら両方の設定が無効の場合、英語がデフォルトの言語として用いられます
+</p>
+
+<p class="note"><strong>注意:</strong> 追加の言語ファイルは<a href="http://www.nucleuscms.org/" onclick="window.open(this.href);return false;" onkeypress="window.open(this.href);return false;" class="out" title="Nucleus CMS Website">Nucleusのウェブサイト</a>からダウンロードできます。(新規ウィンドウが開きます)</p>
+
+</div>
+
+<div class="page"><a name="allowaccountcreation" id="allowaccountcreation"><span class="invisible">allowaccountcreation</span></a>
+<h1>アカウントの作成</h1>
+<p>
+訪問者に自身のメンバーアカウント作成を許可することができます。新規メンバーは管理者がチームに加えるまでは、ブログにアイテムを追加することはできませんが、自分のコメントを削除したり変更したりすることが可能です。<a href="#allownewmemberlogin">新規メンバーのログイン許可</a>を許可している場合、管理領域にログインして自分の設定を変更することもできます。
+</p>
+</div>
+
+<div class="page"><a name="allownewmemberlogin" id="allownewmemberlogin"><span class="invisible">allownewmemberlogin</span></a>
+<h1>新規メンバーのログイン許可</h1>
+<p>
+この設定は、訪問者による<a href="#allowaccountcreation">アカウントの作成</a>を許可している場合に、その方法で作られたアカウントを使用して<a href="#canlogin">管理領域にログイン</a>できるかどうかを設定します。
+</p>
+</div>
+
+
+<div class="page"><a name="messageservice" id="messageservice"><span class="invisible">messageservice</span></a>
+<h1>メッセージサービス</h1>
+
+<h2>メンバー間メッセージサービス</h2>
+<p>
+メンバーのプライバシーのために、メールアドレスを隠したままで、スクリプトを通してメンバー同士でメールメッセージの送信ができます。送信されたメッセージには両ユーザーのメールアドレスが含まれますので、その後は通常のメールを用いた連絡を続けることができます。このサービスは無効にすることが可能です。
+</p>
+
+<h2>メンバー以外のメッセージサービス</h2>
+<p>
+デフォルトでは非メンバーは、入力されたメールアドレスが有効なものかチェックする方法が無いために、メッセージサービスを使用できません。「メンバー以外からのメッセージ送付を許可」することによってこの制限を緩和できます。非メンバーはメッセージの投函時にメールアドレスを尋ねられ、そのアドレスがメールのヘッダー<code>From:</code>に表示されることになります。
+</p>
+
+</div>
+
+<div class="page"><a name="disablesite" id="disablesite"><span class="invisible">disablesite</span></a>
+<h1>サイトの閉鎖</h1>
+<p>
+Nucleusのサイト全体を閉鎖することが可能です。なんらかの設定調整を行うときに、あるいは何か恐ろしい間違いが起きた時にこれを実行したいと思うかもしれません:-)
+</p>
+<p>
+チェックボックスを「はい」に設定した場合に、訪問者はここで設定したURLにリダイレクトされます。
+</p>
+<p>
+例外:<strong>管理領域</strong>は閉鎖していない時と同様に利用可能であり、<strong><a href="#superadmin">最高管理者</a></strong>は通常通りサイト全体を閲覧することができます。(あとでサイトを再開することを忘れないでください;-))
+</p>
+</div>
+
+
+<div class="page"><a name="urlmode" id="urlmode"><span class="invisible">urlmode</span></a>
+<h1>URLモード</h1>
+<p>このオプションを用いることにより、URLスタイルを切り替え可能です:</p>
+<ul>
+    <li><strong>Normal</strong>: URLは次のようになります <code>http://example.jp/index.php?itemid=1234</code></li>
+    <li><strong>Fancy</strong>: URLは次のようになります <code>http://example.jp/item/1234</code></li>
+</ul>
+<p class="note"><strong>注意:</strong>「Fancy URL」モードで動作するようにするためには、この設定のほかにもいくつかの作業が必要になります。詳しい解説は<a href="tips.html" class="out" onclick="window.open(this.href);return false;" onkeypress="window.open(this.href);return false;">Tips &amp; Suggestions</a>に記述されています。(新規ウィンドウが開きます)</p>
+
+</div>
+
+
+<div class="page"><a name="defaultlistsize" id="defaultlistsize"><span class="invisible">defaultlistsize</span></a>
+<h1>一覧の既定の表示数</h1>
+<p>一覧表示画面で一度に表示するブログ、アイテム、コメントの数を入力します。初期値は「10」です。</p>
+</div>
+
+
+<div class="page"><a name="debugvars" id="debugvars"><span class="invisible">debugvars</span></a>
+<h1>デバッグモード</h1>
+<p>「はい」に設定すると、システム情報を表示したり、対応しているプラグインをデバッグモードにしたりできます。</p>
+</div>
+
+
+<div class="page"><a name="templateitems" id="templateitems"><span class="invisible">templateitems</span></a>
+<h1>テンプレート:アイテム</h1>
+<p>
+アイテム表示時に、それぞれのアイテムで次のセットが繰り返されます:
+</p>
+
+<pre>
+アイテムのヘッダー
+アイテムの本体
+アイテムのフッター
+</pre>
+
+<p>「ヘッダー」、「本体」「フッター」の3つのブロックは、それぞれテンプレートの一部として、どのような見た目になるのかを定義します。</p>
+
+<h2>変数</h2>
+
+<p>これらのテンプレート内では、アイテムのデータを挿入するのに<a href="#templatevars-overview" title="Find out which variables are available">テンプレート変数</a>とよばれる系列が利用できます。</p>
+
+<h2>例</h2>
+<p><a href="#templateitemsexample">テンプレート:アイテムの例</a></p>
+
+</div>
+
+<div class="page"><a name="templateitemsexample" id="templateitemsexample"><span class="invisible">templateitemsexample</span></a>
+<h1>テンプレート:アイテムの例</h1>
+<p>
+「アイテムの本体」テンプレートの一例です:
+</p>
+
+<pre>&lt;h1&gt;&lt;%title%&gt;&lt;/h1&gt;
+
+&lt;p&gt;&lt;%body%&gt;&lt;/p&gt;
+
+&lt;div class="metadata"&gt;
+ &lt;a href="&lt;%itemlink%&gt;"&gt;link&lt;/a&gt; -
+ &lt;%date%&gt; &lt;%time%&gt; -
+ &lt;a href="&lt;%authorlink%&gt;"&gt;&lt;%author%&gt;&lt;/a&gt; -
+ &lt;%comments%&gt;
+&lt;/div&gt;</pre>
+
+<p>結果は次のようになります:</p>
+
+<div class="example">
+<span class="heading_example">ここはアイテムのタイトルです</span>
+<p style="margin: 2px; padding: 0px;">ここはアイテムのテキスト部分です</p>
+<div style="font-style: italic; margin: 2px;">
+ <a href="#templateitemsexample">link</a> -
+ September 5th 2008 18:51 -
+ <a href="#templateitemsexample">karma</a> -
+ <a href="#templateitemsexample">no comments</a>
+</div>
+</div>
+
+</div>
+
+
+<div class="page"><a name="templatecomments" id="templatecomments"><span class="invisible">templatecomments</span></a>
+<h1>テンプレート:コメント</h1>
+
+<p>コメントブロックは3つの要素で構成されています。</p>
+
+<ol>
+    <li>
+        コメントが表示されるとき(ブログの設定、もしくは「コメント本体」のテンプレート内の&lt;%comments%&gt;の引数で許可されているコメントの最大数を下回っているとき)
+<pre>コメントのヘッダー
+  コメントの本体(コメントの数だけ繰り返し)
+コメントのフッター</pre>
+    </li>
+    <li>
+        コメントがまったく無いとき
+<pre>
+コメントが無い時
+</pre>
+    </li>
+    <li>
+        コメントがあるが、許可されている最大数を上回っているとき(個別アイテムページでのみ表示されます)
+<pre>
+コメントが多すぎる時
+</pre>
+    </li>
+</ol>
+
+<p>コメントのテンプレート内部では、<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連テンプレート変数</a>が利用できます。</p>
+
+</div>
+
+<div class="page">
+<a name="templatecommentheaders" id="templatecommentheaders"><span class="invisible">templatecommentheaders</span></a>
+<a name="templatecommentfooters" id="templatecommentfooters"><span class="invisible">templatecommentfooters</span></a>
+<h1>テンプレート:コメントのヘッダーとフッター</h1>
+
+<h2>特徴</h2>
+
+<p>「コメントの本体」はコメント一つごとに繰り返されますが、ヘッダーとフッターは一度しか表示されません。出力は次のようになります:</p>
+<pre>コメントのヘッダー
+  コメントの本体 1
+  コメントの本体 2
+  コメントの本体 3
+コメントのフッター</pre>
+<p>これらのテンプレート内では、<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連テンプレート変数</a>が利用できます。</p>
+
+<h2>例</h2>
+
+<p>コメントのヘッダー:</p>
+<pre>&lt;ul&gt;</pre>
+<p>コメントの本体:</p>
+<pre>&lt;li&gt;&lt;%user%&gt;: &lt;%body%&gt;&lt;/li&gt;</pre>
+<p>コメントのフッター</p>
+<pre>&lt;/ul&gt;</pre>
+<p>結果は次のようになります</p>
+
+<ul class="example">
+    <li>hsur: そうでしたね。なんでソコ抱き合ってんの・・・っていう感じで</li>
+    <li>satona: ぼくは、センセーとしましたよ。ハグ。</li>
+    <li>hsur: ぇ!</li>
+</ul>
+
+</div>
+
+<div class="page"><a name="templatemorelink" id="templatemorelink"><span class="invisible">templatemorelink</span></a>
+<h1>テンプレート:続きへのリンク</h1>
+<p>
+これはアイテムのテンプレート(アイテムのヘッダー、アイテムの本体、アイテムのフッターの3つ)で利用できるテンプレート変数、"morelink"がどのように表示されるかを決めるものです。<a href="#templatevars-overview">利用可能な変数</a>はアイテムのテンプレートと同じです。
+</p>
+<p>
+もしアイテムに「続き」の部分が存在しない場合、テンプレート変数<code>&lt;%morelink%&gt;</code>は無視されます。
+</p>
+
+<h2>例</h2>
+<pre><code>&lt;a href="&lt;%itemlink%&gt;"&gt;[続きを読む!]&lt;/a&gt;</code></pre>
+
+</div>
+
+<div class="page"><a name="templatearchivelists" id="templatearchivelists"><span class="invisible">templatearchivelists</span></a>
+
+<h1>テンプレート:アーカイブリスト</h1>
+
+<p>過去ログのリストは、以下のようなリスト体裁をとります:</p>
+
+<pre>アーカイブリストヘッダー
+  アーカイブリスト本体(アーカイブごとに繰り返し)
+アーカイブリストフッター</pre>
+
+<p>
+利用できる変数:(ヘッダーとフッターでは<code>blogid</code>のみが使用できます)
+</p>
+
+<table summary="Template::Archive lists"><tr>
+    <th abbr="名前">名前</th>
+    <th abbr="説明">説明</th>
+</tr><tr>
+    <td>blogid</td>
+    <td>weblogのID</td>
+</tr><tr>
+    <td>archivelink</td>
+    <td>アーカイブへのリンク。<code>&lt;a href="&lt;%archivelink%&gt;"&gt;</code>のように使用します。</td>
+</tr><tr>
+    <td>month</td>
+    <td>月の数値(01-12の2文字表記)</td>
+</tr><tr>
+    <td>year</td>
+    <td>年(西暦の4文字表記)</td>
+</tr><tr>
+    <td>day</td>
+    <td>月の中での日付(二文字表記。日ごと表示の時のみ)</td>
+</tr></table>
+
+<p><a href="#strftime">strftime</a>変数を使用することで、日付の表記を自由にカスタマイズすることができます。この変数が複雑すぎると感じるなら、次のように記述すると良いでしょう。</p>
+
+<pre><code>&lt;a href="&lt;%archivelink%&gt;"&gt;%B, %Y&lt;/a&gt;&lt;br /&gt;</code></pre>
+
+
+<p>出力される時刻と言語をあなたの住んでいる地域にあわせるために、<a href="#templatelocale">locale</a>を適切に設定してください。</p>
+
+</div>
+
+
+
+
+<div class="page"><a name="templatecategorylists" id="templatecategorylists"><span class="invisible">templatecategorylists</span></a>
+<h1>テンプレート:カテゴリーリスト</h1>
+
+<p>カテゴリーリストは下の表のようにフォーマットされます:</p>
+
+<pre>カテゴリーリストヘッダー
+  カテゴリーリストアイテム(繰り返し)
+カテゴリーリストフッター</pre>
+
+<p>利用可能な変数:(ヘッダーとフッターでは<code>blogid</code>、<code> blogurl</code>、<code>self</code>のみが許可されています)</p>
+
+<table summary="Template::Category lists"><tr>
+    <th abbr="名前">名前</th>
+    <th abbr="説明">説明</th>
+</tr><tr>
+    <td>blogid</td>
+    <td>weblogのID</td>
+</tr><tr>
+    <td>blogurl</td>
+    <td>blogのURL(blogごとの「設定」で定義される)</td>
+</tr><tr>
+    <td>self</td>
+    <td>パラメーター無しの現在のページ(例えば<code>index.php</code>)</td>
+</tr><tr>
+    <td>catlink</td>
+    <td>該当カテゴリーの新しいアイテムへのリンク。これにより&lt;a href=".."&gt;タグを埋め込むことができる。</td>
+</tr><tr>
+    <td>catid</td>
+    <td>カテゴリーのID</td>
+</tr><tr>
+    <td>catname</td>
+    <td>カテゴリー名</td>
+</tr><tr>
+    <td>catdesc</td>
+    <td>カテゴリーの説明</td>
+</tr><tr>
+    <td>catiscurrent</td>
+    <td>カテゴリが選択中、もしくは表示中のアイテムが所属するカテゴリの場合「yes」が、そうでなければ「no」が出力される</td>
+</tr><tr>
+    <td>currentcat</td>
+    <td>&lt;%catiscurrent%&gt;のシノニム</td>
+</tr></table>
+
+<p><a href="#categorylistexample">カテゴリーリストの例を見る</a></p>
+
+</div>
+
+<div class="page"><a name="categorylistexample" id="categorylistexample"><span class="invisible">categorylistexample</span></a>
+<h1>テンプレート:カテゴリーリストの例</h1>
+<p>
+<a href="#templatecategorylists">「テンプレート:カテゴリーリスト」の解説に戻る</a>
+</p>
+
+<h2>カテゴリーリストヘッダー</h2>
+<pre><code>&lt;ul&gt;
+  &lt;li&gt;&lt;a href="&lt;blogurl%&gt;"&gt;まとめて表示&lt;/a&gt;&lt; /li&gt;</code></pre>
+
+<h2>カテゴリーリストアイテム</h2>
+<pre><code>&lt;li&gt;&lt;a href="&lt;%catlink%&gt;"&gt;&lt;%catname%&gt;&lt;/a&gt;&lt;/li&gt;</code></pre>
+
+<h2>カテゴリーリストフッター</h2>
+<pre><code>&lt;/ul&gt;</code></pre>
+
+<h2>結果はこうなります:</h2>
+
+<ul class="example">
+    <li><a href="#categorylistexample">まとめて表示</a></li>
+    <li><a href="#categorylistexample">あなたのカテゴリー</a></li>
+    <li><a href="#categorylistexample">わたしのカテゴリー</a></li>
+</ul>
+
+</div>
+
+<div class="page"><a name="templatebloglists" id="templatebloglists"><span class="invisible">templatebloglists</span></a>
+<h1>テンプレート:ブログリスト</h1>
+
+<p>ブログリストは次の様に出力されます:</p>
+
+<pre>ブログリストヘッダー
+  ブログリストアイテム(存在するブログの数だけ繰り返し)
+ブログリストフッター</pre>
+
+<p>ブログリストアイテムで利用可能な変数:</p>
+
+<table summary="Template::Blog lists item"><tr>
+    <th abbr="名前">名前</th>
+    <th abbr="説明">説明</th>
+</tr><tr>
+    <td>bloglink</td>
+    <td>ブログのURL(Nucleusコアによって与えられた引数から生成されるもの)<code>&lt;a href="&lt;%bloglink%&gt;"&gt;</code>のように使用します。</td>
+</tr><tr>
+    <td>blogurl</td>
+    <td>ブログのURL(「Blog設定」の「URL」で設定されているもの)<code>&lt;a href="&lt;%blogurl%&gt;"&gt;</code>のように使用します。</td>
+</tr><tr>
+    <td>blogdesc</td>
+    <td>ブログの説明</td>
+</tr><tr>
+    <td>blogname</td>
+    <td>ブログ名(第二引数に『shortname』が指定された場合は『ブログの短縮名』)</td>
+</tr></table>
+
+<p>ヘッダーとフッターでのみ使用できる変数:</p>
+
+<table summary="Template::Blog lists header/footer"><tr>
+    <th abbr="名前">名前</th>
+    <th abbr="説明">説明</th>
+</tr><tr>
+    <td>siteurl</td>
+    <td>グローバル設定の「サイトのURL」</td>
+</tr><tr>
+    <td>sitename</td>
+    <td>グローバル設定の「サイト名」</td>
+</tr></table>
+
+<p><a href="#bloglistexample">ブログリストの例を見る</a></p>
+
+</div>
+
+<div class="page"><a name="bloglistexample" id="bloglistexample"><span class="invisible">bloglistexample</span></a>
+<h1>テンプレート:ブログリストの例</h1>
+<p>
+<a href="#templatebloglists">「テンプレート:ブログリスト」の解説に戻る</a>
+</p>
+
+<h2>ブログリストヘッダー</h2>
+<pre><code>&lt;ul&gt;
+  &lt;li&gt;&lt;a href="&lt;%siteurl%&gt;"&gt;&lt;%sitename%&gt;&lt;/a&gt;&lt;/li&gt;</code></pre>
+
+<h2>ブログリストアイテム</h2>
+<pre><code>&lt;li&gt;&lt;a href="&lt;%bloglink%&gt;" title="&lt;%blogdesc%&gt;"&gt;&lt;%blogname%&gt;&lt;/a&gt;&lt;/li&gt;</code></pre>
+
+<h2>ブログリストフッター</h2>
+<pre><code>&lt;/ul&gt;</code></pre>
+
+<h2>表示は次のようになります</h2>
+
+<ul class="example">
+    <li><a href="#bloglistexample">あなたのサイト</a></li>
+    <li><a href="#bloglistexample" title="あなたのブログの説明">あなたのブログ</a></li>
+    <li><a href="#bloglistexample" title="わたしのブログの説明">わたしのブログ</a></li>
+</ul>
+
+</div>
+
+
+
+
+
+
+
+<div class="page"><a name="templatelocale" id="templatelocale"><span class="invisible">templatelocale</span></a>
+<h1>テンプレート:Locale</h1>
+<p>
+これは実際のところテンプレートの部品というより設定です。設定することによって、日付と時刻のローカライズを選択できます。月や曜日などは要求された言語での表示になるでしょう。
+</p>
+
+<p>
+使える変数は、Nucleusが動作しているコンピュータによります。使える変数をいくつかあげますと・・・:
+</p>
+
+<ul>
+    <li><strong>en</strong>:英語</li>
+    <li><strong>dutch</strong>:オランダ語</li>
+    <li><strong>ja_JP</strong>:日本語</li>
+    <li>...</li>
+</ul>
+
+<p>
+strftimeに関するより詳しい情報は、<a href="http://www.opengroup.org/onlinepubs/7908799/xsh/strftime.html" onclick="window.open(this.href);return false;" onkeypress="window.open(this.href);return false;" class="out" title="Open Group specification">Open Group Specification</a>にあります。(新規ウィンドウが開きます)
+</p>
+
+<p>
+locale は<a href="#templatedatetime">日付と時刻のフォーマット</a>、<a href="#templatedateheads">日付ヘッダー</a>、<a href="#templatearchivelists">アーカイブリスト</a>で利用されます。
+</p>
+
+</div>
+
+<div class="page"><a name="templatedatetime" id="templatedatetime"><span class="invisible">templatedatetime</span></a>
+<h1>テンプレート:日付と時刻のフォーマット</h1>
+<p>
+これらは<code>&lt;%date%&gt;</code>と<code> &lt;%time%&gt;</code>という変数(詳細は<a href="#templatevars-overview">テンプレート変数</a>を参照)の日付と時刻の表示方法を設定します。フォーマットは<a href="#templatelocale">Locale</a>にも左右されます。
+</p>
+
+<p>
+利用できる変数の<a href="#strftime">詳細な情報はこちら</a>。もし手っ取り早く始めたいのなら、日付フォーマットに"%x"を、時刻フォーマットに"%X"をお使いください。
+</p>
+
+</div>
+
+<div class="page"><a name="templatedateheads" id="templatedateheads"><span class="invisible">templatedateheads</span></a>
+<h1>テンプレート:日付のヘッダー/フッター</h1>
+
+<p>
+日付のヘッダーと日付のフッターは、日付と時刻の変数を入力することができます。利用できる変数の詳細情報は<a href="#strftime">こちらにあります</a>。もし手っ取り早く始めたいのなら、日付フォーマットとして"%x"を使ってください。日付フォーマットで使われる言語は、テンプレートの<a href="#templatelocale">Locale</a>で設定できます。</p>
+
+<p>
+日付のヘッダーにテンプレート変数&lt;%%daylink%%&gt;を含めることによって、その日のアーカイブへのリンクを挿入できます。<strong>'%'が二つ続けてあることに注意!変数として展開される%dを無効にするために必要な措置です。 </strong>同様に、このテンプレート内で'%'という文字を使いたい場合は、二つ重ねて"%%"と記述しないとサイトには表示されません。
+</p>
+
+<p>
+日付のヘッダーのサンプル:
+</p>
+
+<pre>
+&lt;div class="day"&gt;
+&lt;h1&gt;%d %B&lt;/h1&gt;
+</pre>
+
+<p>
+日付のフッターのサンプル:
+</p>
+
+<pre>
+&lt;/div&gt;
+</pre>
+
+<p>daylinkを用いた日付ヘッダーの例:</p>
+
+<pre>
+&lt;div class="day"&gt;
+&lt;h1&gt;%d %B&lt;/h1&gt;
+&lt;a href="&lt;%%daylink%%&gt;"&gt;(アーカイブ)&lt;/a&gt;
+</pre>
+
+</div>
+
+<div class="page"><a name="templatehighlight" id="templatehighlight"><span class="invisible">templatehighlight</span></a>
+<h1>テンプレート:ハイライト表示</h1>
+<p>
+検索結果をハイライト表示するために、検索文字列を挟み込む(X)HTMLタグを入力します。"\0"と記述した場所が、検索文字列に置き換えられます。また、ここで入力された文字列は、プログラム中で<a href="http://jp.php.net/manual/ja/reference.pcre.pattern.syntax.php" onclick="window.open(this.href);return false;" onkeypress="window.open(this.href);return false;" class="out">正規表現のパターン構文数</a>(新しいウィンドウが開きます)としてそのまま使用されますので、いくつかの記号はバックスラッシュを直前に置くことでエスケープしなければなりません。
+</p>
+
+<h2>例</h2>
+
+<pre><code>&lt;span style='background-color:yellow'&gt;\0&lt;/span&gt;</code></pre>
+
+</div>
+
+<div class="page"><a name="templatenothingfound" id="templatenothingfound"><span class="invisible">templatenothingfound</span></a>
+<h1>テンプレート:検索で何も見つからなかった場合</h1>
+
+<p>
+検索が実行され結果何も見つからなかった場合に表示されます。
+</p>
+
+<p>利用可能な変数:</p>
+
+<table summary="Template::othing found"><tr>
+    <th abbr="名前">名前</th>
+    <th abbr="説明">説明</th>
+</tr><tr>
+    <td>blogid</td>
+    <td>ブログのID</td>
+</tr><tr>
+    <td>query</td>
+    <td>検索に用いられた文字列</td>
+</tr></table>
+
+<h2>例</h2>
+
+<pre><code>&lt;b&gt;&lt;%query%&gt;&lt;/b&gt;に該当する検索結果はありませんでした</code></pre>
+
+</div>
+
+<div class="page"><a name="templatecommentbody" id="templatecommentbody"><span class="invisible">templatecommentbody</span></a>
+<h1>テンプレート:コメントの本体</h1>
+<p>
+このテンプレート・パーツは単独のコメント表示に使われます。このテンプレートでは、<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連テンプレート変数</a>が利用できます。</p>
+
+<h2>例</h2>
+<pre><code>&lt;h2&gt;&lt;%userlink%&gt;さんによるコメント:&lt;/h2&gt;
+
+&lt;p&gt;&lt;%body%&gt;&lt;/p&gt;
+
+&lt;div class="metadata"&gt;
+ (接続元:&lt;%host%&gt; 投稿日時:&lt;%date%&gt; &lt;%time%&gt;)
+&lt;/div&gt;</code></pre>
+
+<p>結果は次のようになります:</p>
+
+<div class="example">
+<span class="heading_example"><a href="#templatecommentbody">fujisaki</a>さんによるコメント:</span>
+<p style="margin: 2px;">このういろう、味薄い</p>
+<div style="margin:2px;font-size:smaller;">(接続元:host.example.org 投稿日時:2008-08-23 02:30)</div>
+</div>
+
+</div>
+
+<div class="page"><a name="templatepopups" id="templatepopups"><span class="invisible">templatepopups</span></a>
+<h1>テンプレート:メディアとポップアップ</h1>
+<p>
+これらのテンプレートは、画像のポップアップウィンドウへのリンクと画像以外のメディア・オブジェクトのフォーマットに用いられます。それぞれのテンプレートで利用可能な変数は以下の通りです。
+</p>
+
+<h2>ポップアップ画像へのリンクコード</h2>
+
+<table summary="Template::Popup kink code"><tr>
+    <th abbr="名前">名前</th>
+    <th abbr="説明">説明</th>
+</tr><tr>
+    <td>popuplink</td>
+    <td>画像へのポップアップ・リンク</td>
+</tr><tr>
+    <td>rawpopuplink</td>
+    <td>popuplinkのジャンプ先URL</td>
+</tr><tr>
+    <td>popupcode</td>
+    <td>ポップアップウィンドウを開くjavascriptコード</td>
+</tr><tr>
+    <td>text</td>
+    <td>代替テキスト(リンクテキスト)</td>
+</tr><tr>
+    <td>width</td>
+    <td>イメージの幅</td>
+</tr><tr>
+    <td>height</td>
+    <td>イメージの高さ</td>
+</tr><tr>
+    <td>popuptext</td>
+    <td>textと同じだが、htmlエンティティ変換される</td>
+</tr><tr>
+    <td>link</td>
+    <td>画像の直接のURL</td>
+</tr><tr>
+    <td>media</td>
+    <td>画像への直接リンク</td>
+</tr></table>
+
+
+<h2>インライン画像のコード</h2>
+
+<table summary="Template::Inline image"><tr>
+    <th abbr="名前">名前</th>
+    <th abbr="説明">説明</th>
+</tr><tr>
+    <td>image</td>
+    <td>(x)htmlのimgタグ</td>
+</tr><tr>
+    <td>link</td>
+    <td>画像の直接のURL</td>
+</tr><tr>
+    <td>text</td>
+    <td>代替テキスト(リンクテキスト。htmlエンティティ変換される)</td>
+</tr><tr>
+    <td>width</td>
+    <td>イメージの幅</td>
+</tr><tr>
+    <td>height</td>
+    <td>イメージの高さ</td>
+</tr><tr>
+    <td>media</td>
+    <td>画像への直接リンク</td>
+</tr></table>
+
+<h2>メディアオブジェクトへのリンクコード</h2>
+
+<table summary="Template::Media objects"><tr>
+    <th abbr="名前">名前</th>
+    <th abbr="説明">説明</th>
+</tr><tr>
+    <td>media</td>
+    <td>ファイルへの直接リンク</td>
+</tr><tr>
+    <td>link</td>
+    <td>ファイルの直接のURL</td>
+</tr><tr>
+    <td>text</td>
+    <td>代替テキスト(リンクテキスト。htmlエンティティ変換される)</td>
+</tr></table>
+
+</div>
+
+<div class="page"><a name="templatememberextra" id="templatememberextra"><span class="invisible">templatememberextra</span></a>
+<h1>テンプレート:登録メンバーからのコメントへの追加表示</h1>
+<p>
+これはコメントが登録メンバーからのものであることを示すのに利用できるテンプレートです。最終的には<a href="#templatecommentbody">コメントの本体</a>で使われる<code>&lt;%authtext%&gt;</code>変数の中身として表示されます。
+</p>
+
+<p> このテンプレート内部では、<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連テンプレート変数</a>が利用できます。</p>
+
+</div>
+
+<div class="page"><a name="templatecommentcontinued" id="templatecommentcontinued"><span class="invisible">templatecommentcontinued</span></a>
+<h1>テンプレート:コメントの続きを読む</h1>
+<p>
+このテンプレートの内容は、<a href="#templatecommentbody">コメントの本体</a>で使われる変数<code>&lt;%short%&gt;</code>に追加されます。
+</p>
+
+<p>このテンプレート内部では、<code>&lt;%short%&gt;</code>以外の<a href="#templatevars-comments" title="Overview of comments-related template variables">コメント関連テンプレート変数</a>が利用できます。</p>
+
+<p>例:</p>
+
+<pre>
+ &lt;a href="&lt;%itemlink%&gt;"&gt;[続き]&lt;/a&gt;
+</pre>
+
+</div>
+
+<div class="page"><a name="templatecommentwords" id="templatecommentwords"><span class="invisible">templatecommentwords</span></a>
+<h1>テンプレート:コメントの数え方</h1>
+<p>
+日本語で使う場合は、単複同型なので両方"件のコメント"にしておいて問題ないでしょう。英語で表記したい時は、次のようなことが気になるかもしれません。</p>
+<p>コメントの件数の表示の仕方を、"1 comment(s)"とするよりも"1 comment"、"3 comments"と表示したい人が多いのではないでしょうか?「コメントが1つの時」と「コメントが2つ以上の時」のテンプレート部分はその目的のために存在します。これらは他の所で使える<code>&lt;%commentword%&gt;</code>変数の中身として利用されます。
+</p>
+
+<p>
+1つしかコメントが無い時は、<code>&lt;%commentword%&gt;</code>は「コメントが一つの時」で設定した内容になり、2つ以上のコメントがついているなら「コメントが二つ以上の時」で設定した内容になります。
+</p>
+
+<p>
+典型的な値は"comment"と"comments"です。<strong>ここでは変数は利用できません</strong>。
+</p>
+</div>
+
+
+
+<div class="page"><a name="templateeditlink" id="templateeditlink"><span class="invisible">templateeditlink</span></a>
+<h1>テンプレート:アイテムを編集するためのリンク </h1>
+<p>
+このテンプレートは<a href="#templatevar-edit">テンプレート変数"edit"</a>がどのように表示されるかを決めるものです。このテンプレートではすべての<a href="#templatevars-overview">テンプレート変数</a>が使用できます。
+</p>
+
+<h2>例:</h2>
+
+<pre><code>&lt;a href="&lt;%editlink%&gt;"
+   onclick="&lt;%editpopupcode%&gt;"&gt;編集&lt;/a&gt;</code></pre>
+
+</div>
+
+
+
+
+<div class="page"><a name="skinpartindex" id="skinpartindex"><span class="invisible">skinpartindex</span></a>
+<h1>スキン:メインの目次ページ</h1>
+<p>
+このスキンパーツはブログ内の最新のエントリーを表示するのに用いられます。通常はサイト、またはブログのトップページにあたる場所になります。
+</p>
+
+<p>
+「メインの目次ページ」の基本的な形:
+</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;私のウェブログ&lt;/h1&gt;
+    &lt;%blog(mytemplate,20)%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>
+    このスキンでは、選択中のブログのアイテムが、タイムスタンプの新しいものから20個、'mytemplate'というテンプレートを使用して表示されます。
+    </p>
+</div>
+
+
+<div class="page"><a name="skinpartitem" id="skinpartitem"><span class="invisible">skinpartitem</span></a>
+<h1>個別アイテムページ</h1>
+<p>
+このスキンパーツは個別のアイテムを表示するために使われます。アイテムに付けられた全てのコメントと、コメント追加フォームを含めたものになります。
+</p>
+
+<p>
+「個別アイテムページ」の基本的な形:
+</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: アイテム&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;アイテム&lt;/h1&gt;
+    &lt;%item(detailed)%&gt;
+
+    &lt;h1&gt;コメント&lt;/h1&gt;
+    &lt;%comments(detailed)%&gt;
+
+    &lt;h1&gt;コメントを追加&lt;/h1&gt;
+    &lt;%commentform%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>
+    このスキンでは、'detailed'テンプレートを使用してアイテムとコメント、そして標準のコメントフォームが表示されます。
+</p>
+
+
+</div>
+
+<div class="page"><a name="skinpartarchivelist" id="skinpartarchivelist"><span class="invisible">skinpartarchivelist</span></a>
+<h1>スキン:月別アーカイブ一覧ページ</h1>
+<p>
+このスキンパーツはアーカイブが存在する全ての月の概略と、それらアーカイブへのリンクを表示します。
+</p>
+
+<p>
+「月別アーカイブ一覧ページ」の基本的な形:
+</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: アーカイブ集&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;アーカイブ集&lt;/h1&gt;
+    &lt;%archivelist(default)%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>
+    このスキンでは、'default'テンプレートを使用して、選択中のブログのアーカイブが存在する全ての月のリストが表示されます。
+</p>
+
+</div>
+
+<div class="page"><a name="skinpartarchive" id="skinpartarchive"><span class="invisible">skinpartarchive</span></a>
+<h1>スキン:月別アーカイブページ</h1>
+<p>
+このスキンパーツは「メインの目次ページ」と似た振る舞いをしますが、該当月の全てのアイテムを表示します。
+</p>
+
+<p>
+「月別アーカイブページ」の基本的な形:
+</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: アーカイブ&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;アーカイブ&lt;/h1&gt;
+    &lt;%archive(default)%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>
+    このスキンでは、'default'テンプレートを使用して、選択中のブログの要求されたアーカイブが表示されます。
+</p>
+
+
+</div>
+
+
+<div class="page"><a name="skinpartsearch" id="skinpartsearch"><span class="invisible">skinpartsearch</span></a>
+<h1>スキン:検索ページ</h1>
+<p>
+このスキンパーツは検索結果の表示に使われます。
+</p>
+
+<p>
+「検索ページ」の基本的な形:
+</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: 検索&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;検索&lt;/h1&gt;
+    &lt;%searchform%&gt;
+
+    &lt;h1&gt;検索結果&lt;/h1&gt;
+    &lt;%searchresults(default)%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>
+    このスキンでは、'default'テンプレートを使用して検索の結果が表示されます。
+</p>
+
+</div>
+
+<div class="page"><a name="skinparterror" id="skinparterror"><span class="invisible">skinparterror</span></a>
+<h1>スキン:エラーページ</h1>
+<p>
+このスキンパーツはエラーが発生したときに用いられます。
+</p>
+<p>
+「エラーページ」の基本的な形:
+</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: エラー&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;エラーが発生しました!&lt;/h1&gt;
+    &lt;%errormessage%&gt;
+
+    &lt;br /&gt;&lt;br /&gt;
+
+    &lt;a href="javascript:history.back();"&gt;戻る&lt;/a&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>
+    このスキンでは、エラーメッセージと、元のページへ戻るためのリンクが表示されます。
+</p>
+
+</div>
+
+<div class="page"><a name="skinpartmember" id="skinpartmember"><span class="invisible">skinpartmember</span></a>
+<h1>スキン:メンバー詳細ページ</h1>
+<p>
+このスキンパーツはメンバーの詳細を表示するのに使われます。
+</p>
+
+<p>
+「メンバー詳細ページ」の基本的な形:
+</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のウェブログ :: メンバーの詳細&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;&lt;%member(name)%&gt; の情報&lt;/h1&gt;
+    ウェブサイト:
+    &lt;a href="&lt;%member(url)%&gt;"&gt;&lt;%member(url)%&gt;&lt;/a&gt;
+
+    &lt;h1&gt;メッセージを送る&lt;/h1&gt;
+    &lt;%membermailform%&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>
+    このスキンでは、メンバー名とメンバーのウェブサイトのアドレス、そしてメール送信フォームが表示されます。
+</p>
+
+</div>
+
+
+<div class="page"><a name="skinpartimagepopup" id="skinpartimagepopup"><span class="invisible">skinpartimagepopup</span></a>
+<h1>スキン:画像ポップアップウィンドウ</h1>
+<p>
+このスキンパーツは画像をポップアップウィンドウを使用して表示する場合に使われる、ポップアップウィンドウ内のレイアウトを決定します。
+</p>
+
+<p>
+「画像ポップアップウィンドウ」の基本的な形:
+</p>
+
+<pre>
+&lt;html&gt;
+&lt;head&gt;
+  &lt;title&gt;&lt;%imagetext%&gt;&lt;/title&gt;
+  &lt;style type="text/css"&gt;
+   img { border: none; }
+  &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+  &lt;a href="javascript:window.close();"&gt;&lt;%image%&gt;&lt;/a&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+</div>
+
+
+<div class="page"><a name="skinpartspecial" id="skinpartspecial"><span class="invisible">skinpartspecial</span></a>
+<h1>スキン:スペシャルスキンパーツ</h1>
+<p>
+このスキンパーツは、特別な見せ方をしたいコンテンツやブログの内容以外のコンテンツ、例えばフォームや静的なコンテンツ、もしくはNucleusとは切り離された動的なコンテンツ等を表示する為に使用します。
+スペシャルスキンパーツは次のようにして表示します。
+(<code>fred</code>という名前でスペシャルスキンパーツを作った場合)
+</p>
+<code>http://www.yoursite.tld/index.php?special=fred</code>
+
+<p>このスキンタイプに関するさらなる議論は、NucleusCMS本家サポートフォーラムで行われています。:
+<a href="http://forum.nucleuscms.org/viewtopic.php?t=16501" title="Special Skin Parts">Nucleus 3.31 and Static Pages</a>
+</p>
+
+<p>
+標準的なスペシャルスキンパーツ:
+</p>
+
+<pre>
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;私のブログ&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;h1&gt;このサイトについて&lt;/h1&gt;
+    &lt;p&gt;This page was published in order
+    to provide a platform to publicize the plight
+    of the peeping-polly parrot whose present
+    prognosis is perturbingly pessimistic.&lt;/p&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<p>
+    この例は、ごく一般的なHTML文書として表示されます。
+    また、標準的なスキン変数が使えるので、ブログとの連系を持たせた静的ページを持たせたいときなどに役立つでしょう。
+</p>
+</div>
+
+
+
+
+<div class="page"><a name="shortnames" id="shortnames"><span class="invisible">shortnames</span></a>
+<h1>短縮名と表示される名前</h1>
+<p>
+ブログ、テンプレート、そしてスキンは名前や説明の他に短縮名を持たなくてはなりません。
+</p>
+
+<p>
+短縮名はa~zと0~9<strong>のみ</strong>で構成され、スペースを含むことは<strong>できません</strong>。</p>
+<p>訳注:テンプレートの名前には'/'が利用できたりするので、実際にはこの限りではないようです。
+</p>
+
+<p>
+メンバーの場合、「表示される名前」はログイン名として使われます。a~z、 A~Z、0~9とスペース(半角)が使用できます。ただし、名前の最初や最後にスペースを付けることはできません。
+</p>
+</div>
+
+
+
+
+
+
+<div class="page"><a name="templatenew" id="templatenew"><span class="invisible">templatenew</span></a>
+<h1>テンプレート:新しいアイテムに付けるマーク</h1>
+<p>
+<a href="#cookies">最終訪問日時Cookieの保存</a>オプションを「はい」に設定している時、前回訪問時から後に追加されたアイテムに、「新しいアイテムに付けるマーク」テンプレートの内容が、アイテムのテンプレートに記述した変数<code>&lt;%new%&gt;</code>の部分に表示されます。
+</p>
+
+<p>
+<a href="#cookies">「最終訪問日時Cookieの保存」</a>が「いいえ」に設定されている、または前回訪問時以降にアイテムが新しく追加されていなければ、変数<code>&lt;%new%&gt;</code>は無視されます。
+</p>
+</div>
+
+
+
+<div class="page"><a name="strftime" id="strftime"><span class="invisible">strftime</span></a>
+<h1>時間変数の概要</h1>
+
+<p>次の変換記述は文字列フォーマットに基づきます<small>(PHPドキュメントの<a href="http://jp.php.net/manual/ja/function.strftime.php" onclick="window.open(this.href);return false;" onkeypress="window.open(this.href);return false;" class="out">strftime関数</a>から持ってきたものです)</small>。より詳しい情報は <a href="http://www.opengroup.org/onlinepubs/7908799/xsh/strftime.html" onclick="window.open(this.href);return false;" onkeypress="window.open(this.href);return false;" class="out" title="Open Group specification">Open Group Specification</a>にあります。</p>
+
+<ul>
+    <li><strong>%a</strong> - 現在のロケールに基づく短縮された曜日の名前</li>
+    <li><strong>%A</strong> - 現在のロケールに基づく完全な曜日の名前</li>
+    <li><strong>%b</strong> - 現在のロケールに基づく短縮された月の名前</li>
+    <li><strong>%B</strong> - 現在のロケールに基づく完全な月の名前</li>
+    <li><strong>%c</strong> - 現在のロケールに基づく適当な日付と時間の表現</li>
+    <li><strong>%d</strong> - 日付を10進数で(01から31) </li>
+    <li><strong>%H</strong> - 時間を24時間表示の10進数で(00から23まで)</li>
+    <li><strong>%I</strong> - 時間を12時間表示の10進数で(01から12までの範囲)</li>
+    <li><strong>%j</strong> - 年間での日付を10進数で表現 (001から366)</li>
+    <li><strong>%m</strong> - 月を10進数で表現 (01から12)</li>
+    <li><strong>%M</strong> - 分を10進数で表現</li>
+    <li><strong>%p</strong> - 指定した時間により 'am' または 'pm' 、または 現在のロケールに対応した文字列</li>
+    <li><strong>%S</strong> - 秒を10進数で表現</li>
+    <li><strong>%U</strong> - 年間で何番目の週であるかを 10 進数で表現。 年間で最初の日曜を最初の週の最初の日として数えます。</li>
+    <li><strong>%W</strong> - 現在の年で何番目の週であるかを10進数で表現。 年間で最初の月曜を最初の週の最初の日として数えます。</li>
+    <li><strong>%w</strong> - 曜日を10進数で表現。日曜は0になります。</li>
+    <li><strong>%x</strong> - 時間を除いた日付を現在のロケールに基づき表現します。</li>
+    <li><strong>%X</strong> - 日付を除いた時間を現在のロケールに基づき表現します。</li>
+    <li><strong>%y</strong> - 世紀の部分を除いた年を10進数として表現。(00から99までの範囲) </li>
+    <li><strong>%Y</strong> - 世紀を含む年を 10進数で表現</li>
+    <li><strong>%Z</strong> - タイムゾーンまたはその名前または短縮形</li>
+    <li><strong>%%</strong> - 文字リテラル'%' </li>
+</ul>
+
+<p>以下はサーバによって対応が異なりますので、参考程度にお試しください。</p>
+
+<ul>
+    <li><strong>%-d</strong>または<strong>%#d</strong> - 日付を10進数で(1から31) </li>
+    <li><strong>%-H</strong>または<strong>%#H</strong> - 時間を24時間表示の10進数で(0から23まで)</li>
+    <li><strong>%-I</strong>または<strong>%#I</strong> - 時間を12時間表示の10進数で(1から12までの範囲)</li>
+    <li><strong>%-m</strong>または<strong>%#m</strong> - 月を10進数で表現 (1から12)</li>
+    <li><strong>%-M</strong>または<strong>%#M</strong> - 分を10進数で表現(0から59まで)</li>
+</ul>
+
+</div>
+
+<div class="page"><a name="sendping" id="sendping"><span class="invisible">sendping</span></a>
+<h1>Pingサーバに更新通知を送信する</h1>
+<p>
+ブログを更新した時に、ブログ検索サイト等の公開している複数のpingサーバに更新pingを送信することができます。これらのpingサーバを用意しているサイトでは、リクエストに応じて最近更新されたブログのリストを提示してくれます。このデータを利用した新着記事のリスト等のサービスを、数多くのウェブサイトが提供していますので、このオプションを「はい」に設定することで、あなたのブログは新しい訪問者を得ることになるでしょう。
+</p>
+<p class="note"><strong>注意:</strong>この機能を正しく動かすために、blogごとの「設定」にあるweblogの「URL」と「Blogの名前」を埋める必要があります。
+</p>
+
+</div>
+
+<div class="page"><a name="blogsearchable" id="blogsearchable"><span class="invisible">blogsearchable</span></a>
+
+<h1>常に検索対象に含める</h1>
+
+<p>「常に検索対象にする」オプションが選択されていると、同一のNucleus内で行われたすべてのブログ内検索において、<strong>常に</strong>検索対象に含まれます。</p>
+
+<p>例として、'lifelog'と'linkdump'という2つのブログを持ち、'linkdump'の「常に検索対象にする」が「はい」、'lifelog'は「いいえ」にになっていると仮定しましょう。そうすると、'lifelog'で検索した場合は'linkdump'も検索するのに対して、'linkdump'での検索では、'linkdump'のエントリーしか検索しません。</p>
+
+
+</div>
+
+
+<div class="page"><a name="convertbreaks" id="convertbreaks"><span class="invisible">convertbreaks</span></a>
+<h1>改行を変換する</h1>
+<p>
+Nucleusはアイテム内の改行を、デフォルトで<code>&lt;br /&gt;</code>タグに変換します。この設定によって、アイテム内の改行箇所を出力後の(X)HTMLに反映させることができます。
+</p>
+<p>
+手馴れたユーザーや、Semantic Web(<code>br</code>タグは情報を付加せず、ただ記述のためにのみ使われる)のために努力するユーザーの中には、この機能が迷惑だと感じるかもしれません。その場合はこのオプションを「いいえ」に設定してください。
+</p>
+</div>
+
+
+<div class="page"><a name="media" id="media"><span class="invisible">media</span></a>
+<h1>メディア</h1>
+<p>
+Nucleusはメディアファイル(画像、動画、音楽など)をウェブサイトにアップロードすることができます。
+</p>
+<p>
+このためにいくつかの設定が必要となります:
+</p>
+<ul>
+    <li><strong>メディア(画像・音声)ディレクトリ</strong>:メディアファイルが保存されるサーバー上の場所(サーバのファイルシステム上のパス)</li>
+    <li><strong>メディアURL</strong>:メディアファイルのURL上の場所</li>
+    <li><strong>ファイルのアップロードを許可しますか?</strong>:ファイルのアップロードを不許可にすることができます</li>
+    <li><strong>アップロードを許可するファイルタイプ</strong>:アップロードできるファイルの拡張子(複数必要な場合は、コンマで区切る)</li>
+    <li><strong>アップロードファイルの最大サイズ</strong>:ここで設定したものよりファイルサイズの大きなものはアップロードすることができません。</li>
+    <li><strong>アップロードするファイル名の頭に日付を付加する</strong>:アップロードされたファイルのファイル名の先頭に、現在の日付を付加するかどうかを選択します。このオプションで「はい」を選んでいると、例えば 'bunny.jpg'という名前のファイルを2008年9月5日にアップロードしたなら、'20080905-bunny.jpg'というファイル名になります。何故こんな機能があるかというと、大量のファイルをアップロードしているときについ同じ名前を用いてしまう問題を避けるためです。</li>
+</ul>
+
+<p>
+メンバーはそれぞれ、自身のメディアファイルのプライベートなコレクションを持ちます。また、それ以外のメディア・ディレクトリ下のサブディレクトリはグローバルなコレクション(メンバー間で共有)とみなされます。
+</p>
+
+<p>アップロードは悪用を予防するため、少なくとも一つのブログチームに入っているメンバーでなくては行えません。</p>
+</div>
+
+
+<div class="page"><a name="protectmemnames" id="protectmemnames"><span class="invisible">protectmemnames</span></a>
+<h1>メンバー名の保護</h1>
+<p>訪問者によるメンバーへの成りすましを防止するために、メンバーとして登録済みの名前を使ってのゲストコメントはできないようになっています。このオプションを「いいえ」に設定することで、この規制を緩和することができます。</p>
+</div>
+
+
+<div class="page"><a name="pluginurl" id="pluginurl"><span class="invisible">pluginurl</span></a>
+<h1>プラグインURL</h1>
+<p>この設定はプラグイン管理領域のベースURLです。通常次のようになります。</p>
+<pre>http://example.jp/nucleus/plugins/</pre>
+</div>
+
+<div class="page"><a name="skinsurl" id="skinsurl"><span class="invisible">skinsurl</span></a>
+<h1>スキンURL</h1>
+<p>この設定はNucleusスキン・ディレクトリのベースURLです。通常次のようになります。</p>
+<pre>http://example.jp/skins/</pre>
+</div>
+
+<div class="page"><a name="actionurl" id="actionurl"><span class="invisible">actionurl</span></a>
+<h1>action.phpへのフルURL</h1>
+<p>この設定はNucleus付属のスクリプト<code>action.php</code>の絶対URLです。通常次のようになります。</p>
+<pre>http://example.jp/actions.php</pre>
+</div>
+
+
+
+<div class="page"><a name="additem" id="additem"><span class="invisible">additem</span></a>
+<h1>アイテムの追加</h1>
+<p>ブログにアイテムを追加する際、「本文」「タイトル」「続き」に4種類の変数を利用することができます:</p>
+<ul>
+    <li><a href="#templatevar-popup">&lt;%popup(...)%&gt;</a> ポップアップ画像の挿入</li>
+    <li><a href="#templatevar-image">&lt;%image(...)%&gt;</a> インライン画像の挿入</li>
+    <li><a href="#templatevar-media">&lt;%media(...)%&gt;</a> メディアオブジェクトの挿入</li>
+    <li><a href="#skinvar-plugin">&lt;%plugin(...)%&gt;</a> プラグインによる処理</li>
+</ul>
+<p>&lt;%plugin%&gt;以外のこれらのタグはJavaScriptツールバーにある「メディアの追加」ボタンで書き入れられます。</p>
+
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-referer" id="skinvar-referer"><span class="invisible">skinvar-referer</span></a>
+<h1>スキン変数:referer</h1>
+<p>リンク元のURLを挿入します。アクセス方法や、ブラウザ、ファイアウォール等の設定によって、空白の時があります。</p>
+<h2>引数</h2>
+<p>なし</p>
+<h2>スキンタイプ</h2>
+<p>全て</p>
+<h2>例</h2>
+<pre>
+&lt;a href="&lt;%referer%&gt;"&gt;戻る&lt;/a&gt;
+</pre>
+</div>
+
+
+<div class="page">
+<a name="skinvar-itemid" id="skinvar-itemid"><span class="invisible">skinvar-itemid</span></a>
+<h1>スキン変数:itemid</h1>
+<p>現在選択しているアイテムのIDを挿入します。</p>
+<h2>引数</h2>
+<p>なし</p>
+<h2>スキンタイプ</h2>
+<p>個別アイテム</p>
+<h2>例</h2>
+<pre>
+&lt;%itemid%&gt;
+</pre>
+</div>
+
+
+<div class="page">
+<a name="skinvar-itemlink" id="skinvar-itemlink"><span class="invisible">skinvar-itemlink</span></a>
+
+<h1>スキン変数:itemlink</h1>
+
+<p>アイテムのURL(permanent link)を挿入します。</p>
+
+<h2>引数</h2>
+
+<div>
+<ul>
+    <li>オプション:
+        <table summary="Skin var::Item link">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="適用">適用</th>
+            </tr>
+            <tr>
+                <td><strong><em>linktext</em></strong></td>
+                <td>記述されていると、URLの代わりに<code>&lt;a href...</code>タグによるリンクが挿入されます。</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+<h2>スキンタイプ</h2>
+
+<p>個別アイテム</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%itemlink%&gt;
+</pre>
+</div>
+
+<div class="page">
+<a name="skinvar-itemtitle" id="skinvar-itemtitle"><span class="invisible">skinvar-itemtitle</span></a>
+<h1>スキン変数:itemtitle</h1>
+<p>アイテムのタイトルを挿入します。HTMLタグは除去され、エンティティはエンコードされます。</p>
+<h2>引数</h2>
+<p>なし</p>
+<h2>スキンタイプ</h2>
+<p>個別アイテム</p>
+<h2>例</h2>
+<pre>
+&lt;%itemtitle%&gt;
+</pre>
+</div>
+
+
+<div class="page">
+<a name="skinvar-archivedate" id="skinvar-archivedate"><span class="invisible">skinvar-archivedate</span></a>
+<h1>スキン変数:archivedate</h1>
+<p>アーカイブの日付としてフォーマット済みの日付を挿入します。パラメーターなしで使うと、例えばアーカイブが2008年9月のものなら、'05 september 2008'か'september 2008'のどちらかが挿入されることになります。</p>
+<h2>引数</h2>
+<ul>
+    <li>オプション:
+        <table summary="Skin var::Archive date"><tr>
+            <th abbr="名前">名前</th>
+            <th abbr="値">値</th>
+        </tr><tr>
+            <td>Locale</td>
+            <td>日付がフォーマットされるときに用いられる<a href="#templatelocale">Locale</a></td>
+        </tr><tr>
+            <td>Format</td>
+            <td>日付のフォーマット(<a href="#strftime">strftime変数</a>)</td>
+        </tr></table>
+    </li>
+</ul>
+<h2>スキンタイプ</h2>
+<p>月別アーカイブ</p>
+<h2>例</h2>
+<pre>
+Archive for &lt;%archivedate%&gt;
+Archive for &lt;%archivedate(dutch)%&gt;
+Archive for &lt;%archivedate(en,%B %Y)%&gt;
+</pre>
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-blog" id="skinvar-blog"><span class="invisible">skinvar-blog</span></a>
+<h1>スキン変数:blog</h1>
+
+<p>
+選択中のブログの、タイムスタンプの新しいアイテム群を挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Blog::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Blog::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>amount</em></strong></td>
+                <td>表示するアイテムの数(デフォルトは10)。何番目のアイテムから始めるかというオフセットを含めることもできます。例えば<code>10(5) </code>と記述すると5番目から始めて10個のアイテムを表示します。</td>
+            </tr>
+            <tr>
+                <td><strong><em>category</em></strong></td>
+                <td>表示するカテゴリーの名前</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+メインの目次、個別アイテム、月別アーカイブ、月別アーカイブ一覧、検索
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%blog(default,15)%&gt;
+&lt;%blog(default,5(15))%&gt;
+&lt;%blog(mytemplate)%&gt;
+&lt;%blog(mytemplate,5,mycategory)%&gt;
+</pre>
+
+</div>
+
+<div class="page">
+<a name="skinvar-bloglist" id="skinvar-bloglist"><span class="invisible">skinvar-bloglist</span></a>
+<h1>スキン変数:bloglist</h1>
+
+<p>
+Nucleusで管理しているブログのリストを、指定されたテンプレートを用いて挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Blog list::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Blog list::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+                <th abbr="初期値">初期値</th>
+            </tr>
+            <tr>
+                <td><strong><em>bnametype</em></strong></td>
+                <td>「shortname」を指定することで、ブログ名の変わりにブログの短縮名を挿入します</td>
+                <td>bname</td>
+            </tr>
+            <tr>
+                <td><strong><em>orderby</em></strong></td>
+                <td>並べ替えのキーを指定します。指定可能なキーは「number(ブログID)」「name(ブログ名)」「shortnameブログの短縮名)」「description(ブログの説明)」です。</td>
+                <td>number</td>
+            </tr>
+            <tr>
+                <td><strong><em>direction</em></strong></td>
+                <td><strong><em>orderby</em></strong>で指定したキーを使って「asc」で昇順、「desc」で降順に並べ替えます。</td>
+                <td>asc</td>
+            </tr>
+        </table>
+        途中の引数を省略する時は「,(カンマ)」のみ記述します。
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%bloglist(mytemplate)%&gt;
+標準。「mytemplate」を使って、ブログの一覧を「ブログ名」で表示します
+&lt;%bloglist(mytemplate,shortname)%&gt;
+「mytemplate」を使って、ブログの一覧を「ブログの短縮名」で表示します
+&lt;%bloglist(default/index,name,description)%&gt;
+「default/index」を使って、ブログの一覧を「ブログの説明」で並べ替えて「ブログ名」で表示します。
+&lt;%bloglist(default/index,shortname,,desc)%&gt;
+「default/index」を使って、ブログの一覧を「ブログ名」の降順で並べ替えて「ブログ短縮名」で表示します。
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-otherblog" id="skinvar-otherblog"><span class="invisible">skinvar-otherblog</span></a>
+<h1>スキン変数:otherblog</h1>
+
+<p>
+指定されたブログの、タイムスタンプの新しいアイテム群を挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Other blog::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>blogname</strong></td>
+                <td>表示するブログの短縮名</td>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Other blog::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>amount</em></strong></td>
+                <td>表示するアイテムの数(デフォルトは10)。何番目のアイテムから始めるかというオフセットを含めることもできます。例えば<code>10(5) </code>と記述すると5番目から始めて10個のアイテムを表示します。</td>
+            </tr>
+            <tr>
+                <td><strong><em>category</em></strong></td>
+                <td>表示するカテゴリーの名前</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%otherblog(myblog,default,15)%&gt;
+&lt;%otherblog(yourblog,mytemplate)%&gt;
+&lt;%otherblog(yourblog,mytemplate,15,mycategory)%&gt;
+&lt;%otherblog(yourblog,mytemplate,5(15),mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-item" id="skinvar-item"><span class="invisible">skinvar-item</span></a>
+<h1>スキン変数:item</h1>
+
+<p>
+現在選択されているアイテムを、指定されたテンプレートを用いて挿入します(コメントは挿入されません)。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Item::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+個別アイテム
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%item(mytemplate)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-comments" id="skinvar-comments"><span class="invisible">skinvar-comments</span></a>
+<h1>スキン変数:comments</h1>
+
+<p>
+現在選択されているアイテムについているコメントを、指定されたテンプレートを用いて挿入します。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Comments::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+個別アイテム
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%comments(mytemplate)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-archive" id="skinvar-archive"><span class="invisible">skinvar-archive</span></a>
+<h1>スキン変数:archive</h1>
+
+<p>
+選択されているブログの選択された月のアーカイブを、指定されたテンプレートを用いて表示。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Archive::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション:
+        <table summary="Skin var::Archive::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>category</em></strong></td>
+                <td>表示するカテゴリー名</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+月別アーカイブ
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%archive(mytemplate)%&gt;
+&lt;%archive(mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-otherarchive" id="skinvar-otherarchive"><span class="invisible">skinvar-otherarchive</span></a>
+<h1>スキン変数:otherarchive</h1>
+
+<p>
+指定されたブログの選択された月のアーカイブを、指定されたテンプレートを用いて表示。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Other archive::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>blogname</strong></td>
+                <td>表示するブログの短縮名</td>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Other archive::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>category</em></strong></td>
+                <td>表示するカテゴリーの名前</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+月別アーカイブ
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%otherarchive(myblog,mytemplate)%&gt;
+&lt;%otherarchive(myblog,mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-archivelist" id="skinvar-archivelist"><span class="invisible">skinvar-archivelist</span></a>
+<h1>スキン変数:archivelist</h1>
+
+<p>
+現在選択しているブログに存在するアーカイブの月ごとのリストを、指定されたテンプレートを使って挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Archive list::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Archive list::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>category</em></strong></td>
+                <td>表示するカテゴリーの名前</td>
+            </tr>
+            <tr>
+                <td><strong><em>limit</em></strong></td>
+                <td>表示するリンク数の制限(例えば、過去3ヶ月分へのリンクしか表示させたくないときなど)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%archivelist(mytemplate)%&gt;
+&lt;%archivelist(mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+<div class="page">
+<a name="skinvar-archivedaylist" id="skinvar-archivedaylist"><span class="invisible">skinvar-archivedaylist</span></a>
+<h1>スキン変数:archivedaylist</h1>
+
+<p>
+スキン変数<a href="#skinvar-archivelist">archivelist</a>と同様にアーカイブのリストを挿入しますが、<em>月</em>ごとの代わりに<em>日</em>ごとのアーカイブのリストを挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Archive Day list::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Archive Day list::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>category</em></strong></td>
+                <td>表示するカテゴリーの名前</td>
+            </tr>
+            <tr>
+                <td><strong><em>limit</em></strong></td>
+                <td>表示するリンク数の制限(例えば、過去3日分へのリンクしか表示させたくないときなど)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム
+</p>
+
+
+<h2>例</h2>
+
+<pre>
+&lt;%archivedaylist(mytemplate)%&gt;
+&lt;%archivedaylist(mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-otherarchivedaylist" id="skinvar-otherarchivedaylist"><span class="invisible">skinvar-otherarchivedaylist</span></a>
+<h1>スキン変数:otherarchivedaylist</h1>
+
+<p>
+スキン変数<a href="#skinvar-otherarchivelist">otherarchivelist</a>と同様に、指定されたブログのアーカイブのリストを挿入しますが、 <em>月</em>ごとの代わりに<em>日</em>ごとのアーカイブを挿入します。
+
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Other archive day list::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>blogname</strong></td>
+                <td>表示するブログの短縮名</td>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Other archive day list::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>category</em></strong></td>
+                <td>表示するカテゴリーの名前</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%otherarchivedaylist(yourblog,mytemplate)%&gt;
+&lt;%otherarchivedaylist(yourblog,mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-otherarchivelist" id="skinvar-otherarchivelist"><span class="invisible">skinvar-otherarchivelist</span></a>
+<h1>スキン変数:otherarchivelist</h1>
+
+<p>
+指定されたブログに存在するアーカイブ月ごとのリストを、指定されたテンプレートを用いて表示します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Other archive list::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>blogname</strong></td>
+                <td>表示するブログの短縮名</td>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Other archive list::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>category</em></strong></td>
+                <td>表示するカテゴリーの名前</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%otherarchivelist(yourblog,mytemplate)%&gt;
+&lt;%otherarchivelist(yourblog,mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-archiveyearlist" id="skinvar-archiveyearlist"><span class="invisible">skinvar-archiveyearlist</span></a>
+<h1>スキン変数:archiveyearlist</h1>
+
+<p>スキン変数<a href="#skinvar-archivelist">archivelist</a>と同様にアーカイブのリストを挿入しますが、<em>月</em>ごとの代わりに<em>年</em>ごとのアーカイブのリストを挿入します。</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Archive Day list::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Archive Day list::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>category</em></strong></td>
+                <td>表示するカテゴリーの名前</td>
+            </tr>
+            <tr>
+                <td><strong><em>limit</em></strong></td>
+                <td>表示するリンク数の制限(例えば、過去3年分へのリンクしか表示させたくないときなど)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+<p>メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム</p>
+
+<h2>例</h2>
+<pre>
+&lt;%archiveyearlist(mytemplate)%&gt;
+&lt;%archiveyearlist(mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-otherarchiveyearlist" id="skinvar-otherarchiveyearlist"><span class="invisible">skinvar-otherarchiveyearlist</span></a>
+<h1>スキン変数:otherarchiveyearlist</h1>
+
+<p>
+スキン変数<a href="#skinvar-otherarchivelist">otherarchivelist</a>と同様に、指定されたブログのアーカイブのリストを挿入しますが、 <em>月</em>ごとの代わりに<em>年</em>ごとのアーカイブを挿入します。
+
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Other archive day list::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>blogname</strong></td>
+                <td>表示するブログの短縮名</td>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Other archive day list::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>category</em></strong></td>
+                <td>表示するカテゴリーの名前</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%otherarchiveyearlist(yourblog,mytemplate)%&gt;
+&lt;%otherarchiveyearlist(yourblog,mytemplate,mycategory)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-categorylist" id="skinvar-categorylist"><span class="invisible">skinvar-categorylist</span></a>
+<h1>スキン変数:categorylist</h1>
+
+<p>
+選択中のブログのカテゴリーリストを、指定されたテンプレートを用いて挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Category list::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Category list::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>blogname</em></strong></td>
+                <td>表示するブログの短縮名</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%categorylist(mytemplate)%&gt;
+&lt;%categorylist(mytemplate,myweblog)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-category" id="skinvar-category"><span class="invisible">skinvar-category</span></a>
+<h1>スキン変数:category</h1>
+
+<p>
+現在選択されているカテゴリーに関する情報を挿入します。カテゴリーが選択されていないときは何も挿入されません。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>オプション
+        <table summary="Skin var::Category::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="挿入される設定">挿入される設定</th>
+            </tr>
+            <tr>
+                <td><em>name</em></td>
+                <td>カテゴリー名(デフォルト)</td>
+            </tr>
+            <tr>
+                <td><em>desc</em></td>
+                <td>カテゴリーの説明L</td>
+            </tr>
+            <tr>
+                <td><em>id</em></td>
+                <td>カテゴリーのID</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%category%&gt;
+&lt;%category(id)%&gt;
+&lt;%category(desc)%&gt;
+&lt;%category(name)%&gt;
+</pre>
+
+</div>
+
+
+<!-- div class="page">
+<a name="skinvar-ifcat" id="skinvar-ifcat"><span class="invisible">skinvar-ifcat</span></a>
+<h1>スキン変数:ifcat</h1>
+
+<p class="deprecated">バージョン2.0以降のNucleusでは使用できません。<a href="#skinvar-if">&lt;%if(category)%&gt;</a>を代わりに使ってください。</p>
+
+<h2>引数</h2>
+<div>
+    なし
+    <ul>
+        <li><em>text</em>:表示するテキスト</li>
+    </ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%ifcat(Current Category: )%&gt;&lt;%category%&gt;
+</pre>
+
+</div -->
+
+
+
+
+<div class="page">
+<a name="skinvar-searchresults" id="skinvar-searchresults"><span class="invisible">skinvar-searchresults</span></a>
+<h1>スキン変数:searchresults</h1>
+
+<p>
+現在の検索文字列に対する検索結果を、指定されたテンプレートを使用して挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Search results::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Search resulta::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>maxresults</em></strong></td>
+                <td>表示する結果の最大数</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+検索
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%searchresults(mytemplate)%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-othersearchresults" id="skinvar-othersearchresults"><span class="invisible">skinvar-othersearchresults</span></a>
+<h1>スキン変数:othersearchresults</h1>
+
+<p>
+指定されたブログの、現在の検索文字列に対する検索結果を、指定されたテンプレートを使用して挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Other sezrch results::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>blogname</strong></td>
+                <td>ブログの短縮名</td>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+    <li>オプション
+        <table summary="Skin var::Other search results::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>maxresults</em></strong></td>
+                <td>表示する結果の最大数</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+検索
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%othersearchresults(myblog,mytemplate)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-query" id="skinvar-query"><span class="invisible">skinvar-query</span></a>
+<h1>スキン変数:query</h1>
+
+<p>
+現在の検索文字列を挿入します。
+</p>
+
+<h2>引数</h2>
+<p>
+なし
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+検索
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%query%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-version" id="skinvar-version"><span class="invisible">skinvar-version</span></a>
+<h1>スキン変数:version</h1>
+
+<p>現在使用しているNucleusのバージョンを挿入します。</p>
+
+<h2>引数</h2>
+
+<p>
+なし
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%version%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-charset" id="skinvar-charset"><span class="invisible">skinvar-charset</span></a>
+<h1>スキン変数:charset</h1>
+
+<p>グローバル設定の既定の言語で設定した言語に基づいたキャラクターセットのコードを挿入します。日本語版では、'UTF-8'か、'EUC-JP'の何れかになります</p>
+
+<h2>引数</h2>
+
+<p>
+なし
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;meta http-equiv="Content-Type" content="text/html; charset=&lt;%charset%&gt;" /&gt;
+</pre>
+
+</div>
+
+
+
+
+
+<div class="page">
+<a name="skinvar-previtem" id="skinvar-previtem"><span class="invisible">skinvar-previtem</span></a>
+<h1>スキン変数:previtem</h1>
+
+<p>
+そのブログにおける一つ古いアイテムのIDを挿入します。
+</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+個別アイテム
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%previtem%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-nextitem" id="skinvar-nextitem"><span class="invisible">skinvar-nextitem</span></a>
+<h1>スキン変数:nextitem</h1>
+
+<p>
+そのブログにおける一つ新しいアイテムのIDを挿入します
+。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+個別アイテム
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%nextitem%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-nextitemtitle" id="skinvar-nextitemtitle"><span class="invisible">skinvar-nextitemtitle</span></a>
+<h1>スキン変数:nextitemtitle</h1>
+
+<p>
+そのブログにおける一つ新しいアイテムのタイトルを挿入します。
+</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+個別アイテム
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%nextitemtitle%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-previtemtitle" id="skinvar-previtemtitle"><span class="invisible">skinvar-previtemtitle</span></a>
+<h1>スキン変数:previtemtitle</h1>
+
+<p>
+そのブログにおける一つ古いアイテムのタイトルを挿入します。
+</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+個別アイテム
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%previtemtitle%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-prevarchive" id="skinvar-prevarchive"><span class="invisible">skinvar-prevarchive</span></a>
+<h1>スキン変数:prevarchive</h1>
+
+<p>
+表示中のアーカイブの形式に応じて、一つ古いアーカイブの月、または日を挿入します。
+</p>
+
+<table summary="Skin var::Prev archive">
+    <tr>
+        <th abbr="表示中の形式">表示中の形式</th>
+        <th abbr="挿入される日付のフォーマット">挿入される日付のフォーマット</th>
+    </tr>
+    <tr>
+        <td>日単位で表示している時</td>
+        <td><code>YYYY-MM-DD</code></td>
+    </tr>
+    <tr>
+        <td>月単位で表示している時</td>
+        <td><code>YYYY-MM</code></td>
+    </tr>
+</table>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+月別アーカイブ
+</p>
+
+<h2>例</h2>
+
+<pre><code>&lt;a href="index.php?archive=&lt;%prevarchive%&gt;"&gt;....</code></pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-nextarchive" id="skinvar-nextarchive"><span class="invisible">skinvar-nextarchive</span></a>
+<h1>スキン変数:nextarchive</h1>
+
+<p>
+表示中のアーカイブの形式に応じて、一つ新しいアーカイブの月、または日を挿入します。
+</p>
+
+<table summary="Skin var::Next archive">
+    <tr>
+        <th abbr="表示中の形式">表示中の形式</th>
+        <th abbr="挿入される日付のフォーマット">挿入される日付のフォーマット</th>
+    </tr>
+    <tr>
+        <td>日単位で表示している時</td>
+        <td><code>YYYY-MM-DD</code></td>
+    </tr>
+    <tr>
+        <td>月単位で表示している時</td>
+        <td><code>YYYY-MM</code></td>
+    </tr>
+</table>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+月別アーカイブ
+</p>
+
+<h2>例</h2>
+
+<pre><code>&lt;a href="index.php?archive=&lt;%nextarchive%&gt;"&gt;....</code></pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-archivetype" id="skinvar-archivetype"><span class="invisible">skinvar-archivetype</span></a>
+<h1>スキン変数:archivetype</h1>
+
+<p>
+<code>日単位</code>か<code>月単位</code>、どちらのアーカイブタイプが現在表示されているのか示す。
+</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+月別アーカイブ
+</p>
+
+</div>
+
+
+
+
+
+<div class="page">
+<a name="skinvar-todaylink" id="skinvar-todaylink"><span class="invisible">skinvar-todaylink</span></a>
+<h1>スキン変数:todaylink</h1>
+
+<p>
+選択中のブログ、あるいはカテゴリーのトップページのURLを挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+
+<ul>
+    <li>オプション
+        <table summary="Skin var::Today link::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>linktext</em></strong></td>
+                <td>記述されていると、URLの代わりに<code>&lt;a href...</code>タグによるリンクが挿入されます。</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%todaylink%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-archivelink" id="skinvar-archivelink"><span class="invisible">skinvar-archivelink</span></a>
+<h1>スキン変数:archivelink</h1>
+
+<p>
+選択中のブログ、あるいはカテゴリーのアーカイブへのリンクを挿入します。
+</p>
+
+<h2>引数</h2>
+
+<div>
+
+<ul>
+    <li>オプション
+        <table summary="Skin var::Archive link::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>linktext</em></strong></td>
+                <td>記述されていると、URLの代わりに<code>&lt;a href...</code>タグによるリンクが挿入されます。</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%archivelink%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-nextlink" id="skinvar-nextlink"><span class="invisible">skinvar-nextlink</span></a>
+<h1>スキン変数:nextlink</h1>
+
+<p>
+アイテムページでは一つ新しいアイテムへの、アーカイブページでは一つ新しいアーカイブへのURLを挿入します。「検索ページ」と「メインの目次ページ」でも使えます。「検索ページ」と「メインの目次ページ」で使用したときは、「次のページ」へのURLを挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>オプション
+        <table summary="Skin var::Next link::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>linktext</em></strong></td>
+                <td>記述されていると、URLの代わりに<code>&lt;a href...</code>タグによるリンクが挿入されます。</td>
+            </tr>
+            <tr>
+                <td><strong><em>amount</em></strong></td>
+                <td>「検索ページ」と「メインの目次ページ」で使用したときに、前または次のページに進んだときに表示されるアイテムの数</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+
+<h2>スキンタイプ</h2>
+
+<p>
+個別アイテム、月別アーカイブ、検索、メインの目次
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%nextlink%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-prevlink" id="skinvar-prevlink"><span class="invisible">skinvar-prevlink</span></a>
+<h1>スキン変数:prevlink</h1>
+
+<p>
+アイテムページでは一つ古いアイテムへの、アーカイブページでは一つ古いアーカイブへのURLを挿入します。「検索」と「メインの目次」でも使えます。「検索ページ」と「メインの目次ページ」で使用したときは、「次のページ」へのURLを挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>オプション
+        <table summary="Skin var::Prev link::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>linktext</em></strong></td>
+                <td>記述されていると、URLの代わりに<code>&lt;a href...</code>タグによるリンクが挿入されます。</td>
+            </tr>
+            <tr>
+                <td><strong><em>amount</em></strong></td>
+                <td>「検索ページ」と「メインの目次ページ」で使用したときに、前または次のページに進んだときに表示されるアイテムの数</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+個別アイテム、月別アーカイブ、検索、メインの目次
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%prevlink%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-errormessage" id="skinvar-errormessage"><span class="invisible">skinvar-errormessage</span></a>
+<h1>スキン変数:errormessage</h1>
+
+<p>
+エラーが発生したときにエラーメッセージを挿入します。
+</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+エラー
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%errormessage%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+
+<!-- div class="page">
+<a name="skinvar-imagetext" id="skinvar-imagetext"><span class="invisible">skinvar-imagetext</span></a>
+<h1>スキン変数:imagetext</h1>
+
+<p class="deprecated">このスキン変数はNucleusバージョン2.0以降使いません。代わりに<a href="#skinvar-image"><code>&lt;%image(caption)%&gt;</code></a>を使ってください。</p>
+
+<p>
+ポップアップ画像に見出しテキストをつける
+</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+画像ポップアップウィンドウ
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%imagetext%&gt;
+</pre>
+
+</div -->
+
+
+
+<div class="page">
+<a name="skinvar-image" id="skinvar-image"><span class="invisible">skinvar-image</span></a>
+<h1>スキン変数:image</h1>
+
+<p>
+選択された画像を挿入します(画像ポップアップ用)。
+</p>
+
+<h2>引数</h2>
+
+<ul>
+    <li>オプション
+        <table summary="Skin var::Image::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>imgtag</strong>(デフォルト)</td>
+                <td>(x)htmlの<em>img</em>タグ <code>&lt;img ... /&gt;</code></td>
+            </tr>
+            <tr>
+                <td><strong>url</strong></td>
+                <td>画像ファイルへのURL</td>
+            </tr>
+            <tr>
+                <td><strong>width</strong></td>
+                <td>イメージの幅</td>
+            </tr>
+            <tr>
+                <td><strong>height</strong></td>
+                <td>イメージの高さ</td>
+            </tr>
+            <tr>
+                <td><strong>caption</strong></td>
+                <td>画像の見出し(画像と共に表示されるテキスト)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+画像ポップアップウィンドウ
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%image%&gt;
+</pre>
+
+</div>
+
+
+<!-- div class="page">
+<a name="skinvar-vars" id="skinvar-vars"><span class="invisible">skinvar-vars</span></a>
+<h1>スキン変数:vars</h1>
+
+<p class="deprecated">このスキン変数はNucleusバージョン2.0以降使いません。<a href="#skinvar-itemid">スキン変数:itemid</a>を使ってこのHTMLをあなた自身で挿入することはたいした手間ではないでしょう。</p>
+
+<p>
+itemid入りの隠しフォームのインプット欄を挿入。
+</p>
+
+<code>&lt;input type="hidden" name="itemid" value="<strong>1234</strong>" /&gt;</code>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+個別アイテム
+</p>
+
+
+</div -->
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-sitevar" id="skinvar-sitevar"><span class="invisible">skinvar-sitevar</span></a>
+<h1>スキン変数:sitevar</h1>
+
+<p>
+「グローバル設定」でのサイトの設定を挿入します。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Site var::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="挿入される設定">挿入される設定</th>
+            </tr>
+            <tr>
+                <td><em>url</em></td>
+                <td>サイトのURL</td>
+            </tr>
+            <tr>
+                <td><em>name</em></td>
+                <td>サイトの名前</td>
+            </tr>
+            <tr>
+                <td><em>admin</em></td>
+                <td>管理者のメールアドレス</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%sitevar(name)%&gt;
+&lt;%sitevar(url)%&gt;
+&lt;a href="mailto:&lt;%sitevar(email)%&gt;"&gt;管理人&lt;/a&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-blogsetting" id="skinvar-blogsetting"><span class="invisible">skinvar-blogsetting</span></a>
+<h1>スキン変数:blogsetting</h1>
+
+<p>
+選択中のブログの設定を挿入します。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Blog setting::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="挿入される設定">挿入される設定</th>
+            </tr>
+            <tr>
+                <td><em>id</em></td>
+                <td>ブログのID</td>
+            </tr>
+            <tr>
+                <td><em>url</em></td>
+                <td>ブログのURL</td>
+            </tr>
+            <tr>
+                <td><em>name</em></td>
+                <td>ブログの名前</td>
+            </tr>
+            <tr>
+                <td><em>desc</em></td>
+                <td>ブログの説明</td>
+            </tr>
+            <tr>
+                <td><em>short</em></td>
+                <td>ブログの短縮名</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム、メンバー詳細
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%blogsetting(name)%&gt;
+&lt;%blogsetting(id)%&gt;
+&lt;%blogsetting(desc)%&gt;
+&lt;a href="&lt;%blogsetting(url)%&gt;"&gt;...&lt;/a&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-member" id="skinvar-member"><span class="invisible">skinvar-member</span></a>
+<h1>スキン変数:member</h1>
+
+<p>
+訪問者がログイン中のメンバーの場合、そのメンバーに関する情報を挿入します。メンバーの詳細ページにおいては、指定されたメンバーについての同じ情報を表示する追加オプションがあります。
+</p>
+
+<p>訪問者がログイン中のメンバーではない場合は、<em>your...</em>のパラメーターは何も挿入しません。</p>
+
+<h2>引数</h2>
+<ul>
+<li>必須:
+<ul>
+    <li>ログインしたメンバーの情報(全てのスキンタイプで使用可能):
+        <table summary="Skin var::Member logged in::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="挿入される設定">挿入される設定</th>
+            </tr>
+            <tr>
+                <td><em>yourname</em></td>
+                <td>訪問メンバーの<a href="#shortnames">表示される名前</a>(ログインID)</td>
+            </tr>
+            <tr>
+                <td><em>yourrealname</em></td>
+                <td>訪問メンバーのハンドルネーム(本名)</td>
+            </tr>
+            <tr>
+                <td><em>yournotes</em></td>
+                <td>訪問メンバーが自身のために設定できるその他の情報(備考欄)</td>
+            </tr>
+            <tr>
+                <td><em>yoururl</em></td>
+                <td>訪問メンバーのウェブサイトURL</td>
+            </tr>
+            <tr>
+                <td><em>youremail</em></td>
+                <td>訪問メンバーのメールアドレス</td>
+            </tr>
+            <tr>
+                <td><em>yourid</em></td>
+                <td>訪問メンバーのID</td>
+            </tr>
+        </table>
+    </li>
+    <li>指定されたメンバーの情報(「メンバーの詳細ページ」でのみ使用可能):
+        <table summary="Skin var::Member requier::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="挿入される設定">挿入される設定</th>
+            </tr>
+            <tr>
+                <td><em>name</em></td>
+                <td>指定されたメンバーの<a href="#shortnames">表示される名前</a>(ログインID)</td>
+            </tr>
+            <tr>
+                <td><em>realname</em></td>
+                <td>指定されたメンバーのハンドルネーム(本名)</td>
+            </tr>
+            <tr>
+                <td><em>notes</em></td>
+                <td>指定されたメンバーが自身のために設定できるその他の情報(備考欄)</td>
+            </tr>
+            <tr>
+                <td><em>url</em></td>
+                <td>指定されたメンバーのウェブサイトURL</td>
+            </tr>
+            <tr>
+                <td><em>email</em></td>
+                <td>指定されたメンバーのメールアドレス</td>
+            </tr>
+            <tr>
+                <td><em>id</em></td>
+                <td>指定されたメンバーのID</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre><code>
+&lt;%if(loggedin)%&gt;
+こんにちは&lt;%member(yourrealname)%&gt;さん
+&lt;%endif%&gt;
+</code></pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-preview" id="skinvar-preview"><span class="invisible">skinvar-preview</span></a>
+<h1>スキン変数:preview</h1>
+
+<p>
+指定されたテンプレートを用いて、ページ内にアイテムのプレビューを挿入します。(<a href="#skinvar-additemform">additemform</a>と一緒に使われることが多いようです)
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Preview::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>使用するテンプレート名</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+メインの目次
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%preview(mytemplate)%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-adminurl" id="skinvar-adminurl"><span class="invisible">skinvar-adminurl</span></a>
+<h1>スキン変数:adminurl</h1>
+
+<p>管理領域のURLを挿入します。</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;a href="&lt;%adminurl%&gt;"&gt;管理領域&lt;/a&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-additemform" id="skinvar-additemform"><span class="invisible">skinvar-additemform</span></a>
+<h1>スキン変数:additemform</h1>
+
+<p>
+現在選択しているブログへのアイテムの追加フォームを挿入します。多くの場合、<a href="#skinvar-preview">preview</a>と共に使用されます。
+</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+メインの目次
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%additemform%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-include" id="skinvar-include"><span class="invisible">skinvar-include</span></a>
+<h1>スキン/テンプレート変数:include</h1>
+
+<p>
+Webページ出力時に、指定されたテキストファイルを取り込んで挿入します。ファイルの中身がそのまま出力されるので、スキン/テンプレート変数やPHPコードを使っても反映されません。同じような変数に、取り込み時にスキン/テンプレート変数を展開する<a href="#skinvar-parsedinclude">parsedinclude</a>や、PHPコードを実行する<a href="#skinvar-phpinclude">phpinclude</a>があります。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Skin var::include::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>filename</strong></td>
+                <td>取り込むファイルの名前(index.phpからの相対位置でも絶対位置でもかまいません。URLを指定することもできます)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>注意</h2>
+<ul>
+    <li>この変数は<a href="#parser-properties">パーサー設定の<code>IncludeMode</code> と<code>IncludePrefix</code></a>に影響を受けます。</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%include(filename.txt)%&gt;
+&lt;%include(/home/user/myself/filename.txt)%&gt;
+&lt;%include(http://example.jp/filename.html)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-phpinclude" id="skinvar-phpinclude"><span class="invisible">skinvar-phpinclude</span></a>
+<h1>スキン/テンプレート変数:phpinclude</h1>
+
+<p>
+Webページ出力時に、指定されたPHPファイルを実行し、その結果を挿入します。ファイルの中身はPHPとして解釈され、実行されるので注意が必要です。また、Nucleusのスキン/テンプレート変数は展開<strong>されません</strong>。同じような変数に、取り込み時にスキン/テンプレート変数を展開する<a href="#skinvar-parsedinclude">parsedinclude</a>や、ファイルの中身をそのまま表示する<a href="#skinvar-include">include</a>があります。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Php include::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>filename</strong></td>
+                <td>取り込むファイルの名前(index.phpからの相対位置でも絶対位置でもかまいません。)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>注意</h2>
+<ul>
+    <li>この変数は<a href="#parser-properties">パーサー設定の<code>IncludeMode</code> と<code>IncludePrefix</code></a>に影響を受けます。</li>
+    <li>ファイルはphpのコマンド<code>include()</code>を使ってインクルードされます。このコマンドは<em>内部の</em>クラス・メソッドから呼び出されるので、Nucleus内部やプラグインで使用されているグローバル変数にアクセスしたい時は、<strong>自身でグローバル変数を宣言する必要があります</strong>。多くの<a href="#skinvar-phpinclude-vars">標準的な変数</a>はNucleusによって自動的にグローバルが宣言されます。</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre><code>&lt;%phpinclude(filename.php)%&gt;
+&lt;%phpinclude(/home/user/myself/filename.php)%&gt;</code></pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-phpinclude-vars" id="skinvar-phpinclude-vars"><span class="invisible">skinvar-phpinclude-vars</span></a>
+<h1>スキン/テンプレート変数:phpinclude:vars</h1>
+
+<p>
+次のグローバル変数は、スキン/テンプレート変数の<a href="#skinvar-phpinclude">phpinclude</a>によってインクルードされたファイルからアクセスできるものです:
+</p>
+
+<p>
+$GATEWAY_INTERFACE, $SERVER_NAME, $SERVER_SOFTWARE
+<br />$SERVER_PROTOCOL, $REQUEST_METHOD, $QUERY_STRING
+<br />$DOCUMENT_ROOT, $HTTP_ACCEPT, $HTTP_ACCEPT_CHARSET
+<br />$HTTP_ACCEPT_ENCODING, $HTTP_ACCEPT_LANGUAGE
+<br />$HTTP_CONNECTION, $HTTP_HOST, $HTTP_REFERER
+<br />$HTTP_USER_AGENT, $REMOTE_ADDR, $REMOTE_PORT
+<br />$SCRIPT_FILENAME, $SERVER_ADMIN, $SERVER_PORT
+<br />$SERVER_SIGNATURE, $PATH_TRANSLATED, $SCRIPT_NAME
+<br />$REQUEST_URI, $argv, $argc, $PHP_SELF
+<br />$HTTP_COOKIE_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS
+<br />$HTTP_POST_FILES, $HTTP_ENV_VARS, $HTTP_SERVER_VARS
+<br />$HTTP_SESSION_VARS, $PATH_INFO, $HTTPS
+<br />$HTTP_RAW_POST_DATA, $HTTP_X_FORWARDED_FOR
+</p>
+
+<p>
+他の変数に関しては、'<code>global $varname;</code>'をきっちりとコードに加える必要があります。
+</p>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-parsedinclude" id="skinvar-parsedinclude"><span class="invisible">skinvar-parsedinclude</span></a>
+<h1>スキン/テンプレート変数:parsedinclude</h1>
+
+<p>
+Webページ出力時に、指定されたスペシャルスキンもしくはファイルを取り込んで挿入します。スペシャルスキンが優先されます。このファイルのは、取り込み時にNucleusのスキン/テンプレートによる構文解析にかけられるので、スキン/テンプレート変数が使用できます。同じような変数に、取り込んだファイルのPHPを実行する<a href="#skinvar-phpinclude">phpinclude</a>や、ファイルの中身をそのまま表示する<a href="#skinvar-include">include</a>があります。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Skin var::Parsed include::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>filename</strong></td>
+                <td>取り込むスペシャルスキンもしくはファイルの名前(index.phpからの相対位置でも絶対位置でもかまいません。URLを指定することもできます)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+
+<h2>注意</h2>
+<ul>
+    <li>この変数は<a href="#parser-properties">パーサー設定の<code>IncludeMode</code> と<code>IncludePrefix</code></a>に影響を受けます。</li>
+    <li>インクルードしたパーツの中からでも、再び<code>&lt;%parsedinclude (filename)%&gt;</code>を呼び出すことができますが、無限ループを避けるために最大で3段階までとなります。</li>
+</ul>
+
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%parsedinclude(specialskinname)%&gt;
+&lt;%parsedinclude(filename.txt)%&gt;
+&lt;%parsedinclude(/home/user/myself/filename.txt)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-plugin" id="skinvar-plugin"><span class="invisible">skinvar-plugin</span></a>
+<h1>スキン/テンプレート変数:plugin</h1>
+
+<p>
+プラグインを呼び出します。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Skin/Template var::Plugin::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>PluginName</strong></td>
+                <td>呼び出されるプラグインの名前。<strong>大文字小文字が区別されるので注意が必要です。</strong></td>
+            </tr>
+        </table>
+    </li>
+    <li><p>この他、プラグインごとに引数が定義・追加されます。</p></li>
+</ul>
+
+<h2>注意</h2>
+<ul>
+    <li>プラグイン名が既存の変数とぶつからない場合、<code>&lt;%PluginName (parameters)%&gt;</code>と記述することで、プラグインを直接呼び出すこともできます。現在はそのようにプラグイン名で呼び出す方法が主流ですが、プラグイン呼び出しであることをあえて明示したい場合は<code>&lt;%plugin(parameters)%&gt;</code>のほうを利用するといいでしょう。</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%plugin(Calendar)%&gt;
+&lt;%plugin(LastComments,myweblog)%&gt;
+&lt;%LastComments(myweblog)%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-loginform" id="skinvar-loginform"><span class="invisible">skinvar-loginform</span></a>
+<h1>スキン変数:loginform</h1>
+
+<p>ログインフォームまたは、ログイン中メッセージ("ログイン中:ketsunet (ログアウト)")を挿入します</p>
+
+<h2>引数</h2>
+<p>
+    なし
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>全て</p>
+
+<h2>例</h2>
+
+<pre><code>&lt;%loginform%&gt;</code></pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-commentform" id="skinvar-commentform"><span class="invisible">skinvar-commentform</span></a>
+<h1>スキン変数:commentform</h1>
+
+<p>
+アイテムページにコメントフォームを挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>オプション:
+        <table summary="Skin var::Comment form::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>destinationurl</em></strong></td>
+                <td>コメント追加後にリダイレクトさせるURL(デフォルトでは、投稿したアイテムの「個別アイテムページ」にリダイレクトされます)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+</div>
+
+
+<h2>スキンタイプ</h2>
+
+<p>
+個別アイテム
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%commentform%&gt;
+&lt;%commentform(http://example.jp/thanks.html)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-set" id="skinvar-set"><span class="invisible">skinvar-set</span></a>
+<h1>スキン/テンプレート変数 set</h1>
+
+<p>
+<a href="#parser-properties" title="A list of available parser properties">パーサーのプロパティ</a>を設定します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin/Template var::Set::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>property</strong></td>
+                <td>プロパティの名前</td>
+            </tr>
+            <tr>
+                <td><strong>value</strong></td>
+                <td>プロパティの値</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%set(IncludeMode,skindir)%&gt;
+&lt;%set(IncludePrefix,somedir/)%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-skinfile" id="skinvar-skinfile"><span class="invisible">skinvar-skinfile</span></a>
+<h1>スキン/テンプレート変数:skinfile</h1>
+
+<p>表示に使用中のスキンのあるディレクトリにリンクを張る時に使用します。<a href="#parser-properties">パーサーのプロパティ</a><code>IncludePrefix</code>と共に使用することで、最良の結果を得ることができます。</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>必須:
+        <table summary="Skin/Template var::Skin file::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>filename</strong></td>
+                <td>ファイルの名前(「http://~」から始まるURLに変換されます)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%skinfile(mystyle.css)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-skinname" id="skinvar-skinname"><span class="invisible">skinvar-skinname</span></a>
+<h1>スキン/テンプレート変数:skinname</h1>
+
+<p>現在使用しているスキンの名前を挿入します。</p>
+
+<h2>引数</h2>
+<p>
+なし
+</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%skinname%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="skinvar-if" id="skinvar-if"><span class="invisible">skinvar-if</span></a>
+<a name="skinvar-else" id="skinvar-else"><span class="invisible">skinvar-else</span></a>
+<a name="skinvar-endif" id="skinvar-endif"><span class="invisible">skinvar-endif</span></a>
+<a name="skinvar-ifnot" id="skinvar-ifnot"><span class="invisible">skinvar-ifnot</span></a>
+<a name="skinvar-elseif" id="skinvar-elseif"><span class="invisible">skinvar-elseif</span></a>
+<a name="skinvar-elseifnot" id="skinvar-elseifnot"><span class="invisible">skinvar-elseifnot</span></a>
+<h1>スキン変数:if/ifnot/else/elseif/elseifnot/endif</h1>
+
+<p>決まった条件を満たしているときにのみ、コンテンツ・ブロックを挿入。</p>
+
+<h2>引数</h2>
+<p>スキン変数<code>if/ifnot/elseif/elseifnot</code>に対してのみ、引数が必須になります</p>
+
+
+<ul>
+    <li>必須:
+        <table summary="Skin var::if::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th colspan="3" abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>type</strong></td>
+                <td colspan="3"><a href="#if_condition">条件の種類</a></td>
+            </tr>
+            <tr>
+                <td colspan="4">typeによって、以下のオプションをとることがあります</td>
+            </tr>
+            <tr>
+                <td></td>
+                <td><em>name</em></td>
+                <td>条件の名前</td>
+            </tr>
+            <tr>
+                <td></td>
+                <td><em>value</em></td>
+                <td>条件の名前の値</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>条件の種類</h2>
+
+<ul>
+    <li><strong>category</strong>:カテゴリーを選択しているとき、条件は満たされる
+        <ul>
+          <li><strong>category</strong>:カテゴリが選択されているか調べる</li>
+          <li><strong>category,catname,<em>CategoryName</em> </strong>:現在のカテゴリが <em>CategoryName</em> と一致するか調べる</li>
+          <li><strong>category,catid,<em>CategoryID</em></strong>:現在のカテゴリのIDが <em>CategoryId</em> と一致するか調べる</li>
+        </ul>
+    </li>
+    <li><strong>blogsetting</strong>:Blog設定の<em> name</em>項目の値が<em>value</em>と一致しているか調べる(nameはSQLテーブル nucleus_blogにあるカラム名)</li>
+    <li><strong>loggedin</strong>:訪問中のメンバーが現在ログインしていれば、条件は満たされる</li>
+    <li><strong>onteam</strong>:訪問中のメンバーがログインしており、かつ現在いるブログ(あるいは<em>name</em>パラメーターで指示されたブログ)のチームに入っていれば、条件は満たされる </li>
+    <li><strong>admin</strong>:訪問中のメンバーがログインしており、かつ現在いるブログ(あるいは<em>name</em>パラメーターで指示されたブログ)の管理権限があれば、条件は満たされる</li>
+    <li><strong>archiveprevexists</strong>:もし現在のブログに現在表示しているものより新しい月、または日のアーカイブがあれば真</li>
+    <li><strong>archivenextexists</strong>:もし現在のブログに現在表示しているものより古い月、または日のアーカイブがあれば真</li>
+    <li><strong>previtem</strong>:もし現在のブログにより新しいアイテムがあるのなら真となる(個別アイテムページでのみ使用可能)</li>
+    <li><strong>nextitem</strong>:もし現在のブログにより古いアイテムがあるのなら真となる(個別アイテムページでのみ使用可能)</li>
+    <li><strong>skintype</strong>:現在のスキンタイプが<em> value</em>(index, search, item, archive, archivelist, ...)と一致するか調べる(URLによって判別)</li>
+    <li><strong>hasplugin</strong>:プラグインがインストールされているか、またはプラグインのオプションが特定の値をとっているか調べる
+        <ul>
+            <li><strong>hasplugin,<em>PluginName</em></strong>:該当プラグインが存在すれば、条件は満たされる</li>
+            <li><strong>hasplugin,<em>PluginName</em>,<em> OptionName</em></strong>:プラグインのオプションが「いいえ」に設定されてなければ、条件は満たされる</li>
+            <li><strong>hasplugin,<em>PluginName</em>,<em> OptionName=value</em></strong>:プラグインのオプションが特定の値に設定されていれば、条件は満たされる</li>
+        </ul>
+    </li>
+    <li><strong>if拡張対応プラグイン名</strong>:第1引数には、'NP_'を取ったプラグイン名を指定します。第1引数で指定したプラグインに、第2引数、第3引数を渡した結果が真なら真
+        <ul>
+            <li><strong><em>プラグイン名</em>,<em>属性名</em></strong>: 使用法 <em>プラグイン名</em> プラグインが <em>属性名</em> をチェックします</li>
+            <li><strong><em>プラグイン名</em>,<em>属性名</em>,<em>属性値</em></strong>: 使用法 <em>プラグイン名</em> プラグインが <em>属性名</em> の値が <em>属性値</em> かどうかチェックします</li>
+        </ul>
+    </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%if(loggedin)%&gt;
+おかえりなさい!
+&lt;%else%&gt;
+ようこそ!
+&lt;%endif%&gt;
+</pre>
+
+<pre>
+&lt;%if(category,catname,Off Topic)%&gt;
+'Off Topic' カテゴリへようこそ。
+&lt;%endif%&gt;
+</pre>
+
+<pre>
+&lt;%ifnot(loggedin)%&gt;
+アクセス禁止!
+&lt;%elseif(admin)%&gt;
+管理者さんようこそ!
+&lt;%elseif(onteam)%&gt;
+チームメンバーさんようこそ!
+&lt;%else%&gt;
+サイトメンバーさんようこそ!
+&lt;%endif%&gt;
+</pre>
+
+<h2>注意</h2>
+
+<p>条件が満たされない時にだけ何らかの表示を行いたい場合は、次のようにすることができます:</p>
+
+<pre>
+&lt;%ifnot(skintype,error)%&gt;
+&lt;%blogsetting(name)%&gt;
+&lt;%endif%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-membermailform" id="skinvar-membermailform"><span class="invisible">skinvar-membermailform</span></a>
+<h1>スキン変数:membermailform</h1>
+
+<p>
+メンバー詳細のページで、表示されているメンバーに対して、他のログインしているメンバーがメッセージを送ることのできるフォームを挿入します。
+</p>
+
+<h2>引数</h2>
+
+<div>
+<ul>
+    <li>オプション:
+        <table summary="Skin var::Member mail form::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>rows</em></strong></td>
+                <td>ボックスの横列の数値(デフォルトは10)</td>
+            </tr>
+            <tr>
+                <td><strong><em>cols</em></strong></td>
+                <td>ボックスの縦列の数値(デフォルトは40)</td>
+            </tr>
+            <tr>
+                <td><strong><em>destination url</em></strong></td>
+                <td>メッセージを送信した後リダイレクトされるURL</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+</div>
+
+
+<h2>スキンタイプ</h2>
+
+<p>
+メンバー詳細
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%membermailform%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-searchform" id="skinvar-searchform"><span class="invisible">skinvar-searchform</span></a>
+<h1>スキン変数:searchform</h1>
+
+<p>
+現在のブログに対する検索フォームを挿入します。
+</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>オプション:
+        <table summary="Skin var::Sezrch form::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>blogname</em></strong></td>
+                <td>検索を実行するブログの短縮名(ブログの短縮名を指定していても、<a href="#blogsearchable">常に検索対象に含める</a>の設定が「はい」のブログは検索対象になります)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>スキンタイプ</h2>
+
+<p>
+メインの目次、月別アーカイブ、月別アーカイブ一覧、個別アイテム
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%searchform%&gt;
+&lt;%searchform(otherweblog)%&gt;
+</pre>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="skinvar-nucleusbutton" id="skinvar-nucleusbutton"><span class="invisible">skinvar-nucleusbutton</span></a>
+<h1>スキン変数:nucleusbutton</h1>
+
+<p><a href="http://nucleuscms.org/" class="out" onclick="window.open(this.href);return false;" onkeypress="window.open(this.href);return false;" title="Nucleus website (opens in new window)">本家Nucleusウェブサイト(英語)</a>へのリンクが付いたボタン、あるいはバナーを挿入します。</p>
+
+<h2>引数</h2>
+<div>
+<ul>
+    <li>オプション:
+        <table summary="Skin var::Nucleus button::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>imgurl</em></strong></td>
+                <td>画像のURL(デフォルトのものを使わない場合)</td>
+            </tr>
+            <tr>
+                <td><strong><em>imgwidth</em></strong></td>
+                <td>画像の横幅(ピクセル単位)</td>
+            </tr>
+            <tr>
+                <td><strong><em>imgheight</em></strong></td>
+                <td>画像の高さ(ピクセル単位)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+</div>
+
+<h2>注意</h2>
+<ul>
+    <li>このタグは<a href="#parser-properties">パーサー設定の<code>IncludeMode</code> と<code>IncludePrefix</code></a>に影響を受けます。</li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%nucleusbutton%&gt;
+&lt;%nucleusbutton(nucleus/nucleus.gif,46,43)%&gt;
+</pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="skinvar-self" id="skinvar-self"><span class="invisible">skinvar-self</span></a>
+<h1>スキン変数:self</h1>
+
+<p>
+現在表示しているページのファイル名を挿入します(index.php等で記述した「$CONF['Self']」の値です)。
+</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%self%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-addlink" id="skinvar-addlink"><span class="invisible">skinvar-addlink</span></a>
+<h1>スキン変数:addlink</h1>
+
+<p>
+表示中のブログにアイテムを追加するためのブックマークレットのURLを出力します
+</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;dd&gt;&lt;a href="&lt;%addlink%&gt;" onclick="&lt;%addpopupcode%&gt;" title="ブログにアイテムを追加する"&gt;アイテムを投稿する&lt;/a&gt;&lt;/dd&gt;
+</pre>
+
+</div>
+
+<div class="page">
+<a name="skinvar-addpopupcode" id="skinvar-addpopupcode"><span class="invisible">skinvar-addpopupcode</span></a>
+<h1>スキン変数:addpopupcode</h1>
+
+<p>
+アイテムを追加するブックマークレットをポップアップさせるためのJavascriptコードを出力します
+</p>
+
+<h2>引数</h2>
+<p>なし</p>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;dd&gt;&lt;a href="&lt;%addlink%&gt;" onclick="&lt;%addpopupcode%&gt;" title="ブログにアイテムを追加する"&gt;アイテムを投稿する&lt;/a&gt;&lt;/dd&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="skinvar-sticky" id="skinvar-sticky"><span class="invisible">skinvar-sticky</span></a>
+<h1>スキン変数:sticky</h1>
+
+<p>
+スキンにアイテムを表示します
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Skin var::sticky::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>itemid</strong></td>
+                <td><a href="#if_condition">表示するアイテムのID</a></td>
+            </tr>
+            <tr>
+                <td><strong>template</strong></td>
+                <td>アイテムを表示するためのテンプレート</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>スキンタイプ</h2>
+
+<p>
+全て
+</p>
+
+<h2>例</h2>
+
+<pre>
+&lt;%sticky(11,default/index)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="templatevars-overview" id="templatevars-overview"><span class="invisible">templatevars-overview</span></a>
+<h1>テンプレート変数:概略</h1>
+
+<h2>どういったものなのか?</h2>
+
+<p>テンプレート変数はスキン変数と同じ方法で広く働きますが、テンプレート内部で利用できる点でスキン変数と区別されます。変数は <code>&lt;%<em style="font-style:italic;">変数名</em>%&gt;</code>という形で呼び出され、変数の機能によってはテキストを挿入します。また、その他のオプションパラメーターを持つ変数もあります。</p>
+
+<h2>利用可能な変数</h2>
+
+<p>
+テンプレート変数は、<code>「アイテムのヘッダー」、「アイテムの本体」、「アイテムのフッター」、「日付ヘッダー」、「日付フッター」、「続きへのリンク」、「アイテムリンクの編集」</code>といった、テンプレート・パーツの中で使用できます。(変数<code>image</code>、 <code>popup</code>、<code>media</code>、<code> plugin</code>はブログアイテムの中でも使用できます。)
+</p>
+
+<ul>
+    <li><a href="#templatevars-basic">基本の変数・・・</a>(title、bodyなど...)</li>
+    <li><a href="#templatevars-advanced">上級の変数・・・</a>(include、pluginなど...)</li>
+</ul>
+
+<p>コメント関連のテンプレート・パーツ(<code>「コメントのヘッダー」、「コメントの本体」、「コメントのフッター」、「コメントが1 つの時」、「コメントが2つ以上の時」、「コメントの続きを読む」、「コメントが無い時」、「長すぎるコメントの時」</code>)では、利用可能な変数のセットが異なります:</p>
+
+<ul>
+    <li><a href="#templatevars-comments">コメント関連の変数・・・</a></li>
+</ul>
+
+
+</div>
+
+
+
+<div class="page">
+<a name="templatevars-basic" id="templatevars-basic"><span class="invisible">templatevars-basic</span></a>
+<h1>テンプレート変数:基本の変数</h1>
+
+<p>これらの変数はすべて、そのときパースされているアイテムに関わる値になります。</p>
+
+<table summary="Template var::Basic vars"><tr>
+    <th abbr="名前">名前</th>
+    <th abbr="説明">説明</th>
+</tr><tr>
+    <td>title</td>
+    <td>アイテムのタイトル</td>
+</tr><tr>
+    <td>body</td>
+    <td>「本文」のテキスト</td>
+</tr><tr>
+    <td>more</td>
+    <td>「続き」のテキスト</td>
+</tr><tr>
+    <td>category</td>
+    <td>アイテムが所属しているカテゴリーの名前</td>
+</tr><tr>
+    <td>categorylink</td>
+    <td>アイテムが所属しているカテゴリーのURL</td>
+</tr><tr>
+    <td><a href="#templatevar-karma">karma</a></td>
+    <td>カルマ投票の得点</td>
+</tr><tr>
+    <td>authorlink</td>
+    <td>投稿者の「メンバーの詳細ページ」のURL</td>
+</tr><tr>
+    <td>itemlink</td>
+    <td>アイテムのURL(permanent)</td>
+</tr><tr>
+    <td><a href="#templatevar-author">author</a></td>
+    <td>投稿者の「<a href="#shortnames">表示される名前</a>」</td>
+</tr><tr>
+    <td><a href="#templatevar-smartbody">smartbody</a></td>
+    <td>本文か続きのどちらか</td>
+</tr><tr>
+    <td><a href="#templatevar-morelink">morelink</a></td>
+    <td>「続き」部分のURL</td>
+</tr><tr>
+    <td><a href="#templatevar-date">date</a></td>
+    <td>フォーマット済みの日付</td>
+</tr><tr>
+    <td><a href="#templatevar-time">time</a></td>
+    <td>フォーマット済みの時刻</td>
+</tr><tr>
+    <td>daylink</td>
+    <td>アイテムが投稿された日付のアーカイブのURL</td>
+</tr><tr>
+    <td><a href="#templatevar-comments">comments</a></td>
+    <td>コメント・ブロック、もしくはコメント数</td>
+</tr><tr>
+    <td>itemid</td>
+    <td>アイテムのID</td>
+</tr><tr>
+    <td>blogurl</td>
+    <td>ブログのURL</td>
+</tr></table>
+
+<p><a href="#templatevars-overview">テンプレート変数の概略...</a></p>
+
+
+</div>
+
+
+
+<div class="page">
+<a name="templatevars-advanced" id="templatevars-advanced"><span class="invisible">templatevars-advanced</span></a>
+<h1>テンプレート変数:上級の変数</h1>
+
+
+<table summary="Template var::Advanced vars"><tr>
+    <th abbr="名前">名前</th>
+    <th abbr="説明">説明</th>
+</tr><tr>
+    <td>authorid</td>
+    <td>現在のアイテムの投稿者のID</td>
+</tr><tr>
+    <td>blogid</td>
+    <td>アイテムが所属するブログのID</td>
+</tr><tr>
+    <td>catid</td>
+    <td>アイテムが所属するカテゴリーのID</td>
+</tr><tr>
+    <td>query</td>
+    <td>存在していれば、検索文字列</td>
+</tr><tr>
+    <td><a href="#templatevar-syndicate_title">syndicate_title</a></td>
+    <td>RSSなどの配信用に、指定文字数以上を省略したアイテムのタイトル</td>
+</tr><tr>
+    <td><a href="#templatevar-syndicate_description">syndicate_description</a></td>
+    <td>RSSなどの配信用に、指定文字数以上を省略した「本文」テキスト</td>
+</tr><tr>
+    <td>karmaposlink</td>
+    <td>投票用のURL</td>
+</tr><tr>
+    <td>karmaneglink</td>
+    <td>投票用のURL</td>
+</tr><tr>
+    <td>new</td>
+    <td>前回訪問時意向に追加されたアイテムを示すテキストなど</td>
+</tr><tr>
+    <td><a href="#skinvar-include">include</a></td>
+    <td>指定されたファイルの内容をそのまま挿入</td>
+</tr><tr>
+    <td><a href="#skinvar-parsedinclude">parsedinclude</a></td>
+    <td>指定されたファイル内のスキン/テンプレート変数を展開して、その結果を挿入</td>
+</tr><tr>
+    <td><a href="#skinvar-phpinclude">phpinclude</a></td>
+    <td>指定されたファイルをPHPとして実行した結果を挿入</td>
+</tr><tr>
+    <td><a href="#skinvar-plugin">plugin</a></td>
+    <td>プラグインを実行</td>
+</tr><tr>
+    <td><a href="#templatevar-edit">edit</a></td>
+    <td>テンプレート「アイテムを編集するためのリンク」の内容を挿入</td>
+</tr><tr>
+    <td><a href="#templatevar-editlink">editlink</a></td>
+    <td>アイテム編集画面(bookmarklet)のURL</td>
+</tr><tr>
+    <td><a href="#templatevar-editpopupcode">editpopupcode</a></td>
+    <td>editlink用のウィンドウをポップアップするjavascriptコード</td>
+</tr><tr>
+    <td><a href="#skinvar-skinfile">skinfile</a></td>
+    <td>インポートされたスキンに属しているファイルへの正確なURLを挿入</td>
+</tr><tr>
+    <td><a href="#skinvar-set">set</a></td>
+    <td><a href="#parser-properties">パーサーのプロパティ</a>を設定</td>
+</tr><tr>
+    <td><a href="#templatevar-image">image</a></td>
+    <td>メディア・ライブラリの画像をインライン表示</td>
+</tr><tr>
+    <td><a href="#templatevar-popup">popup</a></td>
+    <td>メディア・ディレクトリの画像をポップアップ</td>
+</tr><tr>
+    <td><a href="#templatevar-media">media</a></td>
+    <td>メディア・ディレクトリの他のメディア・オブジェクト</td>
+</tr><tr>
+    <td>relevance</td>
+    <td>検索結果を表示するテンプレートに「検索関連度」を挿入する(2.5より)</td>
+</tr></table>
+
+<p><a href="#templatevars-overview">テンプレート変数の概略...</a></p>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="templatevars-comments" id="templatevars-comments"><span class="invisible">templatevars-comments</span></a>
+<h1>テンプレート変数:コメント関連(前半)</h1>
+<a href="#templatevars-comments_l">テンプレート変数:コメント関連(後半)</a>
+
+<table summary="Template comment var::First half"><tr>
+    <th abbr="名前">名前</th>
+    <th abbr="説明">説明</th>
+</tr><tr>
+    <td>body</td>
+    <td>コメントの本体</td>
+</tr><tr>
+    <td>user</td>
+    <td>コメント者の名前</td>
+</tr><tr>
+    <td>userid</td>
+    <td>コメント者のWebサイトのURL、もしくはコメント者のメールアドレス(入力されたままのものが挿入されます)</td>
+</tr><tr>
+    <td>email</td>
+    <td>コメント者のメールアドレス(スパム対策として、"@"は"(at)"に、".(ピリオド)"は"(dot)"に変換されます)</td>
+</tr><tr>
+    <td>userlink</td>
+    <td>コメント者がログイン中の登録メンバーの時はメンバー詳細ページに、それ以外の時は入力されたWebサイトのURL、もしくはメールアドレスに対する&lt;a href="..."&gt;タグ付きのリンク(有効なURLかメールアドレスが入力されていない場合は、コメント者の名前のみが表示されます)</td>
+</tr><tr>
+    <td>userlinkraw</td>
+    <td>userlinkと同じ。ただし、aタグの付いたリンクではなくURL、もしくはmailto:メールアドレスのみの表記。(入力されたURLやメールアドレスがいずれも文法的に有効でない場合は空になります)</td>
+</tr><tr>
+    <td>useremail</td>
+    <td>ユーザーのメールアドレス。もしコメント者によって入力されていない場合は空</td>
+</tr><tr>
+    <td>userwebsite</td>
+    <td>ユーザーのwebsiteのURL。もしコメント者によって入力されていない場合は空</td>
+</tr><tr>
+       <td>userwebsitelink</td>
+    <td>コメント者が登録メンバーの時はメンバー詳細ページに、それ以外の時は入力されたWebサイトのURLに対する&lt;a href="..."&gt;タグ付きのリンク(有効なURLが入力されていない場合は、コメント者の名前のみが表示されます)</td>
+</tr><tr>
+    <td>memberid</td>
+    <td>メンバーのID(コメント者がログイン中の登録メンバーでない時は0になります)</td>
+</tr><tr>
+    <td>commentcount</td>
+    <td>該当アイテムに付けられたコメントの総数</td>
+</tr><tr>
+    <td><a href="#templatecommentwords" title="commentword()">commentword</a></td>
+    <td>アイテムに付けられたコメントの件数の数え方の表記</td>
+</tr>
+</table>
+<a href="#templatevars-comments_l">テンプレート変数:コメント関連(後半)</a>
+<p><a href="#templatevars-overview">テンプレート変数の概略...</a></p>
+</div>
+<div class="page">
+<a name="templatevars-comments_l" id="templatevars-comments_l"><span class="invisible">templatevars-comments_l</span></a>
+<h1>テンプレート変数:コメント関連(後半)</h1>
+<a href="#templatevars-comments">テンプレート変数:コメント関連(前半)</a>
+<table summary="Template comment var::Second half">
+<tr>
+    <td><a href="#templatevar-date" title="date([format])">date</a></td>
+    <td>コメントが追加された時の日付</td>
+</tr><tr>
+    <td><a href="#templatevar-time" title="time([format])">time</a></td>
+    <td>コメントが追加された時の時刻</td>
+</tr><tr>
+    <td>host</td>
+    <td>コメントが投稿されたホスト名</td>
+</tr><tr>
+    <td>ip</td>
+    <td>コメントが投稿されたIPアドレス</td>
+</tr><tr>
+    <td>commentid</td>
+    <td>現在のコメントのID</td>
+</tr><tr>
+    <td>itemid</td>
+    <td>現在のアイテムのID</td>
+</tr><tr>
+    <td>itemlink</td>
+    <td>アイテムの詳細ページへのリンク</td>
+</tr><tr>
+    <td><a href="#templateitemtitle" title="itemtitle([maxlength])">itemtitle</a></td>
+    <td>現在のアイテムのタイトル</td>
+</tr><tr>
+    <td>blogid</td>
+    <td>ブログのID</td>
+</tr><tr>
+    <td>blogurl</td>
+    <td>ブログのURL</td>
+</tr><tr>
+    <td><a href="#templatememberextra" title="authtext()">authtext</a></td>
+    <td>コメント者がログイン中の登録メンバーの時は「<a href="#templatememberextra">登録メンバーからのコメントへの追加表示</a>」テンプレートで設定した内容、それ以外は空</td>
+</tr><tr>
+    <td>short</td>
+    <td>最初の改行部分から先が省略されたコメントの本体。テンプレートによっては末尾に<a href="#templatecommentcontinued">リンクが追加</a>されます。</td>
+</tr><tr>
+    <td>excerpt</td>
+    <td>コメントの本体。60文字でカットし'...'を追加</td>
+</tr><tr>
+    <td>timestamp</td>
+    <td>コメントが追加された時のタイムスタンプ</td>
+</tr><tr>
+    <td><a href="#skinvar-include">include</a></td>
+    <td>指定されたファイルの内容をそのまま挿入</td>
+</tr><tr>
+    <td><a href="#skinvar-parsedinclude">parsedinclude</a></td>
+    <td>指定されたファイル内のスキン/テンプレート変数を展開して、その結果を挿入</td>
+</tr><tr>
+    <td><a href="#skinvar-phpinclude">phpinclude</a></td>
+    <td>指定されたファイルをPHPとして実行した結果を挿入</td>
+</tr><tr>
+    <td><a href="#skinvar-plugin">plugin</a></td>
+    <td>プラグインを実行</td>
+</tr><tr>
+    <td><a href="#skinvar-skinfile">skinfile</a></td>
+    <td>インポートされたスキンに属しているファイルへの正確なURLを挿入</td>
+</tr><tr>
+    <td><a href="#skinvar-set">set</a></td>
+    <td><a href="#parser-properties">パーサーのプロパティ</a>を設定</td>
+</tr></table>
+<a href="#templatevars-comments">テンプレート変数:コメント関連(前半)</a>
+
+
+
+<p><a href="#templatevars-overview">テンプレート変数の概略...</a></p>
+
+</div>
+
+
+
+<div class="page">
+<a name="templatevar-karma" id="templatevar-karma"><span class="invisible">templatevar-karma</span></a>
+<h1>テンプレート変数:karma</h1>
+
+<p>カルマ投票のデータを挿入します。カルマ投票は、アイテムの'カルマ'を投票する方法で、正にでも負にでも投票できます。これら投票の総計によって、該当記事が訪問者にどのように思われているのか知ることができます。</p>
+
+<h2>引数</h2>
+
+<ul>
+    <li>オプション:
+        <table summary="Template var::Karma::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="挿入される情報の種類">挿入される情報の種類</th>
+            </tr>
+            <tr>
+                <td><strong><em>totalscore</em></strong></td>
+                <td>カルマ投票の総合得点(正の投票数から負の投票数を引いたもの/デフォルト)</td>
+            </tr>
+            <tr>
+                <td><strong><em>pos</em></strong></td>
+                <td>正の投票の総計</td>
+            </tr>
+            <tr>
+                <td><strong><em>neg</em></strong></td>
+                <td>負の投票の総計</td>
+            </tr>
+            <tr>
+                <td><strong><em>votes</em></strong></td>
+                <td>投票数の総計</td>
+            </tr>
+            <tr>
+                <td><strong><em>posp</em></strong></td>
+                <td>正に投じられたパーセンテージ</td>
+            </tr>
+            <tr>
+                <td><strong><em>negp</em></strong></td>
+                <td>負に投じられたパーセンテージ</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+
+<h2>例</h2>
+<pre><code>&lt;%karma(posp)%&gt;がよい記事だと評価しました(総計&lt;%votes%&gt;票)</code></pre>
+
+
+</div>
+
+
+
+<div class="page">
+<a name="templateitemtitle" id="templateitemtitle"><span class="invisible">templateitemtitle</span></a>
+<h1>テンプレート変数:templateitemtitle</h1>
+
+<p>コメント関連テンプレート変数で、元記事のタイトルを挿入します。</p>
+
+<h2>引数</h2>
+
+<ul>
+    <li>オプション:
+        <table summary="Template var::Item title::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>maxlength</em></strong></td>
+                <td>maxlengthで指定された数値で、アイテムのタイトル省略。</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+</div>
+
+
+
+
+
+
+<div class="page">
+<a name="templatevar-author" id="templatevar-author"><span class="invisible">templatevar-author</span></a>
+<h1>テンプレート変数:author</h1>
+
+<p>投稿者のデータを挿入します。</p>
+
+<h2>引数</h2>
+<ul>
+    <li>オプション:
+        <table summary="Template var::Author::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="挿入される情報の種類">挿入される情報の種類</th>
+            </tr>
+            <tr>
+                <td><strong><em>name</em></strong></td>
+                <td>投稿者の「<a href="#shortnames">表示される名前</a>」(ログインID)</td>
+            </tr>
+            <tr>
+                <td><strong><em>realname</em></strong></td>
+                <td>投稿者のハンドルネーム(本名)</td>
+            </tr>
+            <tr>
+                <td><strong><em>id</em></strong></td>
+                <td>投稿者のメンバーID</td>
+            </tr>
+            <tr>
+                <td><strong><em>url</em></strong></td>
+                <td>投稿者のウェブサイトのURL</td>
+            </tr>
+            <tr>
+                <td><strong><em>email</em></strong></td>
+                <td>投稿者の登録メールアドレス(使うのは避けるべき)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>例</h2>
+
+<pre><code>&lt;%author%&gt;
+&lt;%author(realname)%&gt;
+&lt;a href="&lt;%author(url)%&gt;"&gt;&lt;%author%&gt;&lt;/a&gt;</code></pre>
+
+</div>
+
+
+
+
+<div class="page">
+<a name="templatevar-smartbody" id="templatevar-smartbody"><span class="invisible">templatevar-smartbody</span></a>
+<h1>テンプレート変数:smartbody</h1>
+
+<p>
+現在のアイテムを調べてから、「本文」と「続き」のどちらを表示するか決定します。
+</p>
+
+<p>「続き」に何かが入力されていれば「続き」が、何も入力されていなければ「本文」が挿入されます。</p>
+
+<table summary="Template var::Smart body" style="text-align: center;"><tr>
+    <th abbr="部分名">部分名</th><th colspan="2" abbr="何か入力されている?">何か入力されている?</th>
+</tr><tr>
+    <td>本文</td><td>入力あり</td><td>入力あり</td>
+</tr><tr>
+    <td>続き</td><td>入力なし</td><td>入力あり</td>
+</tr><tr>
+    <th abbr="smartbodyで挿入される部分">smartbodyで挿入される部分</th><th abbr="「本文」部分">「本文」部分</th><th abbr="「続き」部分">「続き」部分</th>
+</tr></table>
+
+<h2>使用例</h2>
+
+<p>「本文」に詳しい内容を入力し、「続き」には"紹介"、"抜粋"といった内容のものを入力し、「メインの目次ページ」で使用するテンプレートには<code>&lt;%smartbody%&gt;</code>を使い、抜粋が存在するときにはそれを、無い時は「本文」を使用するような使い方をします</p>
+<p>この時、「個別アイテムページ」で使うテンプレートには、<code> &lt;%body%&gt;</code> + <code>&lt;%more%&gt;</code>のかわりに<code>&lt;%body% &gt;</code>だけを記述するようにすると、より効果的に使えるでしょう</p>
+<!-- のテキストが完全なテキストと判断され、続きの部分はフロントページに表示される「紹介」や「抜粋」と判断されます。</p>
+<p>フロントページで使われているテンプレートには<code>&lt;%smartbody%&gt;</code>を使い、抜粋が存在するときにはそれを、無い場合は完全なテキストを挿入します。アイテムの詳細テンプレートには、<code> &lt;%body%&gt;</code> + <code>&lt;%more%&gt;</code>のかわりに<code>&lt;%body% &gt;</code>を使います。<code>&lt%body%&gt;</code>は少なくとも完全なアイテムが入っているのですから。</p> -->
+
+
+
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-morelink" id="templatevar-morelink"><span class="invisible">templatevar-morelink</span></a>
+<h1>テンプレート変数:morelink</h1>
+
+<p>
+テンプレート<a href="#templatemorelink">続きへのリンク</a>で定義されているリンクを挿入します。「続き」に何も入力されていない時は無視されます。
+</p>
+
+<p>テンプレート部品'<a href="#templatemorelink">続きへのリンク</a>'の中身もまたパースされるので、同様に<a href="#templatevars-overview">テンプレート変数</a>を含むことができることに注意してください(例:<a href="#templatemorelink">続きへのリンク</a>に&lt;%morelink%&gt;を記述することは可能ですが、無限ループを起こします)。</p>
+<h2>引数</h2>
+<p>なし</p>
+</div>
+
+
+<div class="page">
+<a name="templatevar-date" id="templatevar-date"><span class="invisible">templatevar-date</span></a>
+<h1>テンプレート変数:date</h1>
+
+<p>
+<a href="#templatedatetime">日付フォーマット</a>で設定した書式で日付を挿入します。オプションの引数に<a href="#strftime">strftime</a>変数を使用して、フォーマットを変更することもできます。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>オプション:
+        <table summary="Template var::Date::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>format</em></strong></td>
+                <td>日付のフォーマットに用いる形式</td>
+            </tr>
+            <tr>
+                <td colspan="2">下記の4つの特別なパラメーターが利用可能です</td>
+            </tr>
+            <tr>
+                <td><strong><em><code>rfc822</code></em></strong></td>
+                <td>LocaleにあわせたRFC822フォーマットの日付</td>
+            </tr>
+            <tr>
+                <td><strong><em><code>rfc822GMT</code></em></strong></td>
+                <td>GMTにあわせたRFCフォーマットの日付</td>
+            </tr>
+            <tr>
+                <td><strong><em><code>iso8601</code></em></strong></td>
+                <td>ISO-8601フォーマットの日付(<a href="http://www.w3.org/TR/NOTE-datetime" onclick="window.open(this.href);return false;" onkeypress="window.open(this.href);return false;" class="out">W3Cの時刻と日付フォーマット</a>(新しいウィンドウが開きます)に概略があります)。例:2008-09-05T10:00:00-05:00</td>
+            </tr>
+            <tr>
+                <td><strong><em><code>utc</code></em></strong></td>
+                <td>iso8601と同じ。ただし、タイムゾーンの表示として"Z"を使うUTCで表現される。</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>例</h2>
+<pre>
+&lt;%date%&gt;
+&lt;%date(%x)%&gt;
+&lt;%date(rfc822)%&gt;
+&lt;%date(rfc822GMT)%&gt;
+</pre>
+
+
+</div>
+
+<div class="page">
+<a name="templatevar-time" id="templatevar-time"><span class="invisible">templatevar-time</span></a>
+<h1>テンプレート変数:time</h1>
+
+<p>
+<a href="#templatedatetime">時刻フォーマット</a>で設定した書式で時刻を挿入します。オプションの引数に<a href="#strftime">strftime</a>変数を使用して、フォーマットを変更することもできます。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>オプション:
+        <table summary="Template var::Time:::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>format</em></strong></td>
+                <td>時刻のフォーマットに用いる形式</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>例</h2>
+<pre>
+&lt;%time%&gt;
+&lt;%time(%X)%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-comments" id="templatevar-comments"><span class="invisible">templatevar-comments</span></a>
+<h1>テンプレート変数:comments</h1>
+
+<p>
+コメントブロックを挿入します。<a href="#templatecomments">このブロックの詳しい説明</a>。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>オプション:
+        <table summary="Template var::Comments::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>MaxToShow</em></strong></td>
+                <td>表示するコメントの数(設定されていれば、Blog設定にある<a href="#blogmaxcomments">コメントの最大量</a>を上書きします)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>例</h2>
+
+<pre>
+&lt;%comments%&gt;
+&lt;%comments(5)%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-syndicate_title" id="templatevar-syndicate_title"><span class="invisible">templatevar-syndicate_title</span></a>
+<h1>テンプレート変数:syndicate_title</h1>
+
+<p>
+HTMLタグを取り除き、指定された長さにまで縮めたアイテムのタイトルを挿入します(指定が無い時は100)。省略された場合、末尾に"..."が追加されます。
+</p>
+
+<p>
+この変数はRSS等のために使うことが意図されていましたが、他にも便利な使い方があるでしょう。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>オプション:
+        <table summary="Template var::Syndicate title::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>MaxChars</em></strong></td>
+                <td>省略せずに残す最大の幅(デフォルトは100)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>例</h2>
+
+<pre>
+&lt;%syndicate_title%&gt;
+&lt;%syndicate_title(25)%&gt;
+</pre>
+
+</div>
+
+<div class="page">
+<a name="templatevar-syndicate_description" id="templatevar-syndicate_description"><span class="invisible">templatevar-syndicate_description</span></a>
+<h1>テンプレート変数:syndicate_description</h1>
+
+<p>
+HTMLタグを取り除き、指定された幅にまで縮めたアイテムの本文を挿入します(指定が無い時は250)。テキストが縮められた場合は、末尾に"..."が追加される。
+</p>
+
+<p>
+この変数はRSSのために使うことが意図されていましたが、他にも便利な使い方があるでしょう。
+</p>
+
+<h2>引数</h2>
+<ul>
+    <li>オプション:
+        <table summary="Template var::Syndicate description::Optional">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong><em>MaxChars</em></strong></td>
+                <td>省略せずに残す最大の幅(デフォルトは250)</td>
+            </tr>
+        </table>
+    </li>
+</ul>
+
+<h2>例</h2>
+
+<pre>
+&lt;%syndicate_description%&gt;
+&lt;%syndicate_description(25)%&gt;
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-image" id="templatevar-image"><span class="invisible">templatevar-image</span></a>
+<h1>テンプレート変数:image</h1>
+
+<p>アイテム本体やテンプレートにインライン画像を挿入します。</p>
+
+<p>通常テンプレート変数&lt;%image%&gt;はアイテムに画像を挿入するときに自動的に生成されますが、テンプレート内部で直接呼び出すこともできます。その場合は、メディア・ディレクトリにある、現在のアイテムの投稿者のプライベート・コレクションから画像が持って来られるので注意が必要です。</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Template var::Image::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>filename</strong></td>
+                <td>画像ファイルの名前</td>
+            </tr>
+            <tr>
+                <td><strong>width</strong></td>
+                <td>画像の横幅(ピクセルかパーセンテージ)</td>
+            </tr>
+            <tr>
+                <td><strong>height</strong></td>
+                <td>画像の高さ(ピクセルかパーセンテージ)</td>
+            </tr>
+            <tr>
+                <td><strong>text</strong></td>
+                <td>画像の代用テキスト</td>
+            </tr>
+        </table>
+    </li>
+    <li><strong>注意:</strong>画像、ポップアップ、メディアタグでは、引数は<em>コンマではなく '|'で</em>区切られなければなりません。</li>
+</ul>
+
+<h2>例</h2>
+
+<pre>
+&lt;%image(myphoto.jpg|100|200|これが私です)%&gt;
+&lt;%image(myphoto.jpg|50%|50%|縮小していますが、これが私です)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="templatevar-popup" id="templatevar-popup"><span class="invisible">templatevar-popup</span></a>
+<h1>テンプレート変数:popup</h1>
+
+<p>アイテム本体やテンプレートにポップアップ画像を挿入します。</p>
+
+<p>通常テンプレート変数&lt;%popup%&gt;はアイテムに画像を挿入するときに自動的に生成されますが、テンプレート内部で直接呼び出すこともできます。その場合は、メディア・ディレクトリにある、現在のアイテムの投稿者のプライベート・コレクションから画像が持って来られるので注意が必要です。</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Template var::Popup::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>filename</strong></td>
+                <td>画像ファイルの名前</td>
+            </tr>
+            <tr>
+                <td><strong>width</strong></td>
+                <td>画像の横幅(ピクセルかパーセンテージ)</td>
+            </tr>
+            <tr>
+                <td><strong>height</strong></td>
+                <td>画像の高さ(ピクセルかパーセンテージ)</td>
+            </tr>
+            <tr>
+                <td><strong>text</strong></td>
+                <td>画像の代用テキスト</td>
+            </tr>
+        </table>
+    </li>
+    <li><strong>注意:</strong>画像、ポップアップ、メディアタグでは、引数は<em>コンマではなく '|'で</em>区切られなければなりません。</li>
+</ul>
+
+<h2>例</h2>
+
+<pre>
+&lt;%popup(myphoto.jpg|100|200|これが私です)%&gt;
+&lt;%popup(myphoto.jpg|50%|50%|縮小していますが、これが私です)%&gt;
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="templatevar-media" id="templatevar-media"><span class="invisible">templatevar-media</span></a>
+<h1>テンプレート変数:media</h1>
+
+<p>アイテム本体やテンプレートにメディアオブジェクトを挿入します。</p>
+
+<p>通常テンプレート変数&lt;%media%&gt;はアイテムにメディアファイルを挿入するときに自動的に生成されますが、テンプレート内部で直接呼び出すこともできます。その場合は、メディア・ディレクトリにある、現在のアイテムの投稿者のプライベート・コレクションから画像が持って来られるので注意が必要です。</p>
+
+<h2>引数</h2>
+<ul>
+    <li>必須:
+        <table summary="Template var::Media::Require">
+            <tr>
+                <th abbr="名前">名前</th>
+                <th abbr="値">値</th>
+            </tr>
+            <tr>
+                <td><strong>filename</strong></td>
+                <td>オブジェクトファイルの名前</td>
+            </tr>
+            <tr>
+                <td><strong>text</strong></td>
+                <td>オブジェクトの説明テキスト</td>
+            </tr>
+        </table>
+    </li>
+    <li><strong>注意:</strong>画像、ポップアップ、メディアタグでは、引数は<em>コンマではなく '|'で</em>区切られなければなりません。</li>
+</ul>
+
+<h2>例</h2>
+
+<pre><code>&lt;%media(mysong.mp3|新曲を聞いてみてください)%&gt;</code></pre>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-edit" id="templatevar-edit"><span class="invisible">templatevar-edit</span></a>
+<h1>テンプレート変数:edit</h1>
+
+<p>
+<a href="#templateeditlink">テンプレート:アイテムを編集するためのリンク</a>の内容を挿入します。
+</p>
+
+<p><strong>注意:</strong>ログイン状態のメンバーが、閲覧中のアイテムの編集を許可されている時のみ、この変数が働きます。それ以外の場合は、テンプレート変数&lt;%edit%&gt;は何も表示しません。</p>
+
+<h2>例</h2>
+<p>「アイテムの本体」テンプレートの一例</p>
+<pre><code>&lt;h1&gt;&lt;%title%&gt;&lt;/h1&gt;
+&lt;p&gt;&lt;%body%&gt; &lt;%morelink%&gt;&lt;/p&gt;
+&lt;div class="metadata"&gt;
+    &lt;%edit%&gt; &lt;%comments%&gt;
+&lt;/div&gt;</code></pre>
+
+<h2>結果は次のようになります</h2>
+
+<div class="example">
+<span class="heading_example">タイトル</span>
+<p style="margin:2px;">アイテムの本文</p>
+<div style="margin:2px;"><a href="#templatevar-edit">編集</a> - <a href="#templatevar-edit">5 comments</a></div>
+</div>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-editlink" id="templatevar-editlink"><span class="invisible">templatevar-editlink</span></a>
+<h1>テンプレート変数:editlink</h1>
+
+<p>
+アイテムを編集するためのbookmarkletのURLを挿入します。この変数は<a href="#templateeditlink">テンプレート:アイテムを編集するためのリンク</a>内で使用することができます。
+</p>
+
+<h2>例</h2>
+
+<p>「<a href="#templateeditlink">アイテムを編集するためのリンク</a>」テンプレートの一例</p>
+<pre>
+&lt;a href="&lt;%editlink%&gt;"
+    onclick="&lt;%editpopupcode%&gt;"&gt;編集&lt;/a&gt; -
+</pre>
+
+</div>
+
+
+<div class="page">
+<a name="templatevar-editpopupcode" id="templatevar-editpopupcode"><span class="invisible">templatevar-editpopupcode</span></a>
+<h1>テンプレート変数:editpopupcode</h1>
+
+<p>
+'アイテムの編集'ウィンドウをポップアップで開くためのjavascriptのコードを挿入します。
+</p>
+
+<h2>例</h2>
+
+<p>「<a href="#templateeditlink">アイテムを編集するためのリンク</a>」テンプレートの一例</p>
+<pre>
+&lt;a href="&lt;%editlink%&gt;" onclick="&lt;%editpopupcode%&gt;"&gt;編集&lt;/a&gt; -
+</pre>
+
+</div>
+
+
+
+<div class="page">
+<a name="plugins" id="plugins"><span class="invisible">plugins</span></a>
+<h1>プラグイン</h1>
+<p>
+Nucleusでは機能を追加するために、プラグインをインストールすることができます。プラグインは次のリストの様に働き、Nucleus本体だけでは実現できな様々な機能を提供してくれるでしょう。
+</p>
+<ol>
+    <li>スキン変数のように振舞う</li>
+    <li>テンプレート変数のように振舞う</li>
+    <li>Nucleusによって生成されたイベントのフック。「プラグインの管理」画面での「&uarr; ひとつ上へ」と「&darr; ひとつ下へ」リンクは、イベント発生時にプラグインを呼び出す順番を決定するために用いられます。最初のプラグインは最初に呼び出され、最後のプラグインは最後に呼び出されます。</li>
+    <li><code>action.php</code>を通して呼び出されたときにアクタのように振舞う</li>
+</ol>
+<p>
+プラグインに対する責任は、完全にプラグインの作者にあることをお忘れなく。プラグイン作者は、プラグインが問題なく動くように作らなければなりません。
+</p>
+<a name="getplugins" id="getplugins"><span class="invisible">getplugins</span></a>
+<p>
+NucleusCMSのプラグインの主だったものは、以下の二つのページから見つけ出すことが出来ます。
+</p>
+<ul>
+    <li><a href="http://wiki.nucleuscms.org/plugin" title="本家プラグインリスト">本家プラグインリスト</a></li>
+    <li><a href="http://japan.nucleuscms.org/wiki/plugins" title="日本公式プラグインWiki">日本公式プラグインWiki</a></li>
+</ul>
+<p>
+どちらのページも全てのプラグインを網羅しているわけではありませんが、これらのページのどちらかであなたが必要としているプラグインを見つけることが出来るでしょう。
+インターネット上には無料の翻訳サービスがあるので、「読めない」と恐れることはありません。
+</p>
+あなたがプラグインを開発したり、機能を検索するその他のリソースとして、<a href="http://forum.nucleuscms.org/" title="本家フォーラム">本家フォーラム</a>や<a href="http://japan.nucleuscms.org/bb/" title="Nucleus日本語フォーラム">Nucleus日本語フォーラム</a>があります。
+これらのフォーラムの中でも、プラグインリストに掲載されていない小さなプラグインを見つけることが出来るでしょう。
+<p>
+</p>
+</div>
+
+<div class="page">
+<a name="parser-properties" id="parser-properties"><span class="invisible">parser-properties</span></a>
+<a name="includemode" id="includemode"><span class="invisible">includemode</span></a>
+<a name="includeprefix" id="includeprefix"><span class="invisible">includeprefix</span></a>
+<h1>パーサーのプロパティ</h1>
+
+<p>利用可能なパーサーオプションを以下に記述します。</p>
+
+<table summary="Parser properties">
+    <caption>パーサーのプロパティ</caption>
+    <tr>
+        <th abbr="オプション名">オプション名</th>
+        <th colspan="2" abbr="値">値</th>
+    </tr>
+    <tr>
+        <td rowspan="3">Includeモード</td>
+        <td><strong>normal</strong></td>
+        <td>通常の動作。ページを作成する「.php」ファイルのディレクトリ/URLから相対位置のファイルを取り出しインクルードします。</td>
+    </tr>
+    <tr>
+        <td><strong>skindir</strong></td>
+        <td>スキンディレクトリ/スキンURLから相対位置のファイルを取り出しインクルードします。</td>
+    </tr>
+    <tr>
+        <td>影響を与えるスキン変数</td>
+        <td>
+            <ul>
+                <li><a href="#skinvar-include">include</a></li>
+                <li><a href="#skinvar-phpinclude">phpinclude</a></li>
+                <li><a href="#skinvar-parsedinclude">parsedinclude</a></li>
+                <li><a href="#skinvar-nucleusbutton">nucleusbutton</a></li>
+            </ul>
+        </td>
+    </tr>
+    <tr>
+        <td rowspan="2">Includeプリフィックス</td>
+        <td colspan="2"><p>このプロパティはインクルードするファイルそれぞれの頭に追加されるプリフィックスです。例えば、プリフィックスが<code>base/</code>でインクルードするファイルが<code>somefile.txt</code>なら、最終的には<code>base/somefile.txt</code>をインクルードすることになります。</p>
+        <p>このプロパティはIncludeModeのプロパティと共に使われることが意図されています。この方法で、<code> <em>skindir/</em>somename/</code>にインポートされたスキンは、<code>IncludeMode</code>を<code>skindirを使う</code>に<code> IncludePrefix</code>を<code>somename/</code>に設定しておくことができます。 </p></td>
+    </tr>
+    <tr>
+        <td>影響を与えるスキン変数</td>
+        <td>
+            <ul>
+                <li><a href="#skinvar-include">include</a></li>
+                <li><a href="#skinvar-phpinclude">phpinclude</a></li>
+                <li><a href="#skinvar-parsedinclude">parsedinclude</a></li>
+                <li><a href="#skinvar-nucleusbutton">nucleusbutton</a></li>
+            </ul>
+        </td>
+    </tr>
+</table>
+
+<p><code>Includeプリフィックス</code>と<code>Includeモード</code> のプロパティは、「スキンの一般的設定」において該当スキンでの包括的な設定が可能です。なお、プロパティが設定されてしまうと、例えばテンプレートも含めたすべてのパースデータにそれが適用されることを心にとめておいてください。</p>
+
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/documentation/history.html b/utf8/nucleus/documentation/history.html
new file mode 100755 (executable)
index 0000000..190a07e
--- /dev/null
@@ -0,0 +1,1056 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
+<head>\r
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+       -->\r
+       <!-- $Id$ -->\r
+       <!-- $NucleusJP: history.html,v 1.12 2007/03/12 05:34:46 kimitake Exp $ -->\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+       <meta http-equiv="Content-Style-Type" content="text/css" />\r
+       <meta http-equiv="Content-Script-Type" content="text/javascript" />\r
+       <link rel="index" href="./index.html" />\r
+       <title>Nucleus - History</title>\r
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
+       <style type="text/css">\r
+               strong {\r
+                       font-weight: bold;\r
+               }\r
+               em {\r
+                       font-style: italic;\r
+               }\r
+       </style>\r
+       <script src="http://www.google.com/jsapi"></script>\r
+       <script type="text/javascript">\r
+               google.load("jquery", "1");\r
+               google.setOnLoadCallback(function() {\r
+                       $.getScript("devdocs/javascript/fontsizeChanger.js");\r
+               });\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="fontSizeChanger">\r
+       <a href="#top" id="f_small">小</a>\r
+       <a href="#top" id="f_medium">中</a>\r
+       <a href="#top" id="f_large">大</a>\r
+       </div>\r
+<div id="body">\r
+\r
+<h1>更新履歴</h1>\r
+\r
+<p>\r
+       <a href="index.html">Nucleusマニュアルに戻る</a>\r
+</p>\r
+\r
+<ul>\r
+       <li>\r
+               <strong>Nucleus v3.51 (November 1, 2009)</strong>\r
+               <ul>\r
+                       <li>FIX: fix warning caused by unreachable code in PDO (admun)</li>\r
+                       <li>FIX: fix typo in NP_Ping (admun)</li>\r
+                       <li>FIX: fix typo in XMLRPC api (admun)</li>\r
+                       <li>FIX: Bug in upgrade procedure where no check to verify new column does not currently exist before running the add query. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=19170" title="Upgrade Bug Report">this thread</a> (ftruscot)</li>\r
+                       <li>FIX: Bug where activation not completed. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=19176" title="Activation Bug Report">this thread</a> (ftruscot)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.5 (SVN)</strong>\r
+               <ul>\r
+                       <li>ADD: Comment template variable userwebsitelink which acts like userlink, but only shows web address and never email. (ftruscot)</li>\r
+                       <li>ADD: 2 Category List template variables, catiscurrent and its synonym, currentcat. (ftruscot)</li>\r
+                       <li>ADD: code to warn if using a non-mysql database handler and a plugin does not supportsFeature 'SqlApi'. (ftruscot)</li>\r
+                       <li>CHANGE: set php setting, display_errors, to 0 when not in debug mode to keep users with poorly configured servers from displaying errors on the page. (ftruscot)</li>\r
+                       <li>FIX: PHP5.3 warning caused by MANAGER::notify(). See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18997" title="php 5.3 Error">this thread</a>. (ftruscot)</li>\r
+                       <li>FIX: bookmarklet unaware of character set being used. Fix suggested by wgroleau. (ftruscot)</li>\r
+                       <li>FIX: super-admin disallowed from uploading files if not on any teamlists. (ftruscot)</li>\r
+                       <li>ADD: $CONF['ActivationDays'] variable to control days before activation expire. Manually set in config.php if needed (no admin interface). (ftruscot)</li>\r
+                       <li>CHANGE:Notify ITEM link after karma votes(ACTION.php). (shizuki)</li>\r
+                       <li>CHANGE:Remove bsendping col from nucleus_blog table(install.sql/upgrade3.5.php). (shizuki)</li>\r
+                       <li>ADD:sql_field_name function for backup class(mysql.php/pdo.php). (shizuki)</li>\r
+                       <li>FIX:Fix short open tag(NP_Ping.php). (shizuki)</li>\r
+                       <li>CHANGED: NP_Ping and related infrastructure changes. (admun)</li>\r
+                       <li>ADDED: upgrade code for 3.5 in upgrades folder. Includes notices about end of PHP4 support and info on 2 new plugins included in plugins folder. (ftruscot)</li>\r
+                       <li>CHANGED: modified upgrade functions to use 3 digit version indicators everywhere. i.e. 340 instead of 34. (ftruscot)</li>\r
+                       <li>CHANGED: increased length of displayname, mname, to 32 characters. (ftruscot)</li>\r
+                       <li>CHANGED: modified install.php and sql_* handlers to allow installation using PDO. Activation is manual and not intended for public consumption in 3.50. Only tested for pdo-mysql handler. (ftruscot)</li>\r
+                       <li>ADDED/CHANGED: extended sql_* api to cover all mysql_* functions used in core. Functions loaded from nucleus/libs/sql/ folder. See <a href="http://wakka.xiffy.nl/planning:3.50#mysql_api_warning" title="sql API">here</a>. (ftruscot)</li>\r
+                       <li>FIXED: atom.phpとxml-rss2.phpで_CHARSETをチェックして文字コード変換(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4376" target="_blank" class="postlink">Nicleus3.41 へアップグレード後 xml-rss2.php でエラー</a>)(きゃしゃ)</li>\r
+                       <li>CHANGED: SEARCH.php改良(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4370" target="_blank" class="postlink">&lt;%relevance%&gt;対応SEARCH.php</a>、<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=3824" target="_blank" class="postlink">検索結果の正確さ</a>)(きゃしゃ)</li>\r
+                       <li>CHANGED: _CHARSETチェックのときにstrtoupper(きゃしゃ)</li>\r
+                       <li>CHANGED: インストーラの文字化け対策部分をデフォルトで有効に。globalfunctions.phpの方は、状況に応じて。(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4385" target="_blank" class="postlink">インストール後管理画面は正常表示、サイトが真っ白</a>)(きゃしゃ)</li>\r
+                       <li>CHANGED: インストーラエラーページをUTF-8固定に。(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=25024#25024" target="_blank" class="postlink">3.41インストール->スキンエラー</a>(きゃしゃ)</li>\r
+                       <li>CHANGED: 言語ファイルの反映漏れ修正。ただし、言語ファイル読み込み前に表示される可能性のあるメッセージは定数定義前なのでそのまま(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=24903#24903" target="_blank" class="postlink">インストール後管理画面は正常表示、サイトが真っ白</a>)(きゃしゃ)</li>\r
+                       <li>FIXED: pingオプションのチェックボックス削除(きゃしゃ)</li>\r
+                       <li>FIXED: parsedincludeの無限ループ対策、NP_includespecialからの移植時仕様変更に伴うコード修正。(きゃしゃ)</li>\r
+                       <li>FIXED: karma通知修正(きゃしゃ)</li>\r
+                       <li>FIXED: catidのみがURLで指定された場合、blogidを補完する(<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=4417" target="_blank" class="postlink">ShowBlogsのページ送りにblogidの付加をするには?</a>)(きゃしゃ)</li>\r
+                       <li>ADDED: NP_Text plugin to core installation. Makes distribution of internationalised plugins easier. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=15005" title="forgotpassword">this thread</a>. (ftruscot)</li>\r
+                       <li>ADDED: links in plugins help of help.html to link to two main plugin repositories. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18214" title="forgotpassword">this thread</a>. (ftruscot)</li>\r
+                       <li>ADDED: selectSpecialSkinType() function to globalfunctions.php. (ftruscot)</li>\r
+                       <li>ADDED: Check in ADMIN.php pagehead() function to display alert if newer version is available. new function, getLatestVersion() in globalfunctions.php, and new files on nucleuscms.org, version_check.php, to serve latest version. (ftruscot)</li>\r
+                       <li>ADDED: skinvar for all skin types to display a sticky item from any blog anywhere. (ftruscot)</li>\r
+                       <li>REMOVED: check on canlogin during forgotpassword process. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18753" title="forgotpassword">this thread</a>. Suggestion by phillip_r. (ftruscot)</li>\r
+                       <li>ADDED: div with id of adminwrapper around contents of admin page for improved control of admin page look. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18551" title="adminwrapper">this thread</a>. Suggestion by monkeybrain. (ftruscot)</li>\r
+                       <li>ADDED: NP_SecurityEnforcer plugin to core installation. It can be set to enforce password length and complexity rules, as well as maximum failed login attempts. Put in plugin so can be superceded later by better techniques. (ftruscot)</li>\r
+                       <li>CHANGED: LoginSuccess event in globalfunctions.php to inlcude <i>username</i> in the data array to specify the login name entered by the user. (ftruscot)</li>\r
+                       <li>FIXED: backup.php, _backup_dump_structure() function, to use SHOW CREATE TABLE <i>name</i>, to generate table creation SQL. Adds ENGINE, AUTO_INCREMENT, and DEFAULT CHARSET. (ftruscot)</li>\r
+                       <li>ADDED: PrePasswordSet event in ADMIN.php to allow plugin to enforce any password length or complexity rules for improved security. (ftruscot)</li>\r
+                       <li>CHANGED: move send update ping option override to NP_Ping</li>\r
+                       <li>ADDED: Year-based archives and archivelists, adds archiveyearlist and otherarchiveyearlist skin vars (ftruscot)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.41(March 14, 2009)</strong>\r
+               <ul>\r
+                       <li>CHANGED: ドキュメントの文字サイズを可変に(jQuery使用)(character size of the document, variably via jQuery.) (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=89">#89(JP)</a>): metaWeblog.newPostにおけるコメント可否. (shizuki/NKJG)</li>\r
+                       <li>CHANGED: help.htmlのポップアップサイズ変更(Adjust popup window size for help.html). (shizuki)</li>\r
+                       <li>CHANGED: ブックマークレット差し替え(nucleus/libs/include/bookmarklet-add.template、bookmarklet-edit.template)(Bookmarklet use tab navigation)(shizuki)</li>\r
+                       <li>CHANGED: NP_SkinFilesオプション用言語定義追加(NP_SkinFiles option word update via language file)(shizuki)</li>\r
+                       <li>UPDATED: NP_SkinFiles 2.03に差し替え(code:yama/commit:shizuki)(NP_SkinFiles update to 2.03)(code:yama,katsumi/commit:shizuki)</li>\r
+                       <li>FIXED: 「General」カテゴリのUPDATE漏れ修正(install.php)(preinstall default category name is not localize)(shizuki)</li>\r
+                       <li>FIXED: When inclusion tried to do the special skin type by skin of error types, $skinid wasn't set.(yu/shizuki)</li>\r
+                       <li>FIXED: Reduce PHP Notices caused by undefined variables and wrong offsets (shizuki, kaigreve)</li>\r
+                       <li>FIXED: additional changes in the language files english.php and english-utf8.php to reflect modifications since version 3.30 (kaigreve)</li>\r
+                       <li>FIXED: SQL error in MEMBER::write() where mautosave not forced to be integer. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18575">Problem with 3.40</a>. (ftruscot)</li>\r
+                       <li>ADDED: debug info in System info to show if $CONF['ItemURL'] is broken in admin panel (admun)</li>\r
+                       <li>FIXED: Reorder the setting of config vars ($CONF) to avoid notices (should have no side effects)(kaigreve)</li>\r
+                       <li>FIXED: Avoid notices caused by explode because the string '\\' is not a part of the $val and no array is returned(kaigreve)</li>\r
+                       <li>FIXED: remove one redundant definition of the constant _MANAGER_PLUGINFILE_NOTFOUND(kaigreve)</li>\r
+                       <li>FIXED: bug in showlist.php for displaying plugin dependency. See <a href="http://forum.nucleuscms.org/viewtopic.php?t=18594">Manage Plugins error in Nucleus 3.40</a> (ftruscot, thanks ajmiller)</li>\r
+                       <li>CHANGED: Modify Fix SQL error when new blog add by shizuki, to give a default english value for category name, category desc, first item title, and first item body in case where user does not have updated language file. (ftruscot)</li>\r
+                       <li>FIXED: Fix SQL Error when new blog add. (shizuki)</li>\r
+                       <li>CHANGED: Mod Change link URI of 'help icon' to full URI (documentation/help.html to $CONF['AdminURL'].'documentation/help.html') (shizuki)</li>\r
+                       <li>ADDED: getTeamBlogs() method to MEMBER class to retrieve list of blogs to which a member has team rights (ftruscot)</li>\r
+                       <li>FIXED: rearrange english.php and english-utf8.php files so all new-to-3.40 contants are grouped together at top (ftruscot)</li>\r
+                       <li>FIXED: Add missing language item to english-utf-8.php (admun)</li>\r
+                       <li>FIXED: CONF['Self'] merging error in globalfunctions.php (admun)</li>\r
+                       <li>CHANGED: Comment count at items list display via 'sprintf()'. (shizuki)</li>\r
+                       <li>ADDED: instructions for manually adding .htaccess files to media and skins folder after upgrade. (ftruscot)</li>\r
+                       <li>FIXED: the unwished ping after adding an item to a new category (what you have written here: http://forum.nucleuscms.org/viewtopic.php?p=89142#89142)(shizuki)</li>\r
+                       <li>FIXED: Few hardcoded strings moved to langage file(shizuki)</li>\r
+                       <li>CHANGED: Ease the solution for the new member option for autosave draft(kaigreve)</li>\r
+                       <li>CHANGED: Move System overview in the menu of the admin area under the entry for the configuration (ADMIN.php)</li>\r
+                       <li>CHANGED: Shorten menu entry to 'System info' and correct 'enable' to 'enabled' (english.php)</li>\r
+                       <li>CHANGED: height of page class in help.html to avoid overlaps on long help topics. (ftruscot)</li>\r
+                       <li>ADDED: .htaccess file in skins/ and nucleus/libs/ to fight possible script execution due to certain apache configurations. (Code recommended by Katsumi, added to svn by ftruscot)</li>\r
+                       <li>ADDED: .htaccess file in media/ to fight possible script execution due to certain apache configurations. (Code recommended by Katsumi, added to svn by ftruscot)</li>\r
+                       <li>ADDED: New member option to decide whether the autosave draft function is used or not (kaigreve)</li>\r
+                       <li>CHANGED: Additional improvements and updates in devdocs and help.html (ftruscot)</li>\r
+                       <li>ADDED: Warning for PHP 4.x depreciated during upgrade(admun)</li>\r
+                       <li>ADDED: Documentation, as needed, for changes below. (ftruscot)</li>\r
+                       <li>ADDED: BLOG::readLogFromList() and BLOG::getSqlItemList() to allow using the core item display mechanisms for customized lists of items. Will be used primarily by plugins. (ftruscot)</li>\r
+                       <li>CHANGED: MEMBER::login() to add CustomLogin event. Provides hook for plugins to perform authentication from external sources. (ftruscot)</li>\r
+                       <li>ADDED: Upgrade scripts for version 3.40. Lengthen nucleus_template.tpartname column to 64. Lengthen nucleus_template_desc.tdname to 64. (ftruscot)</li>\r
+                       <li>ADDED: Warning for PHP 4.x depreciated (admun)</li>\r
+                       <li>FIXED: MySQL version check failure in install.php (admun)</li>\r
+                       <li>FIXED: bugs in last fix of directory traversal vulnerability in Nucleus media manager. Fix code providedby kmorimatsu inserted by ftruscot.</li>\r
+                       <li>FIXED: directory traversal vulnerability in Nucleus media manager. Fix code provided by kmorimatsu inserted by ftruscot.</li>\r
+                       <li>FIXED: cuser field of non-member comments being blanked out intermittently<a href="http://forum.nucleuscms.org/viewtopic.php?t=18059">Old comments from field is gone.</a> Caused by registration with names longer than 16 characters. Enforce 16 character limit in createaccount.php, ADMIN.php, ACTION.php (ftruscot)</li>\r
+                       <li>ADDED: Add delete permission check (katsumi/admun)</li>\r
+                       <li>ADDED: Add ATOM1.0 autodiscovery for default skin. (shizuki)</li>\r
+                       <li>FIXED: Fix short open tag on skins/default/show_benchmark.inc. (shizuki)</li>\r
+                       <li>FIXED: Fix broken XML for Skins. (shizuki)</li>\r
+                       <li>ADDED: <a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=3231">Japanese forum:Special skin parts are used as a skin part.</a> (Andy/shizuki)</li>\r
+                       <li>ADDED: The number of comments is indicated on the item list screen. <a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=2231">Japanese forum(The confirmation and the elimination which are a comment every item.)</a> (shizuki)</li>\r
+                       <li>ADDED: Automatic re loading after an item renewal. <a href="http://blog.bitocean.net/item/40/catid/2">Bibou-Nikki/Automatic re loading after an item renewal.</a> (shizuki)</li>\r
+                       <li>ADDED: Prevention of comment double contribution. <a href="http://blog.bitocean.net/item/35/catid/2">Bibou-Nikki/Prevention of comment double contribution.</a> (shizuki)</li>\r
+                       <li>ADDED: Addition of an item  The hack which checks a radio button of "of the date and time, designation" automatically if the item of the date is changed at the time of edit. <a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=2285">Japanese forum(Check box of "later, addition" and "of a time stamp, renewal")</a> (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=110">#110(JP)</a>): When an item is added by "new category", a SendPing event doesn't occur. (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=58">#58(JP)</a>): When database backup, table name and a column name are bound up with back quotat. (shizuki)</li>\r
+                       <li>CHANGED: Eliminate few hardcoded language (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=94">#94(JP)</a>): A plugin option isn't generated. (kimitake/shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=79">#79(JP)</a>): Permission setting of upload isn't effective. (shizuki/yu)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=77">#77(JP)</a>): [XHTML] When the attribute of the option is hidden,&lt;tr&gt; isn't output. (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=76">#76(JP)</a>): [XHTML] Validate admin-area. (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=67">#67(JP)</a>): Change isn't reflected on ValidateForm event. (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=107">#107(JP)</a>): When editing an item, time generation will be an error. (kotorisan/yu/shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=108">#108(JP)</a>): Pop-up, for if a character string is empty, nothing is indicated. (sato-na/shizuki)</li>\r
+                       <li>FIXED: Fix history. (shizuki)</li>\r
+                       <li>FIXED: "history.html" is XHTML 1.0 Strict. (shizuki)</li>\r
+                       <li>FIXED: (<a href="http://dev.nucleuscms.org/tracker/index.php?id=142&amp;do=details">#142</a><a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=97">#97(JP)</a>): Plugin API: Incorrect operation order. (shizuki/Andrew Black)</li>\r
+                       <li>ADDED: <a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=22675#22675">Add tool tip for "MEDIA" button</a> (shizuki/kyasya)</li>\r
+                       <li>CHANGED: make ItemVars case insentive to ease the usage (work with plugins that use the function doItemVar) (kaigreve)</li>\r
+                       <li>ADDED: new event in TEMPLATE.php called PreTemplateRead to allow plugin developers to change name of template being used. This is obscure and probably won't be publicized, but I need it for NP_MultiLanguage to allow mapping of templates depending on language being viewed, permitting translations of all parts of a template and localization of dates. (ftruscot)</li>\r
+                       <li>ADDED: three new events in BLOG.php called PreArchiveListItem, PreCategoryListItem, and PreBlogListItem to allow plugin developers to modify or add template variables to the ArchiveList Item, Category List Item and Blog List Item template fields (ftruscot)</li>\r
+                       <li>FIXED: fix redirect function in globalfunctions so that it does not strip out the permitted "*" character. See <a href="http://forum.nucleuscms.org/viewtopic.php?p=86007#86007">forum(Trying to get a create an account link)</a> (ftruscot)</li>\r
+                       <li>ADDED: add description of the doIf function to the plugin documentation (ftruscot)</li>\r
+                       <li>FIXED: fix description of if/else/endif skin variables to documentation, inlcuding ifnot, elseif, and elseifnot (ftruscot)</li>\r
+                       <li>ADDED: add description of charset skin variable to documentation. (ftruscot)</li>\r
+                       <li>ADDED: add global configuration, DefaultListSize, which sets and maintains a custom value for length of item/comment lists in the admin area (ftruscot)</li>\r
+                       <li>FIXED: fix content type of bookmarklet.php file to text/html to conform with other pages (ftruscot)</li>\r
+                       <li>ADDED: new event in createaccount.php called RegistrationFormExtraFields to allow fields from plugins onto registration form (ftruscot)</li>\r
+                       <li>FIXED: CONF['Self'] fix (admun)</li>\r
+                       <li>ADDED: Add a link to the front end that allows to add an item in a bookmarklet popup window (two new skinvars addlink and addpopupcode needed) (kaigreve)</li>\r
+                       <li>ADDED: add a cancel button to the bookmarklet add and edit forms (kaigreve)</li>\r
+                       <li>CHANGED: Move the submit button in the bookmarklet edit from to the end of the button bar (logical order) (kaigreve)</li>\r
+                       <li>ADDED: Add the possibility to move a published item back to drafts (kaigreve)</li>\r
+                       <li>ADDED: more and improved comments in classes NucleusPlugin, BACKUP, ITEM and ITEMACTIONS (kaigreve)</li>\r
+                       <li>CHANGED: Use ISO date for backup filename and add hour, minute and second  (kaigreve)</li>\r
+                       <li>CHANGED: Put backup functions in an own class Backup (kaigreve)</li>\r
+                       <li>FIXED: add default values for the parse_bloglist function to avoid warnings (kaigreve)</li>\r
+                       <li>FIXED: fix case sensitive function name createDraftFromRequest in class ACTION (admun)</li>\r
+                       <li>ADDED: add description of the doItemVar function to the plugin documentation (kaigreve)</li>\r
+                       <li>ADDED: add language file install_lang_english.php to install process (admun)</li>\r
+                       <li>ADDED: add option to install NP_Ping during installation (admun)</li>\r
+                       <li>FIXED: remove bug in the plugin api: function clearOptionValueCache hasn't worked correct with the getOption function (kaigreve)</li>\r
+                       <li>ADDED: add global configuration DebugVars which decides if unresolved Vars (SkinVars, TemplateVars, ItemVars) are shown on the blog (kaigreve)</li>\r
+                       <li>FIXED: Fix getNotifyFromMailAddress to use email field now that we've separated email/url fields (gregorlove)</li>\r
+                       <li>CHANGED: extend skinvar Bloglist with parameters to specify the sort order (kaigreve)</li>\r
+                       <li>ADDED: add comment URL and email to "edit comment" form and make them editable (gregorlove)</li>\r
+                       <li>ADDED: new event in ADMIN.php called TemplateExtraFields to allow plugin developers to add fields to templates. This should encourage plugin authors to make use of the core template storage to provide formatting for their output. This event just presents the extra fields on the template edit form and stores data entered there into the nucleus_template table. It is the responsibility of the plugin authors to use the template fields they add and to provide the variables used in those fields. Plugins should also document their variables and provide for a default, either in the code or through a plugin option. (ftruscot)</li> \r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=73">#73(JP)</a>): スキン読み込みの改良. (kotorisan/yu/shizuki)</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/index.php?do=details&amp;task_id=74">#74(JP)</a>): スキン編集画面の日本語化漏れ. (shizuki)</li>\r
+                       <li>CHANGED: プラグイン一覧画面の「入手元URL」を本家にあわせて表示しないようにした。</li>\r
+                       <li>CHANGED: スキンタイプ一覧のヘルプアイコンの位置を本家にあわせて名前の前に移動。</li>\r
+                       <li>CHANGED: 管理画面CSS差し替え(code:yama/commit:shizuki)</li>\r
+                       <li>FIXED: スキン差し替えによる問題修正(PHP4のみ。PHP5オンリーになったら戻す。SKIN.php、TEMPLATE.php)(shizuki)</li>\r
+                       <li>CHANGED: デフォルトスキンを日本語版に差し替え(coded:yama/commit:shizuki)</li>\r
+                       <li>CHANGED: バージョンチェックの飛び先を日本公式に変更(shizuki)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.31 SP3 (Dec 17, 2008)</strong>\r
+               <ul>\r
+                       <li>FIXED: Avoid directory traversal in media manager (kmorimatsu)</li>\r
+                       <li>FIXED: Security fix to avoid deletion of item by non-admin acount (kmorimatsu)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.31 SP2 (EUC-JP only) (September 26, 2008)</strong>\r
+               <ul>\r
+                       <li>FIXED: An XSS issue</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.31 SP1 (February 5, 2008)</strong>\r
+               <ul>\r
+                       <li>FIXED: An XSS issue</li>\r
+                       <li>FIXED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=82">#82(JP)</a>): fix &lt;%itemtitle%&gt; on COMMENT_HEADER COMMENT_BODY COMMENT_FOOTER (shizuki)</li>\r
+                       <li>CHANGED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=83">#83(JP)</a>): Change bookmarklet height. Add 50pix. (kmorimatsu)</li>\r
+                       <li>CHANGED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;id=84">#84(JP)</a>): To avoid showing ticket in the URL, redirect to pluginlist, instead. (kmorimatsu)</li>\r
+                       <li>ADDED: add <code>createaccount.html</code> with a redirect to <code>createaccount.php</code> for backward compatibility with the old location of the form</li>\r
+                       <li>CHANGED: protect the 'create account form' against abuse: show the form only if needed and add FormExtra (e.g. Captcha) and ValidateForm (to validate input) events (ftruscot and kaigreve)</li>\r
+                       <li>FIXED: bug in upgrade script (admun)</li>\r
+                       <li>CHANGED: update xmlrpc client to version 2.2, this version supports PHP 5.2.x (kimitake)</li>\r
+                       <li>CHANGED: use require instead of include for the file inclusion (kimitake)</li>\r
+                       <li>CHANGED: rollback benchmark default skin (admun)</li>\r
+                       <li>FIXED: possible security problem in NP_Ping (admun)</li>\r
+                       <li>ADDED: NP_Ping sends ping for future post via JustPosted event (admun)</li>\r
+                       <li>ADDED: JustPosted event (admun)</li>\r
+                       <li>ADDED: move weblogs.com ping function into plugin (admun)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.3 (May 1, 2007)</strong>\r
+               <ul>\r
+                       <li>ADDED: check cmail column to separate to URL and cemail when Nucleus upgrade to 3.3 or later. (kimitake/katsumi)</li>\r
+\r
+\r
+                       <li>\r
+                               ADDED: Serveral changes and fixes from Nucleus Japan (details in the log files of the <a href="http://sourceforge.net/svn/?group_id=66479">Nucleus repository</a> at sourceforge.net)\r
+                               <ul>\r
+                                       <li>ADDED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=68">#68(JP)</a>): Encrypted cookie key. (Katsumi)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=60">#60(JP)</a>): Item link in notification email is wrong. (shizuki)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=62">#62(JP)</a>): email address is not referred in &lt;%usermail%&gt;. (shizuki)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=66">#66(JP)</a>): Even if calling PostPluginOptionsUpdate, getOption does not returns correct value. (Katsumi)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=49">#49(JP)</a>): PLUGIN::getAllItemOptions does not work correctly. (NKJG)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=57">#57(JP)</a>): SQL error happens when updating plugin option. (Katsumi)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=56">#56(JP)</a>): When creating db backup, the key length drops (Katsumi)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=41">#41(JP)</a>): fixed dropped info during backing up (Katsumi)</li>\r
+                                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=40">#40(JP)</a>): fixed PostAddCategory event (Kimitake)</li>\r
+                                       <li>CHANGED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=48">#48(JP)</a>): Super-admin always can login to admin page (Kimitake)</li>\r
+                                       <li>ADDED: (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=45">#45</a>  from the Japanese Tracker): include code from NP_0TicketForPlugin in the core (Changes from Nucleus Japan)(Katsumi)</li>\r
+                               </ul>\r
+                       </li>\r
+                       <li>ADDED: Sanitize parameters such as $_GET and $_SERVER['REQUEST_URI'] etc. to avoid XSS (from Nucleus Japan)</li>\r
+                       <li>ADDED: new events for Media upload: PreMediaUpload and PostMediaUpload (kaigreve)</li>\r
+                       <li>ADDED: new skinvar bloglist (kaigreve)</li>\r
+                       <li>ADDED: new method for URL rewriting with the global variable virtualpath, new .htaccess file can be found in the folder extra/fancyurl-2, more information <a href="http://forum.nucleuscms.org/viewtopic.php?t=12241">forum(Another approach to Fancy URLs)</a> (kaigreve and Legolas)</li>\r
+                       <li>FIXED: allow + in email address, see <a href="http://forum.nucleuscms.org/viewtopic.php?t=14207">forum(Minor bug fix in globalfunctions.php)</a> (wgroleau)</li>\r
+                       <li>FIXED: XHTML compliance in default skin (admun)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=80&amp;do=details">#80</a>): Atom 1.0 support (rakaz)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=129&amp;do=details">#129</a>): Plugin API: SpamCheck event called from core. (rakaz)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=128&amp;do=details">#128</a>): Don't show DISALLOWED(XXXX) errors (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=127&amp;do=details">#127</a>): parse_commentform: double-escaped URLs (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=121&amp;do=details">#121</a>): backup fails when <code>$plugin-&gt;getTableList()</code> doesn't return an array (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=118&amp;do=details">#118</a>): Errors in default skin (legolas)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=119&amp;do=details">#119</a>): Added optional includeMode/includePrefix parameters to <code>parseFile()</code> (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=115&amp;do=details">#115</a>): Redundant database queries on member table (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=114&amp;do=details">#114</a>): Magic quotes not correctly undone when <code>magic_quotes_sybase</code> enabled (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=104&amp;do=details">#104</a>): Return to blogsettings - link missing on edit category</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=107&amp;do=details">#107</a>): Better path detection in install.php (dekarma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=106&amp;do=details">#106</a>): Make 'Log Out' link under Comment box work with Fancy URLs (Wendy Smoak)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=99&amp;do=details">#99</a>): Use workaround when the only installed MySQL PHP extension is mysqli (dekarma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=98&amp;do=details">#98</a>): More "Fatal error: Only variables can be passed by reference" occurrences on some installations (pete)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=23&amp;do=details">#23</a>): adding email/url + email field display in blog comment list (admun)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=12">#12</a>): item id and timestamp were not sent along with <code>GenerateURL</code> event when <code>itemlink</code> called from commentvars (karma)</li>\r
+                       <li>CHANGED: Now using XML-RPC for PHP (phpxmlrpc) v1.2.1</li>\r
+                       <li>FIXED: (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=97">#97</a>): file uploads didn't check <code>$_FILES['file']['error']</code> codes. (dekarma)</li>\r
+                       <li>CHANGED: Update user instruction for Blogger conversion tool</li>\r
+                       <li>ADDED: When an e-mail is provided in the comment-form it is validated. (TeRanEX)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?id=23&amp;do=details">#23</a>): Splitted the URL &amp; E-mail field in comments. (gRegor, ketsugi, Red Dalek, TeRanEX)</li>\r
+                       <li>ADDED: (bug 817364): delete member enhancement (admun)</li>\r
+                       <li>ADDED: Auto save draft (Legolas)</li>\r
+                       <li>ADDED: Custom skin parts (tutorio)</li>\r
+                       <li>ADDED: ヘルプファイルにスキン変数&lt;%charset%&gt;のヘルプを追加(add description of charset skin variable to documentation.) (shizuki)</li>\r
+                       <li>FIXED: ヘルプファイルの「if/else/endif」の項目を修正。「ifnot/elseif/elseifnot」を追加(fix description of if/else/endif skin variables to documentation, inlcuding ifnot, elseif, and elseifnot) (shizuki)</li>\r
+                       <li>ADDED: プラグインAPIドキュメントに「doIf()」メソッドの項目を追加(add description of the doIf function to the plugin documentation) (shizuki)</li>\r
+                       <li>CHANGED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=39">#39(JP)</a>): 管理領域のContent-Typeをtext/htmlのままに(reverted content type for admin area)(Kimitake)</li>\r
+                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=42">#42(JP)</a>): プリインストールされるATOMのスキンの「xml:lang」が「en-us」になっていたのを修正(atom feed template specifies xml:lang but it is en-us, it should be ja, in install.sql)(Kimitake)</li>\r
+                       <li>FIXED(JP): (<a href="http://nucleus-jp.sourceforge.jp/tracker/?do=details&amp;task_id=46">#46(JP)</a>: ドラフト保存されるアイテムの日付のフォーマットを修正(fixed date format for draft entry)(Kimitake)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.24 (November 11, 2006)</strong>\r
+               <ul>\r
+                       <li>FIXED: XSS issue (reported by <a href="http://www.jpcert.or.jp/">JPCERT/CC</a>).</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.23 (May 23, 2006)</strong>\r
+               <ul>\r
+                       <li>FIXED: Remote code execution vulnerability (reported by rgod).</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.22 (August 21, 2005)</strong>\r
+               <ul>\r
+                       <li>FIXED: Major security vulnerability in the phpxmlrpc library.</li>\r
+                       <li>FIXED: New NP_SkinFiles version, fixing a minor security issue. (rakaz)</li>\r
+                       <li>CHANGED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=17">#17</a>): An errormessage is now displayed when logon through loginform failed. (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=91">#91</a>): Initialize variables in MEMBER class (andrew)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=90">#90</a>): there was no plugin callback on member edits when the email address changed (andrew)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=90">#90</a>): when editing members other than yourself, you shouldn't be logged out (andrew)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=85">#85</a>): If both <code>itemid</code> and <code>catid</code> are specified in the URL, ignore <code>catid</code> if it doesn't match <code>itemid</code> (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=49">#49</a>): 'name clashes' warning on skin import no longer displayed when no clashes detected (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=67">#67</a>): Add resilency to upgrade scripts (Frankenstein)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=88">#88</a>): PHP5.1: "Fatal error: Only variables can be passed by reference" (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=87">#87</a>): Translate &amp; -&gt; &amp;amp; when links added via toolbar (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=42">#42</a>): <code>formatDate</code> didn't always use the correct timezone (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=43">#43</a>): Only load user language file when logged in (karma).</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=76">#76</a>): Disabling site blocked admin menu access (karma).</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=57">#57</a>): PostRegister event not fired from inside admin area.</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=58">#58</a>): images and popups were not in feeds. (karma)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=33">#33</a>): add item form invalid ticket error (admun)</li>\r
+                       <li>FIXED: Most buttons of the toolbar reset the scroll position of the textarea to the top in Firefox (leonbloy)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=64">#64</a>): Applications that use the metaweblogAPI, such as Ecto can now also access and edit the extended body (rakaz)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=63">#63</a>): _getArrayVal() always returned first element of array (rakaz)</li>\r
+                       <li>ADDED: add InitSkinParse event (rakaz)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=38">#38</a>): added alternative output for &lt;%title%&gt;, &lt;%itemtitle%&gt;, &lt;%previtemtitle%&gt; and &lt;%nextitemtitle%&gt; (rakaz)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=51">#51</a>): removed hardcoded charset declaration from the RSS 2 skin (rakaz)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=55">#55</a>): add &lt;%skinvar%&gt; variable that corresponds with _CHARSET (rakaz)</li>\r
+                       <li>ADDED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=24">#24</a>): add PostUpdateItem event (admun)</li>\r
+                       <li>FIXED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=48">#48</a>):  &lt;%if(nextitem)%&gt; and &lt;%nextlink%&gt; didn't use the timezone offset. (<a href="http://forum.nucleuscms.org/viewtopic.php?t=6371">Basic</a>)</li>\r
+                       <li>FIXED: "ADMIN.php line 5270" fatal error when plugin filename and plugin classname mismatch (Frankenstein)</li>\r
+                       <li>CHANGED (<a href="http://dev.nucleuscms.org/tracker/index.php?do=details&amp;id=16">#16</a>): Event <code>PreSkinItem</code> can now modify the skin contents; <code>PreComment</code> now knows the ItemID. (<a href="http://forum.nucleuscms.org/viewtopic.php?t=6266">suggested</a> by Andy)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.21 (June 30, 2005)</strong>\r
+               <ul>\r
+                       <li>FIXED: <a href="http://secunia.com/advisories/15852/">XML-RPC for PHP Unspecified PHP Code Execution Vulnerability</a></li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.2 (March 7, 2005)</strong>\r
+               <ul>\r
+                       <li>ADDED: <a href="http://wiki.gednet.com/NPSkinFiles">NP_SkinFiles</a> plugin installed on full install</li>\r
+                       <li>FIXED: Installing plugins through install.php failed (karma)</li>\r
+                       <li>FIXED: whitespace at start/end got trimmed on skin edit/import (karma)</li>\r
+                       <li>ADDED: <code>title</code>-attributes on inline/popup images (moraes)</li>\r
+                       <li>ADDED: New default skin (Ivan, hcgtv, moraes, ...)</li>\r
+                       <li>ADDED: fr 1081569, <code>&lt;%if(category,catid,1)%&gt;</code> support (moraes)</li>\r
+                       <li>ADDED: support for <code>rel="nofollow"</code> (Rakaz)</li>\r
+                       <li>FIXED: bug 1058978, subscription list of updated plugin showed the updated subscriptions while the old subscription-list was still in the database. Nucleus now gives a warning (TeRanEX)</li>\r
+                       <li>FIXED: bug 1083959, closed site still allowed posting comments (karma)</li>\r
+                       <li>FIXED: bug 1083971, editing blog settings was not possible on PHP versions &lt; 4.2.0 (floatval) (karma)</li>\r
+                       <li>FIXED: In v3.15, deleting an item via the bookmarklet failed (karma)</li>\r
+                       <li>ADDED: Support for <code>&lt;%blogsetting(short)%&gt;</code>, as suggested by caw (karma)</li>\r
+                       <li>FIXED: Default skin used <code>application/xml+rss</code> instead of <code>application/rss+xml</code>, causing RSS autodiscovery to fail. (karma)</li>\r
+                       <li>FIXED: Moved more hardcoded text into language files</li>\r
+                       <li>FIXED: Made it so malicious users cannot trick a logged in site member/admin into visiting a specifically crafted URL that performs some admin area task. (karma).</li>\r
+                       <li>FIXED: bug 976777, weblogs.com was not ping when posting draft (admun)</li>\r
+                       <li>ADDED: bug 1008171, cookie-prefix (karma)</li>\r
+                       <li>CHANGED: bug 1008175, move <code>getTemplate</code> into <code>MANAGER</code> class + some other performance tweaks (karma)</li>\r
+                       <li>ADDED: add plugin dependency check (admun)</li>\r
+                       <li>CHANGED: Sending out activation links rather than new passwords on new accounts, forgotten passwords, etc. (karma)</li>\r
+                       <li>ADDED: Plugins can now make text- and textarea-optiontypes readonly (TeRanEX)</li>\r
+                       <li>CHANGED: new plugin event <code>FormExtra</code> (for use with <code>ValidateForm</code>) (karma)</li>\r
+                       <li>CHANGED: better error handling when commenting. Errors now displayed together with comment form. (karma)</li>\r
+                       <li>CHANGED: actions (commenting, membermail, ...) can be done using any entry point, not just through <code>action.php</code> (karma)</li>\r
+                       <li>CHANGED: Added <code>$</code><code>Id$</code> info in sourcefiles (karma)</li>\r
+                       <li>CHANGED: PrePluginOptionsEdit-event now has an <code>extra</code>-field which can be used to add option-specific code to the page (TeRanEX)</li>\r
+                       <li>ADDED: new event, PrePluginOptionsUpdate, can be used by plugins to verify/modify the new value for an option (TeRanEX)</li>\r
+                       <li>ADDED: Plugins can now provide a documentation page, which is shown inside the admin area (TeRanEX)</li>\r
+                       <li>ADDED: Plugins can now limit values for an option to be only numeric (<code>datatype=numerical</code>) (TeRanEX)</li>\r
+                       <li>ADDED: OptionTop-methods, to let a plugin retreive an array of the x-highest (or lowest) values of an option (TeRanEX)</li>\r
+                       <li>ADDED: Plugins can now make specific options for items. These options can be edited directly from the item add or edit page (TeRanEX)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.15 (November 14, 2004)</strong>\r
+               <ul>\r
+                       <li>FIXED: Some XSS issues, as reported by Alexander Antipov</li>\r
+                       <li>FIXED: Validate data that is sent as HTTP headers (redirects etc) (karma)</li>\r
+                       <li>FIXED: bug 1029057, parsed include doesn't accept empty files (karma)</li>\r
+                       <li>FIXED: bug 1036849, 'relevance' listed in list of available skinvars, while it's a templatevar (karma)</li>\r
+                       <li>FIXED: It was possible to spoof the username on comments, even when "protect member names" was turned on. Reported by bigmouth. (karma)</li>\r
+                       <li>FIXED: bug 1025675, if(hasplugin) causes warnings in action log when plugin does not exist (karma)</li>\r
+                       <li>FIXED: bug 1008700, taking away admin attribute from a member was disallowed when that member did not have logon rights (karma)</li>\r
+                       <li>FIXED: bug 968925, member edit leak out repeat password box while it should be hidden (admun)</li>\r
+                       <li>FIXED: bug 933580, URLs in comments followed with a comma should not have the comma in the generated hyperlink (karma)</li>\r
+                       <li>FIXED: bug 1019584, separating search terms with a '+' character caused SQL errors (karma)</li>\r
+                       <li>FIXED: bug 1016217, superadmin should be allowed to edit all items/comments (karma)</li>\r
+                       <li>FIXED: bug 1019191, <code>&lt;%if(blogsetting,..)%&gt;</code> / <code>&lt;%if(category,...)%&gt;</code> broken on error pages (karma)</li>\r
+                       <li>FIXED: Made sure no code relies on the PHP5 setting <code>register_long_arrays</code> to be <code>On</code> (karma)</li>\r
+                       <li>FIXED: <code>Call to undefined function</code> when user specified a language in its profile (jef pober)</li>\r
+                       <li>FIXED: Quickmenu didn't show up after login from <code>index.php?action=showlogin</code> (karma)</li>\r
+                       <li>CHANGED: new plugin event <code>ValidateForm</code> (karma)</li>\r
+                       <li>CHANGED: Extra whitespace to make skin exports easier to read in text editors (karma)</li>\r
+                       <li>CHANGED: e-mail notifications are now sent as <code>utf-8</code> rather than <code>iso-8859-1</code> (karma)</li>\r
+                       <li>ADDED: Admin members can click the version number in the admin area to check for a newer version (karma)</li>\r
+                       <li>ADDED: <code>&lt;%if(admin)%&gt;</code> and <code>&lt;%if(admin,blogname)%&gt;</code> in skins (karma)</li>\r
+                       <li>ADDED: In the admin area, a list of all comments for a blog is now available (karma)</li>\r
+                       <li>ADDED: <code>ITEM::getitem</code> returns blogid, as suggested by leonbloy (karma)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.1 (July 28, 2004)</strong>\r
+               <ul>\r
+                       <li>FIXED: Nucleus v3.01 was missing a fix in <code>backup.php</code>, which could cause fulltext key info not to be backed up correctly</li>\r
+                       <li>ADDED: support for patch levels, so plugin API enhancements can be distributed to power users earlier (<a href="http://forum.nucleuscms.org/viewtopic.php?t=4142" title="More info...">suggested</a> by TeRanEX)</li>\r
+                       <li>FIXED: bug 974090, multiple identical SQL queries were executed when checking if a plugin is available (karma)</li>\r
+                       <li>FIXED: Default language wasn't always respected (fushimi)</li>\r
+                       <li>CHANGED: new bookmarklet style (TeRanEX / moraes)</li>\r
+                       <li>FIXED: After a karma vote, redirection to referer URL failed if <code>register_globals</code> is turned off (karma)</li>\r
+                       <li>FIXED: SQL Injection Vulnerability, reported by aCiDBiTS</li>\r
+                       <li>FIXED: bug 689468, moved PostAddComment from action.php to COMMENTS.php(admun)</li>\r
+                       <li>FIXED: bug 967580, Class variables were not explicitly defined in PHP classes (karma)</li>\r
+                       <li>FIXED: IE6 unreadable Admin menu textarea (admun)</li>\r
+                       <li>FIXED: Skin exports for skins containing CDATA sections (like the RSS feeds) caused the <code>skinbackup.xml</code> to contain invalid XML. (Import still worked, however) (karma)</li>\r
+                       <li>FIXED: German language file wrong translation (admun)</li>\r
+                       <li>CHANGED: replaced <code>split</code> by <code>preg_split</code> in the parser class. Should be faster according to PHP docs (karma)</li>\r
+                       <li>FIXED: documentation typo (admun)</li>\r
+                       <li>FIXED: PHP5: Install script failed to discover install path automatically (karma)</li>\r
+                       <li>FIXED: Skin parser no longer parses skinvars when they are inside a non-displayed <code>if</code>-section (karma)</li>\r
+                       <li>FIXED: bug 817361, prefix http:// to member's URL if missing (admun)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.01 (July 13, 2004)</strong>\r
+               <ul>\r
+                       <li>FIXED: PHP5: Links to plugin admin area broken (radekradek)</li>\r
+                       <li>FIXED: bug 966011, skins created with v2.0 could not be imported (karma)</li>\r
+                       <li>FIXED: Security issue spotted by rADo2</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.0 (May 30, 2004)</strong>\r
+               <ul>\r
+                       <li>FIXED: When adding a weblog, select globally defined default skin by default (TeRanEX)</li>\r
+                       <li>FIXED: CSS conflict in default skin (moraes)</li>\r
+                       <li>FIXED: ADMIN.php no-cache after doctype added to support dynamic content for plugins in admin area (rADo2)</li>\r
+                       <li>FIXED: vars4.1.0.php fixed a strange bug for some PHP installs having empty $_REQUEST[] (rADo2)</li>\r
+                       <li>FIXED: globalfunctions.php - added a flag preventing include of vars...php twice for custom install (rADo2)</li>\r
+                       <li>FIXED: install.php - added a flag preventing include of vars...php twice for custom install (rADo2)</li>\r
+                       <li>FIXED: install.php - installCustomSkins skinbackup.xml renamed (rADo2)</li>\r
+                       <li>FIXED: install.php - installCustomPlugs now correctly syncs plugin events (rADo2)</li>\r
+                       <li>FIXED: Forcing focus on add/edit window after closing media library (nakahara21)</li>\r
+                       <li>ADDED: <code>class</code> attributes on textareas that allow skins/templates to be edited (karma)</li>\r
+                       <li>FIXED: Documentation and errors now tell to chmod config.php to 444 instead of 644 (hcgtv)</li>\r
+                       <li>CHANGED: Admin area style power-up (Radek)</li>\r
+                       <li>FIXED: Install script used $PHP_SELF, which is not available when register_globals is off (nakahara21)</li>\r
+                       <li>FIXED; Skin import failed if there were CDATA sections (Nucleus Japan)</li>\r
+                       <li>FIXED: <code>undoMagic</code> choked on array variables (Nucleus Japan)</li>\r
+                       <li>FIXED: htmlspecialchars causes broken url like "&amp;amp;amp;" (Nucleus Japan)</li>\r
+                       <li>FIXED: PostAddCategory event was never called (Nucleus Japan)</li>\r
+                       <li>FIXED: PostAddCategory event was not called when creating a new weblog (Nucleus Japan)</li>\r
+                       <li>FIXED: &lt;%blogurl%&gt; problem on category lists (nakahara21)</li>\r
+                       <li>CHANGED: Took out the HTTP Authentication part for now (it has no real use yet, and caused problems when Nucleus is installed in a protected directory)</li>\r
+                       <li>FIXED: When the 'Allow login edit' option was disabled, the e-mail address was not checked for validity when a user edited his/her settings. This would cause an e-mail with new password to be sent out to an invalid address. (Frankenstein)</li>\r
+                       <li>FIXED: Some PHP files were missing the closing <code>?&gt;</code> tag (ikeizer)</li>\r
+                       <li>FIXED: Plugins were inable to delete options (leonbloy)</li>\r
+                       <li>FIXED: XML-RPC: <code>metaWeblog.newPost</code> fails when an empty array is passed as list of categories (caused problems with Ecto)</li>\r
+                       <li>FIXED: Eliminated 2 SQL queries on most requests.</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v3.0 RC (April 27, 2004)</strong>\r
+               <ul>\r
+                       <li>CHANGED: Labeled it v3.0, since users started believing "2.5 beta == 25 final"</li>\r
+                       <li>FIXED: XML-RPC: <code>metaWeblog.editPost</code> assigned the default category again when no categories were passed along (karma).</li>\r
+                       <li>FIXED: XML-RPC: <code>mt.getPostCategories</code> returned an invalid result (karma)</li>\r
+                       <li>CHANGED: On clean install, RSS and Atom feeds contain full items rather than excerpts only (karma)</li>\r
+                       <li>REMOVED: Clean installation does not include RSS 0.91 feed anymore. Only the RSS 2.0 and Atom 0.3 feeds are included (karma)</li>\r
+                       <li>ADDED: When a skin provides a preview thumbnail, it is displayed in the skin overview (include prefix required, 100x75 preview.png, preview-large.png). Also, when a readme.html file is present in the skin include dir, a link to that file is added (karma)</li>\r
+                       <li>CHANGED: Allowed skin names to have slashes (<code>/</code>) in them (karma)</li>\r
+                       <li>FIXED: When adding media in non-IE browsers, all text was removed</li>\r
+                       <li>FIXED: Wrong times displayed / 'no such item' errors when MySQL server and PHP server are in different timezones (karma)</li>\r
+                       <li>ADDED: Made sure language files for v2.5beta can be used with v2.5final without strange strings (e.g. _SETTINGS_EXTAUTH) showing up in the admin area (karma)</li>\r
+                       <li>FIXED: No CSS styles were applied on 'insert media' popup (karma)</li>\r
+                       <li>FIXED: Some more possible problems with URL linking in comments (karma)</li>\r
+                       <li>FIXED: In Opera, buttons on the extended area added text to the main body text instead (karma)</li>\r
+                       <li>CHANGED: Admin pages are being sent as <code>text/html</code> instead of <code>application/xhtml+xml</code> again, since it caused too much javascript problems. When <code>$CONF['debug']</code> is <code>1</code> however, the pages are still sent as <code>application/xhtml+xml</code> (karma)</li>\r
+                       <li>FIXED: <code>itemlink</code> in templatevars didn't include itemid when used on item skins (mas)</li>\r
+                       <li>FIXED: Errors when deleting plugins with options (Curtis)</li>\r
+                       <li>FIXED: &amp; not encoded in category names/descriptions in admin area (karma)</li>\r
+                       <li>ADDED: <code>hasplugin</code> option on <code>if</code> skinvars (Kazuhiko)</li>\r
+                       <li><del>ADDED: External Authentication (plugin contains authentication code) (Frankenstein)</del> <ins>(not in 3.0 final)</ins></li>\r
+                       <li><del>ADDED: HTTP Authentication (Frankenstein)</del> <ins>(not in 3.0 final)</ins></li>\r
+                       <li>FIXED: When using the JavaScript buttons to add images/bold text/... to the extended text area, the text was added to the main text body instead if JavaScript toolbar style was set to 'simple' (karma)</li>\r
+                       <li>FIXED: XML-RPC: Added <code>postid</code> in structs returned by <code>metaWeblog.getPost</code> and <code>metaWeblog.getRecentPosts</code> (karma)</li>\r
+                       <li>FIXED: XML-RPC: <code>metaWeblog.getRecentPosts</code> expected a <code>string</code> instead of an <code>int</code> for the <code>amountOfPosts</code> parameter. (karma)</li>\r
+                       <li>FIXED: convert linebreaks broke <code>\r\n</code> linebreaks (jmuto)</li>\r
+                       <li>FIXED: On <code>index</code> and <code>search</code> skinparts, <code>nextlink</code>/<code>prevlink</code> could not be used before a <code>blog</code> or <code>searchresults</code> skinvar was called (karma)</li>\r
+                       <li>FIXED: SQL errors when search query contained single quotes (<code>'</code>) (karma)</li>\r
+                       <li>FIXED: Backup did not store information about FULLTEXT keys. (karma)</li>\r
+                       <li>ADDED: Extended the <code>date</code> templatevariables with pre-defined formats <code>utc</code> and <code>iso8601</code> (needed for Atom syndication; karma)</li>\r
+                       <li>FIXED: super-admins that were not on a blog team did not see the categories when trying to add an item to that blog (karma)</li>\r
+                       <li>FIXED: <code>nextresults</code> and <code>prevresults</code> were listed as available skunvars, while they don't exist (karma)</li>\r
+                       <li>FIXED: XML-RPC library wrote <code>&lt;?phpxml version="1.0"?&gt;</code> as XML header (jmuto)</li>\r
+                       <li>FIXED: not longer showing comment form when comments disabled for blog (jmuto)</li>\r
+                       <li>CHANGED: Plugin options are no longer limited to 128 characters (karma)</li>\r
+                       <li>CHANGED: Exported skins are now saved as <code>skinbackup.xml</code> instead of <code>skindata.xml</code> to avoid confusion. (karma)</li>\r
+                       <li>ADDED: New plugin events <code>AdminPrePageHead</code>, <code>AdminPrePageFoot</code>, <code>PreSendContentType</code>, <code>QuickMenu</code>, <code>BookmarkletExtraHead</code> (karma)</li>\r
+                       <li>FIXED: Fix for bookmarklet, which failed in Opera (jmuto)</li>\r
+                       <li>FIXED: <code>nextitemtitle</code> and <code>previtemtitle</code> skinvars did not htmlencode their output (karma)</li>\r
+                       <li>CHANGED/ADDED: make all skinvars that insert links consistent. They can now all take a linktext parameter to insert a full link instead of a raw link. The <code>nextlink</code>/<code>prevlink</code> on search/index pages (introduced 2.5 beta) had to change for this. Skinvars that can take a linktext: <code>todaylink</code>, <code>archivelink</code>, <code>prevlink</code>, <code>nextlink</code> and <code>itemlink</code> (karma)</li>\r
+                       <li>FIXED: XML-RPC: <code>mt.setPostCategories</code> asumed that <code>isPrimary</code> was always present (karma)</li>\r
+                       <li>FIXED: Plugins that generate output when they are loaded can not longer break backups. (Xiffy)</li>\r
+                       <li>FIXED: The test that auto-disabled fancy URLs was incorrect, and also applied to top-level domains that use 3 characters (like .com) (karma)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v2.5 beta (October 11, 2003)</strong>\r
+               <ul>\r
+                       <li>ADDED: <code>if(previtem)</code>, <code>if(nextitem)</code> and <code>if(skintype,<em>typename</em>)</code> skinvars.</li>\r
+                       <li>FIXED: RSS conditional GET wasn't working correctly (Visa Kopu)</li>\r
+                       <li>ADDED: Templatevar <code>relevance</code> available when displaying search results (Xiffy)</li>\r
+                       <li>CHANGED: <code>nextlink</code> and <code>prevlink</code> skinvar now also available on <code>search</code> and <code>index</code> skins. (Xiffy)</li>\r
+                       <li>ADDED: Skinvars <code>nextitemtitle</code> and <code>previtemtitle</code> on <code>item</code> skins (Xiffy)</li>\r
+                       <li>FIXED: Upload did not notice duplicates correctly</li>\r
+                       <li>ADDED: XML-RPC: Support for <code>metaWeblog.newMediaObject</code> and <code>metaWeblog.getRecentPosts</code> methods</li>\r
+                       <li>ADDED: XML-RPC: Support for the <a href="http://www.movabletype.org/docs/mtmanual_programmatic.html">Movable Type API</a> (except for <code>mt.getTrackbackPings</code>)</li>\r
+                       <li>CHANGED: Fulltext search, prev/next links on search pages, ... (Xiffy)</li>\r
+                       <li>FIXED/CHANGED: Action log size drops back to 250 when more than 500 entries.</li>\r
+                       <li>FIXED: No more restrictions on category names</li>\r
+                       <li>ADDED: possibility to create <a href="http://nucleuscms.org/documentation/devdocs/custominstall.html">custom installs</a></li>\r
+                       <li>FIXED: XHTML admin documents now have a proper <code>xmlns</code> attribute set; <del>admin pages are now sent as <code>application/xhtml+xml</code> if the client browser accepts it.</del> <ins>Removed again in 3.5final</ins></li>\r
+                       <li>ADDED: Plugins can now make specific options for blogs, categories and members. These options can be edited directly from the blogsettings or member settings page.</li>\r
+                       <li>FIXED: It's no longer possible to select an item from an other weblog through <code>?itemid=</code> when there is a different <code>blogid=</code> parameter set in the request (or set using <code>selectBlog</code>)</li>\r
+                       <li>FIXED: Disallowed while trying to create a new category on item edit</li>\r
+                       <li>FIXED: Date/Time variables in date footer were not parsed</li>\r
+                       <li>FIXED: Adding an item while creating a new category prevented ping to be sent to weblogs.com</li>\r
+                       <li>FIXED: Right-click bookmarklet for IE (re-install to get it working with IE6)</li>\r
+                       <li>FIXED/CHANGED: hyperlink conversion in comments: ftp/http/mailto supported</li>\r
+                       <li>FIXED: spaces in between multiple notify e-mail addresses caused ar error message saying the e-mail address is invalid.</li>\r
+                       <li>FIXED: <code>archivedate</code> skinvar ignored the 'locale' parameter that was passed to it</li>\r
+                       <li>FIXED: <code>selectBlog</code> did not protect for changes in <code>?archivelist</code></li>\r
+                       <li>FIXED: <code>selectCategory</code> now takes a category id instead of a name (multiple categories can have the same name)</li>\r
+                       <li>CHANGED: Fancy URLs are only generated when <code>$CONF['Self']</code> does not end in <code>.php</code> (this avoids URLs like <code>index.php/item/95/item/94/member/1</code> when turning fancy URLs on without further configuration)</li>\r
+                       <li>CHANGED: Install script updates <em>config.php</em> automatically when it is writable</li>\r
+                       <li>CHANGED: When the content type of a skin is <code>application/xhtml+xml</code>, only send this to browsers that specify this type in their <code>HTTP_ACCEPT</code> header (otherwise, send <code>text/html</code> instead)</li>\r
+                       <li>CHANGED: More intelligent search keywords highlighting (multiple separate keywords etc), also available inside comment bodies now</li>\r
+                       <li>ADDED: Possibility to filter on filename in media library</li>\r
+                       <li>FIXED: <code>include('config.php')</code> caused problems when another <code>config.php</code> was in the PHP include path (nils bernhard)</li>\r
+                       <li>ADDED: LiveJournal conversion (moraes)</li>\r
+                       <li>FIXED: Karma Vote URLs used relative links to <code>action.php</code></li>\r
+                       <li>CHANGED: Support for PHP versions having <code>short_open_tag = Off</code> (Andrew Brampton/Terry Chay)</li>\r
+                       <li>ADDED: Plugin options can now also use a <code>textarea</code> type. (max. size for data is still 128 bytes though)</li>\r
+                       <li>FIXED: When unable to load a plugin, an error message is added to the actionlog</li>\r
+                       <li>FIXED: Not all messages sent to the actionlog actually appeared there</li>\r
+                       <li>ADDED: Made it possible to install more than one Nucleus installation in the same database (using a prefix to the tablenames)</li>\r
+                       <li>ADDED: Nucleus does not longer allow access to the Admin Area when files like <code>install.php</code>, <code>install.sql</code> or the <code>nucleus/upgrades</code> directory are still on the server.</li>\r
+                       <li>ADDED: <code>&lt;%member%&gt;</code> skinvar now also accepts <code>id</code> and <code>yourid</code> as parameter</li>\r
+                       <li>FIXED: JavaScript toolbar works better in Gecko-based browsers (Mozilla Firebird/Netscape 7)</li>\r
+                       <li>ADDED: <code>supportsFeature</code> method to plugin interface</li>\r
+                       <li>FIXED: Destination URL parameter on <code>membermailform</code> skinvar didn't work</li>\r
+                       <li>FIXED: Encoding of the window title of popup images (Osamu Higuchi)</li>\r
+                       <li>FIXED: Link at end of install sequence was pointing to install.php</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v2.0 Final (April 3, 2003)</strong>\r
+               <ul>\r
+                       <li>FIXED: renamed the <code>xmlrpc_encode</code> and <code>xmlrpc_decode</code> methods in <code>xmlrpc.inc.php</code>, avoiding naming conflicts on some PHP configurations that are compiled with XMLRPC support</li>\r
+                       <li>FIXED: restore did not work on some PHP configurations, and did not correctly recognize <code>application/x-gzip</code> encoding type</li>\r
+                       <li>ADDED: <code>if(onteam[,blogname])</code> skinvar</li>\r
+                       <li>ADDED: automatic warning when headers have already been sent, with filename and linenumber included</li>\r
+                       <li>ADDED: About 40 extra plugin events</li>\r
+                       <li>ADDED: Made <code>&lt;%member%&gt;</code> available on all skin parts, and added <em>yourname</em>, <em>yoururl</em>, ... parameters</li>\r
+                       <li>FIXED: plugin loading is now a little more robust (non-fatal errors in the plugin PHP file used to cause a fatal error afterwards)</li>\r
+                       <li>ADDED: extra variables inside popup code/image code/media code template-parts: <code>width</code>, <code>height</code>, <code>link</code> and <code>text</code></li>\r
+                       <li>ADDED: Extra optional parameter for <code>image</code> skinvar, indicating which information to insert on the page</li>\r
+                       <li>CHANGED: Marked the <code>imagetext</code> skinvar as deprecated (use <code>image(caption)</code> instead)</li>\r
+                       <li>CHANGED: Marked the <code>ifcat</code> skinvar as deprecated (use <code>if(category)</code> instead)</li>\r
+                       <li>CHANGED: Marked the <code>vars</code> skinvar as deprecated (if anyone needs a hidden 'itemid' formfield [are there?], the itemid skinvar can be used instead)</li>\r
+                       <li>ADDED: <code>doTemplateCommentsVar(&amp;$item, &amp;$comment)</code> method in plugin interface</li>\r
+                       <li>CHANGED: comments are now also parsed using the same method as skins and items, allowing plugins, includes and more to be used there as well</li>\r
+                       <li>FIXED: guests cannot longer place 'fake' comments (making it look as if a regsitered memeber made the comment)</li>\r
+                       <li>FIXED: item contents is no longer trimmed</li>\r
+                       <li>FIXED: Made install script look less messy</li>\r
+                       <li>ADDED: <code>selectItem($id)</code> method</li>\r
+                       <li>FIXED: Unable to disable comments through 'edit item'</li>\r
+                       <li>ADDED: Plugins: EditItemFormExtras event gets itemid as separate parameter</li>\r
+                       <li>FIXED: missing ; in presented new blog code</li>\r
+                       <li>FIXED: PHP 4.0.6 didn't show item/member/... lists on admin area (PHP bug)</li>\r
+                       <li>ADDED: Plugin Hook: BlogSettingsFormExtras</li>\r
+                       <li>FIXED: &lt;%if(blogsetting,bcomments,1)%&gt; skinvars were not working</li>\r
+                       <li>ADDED: &lt;%if(loggedin)%&gt; skinvars were not working</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v2.0 beta (January 18, 2003)</strong>\r
+               <ul>\r
+                       <li>FIXED: Highlighted text no longer has &lt;!--h--&gt; in it</li>\r
+                       <li>ADDED; Plugin hook: PostAuthentication</li>\r
+                       <li>ADDED: Plugin hooks PreAddItemForm, AddItemFormExtras and EditItemFormExtras</li>\r
+                       <li>CHANGED: Notifications emails (new comment, etc) are not sent to the person causing the notification (comment author)</li>\r
+                       <li>ADDED: plugins can access global variables <code>$currentTemplateName</code> and <code>$currentSkinName</code></li>\r
+                       <li>CHANGED: Spaces after commas in &lt;%image%&gt;, &lt;%popup%&gt;, &lt;%media%&gt; </li>\r
+                       <li>FIXED: HTML to Text conversion didn't always work</li>\r
+                       <li>ADDED: &lt;%date%&gt; templatevars extras (rfc822 &amp; rfc822GMT) (Xiffy)</li>\r
+                       <li>ADDED: ranges for &lt;%blog(...)%&gt; and &lt;%otherblog(...)%&gt; skinvars</li>\r
+                       <li>ADDED: templatevars &lt;%author(email)%&gt;, &lt;%author(url)%&gt; and &lt;%author(id)%&lt;</li>\r
+                       <li>CHANGED: Added info on new weblog creation (split up creation process into two steps)</li>\r
+                       <li>FIXED: Login screen after email address change did not work correctly</li>\r
+                       <li>ADDED: Plugin Hook: PrePluginOptionsEdit</li>\r
+                       <li>ADDED: Added a getMinNucleusVersion method to the plugin interface</li>\r
+                       <li>ADDED: PostPluginOptionsUpdate plugin event</li>\r
+                       <li>ADDED: Javascript toolbar: align left/center/right buttons (Irmo)</li>\r
+                       <li>ADDED: RSD skin/template</li>\r
+                       <li>ADDED: 'Fancy' URLs option &amp; support files. Allows for URLs like http://hostname/archive/1/2003-01-05 instead of http://hostname/index.php?blogid=1&amp;archive=2003-01-05</li>\r
+                       <li>ADDED: RSS 2.0 skin/template (Xiffy)</li>\r
+                       <li>ADDED: skinvar &lt;%skinname%&gt;</li>\r
+                       <li>ADDED: if/else in skins. parameters for 'if' are currently 'category' (=ifcat) or 'blogsetting/settingname' (settingname = columnname from database...)</li>\r
+                       <li>ADDED: Etag/If-None-Match support for xml-rss.php (needs some more work)</li>\r
+                       <li>FIXED: more friendly bookmarklet for Opera 6 users (all tabs are visible, editing through bookmarklet works)</li>\r
+                       <li>ADDED: on edit item, the post time can be changed (only if 'allow post to past' is enabled)</li>\r
+                       <li>ADDED: 'Allow Post to Past' option on weblog basis</li>\r
+                       <li>ADDED: IncludeMode and IncludePrefix settings in nucleus_skin_desc + interface to change these settings + user IncludePrefix while parsing includes.</li>\r
+                       <li>CHANGED: nucleusbutton skinvar now takes into account IncludeMode</li>\r
+                       <li>CHANGED: btimeoffset column is now DECIMAL instead of INT </li>\r
+                       <li>CHANGED: took away actionurl parameters from commentform and membermailform skinvars (it's a global setting now)</li>\r
+                       <li>ADDED: &lt;%set(property,value)%&lt; skin/template-var to set global parser properties. Only one option defined so far: 'IncludeMode'. Can be 'skindir' or 'normal' and affects the include/parseinclude/phpinclude skin/templatevars</li>\r
+                       <li>ADDED: &lt;%skinfile(filename)%&gt; skinvar (to be used on imported skins)</li>\r
+                       <li>ADDED: $CONF['SkinsURL'] and $DIR_SKINS (config.php)</li>\r
+                       <li>CHANGED: friendly names used on skin edit (instead of 'index', 'item' etc)</li>\r
+                       <li>ADDED: action url to global settings (action.php location)</li>\r
+                       <li>ADDED: $desturl and $actionurl parameters on membermailform skinvar</li>\r
+                       <li>ADDED: skin import/export class</li>\r
+                       <li>CHANGED: media library now works with multiple collections, of which one is private to the site member, and the rest is globally shared.</li>\r
+                       <li>CHANGED: base skin can now be changed (it's now a config setting). This skin is ONLY used in two cased: when all else fails, and when the selected skin does not have contents for the needed skinpart</li>\r
+                       <li>CHANGED: positive and negative karma votes are now kept separately, since that works better and is more flexible. The &lt;%karma%&gt; templatevar received an extra parameter to select which information to show</li>\r
+                       <li>ADDED: skinvars archivenext/archiveprev/archivetype</li>\r
+                       <li>CHANGED: skinvars nextlink/prevlink now also work on archive skins</li>\r
+                       <li>CHANGED: move item now also allows to choose a category</li>\r
+                       <li>CHANGED: new items can be added to other blogs also now</li>\r
+                       <li>FIXED: archivedate skinvar displaying wrong date</li>\r
+                       <li>FIXED: serverVar function was not working when using vars4.0.6.php</li>\r
+                       <li>ADDED: now also listing category in itemlist</li>\r
+                       <li>CHANGED: Admin Area now uses the Site Name instead of Nucleus</li>\r
+                       <li>CHANGED: admin.css and admin area: corrected h1, h2, h3 depth levels</li>\r
+                       <li>ADDED: batch operations</li>\r
+                       <li>FIXED: when language settings are changed, the new language is used immediately (only for global settings, not for member settings)</li>\r
+                       <li>CHANGED: archivelist query now uses the  SUBSTRING MySQL function instead of the YEAR/DAYOFMONTH/MONTH functions (caused trouble for some people)</li>\r
+                       <li>ADDED: maxlength attributes on forms</li>\r
+                       <li>CHANGED: commentlists: placed time/author in same table cell </li>\r
+                       <li>ADDED: extra convertor for Blogger blogs that use YACCS comments (exportable in CAIF format)</li>\r
+                       <li>FIXED: some possible security issues (thanks to Morgan Tocker)</li>\r
+                       <li>FIXED: shortening of strings does not corrupt HTML entities anymore (e.g. in RSS-feeds)</li>\r
+                       <li>CHANGED: links in comments are now handled differently. Part of the URL is now displayed instead of just http://.../</li>\r
+                       <li>ADDED: Opera version of bookmarklet</li>\r
+                       <li>ADDED: selectLanguage() function to force the use of a certain language file</li>\r
+                       <li>REMOVED: there was a plugin event AddItem which was actually not needed at all (wasn't included in the documentation too)</li>\r
+                       <li>ADDED: archivelist skinvars now takes an extra limit-parameter</li>\r
+                       <li>CHANGED: moved all forms which can be included through skinvar out of SKIN.php and into .template files in the nucleus/forms directory.</li>\r
+                       <li>FIXED: 'clone skin' did not copy contenttype</li>\r
+                       <li>FIXED: Errors in XML-RSS template (upgrading users might need to change this manually or by importing an updated skin)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v1.55 (August 26, 2002)</strong>\r
+               <ul>\r
+                       <li>ADDED: &lt;%archivedaylist%&gt; and &lt;%otherarchivedaylist%&gt; skinvars (to show archives by day instead of by month)</li>\r
+                       <li>FIXED: PHP error on createAccount through action.php</li>\r
+                       <li>ADDED: new parseFile-method available in index.php. Allows to parse non-blog pages with skinvars</li>\r
+                       <li>FIXED: editing comments with hyperreffed links</li>\r
+                       <li>ADDED: 'delete item' option on edit item, plus 'delete item' confirmation screens (also on bookmarklet)</li>\r
+                       <li>CHANGED: on multi-blog systems, the admin now only gets to see the blogs for which (s)he is on the team. All other blogs are available through an 'show all blogs...' link</li>\r
+                       <li>FIXED: link to recent items after weblogs.com ping was broken</li>\r
+                       <li>CHANGED: plugin event call 'PreAddComment' moved to immediately before the item is added to the database</li>\r
+                       <li>FIXED: tab-orders were not correct on multiple admin pages</li>\r
+                       <li>ADDED: &lt;%itemid%&gt; and &lt;%itemlink%&gt; available on item pages</li>\r
+                       <li>FIXED: install.php now works when the PHP option magic_quotes_runtime is enabled</li>\r
+                       <li>CHANGED: install.php gives an error when PHP is compiled without MySQL installed</li>\r
+                       <li>CHANGED: install.php automatically fills the 'mysql hostname' field when PHP option mysql.default_host is set.</li>\r
+                       <li>FIXED: greymatter convert was not putting a reference to the weblog in the comments table.</li>\r
+                       <li>CHANGED: added some linebreaks in the login screen of the admin area</li>\r
+                       <li>ADDED: new plugin events: PreAddItem, PreUpdateItem, PrepareItemForEdit, PreUpdateComment, PrepareCommentForEdit</li>\r
+                       <li>ADDED: JavaScript to hide empty fields when editing templates</li>\r
+                       <li>CHANGED: Admin area CSS now uses relative fontsizes and fontsize-keywords (also added trick to make IE5 get it right)</li>\r
+                       <li>FIXED: backup was broken :(</li>\r
+                       <li>CHANGED: replaced an SQL query that caused problems (NATURAL JOIN replaced by implicit inner join)</li>\r
+                       <li>ADDED: &lt;%self%&gt; available in categorylist templates</li>\r
+                       <li>ADDED: &lt;%itemtitle%&gt; skinvar available on item-skins</li>\r
+                       <li>FIXED: editing a comment you made in a blog that's not your own resulted in a 'disallowed action' error </li>\r
+                       <li>FIXED: plugin was listed twice in the list of available skinvars</li>\r
+                       <li>ADDED: &lt;%archivedate%&gt; skinvar on archive skins</li>\r
+                       <li>FIXED: admininstrators could not edit details of other members</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v1.5 (August 13, 2002)</strong>\r
+               <ul>\r
+                       <li>ADDED: Introducing plugins (define your own skinvars and templatevars, add event listeners, ...)</li>\r
+                       <li>CHANGED: simpler and more accessible default templates/skins</li>\r
+                       <li>FIXED: GreyMatter convert now works when the <code>asp_tags</code> option in PHP is enabled</li>\r
+                       <li>ADDED: title and authorName fields in Blogger API getRecentItems call</li>\r
+                       <li>ADDED: HTML label tags for radio buttons and checkboxes (this way you can click anywhere on the text instead of only on the radio button/checkbox itself)</li>\r
+                       <li>FIXED: deleting a comment you made in a blog that's not your own resulted in a 'disallowed action' error (thanks moraes)</li>\r
+                       <li>CHANGED: the place where comments are inserted can now be chosen from within the template. Just include &lt;%comments%&gt; in the ITEM templatepart whereever you want the comment count (or comments) to appear. In upgrading, the old ordening is imitated by adding '&lt;%comments%&gt;' to the end of the ITEM template part.</li>\r
+                       <li>CHANGED: now trimming parameters that were passed to skinvars/templatevars</li>\r
+                       <li>ADDED: &lt;%referer%&gt; skinvar, which inserts HTTP_REFERER</li>\r
+                       <li>ADDED: '- New Category -' can now be chosen on add/edit item (only for blog admins). A new category is then created, and the chance is given to edit the category details.</li>\r
+                       <li>ADDED: optional attributes for templatevars &lt;%time(format)%&gt;, &lt;%date(format)%&gt;, &lt;%syndicate_title(maxLength)%&gt;, &lt;%syndicate_description(maxLength)%&gt;</li>\r
+                       <li>ADDED: new user registrations show up in action log</li>\r
+                       <li>ADDED: new option to allow non-members to send messages (the membermailform)</li>\r
+                       <li>FIXED: when an admin edits an item written by someone else, and uploads an image, the image is now saved under the original authors media directory</li>\r
+                       <li>CHANGED: &lt;%author(realname)%&gt; in item templates now inserts the real name of the author</li>\r
+                       <li>FIXED: install.php now works when magic_quotes_gpc is disabled</li>\r
+                       <li>ADDED: New settings: PluginURL, MaxUploadSize, ProtectMemNames</li>\r
+                       <li>ADDED: hotlinks to the defined skinparts from the skin overview (also gives a good view on which skinparts have been defined and which have not been defined)</li>\r
+                       <li>ADDED: &lt;%smartbody%&gt; for item templates, which chooses between showing the body and extended part, based on the extended part being empty or not. Using this, the body text can be your full text, and the extended part could be seen as an 'introduction', which you want to show on the front page. (request from smarko)</li>\r
+                       <li>ADDED: &lt;%edit%&gt;, &lt;%editlink%&gt; and &lt;%editpopupcode%&gt; can be used in item templates (and in items themselves) to insert a link  to where the item can be edited/deleted. (default setting uses bookmarklet to do this). The edit links only get shown when the user is allowed to edit a certain item (blog admin or item author). </li>\r
+                       <li>FIXED: bookmarklet now works correctly when magic_quotes_gpc and register_globals are turned off </li>\r
+                       <li>ADDED: PHP and MySQL versions are listed during the installation proces, with warnings when those version numbers are lower than what Nucleus requires</li>\r
+                       <li>CHANGED: item parsing method changed, so it's more easily extensible. plugin, parsedinclude, include and phpinclude are now also allowed in some templates. Inside items, there are also 3 allowed variables: 'image', 'media' and 'popup'</li>\r
+                       <li>FIXED: image popups didn't work with register_globals disabled</li>\r
+                       <li>CHANGED: renamed method: getBlogidFromName -&gt; getBlogIDFromName (consistency)</li>\r
+                       <li>ADDED: method selectCategory($name)</li>\r
+                       <li>FIXED: Nucleus now handles data correctly when magic_quotes_gpc is disabled (solves some problems with template editing)</li>\r
+                       <li>CHANGED: categories in selection box are now sorted by name (tip from katatonik)</li>\r
+                       <li>FIXED: Not all tables got exported on backup :( (thanks Xiffy!)</li>\r
+                       <li>FIXED: add item form didn't handle keyboard shortcuts correctly (thanks Hop!)</li>\r
+                       <li>CHANGED: 'remember me' checkbox is now checked when the information was remembered from before (this way, the cookie gets set again and does not expire)</li>\r
+                       <li>FIXED: after a category got selected through skinvar parameters, skinvars applying to all categories also got applied only to the last category that was selected (thanks Xiffy!)</li>\r
+                       <li>ADDED: table nucleus_comment got an extra cblog column (redundant) to allow to find the blog that goes with a comment more easily.</li>\r
+                       <li>FIXED: email address checking routine (false email addresses like foo@@bar.com were allowed)</li>\r
+                       <li>CHANGED: New installations now get a robots.txt file (disallows karma voting/commenting/... by bots)</li>\r
+                       <li>CHANGED: JavaScript preview now shows image outlines and popup image links</li>\r
+                       <li>CHANGED: searchform now available on ALL skintypes</li>\r
+                       <li>FIXED: headers in globalfunctions/SKIN.php now sent _only_ when no other headers have been sent before. Should make including easier.</li>\r
+                       <li>CHANGED: RSS-auto-discovery tag in default skin</li>\r
+                       <li>CHANGED: formfields got labels (accessibility issue). Also access keys have been defined: L for login, 4 for Search (on windows, actions keys are used together with the ALT key)</li>\r
+                       <li>ADDED: left and right box buttons on JS toolbar</li>\r
+                       <li>FIXED: truncated entry when login is requested after adding (data didn't get passed on correctly)</li>\r
+                       <li>ADDED: &lt;%authorlink%&gt; to template vars for item templates (this one can take catid into account)</li>\r
+                       <li>ADDED: $CONF['Self'] =&gt; $CONF['ItemURL'], $CONF['IndexURL'], ... to optionally allow people to use different files for items/archives/...</li>\r
+                       <li>CHANGED: Now using mysql_fetch_assoc instead of mysql_fetch_array (efficiency)</li>\r
+                       <li>CHANGED: The &lt;%searchresults%&gt; and &lt;%othersearchresults%&gt; skintags got an extra parameter to limit the number of results (defaults to 50)</li>\r
+                       <li>FIXED: doError did not take into account chosen skin</li>\r
+                       <li>FIXED: Commentform not shown anymore for closed items (a message is shown instead)</li>\r
+                       <li>CHANGED: Removed all unneccessary javascript: links (deprecated)</li>\r
+                       <li>CHANGED: Media: Procentual width and height values are now allowed in image and inline constructs (e.g. &lt;%image(bla.gif|50%|50%|lala)%&gt;)</li>\r
+                       <li>FIXED: Blogger API: getPost wasn't returning category name</li>\r
+                       <li>FIXED: Blogger API: getRecentPosts wasn't converting linebreaks</li>\r
+                       <li>FIXED: surpressed warning on mysql_close</li>\r
+                       <li>FIXED: install-script now also accepts email addresses that contain uppercase characters</li>\r
+                       <li>FIXED: imported items did not show up in the weblog</li>\r
+                       <li>FIXED: blogger api &lt;title&gt; thingie didn't work</li>\r
+                       <li>CHANGED: Made all uploaded files be chmodded to 644</li>\r
+                       <li>FIXED: template cloning didn't clone all parts</li>\r
+                       <li>FIXED: After new user registration, there was a redirect to the members url (use 'desturl' now to indicate destination url)</li>\r
+                       <li>...and a lot of small changes</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v1.1 (April 30, 2002)</strong>\r
+               <ul>\r
+                       <li>Started assuming that at least PHP 4.0.5 is available. (for older PHP versions, some small code-changes should do the trick)</li>\r
+                       <li>Added bookmarklets for Mac/IE5 users and Mozilla. Also, made the title of the page also show up in the title field of the new item. Makes more sense. <small>(thanks to <a href="http://www.35mm.org">Ricardo Lamego</a>)</small></li>\r
+                       <li>Made the <a href="http://www.php.net/manual/en/language.variables.predefined.php" title="see PHP doc">predefined PHP variables</a> available in scripts called through &lt;%phpinclude(..)%&gt; <small>(thanks to <a href="http://www.polskaya.be/">Polskaya</a> for noticing the problem)</small></li>\r
+                       <li>Fixed: &lt;%additemform%&gt; and &lt;%nucleusbutton%&gt; didn't work when admin area was not in a dir named 'nucleus'</li>\r
+                       <li>Added: &lt;%sitevar(adminurl)%&gt; and shortcut &lt;%adminurl%&gt; to include the URL of the admin area</li>\r
+                       <li>Changed all references to nucleus.demuynck.org into references to <a href="http://nucleuscms.org/">nucleuscms.org</a></li>\r
+                       <li>Extra settings: cookie domain, cookie path, secure cookie (for https)</li>\r
+                       <li>Instead of stripping tags in comments, &lt; and &gt; are now replaced by their entities (&amp;lt; and &amp;gt;). This way, greater than and lower than signs can be used in comments <small>(inspiration by <a href="http://www.adfundum.be/">Steven Verbruggen</a>)</small></li>\r
+                       <li>Added charset to language files, so international character sets can be used when needed <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=56">forum</a>)</small></li>\r
+                       <li>Added an extra content-type attribute to skins, so the output type can be set correctly by Nucleus</li>\r
+                       <li>Removed the 'headlines' skin and templates. Don't want new users to get too confused.</li>\r
+                       <li>Notification emails now also get the senders display name</li>\r
+                       <li>All errors now handled by doError method in globalfunctions.php (makes it easier when you want to use your own error handler instead of the error skin)</li>\r
+                       <li>Site-members can now override the default site-language setting for the pages they visit</li>\r
+                       <li>Added skinvars &lt;%otherarchive%&gt; and &lt;%othersearchresults%&gt; for use on archive/search pages.</li>\r
+                       <li>Skinvar &lt;%searchform%&gt; now takes an optional parameter: blogname (for which you want a search form)</li>\r
+                       <li>Introducing categories! (new settings; new skinvars category, categorylist and ifcat; new template vars &lt;%category%&gt;, &lt;%catid%&gt; and &lt;%categorylink%&gt;; new optional category params for skinvars blog, otherblog, archive, otherarchive, archivelist, otherarchivelist)</li>\r
+                       <li>Fixed: error skin didn't get copied on skin cloning</li>\r
+                       <li>Even more new skinvars to make skinning easier: &lt;%todaylink%&gt;, &lt;%archivelink%&gt;, &lt;%prevlink%&gt; and &lt;%nextlink%&gt; <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=67">forum</a>)</small></li>\r
+                       <li>Fixed: The install script was giving warnings about uninitialized variables on some PHP configurations</li>\r
+                       <li>Moved version history to separate file</li>\r
+                       <li>Made upgrade scripts a little more robust and more verbose</li>\r
+                       <li>XML-RPC: <a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a> support</li>\r
+                       <li>XML-RPC: &lt;title&gt; and &lt;category&gt; tags can now be used with the Blogger API (similar to b2)</li>\r
+                       <li>Fixed problem with create account <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=92">forum</a>)</small></li>\r
+                       <li>Made it so Nucleus still works when using PHP &gt;4.1.0 with register_globals turned off, which is the default setting for new installations <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=95">forum</a>)</small></li>\r
+                       <li>Media library: popup now requests login when needed</li>\r
+                       <li>Media library: option to auto-prefix uploaded files with date (turned on by default)</li>\r
+                       <li>Backup/Restore: backup file name now has date + nucleus.sql renamed to install.sql + extra "I'm sure"-checkbox on restore to avoid errors <small>(<a href="http://forum.nucleuscms.org/viewtopic.php?t=100">forum</a>)</small></li>\r
+                       <li>Javascript toolbar: simpler version available that works in Mozilla</li>\r
+                       <li>Fixed: Closed items don't show 'no comments' link anymore <small>(forum)</small></li>\r
+                       <li>Fixed: Drafts items don't result in 'January 1970' entries in archivelist</li>\r
+                       <li>Fixed: Added &lt;image&gt; tag to xmlrss skin for new installs. It's required. (defaults to a nucleus logo, up to you to change it)</li>\r
+                       <li>Fixed: Error with restore (content with semicolons in it would not get restored)</li>\r
+                       <li>Added: Extra notification options</li>\r
+                       <li>Archives can now also be accessed by day, and an extra daylink template var is available in date headers</li>\r
+                       <li>Fixes in default skin</li>\r
+                       <li>As always, lots of small fixes &amp; code rewrites</li>\r
+                       <li>\r
+                               Changes (additions to and <del>deletions</del> from) language file:\r
+                               <ul>\r
+                                       <li>_SETTINGS_COOKIES_TITLE</li>\r
+                                       <li>_SETTINGS_COOKIEDOMAIN</li>\r
+                                       <li>_SETTINGS_COOKIEPATH</li>\r
+                                       <li>_SETTINGS_COOKIESECURE</li>\r
+                                       <li>_SKIN_UPDATED</li>\r
+                                       <li>_TEMPLATE_UPDATED</li>\r
+                                       <li>_CHARSET</li>\r
+                                       <li>_MEMBERS_DEFLANG</li>\r
+                                       <li>_MEMBERS_USESITELANG</li>\r
+                                       <li>_ADD_CATEGORY</li>\r
+                                       <li>_ADD_DRAFTNFUTURE</li>\r
+                                       <li>_ERROR_NOSUCHLANGUAGE</li>\r
+                                       <li>_ERROR_NOSUCHCATEGORY</li>\r
+                                       <li>_ERROR_DELETEDEFCATEGORY</li>\r
+                                       <li>_ERROR_DELETELASTCATEGORY</li>\r
+                                       <li>_ERROR_BADCATEGORYNAME</li>\r
+                                       <li>_ERROR_DUPCATEGORYNAME</li>\r
+                                       <li>_CONFIRMTXT_CATEGORY</li>\r
+                                       <li>_DELETED_CATEGORY</li>\r
+                                       <li>_LISTS_TYPE</li>\r
+                                       <li>_SKIN_TYPE</li>\r
+                                       <li>_YOURSITE</li>\r
+                                       <li><del>_LIST_COMMENT_HOST</del></li>\r
+                                       <li>_SETTINGS_MEDIA</li>\r
+                                       <li>_SETTINGS_MEDIAPREFIX</li>\r
+                                       <li>_SETTINGS_MEMBERS</li>\r
+                                       <li>_LOGIN_FORGOT</li>\r
+                                       <li>_TEMPLATE_CATEGORYLIST</li>\r
+                                       <li>_TEMPLATE_CATHEADER</li>\r
+                                       <li>_TEMPLATE_CATITEM</li>\r
+                                       <li>_TEMPLATE_CATFOOTER</li>\r
+                                       <li>_EBLOG_DEFCAT</li>\r
+                                       <li>_EBLOG_CAT_TITLE</li>\r
+                                       <li>_EBLOG_CAT_NAME</li>\r
+                                       <li>_EBLOG_CAT_DESC</li>\r
+                                       <li>_EBLOG_CAT_CREATE</li>\r
+                                       <li>_EBLOG_CAT_UPDATE</li>\r
+                                       <li>_EBLOG_CAT_UPDATE_BTN</li>\r
+                                       <li>_EBLOG_NOTIFY_ON</li>\r
+                                       <li>_EBLOG_NOTIFY_COMMENT</li>\r
+                                       <li>_EBLOG_NOTIFY_KARMA</li>\r
+                                       <li>_EBLOG_NOTIFY_ITEM</li>\r
+\r
+                               </ul>\r
+                       </li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v1.0 (March 6, 2002)</strong>\r
+               <ul>\r
+                       <li>Fixed: width &amp; height of &lt;%image()%&gt; construct</li>\r
+                       <li>Changed: windows in popup windows don't have a white border anymore <small>(<a href="http://www.nucleuscms.org/forum/viewtopic.php?t=3">see forum</a>)</small>\r
+                       </li>\r
+                       <li>Fixed: bug with single quotes in image/popup constructs <small>(<a href="http://www.nucleuscms.org/index.php?itemid=1812">see message</a>)</small></li>\r
+                       <li>Fixed: fatal error in 'send password' method <small>(thanks to <a href="http://modder.org/HANK!">HANK!</a>)</small></li>\r
+                       <li>Fixed: removed some illegal characters from code documentation since they caused parse errors on some systems <small>(thanks to Martin Belle-Isle and Rodrigo Moraes; see <a href="http://www.nucleuscms.org/forum/viewtopic.php?t=5">forum</a> for extra details)</small></li>\r
+                       <li>Refined: added a note about spaces to the install-script <small>(see <a href="http://www.nucleuscms.org/forum/viewtopic.php?t=14">forum</a>)</small></li>\r
+                       <li>Added: donate-link on admin page <small>(hey! it's free, I have the right to bug you with this sort of things ;-)</small></li>\r
+                       <li>Changed: it's not possible anymore to create a draft future item. That didn't make sense. You can now choose whether you want to publish a draft item either immediately or in the future when editing the item</li>\r
+                       <li>Changed: made it so that the 'disable comments' choice is not offered anymore on add/edit item form when commenting is disabled in the blogsettings</li>\r
+                       <li>Fixed: where possible, redirection after commenting is now done to the correct file (instead of index.php)</li>\r
+                       <li>Fixed: bug where only superadmins could change usernames/passwords, even if the corresponding option in the settings was set <small>(thx <a href="http://www.sneppah.be/">slekke</a>)</small></li>\r
+                       <li>Added: allowed variables for a skinpart now shown when editing skin</li>\r
+                       <li>Wrote new re-usable parser that does skin parsing in a way that is more flexible and less prone to errors.</li>\r
+                       <li>Changed: passwords now stored in encrypted form</li>\r
+                       <li>Optimizing: optimized some queries</li>\r
+                       <li>Added: &lt;%otherarchivelist(blogname,templatename)%&gt; in skins</li>\r
+                       <li>Added: Blogger Convert</li>\r
+                       <li>Added: "shared computer" checkbox on login. Checking this box will make your cookie expire at the end of the session (instead of taking the global site setting) <small>(see <a href="http://www.nucleuscms.org/forum/viewtopic.php?t=33">forum</a>)</small></li>\r
+                       <li>Added: "remember me" checkbox on comment forms for non-members</li>\r
+                       <li>Most language related things are now moved to language files. Now you can roll your own :)</li>\r
+                       <li>Added: optional parameters rows/cols in membermailform skinvar</li>\r
+                       <li>Added: skinvars: &lt;%phpinclude(file)%&gt; and &lt;%parsedinclude(file)%&gt;. &lt;%plugin%&gt; is now deprecated (in favor of phpinclude). The plugins directory should also not be used anymore (it'll get another function in a later version)</li>\r
+                       <li>Added: skinvar &lt;%self%&gt; which includes the filename of the currently executing script (index.php or whatever is sen in $CONF['Self'])</li>\r
+                       <li>Automatich hyperlink detection in comments now also recognizes comma's</li>\r
+                       <li>Added: selectSkin('name') and selectBlog('name') functions available for use in index.php</li>\r
+                       <li>Added: Small <a href="tips.html#backups">restore-guide</a> for the worst case scenario</li>\r
+                       <li>Added: A toolbar with markup buttons on add/edit item, plus option to disable it in the settings. When Mozilla is used, Nucleus tries to disable it automatically (since it doesn't work there anyway)</li>\r
+                       <li>Fixed: media were not expanded in extended text <small>(thx <a href="http://www.elrado.nl/">raoul</a>)</small></li>\r
+                       <li>Changed javascript code of popup help so it works better in Mozilla <small>(thanks to <a href="http://idontsmoke.co.uk/">Paul Sowden</a>)</small></li>\r
+                       <li>UI improvements</li>\r
+                       <li>New default skin (the old one was just plain ugly :-)</li>\r
+                       <li>Small bug-fixes</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v0.96 (December 13, 2001)</strong>\r
+               <ul>\r
+                       <li>Added: add-item-preview now also in admin area</li>\r
+                       <li>Added: action log</li>\r
+                       <li>Added: media library and file-upload</li>\r
+                       <li>Added: karma votes</li>\r
+                       <li>Added: Option to disable loginname/password changing by members</li>\r
+                       <li>Added: simple popup windows for image viewing</li>\r
+                       <li>Fixed: E-mail address validation check does not longer require addresses to be all lowercase</li>\r
+                       <li>Fixed: magic_quotes are now explicitly disabled, solving escaping problems (thanks to <a href="http://www.aroundmyroom.com/">Dennis Slagers</a>)</li>\r
+                       <li>Fixed: error handling when pinging weblogs.com</li>\r
+                       <li>Added: now also storing IP with comments (next to hostname)</li>\r
+                       <li>Added: IP banlist (to prevent nasty people from commenting/voting)</li>\r
+                       <li>Changed: Notification mails now include the item's title</li>\r
+                       <li>Changed: Weblogs can only be deleted by super-admins</li>\r
+                       <li>Changed: <a href="http://xmlrpc.usefulinc.com/">XML-RPC for PHP</a> v1.02</li>\r
+                       <li>Added: Small <a href="tips.html#filepermissions">guide to changing/setting filepermission</a> in docs</li>\r
+                       <li>Changed: Upgrade and conversion scripts now get packed separately</li>\r
+                       <li>Fixed: For error skins, the default skin is used now instead of 'default' (thanks to <a href="http://www.sneppah.be/">Slekke</a>)</li>\r
+                       <li>Fixed: The code to insert the Nucleus button was not XHTML (strict) compliant, oh my!</li>\r
+                       <li>GM Conversion: The conversion of {{popup}} now works correctly (and copies image files to the media dir)</li>\r
+                       <li>Fixed: a minor bug in XML-RPC call blogger.getUsersBlogs</li>\r
+                       <li>Fixed: a major bug in XML-RPC call blogger.getRecentPosts</li>\r
+                       <li>Fixed: problem concerning template editing and the XML-RPC call blogger.setTemplate</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v0.95 (October 10, 2001)</strong>\r
+               <ul>\r
+                       <li>Added: per-blog setting to enable/disable line break conversion</li>\r
+                       <li>Added: per-blog setting to send a ping to Userland (weblogs.com) when you update your blog. This way, you'll be able to end up in the weblogs.com update-list</li>\r
+                       <li>Switched to v1.01 of the XML-RPC for PHP libs (was v1.0)</li>\r
+                       <li>Upgrade scripts are available (for upgrade from versions &lt; 0.95 to v0.95)</li>\r
+                       <li>Added: &lt;%previtem%&gt; and &lt;%nextitem%&gt; can be used in item-skins</li>\r
+                       <li>Some changes in the default database dump</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v0.94 (September 27, 2001)</strong>\r
+               <ul>\r
+                       <li>Changed: 'Add Item' in admin-area now redirects to blog url (if available)</li>\r
+                       <li>Changed: <em>headlines.php</em> and <em>xml-rss.php</em> adapted to behave better in disabled-site situations</li>\r
+                       <li>Changed: &lt;%userlink%&gt; got smarter in recognizing e-mail addresses</li>\r
+                       <li>Added: tabindices in forms to make traversal with the TAB-button more natural</li>\r
+                       <li>Fixed: bookmarklet login did not pass data correctly</li>\r
+                       <li>Added: JavaScript to open links in new window (javascrip/opennew.js)</li>\r
+                       <li>Added: &lt;%year%&gt; and &lt;%month%&gt; in templates for archivelist-items</li>\r
+                       <li>CSS lightly changed because IE6 is a little bit more picky (which is actually a good thing)</li>\r
+                       <li>Fixed: popup code (JavaScript) for help-windows (didn't work ok in IE6)</li>\r
+                       <li>Added: Description or summary of what you are going to delete on the confirmation screens</li>\r
+                       <li>Added: Workaround (for advanced users) to get your archives into search engines (on tips &amp; suggestions page)</li>\r
+                       <li>Fixed: A bug in the XML-RPC server</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v0.93 (September 19, 2001)</strong>\r
+               <ul>\r
+                       <li>Added: friendly error message on error with nucleusdir definition in config.php</li>\r
+                       <li>Changed: call_user_func instead of eval</li>\r
+                       <li>Added: forms included by skin variables now have class="formfield" and class="formbutton" arguments, to allow more control on the layout</li>\r
+                       <li>Created a <a href="tips.html">'Tips &amp; Suggestions'</a> page next to this manual</li>\r
+                       <li>XML-RPC API: added nucleus.addDatedItem method</li>\r
+                       <li>XML-RPC API: added nucleus.editItem method</li>\r
+                       <li>XML-RPC API: added nucleus.getRecentItems method</li>\r
+                       <li>XML-RPC API: added nucleus.getItem method</li>\r
+                       <li>Added documentation for XML-RPC nucleus.* methods</li>\r
+                       <li>Fix: Search results didn't show the amount of comments. Now they do.</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v0.92 (September 18, 2001)</strong>\r
+               <ul>\r
+                       <li>GM conversion: {{linkmo and {{emailmo conversion now also works with PHP versions &lt; 4.0.4</li>\r
+                       <li>GM conversion: Fixed occasional JavaScript errors with {{linkmo and {{emailmo</li>\r
+                       <li>GM conversion: Fixed [read more] bug</li>\r
+                       <li>GM conversion: Extra intelligence in choosing URL or e-mail to save as userid for comments</li>\r
+                       <li>Added: ?archivelist can now be used without arguments to show the list of archives for the default weblog</li>\r
+                       <li>Fixed: Editing comments now does not allow the use of HTML anymore. The same checks as when adding new comments are performed on update attempts.</li>\r
+                       <li>Added: check to find out if update file is writable (on changing blogsettings and creating new weblog)</li>\r
+                       <li>Changed: hard returns in add item now get converted to line breaks (&lt;br /&gt;), Also, modified javascript code that handles preview to behave in the same way.</li>\r
+                       <li>Changed: &lt;%commentform%&gt; does not show user and userid fields for logged in users. Instead, it shows the name of the user.</li>\r
+                       <li>GM Conversion: {{popup command now also translated (will be converted into a link to the image, not into a popup window!)</li>\r
+                       <li>Updated: default templates (?archivelist)</li>\r
+                       <li>Changed: E-mail Address Validation Check</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v0.91 (September 15, 2001)</strong>\r
+               <ul>\r
+                       <li>Improved conversion for GreyMatter blogs. Special markup commands are now recognized. (thanks to <a href="http://www.elrado.nl/">Raoul</a> for pointing this out)</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v0.90 [beta 2 release] (September 14, 2001)</strong>\r
+               <ul>\r
+                       <li>an install-script is now available, no more messing around in shells</li>\r
+                       <li>created default skins/templates for a release version</li>\r
+                       <li>option to store 'last visit' cookie and to use 'new' indication on items</li>\r
+                       <li>?archivelist=.. request can now also be used with a blogid instead of a blog shortname</li>\r
+                       <li>forgotten password reminder</li>\r
+                       <li>Bookmarklet can be used without being logged in. A login prompt is shown in that case.</li>\r
+                       <li>When not being logged in to the admin area, requested actions are now completed after passing login information. Before, you would always end up at the action overview after passing login information, and your requested action would have gone lost.</li>\r
+                       <li>Super-admins now have access to all blogs, even if they are not on the team</li>\r
+                       <li>Logtext passed to bookmarklet now gets &lt;br /&gt; added before each newline</li>\r
+                       <li>Added little JavaScript to prevent submitting form data twice</li>\r
+                       <li>Sample plugin: google referer check</li>\r
+                       <li>Conversion script to import GreyMatter blogs included</li>\r
+                       <li>Removed 'assign comment to member' feature</li>\r
+                       <li>Added toolbar to popup help windows (because of the back/forward buttons)</li>\r
+                       <li>Added &lt;%blogurl%&gt; variable for item templates</li>\r
+                       <li>bug-fixes</li>\r
+                       <li>small esthetic changes</li>\r
+                       <li>...</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v0.80 [beta 1 release] (September 2, 2001)</strong>\r
+               <ul>\r
+                       <li>XML-RPC Interface implementing the blogger methods</li>\r
+                       <li>fixes and code-reorganisation</li>\r
+                       <li>popup-help on item pages</li>\r
+                       <li>bookmarklets/right click blogging</li>\r
+                       <li>the start of something that looks like documentation</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v0.70 [not released] (August 20, 2001)</strong>\r
+               <ul>\r
+                       <li>mySQL instead of XML</li>\r
+                       <li>extensive admin area</li>\r
+                       <li>'member' concept, including blog teams/admins/...</li>\r
+                       <li>rewrote most of the code</li>\r
+                       <li>skin format slightly changed</li>\r
+                       <li>almost ready for public release :)</li>\r
+                       <li>adding items with instant preview (when viewing the weblog)</li>\r
+                       <li>LOCALE used for time/date notations.</li>\r
+               </ul>\r
+       </li>\r
+       <li>\r
+               <strong>Nucleus v0.60 and earlier (since February 2001)</strong>\r
+               <br />\r
+               no history (XML versions with limited functions)\r
+       </li>\r
+</ul>\r
+\r
+</div>\r
+</body>\r
+</html>\r
diff --git a/utf8/nucleus/documentation/icon-help.gif b/utf8/nucleus/documentation/icon-help.gif
new file mode 100755 (executable)
index 0000000..12cabfd
Binary files /dev/null and b/utf8/nucleus/documentation/icon-help.gif differ
diff --git a/utf8/nucleus/documentation/icon-up.gif b/utf8/nucleus/documentation/icon-up.gif
new file mode 100755 (executable)
index 0000000..4e47be1
Binary files /dev/null and b/utf8/nucleus/documentation/icon-up.gif differ
diff --git a/utf8/nucleus/documentation/index.html b/utf8/nucleus/documentation/index.html
new file mode 100755 (executable)
index 0000000..10c69e6
--- /dev/null
@@ -0,0 +1,474 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
+       <head>\r
+               <!--\r
+                       Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+                       Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+                       This program is free software; you can redistribute it and/or\r
+                       modify it under the terms of the GNU General Public License\r
+                       as published by the Free Software Foundation; either version 2\r
+                       of the License, or (at your option) any later version.\r
+                       (see nucleus/documentation/index.html#license for more info)\r
+\r
+                       @license http://nucleuscms.org/license.txt GNU General Public License\r
+                       @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+               -->\r
+               <!-- $Id$ -->\r
+               <!-- $NucleusJP: index.html,v 1.7 2007/01/31 10:02:57 kimitake Exp $ -->\r
+               <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+               <title>Nucleus CMS マニュアル</title>\r
+               <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
+               <script src="http://www.google.com/jsapi"></script>\r
+               <script type="text/javascript">\r
+                       google.load("jquery", "1");\r
+                       google.setOnLoadCallback(function() {\r
+                               $.getScript("devdocs/javascript/fontsizeChanger.js");\r
+                       });\r
+               </script>\r
+       </head>\r
+       <body>\r
+               <div id="fontSizeChanger">\r
+               <a href="#top" id="f_small">小</a>\r
+               <a href="#top" id="f_medium">中</a>\r
+               <a href="#top" id="f_large">大</a>\r
+               </div>\r
+\r
+       <div id="body">\r
+\r
+               <div class="heading">\r
+                       Nucleus CMS マニュアル\r
+                       <i>(v3.4)</i>\r
+               </div>\r
+\r
+               <div class="note">\r
+                       <b>はじめに:</b>\r
+                       <ul>\r
+                               <li>このマニュアルは管理エリアにて使用しているポップアップヘルプ(<a href="help.html">help.html</a>)に記載されていない内容を収録しております。Nucleusの<a href="#installation">インストールガイド</a>も収録しておりますので参考にしてください。</li>\r
+                               <li>デベロッパーの方は、 <a href="devdocs/index.html">開発者向けマニュアル</a> を併せてご覧下さい。</li>\r
+                       </ul>\r
+               </div>\r
+\r
+               <h1><a name="toc"></a>目次</h1>\r
+\r
+               <ul>\r
+                       <li><a href="#about">Nucleus CMS とは</a></li>\r
+                       <li><a href="#license">GPLライセンスについて</a></li>\r
+                       <li><a href="#installation">インストールガイド</a></li>\r
+                       <li><a href="skins.html">スキンとテンプレートの編集(ページデザイン)</a> (別ファイル)</li>\r
+                       <li><a href="#security">セキュリティについて</a></li>\r
+                       <li><a href="#performance">パフォーマンスについて</a></li>\r
+               <!-- <li><a href="#import">Importing from other tools</a></li> -->\r
+                       <li><a href="#comments">コメント受付時のルール</a></li>\r
+                       <li><a href="#xmlrpc">XML-RPC インターフェイスについて</a></li>\r
+                       <li><a href="#trouble">困った時は (FAQ)</a></li>\r
+                       <li><a href="tips.html">Tips &amp; Suggestions</a> (別ファイル)</li>\r
+                       <li><a href="#known">現在指摘されている問題点</a></li>\r
+                       <li><a href="history.html">履歴</a> (別ファイル)</li>\r
+                       <li><a href="#credits">謝辞</a></li>\r
+               </ul>\r
+\r
+               <h1>Nucleus とは<a name="about" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+               <p>\r
+                       Nucleus とはコンテンツマネジメントシステム(Contents Management System : 略してCMS)ツールです。PHPで書かれており、blogサイト運営に強力に役立ちます。主な特徴は以下の通りです:\r
+               </p>\r
+\r
+               <ul>\r
+                       <li>自分のサーバで運用できる</li>\r
+                       <li>複数のblog設置が可能で単一ページに複数blog表示も可能</li>\r
+                       <li>プラグインによる機能拡張</li>\r
+                       <li>コメント投稿の標準装備</li>\r
+                       <li>自動過去ログ作成</li>\r
+                       <li>カテゴリ分け</li>\r
+                       <li>検索機能の標準装備</li>\r
+                       <li>複数人による記事投稿</li>\r
+                       <li>未来の日付での投稿</li>\r
+                       <li>草稿機能</li>\r
+                       <li>拡張性のある管理エリア</li>\r
+                       <li>画像などのファイル添付機能</li>\r
+                       <li>ページデザインのフルカスタマイズ</li>\r
+                       <li>スキンのインポート/エクスポート</li>\r
+                       <li>コメント悪用者のブロック</li>\r
+                       <li>RSS 自動作成</li>\r
+                       <li>インストールが簡単</li>\r
+                       <li>バックアップが簡単</li>\r
+                       <li>XML-RPC インターフェイス ( <a href="http://plant.blogger.com/api/">Blogger API</a> / <a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a> / <a href="http://www.movabletype.org/docs/mtmanual_programmatic.html#xmlrpc%20api">Movable Type API</a> 採用)</li>\r
+                       <li>XHTML 準拠</li>\r
+                       <li>Blogger と GreyMatter blogsからのコンバートツール</li>\r
+                       <li>...</li>\r
+               </ul>\r
+\r
+               <p>\r
+                       Nucleusのインストールには以下の環境が必要です: <small>(不明な点はサーバ管理者にお尋ね下さい)</small>\r
+               </p>\r
+\r
+               <ul>\r
+                       <li><a href="http://jp.php.net/manual/ja/">PHP</a> (バージョン 4.0.6 以降)</li>\r
+                       <li><a href="http://dev.mysql.com/doc/mysql/ja/">MySQL</a> データベース (バージョン 3.23.38 以降)</li>\r
+                       <li>デザインのカスタマイズをする場合は、<acronym title="Hypertext Markup Language">HTML</acronym> と <acronym title="Cascading Style Sheets">CSS</acronym> の基礎知識</li>\r
+               </ul>\r
+\r
+\r
+\r
+               <p>\r
+                       Nucleus はサイト構築にあたって痒いところに手が届くように設計されています。HTMLに関する知識が全くなく、簡単にblogサイトを持ちたい人は インストール不要のホスティング型のblogサービス(<a href="http://dir.yahoo.co.jp/Computers_and_Internet/Internet/Free_Services/Diaries/">Yahoo! JAPANの該当カテゴリ</a>参照)を利用した方が良いかもしれません。\r
+               </p>\r
+\r
+\r
+\r
+\r
+               <p><a name="license"></a></p>\r
+               <h1>ライセンスについて <a name="copyright" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+               <p>\r
+                       Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+                       <br />\r
+                       Copyright (C) 2002-2007 The Nucleus Group\r
+               </p>\r
+\r
+               <p>このプログラムはフリーウェアです。\r
+               フリーソフトウェア財団(the Free Software Foundation)が公表したGNU一般公共使用許諾(GNU General Public License)の\r
+               「バージョン2」或いはそれ以降の各バージョンの中からいずれかを選択し、\r
+               そのバージョンが定める条項に従ったうえで、本プログラムの再配布・改変を認めています。</p>\r
+\r
+               <p>このプログラムがご自身の使用目的に合ったものであれば幸いです。\r
+               しかしながら 、商品性および特定目的に対する適合性に関する黙示的な保証を含み、\r
+               いかなる保証もいたしません。\r
+               詳細につきましてはGNU 一般公有使用許諾書をお読みください。</p>\r
+\r
+               <p>このプログラムと併せて<a href="../../license.txt">GNU General Public Licenseのコピー</a>\r
+               をお受け取りのはずかと思いますが、受取られていない方は「Free Software\r
+               Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA」までその旨をお知らせ下さい。</p>\r
+\r
+               <p>\r
+                       このソフトウェアを所有することは、これらの条件に同意することを意味します。これらの条件に同意されない方は、所持するこのソフトウェアのコピーを削除してください。\r
+               </p>\r
+\r
+\r
+               <h1>インストールガイド <a name="installation" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+               <div class="note">\r
+                       <b>注意:</b> 旧バージョンをすでにご使用の方は、Nucleus Webサイトの<a href="http://japan.nucleuscms.org/upgrade.php">アップグレードガイド</a>の方をご覧下さい。\r
+               </div>\r
+\r
+               <p>\r
+                       ほんの数ステップでインストールは完了します。手順は以下の通り:\r
+               </p>\r
+\r
+               <h2>1. 圧縮ファイルの解凍</h2>\r
+\r
+               <p>\r
+                       ダウンロードしたパッケージファイルを解凍します。生成されるディレクトリ構成は以下のようになっているかをご確認下さい。(*はディレクトリ以下にファイルがある事を意味します)\r
+               </p>\r
+\r
+               <table id="files_index">\r
+                       <tr>\r
+                               <th>/*</th><td>(サイト表示用メインファイル)</td>\r
+                       </tr><tr>\r
+                               <th>/nucleus/*</th><td>(サイト管理用ファイル)</td>\r
+                       </tr><tr>\r
+                               <th>/nucleus/javascript/*</th><td>(javascripts スクリプト)</td>\r
+                       </tr><tr>\r
+                               <th>/nucleus/libs/*</th><td>(Nucleus のコアライブラリ)</td>\r
+                       </tr><tr>\r
+                               <th>/nucleus/language/*</th><td>(言語ファイル)</td>\r
+                       </tr><tr>\r
+                               <th>/nucleus/plugins/*</th><td>(プラグインファイル)</td>\r
+                       </tr><tr>\r
+                               <th>/nucleus/xmlrpc/*</th><td>(XML-RPC インターフェイス用ファイル)</td>\r
+                       </tr><tr>\r
+                               <th>/nucleus/documentation/*</th><td>(説明書)</td>\r
+                       </tr><tr>\r
+                               <th>/nucleus/styles/*</th><td>(管理エリア専用cssファイル)</td>\r
+                       </tr><tr>\r
+                               <th>/nucleus/images/*</th><td>(管理エリア専用画像ファイル)</td>\r
+                       </tr><tr>\r
+                               <th>/nucleus/forms/*</th><td>(入力フォーム部品ファイル)</td>\r
+                       </tr><tr>\r
+                               <th>/extra/*</th><td>(fancy URL用ファイルなど特殊なファイル)</td>\r
+                       </tr><tr>\r
+                               <th>/skins/*</th><td>(スキンファイル [読込み時にも使用])</td>\r
+                       </tr><tr>\r
+                               <th>/media/*</th><td>(添付ファイル [インストール時は空])</td>\r
+                       </tr>\r
+               </table>\r
+\r
+               <div class="note">\r
+                       <b>補足:</b>\r
+                       <ul>\r
+                               <li> 英語バージョンは一部の環境において正常に解凍できないとの報告があります。ファイルサイズが0バイトでないことを確認してください。</li>\r
+                               <li>/nucleus/forms/ ディレクトリにあるファイルの拡張子はすべて「.template」です。<br />\r
+                               ファイル名が長いため拡張子の一部がカットされている場合がありますので確認してください。</li>\r
+                       </ul>\r
+               </div>\r
+\r
+               <h2>2. サーバに転送</h2>\r
+\r
+               <p>\r
+                       FTPソフトを使ってサーバに全部のファイルを転送します。拡張子が.phpのファイルは必ずASCIIモードで転送してください。モードを間違えると動作しません。\r
+               </p>\r
+\r
+               <h3>パーミッションの変更(やらなくてもOK):</h3>\r
+\r
+               <ol>\r
+                       <li>\r
+                               この段階で <em>config.php</em> のパーミッションを <strong>666</strong>に変更しておくと、後のインストール手順を減らす事ができます。この手順をスキップした方は手動で <em>config.php</em> を編集するだけですのでどちらでも構いません。 (パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)\r
+                       </li>\r
+                       <li>\r
+                               画像など添付ファイルを使用される予定のある方は、mediaディレクトリを作成してこのディレクトリのパーミッションを書き込み可能に変更してください。書き込み可能にしておかないとアップロードが正常に行えません。通常は <strong>777</strong> かと思います(パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)。<br />(root 権限をお持ちの場合は、ディレクトリを <tt>httpd</tt> プロセスが動作しているユーザに <tt>chgrp</tt> してください。通常は <tt>httpd</tt> もしくは<tt>nobody</tt> で、ディレクトリは <tt>chmod 755</tt> になるでしょう。)\r
+                       </li>\r
+                       <li>\r
+                               ファイル編集に SkinFiles プラグインをお使いになる場合は、/skins/ ディレクトリ以下にあるすべてのファイルとディレクトリのパーミッションを変更する必要があるでしょう。ファイルの編集を可能にするには、ファイルのパーミッションは <strong>666</strong> にしておくことになるでしょう(パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)。新しいファイルやディレクトリを作成できるようにするためには、親ディレクトリのパーミッションを <strong>777</strong> にしておくことになるでしょう。\r
+                       </li>\r
+               </ol>\r
+\r
+\r
+               <h2>3. install.phpにアクセス</h2>\r
+\r
+               <p>\r
+                       ブラウザを開いてサーバに転送したinstall.phpにアクセスします。URLは下記のようになります。(<i>www.yoursite.com</i> と <i>yourpath</i>の部分は読み替えてください)\r
+               </p>\r
+\r
+               <pre>   http://www.yoursite.com/yourpath/install.php</pre>\r
+\r
+               <p>\r
+                       表示されたページに必要入力事項を入力します。あらかじめ自動検知して入力済の部分がありますが確認をお願いします。送信後に次に行う手順が表示されますのでそれに従って作業してください。(最後にいくつかのファイルを手動でサーバから削除する作業が必要ですのでお忘れなく。)\r
+               </p>\r
+\r
+               <div class="note">\r
+                       <b>注意:</b> <i>install.php</i> にアクセスした際、「If you see this text in your browser...」というテキストが表示されたり、 install.phpのダウンロードが促されたりした場合は、そのサーバではphpスクリプトは動作しません。当然、残念ながらphpスクリプトであるNucleusを運用することができません。\r
+               </div>\r
+\r
+               <h2>4. 完了</h2>\r
+\r
+               <p>\r
+                       インストールが完了したらすぐにトップページにアクセスすることができます。インストール完了画面の一番下にリンクが自動表示されていますのでジャンプして確認してみてください。\r
+               </p>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+               <h1>セキュリティについて <a name="security" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+               <h2>mySQL のパスワード</h2>\r
+\r
+               <p>\r
+                       NucleusはphpスクリプトからmySQLデータベースにアクセスしますので、phpスクリプト内にmySQLパスワードを書き込んでおく必要があります。 複数ユーザーで使用するサーバの場合は100%安全ではないことをご了解下さい。また、ログイン名とログインパスワードを盗まれる可能性もあることもお知りおきください。phpスクリプトに重要な情報を埋め込んで使用する事の是非について調べたい方は詳しい方におたずね下さい。\r
+               </p>\r
+\r
+               <p>\r
+                       この危険性はデータベースを使用するすべてのphpスクリプトに共通する問題です。通常はユーザー側で解決できる問題ではありません。100%安全ではないと言うことを念頭に置いておいて下さい。\r
+               </p>\r
+\r
+               <h2>クッキー</h2>\r
+\r
+               <p>\r
+                       Nucleus ではログイン情報の保持にクッキーを使用しています。クッキーが盗まれ誰かにログインされる危険性があります。 クッキーを覗いただけではパスワードは推測できません <small>(実際にはパスワードは暗号化して格納しています)</small> が、残念ながら、盗んだクッキーを利用してログインユーザーを偽装することが技術的に可能ではあります。\r
+               </p>\r
+\r
+               <h2>メディアディレクトリ</h2>\r
+\r
+               <p>\r
+                       添付ファイルを使用する際はメディアディレクトリのパーミッションを777にする必要があります。777にするという事は、そのサーバ上にいる<b>誰もが</b>そのディレクトリを操作できる権限を持つという事です。しかしながら、オンラインでPHPスクリプトからファイルをアップロードするためにはこの設定は必須です。代替案はありません。\r
+               </p>\r
+\r
+\r
+\r
+\r
+\r
+               <h1>パフォーマンスについて <a name="performance" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+               <p>\r
+                       ほかのweblogツールとは異なり、Nucleusではあらゆる表示ページをサーバ上に保存しません。アクセスがあったURLを元にデータを呼出しその都度ページを生成して表示するという方法を採っています(動的ページ生成)。\r
+               </p>\r
+\r
+               <p>\r
+                       この仕組みが原因でトラブルが起きる事はまずありません。1秒あたりものすごい数のアクセスのある大規模なサイトであれば動作に問題があるかもしれませんが、今のところはよくわかっていません。そこそこ大きなサイトで、1つのNucleusで30以上のblogを運用しているサイトでも特に問題点はないという報告を受けていることをご紹介しておきます。\r
+               </p>\r
+\r
+\r
+\r
+\r
+<!--\r
+<h1>Importing From Other Tools <a name="import" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+Nucleus contains some conversion scripts that allow you to import the data from your 'old' weblog tool into your Nucleus weblog. No data is destroyed during this process.\r
+</p>\r
+\r
+<p>\r
+More information is available on the <a href="http://www.nucleuscms.org/convert.php">Nucleus website</a>. At the time of release, the only available conversion tools are those for Blogger and GreyMatter blogs.\r
+</p>\r
+-->\r
+\r
+\r
+               <h1>コメント受付時のルール  <a name="comments" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+               <p>\r
+                       Nucleus では、コメントの性質を考えて以下のルールを設けています:\r
+               </p>\r
+\r
+               <ul>\r
+                       <li>90字を越える連続した半角の英数字記号の投稿を禁止 (レイアウトが崩れるため) </li>\r
+                       <li>コメント文は3文字以上であること</li>\r
+                       <li>コメント文は5,000文字以下であること</li>\r
+                       <li>ゲストの名前は2文字以上であること </li>\r
+                       <li>ゲストの名前やe-mail欄は引用符、改行使用禁止 </li>\r
+                       <li>コメント本文の3つの連続改行を1つの改行に置換 (見映え優先)</li>\r
+                       <li>HTML タグは使用不可能</li>\r
+                       <li>左右の余分なスペースは削除</li>\r
+                       <li>URL はリンクテキストを短縮した上で自動リンク</li>\r
+               </ul>\r
+\r
+               <p>\r
+                       これらのルールを変更したい場合はコアファイルの書き換えが必要となります。\r
+               </p>\r
+\r
+\r
+\r
+\r
+\r
+\r
+               <h1>XML-RPC インターフェイス <a name="xmlrpc" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+               <div class="note">\r
+                       Nucleusの XML-RPC インターフェイスにつきましては下記URL参照:\r
+                       <br />\r
+                       <b>http://www.yourserver.com/yourpath/nucleus/xmlrpc/server.php</b>\r
+               </div>\r
+\r
+               <p>\r
+                       <a href="http://www.xmlrpc.com/">XML-RPC</a> とは、XMLを利用してデータを読み書きする規格です。難しく聞こえるかもしれませんが、このXML-RPCという規格を組み込んでいれば他のツールを使ってデータの読み書きが可能になるという事だけ覚えておいてください。\r
+               </p>\r
+\r
+               <p>\r
+                       現在の所、<a href="http://plant.blogger.com/api/">Blogger API</a>、<a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a>と<a href="http://www.movabletype.org/docs/mtmanual_programmatic.html#xmlrpc%20api">Movable Type API</a>の3つの規格を充足しています。この規格を使用した記事投稿ツールに興味のある方は、 <a href="http://www.cweblogs.com/wbeditor/">WB Editor</a> (Windows版:日本語対応) または <a href="http://www.kung-foo.tv/ecto/">Ecto</a> (MacOS版:日本語対応不明) を使ってみてください。\r
+               </p>\r
+\r
+               <p>\r
+                       このXML-RPC インターフェイスの呼出し方法につきましては、開発者向けドキュメントにて解説しています。 <!-- a href="http://nucleuscms.org/download.php">こちらからダウンロード</a>するか、 <a href="http://nucleuscms.org/documentation/devdocs/xmlrpc.html">オンラインで</a>ご覧下さい。 -->\r
+                       <a href="./devdocs/xmlrpc.html">Nucleus - XML-RPC インターフェイス</a>をご覧下さい。\r
+               </p>\r
+\r
+\r
+\r
+               <h1>困った時は (FAQ) <a name="trouble" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+               <p>Nuleusについて良く聞かれる質問をFAQとしてまとめました。質問される前にご一読下さい。大概のケースでは解決できるのではないでしょうか。\r
+               </p>\r
+\r
+               <div class="faq">\r
+                       <div class="question">このようなエラーが表示されるのですが: <q>Cannot send headers. Headers already sent...</q></div>\r
+                       <div class="answer">\r
+                               <code>config.php</code>の冒頭と末尾に空白(スペース)が入っている場合によく起こります。<tt>&lt;?</tt> の前、あるいは <tt>?&gt;</tt>よりも後にスペースが挿入されていないかどうか確認してください。このスペースを削除するとエラーは解消されます。また、同様に言語ファイルやインストールしているプラグインのファイルについても同じ事が起きますので確認してみてください。\r
+                       </div>\r
+               </div>\r
+\r
+               <div class="faq">\r
+                       <div class="question">インストール時にinstall.phpにアクセスするとダウンロードを促されるのですが。</div>\r
+                       <div class="answer">そのサーバはPHPプログラムに対応していません。残念ながらそのサーバでNucleusを運用することはできません。</div>\r
+               </div>\r
+\r
+               <div class="faq">\r
+                       <div class="question">トップページにアクセスすると「Connection Error」と表示されました。なぜですか?</div>\r
+                       <div class="answer">\r
+                       Nucleusがデータベースサーバにアクセスできないことを意味しています。<i>config.php</i>の最初で定義しているデータベース接続情報が正確かどうかをもう一度確認してみてください(パスワードがxxxxxxのままというケースがよくあります)。 また、本当にmySQLサーバがダウンしているのが原因かもしれません。\r
+                       </div>\r
+               </div>\r
+\r
+               <div class="faq">\r
+                       <div class="question">更新記録ファイルに更新情報が記録されないのですが。</div>\r
+                       <div class="answer">\r
+                               更新記録ファイルを使うためにはファイルのパーミッションの適切な設定が必要です。またblog設定にて設定する前にこのファイルを置いておく必要があります(空のファイルを作成してアップロードを先にしてください)。この更新記録ファイルのパーミッションは666、このファイルがあるディレクトリは755としてください。 (パーミッションの変更方法につきましては<a href="tips.html#filepermissions">パーミッションの変更ガイド</a>を参照してください)\r
+                       </div>\r
+               </div>\r
+\r
+               <div class="faq">\r
+                       <div class="question">XML-RPC インターフェイスを有効にしたくないのですが。</div>\r
+                       <div class="answer">xmlrpc/ ディレクトリを削除するだけでOKです。何も問題はありません。</div>\r
+               </div>\r
+\r
+               <div class="faq">\r
+                       <div class="question">RSSの吐出しをしたくないのですが。</div>\r
+                       <div class="answer">xml-rss.php ( xml-rss2.php , rsd.php ) を削除して、念のために「xmlrss」(「feeds/rss20」)という名前のスキン/テンプレートを削除してください。</div>\r
+               </div>\r
+\r
+\r
+               <h1>現在指摘されている問題点 <a name="known" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+               <p>制限事項は以下の通りです:\r
+               </p>\r
+\r
+               <ul>\r
+                       <li>このリリース時点においては、Nucleus 3.0への公式なログ移行ツールはありません。今後のログ移行ツールの情報は<a href="http://nucleuscms.org/convert.php">ログ移行ツール情報(英語:最新情報)</a> (<a href="http://japan.nucleuscms.org/convert.php">ログ移行ツール情報(日本語)</a>)に掲載していきます。</li>\r
+                       <li>Ctrl + Shift + A ショートカットキーは ICQ/Trillian と衝突します。</li>\r
+                       <li>サーバのPHPの設定がセーフモードonの場合、添付ファイルの使用時に問題が生じます。(画像ファイルのサイズが自動判定できない、アップロードがうまくいかない、など) <br />*あらかじめmediaディレクトリに「1」、「2」など記事投稿者の数だけ数字のディレクトリを作成しておいて書き込み可能にしておくことで回避できます。</li>\r
+                       <li>RSSの表示が乱れることがあります。(特殊文字変換が原因。&amp;amp; が &amp;amp;amp; となるなど)</li>\r
+                       <li>blog設定で入力するメールアドレス欄の登録の上限は255バイトです。ですから、たくさんのメールアドレスを登録することはできません(件数ではなく合計文字数です)。</li>\r
+                       <li>Mozilla系のブラウザではプレビュー機能がうまく動作しません。</li>\r
+                       <li>Internet Explorer 6 で記事の投稿直後にたまにブラウザが落ちることがあります。ブラウザが落ちても記事の投稿は反映されています。(このトラブル報告から時間が経っているので解決していればよいのですが...)</li>\r
+               </ul>\r
+\r
+\r
+\r
+               <h1>謝辞 <a name="credits" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+               <p>これまでの開発の陰には以下の方々の協力があったことを忘れてはなりません。どうかご一読を。</p>\r
+\r
+               <h2>作者</h2>\r
+\r
+               <ul>\r
+                       <li>Wouter Demuynck</li>\r
+               </ul>\r
+\r
+               <h2>コアファイル改良</h2>\r
+\r
+               <ul>\r
+                       <li>Andy Matsubara氏</li>\r
+                       <li>Armon Toubman氏</li>\r
+                       <li>Edmond Hui氏</li>\r
+                       <li>gRegor alias gregorlove氏</li>\r
+                       <li>Kai Greve alias kg氏</li>\r
+                       <li>Joel Pan alias ketsugi氏</li>\r
+                       <li>Kimitake氏</li>\r
+                       <li>Legolas氏</li>\r
+                       <li>Niels Leenheer alias rakaz氏</li>\r
+                       <li>Rodrigo Moraes氏</li>\r
+                       <li>Jeroen Budts氏</li>\r
+                       <li>Appie Verschoor氏 (全文検索)</li>\r
+                       <li>その他たくさんの方々... (<a href="history.html">開発履歴</a>をご覧下さい)</li>\r
+               </ul>\r
+\r
+               <h2>ライブラリなど</h2>\r
+\r
+               <ul>\r
+                       <li>Jeff MacMichael氏(NP_SkinFiles プラグイン)</li>\r
+                       <li>Ivan Fong氏、Moraes氏、Hcgtv氏(Nucleus 3.2 標準スキン)</li>\r
+                       <li>各種プラグイン作者の方々</li>\r
+                       <li>言語ファイルを提供してくださった方々 (<a href="http://nucleuscms.org/languages.php">NucleusのWebサイトにて言語ファイルのダウンロードができます</a>)</li>\r
+                       <li>ロゴを作成してくださったRodrigo Moraes氏</li>\r
+                       <li>RSS 2.0 スキン作成された <a href="http://www.xiffy.nl">Xiffy</a>氏</li>\r
+                       <li>XML-RPC インターフェイス 部分に使用した <a href="http://phpxmlrpc.sourceforge.net/">'XML-RPC for PHP'</a> (from <a href="http://www.usefulinc.com/">Useful Inc.</a>)</li>\r
+                       <li>バックアップ/リストア部分の開発の元にさせていただいた <a href="http://phpbb.sourceforge.net/">phpBB</a> </li>\r
+                       <li>即時プレビューのJavaScript コード の元にさせていただいたコードを書いた <a href="http://www.mijnkopthee.nl/">Mijn Kop Thee</a>氏 <small>(dutch)</small> と <a href="http://www.milov.nl/">milov.nl</a>氏</li>\r
+                       <li>管理エリアで地球アイコンを使用させていただいている <a href="http://www.matterform.com/qbullets/legend.html">QBullets</a></li>\r
+               </ul>\r
+\r
+               <h2>感謝</h2>\r
+\r
+               <p>\r
+               Nucleusが今日に至るのも、また、このほかのたくさんの方々の支援に支えられているからです。御礼申し上げます。</p>\r
+\r
+               <ul>\r
+                       <li>NucleusのWebサイトにて<a href="http://nucleuscms.org/donators.php">寄付者のリスト</a>を掲示しております。</li>\r
+                       <li><a href="http://forum.nucleuscms.org/groupcp.php?g=3">フォーラムを取り仕切ってくださっている方々</a> や <a href="http://forum.nucleuscms.org/memberlist.php?mode=posts&amp;order=DESC">フォーラムに来てくださっている方々</a>にも厚く御礼申し上げます。</li>\r
+               </ul>\r
+\r
+       </div>\r
+\r
+       </body>\r
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/documentation/pics/chmod_menu.png b/utf8/nucleus/documentation/pics/chmod_menu.png
new file mode 100755 (executable)
index 0000000..7ffc079
Binary files /dev/null and b/utf8/nucleus/documentation/pics/chmod_menu.png differ
diff --git a/utf8/nucleus/documentation/pics/chmod_window.png b/utf8/nucleus/documentation/pics/chmod_window.png
new file mode 100755 (executable)
index 0000000..c29b35f
Binary files /dev/null and b/utf8/nucleus/documentation/pics/chmod_window.png differ
diff --git a/utf8/nucleus/documentation/pics/screen4.png b/utf8/nucleus/documentation/pics/screen4.png
new file mode 100755 (executable)
index 0000000..70fc433
Binary files /dev/null and b/utf8/nucleus/documentation/pics/screen4.png differ
diff --git a/utf8/nucleus/documentation/pics/screen5.png b/utf8/nucleus/documentation/pics/screen5.png
new file mode 100755 (executable)
index 0000000..25c32ff
Binary files /dev/null and b/utf8/nucleus/documentation/pics/screen5.png differ
diff --git a/utf8/nucleus/documentation/pics/skinsandtemplates.png b/utf8/nucleus/documentation/pics/skinsandtemplates.png
new file mode 100755 (executable)
index 0000000..73b1625
Binary files /dev/null and b/utf8/nucleus/documentation/pics/skinsandtemplates.png differ
diff --git a/utf8/nucleus/documentation/skins.html b/utf8/nucleus/documentation/skins.html
new file mode 100755 (executable)
index 0000000..554ba03
--- /dev/null
@@ -0,0 +1,567 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
+<head>\r
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+       -->\r
+       <!-- $Id$ -->\r
+       <!-- $NucleusJP: skins.html,v 1.5 2006/07/12 07:11:46 kimitake Exp $ -->\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+       <title>Nucleus - スキンとテンプレートについて</title>\r
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
+       <script src="http://www.google.com/jsapi"></script>\r
+       <script type="text/javascript">\r
+               google.load("jquery", "1");\r
+               google.setOnLoadCallback(function() {\r
+                       $.getScript("devdocs/javascript/fontsizeChanger.js");\r
+               });\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="fontSizeChanger">\r
+       <a href="#top" id="f_small">小</a>\r
+       <a href="#top" id="f_medium">中</a>\r
+       <a href="#top" id="f_large">大</a>\r
+       </div>\r
+<div id="body">\r
+<div class="heading">\r
+スキン &amp; テンプレート\r
+</div>\r
+\r
+<h1>Introduction</h1>\r
+\r
+<p>\r
+<a href="index.html">Nucleusマニュアルに戻る</a>\r
+</p>\r
+\r
+<p>Nucleusのインストールは無事完了したと思います。ここでは、ページ表示を定義するスキン/テンプレートの編集について説明をしたいと思います:</p>\r
+<ol>\r
+       <li>標準でインストールされるスキン/テンプレートの編集画面に入ります(又はこれを複製した物を編集すればいつでも標準表示に戻れます)</li>\r
+       <li>標準でインストールされるスキン/テンプレートを元に、希望通りの修正を行います</li>\r
+       <li>自分で編集したスキン/テンプレートを元に、スタイルシートを定義します</li>\r
+</ol>\r
+<p>このドキュメントは、これらの作業を行うにあたりヒントになる事項を紹介します。</p>\r
+\r
+<h1><a id="toc"></a>目次</h1>\r
+\r
+<ul>\r
+       <li><a href="#htmlcss">HTMLとCSSの関係について</a></li>\r
+       <li><a href="#defaultskin">標準のデザインで使用するファイル</a></li>\r
+       <li><a href="#templatesvsskins">テンプレートとスキンの相互関係</a></li>\r
+       <li><a href="#skincascade">適用されるスキンの優先順位</a></li>\r
+       <li>Howto:\r
+               <ul>\r
+                       <li><a href="#howto-additem">「アイテムの追加」フォームの埋込み方法</a></li>\r
+                       <li><a href="#howto-cssforms">入力フォームのデザインを定義するスタイルシート情報</a></li>\r
+                       <li><a href="#howto-karma">投票機能を有効にする方法</a></li>\r
+                       <li><a href="#howto-edit">「アイテムの編集」リンクの設置</a></li>\r
+               </ul>\r
+       </li>\r
+       <li><a href="#export">スキン/テンプレートのインポート/エクスポートについて</a></li>\r
+</ul>\r
+\r
+<h1>HTMLとCSSの関係について <a id="htmlcss" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+スキンとテンプレートを編集するにあたっては、HTMLとCSSの基礎知識が必要です。このセクションでは基礎知識を得る事ができる解説サイトを紹介しておきます。\r
+</p>\r
+\r
+<ul>\r
+       <li><a href="http://www.w3schools.com/">W3Schools</a>: online web building tutorials (HTML, XHTML, CSS)</li>\r
+       <li><a href="http://thenoodleincident.com/tutorials/css/">CSS Panic Guide</a>: links to various CSS resources</li>\r
+       <li><a href="http://hotwired.lycos.com/webmonkey/authoring/html_basics/index.html">Webmonkey: HTML Basics</a></li>\r
+       <li><a href="http://hotwired.lycos.com/webmonkey/authoring/stylesheets/">Webmonkey: Stylesheets</a></li>\r
+       <li><a href="http://diveintoaccessibility.org">Dive Into Accessibility</a>: Online book, not really about HTML, but about accessibility and how to make your site more accessible.</li>\r
+</ul>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+<h1>標準のデザインで使用するファイル <a id="defaultskin" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>このセクションでは、標準のスキンで使用しているファイル名と、編集の注意点を説明します。</p>\r
+\r
+<p>標準のスキンは以下の3つのファイルを使用しています:</p>\r
+<ol>\r
+       <li><tt>default.css</tt> (v3.0は <tt>grey.css</tt>): ページのデザインを定義するCSS(カスケーディング・スタイルシート)ファイル。色指定やレイアウト指定などを定義します。</li>\r
+       <li><tt>atom.gif</tt>: ページの左上に表示されるロゴ。</li>\r
+       <li><tt>nucleus2.gif</tt>: Nucleus ロゴ。</li>\r
+</ol>\r
+\r
+<p>CSSファイル (<tt>default.css</tt> / <tt>grey.css</tt>) には、標準のスキン/テンプレートを使用した際のページ構成(ブロック構造)を書き入れています。 基本的には<tt>.contents</tt>、 <tt>.logo</tt>、<tt>.menu</tt>の3つのdivブロックとなっています。</p>\r
+\r
+<p><tt>default.css</tt> / <tt>grey.css</tt>を編集するにあたっては、テキストエディタを使用してください。 例えばWindowsに標準添付されている「Notepad」やemacs や TextPadなどです。「WordPad」、「Word」、「OpenOffice Writer」などは余計なデータが混入しますので、<strong>絶対に使用しないでください</strong>。</p>\r
+\r
+\r
+\r
+\r
+\r
+\r
+<h1>テンプレートとスキンの相互関係 <a id="templatesvsskins" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+Nucleusではページ表示に「スキン」と「テンプレート」の両方を使用します。ではこれら2つの違いは何でしょう?\r
+</p>\r
+\r
+<ol>\r
+       <li>\r
+               <b>スキン</b> とは出力する内容(タグを含むソース)を定義するものです。1つのスキンでもいくつかの種別ごとに定義が必要で、メインページや個別アイテムページ、アーカイブページなど(標準で8タイプ)があります。\r
+               スキン内の定義内容は、どの部分にblogデータを展開するのか、どのテンプレートを使用して展開するのかなどの指定を含みます。\r
+       </li>\r
+       <li>\r
+               <b>テンプレート</b>とは、blogデータを展開するのに使われるひな形です。スキン内で指定されたテンプレートをひな形に、blogデータが指定された場所に出力されるのです。もちろん、複数のスキンで1つのテンプレートを使い回しすることもできますし、逆に1つのページに複数のテンプレートを使用するケースもあります。\r
+       </li>\r
+</ol>\r
+\r
+<p>下のサンプル画像をご覧下さい。ページ全体のソースはスキンで定義しています。その中の赤点線で囲った部分(カテゴリリストとblog記事)はテンプレートをひな形にして展開されたデータ部分です。この赤点線部分をどこに出力させるのかはスキンの方で指定しています。</p>\r
+\r
+<div class="screenshot">\r
+<img src="pics/skinsandtemplates.png" width="300" height="283" alt="Skins and Templates example" />\r
+</div>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+<h1>適用されるスキンの優先順位 <a id="skincascade" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+このセクションではページ表示に使うスキンを設定する方法を説明します。\r
+</p>\r
+\r
+<h2>スキンのタイプ</h2>\r
+\r
+<p>\r
+まず最初に、スキンタイプの種別について紹介しておきます。NucleusはアクセスされたURLを元に表示するスキンタイプを判別してページ表示に使います。下記が種別のリストです。(実際のURLは状況に応じて他のクエリが付加され、様々に変化します。)\r
+</p>\r
+\r
+<table>\r
+       <tr><th>クエリ文字列</th><th>スキンの種別</th><th>表示される記事</th></tr>\r
+       <tr><td>?itemid=..</td><td>item(個別アイテム)</td><td>指定された<i>itemid</i>の記事</td></tr>\r
+       <tr><td>?archive=..</td><td>archive(アーカイブ)</td><td>標準のblog記事、又は<i>blogid</i>で指定されたblog記事(の該当記事)</td></tr>\r
+       <tr><td>?archivelist=...</td><td>archivelist(アーカイブリスト)</td><td>指定された<i>archivelist</i>のblog記事(のリスト)</td></tr>\r
+       <tr><td>?archivelist</td><td>archivelist(アーカイブリスト)</td><td>標準のblog記事(のリスト)</td></tr>\r
+       <tr><td>?query=...</td><td>search(検索)</td><td>標準のblog記事、又は<i>blogid</i>で指定されたblog記事(の該当記事)</td></tr>\r
+       <tr><td>?memberid=..</td><td>member(メンバー)</td><td>なし</td></tr>\r
+       <tr><td>?imagepopup=..</td><td>imagepopup(ポップアップ画像)</td><td>なし (画像のみ表示するポップアップ・ウィンドウ)</td></tr>\r
+       <tr><td><i>(その他 又は クエリなし)</i></td><td>index(メイン)</td><td>標準のblog記事、又は<i>blogid</i>で指定されたblog記事</td\r
+       ></tr>\r
+</table>\r
+\r
+<p>\r
+これら7つのタイプに併せて、エラーの場合に使われる <i>error</i> タイプがあります。\r
+</p>\r
+\r
+<h2>スキンの補完適用</h2>\r
+\r
+<p>\r
+上の表において、それぞれのケースで選択適用するblogがどれになるかを併せて説明しています。表示に使用するスキンは、blog設定で設定した「標準のスキン」です。\r
+</p>\r
+\r
+<p>\r
+新しくスキンを作成する際はすべてのスキンタイプを定義する必要はありません。選択適用するスキンタイプが定義されていない場合は、グローバル設定において設定した「標準のスキン」を代替適用します。(下記参照)。つまり、エラーページのスキンタイプだけを定義したスキンを使用するといったことが可能な訳です。\r
+</p>\r
+\r
+<h2>標準のスキン</h2>\r
+\r
+<p>\r
+Nucleus は「標準のスキン」が必ず必要です。この標準のスキンは、スキンタイプ定義が見あたらない場合の補完表示に使われるからです。もし、標準のスキンにおいても適用すべきスキンタイプの定義が見あたらない場合は、エラーメッセージが表示されてしまいます。\r
+</p>\r
+\r
+<p>\r
+また、指定されたblogが見あたらない場合は、適用するスキンのblog設定そのものが存在しませんから、エラーメッセージを表示するためのページデザインとして「標準のスキン」がかならず必要なのです。\r
+</p>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+<h1>Howto: 「アイテムの追加」フォームの埋込み方法 <a id="howto-additem" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+Nucleus ではblogページに新規投稿フォームを埋め込む機能を設けています。「新規投稿」リンクをページ内のどこかに作り、このリンクをクリックすると新規投稿フォームの表示/非表示の切り替えができます。 このフォームに入力後プレビュー機能が使えますので、どのように記事が表示されるかを瞬時に確認できて便利です。\r
+</p>\r
+\r
+<p>\r
+方法は、「メインの目次ページ」を編集するだけです。テンプレートの編集は必要ありません。\r
+</p>\r
+\r
+<h2>1. JavaScript コードの呼出し</h2>\r
+<p>\r
+まず最初に、edit.jsをページ上に呼び出すコードを追加します。&lt;head&gt; と &lt;/head&gt; タグの間のどこかに下のコードを追加して下さい。このファイルを呼び出す事によって新規投稿のプレビュー機能とフォームの表示/非表示切替え機能が有効になります。\r
+</p>\r
+\r
+<pre>\r
+&lt;script type="text/javascript"\r
+        src="nucleus/javascript/edit.js"&gt;&lt;/script&gt;\r
+</pre>\r
+\r
+<h2>2. 新規投稿フォームを埋め込む場所を指定</h2>\r
+\r
+<p>\r
+新規投稿フォームを埋め込みたい場所に追加します。"display:none;"は必ず間違えずに記述してください。\r
+</p>\r
+\r
+<pre>\r
+&lt;div id="edit" style="display:none;"&gt;\r
+...\r
+&lt;/div&gt;\r
+</pre>\r
+\r
+<h2>3. 入力フォームとプレビューエリアを埋め込むコードを追加</h2>\r
+\r
+<p>\r
+次に、このdivブロックの中に入力フォームとプレビューエリアを埋め込むコードを追加します。入力フォームは&lt;%additemform%&gt; と、プレビューエリアは &lt;%preview(<i>テンプレート名</i>)%&gt;と書く事によってそこに展開されます。あとは好きなコードを追加してください。 例えば次のように書きます。\r
+</p>\r
+\r
+<pre>\r
+&lt;h2&gt;Add Item&lt;/h2&gt;\r
+&lt;%additemform%&gt;\r
+\r
+&lt;h2&gt;Preview&lt;/h2&gt;\r
+&lt;%preview(mytemplate)%&gt;\r
+</pre>\r
+\r
+<h2>4. 新規投稿リンクの追加</h2>\r
+<p>\r
+最後に、このエリアを表示/非表示させるための切替えリンクをどこか別の場所に追加します。サンプルとして2つのコードを紹介しておきます。</p><p>1つめはシンプルなタイプ:\r
+</p>\r
+\r
+<pre>\r
+&lt;a href="javascript:showedit();"&gt;add item&lt;/a&gt;\r
+</pre>\r
+\r
+<p>\r
+2つ目はページ左上隅に切替えリンクを配置するタイプ:\r
+</p>\r
+\r
+<pre>\r
+&lt;div style="position: absolute; left: 0px;\r
+            top: 0px; width: 10px; height: 10px"\r
+     onclick="javascript:showedit();"&gt;\r
+&lt;/div&gt;\r
+</pre>\r
+\r
+\r
+\r
+\r
+\r
+\r
+<h1>Howto: 入力フォームのデザインを定義するスタイルシート情報 <a id="howto-cssforms" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+例えばスキン内に。 &lt;%searchform%&gt; や &lt;%commentform%&gt; と記述することによって、それぞれ検索フォームやコメント投稿フォームに置き換えられてページ内に表示されます。これらの入力フォームやボタンや入力フォーム領域には標準でクラス名が定義されていますので、cssファイル内でクラスの定義をすればスタイルの変更が可能です。\r
+</p>\r
+\r
+<p>\r
+入力フォーム領域のクラス名は下記のように指定されています。クラス名はフォーム全体を囲ったdivブロックを修飾しています。\r
+</p>\r
+\r
+<table>\r
+       <tr>\r
+               <th>フォームの種類</th>\r
+               <th>記述コード</th>\r
+               <th>CSS クラス名</th>\r
+       </tr>\r
+       <tr>\r
+               <td>新規投稿フォーム</td>\r
+               <td>&lt;%additemform%&gt;</td>\r
+               <td>.blogform</td>\r
+       </tr>\r
+       <tr>\r
+               <td>コメント投稿フォーム</td>\r
+               <td>&lt;%commentform%&gt;</td>\r
+               <td>.commentform</td>\r
+       </tr>\r
+       <tr>\r
+               <td>ログインフォーム</td>\r
+               <td>&lt;%loginform%&gt;</td>\r
+               <td>.loginform</td>\r
+       </tr>\r
+       <tr>\r
+               <td>検索フォーム</td>\r
+               <td>&lt;%searchform%&gt;</td>\r
+               <td>.searchform</td>\r
+       </tr>\r
+       <tr>\r
+               <td>メンバー間のメール送信フォーム</td>\r
+               <td>&lt;%membermailform%&gt;</td>\r
+               <td>.mailform</td>\r
+       </tr>\r
+</table>\r
+\r
+<p>\r
+ボタンと入力フォームのクラス名は以下のように指定しています。\r
+</p>\r
+\r
+<table>\r
+       <tr>\r
+               <th>タイプ</th>\r
+               <th>CSS クラス名</th>\r
+       </tr>\r
+       <tr>\r
+               <td>単行/複数行のテキスト入力フィールド</td>\r
+               <td>.formfield</td>\r
+       </tr>\r
+       <tr>\r
+               <td>ボタン</td>\r
+               <td>.formbutton</td>\r
+       </tr>\r
+</table>\r
+\r
+<p>\r
+スタイルシート内で実際にこれらを定義するサンプルです:\r
+</p>\r
+\r
+<pre>\r
+/* applies to all input fields */\r
+.formfield {\r
+  background-color: gray;\r
+}\r
+\r
+/* only applies to buttons for comment forms */\r
+.commentform .formbutton {\r
+  border: 1px solid #000;\r
+  background-color: #ddd;\r
+  color: #000;\r
+  font-size: xx-large;\r
+}\r
+</pre>\r
+\r
+<p>上のサンプルでは、Nucleusが自動生成するテキスト入力フィールドの全部が「 背景色 = 濃灰色 」で、コメント投稿フォーム内のボタンだけが「 文字サイズ = 大 / 四辺 = 黒色の1ピクセルの太さの線 / 文字色 = 黒 / 背景色 = 淡灰色 」とする、と定義しています。</p>\r
+\r
+\r
+<h1>Howto: 投票機能を有効にする方法 <a id="howto-karma" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>標準添付のスキン/テンプレートでは投票機能を表示させていません(使わない方がよいのかもしれません)。ここでは投票機能が表示されるようにテンプレートを書換える方法を紹介します。</p>\r
+\r
+<h2>1. 表示に使用する「メインの目次ページ」タイプで指定したテンプレートの編集画面を開く</h2>\r
+\r
+<p><tt>'default'</tt> ( v3.0では <tt>'grey/short'</tt> ) という名前のテンプレートの編集画面を開きます。(このテンプレート名はあくまでも新規インストール直後の状態で適用されているものです。複製や新規作成などにより変更している場合は読み替えてください。)</p>\r
+\r
+<h2>2. アイテムの本体部分の書換え</h2>\r
+\r
+<p>アイテムの本体部分の最後の方を以下のように書換えます:</p>\r
+\r
+<pre>\r
+&lt;div class="iteminfo"&gt;\r
+  &lt;%time%&gt; -\r
+  &lt;a href="&lt;%authorlink%&gt;"&gt;&lt;%author%&gt;&lt;/a&gt; -\r
+  karma: &lt;%karma%&gt;\r
+    [&lt;a href="&lt;%karmaposlink%&gt;"&gt;+&lt;/a&gt;/&lt;a href="&lt;%karmaneglink%&gt;"&gt;-&lt;/a&gt;] -\r
+  &lt;%edit%&gt;\r
+  &lt;%comments%&gt;\r
+&lt;/div&gt;\r
+</pre>\r
+\r
+<p>編集後にメインページにアクセスすると記事詳細情報が下のように表示が変更されているのが確認できると思います:</p>\r
+\r
+<div><i>9:00:39 PM - <a href="">God</a> - karma: 5 [<a href="">+</a>/<a href="">-</a>] - <a href="">edit</a></i></div>\r
+\r
+<h2>3. アイテムの個別ページのテンプレート</h2>\r
+\r
+<p>上記の編集作業ではメインページでのみ投票スコアが表示される状態です。アイテムの個別ページでも同様に投票を表示したい場合は、スキンの「アイテムの個別ページ」で使用しているテンプレートに同様の修正を行ってください。新規インストール直後の状態では<tt>'detailed'</tt> ( v3.0では <tt>'grey/full'</tt> ) という名前のテンプレートがそれに該当します。</p>\r
+\r
+\r
+\r
+\r
+\r
+\r
+<h1>Howto: 「アイテムの編集」リンクの設置 <a id="howto-edit" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>Nucleus標準添付のスキンでは記事の編集権限を持つユーザーにだけ表示される「アイテムの編集」リンクを埋め込んでいます。 ここではどこでそのリンクを埋め込んでいるのかを説明します。</p>\r
+\r
+<h2>「アイテムを編集するためのリンク」の表示の設定</h2>\r
+\r
+<p>テンプレートの編集画面の「アイテムを編集するためのリンク」部分でアイテムの編集リンクの表示を定義しています。 標準添付のテンプレートでは以下のように定義しています:</p>\r
+<pre><code>&lt;a href="&lt;%editlink%&gt;" onclick="&lt;%editpopupcode%&gt;"&gt;edit&lt;/a&gt;</code></pre>\r
+\r
+<p>ポップアップ編集画面ではなく管理エリアの記事編集画面を使いたい場合は次のように修正してください:</p>\r
+\r
+<pre><code>&lt;a href="nucleus/index.php?action=itemedit&amp;amp;itemid=&lt;%itemid%&gt;"&gt;edit&lt;/a&gt;\r
+</code></pre>\r
+\r
+<h2>「アイテムの編集」リンクを表示する場所の指定</h2>\r
+\r
+<p>表示形式を決めたら、次にどこにこれを表示するのかを設定します。通常なら「アイテムの本体」の中に<code>&lt;%edit%&gt;</code>と記述します。この<code>&lt;%edit%&gt;</code>の部分が上で設定した表示形式に置き換えられてコードが自動生成されます。</p>\r
+\r
+<p>「アイテムの本体」の中の記述例は <a href="#howto-karma">投票機能を有効にする方法</a> を参照してください。</p>\r
+\r
+\r
+\r
+\r
+<h1>スキン/テンプレートのインポート/エクスポートについて <a id="export" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>バージョンv2.0以降からスキンとテンプレートをインポート/エクスポートする機能が追加されています。ここでは、スキンを作成する手順を追ってその機能をわかりやすく説明したいと思います。</p>\r
+\r
+<h2>新規スキンの作成</h2>\r
+\r
+<ol>\r
+       <li>\r
+               <p>まず管理エリアにてスキンを新規作成します。管理エリアに入り、「スキンの編集」画面の一番下にある「新しいスキン」の所に入力します。ここでは例として名前を「<strong>vista</strong>」とします。</p>\r
+       </li>\r
+       <li>\r
+               <p>スキンの一覧にこの「vista」という名前のスキンが追加されていますので、その行の右横「編集」リンクをクリックして編集画面に入ります。content type は 「<code>text/html</code>」としてください。 これから説明する作業を行うにあたって必要な設定となりますので、よく確認して設定してください。</p>\r
+               <p>さらにその下の <code>Include モード</code> と <code>Include プリフィックス</code> もよく注意して設定してください。スキンを移植したり配布したりする事を考えて、デザインに使用する画像やcssファイルなどは1つのディレクトリの中に格納しておく事とします。 </p>\r
+                <p><code>Include モード</code> と <code>Include プリフィックス</code> が適用される仕組みを簡単に説明しておきましょう。<code>config.php</code>で定義している「<code>$DIR_SKINS</code>」の値と、管理エリアのグローバル設定の中で設定している「<code>スキンURL</code>」が関連してきます。\r
+                例えばそれぞれ以下のような値になっているとします:</p>\r
+               <pre><code>/home/user/example/htdocs/skins/\r
+http://example.org/skins/</code></pre>\r
+               <p>この設定を準用してデザインに使用する画像やcssファイルなどを格納するディレクトリを次のように設定させます</p>\r
+               <pre><code>/home/user/example/htdocs/skins/vista/\r
+http://example.org/skins/vista/</code></pre>\r
+               <p>このように準用適用させる設定が<code>Include モード</code>です。準用させるためには<code>Include モード</code>を「<strong>skindirを使う</strong>」にしてください。</p>\r
+               <p>さらに <strong><code>Include プリフィックス</code></strong> は 「<strong>vista/</strong>」と入力してください。</p>\r
+               <p>この画面の設定:</p>\r
+               <ul>\r
+                       <li><strong>名前</strong>: vista</li>\r
+                       <li><strong>Content Type</strong>: text/html</li>\r
+                       <li><strong>Include モード</strong>: skindirを使う</li>\r
+                       <li><strong>Include プリフィックス</strong>: vista/</li>\r
+               </ul>\r
+       </li>\r
+</ol>\r
+\r
+<h2>スキンの編集</h2>\r
+\r
+<p>スキン内に記述するコードのうち、<code>include</code> と <code>phpinclude</code> と <code>parsedinclude</code>で読み込むファイルの場所指定に、この「<code>Include モード</code>」 と 「<code>Include プリフィックス</code>」の設定が適用されます。また、このほかに<code>skinfile</code>という記述コードでもこれらの設定を読み込んでURLの自動生成が行われます。</p>\r
+\r
+<p>例えばスキン内に以下のように記述したとします:</p>\r
+\r
+<pre><code>&lt;%skinfile(myFile.jpg)%&gt;</code></pre>\r
+\r
+<p>これはページ生成時に以下のように自動変換されます:</p>\r
+\r
+<pre><code>http://example.org/skins/vista/myFile.jpg</code></pre>\r
+\r
+<p>仕組みの説明はこのくらいにして、実際にスキンを編集してみましょう。<code>vista/</code> ディレクトリの中に「<code>pagefoot.inc</code>」 と 「<code>pagehead.inc</code>」 という名前の2つのファイルを作成して、これらのファイルを使い回す事によって作業効率を上げる方法をご紹介します:</p>\r
+\r
+<h3>pagehead.inc</h3>\r
+\r
+<pre><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;\r
+&lt;html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"&gt;\r
+&lt;head&gt;\r
+       &lt;title&gt;My Site&lt;/title&gt;\r
+       &lt;link rel="stylesheet" type="text/css" href="&lt;%skinfile(layout.css)%&gt;" /&gt;\r
+&lt;/head&gt;\r
+&lt;body&gt;\r
+\r
+&lt;div id="contents"&gt;</code></pre>\r
+\r
+<h3>pagefoot.inc</h3>\r
+\r
+<pre><code>&lt;/div&gt;&lt;!-- contents div end --&gt;\r
+\r
+&lt;div id="stuffbar"&gt;\r
+       &lt;h2&gt;Navigation&lt;/h2&gt;\r
+\r
+       &lt;ul&gt;\r
+               &lt;li&gt;&lt;a href="&lt;%todaylink%&gt;"&gt;Today&lt;/a&gt;&lt;/li&gt;\r
+               &lt;li&gt;&lt;a href="&lt;%archivelink%&gt;"&gt;Archives&lt;/a&gt;&lt;/li&gt;\r
+       &lt;/ul&gt;\r
+\r
+       &lt;h2&gt;About&lt;/h2&gt;\r
+\r
+       &lt;ul&gt;\r
+               &lt;li&gt;&lt;a href="http://www.nucleuscms.org/"&gt;Nucleus&lt;/a&gt; Power!&lt;/li&gt;\r
+       &lt;/ul&gt;\r
+&lt;/div&gt;&lt;!-- stuffbar end --&gt;\r
+\r
+&lt;/body&gt;\r
+&lt;/html&gt;</code></pre>\r
+\r
+<p>このような共通して使えるコードを書いたファイルを使い回します: (上のサンプルは重要な部分だけを抜粋した物です。実際に使用する際は標準添付のスキンを参考に、もっとたくさんのコードを書き込んだ方が良いでしょう。)</p>\r
+\r
+<h3>メインの目次ページ</h3>\r
+<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;\r
+\r
+&lt;h1&gt;My Blog&lt;/h1&gt;\r
+\r
+&lt;%blog(vista/main,10)%&gt;\r
+\r
+&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>\r
+\r
+<h3>アイテムの個別ページ</h3>\r
+\r
+<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;\r
+\r
+&lt;h1&gt;My Blog&lt;/h1&gt;\r
+\r
+&lt;h2&gt;Item&lt;/h2&gt;\r
+&lt;%item(vista/detailed)%&gt;\r
+\r
+&lt;h2&gt;Comments&lt;/h2&gt;\r
+&lt;%comments(vista/detailed)%&gt;\r
+\r
+&lt;h2&gt;Add Comment&lt;/h2&gt;\r
+&lt;%commentform%&gt;\r
+\r
+&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>\r
+\r
+<p>上のサンプルでは使用するテンプレート名を「<strong>vista/main</strong>」 、 「<strong>vista/detailed</strong>」と指定していることに注意してください。テンプレート名はスキン名と揃えて置いた方が後々編集する時にわかりやすくて便利です。単純に標準添付の 「<strong>default</strong>」 と 「<strong>detailed</strong>」(v3.0 では「<strong>grey/short</strong>」 と 「<strong>grey/full</strong>」) をそれぞれ複製して名前を付け替えただけの物でも構いません。</p>\r
+\r
+<h3>アーカイブ一覧ページ</h3>\r
+\r
+<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;\r
+\r
+&lt;h1&gt;My Blog&lt;/h1&gt;\r
+\r
+&lt;%archivelist(vista/main)%&gt;\r
+\r
+&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>\r
+\r
+<h3>アーカイブページ</h3>\r
+\r
+<pre><code>&lt;%parsedinclude(pagehead.inc)%&gt;\r
+\r
+&lt;h1&gt;My Blog&lt;/h1&gt;\r
+\r
+&lt;%archive(vista/main)%&gt;\r
+\r
+&lt;%parsedinclude(pagefoot.inc)%&gt;</code></pre>\r
+\r
+<h2>スキンをエクスポートする</h2>\r
+\r
+<p>これでvistaスキンのできあがりです。では、このスキンをエクスポートしてみましょう。管理エリアの「スキンのインポート/エクスポート」画面に入り、以下の作業を行います:</p>\r
+\r
+<ol>\r
+       <li>書き出すスキン/テンプレートを選択するリストの中から「vista」、「vista/detailed」、「vista/main」の3つを選択してください。</li>\r
+       <li>その下の「追加情報」欄にこれから書き出すスキン/テンプレートについての説明書きを(必要ならば)入力し、<code>選択されたスキン/テンプレートを書き出し</code> ボタンを押します。 Nucleusにて「<code>skinbackup.xml</code>」の自動作成が行われます。</li>\r
+       <li>この「<code>skinbackup.xml</code>」ファイルを保存し、<code>vista/</code>ディレクトリの中に他の画像ファイルなどと一緒に格納してください。</li>\r
+       <li>この<code>vista/</code>ディレクトリごとzipファイルなどに圧縮します。</li>\r
+       <li>これでスキンパッケージのできあがりです。この圧縮ファイルを配布するだけでデザインの配布ができます。</li>\r
+</ol>\r
+\r
+<h2>スキンをインポートする</h2>\r
+\r
+<p>スキンをインポートするには、上と逆の手順を踏みます:</p>\r
+\r
+<ol>\r
+       <li>圧縮ファイルを解凍して生成されたディレクトリ(<code>vista/</code>)をサーバのスキンディレクトリ内に配置します(ひとつのスキンで1つのディレクトリを使用します)。</li>\r
+       <li>管理エリアの「スキンのインポート/エクスポート」画面にて、ドロップダウンリストから「vista」を選択し、「読み込み」ボタンを押します。</li>\r
+       <li>表示される説明に従います。(すでに同じ名前のスキン/テンプレートが存在する場合はその旨の警告が出ますので、上書きしたい場合は「既に存在するスキンを上書きする (ぶつかるスキン名を参照) 」のチェックを入れてから読み込むボタンを押せば上書きされます。)</li>\r
+       <li>これでスキンの読込みは完了です。ページ表示に使用したい場合はblog設定でこのスキン名を選択すれば適用されます。</li>\r
+</ol>\r
+</div>\r
+</body>\r
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/documentation/styles/background.png b/utf8/nucleus/documentation/styles/background.png
new file mode 100644 (file)
index 0000000..12f211b
Binary files /dev/null and b/utf8/nucleus/documentation/styles/background.png differ
diff --git a/utf8/nucleus/documentation/styles/bullet.gif b/utf8/nucleus/documentation/styles/bullet.gif
new file mode 100644 (file)
index 0000000..b43de48
Binary files /dev/null and b/utf8/nucleus/documentation/styles/bullet.gif differ
diff --git a/utf8/nucleus/documentation/styles/manual.css b/utf8/nucleus/documentation/styles/manual.css
new file mode 100755 (executable)
index 0000000..94ab7ea
--- /dev/null
@@ -0,0 +1,217 @@
+@charset 'UTF-8';\r
+\r
+/**\r
+ * NucleusCMS Manual Style sheet\r
+ *\r
+ * $Id$\r
+ */\r
+\r
+body {\r
+       background: #fff url(background.png) repeat-x;\r
+       padding-top: 13px;\r
+       color: #555;\r
+       /*font-family: verdana, arial;*/\r
+/*     font-family: "Hiragino Kaku Gothic Pro W3", "Meiryo", "MS PGothic", "Osaka", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif; */\r
+       font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;\r
+       font-size: small;\r
+}\r
+\r
+@media screen {\r
+       body {\r
+               margin-left: 10%;\r
+               margin-right: 10%;\r
+       }\r
+}\r
+\r
+@media print {\r
+       pre, .note, td, th {\r
+               border: 1px dashed gray;\r
+       }\r
+}\r
+\r
+img {\r
+       border: none;\r
+}\r
+\r
+a:link, a:visited {\r
+       color: #1D3565; \r
+       font-weight: bold;\r
+       text-decoration: none;\r
+}\r
+a: hover {\r
+       text-decoration: underline;\r
+}\r
+\r
+.heading {\r
+       text-align: center;\r
+       font-size: xx-large;\r
+       font-weight: bold;\r
+       color: gray;\r
+       letter-spacing:3px;\r
+       margin: 15px 0 20px;\r
+}\r
+\r
+.heading i {\r
+       position: absolute;\r
+       top: 5px;\r
+       right: 5px;\r
+       font-size: small;\r
+       font-style: normal;\r
+       font-weight: normal;\r
+}\r
+\r
+\r
+p {\r
+       text-indent: 10px;\r
+       margin-left:20px;\r
+}\r
+\r
+h1 {\r
+       border-bottom: 1px dotted gray;\r
+       font-size: 145%;\r
+       color: #596d9d;\r
+       font-weight:normal;\r
+       letter-spacing:2px;\r
+}\r
+\r
+h2 {\r
+       color: #666;\r
+       font-size: 110%;\r
+       margin: 20px 10px 10px 10px;\r
+       border-left: 5px solid #94a8c9;\r
+       padding: 0 0 0 8px;\r
+       letter-spacing:2px;\r
+}\r
+\r
+h3 {\r
+       margin-left: 12px;\r
+       border-bottom:1px dotted #666;\r
+       font-size:100%;\r
+       color:#596d9d;\r
+       letter-spacing:1px;\r
+}\r
+\r
+pre, .note, .faq .answer {\r
+/*     font-family: "Meiryo", "MS PGothic", "Osaka", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;*/\r
+       font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;\r
+       font-size: small;\r
+       background-color: #eee;\r
+       padding: 10px;\r
+       font-size: small;\r
+/*     white-space: -moz-pre-wrap; /* Mozilla *\r
+       white-space: -pre-wrap;     /* Opera 4-6 *\r
+       white-space: -o-pre-wrap;   /* Opera 7 *\r
+       white-space: pre-wrap;      /* CSS3 *\r
+       word-wrap: break-word;      /* IE 5.5+ */\r
+}\r
+\r
+.screenshot {\r
+       text-align: center;\r
+       background-color: #eee;\r
+       padding: 10px;\r
+}\r
+\r
+.faq .question {\r
+       font-weight: bold;\r
+       margin-bottom: 0px;\r
+}\r
+\r
+.faq .answer {\r
+\r
+}\r
+\r
+.faq {\r
+       margin-bottom: 20px;\r
+}\r
+\r
+table {\r
+       border: none;\r
+}\r
+\r
+th {\r
+       background-color: linen;\r
+       font-size: medium;\r
+}\r
+\r
+th, td {\r
+       padding: 5px;\r
+}\r
+\r
+td {\r
+       background-color: #eee;\r
+       font-size: small;\r
+       vertical-align: top;\r
+       text-align: left;\r
+}\r
+\r
+.deprecated {\r
+       border: 3px solid red;\r
+       padding: 5px;\r
+       font-size: medium;\r
+}\r
+\r
+tt, code, samp {\r
+       font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;\r
+\r
+       font-size: small;\r
+}\r
+\r
+.warning {\r
+       color: red;\r
+}\r
+.ok {\r
+       color: green;\r
+}\r
+\r
+acronym, abbr {\r
+       border-bottom: 1px dotted gray;\r
+       cursor: help;\r
+}\r
+\r
+label {\r
+       cursor: hand;\r
+}\r
+\r
+ul {\r
+       line-height:1.5em;\r
+       margin:0 0 0.5em 40px;\r
+       padding:0;\r
+       list-style-image:url(bullet.gif);\r
+}\r
+\r
+table#files_index {\r
+       width: 100%;\r
+       line-height: 0.8em;\r
+       border-collapse: collapse;\r
+       margin-bottom: 2px;\r
+}\r
+\r
+table#files_index th {\r
+       width: 20%;\r
+       padding : 0;\r
+       text-align: left;\r
+       background-color: #eee;\r
+}\r
+\r
+\r
+#fontSizeChanger {\r
+       position: fixed;\r
+       top: 20px;\r
+       left: 50px;\r
+       font-size: medium !important;\r
+}\r
+\r
+#fontSizeChanger a {\r
+       font-weight: normal;\r
+       border: 1px dotted gray;\r
+       padding: 0 3px;\r
+}\r
+\r
+#fontSizeChanger a#fontSmall {\r
+       font-weight: bold;\r
+}\r
+\r
+#fontSizeChanger a:hover {\r
+       color: #fff;\r
+       background-color: #1D3565;\r
+}\r
diff --git a/utf8/nucleus/documentation/tips.html b/utf8/nucleus/documentation/tips.html
new file mode 100755 (executable)
index 0000000..81906b0
--- /dev/null
@@ -0,0 +1,473 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\r
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
+<head>\r
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+       -->\r
+       <!-- $Id$ -->\r
+       <!-- $NucleusJP: tips.html,v 1.6 2007/02/04 06:28:45 kimitake Exp $ -->\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+    <meta http-equiv="Content-Style-Type" content="text/css" />\r
+    <meta http-equiv="Content-Script-Type" content="text/javascript" />\r
+    <link rel="index" href="./index.html" />\r
+       <title>Nucleus - 便利な使い方ヒントの紹介</title>\r
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
+    <style type="text/css">\r
+        strong {\r
+            font-weight: bold;\r
+        }\r
+        em {\r
+            font-style: italic;\r
+        }\r
+    </style>\r
+       <script src="http://www.google.com/jsapi"></script>\r
+       <script type="text/javascript">\r
+               google.load("jquery", "1", {uncompressed:true});\r
+               google.setOnLoadCallback(function() {\r
+                       $.getScript("devdocs/javascript/fontsizeChanger.js");\r
+                       var prm = 0;\r
+                       $("#txtTotal").val("000");\r
+                       $("input[type='checkbox']").click(function() {\r
+                               if ($(this).attr("checked") == true)\r
+                                       prm += parseInt($(this).val());\r
+                               else if (prm >= $(this).val())\r
+                                       prm -= parseInt($(this).val());\r
+                               $("#txtTotal").val(zeroFormat(prm));\r
+                       });\r
+               });\r
+               function zeroFormat(num) {\r
+                       if (num < 1)\r
+                               return "000";\r
+                       var ret = String(num);\r
+                       while(ret.length < 3){\r
+                               ret = "0" + num;\r
+                       }\r
+                       return ret;\r
+               }\r
+       </script>\r
+</head>\r
+<body>\r
+       <div id="fontSizeChanger">\r
+       <a href="#top" id="f_small">小</a>\r
+       <a href="#top" id="f_medium">中</a>\r
+       <a href="#top" id="f_large">大</a>\r
+       </div>\r
+<div id="body">\r
+<div class="heading">\r
+Tips &amp; Suggestions\r
+</div>\r
+\r
+<h1><a id="top" name="top">Introduction</a></h1>\r
+\r
+<p>\r
+<a href="index.html">Nucleusマニュアルに戻る</a>\r
+</p>\r
+\r
+<p>\r
+ここでは便利な使い方ヒントをご紹介します。\r
+</p>\r
+\r
+<h1><a id="toc" name="toc">目次</a></h1>\r
+\r
+<ul>\r
+       <li>\r
+               <a href="#searchengines">検索エンジンにひっかかりやすくする方法</a>\r
+               <ul>\r
+                       <li><a href="#searchengines-fancyurls">Fancy URL モード</a></li>\r
+                       <li><a href="#searchengines-rewrite">mod_rewrite</a></li>\r
+                       <li><a href="#searchengines-fancyurls2">Fancy URL2 モード</a></li>\r
+               </ul>\r
+       </li>\r
+       <li><a href="#filepermissions">ファイルとディレクトリのパーミッション変更ガイド</a></li>\r
+       <li><a href="#backups">バックアップをリストア(復元)する方法</a></li>\r
+       <li><a href="#newblog">新しくweblogを作成する方法</a></li>\r
+       <li><a href="#xhtml">XHTMLサポートについて</a></li>\r
+       <li><a href="#specialskinpart">スペシャルスキンパーツの作り方</a></li>\r
+<!--\r
+       <li><a href="#"></a></li>\r
+       <li><a href="#"></a></li>\r
+       <li><a href="#"></a></li>\r
+-->\r
+</ul>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+<h1>Googleなどのサーチエンジンに引っかかりやすくする方法 <a id="searchengines" name="searchengines" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<div class="note">\r
+<strong>留意点:</strong> これらの方法は、サーバの環境によっては動作しないことがあります。\r
+</div>\r
+\r
+<p>\r
+Nucleus はアクセスごとにページを生成しています。アクセスするURLは「<code>index.php?archive=2001-09&amp;blogid=1</code>のようになっています。残念ながらURLに「?」やそのほかの余分な文字列がたくさんあるとgoogleなどの検索エンジンに登録されにくくなってしまいます。無駄なロボット巡回を省くための措置だそうです。\r
+</p>\r
+\r
+<p>この対策を2つ紹介しておきます。しかしながら必ず動作するとは限りませんのでご注意下さい(動作するかどうかはサーバ側の設定によります)。</p>\r
+\r
+<ol>\r
+       <li><a href="#searchengines-fancyurls">Fancy URLモード</a></li>\r
+       <li><a href="#searchengines-rewrite">mod_rewrite</a></li>\r
+       <li><a href="#searchengines-fancyurls2">Fancy URL2 モード</a></li>\r
+</ol>\r
+\r
+\r
+<h2><a id="searchengines-fancyurls" name="searchengines-fancyurls">Fancy URLモード</a></h2>\r
+\r
+<p>Nucleusではバージョン2.0からグローバル設定において「URLモード」というオプションを設けています。ここを「FancyURLモード」に設定して以下の作業を行うと、URLが「<code>http://example.org/index.php?itemid=1234</code>」から「<code>http://example.org/item/1234</code>」に変わります。このURL形式の方が検索エンジンに登録されやすくなります。 </p>\r
+\r
+<p>手順:</p>\r
+\r
+<ol>\r
+       <li>Copy all files from the <code>/extra/fancyurls</code> ディレクトリにある<code>index.html</code>以外の全部のファイルをルートディレクトリ(<code>index.php</code> と <code>action.php</code>があるディレクトリ)にコピーします。</li>\r
+       <li>すでにルートディレクトリに<code>.htaccess</code>ファイルを設置している方はまず現在の<code>.htaccess</code>ファイルをダウンロード後に今回の <code>/extra/fancyurls</code> ディレクトリにある<code>.htaccess</code>ファイルの中身を追加してください。(FTPソフトでは標準設定では<code>.htaccess</code>ファイルは見えないことが多いので、確認方法を調べた上で存在を確認してください。)<br /><code>.htaccess</code>ファイルを設置していなかった方は<code>/extra/fancyurls</code> ディレクトリにある<code>.htaccess</code>ファイルをそのまま使用してください。</li>\r
+       <li>「<code>fancyurls.config.php</code>」という名前のファイルの中の<code>$CONF['Self']</code>の値を自分のトップページのURLとします。 <br /><strong>重要: URLの末尾にスラッシュは<em>絶対に</em>入れないでください。</strong></li>\r
+       <li>同様に<code>index.php</code>ファイルの<code>$CONF['Self']</code>の値を編集(引用符の中を削除)します。これをやらないと、URLが<code>index.php/item/1234</code>などとおかしくなります。</li>\r
+       <li>これらの新しくルートディレクトリに追加したファイルをサーバにアップロードします。</li>\r
+       <li>最後に、管理エリアのグローバル設定においてURLモードを「FancyURLモード」に変更します。</li>\r
+       <li>これで完了です。</li>\r
+</ol>\r
+\r
+<p>もしページが正常に表示されない場合(Internal Server Errorなどと表示される場合)は、残念ですがこの対策は使えません。上の作業で追加したファイルを速やかに削除し(<code>.htaccess</code>ファイルの削除も忘れずに)、管理エリアのグローバル設定においてURLモードを元に戻してください。</p>\r
+\r
+\r
+\r
+<h2><a id="searchengines-rewrite" name="searchengines-rewrite">mod_rewrite</a></h2>\r
+\r
+<p>\r
+次に紹介する対策はApacheサーバを使用していて、かつ、「mod_rewrite」の使用が許可されている環境でのみ有効な方法です。アクセスするページがhtmlファイルであるかのようにみせかける方法です。\r
+</p>\r
+\r
+<p>\r
+ルートディレクトリに「<code>.htaccess</code>」という名前のファイル(ファイル名の先頭はピリオドです)を作成し、以下の内容を書き込みます:\r
+</p>\r
+\r
+<pre>\r
+RewriteEngine On\r
+RewriteRule ^archive-([0-9]+)-([0-9]+)-([0-9]+).html+ index.php?archive=$2-$3&amp;blogid=$1\r
+RewriteRule ^item-([0-9]+).html+ index.php?itemid=$1\r
+RewriteRule ^archivelist-([a-z]+).html+ index.php?archivelist=$1\r
+</pre>\r
+\r
+<p>\r
+このファイルを <em>index.php</em> や <em>config.php</em> があるディレクトリにアップロードします。ブラウザで「<code>archive-1-2004-06.html</code>」にアクセスしてみましょう。きちんとページが表示されればこの方法が使える環境です。(このURL例は2004年6月の記事を表示させるURLですから該当月のログがない場合は「記事がありません」となりますが、これは成功していることを意味します。)<br />もし、アクセスした際に  500 error (internal server error) が表示されていたらそのサーバ環境ではこの方法は使えません。.htaccess ファイルを削除してください。\r
+</p>\r
+\r
+<p>\r
+成功していたら、次にこのURLにジャンプするようにテンプレートを書き換えます。上のURL例をリンク先とする場合は、アーカイブリスト(アーカイブ一覧ページ)で指定しているテンプレートの「アーカイブ一覧の本体」の部分を以下のように変更します:\r
+</p>\r
+\r
+<pre>\r
+&lt;a href="archive-&lt;%blogid%&gt;-&lt;%year%&gt;-&lt;%month%&gt;.html"&gt;...&lt;/a&gt;\r
+</pre>\r
+\r
+<p>\r
+これで検索エンジン対策の説明はおしまいです。あとは検索ロボットが到来するのを待ってみましょう。\r
+</p>\r
+\r
+\r
+<h2><a id="searchengines-fancyurls2" name="searchengines-fancyurls2">Fancy URL2モード</a></h2>\r
+\r
+<p>Nucleus CMS version バージョン3.3からは、FancyURLモードを有効にするもう一つの方法が用意されました。たった3行程で完了するやり方です。</p>\r
+\r
+<ol><li><code>extra/fancyurl-2</code>の中の「<code>.htaccess</code>」ファイルを、Nucleus CMSをインストールしたディレクトリにコピーします。</li>\r
+<li><code>index.php</code>を編集します。<code>CONF['Self']</code>(デフォルトは<code>'index.php'</code>となっています)を、Nucleus CMSをインストールしたURLに書き換えます<br />\r
+例:<pre>CONF['Self'] = 'http://yourdomain.com/yourNucleusDirectory';</pre>\r
+最後にスラッシュをつけないように気をつけてください<br /></li>\r
+<li>最後に、管理エリアのグローバル設定においてURLモードを「FancyURLモード」に変更します。</li></ol>\r
+\r
+<p>これだけで完了です</p>\r
+\r
+<p>もしURLを<code>item/this-is-a-title</code>の様にしたいのであれば、NucleusサイトのPlugin Wikiで、目的にあったプラグインを見つけることができるでしょう。(たとえば <a href="http://japan.nucleuscms.org/wiki/plugins:customurl">NP_CustomURL</a>とか)</p>\r
+\r
+<h1>ファイルとディレクトリのパーミッション変更ガイド <a id="filepermissions" name="filepermissions" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+Nucleusのいくつかの機能を正常動作させるためにはパーミッションの変更作業が必要となります。ここではFTPソフト(FTPクライアント)を使ってパーミッションを変更する方法を紹介しておきます。\r
+</p>\r
+<p>\r
+まずはパーミッション変更ができるFTPソフト(FTPクライアント)を入手します。英語ガイドでは「CuteFTP」というソフトを例にとって説明されていますが、シェアウェアであり日本ではメジャーではないのでOS別に分けて説明します。</p>\r
+\r
+<h2>Windows</h2>\r
+<p>\r
+Windows版では、「FFFTP」というソフトを例に用いて説明させていただきます。FFFTPはフリーウェアです。『<a href="http://www2.biglobe.ne.jp/~sota/ffftp.html">Sota's Product : FFFTP</a>』で入手できます。また、FFFTPのインストールや基本的な使い方につきましては、『<a href="http://ftp.hm/ffftp/manual.shtml">初心者マニュアル - FFFTP Support Page.</a>』をご覧下さい。\r
+</p>\r
+\r
+<p>\r
+まずサーバに接続します。パーミッションを変更したいサーバ側のファイル又はディレクトリをクリックして選択します。(画面右側がサーバに置いてあるディレクトリとファイルのリストとなっています。)\r
+</p>\r
+\r
+<p>\r
+メニューバーの <code>コマンド &gt; 属性変更</code> を選択します。\r
+</p>\r
+\r
+<div class="screenshot">\r
+       <img src="pics/screen4.png" width="370" height="257" alt="menu" />\r
+</div>\r
+\r
+<p>\r
+パーミッションを設定するウィンドウがポップアップします:\r
+</p>\r
+\r
+<div class="screenshot">\r
+       <img src="pics/screen5.png" width="305" height="196" alt="The window that pops up" />\r
+</div>\r
+\r
+<p>\r
+このポップアップしたウィンドウの下の方に数字を入れる所がありますから、ここに説明書に記載されている数字(例えば777とか666)を入力してOKボタンを押します。これでおしまいです。\r
+</p>\r
+<h2>MacOS</h2>\r
+<p>\r
+MacOS上で動作する日本語が使えるFTPクライアントでは、「Fetch日本語版」が最も人気があるようです。『<a href="http://www.hart.co.jp/fetch/">Fetch日本語版公式ホームページ</a>』よりダウンロードできます。(使い続ける方は有料になります。)\r
+</p>\r
+<p>\r
+パーミッションの変更画面では数字を入力する機能がないようですので、どこにチェックを入れたら(はずしたら)よいかがよくわからない方は『<a href="http://trynext.co.jp/tips/chmod/">TryNext|Fetchによるパーミッション設定</a>』をご覧下さい。代表的なパーミッション設定例と、計算の仕方が説明されています。\r
+</p>\r
+<p>\r
+または、下記の表にチェックを入れてみて指示されているパーミッション値になるようにテストしてみても良いかと思います。\r
+<!-- (上記のWindows版FTPソフトの設定画面とは縦軸と横軸が逆になっていますので混同しないように。) -->\r
+</p>\r
+<form id="frmSample" action="#">\r
+<table style="margin:auto;text-align:center;" summary="パーミッション設定"><tr>\r
+<td> </td>\r
+<td >オーナー</td>\r
+<td>グループ</td>\r
+<td>全員</td>\r
+</tr>\r
+<tr>\r
+<td>読む</td>\r
+<td><input type="checkbox" id="chkValue11" name="chkValue11" value="400" tabindex="10001" /></td>\r
+<td><input type="checkbox" id="chkValue21" name="chkValue21" value="40" tabindex="10004" /></td>\r
+<td><input type="checkbox" id="chkValue31" name="chkValue31" value="4" tabindex="10007" /></td>\r
+</tr>\r
+<tr>\r
+<td>書込</td>\r
+<td><input type="checkbox" id="chkValue12" name="chkValue12" value="200" tabindex="10002" /></td>\r
+<td><input type="checkbox" id="chkValue22" name="chkValue22" value="20" tabindex="10005" /></td>\r
+<td><input type="checkbox" id="chkValue32" name="chkValue32" value="2" tabindex="10008" /></td>\r
+</tr>\r
+<tr>\r
+<td>検索/実行</td>\r
+<td><input type="checkbox" id="chkValue13" name="chkValue13" value="100" tabindex="10003" /></td>\r
+<td><input type="checkbox" id="chkValue23" name="chkValue23" value="10" tabindex="10006" /></td>\r
+<td><input type="checkbox" id="chkValue33" name="chkValue33" value="1" tabindex="10009" /></td>\r
+</tr>\r
+<tr>\r
+<td colspan="4" style="text-align:center;">\r
+パーミッション値(直接入力はできません)<br />\r
+<input type="text" id="txtTotal" name="txtTotal" readonly="readonly" value=""  tabindex="10010" />\r
+\r
+</td>\r
+</tr></table>\r
+</form>\r
+\r
+\r
+\r
+\r
+<h1>バックアップをリストア(復元)する方法 <a id="backups" name="backups" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+Nucleus には最高管理者が使うことができるデータベースのバックアップ機能があります。定期的に(週1回など)バックアップを取られることを強くおすすめします。 生成されるバックアップファイルはスタンダードなSQLクエリ文です。バックアップを取った時点のデータベース状態に再構成するコマンドが書かれています。\r
+</p>\r
+\r
+<p>\r
+バックアップが作成できればリストアも簡単にできるはずですが、何らかの理由によりリストアが成功しないケースも考えられます。そこで、万が一管理エリアからリストアができない場合でも、データを書き戻す方法をいくつか紹介しておきます:\r
+</p>\r
+\r
+<div class="note">\r
+バックアップ作成時にzip圧縮を選択していた方はまず最初に解凍してください(中身はsqlファイルです)。\r
+</div>\r
+\r
+\r
+<h2>方法その1: ブラウザ上にて行う方法</h2>\r
+\r
+<p>\r
+<a href="http://phpmyadmin.sourceforge.net/">PHPMyAdmin</a>のようなブラウザでデータベースを操作できる状態の方は、ローカルにあるsqlファイルをデータベースに取り込む機能が付いているはずですので、この機能を使用してみてください。\r
+</p>\r
+\r
+<h2>方法その2: Shellにアクセスして作業する方法</h2>\r
+\r
+<p>\r
+Shellにアクセスできる状態の方は、mysqlプログラムを実行して下記のようなコマンドを叩けばリストアできます:\r
+</p>\r
+\r
+<pre>\r
+mysql -u <em>username</em> -p -h <em>hostname</em> <em>databasename</em> &lt; <em>backupfile.sql</em>\r
+</pre>\r
+\r
+\r
+<h1>新しくweblogを作成する方法 <a id="newblog" name="newblog" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<h2>1. 新規weblogの作成</h2>\r
+\r
+<p>最高管理者としてログインすると「新規weblog作成」メニューが使用できます。ここで画面の指示に従って作成してください。</p>\r
+\r
+<h2>2. 作成したweblogにアクセスする</h2>\r
+\r
+<p>新しく追加されたweblogにアクセスする方法はいくつかあります。</p>\r
+\r
+<ol>\r
+       <li>URLにて<strong><code>blogid</code>の値</strong>を指定する:\r
+               <pre><code>http://yourhost.com/index.php?blogid=<em>2</em></code></pre>\r
+               (作成したweblogのblogidは管理エリアのトップページにあるblog一覧の中の該当blogのリンク先を見ればわかります。)\r
+       </li>\r
+       <li>\r
+               アクセス専用のphpファイルを作成する:\r
+               <pre><code>&lt;?php\r
+$CONF['Self'] = '<em>copy.php</em>';\r
+include('./config.php');\r
+selectBlog('<em>shortblogname</em>');\r
+selector();\r
+\r
+?&gt;</code></pre>\r
+               上のような内容の「<code>copy.php</code>」という名前(この名前は一例です)のファイルをルートディレクトリに作成し、これにアクセスすると新しく追加されたblogが表示されます。\r
+               (作成したweblogの短縮名はは管理エリアのトップページにあるblog一覧の中から該当blogの設定画面に入るとわかります。)\r
+       </li>\r
+</ol>\r
+\r
+<h2>アクセス専用phpファイルの中で使用できるコマンド</h2>\r
+\r
+<p>上記のサンプル内で使用している <code>selectBlog</code> というコマンドは、アクセス専用phpファイルにて使用できるコマンドの一例です。他にも使用できるコマンドがありますので紹介しておきます:</p>\r
+\r
+<table summary="アクセス専用phpファイルの中で使用できるコマンド"><tr>\r
+       <th abbr="コマンド">コマンド</th>\r
+       <th abbr="意味">意味</th>\r
+</tr><tr>\r
+       <td><code>selectBlog('shortblogname');</code></td>\r
+       <td>「shortblogname」という短縮名のblogを表示させる<br />\r
+       (* URLにて指定するblogidの方が優先されます。URLにて指定がない場合にこの指定が使われます)\r
+       </td>\r
+</tr><tr>\r
+       <td><code>selectSkin('skinname');</code></td>\r
+       <td>「skinname」という名前のスキンを適用してページ表示する<br />\r
+       (* URLにて指定するskinidの方が優先されます。URLにて指定がない場合にこの指定が使われます)\r
+       </td>\r
+</tr><tr>\r
+       <td><code>selectCategory(1234);</code></td>\r
+       <td>IDが「1234」のカテゴリを選択した状態でページ表示する<br />\r
+       (* URLにて指定するcatidの方が優先されます。URLにて指定がない場合にこの指定が使われます)<br />\r
+       この指定にはカテゴリ名を指定することもできますが、複数blogが存在している場合は同じカテゴリ名があることが考えられますのでID指定の方が無難でしょう。</td>\r
+</tr><tr>\r
+       <td><code>selectItem(1234);</code></td>\r
+       <td>IDが「1234」の記事を選択した状態でページ表示する<br />\r
+       (* URLの指定が優先されます。URLにて指定がない場合にこの指定が使われます)</td>\r
+</tr><tr>\r
+       <td><code>selectLanguage('french');</code></td>\r
+       <td>言語を「french」にしてページ表示する\r
+        (PHPエラーが出る可能性がありますので注意してください)</td>\r
+</tr><tr>\r
+       <td><code>selectSpecialSkinType('construction');</code></td>\r
+       <td>指定されたスペシャルスキンタイプを使用します (note: 指定されたスペシャルスキンタイプの内容が表示されます). 次のコードはログインしていない時のみスペシャルスキンを表示します: <pre><code>if (!$member->isLoggedIn()) {\r
+       selectSpecialSkinType('login');\r
+}</code></pre> また次のコードではサイトのトップページの時にスペシャルスキンを表示します: <pre><code>if (empty($blogid) && empty($catid) && empty($itemid)&& empty($archive) && empty($archivelist)) {\r
+       selectSpecialSkinType('welcome');\r
+}</code></pre></td>\r
+</tr></table>\r
+\r
+<p>\r
+アクセス専用phpファイルの中にこれらのコマンドを書く時は、コードの順番に留意してください。これらのコマンドは、<code>include('./config.php')</code>よりも<strong>後に</strong>書き、かつ、<code>selector();</code>という行よりも<strong>前に</strong>書かなくては反映されません。\r
+</p>\r
+\r
+<h2>サブディレクトリに新しいblogを配置する場合</h2>\r
+\r
+<p>例えば、最初のblogが <code>http://yourhost.com/</code> で表示されていて、新しく追加するblogは <code>http://yourhost.com/sub/</code> のようにサブディレクトリに配置したい方は、上記のサンプルと同じアクセス専用phpファイルをそのサブディレクトリに作成します。このサブディレクトリに配置したアクセス専用phpファイルの<code>include('./config.php');</code> という部分を <code>include('../config.php');</code>と書き換えるだけで動作します。</p>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+<h1>XHTML サポートについて <a id="xhtml" name="xhtml" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>\r
+自分のページのソースコードを見た時、<code>&lt;br /&gt;</code>のようなタグコードにお気付きかと思います。これは、Nucleusが自動生成するコードがW3Cにて策定されているXHTML 1.0 standard(HTML4継承)に則っているからです。webの将来性を鑑みてこのようにしております。知る限りでは、XHTML形式の記述が古いブラウザとの互換性を損なってはいないようです。\r
+</p>\r
+\r
+<p>\r
+ですから、スキンとテンプレートの記述でミスを犯していなければ完全なXHTML準拠のソースコードが生成されるはずです。\r
+</p>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+<h1>スペシャルスキンパーツの作り方<a id="specialskinpart" name="specialskinpart" href="#top" class="toplink"><img src="icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
+\r
+<p>1. 管理エリアの「スキンの編集」ページ(<strong>レイアウト設定 &raquo; スキン編集</strong>)へ入り、パーツを作成したい(追加したい)スキンの右側のカラムにある「編集」リンクをクリックします</p>\r
+\r
+<p>2. 「スペシャルスキンパーツ」とある下にあるテキストボックスに作成したいスキンパーツの名前を書き込んで、「作成」ボタンをクリックします(例えば「About」など)。すると、スキンパーツ編集フォームが表示されるので、他のスキンパーツと同じように編集することができます(スキン変数も他のパーツと同様に使用できます)。 他のページと同じように見せたいのであれば、「メインの目次ページ」の内容をそっくりコピー&amp;ペーストして、<code>&lt;%blog(...)%&gt;</code>の部分を置き換えれば、静的ページのできあがりです。<br />\r
+例えばデフォルトスキンを使って、サイトの「About」ページを作るとすると、次の様になるでしょう。</p>\r
+<pre><code>&lt;%parsedinclude(head.inc)%&gt;\r
+\r
+&lt;!-- page header --&gt;\r
+&lt;%parsedinclude(header.inc)%&gt;\r
+\r
+&lt;!-- page content --&gt;\r
+&lt;div id="container"&gt;\r
+&lt;div class="content"&gt;\r
+ここはハイキング好きの仲間たちのサイトです。\r
+私たちは、アメリカ、カナダ、ヨーロッパで、合計4000マイルを越えるハイキングをしてきました。\r
+このサイトを通じて、皆さんと経験を共有したいと思います。\r
+私たちはハイキングが、誰もの楽しみの一つであると信じています。\r
+&lt;br /&gt;&lt;br /&gt;\r
+コミュニティに参加したい人は -&gt; をクリック: (...アカウント発行ページへのリンク...)\r
+&lt;br /&gt;&lt;br /&gt;\r
+... ここには写真などを貼り付けるのもいいでしょう ...\r
+&lt;/div&gt;\r
+&lt;/div&gt;\r
+\r
+&lt;!-- page menu --&gt;\r
+&lt;h2 class="hidden"&gt;Sidebar&lt;/h2&gt;\r
+&lt;div id="sidebarcontainer"&gt;\r
+&lt;%parsedinclude(sidebar.inc)%&gt;\r
+&lt;/div&gt;\r
+\r
+&lt;!-- page footer --&gt;\r
+&lt;%parsedinclude(footer.inc)%&gt;</code></pre>\r
+\r
+<p>3. これで、次のURLでこのページにアクセスできるようになりました(このURLを他のスキンパーツのどこかにリンクとして書いておくといいでしょう)</p>\r
+\r
+<pre><code>http://www.example.jp/index.php?special=About</code></pre>\r
+\r
+\r
+<p>4. このスキンパーツは他のスキンパーツと同様に編集でき、スキン変数やプラグインなども同様に動きます。</p>\r
+\r
+<p><strong>注意:</strong>もし、既に用意してある<code>About.html</code>を使いたい時は、ファイルを<code>skins/default/</code>ディレクトリ(デフォルトスキン使用時)に置き、スキンパーツに<code>&lt;%include(About.html)%&gt;</code>と書くだけで、その内容を取り込むことができます。そしてその内容はほぼ無制限です。</p>\r
+\r
+<p>(Tip from  <a href="http://revcetera.com/ftruscot">ftruscot</a>)</p>\r
+</div>\r
+</body>\r
+</html>\r
diff --git a/utf8/nucleus/forgotpassword.html b/utf8/nucleus/forgotpassword.html
new file mode 100755 (executable)
index 0000000..268b78e
--- /dev/null
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
+<head>
+       <!--
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+               Copyright (C) 2002-2010 The Nucleus Group
+
+               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.
+               (see nucleus/documentation/index.html#license for more info)
+
+               @license http://nucleuscms.org/license.txt GNU General Public License
+               @copyright Copyright (C) 2002-2010 The Nucleus Group
+       -->
+       <!-- $Id$ -->
+       <!-- $NucleusJP: forgotpassword.html,v 1.10.2.1 2007/09/07 07:34:18 kimitake Exp $ -->
+       <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+       <title>Nucleus - パスワードの紛失</title>
+       <style type="text/css">
+       <!--
+               @import url(styles/admin.css);
+       -->
+       </style>
+</head>
+<body>
+       <div class="header">
+       <h1>Nucleus CMS</h1>
+       </div>
+
+       <div id="content">
+
+               <h2>パスワードを忘れましたか?</h2>
+
+               <p>以下にユーザー名とメールアドレスを入力してください。新しいパスワードを設定するページへのリンクの入ったメールが送信されます。</p>
+
+               <form method="post" action="../action.php">
+                       <p>
+                               <label for="nucleus_pf_username">ユーザー名(ログインID):</label><br />
+                               <input type="text" name="name" id="nucleus_pf_username" /><br />
+
+                               <label for="nucleus_pf_email">メールアドレス:</label><br />
+                               <input type="text" name="email" id="nucleus_pf_email" /><br />
+                               <br />
+
+                               <input type="hidden" name="action" value="forgotpassword" />
+                               <input type="submit" value="認証用リンクの送信" class="transparent" />
+                       </p>
+               </form>
+
+               <p>もしユーザー名をお忘れなら、あなたのNucleusサイト管理者に連絡してください。</p>
+
+               <div class="foot">
+                       <a href="http://japan.nucleuscms.org/">Nucleus CMS</a> &copy; 2002-2010 The Nucleus Group &amp; Nucleus CMS Japanチーム - <a href="http://japan.nucleuscms.org/donate.php">寄付について</a>
+               </div>
+
+       </div>
+
+</body>
+</html>
diff --git a/utf8/nucleus/forms/additemform.template b/utf8/nucleus/forms/additemform.template
new file mode 100755 (executable)
index 0000000..47d65f4
--- /dev/null
@@ -0,0 +1,30 @@
+<script type="text/javascript">setMediaPopupURL('<%formdata(adminurl)%>');</script>
+
+<form method="post" action="<%formdata(adminurl)%>index.php">
+ <div class="blogform">
+   <%ticket%>
+   <input type="hidden" name="action" value="additem" />
+   <input type="hidden" name="actiontype" value="addnow" />               
+   <input type="hidden" name="closed" value="0" />                
+   <input type="hidden" name="catid" value="<%formdata(catid)%>" />
+   <input type="submit" name="submit" value="<%text(_ADD_ADDITEM)%>" class="formbutton" />
+   <br />
+   <input type="text" 
+       name="title" 
+       id="inputtitle" 
+       onkeyup="storeCaret(this); updPreview('title');"
+       onclick="storeCaret(this);"
+       onselect="storeCaret(this);" 
+       onkeypress="shortCuts();"                          
+       class="formfield" size="45" value="" />
+   <br />
+   <textarea name="body" id="inputbody" class="formfield" cols="45" rows="12" 
+       onkeyup="storeCaret(this); updPreview('body');"
+       onclick="storeCaret(this);"
+       onselect="storeCaret(this);" 
+       onkeypress="shortCuts();"       ></textarea>
+   <br />
+   <span class="shortcuts">[ctrl+shift+A]&nbsp;=&nbsp;Link, [ctrl+shift+B]&nbsp;=&nbsp;Bold, [ctrl+shift+I]&nbsp;=&nbsp;Italic, [ctrl+shift+M]&nbsp;=&nbsp;Insert&nbsp;Media.</span>
+   <%callback(FormExtra,additemform)%> 
+ </div>
+</form>
diff --git a/utf8/nucleus/forms/commentform-closed.template b/utf8/nucleus/forms/commentform-closed.template
new file mode 100755 (executable)
index 0000000..b9393ec
--- /dev/null
@@ -0,0 +1 @@
+<div class="commentform"><%text(_ERROR_ITEMCLOSED)%></div>
diff --git a/utf8/nucleus/forms/commentform-loggedin.template b/utf8/nucleus/forms/commentform-loggedin.template
new file mode 100755 (executable)
index 0000000..61a0950
--- /dev/null
@@ -0,0 +1,18 @@
+<a id="nucleus_cf"></a>
+<form method="post" action="#nucleus_cf">
+       <div class="commentform">
+<input type="hidden" name="action" value="addcomment" />
+<input type="hidden" name="url" value="<%formdata(destinationurl)%>" />
+<input type="hidden" name="itemid" value="<%itemid%>" />
+               <%errordiv%>
+               <label for="nucleus_cf_body"><%text(_COMMENTFORM_COMMENT)%></label>
+               <textarea name="body" class="formfield" cols="40" rows="10" id="nucleus_cf_body" style="display:block;"><%formdata(body)%></textarea>
+
+               <%text(_COMMENTFORM_YOUARE)%> <%formdata(membername)%>
+               <small>(<a href="<%self%>?action=logout" title="<%text(_LOGOUT)%>"><%text(_LOGOUT)%></a>)</small>
+
+               <input type="submit" alt="<%text(_COMMENTFORM_SUBMIT)%>" value="<%text(_COMMENTFORM_SUBMIT)%>" class="formbutton" />
+
+               <%callback(FormExtra,commentform-loggedin)%>
+       </div>
+</form>
diff --git a/utf8/nucleus/forms/commentform-notloggedin.template b/utf8/nucleus/forms/commentform-notloggedin.template
new file mode 100755 (executable)
index 0000000..f099426
--- /dev/null
@@ -0,0 +1,28 @@
+<a id="nucleus_cf"></a>
+<form method="post" action="#nucleus_cf">
+       <div class="commentform">
+<input type="hidden" name="action" value="addcomment" />
+<input type="hidden" name="url" value="<%formdata(destinationurl)%>" />
+<input type="hidden" name="itemid" value="<%itemid%>" />
+               <%errordiv%>
+
+               <label for="nucleus_cf_body"><%text(_COMMENTFORM_COMMENT)%></label>
+               <textarea name="body" class="formfield" cols="40" rows="10" id="nucleus_cf_body" style="display:block;"><%formdata(body)%></textarea>
+
+               <label for="nucleus_cf_name"><%text(_COMMENTFORM_NAME)%></label>
+               <input name="user" size="40" maxlength="40" value="<%formdata(user)%>" class="formfield" id="nucleus_cf_name" style="display:block;" />
+
+               <label for="nucleus_cf_mail"><%text(_COMMENTFORM_MAIL)%></label>
+               <input name="userid" size="40" maxlength="60" value="<%formdata(userid)%>" class="formfield" id="nucleus_cf_mail" style="display:block;" />
+
+               <label for="nucleus_cf_email"><%text(_COMMENTFORM_EMAIL)%></label>
+               <input name="email" size="40" maxlength="100" value="<%formdata(email)%>" class="formfield" id="nucleus_cf_email" style="display:block;" />
+
+               <%callback(FormExtra,commentform-notloggedin)%>
+
+               <input type="checkbox" value="1" name="remember" id="nucleus_cf_remember" <%formdata(rememberchecked)%> />
+               <label for="nucleus_cf_remember"><%text(_COMMENTFORM_REMEMBER)%></label>
+
+               <input type="submit" alt="<%text(_COMMENTFORM_SUBMIT)%>" value="<%text(_COMMENTFORM_SUBMIT)%>" class="formbutton" />
+       </div>
+</form>
diff --git a/utf8/nucleus/forms/loginform-loggedin.template b/utf8/nucleus/forms/loginform-loggedin.template
new file mode 100755 (executable)
index 0000000..dae2336
--- /dev/null
@@ -0,0 +1,4 @@
+<a id="nucleus_lf"></a>
+<div class="loginform">
+       <%text(_LOGINFORM_YOUARE)%> <%formdata(membername)%> ! (<a href="<%self%>?action=logout" title="<%text(_LOGOUT)%>"><%text(_LOGOUT)%></a>)
+</div>
diff --git a/utf8/nucleus/forms/loginform-notloggedin.template b/utf8/nucleus/forms/loginform-notloggedin.template
new file mode 100755 (executable)
index 0000000..70e91d5
--- /dev/null
@@ -0,0 +1,18 @@
+<a id="nucleus_lf"></a>
+<form method="post" action="#nucleus_lf">
+       <div class="loginform">
+<input type="hidden" name="action" value="login" />
+               <%errordiv%>
+
+               <label for="nucleus_lf_name" accesskey="l"><%text(_LOGINFORM_NAME)%></label>
+               <input id="nucleus_lf_name" name="login" size="10" value="" class="formfield" />
+
+               <label for="nucleus_lf_pwd"><%text(_LOGINFORM_PWD)%></label>
+               <input id="nucleus_lf_pwd" name="password" size="10" type="password" value="" class="formfield" />
+
+               <input type="checkbox" value="1" name="shared" id="nucleus_lf_shared" />
+               <label for="nucleus_lf_shared"><%text(_LOGINFORM_SHARED)%></label>
+
+               <input type="submit" alt="<%text(_LOGIN)%>" value="<%text(_LOGIN)%>" class="formbutton" />
+       </div>
+</form>
diff --git a/utf8/nucleus/forms/membermailform-disallowed.template b/utf8/nucleus/forms/membermailform-disallowed.template
new file mode 100755 (executable)
index 0000000..01e37b6
--- /dev/null
@@ -0,0 +1 @@
+<div class="mailform"><%text(_ERROR_LOGINNEEDED)%></div>
\ No newline at end of file
diff --git a/utf8/nucleus/forms/membermailform-loggedin.template b/utf8/nucleus/forms/membermailform-loggedin.template
new file mode 100755 (executable)
index 0000000..9f6271c
--- /dev/null
@@ -0,0 +1,15 @@
+<a id="nucleus_mf"></a>
+<form method="post" action="#nucleus_mf">
+       <div class="mailform">
+<input type="hidden" name="memberid" value="<%formdata(memberid)%>" />
+<input type="hidden" name="action" value="sendmessage" />
+<input type="hidden" name="url" value="<%formdata(url)%>" />
+               <%errordiv%>
+
+               <textarea alt="<%text(_MMAIL_MAIL)%>" name="message" class="formfield" rows="<%formdata(rows)%>" cols="<%formdata(cols)%>"><%formdata(message)%></textarea>
+
+               <%callback(FormExtra,membermailform-loggedin)%>
+
+               <input type="submit" alt="<%text(_MEMBERMAIL_SUBMIT)%>" value="<%text(_MEMBERMAIL_SUBMIT)%>" class="formbutton" />
+       </div>
+</form>
diff --git a/utf8/nucleus/forms/membermailform-notloggedin.template b/utf8/nucleus/forms/membermailform-notloggedin.template
new file mode 100755 (executable)
index 0000000..e499086
--- /dev/null
@@ -0,0 +1,18 @@
+<a id="nucleus_mf"></a>
+<form method="post" action="#nucleus_mf">
+       <div class="mailform">
+<input type="hidden" name="memberid" value="<%formdata(memberid)%>" />
+<input type="hidden" name="action" value="sendmessage" />
+<input type="hidden" name="url" value="<%formdata(url)%>" />
+               <%errordiv%>
+
+               <textarea alt="<%text(_MMAIL_MAIL)%>" name="message" class="formfield" rows="<%formdata(rows)%>" cols="<%formdata(cols)%>"><%formdata(message)%></textarea>
+
+               <label for="nucleus_mmf_frommail"><%text(_MEMBERMAIL_MAIL)%></label>
+               <input id="nucleus_mmf_frommail" type="text" name="frommail" class="formfield" value="<%formdata(frommail)%>" />
+
+               <%callback(FormExtra,membermailform-notloggedin)%>
+
+               <input type="submit" alt="<%text(_MEMBERMAIL_SUBMIT)%>" value="<%text(_MEMBERMAIL_SUBMIT)%>" class="formbutton" />
+       </div>
+</form>
diff --git a/utf8/nucleus/forms/nucleusbutton.template b/utf8/nucleus/forms/nucleusbutton.template
new file mode 100755 (executable)
index 0000000..64f545f
--- /dev/null
@@ -0,0 +1,3 @@
+<div class="nucleusbutton">
+       <a href="http://nucleuscms.org/"><img src="<%formdata(imgurl)%>" width="<%formdata(imgwidth)%>" height="<%formdata(imgheight)%>" alt="Powered by Nucleus CMS" title="Powered by Nucleus CMS" /></a>
+</div>
diff --git a/utf8/nucleus/forms/searchform.template b/utf8/nucleus/forms/searchform.template
new file mode 100755 (executable)
index 0000000..0122457
--- /dev/null
@@ -0,0 +1,8 @@
+<form method="get" action="<%self%>">
+       <div class="searchform">
+<input type="hidden" name="amount" value="0" />
+<input type="hidden" name="blogid" value="<%formdata(id)%>" />
+               <input name="query" alt="<%text(_SEARCHFORM_QUERY)%>" class="formfield" size="10" maxlength="60" accesskey="4" value="<%formdata(query)%>" />
+               <input type="submit" alt="<%text(_SEARCHFORM_SUBMIT)%>" value="<%text(_SEARCHFORM_SUBMIT)%>" class="formbutton" />
+       </div>
+</form>
diff --git a/utf8/nucleus/images/button-aligncenter.gif b/utf8/nucleus/images/button-aligncenter.gif
new file mode 100755 (executable)
index 0000000..2ce38e7
Binary files /dev/null and b/utf8/nucleus/images/button-aligncenter.gif differ
diff --git a/utf8/nucleus/images/button-alignleft.gif b/utf8/nucleus/images/button-alignleft.gif
new file mode 100755 (executable)
index 0000000..53522cb
Binary files /dev/null and b/utf8/nucleus/images/button-alignleft.gif differ
diff --git a/utf8/nucleus/images/button-alignright.gif b/utf8/nucleus/images/button-alignright.gif
new file mode 100755 (executable)
index 0000000..a27a944
Binary files /dev/null and b/utf8/nucleus/images/button-alignright.gif differ
diff --git a/utf8/nucleus/images/button-bold.gif b/utf8/nucleus/images/button-bold.gif
new file mode 100755 (executable)
index 0000000..207c859
Binary files /dev/null and b/utf8/nucleus/images/button-bold.gif differ
diff --git a/utf8/nucleus/images/button-copy.gif b/utf8/nucleus/images/button-copy.gif
new file mode 100755 (executable)
index 0000000..4cb12cf
Binary files /dev/null and b/utf8/nucleus/images/button-copy.gif differ
diff --git a/utf8/nucleus/images/button-cut.gif b/utf8/nucleus/images/button-cut.gif
new file mode 100755 (executable)
index 0000000..d00c0e6
Binary files /dev/null and b/utf8/nucleus/images/button-cut.gif differ
diff --git a/utf8/nucleus/images/button-italic.gif b/utf8/nucleus/images/button-italic.gif
new file mode 100755 (executable)
index 0000000..bcef033
Binary files /dev/null and b/utf8/nucleus/images/button-italic.gif differ
diff --git a/utf8/nucleus/images/button-left.gif b/utf8/nucleus/images/button-left.gif
new file mode 100755 (executable)
index 0000000..9158414
Binary files /dev/null and b/utf8/nucleus/images/button-left.gif differ
diff --git a/utf8/nucleus/images/button-link.gif b/utf8/nucleus/images/button-link.gif
new file mode 100755 (executable)
index 0000000..c1a41e2
Binary files /dev/null and b/utf8/nucleus/images/button-link.gif differ
diff --git a/utf8/nucleus/images/button-media.gif b/utf8/nucleus/images/button-media.gif
new file mode 100755 (executable)
index 0000000..ce65641
Binary files /dev/null and b/utf8/nucleus/images/button-media.gif differ
diff --git a/utf8/nucleus/images/button-paste.gif b/utf8/nucleus/images/button-paste.gif
new file mode 100755 (executable)
index 0000000..ef0d0eb
Binary files /dev/null and b/utf8/nucleus/images/button-paste.gif differ
diff --git a/utf8/nucleus/images/button-preview.gif b/utf8/nucleus/images/button-preview.gif
new file mode 100755 (executable)
index 0000000..71d2d92
Binary files /dev/null and b/utf8/nucleus/images/button-preview.gif differ
diff --git a/utf8/nucleus/images/button-right.gif b/utf8/nucleus/images/button-right.gif
new file mode 100755 (executable)
index 0000000..124772b
Binary files /dev/null and b/utf8/nucleus/images/button-right.gif differ
diff --git a/utf8/nucleus/images/globe.gif b/utf8/nucleus/images/globe.gif
new file mode 100755 (executable)
index 0000000..03f2a47
Binary files /dev/null and b/utf8/nucleus/images/globe.gif differ
diff --git a/utf8/nucleus/index.php b/utf8/nucleus/index.php
new file mode 100755 (executable)
index 0000000..a496456
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: index.php,v 1.8.2.1 2007/09/07 07:36:09 kimitake Exp $
+ */
+       // we are using admin stuff:
+       $CONF = array();
+       $CONF['UsingAdminArea'] = 1;
+
+       // include the admin code
+       include('../config.php');
+
+       if ($CONF['alertOnSecurityRisk'] == 1) {
+               // check if files exist and generate an error if so
+               $aFiles = array(
+                '../install' => _ERRORS_INSTALLDIR,
+                       'upgrades'       => _ERRORS_UPGRADESDIR,\r
+                       'convert'        => _ERRORS_CONVERTDIR\r
+               );
+               $aFound = array();
+               foreach($aFiles as $fileName => $fileDesc) {
+                       if (@file_exists($fileName))
+                               array_push($aFound, $fileDesc);
+               }
+               if (@is_writable('../config.php')) {
+                       array_push($aFound, _ERRORS_CONFIGPHP);
+               }
+               if (sizeof($aFound) > 0) {
+                       startUpError(
+                               _ERRORS_STARTUPERROR1. implode($aFound, '</li><li>')._ERRORS_STARTUPERROR2,\r
+                               _ERRORS_STARTUPERROR3\r
+                       );
+               }
+       }
+
+       $bNeedsLogin   = false;
+       $bIsActivation = in_array($action, array('activate', 'activatesetpwd'));
+
+       if ($action == 'logout') {
+               $bNeedsLogin = true;\r
+       }
+
+       if (!$member->isLoggedIn() && !$bIsActivation) {
+               $bNeedsLogin = true;\r
+       }
+
+       // show error if member cannot login to admin
+       if ($member->isLoggedIn() && !$member->canLogin() && !$bIsActivation) {
+               $error       = _ERROR_LOGINDISALLOWED;
+               $bNeedsLogin = true;
+       }
+
+       if ($bNeedsLogin) {
+               setOldAction($action);  // see ADMIN::login() (sets old action in POST vars)
+               $action = 'showlogin';
+       }
+
+       sendContentType('text/html', 'admin-' . $action);
+
+       $admin = new ADMIN();
+       $admin->action($action);
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/javascript/admin.js b/utf8/nucleus/javascript/admin.js
new file mode 100755 (executable)
index 0000000..7a48040
--- /dev/null
@@ -0,0 +1,60 @@
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2010 The Nucleus Group
+  *
+  * 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.
+  * (see nucleus/documentation/index.html#license for more info)
+  *  
+  * Some JavaScript code for the admin area
+  *
+  * $Id$
+  * $NucleusJP: admin.js,v 1.6.2.1 2007/09/05 05:58:56 kimitake Exp $
+  */
+
+function help(url) {
+       popup = window.open(url,'helpwindow','status=no,toolbar=no,scrollbars=yes,resizable=yes,width=570,height=530,top=0,left=0');
+       if (popup.focus) popup.focus();
+       if (popup.GetAttention) popup.GetAttention();
+       return false;
+}                              
+
+var oldCellColor = "#000";
+function focusRow(row) {
+       var cells = row.cells;
+       if (!cells) return;
+       oldCellColor = cells[0].style.backgroundColor;
+       for (var i=0;i<cells.length;i++) {
+               cells[i].style.backgroundColor='whitesmoke';
+       }
+}
+function blurRow(row) {
+       var cells = row.cells;
+       if (!cells) return;
+       for (var i=0;i<cells.length;i++) {
+               cells[i].style.backgroundColor=oldCellColor;
+       }
+}
+function batchSelectAll(what) {
+       var i = 0;
+       var el;
+       while (el = document.getElementById('batch' + i)) {
+               el.checked = what?'checked':'';
+               i++;
+       }
+       return false;                                   
+}
+function selectCanLogin(flag) {
+       if (flag) {
+               window.document.memberedit.canlogin[0].checked=true;
+
+               // don't disable canlogin[0], otherwise the value won't be passed.
+//             window.document.memberedit.canlogin[0].disabled=true;
+               window.document.memberedit.canlogin[1].disabled=true;
+       } else {
+               window.document.memberedit.canlogin[0].disabled=false;
+               window.document.memberedit.canlogin[1].disabled=false;
+       }
+}
diff --git a/utf8/nucleus/javascript/bookmarklet.js b/utf8/nucleus/javascript/bookmarklet.js
new file mode 100755 (executable)
index 0000000..1a22762
--- /dev/null
@@ -0,0 +1,71 @@
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2010 The Nucleus Group
+  *
+  * 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.
+  * (see nucleus/documentation/index.html#license for more info)
+  *  
+  * Some JavaScript code for the bookmarklets
+  *
+  * $Id$
+  * $NucleusJP: bookmarklet.js,v 1.4 2006/07/12 07:11:47 kimitake Exp $
+  */
+
+/**
+ * On browsers that have DOM support, the non-visible tabs of the bookmarklet are 
+ * initially hidden. This is not defined in the CSS stylesheet since this causes 
+ * problems with Opera (which does not seem to be sending form data for input
+ * fields which are in a hidden block)
+ *
+function initStyles() {
+       hideBlock('more');
+       hideBlock('options');
+       hideBlock('preview');
+       
+       // in browsers that do not support DOM (like opera), the buttons used
+       // to switch tabs are useless and can be hidden
+       document.getElementById('switchbuttons').style.display = 'inline';
+}
+
+/**
+ * To be called with id='body','more','options' or 'preview'
+ * Hides all other tabs and makes the chosen one visible
+ *
+function flipBlock(id) {
+
+       showBlock(id);
+       
+       if (id != 'body')
+               hideBlock('body');
+       if (id != 'more')
+               hideBlock('more');
+       if (id != 'options')
+               hideBlock('options');
+       if (id != 'preview')
+               hideBlock('preview');           
+       
+}
+
+/**
+ * Hides one element (tab)
+ *
+function hideBlock(id) {
+       document.getElementById(id).style.display = "none";
+}
+
+/**
+ * Makes an element (tab) visible
+ *
+function showBlock(id) {
+       document.getElementById(id).style.display = "block";
+}
+*/
+function help(url) {
+       popup = window.open(url,'helpwindow','status=no,toolbar=yes,scrollbars=yes,resizable=yes,width=500,height=500,top=0,left=0');
+       if (popup.focus) popup.focus();
+       if (popup.GetAttention) popup.GetAttention();
+       return false;
+}
diff --git a/utf8/nucleus/javascript/compatibility.js b/utf8/nucleus/javascript/compatibility.js
new file mode 100755 (executable)
index 0000000..0b8a617
--- /dev/null
@@ -0,0 +1,34 @@
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2010 The Nucleus Group
+  *
+  * 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.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  *    Javascript code to make sure that:
+  *  - javascript still works when sending pages as application/xhtml+xml
+  *  - this doesn't break functionality in IE
+  *
+  * How to use:
+  *            - Include this file
+  *            - Use createElement() instead of document.createElement()
+  *
+  * That's basically it :)
+  *
+  * $Id$
+  * $NucleusJP: compatibility.js,v 1.4 2006/07/12 07:11:47 kimitake Exp $
+  */
+
+// to get the script working when page is sent as application/xhtml+xml
+function createElement(element) {
+  if (document.createElementNS) {
+       return document.createElementNS('http://www.w3.org/1999/xhtml', element);
+  }
+  if (document.createElement) {
+       return document.createElement(element);
+  }
+  return false;
+}
diff --git a/utf8/nucleus/javascript/edit.js b/utf8/nucleus/javascript/edit.js
new file mode 100755 (executable)
index 0000000..e429400
--- /dev/null
@@ -0,0 +1,348 @@
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+  * Copyright (C) 2002-2010 The Nucleus Group
+  *
+  * 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.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  * This file contains functions to allow adding items from inside the weblog.
+  * Also contains code to avoid submitting form data twice.
+  *
+  * $Id$
+  * $NucleusJP: edit.js,v 1.5 2006/07/12 07:11:47 kimitake Exp $
+  */
+
+var nucleusConvertBreaks = true;
+var nucleusMediaPopupURL = '';
+var nucleusMediaURL = 'media/';
+var nucleusAuthorId = 0;
+var scrollTop = -1;
+
+function setConvertBreaks(newval) {    nucleusConvertBreaks = newval; }
+function setMediaUrl(url) { nucleusMediaURL = url; }
+function setAuthorId(id) { nucleusAuthorId = id; }
+
+function preview(id, value) {
+       elem = document.getElementById(id);
+       if (!elem) return;
+
+       var preview = nucleusConvertBreaks ? str_replace("\n","<br />",value)+"&#160;" : value+"&#160;";
+
+       // expand the media commands (without explicit collection)
+       preview = preview.replace(/\<\%image\(([^\/\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<img src='"+nucleusMediaURL+nucleusAuthorId+"/$1' width='$2' height='$3' alt=\"$4\" />");
+
+       // expand the media commands (with collection)
+       preview = preview.replace(/\<\%image\(([^\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<img src='"+nucleusMediaURL+"$1' width='$2' height='$3' alt=\"$4\" />");
+       preview = preview.replace(/\<\%popup\(([^\|]*)\|([^\|]*)\|([^\|]*)\|([^)]*)\)\%\>/g,"<a href='' onclick='if (event &amp;&amp; event.preventDefault) event.preventDefault(); alert(\"popup image\"); return false;' title='popup'>$4</a>");
+       preview = preview.replace(/\<\%media\(([^\|]*)\|([^)]*)\)\%\>/g,"<a href='' title='media link'>$2</a>");
+
+       elem.innerHTML = preview;
+}
+
+function showedit() {
+       prevval = document.getElementById('edit').style.display;
+       if (prevval == "block")
+               newval = "none";
+       else
+               newval = "block";
+       document.getElementById('edit').style.display = newval;
+
+       if (newval == "block")
+               updAllPreviews();
+}
+
+function updAllPreviews() {
+       updPreview('title');
+       updPreview('body');
+       updPreview('more');
+}
+
+function isEditVisible() {
+       var editform = document.getElementById('edit');
+       if (!editform) return true;
+       var prevval = editform.style.display;
+       return (prevval == "none") ? false : true;
+}
+
+function updPreview(id) {
+       // don't update when preview is hidden
+       if (!isEditVisible()) return;
+
+       var inputField = document.getElementById('input' + id);
+       if (!inputField) return;
+       preview('prev' + id, inputField.value);
+}
+
+// replace a in s by b (taken from milov.nl)
+function str_replace(a, b, s)
+{
+       if (a == b || !s.length || !a.length) return s;
+       if ((p=s.indexOf(a)) == -1) { return s; }
+       else { ns = s.substring(0,p) + b + s.substring(p+a.length,s.length); }
+       return (s.indexOf(a) != -1) ? str_replace(a, b, ns) : ns;
+}
+
+function shortCuts() {
+       if (!event || (event.ctrlKey != true)) return;
+
+       switch (event.keyCode) {
+               case 1:
+                       ahrefThis(); break; // ctrl-shift-a
+               case 2:
+                       boldThis(); break; // ctrl-shift-b
+               case 9:
+                       italicThis(); break; // ctrl-shift-i
+               case 13:
+                       addMedia(); break; // ctrl-shift-m
+               default:
+                       return;
+       }
+       return;
+}
+
+function cutThis() { execAndUpdate('cut'); }
+function copyThis() { execAndUpdate('copy'); }
+function pasteThis() { execAndUpdate('paste'); }
+function boldThis() { insertAroundCaret('<b>','</b>'); }
+function italicThis() { insertAroundCaret('<i>','</i>'); }
+function leftThis() { insertAroundCaret('<div class="leftbox">','</div>'); }
+function rightThis() { insertAroundCaret('<div class="rightbox">','</div>'); }
+function alignleftThis() { insertAroundCaret('<div style="text-align: left">','</div>'); }
+function alignrightThis() { insertAroundCaret('<div style="text-align: right">','</div>'); }
+function aligncenterThis() { insertAroundCaret('<div style="text-align: center">','</div>'); }
+
+
+function ahrefThis() {
+       if (document.selection)
+               strSelection = document.selection.createRange().text;
+       else
+               strSelection = '';
+
+       strHref = prompt("Create a link to:","http://");
+       if (strHref == null) return;
+
+       var textpre = "<a href=\"" + strHref.replace(/&/g,'&amp;') + "\">";
+       insertAroundCaret(textpre, "</a>");
+}
+
+function execAndUpdate(action) {
+       lastSelected.caretPos.execCommand(action);
+       updAllPreviews();
+}
+
+
+var nonie_FormType = 'body';
+
+// Add media to new item
+function addMedia() {
+
+       var mediapopup = window.open(nucleusMediaPopupURL + 'media.php','name',
+               'status=yes,toolbar=no,scrollbars=yes,resizable=yes,width=500,height=450,top=0,left=0');
+
+       return;
+}
+
+
+function setMediaPopupURL(url) {
+       nucleusMediaPopupURL = url;
+}
+
+function includeImage(collection, filename, type, width, height) {
+       if (isCaretEmpty()) {
+               text = prompt("Text to display ?", filename);
+       } else {
+               text = getCaretText();
+       }
+
+       // add collection name when not private collection (or editing a message that's not your)
+       var fullName;
+       if (isNaN(collection) || (nucleusAuthorId != collection)) {
+               fullName = collection + '/' + filename;
+       } else {
+               fullName = filename;
+       }
+
+
+       var replaceBy;
+       switch(type) {
+               case 'popup':
+                       replaceBy = '<%popup(' +  fullName + '|'+width+'|'+height+'|' + text +')%>';
+                       break;
+               case 'inline':
+               default:
+                       replaceBy = '<%image(' +  fullName + '|'+width+'|'+height+'|' + text +')%>';
+       }
+
+       insertAtCaret(replaceBy);
+       updAllPreviews();
+
+}
+
+
+function includeOtherMedia(collection, filename) {
+       if (isCaretEmpty()) {
+               text = prompt("Text to display ?", filename);
+       } else {
+               text = getCaretText();
+       }
+
+       // add collection name when not private collection (or editing a message that's not your)
+       var fullName;
+       if (isNaN(collection) || (nucleusAuthorId != collection)) {
+               fullName = collection + '/' + filename;
+       } else {
+               fullName = filename;
+       }
+
+       var replaceBy = '<%media(' +  fullName + '|' + text +')%>';
+
+       insertAtCaret(replaceBy);
+       updAllPreviews();
+}
+
+
+
+// function to prevent submitting form data twice
+var submitcount=0;
+function checkSubmit() {
+       if (submitcount == 0) {
+               submitcount++;
+               return true;
+       } else {
+               return false;
+       }
+}
+
+
+// code to store the caret (cursor) position of a text field/text area
+// taken from javascript.faqts and modified
+// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
+
+// stores the caret
+var lastSelected, lastCaretPos;
+function storeCaret (textEl) {
+
+       // store caret
+       if (textEl.createTextRange) 
+               //textEl.caretPos = document.selection.createRange().duplicate();
+               lastCaretPos = document.selection.createRange().duplicate();
+
+       // also store lastselectedelement
+       lastSelected = textEl;
+       
+       nonie_FormType = textEl.name;
+
+       scrollTop = textEl.scrollTop;
+}
+
+//var lastSelected;
+
+// inserts text at caret (overwriting selection)
+function insertAtCaret (text) {
+       var textEl = lastSelected;
+       if (textEl && textEl.createTextRange && lastCaretPos) {
+               var caretPos = lastCaretPos;
+               caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
+       } else if (!document.all && document.getElementById) {
+               mozReplace(document.getElementById('input' + nonie_FormType), text);                            
+               if(scrollTop>-1) {
+                       document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
+               }
+       } else if (textEl) {
+               textEl.value  += text;
+       } else {
+               document.getElementById('input' + nonie_FormType).value += text;                
+               if(scrollTop>-1) {
+                       document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
+               }
+       }
+       updAllPreviews();
+}
+
+// inserts a tag around the selected text
+function insertAroundCaret (textpre, textpost) {
+       var textEl = lastSelected;
+       
+       if (textEl && textEl.createTextRange && lastCaretPos) {
+               var caretPos = lastCaretPos;
+               caretPos.text = textpre + caretPos.text + textpost;
+       } else if (!document.all && document.getElementById) {
+               mozWrap(document.getElementById('input' + nonie_FormType), textpre, textpost);          
+               if(scrollTop>-1) {
+                       document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
+               }
+       } else {
+               document.getElementById('input' + nonie_FormType).value += textpre + textpost;
+               if(scrollTop>-1) {
+                       document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
+               }
+       }
+
+       updAllPreviews();
+}
+
+/* some methods to get things working in Mozilla as well */
+function mozWrap(txtarea, lft, rgt) {
+       var selLength = txtarea.textLength;
+       var selStart = txtarea.selectionStart;
+       var selEnd = txtarea.selectionEnd;
+       if (selEnd==1 || selEnd==2) selEnd=selLength;
+       var s1 = (txtarea.value).substring(0,selStart);
+       var s2 = (txtarea.value).substring(selStart, selEnd)
+       var s3 = (txtarea.value).substring(selEnd, selLength);
+       txtarea.value = s1 + lft + s2 + rgt + s3;
+}
+function mozReplace(txtarea, newText) {
+       var selLength = txtarea.textLength;
+       var selStart = txtarea.selectionStart;
+       var selEnd = txtarea.selectionEnd;
+       if (selEnd==1 || selEnd==2) selEnd=selLength;
+       var s1 = (txtarea.value).substring(0,selStart);
+       var s2 = (txtarea.value).substring(selStart, selEnd)
+       var s3 = (txtarea.value).substring(selEnd, selLength);
+       txtarea.value = s1 + newText + s3;
+}
+function mozSelectedText() {
+       var txtarea = document.getElementById('input' + nonie_FormType);
+       var selLength = txtarea.textLength;
+       var selStart = txtarea.selectionStart;
+       var selEnd = txtarea.selectionEnd;
+       if (selEnd==1 || selEnd==2) selEnd=selLength;
+       return (txtarea.value).substring(selStart, selEnd);
+}
+
+function getCaretText() {
+       if (!document.all && document.getElementById)
+               return mozSelectedText();
+       else
+               return lastCaretPos.text;
+}
+
+function isCaretEmpty() {
+       if (lastSelected && lastSelected.createTextRange && lastCaretPos)
+               return (lastCaretPos.text == '');
+       else if (!document.all && document.getElementById)
+               return (mozSelectedText() == '');
+       else
+               return true;
+}
+
+function BtnHighlight(el) {
+       with(el.style){
+               borderLeft="1px solid gray";
+               borderRight="1px solid #e9e9e9";
+               borderTop="1px solid gray";
+               borderBottom="1px solid #e9e9e9";
+       }
+}
+
+function BtnNormal(el) {
+       with(el.style){
+               padding="3px";
+               border="1px solid #dddddd";
+       }
+}
+
diff --git a/utf8/nucleus/javascript/index.html b/utf8/nucleus/javascript/index.html
new file mode 100755 (executable)
index 0000000..3974d80
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/javascript/numbercheck.js b/utf8/nucleus/javascript/numbercheck.js
new file mode 100755 (executable)
index 0000000..ae67232
--- /dev/null
@@ -0,0 +1,37 @@
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2010 The Nucleus Group
+  *
+  * 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.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  * script the check (on the clientside) if a entered value
+  * is a valid number and remove the invalid chars
+  *
+  * $Id$
+  * $NucleusJP: numbercheck.js,v 1.3 2006/07/12 07:11:47 kimitake Exp $
+  */
+
+function checkNumeric(f)
+{
+       newval='';
+       dot = false;
+       for (i = 0; i < f.value.length; i++) {
+               c = f.value.substring(i,i+1);
+               if (isInteger(c) || ((c == '.')&&(dot == false)) || ((i == 0)&&(c == '-'))) {
+                       newval += c;
+                       if (c == '.') {
+                               dot = true;
+                       }
+               }
+       }
+       f.value = newval;
+}
+
+function isInteger(value)
+{
+       return (parseInt(value) == value);
+}
diff --git a/utf8/nucleus/javascript/opennew.js b/utf8/nucleus/javascript/opennew.js
new file mode 100755 (executable)
index 0000000..2467211
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ *
+ * $Id$
+ * $NucleusJP: opennew.js,v 1.4 2006/07/12 07:11:47 kimitake Exp $
+ *
+ * JavaScript to open non-local links in a new window.
+ *
+ * How to use:
+ *  in the <head>...</head> section of your page, add the following line:
+ *
+ *  <script type="text/javascript" src="nucleus/javascript/opennew.js"></script>
+ *
+ *  Then, add the following to your <body> tag:
+ *
+ *  <body ... onload="setOpenNewWindow(true);">
+ *
+ *  And you're all done.
+ *
+ * Variables that can be overridden if necessary:
+ *     local = something to recognize local URLs (by default, if your page is something like
+ *              http://www.example.com/path/page.html, then local will be automatically set to
+ *              http://www.example.com/path/)
+ *      exception = something to recognize exceptions to the local check. You might need this
+ *                  when you use a 'click-through' type of script (e.g. when
+ *                  http://www.example.com/path/click.php?http://otherpage.com/ would 
+ *                  auto-redirect to otherpage.com and record a click in your logs)
+ *                  In most of the cases, this variable is unneeded and can be left empty
+ *      destinationFrame = name of the destination frame (by default this is "_blank" to spawn a
+ *                         new window for each link clicked)
+ */
+
+
+var local = document.URL.substring(0,document.URL.lastIndexOf('/'));
+var exception = "";
+var destinationFrame = "_blank";
+
+function setOpenNewWindow(newWin) {
+       if (newWin) {
+               from = ""; to = destinationFrame;
+       } else {
+               from = destinationFrame; to = "";
+       }
+
+       for (var i=0; i<=(document.links.length-1); i++) {
+               if (document.links[i].target == from) {
+
+                       var href = document.links[i].href;
+                       var isLocal = (href.indexOf(local) != -1);
+                       if (isLocal && ((exception=="") || (href.indexOf(exception) != -1)))
+                               isLocal = false;
+                       if (!isLocal)
+                               document.links[i].target = to;
+               }
+       }
+}
diff --git a/utf8/nucleus/javascript/templateEdit.js b/utf8/nucleus/javascript/templateEdit.js
new file mode 100755 (executable)
index 0000000..eb073c2
--- /dev/null
@@ -0,0 +1,67 @@
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2010 The Nucleus Group
+  *
+  * 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.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  *    Javascript code to hide empty textareas when editing templates.
+  *
+  * @require compatibility.js
+  *
+  * $Id$
+  * $NucleusJP: templateEdit.js,v 1.4 2006/07/12 07:11:47 kimitake Exp $
+  */
+
+var amountOfFields = 1;
+var editText = 'empty field (click to edit)';
+
+function hideUnused() {
+       while (document.getElementById('textarea' + amountOfFields)) 
+               amountOfFields++;
+       amountOfFields--;
+
+       for (var i=1;i<=amountOfFields;i++) {
+               var el = document.getElementById('textarea' + i);
+
+               // hide textareas when empty, and add onclick event
+               // to make them visible again
+               if (el.value == '') {
+                       el.style.display = 'none';
+                       var tdEl = document.getElementById('td' + i);
+                       
+                       var aHref = createElement('a');
+                       aHref.href = '';
+                       aHref.className = "expandLink";
+                       aHref.id = "expandLink" + i;
+                       aHref.onclick = new Function("return makeVisible("+i+")");
+                       aHref.tabIndex = el.tabIndex;
+                       aHref.title = editText;
+                       aHref.appendChild(document.createTextNode(editText));
+
+                       tdEl.appendChild(aHref);
+                       
+               }
+       }
+
+}
+
+function setTemplateEditText(newText) {
+       editText = newText;
+}
+
+function makeVisible(i) {
+       var textareaEl = document.getElementById('textarea' + i);
+       var expandEl = document.getElementById('expandLink' + i);
+
+       textareaEl.style.display = 'block';
+       expandEl.style.display = 'none';
+
+       textareaEl.focus();
+       return false;
+}
+
+window.onload = hideUnused;    
\ No newline at end of file
diff --git a/utf8/nucleus/javascript/xmlhttprequest.js b/utf8/nucleus/javascript/xmlhttprequest.js
new file mode 100644 (file)
index 0000000..be0ba22
--- /dev/null
@@ -0,0 +1,184 @@
+/**
+  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) 
+  * Copyright (C) 2002-2010 The Nucleus Group
+  *
+  * 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.
+  * (see nucleus/documentation/index.html#license for more info)
+  *
+  *
+  * This page contains xmlHTTPRequest functions for:
+  * - AutoSaveDraft
+  *
+  *
+  * Usage:
+  * - Add in the page before the form open tag:
+  *     <script type="text/javascript" src="javascript/xmlhttprequest.js"></script>
+  * - Add in the page behind the form close tag:
+  *     var xmlhttprequest = new Array();
+  *     xmlhttprequest[0] = createHTTPHandler(); // AutoDraft handler
+  *     xmlhttprequest[1] = createHTTPHandler(); // UpdateTicket handler
+  *     var seconds = now(); // Last AutoDraft time
+  *     var checks = 0; // Number of checks since last AutoDraft
+  *     var addform = document.getElementById('addform'); // The form id
+  *     var goal = document.getElementById('lastsaved'); // The html div id where 'Last saved: date time' must come
+  *     var goalurl = 'action.php'; // The PHP file where the content must be posted to (action.php)
+  *     var lastsavedtext = 'Last saved'; // The language variable for 'Last saved'
+  *     var formtype = 'add'; // Add or edit form
+  * - Add to the form tag:
+  *     id="addform"
+  * - Add to the textarea's and text fields:
+  *     onkeyup="doMonitor();"
+  * - Add tot the selectboxes and radio buttons
+  *     onchange="doMonitor();"
+  * - Add to the form:
+  *     <input type="hidden" name="draftid" value="0" />
+  * - Optionally a autosave now button can be add:
+  *     <input type="button" name="autosavenow" value="AutoSave now" onclick="autoSaveDraft();" />
+  *
+  *
+  * $Id$
+  * $NucleusJP$
+  */
+
+/**
+ * Creates the xmlHTTPRequest handler
+ */
+function createHTTPHandler() {
+       var httphandler = false;
+       /*@cc_on @*/
+       /*@if (@_jscript_version >= 5)
+               // JScript gives us Conditional compilation, we can cope with old IE versions.
+               // and security blocked creation of the objects.
+               try {
+                       httphandler = new ActiveXObject("Msxml2.XMLHTTP");
+               }
+               catch (e) {
+                       try {
+                               httphandler = new ActiveXObject("Microsoft.XMLHTTP");
+                       }
+                       catch (E) {
+                               httphandler = false;
+                       }
+               }
+       @end @*/
+       if (!httphandler && typeof XMLHttpRequest != 'undefined') {
+               httphandler = new XMLHttpRequest();
+       }
+       return httphandler;
+}
+
+/**
+ * Auto saves as draft
+ */
+function autoSaveDraft() {
+       checks = 0;
+       seconds = now();
+
+       var title = encodeURI(addform.title.value);
+       var body = encodeURI(addform.body.value);
+       var catid = addform.catid.options[addform.catid.selectedIndex].value;
+       var more = encodeURI(addform.more.value);
+       var closed = 0;
+       if (addform.closed[0].checked) {
+               closed = addform.closed[0].value;
+       }
+       else if (addform.closed[1].checked) {
+               closed = addform.closed[1].value;
+       }
+       var ticket = addform.ticket.value;
+
+       var querystring = 'action=autodraft';
+       querystring += '&title=' + title;
+       querystring += '&body=' + body;
+       querystring += '&catid=' + catid;
+       querystring += '&more=' + more;
+       querystring += '&closed=' + closed;
+       querystring += '&ticket=' + ticket;
+       if (formtype == 'edit') {
+               querystring += '&itemid=' + addform.itemid.value;
+               querystring += '&type=edit';
+       }
+       else {
+               querystring += '&blogid=' + addform.blogid.value;
+               querystring += '&type=add';
+       }
+       if (addform.draftid.value > 0) {
+               querystring += '&draftid=' + addform.draftid.value;
+       }
+
+       xmlhttprequest[0].open('POST', goalurl, true);
+       xmlhttprequest[0].onreadystatechange = checkMonitor;
+       xmlhttprequest[0].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+       xmlhttprequest[0].send(querystring);
+
+       var querystring = 'action=updateticket&ticket=' + ticket;
+
+       xmlhttprequest[1].open('POST', goalurl, true);
+       xmlhttprequest[1].onreadystatechange = updateTicket;
+       xmlhttprequest[1].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+       xmlhttprequest[1].send(querystring);
+}
+
+/**
+ * Monitors the edits
+ */
+function doMonitor() {
+       if (checks * (now() - seconds) > 120 * 1000 * 50) {
+               autoSaveDraft();
+       }
+       else {
+               checks++;
+       }
+}
+
+/**
+ * Checks the process of the saving
+ */
+function checkMonitor() {
+       if (xmlhttprequest[0].readyState == 4) {
+               if (xmlhttprequest[0].responseText) {
+                       if (xmlhttprequest[0].responseText.substr(0, 4) == 'err:') {
+                               goal.innerHTML = xmlhttprequest[0].responseText.substr(4) + ' (' + formattedDate() + ')';
+                       }
+                       else {
+                               addform.draftid.value = xmlhttprequest[0].responseText;
+                               goal.innerHTML = lastsavedtext + ' ' + formattedDate();
+                       }
+               }
+       }
+}
+
+/**
+ * Checks the process of the ticket updating
+ */
+function updateTicket() {
+       if (xmlhttprequest[1].readyState == 4) {
+               if (xmlhttprequest[1].responseText) {
+                       if (xmlhttprequest[1].responseText.substr(0, 4) == 'err:') {
+                               goal.innerHTML = xmlhttprequest[1].responseText.substr(4) + ' (' + formattedDate() + ')';
+                       }
+                       else {
+                               addform.ticket.value = xmlhttprequest[1].responseText;
+                       }
+               }
+       }
+}
+
+/**
+ * Gets now in milliseconds
+ */
+function now() {
+       var now = new Date();
+       return now.getTime();
+}
+
+/**
+ * Gets now in the local dateformat
+ */
+function formattedDate() {
+       var now = new Date();
+       return now.toLocaleDateString() + ' ' + now.toLocaleTimeString();
+}
\ No newline at end of file
diff --git a/utf8/nucleus/language/english-utf8.php b/utf8/nucleus/language/english-utf8.php
new file mode 100644 (file)
index 0000000..48a9020
--- /dev/null
@@ -0,0 +1,1314 @@
+<?php
+// English Nucleus Language File
+//
+// Author: Wouter Demuynck
+//
+// Modified by: shizuki (shizuki@kinezumi.net)
+// Nucleus version: v1.0-v3.4
+//
+// Please note: if you want to translate this file to your own language, be aware
+// that in a next Nucleus version, new variables might be added and some other ones
+// might be deleted. Therefore, it's important to list the Nucleus version for which
+// the file was written in your document.
+//
+// Fully translated language file can be sent to us and will be made
+// available for download (with proper credit to the author, of course)
+
+// Note for English
+// This file is ENGLISH Language File for NucleusCMS
+
+/**
+ * English Nucleus Language File
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ */
+
+/********************************************
+ *        Start New for 3.50                *
+ ********************************************/
+define('_PLUGS_TITLE_GETPLUGINS',              'get more plugins...');
+define('_ARCHIVETYPE_YEAR', 'year');
+define('_ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE',            'Newer Version Available');
+define('_ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT',             'Upgrade available: v');
+define('_MANAGER_PLUGINSQLAPI_NOTSUPPORT', "Plugin %s was not loaded (does not support SqlApi and you are trying to use a non-mysql db)");
+
+
+/********************************************
+ *        Start New for 3.40                *
+ ********************************************/
+
+// START changed/added after 3.33 START
+define('_MEMBERS_USEAUTOSAVE',                                         'Use the Autosave function?');
+
+define('_TEMPLATE_PLUGIN_FIELDS',                                      'Custom Plugin Fields');
+define('_TEMPLATE_BLOGLIST',                                           'Template Blog List');
+define('_TEMPLATE_BLOGHEADER',                                         'Blog List Header');
+define('_TEMPLATE_BLOGITEM',                                           'Blog List Item');
+define('_TEMPLATE_BLOGFOOTER',                                         'Blog List Footer');
+
+define('_SETTINGS_DEFAULTLISTSIZE',                                    'Default Size of Lists in Admin Area');
+define('_SETTINGS_DEBUGVARS',                                          'Debug Vars');
+
+define('_CREATE_ACCOUNT_TITLE',                                                'Create Member Account');
+define('_CREATE_ACCOUNT0',                                                     'Create Account');
+define('_CREATE_ACCOUNT1',                                                     'Visitors are not allowed to create a Member Account.<br /><br />');
+define('_CREATE_ACCOUNT2',                                                     'Please contact the website administrator for more information.');
+define('_CREATE_ACCOUNT_USER_DATA',                                    'Account Info.');
+define('_CREATE_ACCOUNT_LOGIN_NAME',                           'Login Name (required):');
+define('_CREATE_ACCOUNT_LOGIN_NAME_VALID',                     'only a-z and 0-9 allowed, no spaces at start/end');
+define('_CREATE_ACCOUNT_REAL_NAME',                                    'Real Name (required):');
+define('_CREATE_ACCOUNT_EMAIL',                                                'Email (required):');
+define('_CREATE_ACCOUNT_EMAIL2',                                       '(must be valid, because an activation link will be sent over there)');
+define('_CREATE_ACCOUNT_URL',                                          'URL:');
+define('_CREATE_ACCOUNT_SUBMIT',                                       'Create Account');
+
+define('_BMLET_BACKTODRAFTS',                                          'Move back to drafts');
+define('_BMLET_CANCEL',                                                                'Cancel');
+
+define('_LIST_ITEM_NOCONTENT',                                         'No Comment');
+define('_LIST_ITEM_COMMENTS',                                          '%d Comments');
+
+define('_EDITC_URL',                                                           'Web site');
+define('_EDITC_EMAIL',                                                         'E-mail');
+
+define('_MANAGER_PLUGINFILE_NOTFOUND',                         'Plugin %s was not loaded (File not found)');
+/* changed */
+// plugin dependency
+define('_ERROR_INSREQPLUGIN',                                          'Plugin installation failed, requires %s');
+define('_ERROR_DELREQPLUGIN',                                          'Plugin deletion failed, required by %s');
+
+//define('_ADD_ADDLATER',                                                              'Add Later');
+define('_ADD_ADDLATER',                                                                'Add the dates specified');
+
+define('_LOGIN_NAME',                                                          'Name:');
+define('_LOGIN_PASSWORD',                                                      'Password:');
+
+// changed from _BOOKMARLET_BMARKLFOLLOW
+define('_BOOKMARKLET_BMARKFOLLOW',                                     ' (Works with nearly all browsers)');
+// END changed/added after 3.33 END
+
+// START merge UTF-8 and EUC-JP
+
+// Create New blog
+define('_ADMIN_NOTABILIA',                                                     'Some information');
+define('_ADMIN_PLEASE_READ',                                           "Before you start, here's some <strong>important information</strong>");
+define('_ADMIN_HOW_TO_ACCESS',                                         "After you've created a new weblog, you'll need to perform some actions to make your blog accessible. There are two possibilities:");
+define('_ADMIN_SIMPLE_WAY',                                                    "<strong>Simple:</strong> Create a copy of <code>index.php</code> and modify it to display your new weblog. Further instructions on how to do this will be provided after you've submitted this first form.");
+define('_ADMIN_ADVANCED_WAY',                                          "<strong>Advanced:</strong> Insert the blog content into your current skins using skinvars like <code>&lt;%otherblog()&gt;</code>. This way, you can place multiple blogs on the same page.");
+define('_ADMIN_HOW_TO_CREATE',                                         'Create Weblog');
+
+
+define('_BOOKMARKLET_NEW_CATEGORY',                                    'Item was added, and a new category was created. ');
+define('_BOOKMARKLET_NEW_CATEGORY_EDIT',                       'Click here to edit the name and description of the category.');
+define('_BOOKMARKLET_NEW_WINDOW',                                      'Opens in new window');
+define('_BOOKMARKLET_SEND_PING',                                       'Item was added successfully. Now pinging weblogs.com. Please hold on... (can take a while)'); // NOTE: This string is no longer in used
+
+// END merge UTF-8 and EUC-JP
+
+// <add by shizuki>
+// OVERVIEW screen
+define('_OVERVIEW_SHOWALL',                                                    'Show all blogs');      // <add by shizuki />
+
+// Edit skins
+define('_SKINEDIT_ALLOWEDBLOGS',                                               'Short blog names:');                   // <add by shizuki>
+define('_SKINEDIT_ALLOWEDTEMPLATESS',                                  'Template names:');             // <add by shizuki>
+
+// delete member
+define('_WARNINGTXT_NOTDELMEDIAFILES',                         'Please note that media files will <b>NOT</b> be deleted. (At least not in this Nucleus version)');     // <add by shizuki />
+
+// send Weblogupdate.ping
+define('_UPDATEDPING_MESSAGE',                                         '<h2>Site Updated, Now pinging various weblog listing services...</h2><p>This can take a while...</p><p>If you aren\'t automatically passed through, '); // NOTE: This string is no longer in used
+define('_UPDATEDPING_GOPINGPAGE',                                      'try again'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_PINGING',                                         'Pinging services, please wait...'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_VIEWITEM',                                                'View list of recent items for '); // NOTE: This string is no longer in used
+define('_UPDATEDPING_VISITOWNSITE',                                    'Visit your own site'); // NOTE: This string is no longer in used
+
+// General category
+define('_EBLOGDEFAULTCATEGORY_NAME',                           'General');
+define('_EBLOGDEFAULTCATEGORY_DESC',                           'Items that do not fit in other categories');
+
+// First ITEM
+define('_EBLOG_FIRSTITEM_TITLE',                                       'First Item');
+define('_EBLOG_FIRSTITEM_BODY',                                                'This is the first item in your weblog. Feel free to delete it.');
+
+// New weblog was created
+define('_BLOGCREATED_TITLE',                                           'New weblog created');
+define('_BLOGCREATED_ADDEDTXT',                                                "Your new weblog (%s) has been created. To continue, choose the way you'll want to make it viewable:");
+define('_BLOGCREATED_SIMPLEWAY',                                       "Easiest: A copy of <code>%s.php</code>");
+define('_BLOGCREATED_ADVANCEDWAY',                                     "Advanced: Call the weblog from existing skins");
+define('_BLOGCREATED_SIMPLEDESC1',                                     "Method 1: Create an extra <code>%s.php</code> file");
+define('_BLOGCREATED_SIMPLEDESC2',                                     "Create a file called <code>%s.php</code>, and copy-paste the following code into it:");
+define('_BLOGCREATED_SIMPLEDESC3',                                     "Upload the file next to your existing <code>index.php</code> file, and you should be all set.");
+define('_BLOGCREATED_SIMPLEDESC4',                                     "To finish the weblog creation process, please fill out the final URL for your weblog (the proposed value is a <em>guess</em>, don't take it for granted):");
+define('_BLOGCREATED_ADVANCEDWAY2',                                    "Method 2: Call the weblog from existing skins");
+define('_BLOGCREATED_ADVANCEDWAY3',                                    "To finish the weblog creation process, simply please fill out the final URL for your weblog: (might be the same as another already existing weblog)");
+
+// Donate!
+define('_ADMINPAGEFOOT_OFFICIALURL',                           'http://nucleuscms.org/');
+define('_ADMINPAGEFOOT_DONATEURL',                                     'http://nucleuscms.org/donate.php');
+define('_ADMINPAGEFOOT_DONATE',                                                'Donate!');
+define('_ADMINPAGEFOOT_COPYRIGHT',                                     'The Nucleus Group');
+
+// Quick menu
+define('_QMENU_MANAGE_SYSTEM',                                         'System info');
+
+// REG file
+define('_WINREGFILE_TEXT',                                                     'Post To &Nucleus (%s)');
+
+// Bookmarklet
+define('_BOOKMARKLET_TITLE',                                           'Bookmarklet<!-- and Right Click Menu -->');
+define('_BOOKMARKLET_DESC1',                                           'Bookmarklets allow adding items to your weblog with just one single click. ');
+define('_BOOKMARKLET_DESC2',                                           'After installing these bookmarklets, you\'ll be able to click the \'add to weblog\' button on your browser toolbar, ');
+define('_BOOKMARKLET_DESC3',                                           'and a Nucleus add-item window will popup, ');
+define('_BOOKMARKLET_DESC4',                                           'containing the link and title of the page you were visiting, ');
+define('_BOOKMARKLET_DESC5',                                           'plus any text you might have selected.');
+define('_BOOKMARKLET_BOOKARKLET',                                      'bookmarklet');
+define('_BOOKMARKLET_ANCHOR',                                          'Add to %s');
+define('_BOOKMARKLET_BMARKTEXT',                                       'You can drag the following link to your favorites, or your browsers toolbar: ');
+define('_BOOKMARKLET_BMARKTEST',                                       '(if you want to test the bookmarklet first, click the link)');
+define('_BOOKMARKLET_RIGHTCLICK',                                      'Right Click Menu Access (IE &amp; Windows)');
+define('_BOOKMARKLET_RIGHTLABEL',                                      'right click menu item');
+define('_BOOKMARKLET_RIGHTTEXT1',                                      'Or you can install the ');
+define('_BOOKMARKLET_RIGHTTEXT2',                                      ' (choose \'open file\' and add to registry)');
+define('_BOOKMARKLET_RIGHTTEXT3',                                      'You\'ll have to restart Internet Explorer before the option shows up in the context menus.');
+define('_BOOKMARKLET_UNINSTALLTT',                                     'Uninstalling');
+define('_BOOKMARKLET_DELETEBAR',                                       'For the bookmarklet, you can just delete it.');
+define('_BOOKMARKLET_DELETERIGHTT',                                    'For the right click menu item, follow the procedure listed below:');
+define('_BOOKMARKLET_DELETERIGHT1',                                    'Select "Run..." from the Start Menu');
+define('_BOOKMARKLET_DELETERIGHT2',                                    'Type: "regedit"');
+define('_BOOKMARKLET_DELETERIGHT3',                                    'Click the "OK" button');
+define('_BOOKMARKLET_DELETERIGHT4',                                    'Search for "\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt" in the tree');
+define('_BOOKMARKLET_DELETERIGHT5',                                    'Delete the "add to \'Your weblog\'" item');
+
+define('_BOOKMARKLET_ERROR_SOMETHINGWRONG',                    'Something went wrong');
+define('_BOOKMARKLET_ERROR_COULDNTNEWCAT',                     'Could not create new category');
+
+// BAN
+define('_BAN_EXAMPLE_TITLE',                                           'An example');
+define('_BAN_EXAMPLE_TEXT',                                                    ': "134.58.253.193" will only block one computer, while "134.58.253" will block 256 IP addresses, including the one from the first example.');
+define('_BAN_IP_CUSTOM',                                                       'Custom: ');
+define('_BAN_BANBLOGNAME',                                                     'Only blog %s');
+
+// Plugin Options
+define('_PLUGIN_OPTIONS_TITLE',                                                        'Options for %s');
+
+// Plugin file loda error
+define('_PLUGINFILE_COULDNT_BELOADED',                         'Error: plugin file <strong>%s.php</strong> could not be loaded, or it has been set inactive because it does not support some features (check the <a href="?action=actionlog">actionlog</a> for more info)');
+
+//ITEM add/edit template (for japanese only)
+define('_ITEM_ADDEDITTEMPLATE_FORMAT',                         'Format :');
+define('_ITEM_ADDEDITTEMPLATE_YEAR',                           'Year');
+define('_ITEM_ADDEDITTEMPLATE_MONTH',                          'Month');
+define('_ITEM_ADDEDITTEMPLATE_DAY',                                    'Day');
+define('_ITEM_ADDEDITTEMPLATE_HOUR',                           'Hour');
+define('_ITEM_ADDEDITTEMPLATE_MINUTE',                         'Minute');
+
+// Errors
+define('_ERRORS_INSTALLSQL',                                           'install.sql should be deleted');
+define('_ERRORS_INSTALLDIR',                                           'install directory should be deleted');  // <add by shizuki />
+define('_ERRORS_INSTALLPHP',                                           'install.php should be deleted');
+define('_ERRORS_UPGRADESDIR',                                          'nucleus/upgrades directory should be deleted');
+define('_ERRORS_CONVERTDIR',                                           'nucleus/convert directory should be deleted');
+define('_ERRORS_CONFIGPHP',                                                    'config.php should be non-writable (chmod to 444)');
+define('_ERRORS_STARTUPERROR1',                                                '<p>One or more of the Nucleus installation files are still present on the webserver, or are writable.</p><p>You should remove these files or change their permissions to ensure security. Here are the files that were found by Nucleus</p> <ul><li>');
+define('_ERRORS_STARTUPERROR2',                                                '</li></ul><p>If you don\'t want to see this error message again, without solving the problem, set <code>$CONF[\'alertOnSecurityRisk\']</code> in <code>globalfunctions.php</code> to <code>0</code>, or do this at the end of <code>config.php</code>.</p>');
+define('_ERRORS_STARTUPERROR3',                                                'Security Risk');
+
+// PluginAdmin tickets by javascript
+define('_PLUGINADMIN_TICKETS_JAVASCRIPT',                      '<p><b>Error occured during automatic addition of tickets.</b></p>');
+
+// Global settings disablesite URL
+define('_SETTINGS_DISABLESITEURL',                                     'Redirect URL:');
+
+// Skin import/export
+define('_SKINIE_SEELEMENT_UNEXPECTEDTAG',                      'UNEXPECTED TAG');
+define('_SKINIE_ERROR_FAILEDOPEN_FILEURL',                     'Failed to open file/URL');
+define('_SKINIE_NAME_CLASHES_DETECTED',                                'Name clashes detected, re-run with allowOverwrite = 1 to force overwrite');
+
+// ACTIONS.php parse_commentform
+define('_ACTIONURL_NOTLONGER_PARAMATER',                       'actionurl is not longer a parameter on commentform skinvars. Moved to be a global setting instead.');
+
+// ADMIN.php addToTemplate 'Query error: '
+define('_ADMIN_SQLDIE_QUERYERROR',                                     'Query error: ');
+
+// backyp.php Backup WARNING
+define('_BACKUP_BACKUPFILE_TITLE',                                     'This is a backup file generated by Nucleus');
+define('_BACKUP_BACKUPFILE_BACKUPDATE',                                'backup-date:');
+define('_BACKUP_BACKUPFILE_NUCLEUSVERSION',                    'Nucleus CMS version:');
+define('_BACKUP_BACKUPFILE_DATABASE_NAME',                     'Nucleus CMS Database name:');
+define('_BACKUP_BACKUPFILE_TABLE_NAME',                                'TABLE:');
+define('_BACKUP_BACKUPFILE_TABLEDATAFOR',                      'Table Data for %s');
+define('_BACKUP_WARNING_NUCLEUSVERSION',                       'WARNING: Only try to restore on servers running the exact same version of Nucleus');
+define('_BACKUP_RESTOR_NOFILEUPLOADED',                                'No file uploaded');
+define('_BACKUP_RESTOR_UPLOAD_ERROR',                          'File Upload Error');
+define('_BACKUP_RESTOR_UPLOAD_NOCORRECTTYPE',          'The uploaded file is not of the correct type');
+define('_BACKUP_RESTOR_UPLOAD_NOZLIB',                         'Cannot decompress gzipped backup (zlib package not installed)');
+define('_BACKUP_RESTOR_SQL_ERROR',                                     'SQL Error: ');
+
+// BLOG.php addTeamMember
+define('_TEAM_ADD_NEWTEAMMEMBER',                                      'Added %s (ID=%d) to the team of blog "%s"');
+
+// ADMIN.php systemoverview()
+define('_ADMIN_SYSTEMOVERVIEW_HEADING',                                'System Overview');
+define('_ADMIN_SYSTEMOVERVIEW_PHPANDMYSQL',                    'PHP and MySQL');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONS',                       'Versions');
+define('_ADMIN_SYSTEMOVERVIEW_PHPVERSION',                     'PHP version');
+define('_ADMIN_SYSTEMOVERVIEW_MYSQLVERSION',           'MySQL version');
+define('_ADMIN_SYSTEMOVERVIEW_SETTINGS',                       'Settings');
+define('_ADMIN_SYSTEMOVERVIEW_GDLIBRALY',                      'GD Libraly');
+define('_ADMIN_SYSTEMOVERVIEW_MODULES',                                'Modules');
+define('_ADMIN_SYSTEMOVERVIEW_ENABLE',                         'enabled');
+define('_ADMIN_SYSTEMOVERVIEW_DISABLE',                                'disabled');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSSYSTEM',          'Your Nucleus CMS System');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSVERSION',         'Nucleus CMS version');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSPATCHLEVEL',      'Nucleus CMS patch level');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSSETTINGS',                'Important settings');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK',           'Check for a new version');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TXT',       'Check on nucleuscms.org if a new version is available: ');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL',       'http://nucleuscms.org/version.php?v=%d&amp;pl=%d');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE',     'Check for upgrade');
+define('_ADMIN_SYSTEMOVERVIEW_NOT_ADMIN',                      "You haven't enough rights to see the system informations.");
+
+// ENCAPSULATE.php
+define('_ENCAPSULATE_ENCAPSULATE_NOENTRY',                     'No entries');
+
+// globalfunctions.php
+define('_GFUNCTIONS_LOGINPCSHARED_YES',                                'on shared PC');
+define('_GFUNCTIONS_LOGINPCSHARED_NO',                         'on not shared PC');
+define('_GFUNCTIONS_LOGINSUCCESSFUL_TXT',                      'Login successful for %s (%s)');
+define('_GFUNCTIONS_LOGINFAILED_TXT',                          'Login failed for %s');
+define('_GFUNCTIONS_LOGOUT_TXT',                                       '%s is logouted');
+define('_GFUNCTIONS_HEADERSALREADYSENT_FILE',          ' in <code>%s</code> line <code>%s</code>');
+define('_GFUNCTIONS_HEADERSALREADYSENT_TITLE',         ' Page headers already sent');
+define('_GFUNCTIONS_HEADERSALREADYSENT_TXT',           '<p>The page headers have already been sent out%s. This could cause Nucleus not to work in the expected way.</p><p>Usually, this is caused by spaces or newlines at the end of the <code>config.php</code> file, at the end of the language file or at the end of a plugin file. Please check this and try again.</p><p>If you don\'t want to see this error message again, without solving the problem, set <code>$CONF[\'alertOnHeadersSent\']</code> in <code>globalfunctions.php</code> to <code>0</code></p>');
+define('_GFUNCTIONS_PARSEFILE_FILEMISSING',                    'A file is missing');
+define('_GFUNCTIONS_AN_ERROR_OCCURRED',                                'Sorry. An error occurred.');
+define('_GFUNCTIONS_YOU_AERNT_LOGGEDIN',                       "You aren't logged in.");
+
+// MANAGER.php
+define('_MANAGER_PLUGINFILE_NOCLASS',                          "Plugin %s was not loaded (Class not found in file, possible parse error)");
+define('_MANAGER_PLUGINTABLEPREFIX_NOTSUPPORT',                "Plugin %s was not loaded (does not support SqlTablePrefix)");
+
+// mysql.php
+define('_NO_SUITABLE_MYSQL_LIBRARY',                           "<p>No suitable mySQL library was found to run Nucleus</p>");
+
+// PLUGIN.php
+define('_ERROR_PLUGIN_NOSUCHACTION',                           'No Such Action');
+
+// PLUGINADMIN.php
+define('_ERROR_INVALID_PLUGIN',                                                'Invalid plugin');
+
+// showlist.php
+define('_LIST_PLUGS_DEPREQ',                                           'Plugin(s) requires:');
+define('_LIST_SKIN_PREVIEW',                                           "Preview for '%s' skin");
+define('_LIST_SKIN_PREVIEW_VIEWLARGER',                                "View larger");
+define('_LIST_SKIN_README',                                                    "More info on the '%s' skin");
+define('_LIST_SKIN_README_TXT',                                                'Read me');
+
+// BLOG.php createNewCategory()
+define('_CREATED_NEW_CATEGORY_NAME',                           'newcat');
+define('_CREATED_NEW_CATEGORY_DESC',                           'New category');
+
+// ADMIN.php blog settings
+define('_EBLOG_CURRENT_TEAM_MEMBER',                           'Members currently on your team:');
+
+// HTML outputs
+define('_HTML_XML_NAME_SPACE_AND_LANG_CODE',           'xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us"');
+
+// Language Files
+define('_LANGUAGEFILES_JAPANESE-UTF8',                         'Japanese - &#26085;&#26412;&#35486; (UTF-8)');
+define('_LANGUAGEFILES_JAPANESE-EUC',                          'Japanese - &#26085;&#26412;&#35486; (EUC)');
+define('_LANGUAGEFILES_JAPANESE-SJIS',                         'Japanese - &#26085;&#26412;&#35486; (Shift-JIS)');
+define('_LANGUAGEFILES_ENGLISH-UTF8',                          'English - English (UTF-8)');
+define('_LANGUAGEFILES_ENGLISH',                                       'English - English (iso-8859-1)');
+/*
+define('_LANGUAGEFILES_BULGARIAN',                                     'Bulgarian - &#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080; (iso-8859-5)');
+define('_LANGUAGEFILES_CATALAN',                                       'Catalan - Catal&agrave; (iso-8859-1)');
+define('_LANGUAGEFILES_CHINESE-GBK',                           'Simplified Chinese - &#31777;&#20307;&#23383;&#20013;&#25991; (gbk)');
+define('_LANGUAGEFILES_SIMCHINESE',                                    'Simplified Chinese - &#31777;&#20307;&#23383;&#20013;&#25991; (gb2312)');
+define('_LANGUAGEFILES_CHINESE-UTF8',                          'Simplified Chinese - &#31777;&#20307;&#23383;&#20013;&#25991; (utf-8)');
+define('_LANGUAGEFILES_CHINESEB5',                                     'Tranditional Chinese - &#32321;&#20307;&#23383;&#20013;&#25991; (big5)');
+define('_LANGUAGEFILES_CHINESEB5-UTF8',                                'Tranditional Chinese - &#32321;&#20307;&#23383;&#20013;&#25991; (utf-8)');
+define('_LANGUAGEFILES_TRADITIONAL_CHINESE',           'Tranditional Chinese - &#32321;&#20307;&#23383;&#20013;&#25991; (big5)');
+define('_LANGUAGEFILES_TRADITIONAL_CHINESE-UTF-8',     'Tranditional Chinese - &#32321;&#20307;&#23383;&#20013;&#25991; (utf-8)');
+define('_LANGUAGEFILES_CZECH',                                         'Czech - &#268;esky (windows-1250)');
+define('_LANGUAGEFILES_FINNISH',                                       'Finnish - Suomi (iso-8859-1)');
+define('_LANGUAGEFILES_FRENCH',                                                'French - Fran&ccedil;ais (iso-8859-1)');
+define('_LANGUAGEFILES_GALEGO',                                                'Galego - Galego (iso-8859-1)');
+define('_LANGUAGEFILES_GERMAN',                                                'German - Deutsch (iso-8859-1)');
+define('_LANGUAGEFILES_HUNGARIAN',                                     'Hungarian - Magyar (iso-8859-2)');
+define('_LANGUAGEFILES_ITALIANO',                                      'Italiano - Italiano (iso-8859-1)');
+define('_LANGUAGEFILES_KOREAN-EUC-KR',                         'Korean - &#54620;&#44397;&#50612; (euc-kr)');
+define('_LANGUAGEFILES_KOREAN-UTF',                                    'Korean - &#54620;&#44397;&#50612; (utf-8)');
+define('_LANGUAGEFILES_LATVIAN',                                       'Latvian - Latvie&scaron;u (windows-1257)');
+define('_LANGUAGEFILES_NEDERLANDS',                                    'Duch - Nederlands (iso-8859-15)');
+define('_LANGUAGEFILES_PERSIAN',                                       'Persian - &#1601;&#1575;&#1585;&#1587;&#1740; (utf-8)');
+define('_LANGUAGEFILES_PORTUGUESE_BRAZIL',                     'Portuguese Brazil - Portugu&ecirc;s (iso-8859-1)');
+define('_LANGUAGEFILES_RUSSIAN',                                       'Russian - &#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081; (windows-1251)');
+define('_LANGUAGEFILES_SLOVAK',                                                'Slovak - Sloven&#269;ina (ISO-8859-2)');
+define('_LANGUAGEFILES_SPANISH-UTF8',                          'Spanish - Espa&ntilde;ol (utf-8)');
+define('_LANGUAGEFILES_SPANISH',                                       'Spanish - Espa&ntilde;ol (iso-8859-1)');
+*/
+
+// </add by shizuki>
+
+/********************************************
+ *        End New for 3.40                  *
+ ********************************************/
+
+// START changed/added after 3.3 START
+define('_AUTOSAVEDRAFT',                                                       'Auto save draft');
+define('_AUTOSAVEDRAFT_LASTSAVED',                                     'Last saved: ');
+define('_AUTOSAVEDRAFT_NOTYETSAVED',                           'No saves have been made yet');
+define('_AUTOSAVEDRAFT_NOW',                                           'Auto save now');
+define('_SKIN_PARTS_SPECIAL',                                          'Special skin parts');
+define('_ERROR_SKIN_PARTS_SPECIAL_FORMAT',                     'You must enter a name that exists only out of lowercase letters and digits');
+define('_ERROR_SKIN_PARTS_SPECIAL_DELETE',                     'Can\'t delete this skin part');
+define('_CONFIRMTXT_SKIN_PARTS_SPECIAL',                       'Do you really want to delete this special skin part?');
+define('_ERROR_PLUGIN_LOAD',                                           'Plugin could not be loaded, or does not support certain features that are required for it to run on your Nucleus installation (you might want to check the <a href="?action=actionlog">actionlog</a> for more info)');
+// END changed/added after 3.3 END
+
+// START changed/added after 3.22 START
+define('_SEARCHFORM_QUERY',                                                    'Keywords to search');
+define('_ERROR_EMAIL_REQUIRED',                                                'Email address is required');
+define('_COMMENTFORM_MAIL',                                                    'Website:');
+define('_COMMENTFORM_EMAIL',                                           'E-mail:');
+define('_EBLOG_REQUIREDEMAIL',                                         'Require E-mail address with comments?');
+define('_ERROR_COMMENTS_SPAM',                                         'Your comment was rejected because it did not pass the spam test');
+// END changed/added after 3.22 END
+
+// START changed/added after 3.15 START
+
+define('_LIST_PLUG_SUBS_NEEDUPDATE',                           'Please use the \'Update Subscription list\'-button to update the plugin\'s subscription list.');
+define('_LIST_PLUGS_DEP',                                                      'Plugin(s) requires:');
+
+// END changed/added after 3.15
+
+// START changed/added after 3.1 START
+
+// comments list per weblog
+define('_COMMENTS_BLOG',                                                       'All Comments for blog');
+define('_NOCOMMENTS_BLOG',                                                     'No comments were made on items of this blog');
+define('_BLOGLIST_COMMENTS',                                           'Comments');
+define('_BLOGLIST_TT_COMMENTS',                                                'A list of all comments made on items of this blog');
+
+
+// for use in archivetype-skinvar
+define('_ARCHIVETYPE_DAY',                                                     'day');
+define('_ARCHIVETYPE_MONTH',                                           'month');
+
+// tickets (prevents malicious users to trick an admin to perform actions he doesn't want)
+define('_ERROR_BADTICKET',                                                     'Invalid or expired ticket.');
+
+// cookie prefix
+define('_SETTINGS_COOKIEPREFIX',                                       'Cookie Prefix');
+
+// account activation
+define('_ERROR_NOLOGON_NOACTIVATE',                                    'Cannot send activation link. You\'re not allowed to log in.');
+define('_ERROR_ACTIVATE',                                                      'Activation key does not exist, is invalid, or has expired.');
+define('_ACTIONLOG_ACTIVATIONLINK',                            'Activation link sent');
+define('_MSG_ACTIVATION_SENT',                                         'An activation link has been sent by e-mail.');
+
+// activation link emails
+define('_ACTIVATE_REGISTER_MAIL',                                      "Hi <%memberName%>,\n\nYou need to activate your account at <%siteName%> (<%siteUrl%>).\nYou can do this by visiting the link below: \n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");
+define('_ACTIVATE_REGISTER_MAILTITLE',                         "Activate your '<%memberName%>' account");
+define('_ACTIVATE_REGISTER_TITLE',                                     'Welcome <%memberName%>');
+define('_ACTIVATE_REGISTER_TEXT',                                      'You\'re almost there. Please choose a password for your account below.');
+define('_ACTIVATE_FORGOT_MAIL',                                                "Hi <%memberName%>,\n\nUsing the link below, you can choose a new password for your account at <%siteName%> (<%siteUrl%>) by choosing a new password.\n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");
+define('_ACTIVATE_FORGOT_MAILTITLE',                           "Re-activate your '<%memberName%>' account");
+define('_ACTIVATE_FORGOT_TITLE',                                       'Welcome <%memberName%>');
+define('_ACTIVATE_FORGOT_TEXT',                                                'You can choose a new password for your account below:');
+define('_ACTIVATE_CHANGE_MAIL',                                                "Hi <%memberName%>,\n\nSince your e-mail address has changed, you'll need to re-activate your account at <%siteName%> (<%siteUrl%>).\nYou can do this by visiting the link below: \n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");
+define('_ACTIVATE_CHANGE_MAILTITLE',                           "Re-activate your '<%memberName%>' account");
+define('_ACTIVATE_CHANGE_TITLE',                                       'Welcome <%memberName%>');
+define('_ACTIVATE_CHANGE_TEXT',                                                'Your address change has been verified. Thanks!');
+define('_ACTIVATE_SUCCESS_TITLE',                                      'Activation Succeeded');
+define('_ACTIVATE_SUCCESS_TEXT',                                       'Your account has been successfully activated.');
+define('_MEMBERS_SETPWD',                                                      'Set Password');
+define('_MEMBERS_SETPWD_BTN',                                          'Set Password');
+define('_QMENU_ACTIVATE',                                                      'Account Activation');
+define('_QMENU_ACTIVATE_TEXT',                                         '<p>After you have activated your account, you can start using it by <a href="index.php?action=showlogin">logging in</a>.</p>');
+
+define('_PLUGS_BTN_UPDATE',                                                    'Update subscription list');
+
+// global settings
+define('_SETTINGS_JSTOOLBAR',                                          'Javascript Toolbar Style');
+define('_SETTINGS_JSTOOLBAR_FULL',                                     'Full Toolbar (IE)');
+define('_SETTINGS_JSTOOLBAR_SIMPLE',                           'Simple Toolbar (Non-IE)');
+define('_SETTINGS_JSTOOLBAR_NONE',                                     'Disable Toolbar');
+define('_SETTINGS_URLMODE_HELP',                                       '(Info: <a href="documentation/tips.html#searchengines-fancyurls">How to activate fancy URLs</a>)');
+
+// extra plugin settings part when editing categories/members/blogs/...
+define('_PLUGINS_EXTRA',                                                       'Extra Plugin Settings');
+
+// itemlist info column keys
+define('_LIST_ITEM_BLOG',                                                      'blog:');
+define('_LIST_ITEM_CAT',                                                       'cat:');
+define('_LIST_ITEM_AUTHOR',                                                    'author:');
+define('_LIST_ITEM_DATE',                                                      'date:');
+define('_LIST_ITEM_TIME',                                                      'time:');
+
+// indication of registered members in comments list
+define('_LIST_COMMENTS_MEMBER',                                        '(member)');
+
+// batch operations
+define('_BATCH_WITH_SEL',                                                      'With selected:');
+define('_BATCH_EXEC',                                                          'Execute');
+
+// quickmenu
+define('_QMENU_HOME',                                                          'Home');
+define('_QMENU_ADD',                                                           'Add Item');
+define('_QMENU_ADD_SELECT',                                                    '-- select --');
+define('_QMENU_USER_SETTINGS',                                         'Profile');
+define('_QMENU_USER_ITEMS',                                                    'Items');
+define('_QMENU_USER_COMMENTS',                                         'Comments');
+define('_QMENU_MANAGE',                                                                'Management');
+define('_QMENU_MANAGE_LOG',                                                    'Action Log');
+define('_QMENU_MANAGE_SETTINGS',                                       'Configuration');
+define('_QMENU_MANAGE_MEMBERS',                                                'Members');
+define('_QMENU_MANAGE_NEWBLOG',                                                'New Weblog');
+define('_QMENU_MANAGE_BACKUPS',                                                'Backups');
+define('_QMENU_MANAGE_PLUGINS',                                                'Plugins');
+define('_QMENU_LAYOUT',                                                                'Layout');
+define('_QMENU_LAYOUT_SKINS',                                          'Skins');
+define('_QMENU_LAYOUT_TEMPL',                                          'Templates');
+define('_QMENU_LAYOUT_IEXPORT',                                                'Import/Export');
+define('_QMENU_PLUGINS',                                                       'Plugins');
+
+// quickmenu on logon screen
+define('_QMENU_INTRO',                                                         'Introduction');
+define('_QMENU_INTRO_TEXT',                                                    '<p>This is the logon screen for Nucleus CMS, the content management system that\'s being used to maintain this website.</p><p>If you have an account, you can log on and start posting new items.</p>');
+
+// helppages for plugins
+define('_ERROR_PLUGNOHELPFILE',                                                'The helpfile for this plugin can not be found');
+define('_PLUGS_HELP_TITLE',                                                    'Helppage for plugin');
+define('_LIST_PLUGS_HELP',                                                     'help');
+
+
+// END changed/started after 3.1
+
+// START changed/added after v2.5beta START
+
+// general settings (security)
+define('_SETTINGS_EXTAUTH',                                                    'Enable External Authentication');
+define('_WARNING_EXTAUTH',                                                     'Warning: Enable only if needed.');
+
+// member profile
+define('_MEMBERS_BYPASS',                                                      'Use External Authentication');
+
+// 'always include in search' blog setting (yes/no) [in v2.5beta, the 'always' part wasn't clear]
+define('_EBLOG_SEARCH',                                                                '<em>Always</em> include in search');
+
+// END changed/added after v2.5beta
+
+// START introduced after v2.0 START
+
+// media library
+define('_MEDIA_VIEW',                                                          'view');
+define('_MEDIA_VIEW_TT',                                                       'View file (opens in new window)');
+define('_MEDIA_FILTER_APPLY',                                          'Apply Filter');
+define('_MEDIA_FILTER_LABEL',                                          'Filter: ');
+define('_MEDIA_UPLOAD_TO',                                                     'Upload to...');
+define('_MEDIA_UPLOAD_NEW',                                                    'Upload new file...');
+define('_MEDIA_COLLECTION_SELECT',                                     'Select');
+define('_MEDIA_COLLECTION_TT',                                         'Switch to this category');
+define('_MEDIA_COLLECTION_LABEL',                                      'Current collection: ');
+
+// tooltips on toolbar
+define('_ADD_ALIGNLEFT_TT',                                                    'Align Left');
+define('_ADD_ALIGNRIGHT_TT',                                           'Align Right');
+define('_ADD_ALIGNCENTER_TT',                                          'Align Center');
+
+
+// generic upload failure
+define('_ERROR_UPLOADFAILED',                                          'Upload failed');
+
+// END introduced after v2.0 END
+
+// START introduced after v1.5 START
+
+// posting to the past/edit timestamps
+define('_EBLOG_ALLOWPASTPOSTING',                                      'Allow posting to the past');
+define('_ADD_CHANGEDATE',                                                      'Update timestamp');
+define('_BMLET_CHANGEDATE',                                                    'Update timestamp');
+
+// skin import/export
+define('_OVERVIEW_SKINIMPORT',                                         'Skin import/export...');
+
+// skin settings
+define('_PARSER_INCMODE_NORMAL',                                       'Normal');
+define('_PARSER_INCMODE_SKINDIR',                                      'Use skin dir');
+define('_SKIN_INCLUDE_MODE',                                           'Include mode');
+define('_SKIN_INCLUDE_PREFIX',                                         'Include prefix');
+
+// global settings
+define('_SETTINGS_BASESKIN',                                           'Base Skin');
+define('_SETTINGS_SKINSURL',                                           'Skins URL');
+define('_SETTINGS_ACTIONSURL',                                         'Full URL to action.php');
+
+// category moves (batch)
+define('_ERROR_MOVEDEFCATEGORY',                                       'Cannot move default category');
+define('_ERROR_MOVETOSELF',                                                    'Cannot move category (destination blog is the same as source blog)');
+define('_MOVECAT_TITLE',                                                       'Select blog to move category to');
+define('_MOVECAT_BTN',                                                         'Move category');
+
+// URLMode setting
+define('_SETTINGS_URLMODE',                                                    'URL Mode');
+define('_SETTINGS_URLMODE_NORMAL',                                     'Normal');
+define('_SETTINGS_URLMODE_PATHINFO',                           'Fancy');
+
+// Batch operations
+define('_BATCH_NOSELECTION',                                           'Nothing selected to perform actions on');
+define('_BATCH_ITEMS',                                                         'Batch operation on items');
+define('_BATCH_CATEGORIES',                                                    'Batch operation on categories');
+define('_BATCH_MEMBERS',                                                       'Batch operation on members');
+define('_BATCH_TEAM',                                                          'Batch operation on team members');
+define('_BATCH_COMMENTS',                                                      'Batch operation on comments');
+define('_BATCH_UNKNOWN',                                                       'Unknown batch operation: ');
+define('_BATCH_EXECUTING',                                                     'Executing');
+define('_BATCH_ONCATEGORY',                                                    'on category');
+define('_BATCH_ONITEM',                                                                'on item');
+define('_BATCH_ONCOMMENT',                                                     'on comment');
+define('_BATCH_ONMEMBER',                                                      'on member');
+define('_BATCH_ONTEAM',                                                                'on team member');
+define('_BATCH_SUCCESS',                                                       'Success!');
+define('_BATCH_DONE',                                                          'Done!');
+define('_BATCH_DELETE_CONFIRM',                                                'Confirm Batch Deletion');
+define('_BATCH_DELETE_CONFIRM_BTN',                                    'Confirm Batch Deletion');
+define('_BATCH_SELECTALL',                                                     'select all');
+define('_BATCH_DESELECTALL',                                           'deselect all');
+
+// batch operations: options in dropdowns
+define('_BATCH_ITEM_DELETE',                                           'Delete');
+define('_BATCH_ITEM_MOVE',                                                     'Move');
+define('_BATCH_MEMBER_DELETE',                                         'Delete');
+define('_BATCH_MEMBER_SET_ADM',                                                'Give admin rights');
+define('_BATCH_MEMBER_UNSET_ADM',                                      'Take away admin rights');
+define('_BATCH_TEAM_DELETE',                                           'Delete from team');
+define('_BATCH_TEAM_SET_ADM',                                          'Give admin rights');
+define('_BATCH_TEAM_UNSET_ADM',                                                'Take away admin rights');
+define('_BATCH_CAT_DELETE',                                                    'Delete');
+define('_BATCH_CAT_MOVE',                                                      'Move to other blog');
+define('_BATCH_COMMENT_DELETE',                                                'Delete');
+
+// itemlist: Add new item...
+define('_ITEMLIST_ADDNEW',                                                     'Add new item...');
+define('_ADD_PLUGIN_EXTRAS',                                           'Extra Plugin Options');
+
+// errors
+define('_ERROR_CATCREATEFAIL',                                         'Could not create new category');
+define('_ERROR_NUCLEUSVERSIONREQ',                                     'This plugin requires a newer Nucleus version: ');
+
+// backlinks
+define('_BACK_TO_BLOGSETTINGS',                                                'Back to blogsettings');
+
+// skin import export
+define('_SKINIE_TITLE_IMPORT',                                         'Import');
+define('_SKINIE_TITLE_EXPORT',                                         'Export');
+define('_SKINIE_BTN_IMPORT',                                           'Import');
+define('_SKINIE_BTN_EXPORT',                                           'Export selected skins/templates');
+define('_SKINIE_LOCAL',                                                                'Import from local file:');
+define('_SKINIE_NOCANDIDATES',                                         'No candidates for import found in the skins directory');
+define('_SKINIE_FROMURL',                                                      'Import from URL:');
+define('_SKINIE_EXPORT_INTRO',                                         'Select the skins and templates you want to export below');
+define('_SKINIE_EXPORT_SKINS',                                         'Skins');
+define('_SKINIE_EXPORT_TEMPLATES',                                     'Templates');
+define('_SKINIE_EXPORT_EXTRA',                                         'Extra Info');
+define('_SKINIE_CONFIRM_OVERWRITE',                                    'Overwrite skins that already exists (see nameclashes)');
+define('_SKINIE_CONFIRM_IMPORT',                                       'Yes, I want to import this');
+define('_SKINIE_CONFIRM_TITLE',                                                'About to import skins and templates');
+define('_SKINIE_INFO_SKINS',                                           'Skins in file:');
+define('_SKINIE_INFO_TEMPLATES',                                       'Templates in file:');
+define('_SKINIE_INFO_GENERAL',                                         'Info:');
+define('_SKINIE_INFO_SKINCLASH',                                       'Skin name clashes:');
+define('_SKINIE_INFO_TEMPLCLASH',                                      'Template name clashes:');
+define('_SKINIE_INFO_IMPORTEDSKINS',                           'Imported skins:');
+define('_SKINIE_INFO_IMPORTEDTEMPLS',                          'Imported templates:');
+define('_SKINIE_DONE',                                                         'Done Importing');
+
+define('_AND',                                                                         'and');
+define('_OR',                                                                          'or');
+
+// empty fields on template edit
+define('_EDITTEMPLATE_EMPTY',                                          'empty field (click to edit)');
+
+// skin overview list
+define('_LIST_SKINS_INCMODE',                                          'IncludeMode:');
+define('_LIST_SKINS_INCPREFIX',                                                'IncludePrefix:');
+define('_LIST_SKINS_DEFINED',                                          'Defined parts:');
+
+// backup
+define('_BACKUPS_TITLE',                                                       'Backup / Restore');
+define('_BACKUP_TITLE',                                                                'Backup');
+define('_BACKUP_INTRO',                                                                'Click the button below to create a backup of your Nucleus database. You\'ll be prompted to save a backup file. Store it in a safe place.');
+define('_BACKUP_ZIP_YES',                                                      'Try to use compression');
+define('_BACKUP_ZIP_NO',                                                       'Do not use compression');
+define('_BACKUP_BTN',                                                          'Create Backup');
+define('_BACKUP_NOTE',                                                         '<b>Note:</b> Only the database contents is stored in the backup. Media files and settings in config.php are thus <b>NOT</b> included in the backup.');
+define('_RESTORE_TITLE',                                                       'Restore');
+define('_RESTORE_NOTE',                                                                '<b>WARNING:</b> Restoring from a backup will <b>ERASE</b> all current Nucleus data in the database! Only do this when you\'re really sure!     <br />  <b>Note:</b> Make sure that the version of Nucleus in which you created the backup should be the same as the version you\'re running right now! It won\'t work otherwise');
+define('_RESTORE_INTRO',                                                       'Select the backup file below (it\'ll be uploaded to the server) and click the "Restore" button to start.');
+define('_RESTORE_IMSURE',                                                      'Yes, I\'m sure I want to do this!');
+define('_RESTORE_BTN',                                                         'Restore From File');
+define('_RESTORE_WARNING',                                                     '(make sure you\'re restoring the correct backup, maybe make a new backup before you start)');
+define('_ERROR_BACKUP_NOTSURE',                                                'You\'ll need to check the \'I\'m sure\' testbox');
+define('_RESTORE_COMPLETE',                                                    'Restore Complete');
+
+// new item notification
+define('_NOTIFY_NI_MSG',                                                       'A new item has been posted:');
+define('_NOTIFY_NI_TITLE',                                                     'New Item!');
+define('_NOTIFY_KV_MSG',                                                       'Karma vote on item:');
+define('_NOTIFY_KV_TITLE',                                                     'Nucleus karma:');
+define('_NOTIFY_NC_MSG',                                                       'Comment on item:');
+define('_NOTIFY_NC_TITLE',                                                     'Nucleus comment:');
+define('_NOTIFY_USERID',                                                       'User ID:');
+define('_NOTIFY_USER',                                                         'User:');
+define('_NOTIFY_COMMENT',                                                      'Comment:');
+define('_NOTIFY_VOTE',                                                         'Vote:');
+define('_NOTIFY_HOST',                                                         'Host:');
+define('_NOTIFY_IP',                                                           'IP:');
+define('_NOTIFY_MEMBER',                                                       'Member:');
+define('_NOTIFY_TITLE',                                                                'Title:');
+define('_NOTIFY_CONTENTS',                                                     'Contents:');
+
+// member mail message
+define('_MMAIL_MSG',                                                           'A message sent to you by');
+define('_MMAIL_FROMANON',                                                      'an anonymous visitor');
+define('_MMAIL_FROMNUC',                                                       'Posted from a Nucleus weblog at');
+define('_MMAIL_TITLE',                                                         'A message from');
+define('_MMAIL_MAIL',                                                          'Message:');
+
+// END introduced after v1.5 END
+
+
+// START introduced after v1.1 START
+
+// bookmarklet buttons
+define('_BMLET_ADD',                                                           'Add Item');
+define('_BMLET_EDIT',                                                          'Edit Item');
+define('_BMLET_DELETE',                                                                'Delete Item');
+define('_BMLET_BODY',                                                          'Body');
+define('_BMLET_MORE',                                                          'Extended');
+define('_BMLET_OPTIONS',                                                       'Options');
+define('_BMLET_PREVIEW',                                                       'Preview');
+
+// used in bookmarklet
+define('_ITEM_UPDATED',                                                                'Item was updated');
+define('_ITEM_DELETED',                                                                'Item was deleted');
+
+// plugins
+define('_CONFIRMTXT_PLUGIN',                                           'Are you sure you want to delete the plugin named');
+define('_ERROR_NOSUCHPLUGIN',                                          'No such plugin');
+define('_ERROR_DUPPLUGIN',                                                     'Sorry, this plugin is already installed');
+define('_ERROR_PLUGFILEERROR',                                         'No such plugin exists, or the permissions are set incorrectly');
+define('_PLUGS_NOCANDIDATES',                                          'No plugin candidates found');
+
+define('_PLUGS_TITLE_MANAGE',                                          'Manage Plugins');
+define('_PLUGS_TITLE_INSTALLED',                                       'Currently Installed');
+define('_PLUGS_TITLE_UPDATE',                                          'Update subscription list');
+define('_PLUGS_TEXT_UPDATE',                                           'Nucleus keeps a cache of the event subscriptions of the plugins. When you upgrade a plugin by replacing it\'s file, you should run this update to make sure that the correct subscriptions are cached');
+define('_PLUGS_TITLE_NEW',                                                     'Install New Plugin');
+define('_PLUGS_ADD_TEXT',                                                      'Below is a list of all the files in your plugins directory, that might be non-installed plugins. Make sure you are <strong>really sure</strong> that it\'s a plugin before adding it.');
+define('_PLUGS_BTN_INSTALL',                                           'Install Plugin');
+define('_BACKTOOVERVIEW',                                                      'Back to overview');
+
+// editlink
+define('_TEMPLATE_EDITLINK',                                           'Edit Item Link');
+
+// add left / add right tooltips
+define('_ADD_LEFT_TT',                                                         'Add left box');
+define('_ADD_RIGHT_TT',                                                                'Add right box');
+
+// add/edit item: new category (in dropdown box)
+define('_ADD_NEWCAT',                                                          'New Category...');
+
+// new settings
+define('_SETTINGS_PLUGINURL',                                          'Plugin URL');
+define('_SETTINGS_MAXUPLOADSIZE',                                      'Max. upload file size (bytes)');
+define('_SETTINGS_NONMEMBERMSGS',                                      'Allow non-members to send messages');
+define('_SETTINGS_PROTECTMEMNAMES',                                    'Protect member names');
+
+// overview screen
+define('_OVERVIEW_PLUGINS',                                                    'Manage Plugins...');
+
+// actionlog
+define('_ACTIONLOG_NEWMEMBER',                                         'New member registration:');
+
+// membermail (when not logged in)
+define('_MEMBERMAIL_MAIL',                                                     'Your email address:');
+
+// file upload
+define('_ERROR_DISALLOWEDUPLOAD2',                                     'You do not have admin rights on any of the blogs that have the destination member on the teamlist. Therefor, you\'re not allowed to upload files to this member\'s media directory');
+
+// plugin list
+define('_LISTS_INFO',                                                          'Information');
+define('_LIST_PLUGS_AUTHOR',                                           'By:');
+define('_LIST_PLUGS_VER',                                                      'Version:');
+define('_LIST_PLUGS_SITE',                                                     'Visit site');
+define('_LIST_PLUGS_DESC',                                                     'Description:');
+define('_LIST_PLUGS_SUBS',                                                     'Subscribes to the following events:');
+define('_LIST_PLUGS_UP',                                                       'move up');
+define('_LIST_PLUGS_DOWN',                                                     'move down');
+define('_LIST_PLUGS_UNINSTALL',                                                'uninstall');
+define('_LIST_PLUGS_ADMIN',                                                    'admin');
+define('_LIST_PLUGS_OPTIONS',                                          'edit&nbsp;options');
+
+// plugin option list
+define('_LISTS_VALUE',                                                         'Value');
+
+// plugin options
+define('_ERROR_NOPLUGOPTIONS',                                         'this plugin does not have any options set');
+define('_PLUGS_BACK',                                                          'Back to Plugin Overview');
+define('_PLUGS_SAVE',                                                          'Save Options');
+define('_PLUGS_OPTIONS_UPDATED',                                       'Plugin options updated');
+
+define('_OVERVIEW_MANAGEMENT',                                         'Management');
+define('_OVERVIEW_MANAGE',                                                     'Nucleus management...');
+define('_MANAGE_GENERAL',                                                      'General Management');
+define('_MANAGE_SKINS',                                                                'Skin and Templates');
+define('_MANAGE_EXTRA',                                                                'Extra features');
+
+define('_BACKTOMANAGE',                                                                'Back to Nucleus management');
+
+
+// END introduced after v1.1 END
+
+
+
+
+// charset to use
+define('_CHARSET',                                                                     'UTF-8');
+
+// global stuff
+define('_LOGOUT',                                                                      'Log Out');
+define('_LOGIN',                                                                       'Log In');
+define('_YES',                                                                         'Yes');
+define('_NO',                                                                          'No');
+define('_SUBMIT',                                                                      'Submit');
+define('_ERROR',                                                                       'Error');
+define('_ERRORMSG',                                                                    'An error has occurred!');
+define('_BACK',                                                                                'Go Back');
+define('_NOTLOGGEDIN',                                                         'Not logged in');
+define('_LOGGEDINAS',                                                          'Logged in as');
+define('_ADMINHOME',                                                           'Admin Home');
+define('_NAME',                                                                                'Name');
+define('_BACKHOME',                                                                    'Back to Admin Home');
+define('_BADACTION',                                                           'Non existing action requested');
+define('_MESSAGE',                                                                     'Message');
+define('_HELP_TT',                                                                     'Help!');
+define('_YOURSITE',                                                                    'Your site');
+
+
+define('_POPUP_CLOSE',                                                         'Close Window');
+
+define('_LOGIN_PLEASE',                                                                'Please Log in First');
+
+// commentform
+define('_COMMENTFORM_YOUARE',                                          'You are');
+define('_COMMENTFORM_SUBMIT',                                          'Add Comment');
+define('_COMMENTFORM_COMMENT',                                         'Your comment:');
+define('_COMMENTFORM_NAME',                                                    'Name:');
+define('_COMMENTFORM_REMEMBER',                                                'Remember Me');
+
+// loginform
+define('_LOGINFORM_NAME',                                                      'Username:');
+define('_LOGINFORM_PWD',                                                       'Password:');
+define('_LOGINFORM_YOUARE',                                                    'Logged in as');
+define('_LOGINFORM_SHARED',                                                    'Shared Computer');
+
+// member mailform
+define('_MEMBERMAIL_SUBMIT',                                           'Send Message');
+
+// search form
+define('_SEARCHFORM_SUBMIT',                                           'Search');
+
+// add item form
+define('_ADD_ADDTO',                                                           'Add new item to');
+define('_ADD_CREATENEW',                                                       'Create new item');
+define('_ADD_BODY',                                                                    'Body');
+define('_ADD_TITLE',                                                           'Title');
+define('_ADD_MORE',                                                                    'Extended (optional)');
+define('_ADD_CATEGORY',                                                                'Category');
+define('_ADD_PREVIEW',                                                         'Preview');
+define('_ADD_DISABLE_COMMENTS',                                                'Disable comments?');
+define('_ADD_DRAFTNFUTURE',                                                    'Draft &amp; Future Items');
+define('_ADD_ADDITEM',                                                         'Add Item');
+define('_ADD_ADDNOW',                                                          'Add Now');
+define('_ADD_PLACE_ON',                                                                'Place on');
+define('_ADD_ADDDRAFT',                                                                'Add to drafts');
+define('_ADD_NOPASTDATES',                                                     '(dates and times in the past are NOT valid, the current time will be used in that case)');
+define('_ADD_BOLD_TT',                                                         'Bold');
+define('_ADD_ITALIC_TT',                                                       'Italic');
+define('_ADD_HREF_TT',                                                         'Make Link');
+define('_ADD_MEDIA_TT',                                                                'Add Media');
+define('_ADD_PREVIEW_TT',                                                      'Show/Hide Preview');
+define('_ADD_CUT_TT',                                                          'Cut');
+define('_ADD_COPY_TT',                                                         'Copy');
+define('_ADD_PASTE_TT',                                                                'Paste');
+
+
+// edit item form
+define('_EDIT_ITEM',                                                           'Edit Item');
+define('_EDIT_SUBMIT',                                                         'Edit Item');
+define('_EDIT_ORIG_AUTHOR',                                                    'Original author');
+define('_EDIT_BACKTODRAFTS',                                           'Add back to drafts');
+define('_EDIT_COMMENTSNOTE',                                           '(note: disabling comments will _not_ hide previously added comments)');
+
+// used on delete screens
+define('_DELETE_CONFIRM',                                                      'Please confirm deletion');
+define('_DELETE_CONFIRM_BTN',                                          'Confirm Deletion');
+define('_CONFIRMTXT_ITEM',                                                     'You\'re about to delete the item following item:');
+define('_CONFIRMTXT_COMMENT',                                          'You\'re about to delete the following comment:');
+define('_CONFIRMTXT_TEAM1',                                                    'You\'re about to delete ');
+define('_CONFIRMTXT_TEAM2',                                                    ' from the teamlist for blog ');
+define('_CONFIRMTXT_BLOG',                                                     'The blog you are going to delete is: ');
+define('_WARNINGTXT_BLOGDEL',                                          'Warning! Deleting a blog will delete ALL items of that blog, and all comments. Please confirm to make clear that you are CERTAIN of what you\'re doing!<br />Also, don\'t interrupt Nucleus while removing your blog.');
+define('_CONFIRMTXT_MEMBER',                                           'You\'re about to delete the following member profile: ');
+define('_CONFIRMTXT_TEMPLATE',                                         'You\'re about to delete the template named ');
+define('_CONFIRMTXT_SKIN',                                                     'You\'re about to delete the skin named ');
+define('_CONFIRMTXT_BAN',                                                      'You\'re about to delete the ban for the ip range');
+define('_CONFIRMTXT_CATEGORY',                                         'You\'re about to delete the category ');
+
+// some status messages
+define('_DELETED_ITEM',                                                                'Item Deleted');
+define('_DELETED_MEMBER',                                                      'Member Deleted');
+define('_DELETED_COMMENT',                                                     'Comment Deleted');
+define('_DELETED_BLOG',                                                                'Blog Deleted');
+define('_DELETED_CATEGORY',                                                    'Category Deleted');
+define('_ITEM_MOVED',                                                          'Item Moved');
+define('_ITEM_ADDED',                                                          'Item Added');
+define('_COMMENT_UPDATED',                                                     'Comment updated');
+define('_SKIN_UPDATED',                                                                'Skin data has been saved');
+define('_TEMPLATE_UPDATED',                                                    'Template data has been saved');
+
+// errors
+define('_ERROR_COMMENT_LONGWORD',                                      'Please don\'t use words of lengths higher than 90 in your comments');
+define('_ERROR_COMMENT_NOCOMMENT',                                     'Please enter a comment');
+define('_ERROR_COMMENT_NOUSERNAME',                                    'Bad username');
+define('_ERROR_COMMENT_TOOLONG',                                       'Your comments are too long (max. 5000 chars)');
+define('_ERROR_COMMENTS_DISABLED',                                     'Comments for this blog are currently disabled.');
+define('_ERROR_COMMENTS_NONPUBLIC',                                    'You must be logged in as a member to add comment to this blog');
+define('_ERROR_COMMENTS_MEMBERNICK',                           'The name you want to use to post comments is in use by a site member. Choose something else.');
+define('_ERROR_SKIN',                                                          'Skin error');
+define('_ERROR_ITEMCLOSED',                                                    'This item is closed, it\'s not possible to add new comments to it or to vote on it');
+define('_ERROR_NOSUCHITEM',                                                    'No such item exists');
+define('_ERROR_NOSUCHBLOG',                                                    'No such blog');
+define('_ERROR_NOSUCHSKIN',                                                    'No such skin');
+define('_ERROR_NOSUCHMEMBER',                                          'No such member');
+define('_ERROR_NOTONTEAM',                                                     'You\'re not on the teamlist of this weblog.');
+define('_ERROR_BADDESTBLOG',                                           'Destination blog does not exist');
+define('_ERROR_NOTONDESTTEAM',                                         'Cannot move item, since you\'re not on the teamlist of the destination blog');
+define('_ERROR_NOEMPTYITEMS',                                          'Cannot add empty items!');
+define('_ERROR_BADMAILADDRESS',                                                'Email address is not valid');
+define('_ERROR_BADNOTIFY',                                                     'One or more of the given notify addresses is not a valid email address');
+define('_ERROR_BADNAME',                                                       'Name is not valid (only a-z and 0-9 allowed, no spaces at start/end)');
+define('_ERROR_NICKNAMEINUSE',                                         'Another member is already using that nickname');
+define('_ERROR_PASSWORDMISMATCH',                                      'Passwords must match');
+define('_ERROR_PASSWORDTOOSHORT',                                      'Password should be at least 6 characters');
+define('_ERROR_PASSWORDMISSING',                                       'Password cannot be empty');
+define('_ERROR_REALNAMEMISSING',                                       'You must enter a real name');
+define('_ERROR_ATLEASTONEADMIN',                                       'There should always be at least one super-admin that can login to the admin area.');
+define('_ERROR_ATLEASTONEBLOGADMIN',                           'Performing this action would leave your weblog unmaintainable. Please make sure there is always at least one admin.');
+define('_ERROR_ALREADYONTEAM',                                         'You can\'t add a member that is already on the team');
+define('_ERROR_BADSHORTBLOGNAME',                                      'The short blog name should only contain a-z and 0-9, without spaces');
+define('_ERROR_DUPSHORTBLOGNAME',                                      'Another blog already has the chosen short name. These names should be unique');
+define('_ERROR_UPDATEFILE',                                                    'Cannot get write access to the update-file. Make sure the file permissions are set ok (try chmodding it to 666). Also note that the location is relative to the admin-area directory, so you might want to use an absolute path (something like /your/path/to/nucleus/)');
+define('_ERROR_DELDEFBLOG',                                                    'Cannot delete the default blog');
+define('_ERROR_DELETEMEMBER',                                          'This member cannot be deleted, probably because he/she is the author of item(s)');
+define('_ERROR_BADTEMPLATENAME',                                       'Invalid name for template, use only a-z and 0-9, without spaces');
+define('_ERROR_DUPTEMPLATENAME',                                       'Another template with this name already exists');
+define('_ERROR_BADSKINNAME',                                           'Invalid name for skin (only a-z, 0-9 are allowed, no spaces)');
+define('_ERROR_DUPSKINNAME',                                           'Another skin with this name already exists');
+define('_ERROR_DEFAULTSKIN',                                           'There must at all times be a skin named "default"');
+define('_ERROR_SKINDEFDELETE',                                         'Cannot delete skin since it is the default skin for the following weblog: ');
+define('_ERROR_DISALLOWED',                                                    'Sorry, you\'re not allowed to perform this action');
+define('_ERROR_DELETEBAN',                                                     'Error while trying to delete ban (ban does not exist)');
+define('_ERROR_ADDBAN',                                                                'Error while trying to add ban. Ban might not have been added correctly in all your blogs.');
+define('_ERROR_BADACTION',                                                     'Required action does not exist');
+define('_ERROR_MEMBERMAILDISABLED',                                    'Member to Member mail messages are disabled');
+define('_ERROR_MEMBERCREATEDISABLED'                           ,'Creation of member accounts is disabled');
+define('_ERROR_INCORRECTEMAIL',                                                'Incorrect mail address');
+define('_ERROR_VOTEDBEFORE',                                           'You have already voted for this item');
+define('_ERROR_BANNED1',                                                       'Cannot perform action since you (ip range ');
+define('_ERROR_BANNED2',                                                       ') are banned from doing so. The message was: \'');
+define('_ERROR_BANNED3',                                                       '\'');
+define('_ERROR_LOGINNEEDED',                                           'You must be logged in in order to perform this action');
+define('_ERROR_CONNECT',                                                       'Connect Error');
+define('_ERROR_FILE_TOO_BIG',                                          'File is too big!');
+define('_ERROR_BADFILETYPE',                                           'Sorry, this filetype is not allowed');
+define('_ERROR_BADREQUEST',                                                    'Bad upload request');
+define('_ERROR_DISALLOWEDUPLOAD',                                      'You are not on any weblogs teamlist. Hence, you are not allowed to upload files');
+define('_ERROR_BADPERMISSIONS',                                                'File/Dir permissions are not set correctly');
+define('_ERROR_UPLOADMOVEP',                                           'Error while moving uploaded file');
+define('_ERROR_UPLOADCOPY',                                                    'Error while copying file');
+define('_ERROR_UPLOADDUPLICATE',                                       'Another file with that name already exists. Try to rename it before uploading.');
+define('_ERROR_LOGINDISALLOWED',                                       'Sorry, you\'re not allowed to log in to the admin area. You can log in as another user, though');
+define('_ERROR_DBCONNECT',                                                     'Could not connect to mySQL server');
+define('_ERROR_DBSELECT',                                                      'Could not select the nucleus database.');
+define('_ERROR_NOSUCHLANGUAGE',                                                'No such language file exists');
+define('_ERROR_NOSUCHCATEGORY',                                                'No such category exists');
+define('_ERROR_DELETELASTCATEGORY',                                    'There must at least be one category');
+define('_ERROR_DELETEDEFCATEGORY',                                     'Cannot delete default category');
+define('_ERROR_BADCATEGORYNAME',                                       'Bad category name');
+define('_ERROR_DUPCATEGORYNAME',                                       'Another category with this name already exists');
+
+// some warnings (used for mediadir setting)
+define('_WARNING_NOTADIR',                                                     'Warning: Current value is not a directory!');
+define('_WARNING_NOTREADABLE',                                         'Warning: Current value is a non-readable directory!');
+define('_WARNING_NOTWRITABLE',                                         'Warning: Current value is NOT a writable directory!');
+
+// media and upload
+define('_MEDIA_UPLOADLINK',                                                    'Upload a new file');
+define('_MEDIA_MODIFIED',                                                      'modified');
+define('_MEDIA_FILENAME',                                                      'filename');
+define('_MEDIA_DIMENSIONS',                                                    'dimensions');
+define('_MEDIA_INLINE',                                                                'Inline');
+define('_MEDIA_POPUP',                                                         'Popup');
+define('_UPLOAD_TITLE',                                                                'Choose File');
+define('_UPLOAD_MSG',                                                          'Select the file you want to upload below, and hit the \'Upload\' button.');
+define('_UPLOAD_BUTTON',                                                       'Upload');
+
+// some status messages
+//define('_MSG_ACCOUNTCREATED',                                                'Account created, password will be sent through email');
+//define('_MSG_PASSWORDSENT',                                                  'Password has been sent by e-mail.');
+define('_MSG_LOGINAGAIN',                                                      'You\'ll need to login again, because your info changed');
+define('_MSG_SETTINGSCHANGED',                                         'Settings Changed');
+define('_MSG_ADMINCHANGED',                                                    'Admin Changed');
+define('_MSG_NEWBLOG',                                                         'New Blog Created');
+define('_MSG_ACTIONLOGCLEARED',                                                'Action Log Cleared');
+
+// actionlog in admin area
+define('_ACTIONLOG_DISALLOWED',                                                'Disallowed action: ');
+define('_ACTIONLOG_PWDREMINDERSENT',                           'New password sent for ');
+define('_ACTIONLOG_TITLE',                                                     'Action Log');
+define('_ACTIONLOG_CLEAR_TITLE',                                       'Clear Action Log');
+define('_ACTIONLOG_CLEAR_TEXT',                                                'Clear action log now');
+
+// team management
+define('_TEAM_TITLE',                                                          'Manage team for blog ');
+define('_TEAM_CURRENT',                                                                'Current team');
+define('_TEAM_ADDNEW',                                                         'Add new member to team');
+define('_TEAM_CHOOSEMEMBER',                                           'Choose member');
+define('_TEAM_ADMIN',                                                          'Admin privileges? ');
+define('_TEAM_ADD',                                                                    'Add to team');
+define('_TEAM_ADD_BTN',                                                                'Add to team');
+
+// blogsettings
+define('_EBLOG_TITLE',                                                         'Edit Blog Settings');
+define('_EBLOG_TEAM_TITLE',                                                    'Edit Team');
+define('_EBLOG_TEAM_TEXT',                                                     'Click here to edit your team...');
+define('_EBLOG_SETTINGS_TITLE',                                                'Blog settings');
+define('_EBLOG_NAME',                                                          'Blog Name');
+define('_EBLOG_SHORTNAME',                                                     'Short Blog Name');
+define('_EBLOG_SHORTNAME_EXTRA',                                       '<br />(should only contain a-z and no spaces)');
+define('_EBLOG_DESC',                                                          'Blog Description');
+define('_EBLOG_URL',                                                           'URL');
+define('_EBLOG_DEFSKIN',                                                       'Default Skin');
+define('_EBLOG_DEFCAT',                                                                'Default Category');
+define('_EBLOG_LINEBREAKS',                                                    'Convert line breaks');
+define('_EBLOG_DISABLECOMMENTS',                                       'Comments enabled?<br /><small>(Disabling comments means that adding comments is not possible.)</small>');
+define('_EBLOG_ANONYMOUS',                                                     'Allow comments by non-members?');
+define('_EBLOG_NOTIFY',                                                                'Notify Address(es) (use ; as separator)');
+define('_EBLOG_NOTIFY_ON',                                                     'Notify on');
+define('_EBLOG_NOTIFY_COMMENT',                                                'New comments');
+define('_EBLOG_NOTIFY_KARMA',                                          'New karma votes');
+define('_EBLOG_NOTIFY_ITEM',                                           'New weblog items');
+define('_EBLOG_PING',                          'Ping weblog listing service on update?'); // NOTE: This string is no longer in used
+define('_EBLOG_MAXCOMMENTS',                                           'Max Amount of comments');
+define('_EBLOG_UPDATE',                                                                'Update file');
+define('_EBLOG_OFFSET',                                                                'Time Offset');
+define('_EBLOG_STIME',                                                         'Current server time is');
+define('_EBLOG_BTIME',                                                         'Current blog time is');
+define('_EBLOG_CHANGE',                                                                'Change Settings');
+define('_EBLOG_CHANGE_BTN',                                                    'Change Settings');
+define('_EBLOG_ADMIN',                                                         'Blog Admin');
+define('_EBLOG_ADMIN_MSG',                                                     'You will be assigned admin privileges');
+define('_EBLOG_CREATE_TITLE',                                          'Create new weblog');
+define('_EBLOG_CREATE_TEXT',                                           'Fill out the form below to create a new weblog. <br /><br /> <b>Note:</b> Only the necessary options are listed. If you want to set extra options, enter the blogsettings page after creating the weblog.');
+define('_EBLOG_CREATE',                                                                'Create!');
+define('_EBLOG_CREATE_BTN',                                                    'Create Weblog');
+define('_EBLOG_CAT_TITLE',                                                     'Categories');
+define('_EBLOG_CAT_NAME',                                                      'Category Name');
+define('_EBLOG_CAT_DESC',                                                      'Category Description');
+define('_EBLOG_CAT_CREATE',                                                    'Create New Category');
+define('_EBLOG_CAT_UPDATE',                                                    'Update Category');
+define('_EBLOG_CAT_UPDATE_BTN',                                                'Update Category');
+
+// templates
+define('_TEMPLATE_TITLE',                                                      'Edit Templates');
+define('_TEMPLATE_AVAILABLE_TITLE',                                    'Available Templates');
+define('_TEMPLATE_NEW_TITLE',                                          'New Template');
+define('_TEMPLATE_NAME',                                                       'Template Name');
+define('_TEMPLATE_DESC',                                                       'Template Description');
+define('_TEMPLATE_CREATE',                                                     'Create Template');
+define('_TEMPLATE_CREATE_BTN',                                         'Create Template');
+define('_TEMPLATE_EDIT_TITLE',                                         'Edit Template');
+define('_TEMPLATE_BACK',                                                       'Back to Template Overview');
+define('_TEMPLATE_EDIT_MSG',                                           'Not all template parts are needed, leave empty those that are not needed.');
+define('_TEMPLATE_SETTINGS',                                           'Template Settings');
+define('_TEMPLATE_ITEMS',                                                      'Items');
+define('_TEMPLATE_ITEMHEADER',                                         'Item Header');
+define('_TEMPLATE_ITEMBODY',                                           'Item Body');
+define('_TEMPLATE_ITEMFOOTER',                                         'Item Footer');
+define('_TEMPLATE_MORELINK',                                           'Link to extended entry');
+define('_TEMPLATE_NEW',                                                                'Indication of new item');
+define('_TEMPLATE_COMMENTS_ANY',                                       'Comments (if any)');
+define('_TEMPLATE_CHEADER',                                                    'Comments Header');
+define('_TEMPLATE_CBODY',                                                      'Comments Body');
+define('_TEMPLATE_CFOOTER',                                                    'Comments Footer');
+define('_TEMPLATE_CONE',                                                       'One Comment');
+define('_TEMPLATE_CMANY',                                                      'Two (or more) Comments');
+define('_TEMPLATE_CMORE',                                                      'Comments Read More');
+define('_TEMPLATE_CMEXTRA',                                                    'Member Extra');
+define('_TEMPLATE_COMMENTS_NONE',                                      'Comments (if none)');
+define('_TEMPLATE_CNONE',                                                      'No Comments');
+define('_TEMPLATE_COMMENTS_TOOMUCH',                           'Comments (if any, but too much to show inline)');
+define('_TEMPLATE_CTOOMUCH',                                           'Too Much Comments');
+define('_TEMPLATE_ARCHIVELIST',                                                'Archive Lists');
+define('_TEMPLATE_AHEADER',                                                    'Archive List Header');
+define('_TEMPLATE_AITEM',                                                      'Archive List Item');
+define('_TEMPLATE_AFOOTER',                                                    'Archive List Footer');
+define('_TEMPLATE_DATETIME',                                           'Date and Time');
+define('_TEMPLATE_DHEADER',                                                    'Date Header');
+define('_TEMPLATE_DFOOTER',                                                    'Date Footer');
+define('_TEMPLATE_DFORMAT',                                                    'Date Format');
+define('_TEMPLATE_TFORMAT',                                                    'Time Format');
+define('_TEMPLATE_LOCALE',                                                     'Locale');
+define('_TEMPLATE_IMAGE',                                                      'Image popups');
+define('_TEMPLATE_PCODE',                                                      'Popup Link Code');
+define('_TEMPLATE_ICODE',                                                      'Inline Image Code');
+define('_TEMPLATE_MCODE',                                                      'Media Object Link Code');
+define('_TEMPLATE_SEARCH',                                                     'Search');
+define('_TEMPLATE_SHIGHLIGHT',                                         'Highlight');
+define('_TEMPLATE_SNOTFOUND',                                          'Nothing found in search');
+define('_TEMPLATE_UPDATE',                                                     'Update');
+define('_TEMPLATE_UPDATE_BTN',                                         'Update Template');
+define('_TEMPLATE_RESET_BTN',                                          'Reset Data');
+define('_TEMPLATE_CATEGORYLIST',                                       'Category Lists');
+define('_TEMPLATE_CATHEADER',                                          'Category List Header');
+define('_TEMPLATE_CATITEM',                                                    'Category List Item');
+define('_TEMPLATE_CATFOOTER',                                          'Category List Footer');
+
+// skins
+define('_SKIN_EDIT_TITLE',                                                     'Edit Skins');
+define('_SKIN_AVAILABLE_TITLE',                                                'Available Skins');
+define('_SKIN_NEW_TITLE',                                                      'New Skin');
+define('_SKIN_NAME',                                                           'Name');
+define('_SKIN_DESC',                                                           'Description');
+define('_SKIN_TYPE',                                                           'Content Type');
+define('_SKIN_CREATE',                                                         'Create');
+define('_SKIN_CREATE_BTN',                                                     'Create Skin');
+define('_SKIN_EDITONE_TITLE',                                          'Edit skin');
+define('_SKIN_BACK',                                                           'Back to Skin Overview');
+define('_SKIN_PARTS_TITLE',                                                    'Skin Parts');
+define('_SKIN_PARTS_MSG',                                                      'Not all types are needed for each skin. Leave empty those you don\'t need. Choose the skin type to edit below:');
+define('_SKIN_PART_MAIN',                                                      'Main Index');
+define('_SKIN_PART_ITEM',                                                      'Item Pages');
+define('_SKIN_PART_ALIST',                                                     'Archive List');
+define('_SKIN_PART_ARCHIVE',                                           'Archive');
+define('_SKIN_PART_SEARCH',                                                    'Search');
+define('_SKIN_PART_ERROR',                                                     'Errors');
+define('_SKIN_PART_MEMBER',                                                    'Member Details');
+define('_SKIN_PART_POPUP',                                                     'Image Popups');
+define('_SKIN_GENSETTINGS_TITLE',                                      'General Settings');
+define('_SKIN_CHANGE',                                                         'Change');
+define('_SKIN_CHANGE_BTN',                                                     'Change these settings');
+define('_SKIN_UPDATE_BTN',                                                     'Update Skin');
+define('_SKIN_RESET_BTN',                                                      'Reset Data');
+define('_SKIN_EDITPART_TITLE',                                         'Edit Skin');
+define('_SKIN_GOBACK',                                                         'Go Back');
+define('_SKIN_ALLOWEDVARS',                                                    'Allowed Variables (click for info):');
+
+// global settings
+define('_SETTINGS_TITLE',                                                      'General Settings');
+define('_SETTINGS_SUB_GENERAL',                                                'General Settings');
+define('_SETTINGS_DEFBLOG',                                                    'Default Blog');
+define('_SETTINGS_ADMINMAIL',                                          'Administrator Email');
+define('_SETTINGS_SITENAME',                                           'Site Name');
+define('_SETTINGS_SITEURL',                                                    'URL of Site (should end with a slash)');
+define('_SETTINGS_ADMINURL',                                           'URL of Admin Area (should end with a slash)');
+define('_SETTINGS_DIRS',                                                       'Nucleus Directories');
+define('_SETTINGS_MEDIADIR',                                           'Media Directory');
+define('_SETTINGS_SEECONFIGPHP',                                       '(see config.php)');
+define('_SETTINGS_MEDIAURL',                                           'Media URL (should end with a slash)');
+define('_SETTINGS_ALLOWUPLOAD',                                                'Allow File Upload?');
+define('_SETTINGS_ALLOWUPLOADTYPES',                           'Allow File Types for Upload');
+define('_SETTINGS_CHANGELOGIN',                                                'Allow Members to Change Login/Password');
+define('_SETTINGS_COOKIES_TITLE',                                      'Cookie Settings');
+define('_SETTINGS_COOKIELIFE',                                         'Login Cookie Lifetime');
+define('_SETTINGS_COOKIESESSION',                                      'Session Cookies');
+define('_SETTINGS_COOKIEMONTH',                                                'Lifetime of a Month');
+define('_SETTINGS_COOKIEPATH',                                         'Cookie Path (advanced)');
+define('_SETTINGS_COOKIEDOMAIN',                                       'Cookie Domain (advanced)');
+define('_SETTINGS_COOKIESECURE',                                       'Secure Cookie (advanced)');
+define('_SETTINGS_LASTVISIT',                                          'Save Last Visit Cookies');
+define('_SETTINGS_ALLOWCREATE',                                                'Allow Visitors to Create a Member Account');
+define('_SETTINGS_NEWLOGIN',                                           'Login Allowed for User-Created accounts');
+define('_SETTINGS_NEWLOGIN2',                                          '(only goes for newly created accounts)');
+define('_SETTINGS_MEMBERMSGS',                                         'Allow Member-2-Member Service');
+define('_SETTINGS_LANGUAGE',                                           'Default Language');
+define('_SETTINGS_DISABLESITE',                                                'Disable Site');
+define('_SETTINGS_DBLOGIN',                                                    'mySQL Login &amp; Database');
+define('_SETTINGS_UPDATE',                                                     'Update Settings');
+define('_SETTINGS_UPDATE_BTN',                                         'Update Settings');
+define('_SETTINGS_DISABLEJS',                                          'Disable JavaScript Toolbar');
+define('_SETTINGS_MEDIA',                                                      'Media/Upload Settings');
+define('_SETTINGS_MEDIAPREFIX',                                                'Prefix uploaded files with date');
+define('_SETTINGS_MEMBERS',                                                    'Member Settings');
+
+// bans
+define('_BAN_TITLE',                                                           'Ban List for');
+define('_BAN_NONE',                                                                    'No bans for this weblog');
+define('_BAN_NEW_TITLE',                                                       'Add New Ban');
+define('_BAN_NEW_TEXT',                                                                'Add a new ban now');
+define('_BAN_REMOVE_TITLE',                                                    'Remove Ban');
+define('_BAN_IPRANGE',                                                         'IP Range');
+define('_BAN_BLOGS',                                                           'Which blogs?');
+define('_BAN_DELETE_TITLE',                                                    'Delete Ban');
+define('_BAN_ALLBLOGS',                                                                'All blogs to which you have admin privileges.');
+define('_BAN_REMOVED_TITLE',                                           'Ban Removed');
+define('_BAN_REMOVED_TEXT',                                                    'Ban was removed for the following blogs:');
+define('_BAN_ADD_TITLE',                                                       'Add Ban');
+define('_BAN_IPRANGE_TEXT',                                                    'Choose the IP range you want to block below. The less numbers in it, the more addresses will be blocked.');
+define('_BAN_BLOGS_TEXT',                                                      'You can either select to ban the IP on one blog only, or you can select to block the IP on all blogs where you have administrator privileges. Make your choice below.');
+define('_BAN_REASON_TITLE',                                                    'Reason');
+define('_BAN_REASON_TEXT',                                                     'You can provide a reason for the ban, which will be displayed when the IP holder tries to add another comment or tries to cast a karma vote. Maximum length is 256 characters.');
+define('_BAN_ADD_BTN',                                                         'Add Ban');
+
+// LOGIN screen
+define('_LOGIN_MESSAGE',                                                       'Message');
+define('_LOGIN_SHARED',                                                                _LOGINFORM_SHARED);
+define('_LOGIN_FORGOT',                                                                'Forgot your password?');
+
+// membermanagement
+define('_MEMBERS_TITLE',                                                       'Member Management');
+define('_MEMBERS_CURRENT',                                                     'Current Members');
+define('_MEMBERS_NEW',                                                         'New Member');
+define('_MEMBERS_DISPLAY',                                                     'Display Name');
+define('_MEMBERS_DISPLAY_INFO',                                                '(This is the name you use to login)');
+define('_MEMBERS_REALNAME',                                                    'Real Name');
+define('_MEMBERS_PWD',                                                         'Password');
+define('_MEMBERS_REPPWD',                                                      'Repeat Password');
+define('_MEMBERS_EMAIL',                                                       'Email address');
+define('_MEMBERS_EMAIL_EDIT',                                          '(When you change the email address, an activation link will be automatically sent out to that address)');
+define('_MEMBERS_URL',                                                         'Website Address (URL)');
+define('_MEMBERS_SUPERADMIN',                                          'Administrator privileges');
+define('_MEMBERS_CANLOGIN',                                                    'Can login to admin area');
+define('_MEMBERS_NOTES',                                                       'Notes');
+define('_MEMBERS_NEW_BTN',                                                     'Add Member');
+define('_MEMBERS_EDIT',                                                                'Edit Member');
+define('_MEMBERS_EDIT_BTN',                                                    'Change Settings');
+define('_MEMBERS_BACKTOOVERVIEW',                                      'Back to Member Overview');
+define('_MEMBERS_DEFLANG',                                                     'Language');
+define('_MEMBERS_USESITELANG',                                         '- use site settings -');
+
+// List of blogs (TT = tooltip)
+define('_BLOGLIST_TT_VISIT',                                           'Visit Site');
+define('_BLOGLIST_ADD',                                                                'Add Item');
+define('_BLOGLIST_TT_ADD',                                                     'Add a new item to this weblog');
+define('_BLOGLIST_EDIT',                                                       'Edit/Delete Items');
+define('_BLOGLIST_TT_EDIT',                                                    '');
+define('_BLOGLIST_BMLET',                                                      'Bookmarklet');
+define('_BLOGLIST_TT_BMLET',                                           '');
+define('_BLOGLIST_SETTINGS',                                           'Settings');
+define('_BLOGLIST_TT_SETTINGS',                                                'Edit settings or manage team');
+define('_BLOGLIST_BANS',                                                       'Bans');
+define('_BLOGLIST_TT_BANS',                                                    'View, add or remove banned IPs');
+define('_BLOGLIST_DELETE',                                                     'Delete All');
+define('_BLOGLIST_TT_DELETE',                                          'Delete this weblog');
+
+// OVERVIEW screen
+define('_OVERVIEW_YRBLOGS',                                                    'Your weblogs');
+define('_OVERVIEW_YRDRAFTS',                                           'Your drafts');
+define('_OVERVIEW_YRSETTINGS',                                         'Your settings');
+define('_OVERVIEW_GSETTINGS',                                          'General settings');
+define('_OVERVIEW_NOBLOGS',                                                    'You\'re not on any weblogs teamlist');
+define('_OVERVIEW_NODRAFTS',                                           'No drafts');
+define('_OVERVIEW_EDITSETTINGS',                                       'Edit Your Settings...');
+define('_OVERVIEW_BROWSEITEMS',                                                'Browse your items...');
+define('_OVERVIEW_BROWSECOMM',                                         'Browse your comments...');
+define('_OVERVIEW_VIEWLOG',                                                    'View Action Log...');
+define('_OVERVIEW_MEMBERS',                                                    'Manage Members...');
+define('_OVERVIEW_NEWLOG',                                                     'Create New Weblog...');
+define('_OVERVIEW_SETTINGS',                                           'Edit Settings...');
+define('_OVERVIEW_TEMPLATES',                                          'Edit Templates...');
+define('_OVERVIEW_SKINS',                                                      'Edit Skins...');
+define('_OVERVIEW_BACKUP',                                                     'Backup/Restore...');
+
+// ITEMLIST
+define('_ITEMLIST_BLOG',                                                       'Items for blog');
+define('_ITEMLIST_YOUR',                                                       'Your items');
+
+// Comments
+define('_COMMENTS',                                                                    'Comments');
+define('_NOCOMMENTS',                                                          'No comments for this item');
+define('_COMMENTS_YOUR',                                                       'Your Comments');
+define('_NOCOMMENTS_YOUR',                                                     'You didn\'t write any comments');
+
+// LISTS (general)
+define('_LISTS_NOMORE',                                                                'No more results, or no results at all');
+define('_LISTS_PREV',                                                          'Previous');
+define('_LISTS_NEXT',                                                          'Next');
+define('_LISTS_SEARCH',                                                                'Search');
+define('_LISTS_CHANGE',                                                                'Change');
+define('_LISTS_PERPAGE',                                                       'items/page');
+define('_LISTS_ACTIONS',                                                       'Actions');
+define('_LISTS_DELETE',                                                                'Delete');
+define('_LISTS_EDIT',                                                          'Edit');
+define('_LISTS_MOVE',                                                          'Move');
+define('_LISTS_CLONE',                                                         'Clone');
+define('_LISTS_TITLE',                                                         'Title');
+define('_LISTS_BLOG',                                                          'Blog');
+define('_LISTS_NAME',                                                          'Name');
+define('_LISTS_DESC',                                                          'Description');
+define('_LISTS_TIME',                                                          'Time');
+define('_LISTS_COMMENTS',                                                      'Comments');
+define('_LISTS_TYPE',                                                          'Type');
+
+
+// member list
+define('_LIST_MEMBER_NAME',                                                    'Display Name');
+define('_LIST_MEMBER_RNAME',                                           'Real Name');
+define('_LIST_MEMBER_ADMIN',                                           'Super-admin? ');
+define('_LIST_MEMBER_LOGIN',                                           'Can login? ');
+define('_LIST_MEMBER_URL',                                                     'Website');
+
+// banlist
+define('_LIST_BAN_IPRANGE',                                                    'IP Range');
+define('_LIST_BAN_REASON',                                                     'Reason');
+
+// actionlist
+define('_LIST_ACTION_MSG',                                                     'Message');
+
+// commentlist
+define('_LIST_COMMENT_BANIP',                                          'Ban IP');
+define('_LIST_COMMENT_WHO',                                                    'Author');
+define('_LIST_COMMENT',                                                                'Comment');
+define('_LIST_COMMENT_HOST',                                           'Host');
+
+// itemlist
+define('_LIST_ITEM_INFO',                                                      'Info');
+define('_LIST_ITEM_CONTENT',                                           'Title and Text');
+
+
+// teamlist
+define('_LIST_TEAM_ADMIN',                                                     'Admin ');
+define('_LIST_TEAM_CHADMIN',                                           'Change Admin');
+
+// edit comments
+define('_EDITC_TITLE',                                                         'Edit Comments');
+define('_EDITC_WHO',                                                           'Author');
+define('_EDITC_HOST',                                                          'From Where?');
+define('_EDITC_WHEN',                                                          'When?');
+define('_EDITC_TEXT',                                                          'Text');
+define('_EDITC_EDIT',                                                          'Edit Comment');
+define('_EDITC_MEMBER',                                                                'member');
+define('_EDITC_NONMEMBER',                                                     'non member');
+
+// move item
+define('_MOVE_TITLE',                                                          'Move to which blog?');
+define('_MOVE_BTN',                                                                    'Move Item');
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/language/english.php b/utf8/nucleus/language/english.php
new file mode 100755 (executable)
index 0000000..0f68d21
--- /dev/null
@@ -0,0 +1,1314 @@
+<?php
+// English Nucleus Language File
+//
+// Author: Wouter Demuynck
+//
+// Modified by: shizuki (shizuki@kinezumi.net)
+// Nucleus version: v1.0-v3.4
+//
+// Please note: if you want to translate this file to your own language, be aware
+// that in a next Nucleus version, new variables might be added and some other ones
+// might be deleted. Therefore, it's important to list the Nucleus version for which
+// the file was written in your document.
+//
+// Fully translated language file can be sent to us and will be made
+// available for download (with proper credit to the author, of course)
+
+// Note for English
+// This file is ENGLISH Language File for NucleusCMS
+
+/**
+ * English Nucleus Language File
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ */
+
+/********************************************
+ *        Start New for 3.50                *
+ ********************************************/
+define('_PLUGS_TITLE_GETPLUGINS',              'get more plugins...');
+define('_ARCHIVETYPE_YEAR', 'year');
+define('_ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE',            'Newer Version Available');
+define('_ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT',             'Upgrade available: v');
+define('_MANAGER_PLUGINSQLAPI_NOTSUPPORT', "Plugin %s was not loaded (does not support SqlApi and you are trying to use a non-mysql db)");
+
+
+/********************************************
+ *        Start New for 3.40                *
+ ********************************************/
+
+// START changed/added after 3.33 START
+define('_MEMBERS_USEAUTOSAVE',                                         'Use the Autosave function?');
+
+define('_TEMPLATE_PLUGIN_FIELDS',                                      'Custom Plugin Fields');
+define('_TEMPLATE_BLOGLIST',                                           'Template Blog List');
+define('_TEMPLATE_BLOGHEADER',                                         'Blog List Header');
+define('_TEMPLATE_BLOGITEM',                                           'Blog List Item');
+define('_TEMPLATE_BLOGFOOTER',                                         'Blog List Footer');
+
+define('_SETTINGS_DEFAULTLISTSIZE',                                    'Default Size of Lists in Admin Area');
+define('_SETTINGS_DEBUGVARS',                                          'Debug Vars');
+
+define('_CREATE_ACCOUNT_TITLE',                                                'Create Member Account');
+define('_CREATE_ACCOUNT0',                                                     'Create Account');
+define('_CREATE_ACCOUNT1',                                                     'Visitors are not allowed to create a Member Account.<br /><br />');
+define('_CREATE_ACCOUNT2',                                                     'Please contact the website administrator for more information.');
+define('_CREATE_ACCOUNT_USER_DATA',                                    'Account Info.');
+define('_CREATE_ACCOUNT_LOGIN_NAME',                           'Login Name (required):');
+define('_CREATE_ACCOUNT_LOGIN_NAME_VALID',                     'only a-z and 0-9 allowed, no spaces at start/end');
+define('_CREATE_ACCOUNT_REAL_NAME',                                    'Real Name (required):');
+define('_CREATE_ACCOUNT_EMAIL',                                                'Email (required):');
+define('_CREATE_ACCOUNT_EMAIL2',                                       '(must be valid, because an activation link will be sent over there)');
+define('_CREATE_ACCOUNT_URL',                                          'URL:');
+define('_CREATE_ACCOUNT_SUBMIT',                                       'Create Account');
+
+define('_BMLET_BACKTODRAFTS',                                          'Move back to drafts');
+define('_BMLET_CANCEL',                                                                'Cancel');
+
+define('_LIST_ITEM_NOCONTENT',                                         'No Comment');
+define('_LIST_ITEM_COMMENTS',                                          '%d Comments');
+
+define('_EDITC_URL',                                                           'Web site');
+define('_EDITC_EMAIL',                                                         'E-mail');
+
+define('_MANAGER_PLUGINFILE_NOTFOUND',                         'Plugin %s was not loaded (File not found)');
+/* changed */
+// plugin dependency
+define('_ERROR_INSREQPLUGIN',                                          'Plugin installation failed, requires %s');
+define('_ERROR_DELREQPLUGIN',                                          'Plugin deletion failed, required by %s');
+
+//define('_ADD_ADDLATER',                                                              'Add Later');
+define('_ADD_ADDLATER',                                                                'Add the dates specified');
+
+define('_LOGIN_NAME',                                                          'Name:');
+define('_LOGIN_PASSWORD',                                                      'Password:');
+
+// changed from _BOOKMARLET_BMARKLFOLLOW
+define('_BOOKMARKLET_BMARKFOLLOW',                                     ' (Works with nearly all browsers)');
+// END changed/added after 3.33 END
+
+// START merge UTF-8 and EUC-JP
+
+// Create New blog
+define('_ADMIN_NOTABILIA',                                                     'Some information');
+define('_ADMIN_PLEASE_READ',                                           "Before you start, here's some <strong>important information</strong>");
+define('_ADMIN_HOW_TO_ACCESS',                                         "After you've created a new weblog, you'll need to perform some actions to make your blog accessible. There are two possibilities:");
+define('_ADMIN_SIMPLE_WAY',                                                    "<strong>Simple:</strong> Create a copy of <code>index.php</code> and modify it to display your new weblog. Further instructions on how to do this will be provided after you've submitted this first form.");
+define('_ADMIN_ADVANCED_WAY',                                          "<strong>Advanced:</strong> Insert the blog content into your current skins using skinvars like <code>&lt;%otherblog()&gt;</code>. This way, you can place multiple blogs on the same page.");
+define('_ADMIN_HOW_TO_CREATE',                                         'Create Weblog');
+
+
+define('_BOOKMARKLET_NEW_CATEGORY',                                    'Item was added, and a new category was created. ');
+define('_BOOKMARKLET_NEW_CATEGORY_EDIT',                       'Click here to edit the name and description of the category.');
+define('_BOOKMARKLET_NEW_WINDOW',                                      'Opens in new window');
+define('_BOOKMARKLET_SEND_PING',                                       'Item was added successfully. Now pinging weblogs.com. Please hold on... (can take a while)'); // NOTE: This string is no longer in used
+
+// END merge UTF-8 and EUC-JP
+
+// <add by shizuki>
+// OVERVIEW screen
+define('_OVERVIEW_SHOWALL',                                                    'Show all blogs');      // <add by shizuki />
+
+// Edit skins
+define('_SKINEDIT_ALLOWEDBLOGS',                                               'Short blog names:');                   // <add by shizuki>
+define('_SKINEDIT_ALLOWEDTEMPLATESS',                                  'Template names:');             // <add by shizuki>
+
+// delete member
+define('_WARNINGTXT_NOTDELMEDIAFILES',                         'Please note that media files will <b>NOT</b> be deleted. (At least not in this Nucleus version)');     // <add by shizuki />
+
+// send Weblogupdate.ping
+define('_UPDATEDPING_MESSAGE',                                         '<h2>Site Updated, Now pinging various weblog listing services...</h2><p>This can take a while...</p><p>If you aren\'t automatically passed through, '); // NOTE: This string is no longer in used
+define('_UPDATEDPING_GOPINGPAGE',                                      'try again'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_PINGING',                                         'Pinging services, please wait...'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_VIEWITEM',                                                'View list of recent items for '); // NOTE: This string is no longer in used
+define('_UPDATEDPING_VISITOWNSITE',                                    'Visit your own site'); // NOTE: This string is no longer in used
+
+// General category
+define('_EBLOGDEFAULTCATEGORY_NAME',                           'General');
+define('_EBLOGDEFAULTCATEGORY_DESC',                           'Items that do not fit in other categories');
+
+// First ITEM
+define('_EBLOG_FIRSTITEM_TITLE',                                       'First Item');
+define('_EBLOG_FIRSTITEM_BODY',                                                'This is the first item in your weblog. Feel free to delete it.');
+
+// New weblog was created
+define('_BLOGCREATED_TITLE',                                           'New weblog created');
+define('_BLOGCREATED_ADDEDTXT',                                                "Your new weblog (%s) has been created. To continue, choose the way you'll want to make it viewable:");
+define('_BLOGCREATED_SIMPLEWAY',                                       "Easiest: A copy of <code>%s.php</code>");
+define('_BLOGCREATED_ADVANCEDWAY',                                     "Advanced: Call the weblog from existing skins");
+define('_BLOGCREATED_SIMPLEDESC1',                                     "Method 1: Create an extra <code>%s.php</code> file");
+define('_BLOGCREATED_SIMPLEDESC2',                                     "Create a file called <code>%s.php</code>, and copy-paste the following code into it:");
+define('_BLOGCREATED_SIMPLEDESC3',                                     "Upload the file next to your existing <code>index.php</code> file, and you should be all set.");
+define('_BLOGCREATED_SIMPLEDESC4',                                     "To finish the weblog creation process, please fill out the final URL for your weblog (the proposed value is a <em>guess</em>, don't take it for granted):");
+define('_BLOGCREATED_ADVANCEDWAY2',                                    "Method 2: Call the weblog from existing skins");
+define('_BLOGCREATED_ADVANCEDWAY3',                                    "To finish the weblog creation process, simply please fill out the final URL for your weblog: (might be the same as another already existing weblog)");
+
+// Donate!
+define('_ADMINPAGEFOOT_OFFICIALURL',                           'http://nucleuscms.org/');
+define('_ADMINPAGEFOOT_DONATEURL',                                     'http://nucleuscms.org/donate.php');
+define('_ADMINPAGEFOOT_DONATE',                                                'Donate!');
+define('_ADMINPAGEFOOT_COPYRIGHT',                                     'The Nucleus Group');
+
+// Quick menu
+define('_QMENU_MANAGE_SYSTEM',                                         'System info');
+
+// REG file
+define('_WINREGFILE_TEXT',                                                     'Post To &Nucleus (%s)');
+
+// Bookmarklet
+define('_BOOKMARKLET_TITLE',                                           'Bookmarklet<!-- and Right Click Menu -->');
+define('_BOOKMARKLET_DESC1',                                           'Bookmarklets allow adding items to your weblog with just one single click. ');
+define('_BOOKMARKLET_DESC2',                                           'After installing these bookmarklets, you\'ll be able to click the \'add to weblog\' button on your browser toolbar, ');
+define('_BOOKMARKLET_DESC3',                                           'and a Nucleus add-item window will popup, ');
+define('_BOOKMARKLET_DESC4',                                           'containing the link and title of the page you were visiting, ');
+define('_BOOKMARKLET_DESC5',                                           'plus any text you might have selected.');
+define('_BOOKMARKLET_BOOKARKLET',                                      'bookmarklet');
+define('_BOOKMARKLET_ANCHOR',                                          'Add to %s');
+define('_BOOKMARKLET_BMARKTEXT',                                       'You can drag the following link to your favorites, or your browsers toolbar: ');
+define('_BOOKMARKLET_BMARKTEST',                                       '(if you want to test the bookmarklet first, click the link)');
+define('_BOOKMARKLET_RIGHTCLICK',                                      'Right Click Menu Access (IE &amp; Windows)');
+define('_BOOKMARKLET_RIGHTLABEL',                                      'right click menu item');
+define('_BOOKMARKLET_RIGHTTEXT1',                                      'Or you can install the ');
+define('_BOOKMARKLET_RIGHTTEXT2',                                      ' (choose \'open file\' and add to registry)');
+define('_BOOKMARKLET_RIGHTTEXT3',                                      'You\'ll have to restart Internet Explorer before the option shows up in the context menus.');
+define('_BOOKMARKLET_UNINSTALLTT',                                     'Uninstalling');
+define('_BOOKMARKLET_DELETEBAR',                                       'For the bookmarklet, you can just delete it.');
+define('_BOOKMARKLET_DELETERIGHTT',                                    'For the right click menu item, follow the procedure listed below:');
+define('_BOOKMARKLET_DELETERIGHT1',                                    'Select "Run..." from the Start Menu');
+define('_BOOKMARKLET_DELETERIGHT2',                                    'Type: "regedit"');
+define('_BOOKMARKLET_DELETERIGHT3',                                    'Click the "OK" button');
+define('_BOOKMARKLET_DELETERIGHT4',                                    'Search for "\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt" in the tree');
+define('_BOOKMARKLET_DELETERIGHT5',                                    'Delete the "add to \'Your weblog\'" item');
+
+define('_BOOKMARKLET_ERROR_SOMETHINGWRONG',                    'Something went wrong');
+define('_BOOKMARKLET_ERROR_COULDNTNEWCAT',                     'Could not create new category');
+
+// BAN
+define('_BAN_EXAMPLE_TITLE',                                           'An example');
+define('_BAN_EXAMPLE_TEXT',                                                    ': "134.58.253.193" will only block one computer, while "134.58.253" will block 256 IP addresses, including the one from the first example.');
+define('_BAN_IP_CUSTOM',                                                       'Custom: ');
+define('_BAN_BANBLOGNAME',                                                     'Only blog %s');
+
+// Plugin Options
+define('_PLUGIN_OPTIONS_TITLE',                                                        'Options for %s');
+
+// Plugin file loda error
+define('_PLUGINFILE_COULDNT_BELOADED',                         'Error: plugin file <strong>%s.php</strong> could not be loaded, or it has been set inactive because it does not support some features (check the <a href="?action=actionlog">actionlog</a> for more info)');
+
+//ITEM add/edit template (for japanese only)
+define('_ITEM_ADDEDITTEMPLATE_FORMAT',                         'Format :');
+define('_ITEM_ADDEDITTEMPLATE_YEAR',                           'Year');
+define('_ITEM_ADDEDITTEMPLATE_MONTH',                          'Month');
+define('_ITEM_ADDEDITTEMPLATE_DAY',                                    'Day');
+define('_ITEM_ADDEDITTEMPLATE_HOUR',                           'Hour');
+define('_ITEM_ADDEDITTEMPLATE_MINUTE',                         'Minute');
+
+// Errors
+define('_ERRORS_INSTALLSQL',                                           'install.sql should be deleted');
+define('_ERRORS_INSTALLDIR',                                           'install directory should be deleted');  // <add by shizuki />
+define('_ERRORS_INSTALLPHP',                                           'install.php should be deleted');
+define('_ERRORS_UPGRADESDIR',                                          'nucleus/upgrades directory should be deleted');
+define('_ERRORS_CONVERTDIR',                                           'nucleus/convert directory should be deleted');
+define('_ERRORS_CONFIGPHP',                                                    'config.php should be non-writable (chmod to 444)');
+define('_ERRORS_STARTUPERROR1',                                                '<p>One or more of the Nucleus installation files are still present on the webserver, or are writable.</p><p>You should remove these files or change their permissions to ensure security. Here are the files that were found by Nucleus</p> <ul><li>');
+define('_ERRORS_STARTUPERROR2',                                                '</li></ul><p>If you don\'t want to see this error message again, without solving the problem, set <code>$CONF[\'alertOnSecurityRisk\']</code> in <code>globalfunctions.php</code> to <code>0</code>, or do this at the end of <code>config.php</code>.</p>');
+define('_ERRORS_STARTUPERROR3',                                                'Security Risk');
+
+// PluginAdmin tickets by javascript
+define('_PLUGINADMIN_TICKETS_JAVASCRIPT',                      '<p><b>Error occured during automatic addition of tickets.</b></p>');
+
+// Global settings disablesite URL
+define('_SETTINGS_DISABLESITEURL',                                     'Redirect URL:');
+
+// Skin import/export
+define('_SKINIE_SEELEMENT_UNEXPECTEDTAG',                      'UNEXPECTED TAG');
+define('_SKINIE_ERROR_FAILEDOPEN_FILEURL',                     'Failed to open file/URL');
+define('_SKINIE_NAME_CLASHES_DETECTED',                                'Name clashes detected, re-run with allowOverwrite = 1 to force overwrite');
+
+// ACTIONS.php parse_commentform
+define('_ACTIONURL_NOTLONGER_PARAMATER',                       'actionurl is not longer a parameter on commentform skinvars. Moved to be a global setting instead.');
+
+// ADMIN.php addToTemplate 'Query error: '
+define('_ADMIN_SQLDIE_QUERYERROR',                                     'Query error: ');
+
+// backyp.php Backup WARNING
+define('_BACKUP_BACKUPFILE_TITLE',                                     'This is a backup file generated by Nucleus');
+define('_BACKUP_BACKUPFILE_BACKUPDATE',                                'backup-date:');
+define('_BACKUP_BACKUPFILE_NUCLEUSVERSION',                    'Nucleus CMS version:');
+define('_BACKUP_BACKUPFILE_DATABASE_NAME',                     'Nucleus CMS Database name:');
+define('_BACKUP_BACKUPFILE_TABLE_NAME',                                'TABLE:');
+define('_BACKUP_BACKUPFILE_TABLEDATAFOR',                      'Table Data for %s');
+define('_BACKUP_WARNING_NUCLEUSVERSION',                       'WARNING: Only try to restore on servers running the exact same version of Nucleus');
+define('_BACKUP_RESTOR_NOFILEUPLOADED',                                'No file uploaded');
+define('_BACKUP_RESTOR_UPLOAD_ERROR',                          'File Upload Error');
+define('_BACKUP_RESTOR_UPLOAD_NOCORRECTTYPE',          'The uploaded file is not of the correct type');
+define('_BACKUP_RESTOR_UPLOAD_NOZLIB',                         'Cannot decompress gzipped backup (zlib package not installed)');
+define('_BACKUP_RESTOR_SQL_ERROR',                                     'SQL Error: ');
+
+// BLOG.php addTeamMember
+define('_TEAM_ADD_NEWTEAMMEMBER',                                      'Added %s (ID=%d) to the team of blog "%s"');
+
+// ADMIN.php systemoverview()
+define('_ADMIN_SYSTEMOVERVIEW_HEADING',                                'System Overview');
+define('_ADMIN_SYSTEMOVERVIEW_PHPANDMYSQL',                    'PHP and MySQL');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONS',                       'Versions');
+define('_ADMIN_SYSTEMOVERVIEW_PHPVERSION',                     'PHP version');
+define('_ADMIN_SYSTEMOVERVIEW_MYSQLVERSION',           'MySQL version');
+define('_ADMIN_SYSTEMOVERVIEW_SETTINGS',                       'Settings');
+define('_ADMIN_SYSTEMOVERVIEW_GDLIBRALY',                      'GD Libraly');
+define('_ADMIN_SYSTEMOVERVIEW_MODULES',                                'Modules');
+define('_ADMIN_SYSTEMOVERVIEW_ENABLE',                         'enabled');
+define('_ADMIN_SYSTEMOVERVIEW_DISABLE',                                'disabled');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSSYSTEM',          'Your Nucleus CMS System');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSVERSION',         'Nucleus CMS version');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSPATCHLEVEL',      'Nucleus CMS patch level');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSSETTINGS',                'Important settings');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK',           'Check for a new version');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TXT',       'Check on nucleuscms.org if a new version is available: ');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL',       'http://nucleuscms.org/version.php?v=%d&amp;pl=%d');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE',     'Check for upgrade');
+define('_ADMIN_SYSTEMOVERVIEW_NOT_ADMIN',                      "You haven't enough rights to see the system informations.");
+
+// ENCAPSULATE.php
+define('_ENCAPSULATE_ENCAPSULATE_NOENTRY',                     'No entries');
+
+// globalfunctions.php
+define('_GFUNCTIONS_LOGINPCSHARED_YES',                                'on shared PC');
+define('_GFUNCTIONS_LOGINPCSHARED_NO',                         'on not shared PC');
+define('_GFUNCTIONS_LOGINSUCCESSFUL_TXT',                      'Login successful for %s (%s)');
+define('_GFUNCTIONS_LOGINFAILED_TXT',                          'Login failed for %s');
+define('_GFUNCTIONS_LOGOUT_TXT',                                       '%s is logouted');
+define('_GFUNCTIONS_HEADERSALREADYSENT_FILE',          ' in <code>%s</code> line <code>%s</code>');
+define('_GFUNCTIONS_HEADERSALREADYSENT_TITLE',         ' Page headers already sent');
+define('_GFUNCTIONS_HEADERSALREADYSENT_TXT',           '<p>The page headers have already been sent out%s. This could cause Nucleus not to work in the expected way.</p><p>Usually, this is caused by spaces or newlines at the end of the <code>config.php</code> file, at the end of the language file or at the end of a plugin file. Please check this and try again.</p><p>If you don\'t want to see this error message again, without solving the problem, set <code>$CONF[\'alertOnHeadersSent\']</code> in <code>globalfunctions.php</code> to <code>0</code></p>');
+define('_GFUNCTIONS_PARSEFILE_FILEMISSING',                    'A file is missing');
+define('_GFUNCTIONS_AN_ERROR_OCCURRED',                                'Sorry. An error occurred.');
+define('_GFUNCTIONS_YOU_AERNT_LOGGEDIN',                       "You aren't logged in.");
+
+// MANAGER.php
+define('_MANAGER_PLUGINFILE_NOCLASS',                          "Plugin %s was not loaded (Class not found in file, possible parse error)");
+define('_MANAGER_PLUGINTABLEPREFIX_NOTSUPPORT',                "Plugin %s was not loaded (does not support SqlTablePrefix)");
+
+// mysql.php
+define('_NO_SUITABLE_MYSQL_LIBRARY',                           "<p>No suitable mySQL library was found to run Nucleus</p>");
+
+// PLUGIN.php
+define('_ERROR_PLUGIN_NOSUCHACTION',                           'No Such Action');
+
+// PLUGINADMIN.php
+define('_ERROR_INVALID_PLUGIN',                                                'Invalid plugin');
+
+// showlist.php
+define('_LIST_PLUGS_DEPREQ',                                           'Plugin(s) requires:');
+define('_LIST_SKIN_PREVIEW',                                           "Preview for '%s' skin");
+define('_LIST_SKIN_PREVIEW_VIEWLARGER',                                "View larger");
+define('_LIST_SKIN_README',                                                    "More info on the '%s' skin");
+define('_LIST_SKIN_README_TXT',                                                'Read me');
+
+// BLOG.php createNewCategory()
+define('_CREATED_NEW_CATEGORY_NAME',                           'newcat');
+define('_CREATED_NEW_CATEGORY_DESC',                           'New category');
+
+// ADMIN.php blog settings
+define('_EBLOG_CURRENT_TEAM_MEMBER',                           'Members currently on your team:');
+
+// HTML outputs
+define('_HTML_XML_NAME_SPACE_AND_LANG_CODE',           'xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us"');
+
+// Language Files
+define('_LANGUAGEFILES_JAPANESE-UTF8',                         'Japanese - &#26085;&#26412;&#35486; (UTF-8)');
+define('_LANGUAGEFILES_JAPANESE-EUC',                          'Japanese - &#26085;&#26412;&#35486; (EUC)');
+define('_LANGUAGEFILES_JAPANESE-SJIS',                         'Japanese - &#26085;&#26412;&#35486; (Shift-JIS)');
+define('_LANGUAGEFILES_ENGLISH-UTF8',                          'English - English (UTF-8)');
+define('_LANGUAGEFILES_ENGLISH',                                       'English - English (iso-8859-1)');
+/*
+define('_LANGUAGEFILES_BULGARIAN',                                     'Bulgarian - &#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080; (iso-8859-5)');
+define('_LANGUAGEFILES_CATALAN',                                       'Catalan - Catal&agrave; (iso-8859-1)');
+define('_LANGUAGEFILES_CHINESE-GBK',                           'Simplified Chinese - &#31777;&#20307;&#23383;&#20013;&#25991; (gbk)');
+define('_LANGUAGEFILES_SIMCHINESE',                                    'Simplified Chinese - &#31777;&#20307;&#23383;&#20013;&#25991; (gb2312)');
+define('_LANGUAGEFILES_CHINESE-UTF8',                          'Simplified Chinese - &#31777;&#20307;&#23383;&#20013;&#25991; (utf-8)');
+define('_LANGUAGEFILES_CHINESEB5',                                     'Tranditional Chinese - &#32321;&#20307;&#23383;&#20013;&#25991; (big5)');
+define('_LANGUAGEFILES_CHINESEB5-UTF8',                                'Tranditional Chinese - &#32321;&#20307;&#23383;&#20013;&#25991; (utf-8)');
+define('_LANGUAGEFILES_TRADITIONAL_CHINESE',           'Tranditional Chinese - &#32321;&#20307;&#23383;&#20013;&#25991; (big5)');
+define('_LANGUAGEFILES_TRADITIONAL_CHINESE-UTF-8',     'Tranditional Chinese - &#32321;&#20307;&#23383;&#20013;&#25991; (utf-8)');
+define('_LANGUAGEFILES_CZECH',                                         'Czech - &#268;esky (windows-1250)');
+define('_LANGUAGEFILES_FINNISH',                                       'Finnish - Suomi (iso-8859-1)');
+define('_LANGUAGEFILES_FRENCH',                                                'French - Fran&ccedil;ais (iso-8859-1)');
+define('_LANGUAGEFILES_GALEGO',                                                'Galego - Galego (iso-8859-1)');
+define('_LANGUAGEFILES_GERMAN',                                                'German - Deutsch (iso-8859-1)');
+define('_LANGUAGEFILES_HUNGARIAN',                                     'Hungarian - Magyar (iso-8859-2)');
+define('_LANGUAGEFILES_ITALIANO',                                      'Italiano - Italiano (iso-8859-1)');
+define('_LANGUAGEFILES_KOREAN-EUC-KR',                         'Korean - &#54620;&#44397;&#50612; (euc-kr)');
+define('_LANGUAGEFILES_KOREAN-UTF',                                    'Korean - &#54620;&#44397;&#50612; (utf-8)');
+define('_LANGUAGEFILES_LATVIAN',                                       'Latvian - Latvie&scaron;u (windows-1257)');
+define('_LANGUAGEFILES_NEDERLANDS',                                    'Duch - Nederlands (iso-8859-15)');
+define('_LANGUAGEFILES_PERSIAN',                                       'Persian - &#1601;&#1575;&#1585;&#1587;&#1740; (utf-8)');
+define('_LANGUAGEFILES_PORTUGUESE_BRAZIL',                     'Portuguese Brazil - Portugu&ecirc;s (iso-8859-1)');
+define('_LANGUAGEFILES_RUSSIAN',                                       'Russian - &#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081; (windows-1251)');
+define('_LANGUAGEFILES_SLOVAK',                                                'Slovak - Sloven&#269;ina (ISO-8859-2)');
+define('_LANGUAGEFILES_SPANISH-UTF8',                          'Spanish - Espa&ntilde;ol (utf-8)');
+define('_LANGUAGEFILES_SPANISH',                                       'Spanish - Espa&ntilde;ol (iso-8859-1)');
+*/
+
+// </add by shizuki>
+
+/********************************************
+ *        End New for 3.40                  *
+ ********************************************/
+
+// START changed/added after 3.3 START
+define('_AUTOSAVEDRAFT',                                                       'Auto save draft');
+define('_AUTOSAVEDRAFT_LASTSAVED',                                     'Last saved: ');
+define('_AUTOSAVEDRAFT_NOTYETSAVED',                           'No saves have been made yet');
+define('_AUTOSAVEDRAFT_NOW',                                           'Auto save now');
+define('_SKIN_PARTS_SPECIAL',                                          'Special skin parts');
+define('_ERROR_SKIN_PARTS_SPECIAL_FORMAT',                     'You must enter a name that exists only out of lowercase letters and digits');
+define('_ERROR_SKIN_PARTS_SPECIAL_DELETE',                     'Can\'t delete this skin part');
+define('_CONFIRMTXT_SKIN_PARTS_SPECIAL',                       'Do you really want to delete this special skin part?');
+define('_ERROR_PLUGIN_LOAD',                                           'Plugin could not be loaded, or does not support certain features that are required for it to run on your Nucleus installation (you might want to check the <a href="?action=actionlog">actionlog</a> for more info)');
+// END changed/added after 3.3 END
+
+// START changed/added after 3.22 START
+define('_SEARCHFORM_QUERY',                                                    'Keywords to search');
+define('_ERROR_EMAIL_REQUIRED',                                                'Email address is required');
+define('_COMMENTFORM_MAIL',                                                    'Website:');
+define('_COMMENTFORM_EMAIL',                                           'E-mail:');
+define('_EBLOG_REQUIREDEMAIL',                                         'Require E-mail address with comments?');
+define('_ERROR_COMMENTS_SPAM',                                         'Your comment was rejected because it did not pass the spam test');
+// END changed/added after 3.22 END
+
+// START changed/added after 3.15 START
+
+define('_LIST_PLUG_SUBS_NEEDUPDATE',                           'Please use the \'Update Subscription list\'-button to update the plugin\'s subscription list.');
+define('_LIST_PLUGS_DEP',                                                      'Plugin(s) requires:');
+
+// END changed/added after 3.15
+
+// START changed/added after 3.1 START
+
+// comments list per weblog
+define('_COMMENTS_BLOG',                                                       'All Comments for blog');
+define('_NOCOMMENTS_BLOG',                                                     'No comments were made on items of this blog');
+define('_BLOGLIST_COMMENTS',                                           'Comments');
+define('_BLOGLIST_TT_COMMENTS',                                                'A list of all comments made on items of this blog');
+
+
+// for use in archivetype-skinvar
+define('_ARCHIVETYPE_DAY',                                                     'day');
+define('_ARCHIVETYPE_MONTH',                                           'month');
+
+// tickets (prevents malicious users to trick an admin to perform actions he doesn't want)
+define('_ERROR_BADTICKET',                                                     'Invalid or expired ticket.');
+
+// cookie prefix
+define('_SETTINGS_COOKIEPREFIX',                                       'Cookie Prefix');
+
+// account activation
+define('_ERROR_NOLOGON_NOACTIVATE',                                    'Cannot send activation link. You\'re not allowed to log in.');
+define('_ERROR_ACTIVATE',                                                      'Activation key does not exist, is invalid, or has expired.');
+define('_ACTIONLOG_ACTIVATIONLINK',                            'Activation link sent');
+define('_MSG_ACTIVATION_SENT',                                         'An activation link has been sent by e-mail.');
+
+// activation link emails
+define('_ACTIVATE_REGISTER_MAIL',                                      "Hi <%memberName%>,\n\nYou need to activate your account at <%siteName%> (<%siteUrl%>).\nYou can do this by visiting the link below: \n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");
+define('_ACTIVATE_REGISTER_MAILTITLE',                         "Activate your '<%memberName%>' account");
+define('_ACTIVATE_REGISTER_TITLE',                                     'Welcome <%memberName%>');
+define('_ACTIVATE_REGISTER_TEXT',                                      'You\'re almost there. Please choose a password for your account below.');
+define('_ACTIVATE_FORGOT_MAIL',                                                "Hi <%memberName%>,\n\nUsing the link below, you can choose a new password for your account at <%siteName%> (<%siteUrl%>) by choosing a new password.\n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");
+define('_ACTIVATE_FORGOT_MAILTITLE',                           "Re-activate your '<%memberName%>' account");
+define('_ACTIVATE_FORGOT_TITLE',                                       'Welcome <%memberName%>');
+define('_ACTIVATE_FORGOT_TEXT',                                                'You can choose a new password for your account below:');
+define('_ACTIVATE_CHANGE_MAIL',                                                "Hi <%memberName%>,\n\nSince your e-mail address has changed, you'll need to re-activate your account at <%siteName%> (<%siteUrl%>).\nYou can do this by visiting the link below: \n\n\t<%activationUrl%>\n\nYou have 2 days to do this. After this, the activation link becomes invalid.");
+define('_ACTIVATE_CHANGE_MAILTITLE',                           "Re-activate your '<%memberName%>' account");
+define('_ACTIVATE_CHANGE_TITLE',                                       'Welcome <%memberName%>');
+define('_ACTIVATE_CHANGE_TEXT',                                                'Your address change has been verified. Thanks!');
+define('_ACTIVATE_SUCCESS_TITLE',                                      'Activation Succeeded');
+define('_ACTIVATE_SUCCESS_TEXT',                                       'Your account has been successfully activated.');
+define('_MEMBERS_SETPWD',                                                      'Set Password');
+define('_MEMBERS_SETPWD_BTN',                                          'Set Password');
+define('_QMENU_ACTIVATE',                                                      'Account Activation');
+define('_QMENU_ACTIVATE_TEXT',                                         '<p>After you have activated your account, you can start using it by <a href="index.php?action=showlogin">logging in</a>.</p>');
+
+define('_PLUGS_BTN_UPDATE',                                                    'Update subscription list');
+
+// global settings
+define('_SETTINGS_JSTOOLBAR',                                          'Javascript Toolbar Style');
+define('_SETTINGS_JSTOOLBAR_FULL',                                     'Full Toolbar (IE)');
+define('_SETTINGS_JSTOOLBAR_SIMPLE',                           'Simple Toolbar (Non-IE)');
+define('_SETTINGS_JSTOOLBAR_NONE',                                     'Disable Toolbar');
+define('_SETTINGS_URLMODE_HELP',                                       '(Info: <a href="documentation/tips.html#searchengines-fancyurls">How to activate fancy URLs</a>)');
+
+// extra plugin settings part when editing categories/members/blogs/...
+define('_PLUGINS_EXTRA',                                                       'Extra Plugin Settings');
+
+// itemlist info column keys
+define('_LIST_ITEM_BLOG',                                                      'blog:');
+define('_LIST_ITEM_CAT',                                                       'cat:');
+define('_LIST_ITEM_AUTHOR',                                                    'author:');
+define('_LIST_ITEM_DATE',                                                      'date:');
+define('_LIST_ITEM_TIME',                                                      'time:');
+
+// indication of registered members in comments list
+define('_LIST_COMMENTS_MEMBER',                                        '(member)');
+
+// batch operations
+define('_BATCH_WITH_SEL',                                                      'With selected:');
+define('_BATCH_EXEC',                                                          'Execute');
+
+// quickmenu
+define('_QMENU_HOME',                                                          'Home');
+define('_QMENU_ADD',                                                           'Add Item');
+define('_QMENU_ADD_SELECT',                                                    '-- select --');
+define('_QMENU_USER_SETTINGS',                                         'Profile');
+define('_QMENU_USER_ITEMS',                                                    'Items');
+define('_QMENU_USER_COMMENTS',                                         'Comments');
+define('_QMENU_MANAGE',                                                                'Management');
+define('_QMENU_MANAGE_LOG',                                                    'Action Log');
+define('_QMENU_MANAGE_SETTINGS',                                       'Configuration');
+define('_QMENU_MANAGE_MEMBERS',                                                'Members');
+define('_QMENU_MANAGE_NEWBLOG',                                                'New Weblog');
+define('_QMENU_MANAGE_BACKUPS',                                                'Backups');
+define('_QMENU_MANAGE_PLUGINS',                                                'Plugins');
+define('_QMENU_LAYOUT',                                                                'Layout');
+define('_QMENU_LAYOUT_SKINS',                                          'Skins');
+define('_QMENU_LAYOUT_TEMPL',                                          'Templates');
+define('_QMENU_LAYOUT_IEXPORT',                                                'Import/Export');
+define('_QMENU_PLUGINS',                                                       'Plugins');
+
+// quickmenu on logon screen
+define('_QMENU_INTRO',                                                         'Introduction');
+define('_QMENU_INTRO_TEXT',                                                    '<p>This is the logon screen for Nucleus CMS, the content management system that\'s being used to maintain this website.</p><p>If you have an account, you can log on and start posting new items.</p>');
+
+// helppages for plugins
+define('_ERROR_PLUGNOHELPFILE',                                                'The helpfile for this plugin can not be found');
+define('_PLUGS_HELP_TITLE',                                                    'Helppage for plugin');
+define('_LIST_PLUGS_HELP',                                                     'help');
+
+
+// END changed/started after 3.1
+
+// START changed/added after v2.5beta START
+
+// general settings (security)
+define('_SETTINGS_EXTAUTH',                                                    'Enable External Authentication');
+define('_WARNING_EXTAUTH',                                                     'Warning: Enable only if needed.');
+
+// member profile
+define('_MEMBERS_BYPASS',                                                      'Use External Authentication');
+
+// 'always include in search' blog setting (yes/no) [in v2.5beta, the 'always' part wasn't clear]
+define('_EBLOG_SEARCH',                                                                '<em>Always</em> include in search');
+
+// END changed/added after v2.5beta
+
+// START introduced after v2.0 START
+
+// media library
+define('_MEDIA_VIEW',                                                          'view');
+define('_MEDIA_VIEW_TT',                                                       'View file (opens in new window)');
+define('_MEDIA_FILTER_APPLY',                                          'Apply Filter');
+define('_MEDIA_FILTER_LABEL',                                          'Filter: ');
+define('_MEDIA_UPLOAD_TO',                                                     'Upload to...');
+define('_MEDIA_UPLOAD_NEW',                                                    'Upload new file...');
+define('_MEDIA_COLLECTION_SELECT',                                     'Select');
+define('_MEDIA_COLLECTION_TT',                                         'Switch to this category');
+define('_MEDIA_COLLECTION_LABEL',                                      'Current collection: ');
+
+// tooltips on toolbar
+define('_ADD_ALIGNLEFT_TT',                                                    'Align Left');
+define('_ADD_ALIGNRIGHT_TT',                                           'Align Right');
+define('_ADD_ALIGNCENTER_TT',                                          'Align Center');
+
+
+// generic upload failure
+define('_ERROR_UPLOADFAILED',                                          'Upload failed');
+
+// END introduced after v2.0 END
+
+// START introduced after v1.5 START
+
+// posting to the past/edit timestamps
+define('_EBLOG_ALLOWPASTPOSTING',                                      'Allow posting to the past');
+define('_ADD_CHANGEDATE',                                                      'Update timestamp');
+define('_BMLET_CHANGEDATE',                                                    'Update timestamp');
+
+// skin import/export
+define('_OVERVIEW_SKINIMPORT',                                         'Skin import/export...');
+
+// skin settings
+define('_PARSER_INCMODE_NORMAL',                                       'Normal');
+define('_PARSER_INCMODE_SKINDIR',                                      'Use skin dir');
+define('_SKIN_INCLUDE_MODE',                                           'Include mode');
+define('_SKIN_INCLUDE_PREFIX',                                         'Include prefix');
+
+// global settings
+define('_SETTINGS_BASESKIN',                                           'Base Skin');
+define('_SETTINGS_SKINSURL',                                           'Skins URL');
+define('_SETTINGS_ACTIONSURL',                                         'Full URL to action.php');
+
+// category moves (batch)
+define('_ERROR_MOVEDEFCATEGORY',                                       'Cannot move default category');
+define('_ERROR_MOVETOSELF',                                                    'Cannot move category (destination blog is the same as source blog)');
+define('_MOVECAT_TITLE',                                                       'Select blog to move category to');
+define('_MOVECAT_BTN',                                                         'Move category');
+
+// URLMode setting
+define('_SETTINGS_URLMODE',                                                    'URL Mode');
+define('_SETTINGS_URLMODE_NORMAL',                                     'Normal');
+define('_SETTINGS_URLMODE_PATHINFO',                           'Fancy');
+
+// Batch operations
+define('_BATCH_NOSELECTION',                                           'Nothing selected to perform actions on');
+define('_BATCH_ITEMS',                                                         'Batch operation on items');
+define('_BATCH_CATEGORIES',                                                    'Batch operation on categories');
+define('_BATCH_MEMBERS',                                                       'Batch operation on members');
+define('_BATCH_TEAM',                                                          'Batch operation on team members');
+define('_BATCH_COMMENTS',                                                      'Batch operation on comments');
+define('_BATCH_UNKNOWN',                                                       'Unknown batch operation: ');
+define('_BATCH_EXECUTING',                                                     'Executing');
+define('_BATCH_ONCATEGORY',                                                    'on category');
+define('_BATCH_ONITEM',                                                                'on item');
+define('_BATCH_ONCOMMENT',                                                     'on comment');
+define('_BATCH_ONMEMBER',                                                      'on member');
+define('_BATCH_ONTEAM',                                                                'on team member');
+define('_BATCH_SUCCESS',                                                       'Success!');
+define('_BATCH_DONE',                                                          'Done!');
+define('_BATCH_DELETE_CONFIRM',                                                'Confirm Batch Deletion');
+define('_BATCH_DELETE_CONFIRM_BTN',                                    'Confirm Batch Deletion');
+define('_BATCH_SELECTALL',                                                     'select all');
+define('_BATCH_DESELECTALL',                                           'deselect all');
+
+// batch operations: options in dropdowns
+define('_BATCH_ITEM_DELETE',                                           'Delete');
+define('_BATCH_ITEM_MOVE',                                                     'Move');
+define('_BATCH_MEMBER_DELETE',                                         'Delete');
+define('_BATCH_MEMBER_SET_ADM',                                                'Give admin rights');
+define('_BATCH_MEMBER_UNSET_ADM',                                      'Take away admin rights');
+define('_BATCH_TEAM_DELETE',                                           'Delete from team');
+define('_BATCH_TEAM_SET_ADM',                                          'Give admin rights');
+define('_BATCH_TEAM_UNSET_ADM',                                                'Take away admin rights');
+define('_BATCH_CAT_DELETE',                                                    'Delete');
+define('_BATCH_CAT_MOVE',                                                      'Move to other blog');
+define('_BATCH_COMMENT_DELETE',                                                'Delete');
+
+// itemlist: Add new item...
+define('_ITEMLIST_ADDNEW',                                                     'Add new item...');
+define('_ADD_PLUGIN_EXTRAS',                                           'Extra Plugin Options');
+
+// errors
+define('_ERROR_CATCREATEFAIL',                                         'Could not create new category');
+define('_ERROR_NUCLEUSVERSIONREQ',                                     'This plugin requires a newer Nucleus version: ');
+
+// backlinks
+define('_BACK_TO_BLOGSETTINGS',                                                'Back to blogsettings');
+
+// skin import export
+define('_SKINIE_TITLE_IMPORT',                                         'Import');
+define('_SKINIE_TITLE_EXPORT',                                         'Export');
+define('_SKINIE_BTN_IMPORT',                                           'Import');
+define('_SKINIE_BTN_EXPORT',                                           'Export selected skins/templates');
+define('_SKINIE_LOCAL',                                                                'Import from local file:');
+define('_SKINIE_NOCANDIDATES',                                         'No candidates for import found in the skins directory');
+define('_SKINIE_FROMURL',                                                      'Import from URL:');
+define('_SKINIE_EXPORT_INTRO',                                         'Select the skins and templates you want to export below');
+define('_SKINIE_EXPORT_SKINS',                                         'Skins');
+define('_SKINIE_EXPORT_TEMPLATES',                                     'Templates');
+define('_SKINIE_EXPORT_EXTRA',                                         'Extra Info');
+define('_SKINIE_CONFIRM_OVERWRITE',                                    'Overwrite skins that already exists (see nameclashes)');
+define('_SKINIE_CONFIRM_IMPORT',                                       'Yes, I want to import this');
+define('_SKINIE_CONFIRM_TITLE',                                                'About to import skins and templates');
+define('_SKINIE_INFO_SKINS',                                           'Skins in file:');
+define('_SKINIE_INFO_TEMPLATES',                                       'Templates in file:');
+define('_SKINIE_INFO_GENERAL',                                         'Info:');
+define('_SKINIE_INFO_SKINCLASH',                                       'Skin name clashes:');
+define('_SKINIE_INFO_TEMPLCLASH',                                      'Template name clashes:');
+define('_SKINIE_INFO_IMPORTEDSKINS',                           'Imported skins:');
+define('_SKINIE_INFO_IMPORTEDTEMPLS',                          'Imported templates:');
+define('_SKINIE_DONE',                                                         'Done Importing');
+
+define('_AND',                                                                         'and');
+define('_OR',                                                                          'or');
+
+// empty fields on template edit
+define('_EDITTEMPLATE_EMPTY',                                          'empty field (click to edit)');
+
+// skin overview list
+define('_LIST_SKINS_INCMODE',                                          'IncludeMode:');
+define('_LIST_SKINS_INCPREFIX',                                                'IncludePrefix:');
+define('_LIST_SKINS_DEFINED',                                          'Defined parts:');
+
+// backup
+define('_BACKUPS_TITLE',                                                       'Backup / Restore');
+define('_BACKUP_TITLE',                                                                'Backup');
+define('_BACKUP_INTRO',                                                                'Click the button below to create a backup of your Nucleus database. You\'ll be prompted to save a backup file. Store it in a safe place.');
+define('_BACKUP_ZIP_YES',                                                      'Try to use compression');
+define('_BACKUP_ZIP_NO',                                                       'Do not use compression');
+define('_BACKUP_BTN',                                                          'Create Backup');
+define('_BACKUP_NOTE',                                                         '<b>Note:</b> Only the database contents is stored in the backup. Media files and settings in config.php are thus <b>NOT</b> included in the backup.');
+define('_RESTORE_TITLE',                                                       'Restore');
+define('_RESTORE_NOTE',                                                                '<b>WARNING:</b> Restoring from a backup will <b>ERASE</b> all current Nucleus data in the database! Only do this when you\'re really sure!     <br />  <b>Note:</b> Make sure that the version of Nucleus in which you created the backup should be the same as the version you\'re running right now! It won\'t work otherwise');
+define('_RESTORE_INTRO',                                                       'Select the backup file below (it\'ll be uploaded to the server) and click the "Restore" button to start.');
+define('_RESTORE_IMSURE',                                                      'Yes, I\'m sure I want to do this!');
+define('_RESTORE_BTN',                                                         'Restore From File');
+define('_RESTORE_WARNING',                                                     '(make sure you\'re restoring the correct backup, maybe make a new backup before you start)');
+define('_ERROR_BACKUP_NOTSURE',                                                'You\'ll need to check the \'I\'m sure\' testbox');
+define('_RESTORE_COMPLETE',                                                    'Restore Complete');
+
+// new item notification
+define('_NOTIFY_NI_MSG',                                                       'A new item has been posted:');
+define('_NOTIFY_NI_TITLE',                                                     'New Item!');
+define('_NOTIFY_KV_MSG',                                                       'Karma vote on item:');
+define('_NOTIFY_KV_TITLE',                                                     'Nucleus karma:');
+define('_NOTIFY_NC_MSG',                                                       'Comment on item:');
+define('_NOTIFY_NC_TITLE',                                                     'Nucleus comment:');
+define('_NOTIFY_USERID',                                                       'User ID:');
+define('_NOTIFY_USER',                                                         'User:');
+define('_NOTIFY_COMMENT',                                                      'Comment:');
+define('_NOTIFY_VOTE',                                                         'Vote:');
+define('_NOTIFY_HOST',                                                         'Host:');
+define('_NOTIFY_IP',                                                           'IP:');
+define('_NOTIFY_MEMBER',                                                       'Member:');
+define('_NOTIFY_TITLE',                                                                'Title:');
+define('_NOTIFY_CONTENTS',                                                     'Contents:');
+
+// member mail message
+define('_MMAIL_MSG',                                                           'A message sent to you by');
+define('_MMAIL_FROMANON',                                                      'an anonymous visitor');
+define('_MMAIL_FROMNUC',                                                       'Posted from a Nucleus weblog at');
+define('_MMAIL_TITLE',                                                         'A message from');
+define('_MMAIL_MAIL',                                                          'Message:');
+
+// END introduced after v1.5 END
+
+
+// START introduced after v1.1 START
+
+// bookmarklet buttons
+define('_BMLET_ADD',                                                           'Add Item');
+define('_BMLET_EDIT',                                                          'Edit Item');
+define('_BMLET_DELETE',                                                                'Delete Item');
+define('_BMLET_BODY',                                                          'Body');
+define('_BMLET_MORE',                                                          'Extended');
+define('_BMLET_OPTIONS',                                                       'Options');
+define('_BMLET_PREVIEW',                                                       'Preview');
+
+// used in bookmarklet
+define('_ITEM_UPDATED',                                                                'Item was updated');
+define('_ITEM_DELETED',                                                                'Item was deleted');
+
+// plugins
+define('_CONFIRMTXT_PLUGIN',                                           'Are you sure you want to delete the plugin named');
+define('_ERROR_NOSUCHPLUGIN',                                          'No such plugin');
+define('_ERROR_DUPPLUGIN',                                                     'Sorry, this plugin is already installed');
+define('_ERROR_PLUGFILEERROR',                                         'No such plugin exists, or the permissions are set incorrectly');
+define('_PLUGS_NOCANDIDATES',                                          'No plugin candidates found');
+
+define('_PLUGS_TITLE_MANAGE',                                          'Manage Plugins');
+define('_PLUGS_TITLE_INSTALLED',                                       'Currently Installed');
+define('_PLUGS_TITLE_UPDATE',                                          'Update subscription list');
+define('_PLUGS_TEXT_UPDATE',                                           'Nucleus keeps a cache of the event subscriptions of the plugins. When you upgrade a plugin by replacing it\'s file, you should run this update to make sure that the correct subscriptions are cached');
+define('_PLUGS_TITLE_NEW',                                                     'Install New Plugin');
+define('_PLUGS_ADD_TEXT',                                                      'Below is a list of all the files in your plugins directory, that might be non-installed plugins. Make sure you are <strong>really sure</strong> that it\'s a plugin before adding it.');
+define('_PLUGS_BTN_INSTALL',                                           'Install Plugin');
+define('_BACKTOOVERVIEW',                                                      'Back to overview');
+
+// editlink
+define('_TEMPLATE_EDITLINK',                                           'Edit Item Link');
+
+// add left / add right tooltips
+define('_ADD_LEFT_TT',                                                         'Add left box');
+define('_ADD_RIGHT_TT',                                                                'Add right box');
+
+// add/edit item: new category (in dropdown box)
+define('_ADD_NEWCAT',                                                          'New Category...');
+
+// new settings
+define('_SETTINGS_PLUGINURL',                                          'Plugin URL');
+define('_SETTINGS_MAXUPLOADSIZE',                                      'Max. upload file size (bytes)');
+define('_SETTINGS_NONMEMBERMSGS',                                      'Allow non-members to send messages');
+define('_SETTINGS_PROTECTMEMNAMES',                                    'Protect member names');
+
+// overview screen
+define('_OVERVIEW_PLUGINS',                                                    'Manage Plugins...');
+
+// actionlog
+define('_ACTIONLOG_NEWMEMBER',                                         'New member registration:');
+
+// membermail (when not logged in)
+define('_MEMBERMAIL_MAIL',                                                     'Your email address:');
+
+// file upload
+define('_ERROR_DISALLOWEDUPLOAD2',                                     'You do not have admin rights on any of the blogs that have the destination member on the teamlist. Therefor, you\'re not allowed to upload files to this member\'s media directory');
+
+// plugin list
+define('_LISTS_INFO',                                                          'Information');
+define('_LIST_PLUGS_AUTHOR',                                           'By:');
+define('_LIST_PLUGS_VER',                                                      'Version:');
+define('_LIST_PLUGS_SITE',                                                     'Visit site');
+define('_LIST_PLUGS_DESC',                                                     'Description:');
+define('_LIST_PLUGS_SUBS',                                                     'Subscribes to the following events:');
+define('_LIST_PLUGS_UP',                                                       'move up');
+define('_LIST_PLUGS_DOWN',                                                     'move down');
+define('_LIST_PLUGS_UNINSTALL',                                                'uninstall');
+define('_LIST_PLUGS_ADMIN',                                                    'admin');
+define('_LIST_PLUGS_OPTIONS',                                          'edit&nbsp;options');
+
+// plugin option list
+define('_LISTS_VALUE',                                                         'Value');
+
+// plugin options
+define('_ERROR_NOPLUGOPTIONS',                                         'this plugin does not have any options set');
+define('_PLUGS_BACK',                                                          'Back to Plugin Overview');
+define('_PLUGS_SAVE',                                                          'Save Options');
+define('_PLUGS_OPTIONS_UPDATED',                                       'Plugin options updated');
+
+define('_OVERVIEW_MANAGEMENT',                                         'Management');
+define('_OVERVIEW_MANAGE',                                                     'Nucleus management...');
+define('_MANAGE_GENERAL',                                                      'General Management');
+define('_MANAGE_SKINS',                                                                'Skin and Templates');
+define('_MANAGE_EXTRA',                                                                'Extra features');
+
+define('_BACKTOMANAGE',                                                                'Back to Nucleus management');
+
+
+// END introduced after v1.1 END
+
+
+
+
+// charset to use
+define('_CHARSET',                                                                     'iso-8859-1');
+
+// global stuff
+define('_LOGOUT',                                                                      'Log Out');
+define('_LOGIN',                                                                       'Log In');
+define('_YES',                                                                         'Yes');
+define('_NO',                                                                          'No');
+define('_SUBMIT',                                                                      'Submit');
+define('_ERROR',                                                                       'Error');
+define('_ERRORMSG',                                                                    'An error has occurred!');
+define('_BACK',                                                                                'Go Back');
+define('_NOTLOGGEDIN',                                                         'Not logged in');
+define('_LOGGEDINAS',                                                          'Logged in as');
+define('_ADMINHOME',                                                           'Admin Home');
+define('_NAME',                                                                                'Name');
+define('_BACKHOME',                                                                    'Back to Admin Home');
+define('_BADACTION',                                                           'Non existing action requested');
+define('_MESSAGE',                                                                     'Message');
+define('_HELP_TT',                                                                     'Help!');
+define('_YOURSITE',                                                                    'Your site');
+
+
+define('_POPUP_CLOSE',                                                         'Close Window');
+
+define('_LOGIN_PLEASE',                                                                'Please Log in First');
+
+// commentform
+define('_COMMENTFORM_YOUARE',                                          'You are');
+define('_COMMENTFORM_SUBMIT',                                          'Add Comment');
+define('_COMMENTFORM_COMMENT',                                         'Your comment:');
+define('_COMMENTFORM_NAME',                                                    'Name:');
+define('_COMMENTFORM_REMEMBER',                                                'Remember Me');
+
+// loginform
+define('_LOGINFORM_NAME',                                                      'Username:');
+define('_LOGINFORM_PWD',                                                       'Password:');
+define('_LOGINFORM_YOUARE',                                                    'Logged in as');
+define('_LOGINFORM_SHARED',                                                    'Shared Computer');
+
+// member mailform
+define('_MEMBERMAIL_SUBMIT',                                           'Send Message');
+
+// search form
+define('_SEARCHFORM_SUBMIT',                                           'Search');
+
+// add item form
+define('_ADD_ADDTO',                                                           'Add new item to');
+define('_ADD_CREATENEW',                                                       'Create new item');
+define('_ADD_BODY',                                                                    'Body');
+define('_ADD_TITLE',                                                           'Title');
+define('_ADD_MORE',                                                                    'Extended (optional)');
+define('_ADD_CATEGORY',                                                                'Category');
+define('_ADD_PREVIEW',                                                         'Preview');
+define('_ADD_DISABLE_COMMENTS',                                                'Disable comments?');
+define('_ADD_DRAFTNFUTURE',                                                    'Draft &amp; Future Items');
+define('_ADD_ADDITEM',                                                         'Add Item');
+define('_ADD_ADDNOW',                                                          'Add Now');
+define('_ADD_PLACE_ON',                                                                'Place on');
+define('_ADD_ADDDRAFT',                                                                'Add to drafts');
+define('_ADD_NOPASTDATES',                                                     '(dates and times in the past are NOT valid, the current time will be used in that case)');
+define('_ADD_BOLD_TT',                                                         'Bold');
+define('_ADD_ITALIC_TT',                                                       'Italic');
+define('_ADD_HREF_TT',                                                         'Make Link');
+define('_ADD_MEDIA_TT',                                                                'Add Media');
+define('_ADD_PREVIEW_TT',                                                      'Show/Hide Preview');
+define('_ADD_CUT_TT',                                                          'Cut');
+define('_ADD_COPY_TT',                                                         'Copy');
+define('_ADD_PASTE_TT',                                                                'Paste');
+
+
+// edit item form
+define('_EDIT_ITEM',                                                           'Edit Item');
+define('_EDIT_SUBMIT',                                                         'Edit Item');
+define('_EDIT_ORIG_AUTHOR',                                                    'Original author');
+define('_EDIT_BACKTODRAFTS',                                           'Add back to drafts');
+define('_EDIT_COMMENTSNOTE',                                           '(note: disabling comments will _not_ hide previously added comments)');
+
+// used on delete screens
+define('_DELETE_CONFIRM',                                                      'Please confirm deletion');
+define('_DELETE_CONFIRM_BTN',                                          'Confirm Deletion');
+define('_CONFIRMTXT_ITEM',                                                     'You\'re about to delete the item following item:');
+define('_CONFIRMTXT_COMMENT',                                          'You\'re about to delete the following comment:');
+define('_CONFIRMTXT_TEAM1',                                                    'You\'re about to delete ');
+define('_CONFIRMTXT_TEAM2',                                                    ' from the teamlist for blog ');
+define('_CONFIRMTXT_BLOG',                                                     'The blog you are going to delete is: ');
+define('_WARNINGTXT_BLOGDEL',                                          'Warning! Deleting a blog will delete ALL items of that blog, and all comments. Please confirm to make clear that you are CERTAIN of what you\'re doing!<br />Also, don\'t interrupt Nucleus while removing your blog.');
+define('_CONFIRMTXT_MEMBER',                                           'You\'re about to delete the following member profile: ');
+define('_CONFIRMTXT_TEMPLATE',                                         'You\'re about to delete the template named ');
+define('_CONFIRMTXT_SKIN',                                                     'You\'re about to delete the skin named ');
+define('_CONFIRMTXT_BAN',                                                      'You\'re about to delete the ban for the ip range');
+define('_CONFIRMTXT_CATEGORY',                                         'You\'re about to delete the category ');
+
+// some status messages
+define('_DELETED_ITEM',                                                                'Item Deleted');
+define('_DELETED_MEMBER',                                                      'Member Deleted');
+define('_DELETED_COMMENT',                                                     'Comment Deleted');
+define('_DELETED_BLOG',                                                                'Blog Deleted');
+define('_DELETED_CATEGORY',                                                    'Category Deleted');
+define('_ITEM_MOVED',                                                          'Item Moved');
+define('_ITEM_ADDED',                                                          'Item Added');
+define('_COMMENT_UPDATED',                                                     'Comment updated');
+define('_SKIN_UPDATED',                                                                'Skin data has been saved');
+define('_TEMPLATE_UPDATED',                                                    'Template data has been saved');
+
+// errors
+define('_ERROR_COMMENT_LONGWORD',                                      'Please don\'t use words of lengths higher than 90 in your comments');
+define('_ERROR_COMMENT_NOCOMMENT',                                     'Please enter a comment');
+define('_ERROR_COMMENT_NOUSERNAME',                                    'Bad username');
+define('_ERROR_COMMENT_TOOLONG',                                       'Your comments are too long (max. 5000 chars)');
+define('_ERROR_COMMENTS_DISABLED',                                     'Comments for this blog are currently disabled.');
+define('_ERROR_COMMENTS_NONPUBLIC',                                    'You must be logged in as a member to add comment to this blog');
+define('_ERROR_COMMENTS_MEMBERNICK',                           'The name you want to use to post comments is in use by a site member. Choose something else.');
+define('_ERROR_SKIN',                                                          'Skin error');
+define('_ERROR_ITEMCLOSED',                                                    'This item is closed, it\'s not possible to add new comments to it or to vote on it');
+define('_ERROR_NOSUCHITEM',                                                    'No such item exists');
+define('_ERROR_NOSUCHBLOG',                                                    'No such blog');
+define('_ERROR_NOSUCHSKIN',                                                    'No such skin');
+define('_ERROR_NOSUCHMEMBER',                                          'No such member');
+define('_ERROR_NOTONTEAM',                                                     'You\'re not on the teamlist of this weblog.');
+define('_ERROR_BADDESTBLOG',                                           'Destination blog does not exist');
+define('_ERROR_NOTONDESTTEAM',                                         'Cannot move item, since you\'re not on the teamlist of the destination blog');
+define('_ERROR_NOEMPTYITEMS',                                          'Cannot add empty items!');
+define('_ERROR_BADMAILADDRESS',                                                'Email address is not valid');
+define('_ERROR_BADNOTIFY',                                                     'One or more of the given notify addresses is not a valid email address');
+define('_ERROR_BADNAME',                                                       'Name is not valid (only a-z and 0-9 allowed, no spaces at start/end)');
+define('_ERROR_NICKNAMEINUSE',                                         'Another member is already using that nickname');
+define('_ERROR_PASSWORDMISMATCH',                                      'Passwords must match');
+define('_ERROR_PASSWORDTOOSHORT',                                      'Password should be at least 6 characters');
+define('_ERROR_PASSWORDMISSING',                                       'Password cannot be empty');
+define('_ERROR_REALNAMEMISSING',                                       'You must enter a real name');
+define('_ERROR_ATLEASTONEADMIN',                                       'There should always be at least one super-admin that can login to the admin area.');
+define('_ERROR_ATLEASTONEBLOGADMIN',                           'Performing this action would leave your weblog unmaintainable. Please make sure there is always at least one admin.');
+define('_ERROR_ALREADYONTEAM',                                         'You can\'t add a member that is already on the team');
+define('_ERROR_BADSHORTBLOGNAME',                                      'The short blog name should only contain a-z and 0-9, without spaces');
+define('_ERROR_DUPSHORTBLOGNAME',                                      'Another blog already has the chosen short name. These names should be unique');
+define('_ERROR_UPDATEFILE',                                                    'Cannot get write access to the update-file. Make sure the file permissions are set ok (try chmodding it to 666). Also note that the location is relative to the admin-area directory, so you might want to use an absolute path (something like /your/path/to/nucleus/)');
+define('_ERROR_DELDEFBLOG',                                                    'Cannot delete the default blog');
+define('_ERROR_DELETEMEMBER',                                          'This member cannot be deleted, probably because he/she is the author of item(s)');
+define('_ERROR_BADTEMPLATENAME',                                       'Invalid name for template, use only a-z and 0-9, without spaces');
+define('_ERROR_DUPTEMPLATENAME',                                       'Another template with this name already exists');
+define('_ERROR_BADSKINNAME',                                           'Invalid name for skin (only a-z, 0-9 are allowed, no spaces)');
+define('_ERROR_DUPSKINNAME',                                           'Another skin with this name already exists');
+define('_ERROR_DEFAULTSKIN',                                           'There must at all times be a skin named "default"');
+define('_ERROR_SKINDEFDELETE',                                         'Cannot delete skin since it is the default skin for the following weblog: ');
+define('_ERROR_DISALLOWED',                                                    'Sorry, you\'re not allowed to perform this action');
+define('_ERROR_DELETEBAN',                                                     'Error while trying to delete ban (ban does not exist)');
+define('_ERROR_ADDBAN',                                                                'Error while trying to add ban. Ban might not have been added correctly in all your blogs.');
+define('_ERROR_BADACTION',                                                     'Required action does not exist');
+define('_ERROR_MEMBERMAILDISABLED',                                    'Member to Member mail messages are disabled');
+define('_ERROR_MEMBERCREATEDISABLED'                           ,'Creation of member accounts is disabled');
+define('_ERROR_INCORRECTEMAIL',                                                'Incorrect mail address');
+define('_ERROR_VOTEDBEFORE',                                           'You have already voted for this item');
+define('_ERROR_BANNED1',                                                       'Cannot perform action since you (ip range ');
+define('_ERROR_BANNED2',                                                       ') are banned from doing so. The message was: \'');
+define('_ERROR_BANNED3',                                                       '\'');
+define('_ERROR_LOGINNEEDED',                                           'You must be logged in in order to perform this action');
+define('_ERROR_CONNECT',                                                       'Connect Error');
+define('_ERROR_FILE_TOO_BIG',                                          'File is too big!');
+define('_ERROR_BADFILETYPE',                                           'Sorry, this filetype is not allowed');
+define('_ERROR_BADREQUEST',                                                    'Bad upload request');
+define('_ERROR_DISALLOWEDUPLOAD',                                      'You are not on any weblogs teamlist. Hence, you are not allowed to upload files');
+define('_ERROR_BADPERMISSIONS',                                                'File/Dir permissions are not set correctly');
+define('_ERROR_UPLOADMOVEP',                                           'Error while moving uploaded file');
+define('_ERROR_UPLOADCOPY',                                                    'Error while copying file');
+define('_ERROR_UPLOADDUPLICATE',                                       'Another file with that name already exists. Try to rename it before uploading.');
+define('_ERROR_LOGINDISALLOWED',                                       'Sorry, you\'re not allowed to log in to the admin area. You can log in as another user, though');
+define('_ERROR_DBCONNECT',                                                     'Could not connect to mySQL server');
+define('_ERROR_DBSELECT',                                                      'Could not select the nucleus database.');
+define('_ERROR_NOSUCHLANGUAGE',                                                'No such language file exists');
+define('_ERROR_NOSUCHCATEGORY',                                                'No such category exists');
+define('_ERROR_DELETELASTCATEGORY',                                    'There must at least be one category');
+define('_ERROR_DELETEDEFCATEGORY',                                     'Cannot delete default category');
+define('_ERROR_BADCATEGORYNAME',                                       'Bad category name');
+define('_ERROR_DUPCATEGORYNAME',                                       'Another category with this name already exists');
+
+// some warnings (used for mediadir setting)
+define('_WARNING_NOTADIR',                                                     'Warning: Current value is not a directory!');
+define('_WARNING_NOTREADABLE',                                         'Warning: Current value is a non-readable directory!');
+define('_WARNING_NOTWRITABLE',                                         'Warning: Current value is NOT a writable directory!');
+
+// media and upload
+define('_MEDIA_UPLOADLINK',                                                    'Upload a new file');
+define('_MEDIA_MODIFIED',                                                      'modified');
+define('_MEDIA_FILENAME',                                                      'filename');
+define('_MEDIA_DIMENSIONS',                                                    'dimensions');
+define('_MEDIA_INLINE',                                                                'Inline');
+define('_MEDIA_POPUP',                                                         'Popup');
+define('_UPLOAD_TITLE',                                                                'Choose File');
+define('_UPLOAD_MSG',                                                          'Select the file you want to upload below, and hit the \'Upload\' button.');
+define('_UPLOAD_BUTTON',                                                       'Upload');
+
+// some status messages
+//define('_MSG_ACCOUNTCREATED',                                                'Account created, password will be sent through email');
+//define('_MSG_PASSWORDSENT',                                                  'Password has been sent by e-mail.');
+define('_MSG_LOGINAGAIN',                                                      'You\'ll need to login again, because your info changed');
+define('_MSG_SETTINGSCHANGED',                                         'Settings Changed');
+define('_MSG_ADMINCHANGED',                                                    'Admin Changed');
+define('_MSG_NEWBLOG',                                                         'New Blog Created');
+define('_MSG_ACTIONLOGCLEARED',                                                'Action Log Cleared');
+
+// actionlog in admin area
+define('_ACTIONLOG_DISALLOWED',                                                'Disallowed action: ');
+define('_ACTIONLOG_PWDREMINDERSENT',                           'New password sent for ');
+define('_ACTIONLOG_TITLE',                                                     'Action Log');
+define('_ACTIONLOG_CLEAR_TITLE',                                       'Clear Action Log');
+define('_ACTIONLOG_CLEAR_TEXT',                                                'Clear action log now');
+
+// team management
+define('_TEAM_TITLE',                                                          'Manage team for blog ');
+define('_TEAM_CURRENT',                                                                'Current team');
+define('_TEAM_ADDNEW',                                                         'Add new member to team');
+define('_TEAM_CHOOSEMEMBER',                                           'Choose member');
+define('_TEAM_ADMIN',                                                          'Admin privileges? ');
+define('_TEAM_ADD',                                                                    'Add to team');
+define('_TEAM_ADD_BTN',                                                                'Add to team');
+
+// blogsettings
+define('_EBLOG_TITLE',                                                         'Edit Blog Settings');
+define('_EBLOG_TEAM_TITLE',                                                    'Edit Team');
+define('_EBLOG_TEAM_TEXT',                                                     'Click here to edit your team...');
+define('_EBLOG_SETTINGS_TITLE',                                                'Blog settings');
+define('_EBLOG_NAME',                                                          'Blog Name');
+define('_EBLOG_SHORTNAME',                                                     'Short Blog Name');
+define('_EBLOG_SHORTNAME_EXTRA',                                       '<br />(should only contain a-z and no spaces)');
+define('_EBLOG_DESC',                                                          'Blog Description');
+define('_EBLOG_URL',                                                           'URL');
+define('_EBLOG_DEFSKIN',                                                       'Default Skin');
+define('_EBLOG_DEFCAT',                                                                'Default Category');
+define('_EBLOG_LINEBREAKS',                                                    'Convert line breaks');
+define('_EBLOG_DISABLECOMMENTS',                                       'Comments enabled?<br /><small>(Disabling comments means that adding comments is not possible.)</small>');
+define('_EBLOG_ANONYMOUS',                                                     'Allow comments by non-members?');
+define('_EBLOG_NOTIFY',                                                                'Notify Address(es) (use ; as separator)');
+define('_EBLOG_NOTIFY_ON',                                                     'Notify on');
+define('_EBLOG_NOTIFY_COMMENT',                                                'New comments');
+define('_EBLOG_NOTIFY_KARMA',                                          'New karma votes');
+define('_EBLOG_NOTIFY_ITEM',                                           'New weblog items');
+define('_EBLOG_PING',                          'Ping weblog listing service on update?'); // NOTE: This string is no longer in used
+define('_EBLOG_MAXCOMMENTS',                                           'Max Amount of comments');
+define('_EBLOG_UPDATE',                                                                'Update file');
+define('_EBLOG_OFFSET',                                                                'Time Offset');
+define('_EBLOG_STIME',                                                         'Current server time is');
+define('_EBLOG_BTIME',                                                         'Current blog time is');
+define('_EBLOG_CHANGE',                                                                'Change Settings');
+define('_EBLOG_CHANGE_BTN',                                                    'Change Settings');
+define('_EBLOG_ADMIN',                                                         'Blog Admin');
+define('_EBLOG_ADMIN_MSG',                                                     'You will be assigned admin privileges');
+define('_EBLOG_CREATE_TITLE',                                          'Create new weblog');
+define('_EBLOG_CREATE_TEXT',                                           'Fill out the form below to create a new weblog. <br /><br /> <b>Note:</b> Only the necessary options are listed. If you want to set extra options, enter the blogsettings page after creating the weblog.');
+define('_EBLOG_CREATE',                                                                'Create!');
+define('_EBLOG_CREATE_BTN',                                                    'Create Weblog');
+define('_EBLOG_CAT_TITLE',                                                     'Categories');
+define('_EBLOG_CAT_NAME',                                                      'Category Name');
+define('_EBLOG_CAT_DESC',                                                      'Category Description');
+define('_EBLOG_CAT_CREATE',                                                    'Create New Category');
+define('_EBLOG_CAT_UPDATE',                                                    'Update Category');
+define('_EBLOG_CAT_UPDATE_BTN',                                                'Update Category');
+
+// templates
+define('_TEMPLATE_TITLE',                                                      'Edit Templates');
+define('_TEMPLATE_AVAILABLE_TITLE',                                    'Available Templates');
+define('_TEMPLATE_NEW_TITLE',                                          'New Template');
+define('_TEMPLATE_NAME',                                                       'Template Name');
+define('_TEMPLATE_DESC',                                                       'Template Description');
+define('_TEMPLATE_CREATE',                                                     'Create Template');
+define('_TEMPLATE_CREATE_BTN',                                         'Create Template');
+define('_TEMPLATE_EDIT_TITLE',                                         'Edit Template');
+define('_TEMPLATE_BACK',                                                       'Back to Template Overview');
+define('_TEMPLATE_EDIT_MSG',                                           'Not all template parts are needed, leave empty those that are not needed.');
+define('_TEMPLATE_SETTINGS',                                           'Template Settings');
+define('_TEMPLATE_ITEMS',                                                      'Items');
+define('_TEMPLATE_ITEMHEADER',                                         'Item Header');
+define('_TEMPLATE_ITEMBODY',                                           'Item Body');
+define('_TEMPLATE_ITEMFOOTER',                                         'Item Footer');
+define('_TEMPLATE_MORELINK',                                           'Link to extended entry');
+define('_TEMPLATE_NEW',                                                                'Indication of new item');
+define('_TEMPLATE_COMMENTS_ANY',                                       'Comments (if any)');
+define('_TEMPLATE_CHEADER',                                                    'Comments Header');
+define('_TEMPLATE_CBODY',                                                      'Comments Body');
+define('_TEMPLATE_CFOOTER',                                                    'Comments Footer');
+define('_TEMPLATE_CONE',                                                       'One Comment');
+define('_TEMPLATE_CMANY',                                                      'Two (or more) Comments');
+define('_TEMPLATE_CMORE',                                                      'Comments Read More');
+define('_TEMPLATE_CMEXTRA',                                                    'Member Extra');
+define('_TEMPLATE_COMMENTS_NONE',                                      'Comments (if none)');
+define('_TEMPLATE_CNONE',                                                      'No Comments');
+define('_TEMPLATE_COMMENTS_TOOMUCH',                           'Comments (if any, but too much to show inline)');
+define('_TEMPLATE_CTOOMUCH',                                           'Too Much Comments');
+define('_TEMPLATE_ARCHIVELIST',                                                'Archive Lists');
+define('_TEMPLATE_AHEADER',                                                    'Archive List Header');
+define('_TEMPLATE_AITEM',                                                      'Archive List Item');
+define('_TEMPLATE_AFOOTER',                                                    'Archive List Footer');
+define('_TEMPLATE_DATETIME',                                           'Date and Time');
+define('_TEMPLATE_DHEADER',                                                    'Date Header');
+define('_TEMPLATE_DFOOTER',                                                    'Date Footer');
+define('_TEMPLATE_DFORMAT',                                                    'Date Format');
+define('_TEMPLATE_TFORMAT',                                                    'Time Format');
+define('_TEMPLATE_LOCALE',                                                     'Locale');
+define('_TEMPLATE_IMAGE',                                                      'Image popups');
+define('_TEMPLATE_PCODE',                                                      'Popup Link Code');
+define('_TEMPLATE_ICODE',                                                      'Inline Image Code');
+define('_TEMPLATE_MCODE',                                                      'Media Object Link Code');
+define('_TEMPLATE_SEARCH',                                                     'Search');
+define('_TEMPLATE_SHIGHLIGHT',                                         'Highlight');
+define('_TEMPLATE_SNOTFOUND',                                          'Nothing found in search');
+define('_TEMPLATE_UPDATE',                                                     'Update');
+define('_TEMPLATE_UPDATE_BTN',                                         'Update Template');
+define('_TEMPLATE_RESET_BTN',                                          'Reset Data');
+define('_TEMPLATE_CATEGORYLIST',                                       'Category Lists');
+define('_TEMPLATE_CATHEADER',                                          'Category List Header');
+define('_TEMPLATE_CATITEM',                                                    'Category List Item');
+define('_TEMPLATE_CATFOOTER',                                          'Category List Footer');
+
+// skins
+define('_SKIN_EDIT_TITLE',                                                     'Edit Skins');
+define('_SKIN_AVAILABLE_TITLE',                                                'Available Skins');
+define('_SKIN_NEW_TITLE',                                                      'New Skin');
+define('_SKIN_NAME',                                                           'Name');
+define('_SKIN_DESC',                                                           'Description');
+define('_SKIN_TYPE',                                                           'Content Type');
+define('_SKIN_CREATE',                                                         'Create');
+define('_SKIN_CREATE_BTN',                                                     'Create Skin');
+define('_SKIN_EDITONE_TITLE',                                          'Edit skin');
+define('_SKIN_BACK',                                                           'Back to Skin Overview');
+define('_SKIN_PARTS_TITLE',                                                    'Skin Parts');
+define('_SKIN_PARTS_MSG',                                                      'Not all types are needed for each skin. Leave empty those you don\'t need. Choose the skin type to edit below:');
+define('_SKIN_PART_MAIN',                                                      'Main Index');
+define('_SKIN_PART_ITEM',                                                      'Item Pages');
+define('_SKIN_PART_ALIST',                                                     'Archive List');
+define('_SKIN_PART_ARCHIVE',                                           'Archive');
+define('_SKIN_PART_SEARCH',                                                    'Search');
+define('_SKIN_PART_ERROR',                                                     'Errors');
+define('_SKIN_PART_MEMBER',                                                    'Member Details');
+define('_SKIN_PART_POPUP',                                                     'Image Popups');
+define('_SKIN_GENSETTINGS_TITLE',                                      'General Settings');
+define('_SKIN_CHANGE',                                                         'Change');
+define('_SKIN_CHANGE_BTN',                                                     'Change these settings');
+define('_SKIN_UPDATE_BTN',                                                     'Update Skin');
+define('_SKIN_RESET_BTN',                                                      'Reset Data');
+define('_SKIN_EDITPART_TITLE',                                         'Edit Skin');
+define('_SKIN_GOBACK',                                                         'Go Back');
+define('_SKIN_ALLOWEDVARS',                                                    'Allowed Variables (click for info):');
+
+// global settings
+define('_SETTINGS_TITLE',                                                      'General Settings');
+define('_SETTINGS_SUB_GENERAL',                                                'General Settings');
+define('_SETTINGS_DEFBLOG',                                                    'Default Blog');
+define('_SETTINGS_ADMINMAIL',                                          'Administrator Email');
+define('_SETTINGS_SITENAME',                                           'Site Name');
+define('_SETTINGS_SITEURL',                                                    'URL of Site (should end with a slash)');
+define('_SETTINGS_ADMINURL',                                           'URL of Admin Area (should end with a slash)');
+define('_SETTINGS_DIRS',                                                       'Nucleus Directories');
+define('_SETTINGS_MEDIADIR',                                           'Media Directory');
+define('_SETTINGS_SEECONFIGPHP',                                       '(see config.php)');
+define('_SETTINGS_MEDIAURL',                                           'Media URL (should end with a slash)');
+define('_SETTINGS_ALLOWUPLOAD',                                                'Allow File Upload?');
+define('_SETTINGS_ALLOWUPLOADTYPES',                           'Allow File Types for Upload');
+define('_SETTINGS_CHANGELOGIN',                                                'Allow Members to Change Login/Password');
+define('_SETTINGS_COOKIES_TITLE',                                      'Cookie Settings');
+define('_SETTINGS_COOKIELIFE',                                         'Login Cookie Lifetime');
+define('_SETTINGS_COOKIESESSION',                                      'Session Cookies');
+define('_SETTINGS_COOKIEMONTH',                                                'Lifetime of a Month');
+define('_SETTINGS_COOKIEPATH',                                         'Cookie Path (advanced)');
+define('_SETTINGS_COOKIEDOMAIN',                                       'Cookie Domain (advanced)');
+define('_SETTINGS_COOKIESECURE',                                       'Secure Cookie (advanced)');
+define('_SETTINGS_LASTVISIT',                                          'Save Last Visit Cookies');
+define('_SETTINGS_ALLOWCREATE',                                                'Allow Visitors to Create a Member Account');
+define('_SETTINGS_NEWLOGIN',                                           'Login Allowed for User-Created accounts');
+define('_SETTINGS_NEWLOGIN2',                                          '(only goes for newly created accounts)');
+define('_SETTINGS_MEMBERMSGS',                                         'Allow Member-2-Member Service');
+define('_SETTINGS_LANGUAGE',                                           'Default Language');
+define('_SETTINGS_DISABLESITE',                                                'Disable Site');
+define('_SETTINGS_DBLOGIN',                                                    'mySQL Login &amp; Database');
+define('_SETTINGS_UPDATE',                                                     'Update Settings');
+define('_SETTINGS_UPDATE_BTN',                                         'Update Settings');
+define('_SETTINGS_DISABLEJS',                                          'Disable JavaScript Toolbar');
+define('_SETTINGS_MEDIA',                                                      'Media/Upload Settings');
+define('_SETTINGS_MEDIAPREFIX',                                                'Prefix uploaded files with date');
+define('_SETTINGS_MEMBERS',                                                    'Member Settings');
+
+// bans
+define('_BAN_TITLE',                                                           'Ban List for');
+define('_BAN_NONE',                                                                    'No bans for this weblog');
+define('_BAN_NEW_TITLE',                                                       'Add New Ban');
+define('_BAN_NEW_TEXT',                                                                'Add a new ban now');
+define('_BAN_REMOVE_TITLE',                                                    'Remove Ban');
+define('_BAN_IPRANGE',                                                         'IP Range');
+define('_BAN_BLOGS',                                                           'Which blogs?');
+define('_BAN_DELETE_TITLE',                                                    'Delete Ban');
+define('_BAN_ALLBLOGS',                                                                'All blogs to which you have admin privileges.');
+define('_BAN_REMOVED_TITLE',                                           'Ban Removed');
+define('_BAN_REMOVED_TEXT',                                                    'Ban was removed for the following blogs:');
+define('_BAN_ADD_TITLE',                                                       'Add Ban');
+define('_BAN_IPRANGE_TEXT',                                                    'Choose the IP range you want to block below. The less numbers in it, the more addresses will be blocked.');
+define('_BAN_BLOGS_TEXT',                                                      'You can either select to ban the IP on one blog only, or you can select to block the IP on all blogs where you have administrator privileges. Make your choice below.');
+define('_BAN_REASON_TITLE',                                                    'Reason');
+define('_BAN_REASON_TEXT',                                                     'You can provide a reason for the ban, which will be displayed when the IP holder tries to add another comment or tries to cast a karma vote. Maximum length is 256 characters.');
+define('_BAN_ADD_BTN',                                                         'Add Ban');
+
+// LOGIN screen
+define('_LOGIN_MESSAGE',                                                       'Message');
+define('_LOGIN_SHARED',                                                                _LOGINFORM_SHARED);
+define('_LOGIN_FORGOT',                                                                'Forgot your password?');
+
+// membermanagement
+define('_MEMBERS_TITLE',                                                       'Member Management');
+define('_MEMBERS_CURRENT',                                                     'Current Members');
+define('_MEMBERS_NEW',                                                         'New Member');
+define('_MEMBERS_DISPLAY',                                                     'Display Name');
+define('_MEMBERS_DISPLAY_INFO',                                                '(This is the name you use to login)');
+define('_MEMBERS_REALNAME',                                                    'Real Name');
+define('_MEMBERS_PWD',                                                         'Password');
+define('_MEMBERS_REPPWD',                                                      'Repeat Password');
+define('_MEMBERS_EMAIL',                                                       'Email address');
+define('_MEMBERS_EMAIL_EDIT',                                          '(When you change the email address, an activation link will be automatically sent out to that address)');
+define('_MEMBERS_URL',                                                         'Website Address (URL)');
+define('_MEMBERS_SUPERADMIN',                                          'Administrator privileges');
+define('_MEMBERS_CANLOGIN',                                                    'Can login to admin area');
+define('_MEMBERS_NOTES',                                                       'Notes');
+define('_MEMBERS_NEW_BTN',                                                     'Add Member');
+define('_MEMBERS_EDIT',                                                                'Edit Member');
+define('_MEMBERS_EDIT_BTN',                                                    'Change Settings');
+define('_MEMBERS_BACKTOOVERVIEW',                                      'Back to Member Overview');
+define('_MEMBERS_DEFLANG',                                                     'Language');
+define('_MEMBERS_USESITELANG',                                         '- use site settings -');
+
+// List of blogs (TT = tooltip)
+define('_BLOGLIST_TT_VISIT',                                           'Visit Site');
+define('_BLOGLIST_ADD',                                                                'Add Item');
+define('_BLOGLIST_TT_ADD',                                                     'Add a new item to this weblog');
+define('_BLOGLIST_EDIT',                                                       'Edit/Delete Items');
+define('_BLOGLIST_TT_EDIT',                                                    '');
+define('_BLOGLIST_BMLET',                                                      'Bookmarklet');
+define('_BLOGLIST_TT_BMLET',                                           '');
+define('_BLOGLIST_SETTINGS',                                           'Settings');
+define('_BLOGLIST_TT_SETTINGS',                                                'Edit settings or manage team');
+define('_BLOGLIST_BANS',                                                       'Bans');
+define('_BLOGLIST_TT_BANS',                                                    'View, add or remove banned IPs');
+define('_BLOGLIST_DELETE',                                                     'Delete All');
+define('_BLOGLIST_TT_DELETE',                                          'Delete this weblog');
+
+// OVERVIEW screen
+define('_OVERVIEW_YRBLOGS',                                                    'Your weblogs');
+define('_OVERVIEW_YRDRAFTS',                                           'Your drafts');
+define('_OVERVIEW_YRSETTINGS',                                         'Your settings');
+define('_OVERVIEW_GSETTINGS',                                          'General settings');
+define('_OVERVIEW_NOBLOGS',                                                    'You\'re not on any weblogs teamlist');
+define('_OVERVIEW_NODRAFTS',                                           'No drafts');
+define('_OVERVIEW_EDITSETTINGS',                                       'Edit Your Settings...');
+define('_OVERVIEW_BROWSEITEMS',                                                'Browse your items...');
+define('_OVERVIEW_BROWSECOMM',                                         'Browse your comments...');
+define('_OVERVIEW_VIEWLOG',                                                    'View Action Log...');
+define('_OVERVIEW_MEMBERS',                                                    'Manage Members...');
+define('_OVERVIEW_NEWLOG',                                                     'Create New Weblog...');
+define('_OVERVIEW_SETTINGS',                                           'Edit Settings...');
+define('_OVERVIEW_TEMPLATES',                                          'Edit Templates...');
+define('_OVERVIEW_SKINS',                                                      'Edit Skins...');
+define('_OVERVIEW_BACKUP',                                                     'Backup/Restore...');
+
+// ITEMLIST
+define('_ITEMLIST_BLOG',                                                       'Items for blog');
+define('_ITEMLIST_YOUR',                                                       'Your items');
+
+// Comments
+define('_COMMENTS',                                                                    'Comments');
+define('_NOCOMMENTS',                                                          'No comments for this item');
+define('_COMMENTS_YOUR',                                                       'Your Comments');
+define('_NOCOMMENTS_YOUR',                                                     'You didn\'t write any comments');
+
+// LISTS (general)
+define('_LISTS_NOMORE',                                                                'No more results, or no results at all');
+define('_LISTS_PREV',                                                          'Previous');
+define('_LISTS_NEXT',                                                          'Next');
+define('_LISTS_SEARCH',                                                                'Search');
+define('_LISTS_CHANGE',                                                                'Change');
+define('_LISTS_PERPAGE',                                                       'items/page');
+define('_LISTS_ACTIONS',                                                       'Actions');
+define('_LISTS_DELETE',                                                                'Delete');
+define('_LISTS_EDIT',                                                          'Edit');
+define('_LISTS_MOVE',                                                          'Move');
+define('_LISTS_CLONE',                                                         'Clone');
+define('_LISTS_TITLE',                                                         'Title');
+define('_LISTS_BLOG',                                                          'Blog');
+define('_LISTS_NAME',                                                          'Name');
+define('_LISTS_DESC',                                                          'Description');
+define('_LISTS_TIME',                                                          'Time');
+define('_LISTS_COMMENTS',                                                      'Comments');
+define('_LISTS_TYPE',                                                          'Type');
+
+
+// member list
+define('_LIST_MEMBER_NAME',                                                    'Display Name');
+define('_LIST_MEMBER_RNAME',                                           'Real Name');
+define('_LIST_MEMBER_ADMIN',                                           'Super-admin? ');
+define('_LIST_MEMBER_LOGIN',                                           'Can login? ');
+define('_LIST_MEMBER_URL',                                                     'Website');
+
+// banlist
+define('_LIST_BAN_IPRANGE',                                                    'IP Range');
+define('_LIST_BAN_REASON',                                                     'Reason');
+
+// actionlist
+define('_LIST_ACTION_MSG',                                                     'Message');
+
+// commentlist
+define('_LIST_COMMENT_BANIP',                                          'Ban IP');
+define('_LIST_COMMENT_WHO',                                                    'Author');
+define('_LIST_COMMENT',                                                                'Comment');
+define('_LIST_COMMENT_HOST',                                           'Host');
+
+// itemlist
+define('_LIST_ITEM_INFO',                                                      'Info');
+define('_LIST_ITEM_CONTENT',                                           'Title and Text');
+
+
+// teamlist
+define('_LIST_TEAM_ADMIN',                                                     'Admin ');
+define('_LIST_TEAM_CHADMIN',                                           'Change Admin');
+
+// edit comments
+define('_EDITC_TITLE',                                                         'Edit Comments');
+define('_EDITC_WHO',                                                           'Author');
+define('_EDITC_HOST',                                                          'From Where?');
+define('_EDITC_WHEN',                                                          'When?');
+define('_EDITC_TEXT',                                                          'Text');
+define('_EDITC_EDIT',                                                          'Edit Comment');
+define('_EDITC_MEMBER',                                                                'member');
+define('_EDITC_NONMEMBER',                                                     'non member');
+
+// move item
+define('_MOVE_TITLE',                                                          'Move to which blog?');
+define('_MOVE_BTN',                                                                    'Move Item');
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/language/index.html b/utf8/nucleus/language/index.html
new file mode 100755 (executable)
index 0000000..1dd6105
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+               @version $Id$\r
+       -->\r
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/language/japanese-euc.php b/utf8/nucleus/language/japanese-euc.php
new file mode 100644 (file)
index 0000000..dfad4c3
--- /dev/null
@@ -0,0 +1,1330 @@
+<?php
+// Japanese (EUC-JP) Nucleus Language File
+//
+// Author: chrome (chrome@cgi.no-ip.org)
+// Modified by: Osamu Higuchi (osamu@higuchi.com)
+// Modified by: shizuki (shizuki@kinezumi.net)
+// Nucleus version: v1.0-v3.5
+//
+// Please note: if you want to translate this file to your own language, be aware
+// that in a next Nucleus version, new variables might be added and some other ones
+// might be deleted. Therefor, it's important to list the Nucleus version for which
+// the file was written in your document.
+//
+// Fully translated language file can be sent to us and will be made
+// available for download (with proper credit to the author, of course)
+
+// Note for Japanese users
+// ¤³¤Î¥Õ¥¡¥¤¥ë¤Ï Nucleus ¤Î EUC-JP ÈÇÆüËܸì¥é¥ó¥²¡¼¥¸¥Õ¥¡¥¤¥ë¤Ç¤¹¡£
+
+
+
+/**
+ * Japanese EUC-JP Nucleus Language File
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The NucleusCMS Japan¥Á¡¼¥à
+ * @version $Id$
+ */
+
+/********************************************
+ *        Start New for 3.50                *
+ ********************************************/
+define('_PLUGS_TITLE_GETPLUGINS',              '¥×¥é¥°¥¤¥ó¤òÆþ¼ê¡Ä');
+define('_ARCHIVETYPE_YEAR', 'ǯ');
+define('_ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE',            '¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤¬Æþ¼ê²Äǽ¤Ç¤¹');
+define('_ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT',             '¥¢¥Ã¥×¥°¥ì¡¼¥É¤¬Æþ¼ê²Äǽ¤Ç¤¹¡§ v');
+define('_MANAGER_PLUGINSQLAPI_NOTSUPPORT', "¥×¥é¥°¥¤¥ó %s ¤òÆɤ߹þ¤á¤Þ¤»¤ó¤Ç¤·¤¿¡£(¤³¤Î¥×¥é¥°¥¤¥ó¤ÏSqlAPI¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÎÀܳÊýË¡¤ò¸«Ä¾¤·¤Æ¤¯¤À¤µ¤¤)");
+
+
+/********************************************
+ *        Start New for 3.40                *
+ ********************************************/
+
+// START changed/added after 3.33 START
+define('_MEMBERS_USEAUTOSAVE',                         '²¼½ñ¤­¤Î¼«Æ°Êݸµ¡Ç½¤òÍ­¸ú¤Ë¤·¤Þ¤¹¤«?');
+
+define('_TEMPLATE_PLUGIN_FIELDS',                      '¥×¥é¥°¥¤¥ó¤Ë¤è¤ë³ÈÄ¥¥Õ¥£¡¼¥ë¥É');
+define('_TEMPLATE_BLOGLIST',                           'Blog°ìÍ÷');
+define('_TEMPLATE_BLOGHEADER',                         'Blog°ìÍ÷¤Î¥Ø¥Ã¥À¡¼');
+define('_TEMPLATE_BLOGITEM',                           'Blog°ìÍ÷¤ÎËÜÂÎ');
+define('_TEMPLATE_BLOGFOOTER',                         'Blog°ìÍ÷¤Î¥Õ¥Ã¥¿¡¼');
+
+define('_SETTINGS_DEFAULTLISTSIZE',                    '°ìÍ÷¤Î´ûÄê¤Îɽ¼¨¿ô');
+define('_SETTINGS_DEBUGVARS',                          '¥Ç¥Ð¥Ã¥°¥â¡¼¥É¤òÍ­¸ú¤Ë¤¹¤ë');
+
+define('_CREATE_ACCOUNT_TITLE',                                '¥¢¥«¥¦¥ó¥È¤Î¿·µ¬ºîÀ®');
+define('_CREATE_ACCOUNT0',                                     '¥¢¥«¥¦¥ó¥È¤ÎºîÀ®');
+define('_CREATE_ACCOUNT1',                                     '¥¢¥«¥¦¥ó¥È¤ÎºîÀ®¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£<br /><br />');
+define('_CREATE_ACCOUNT2',                                     '¾ÜºÙ¤Ï¥¦¥§¥Ö¥µ¥¤¥È¤Î´ÉÍý¼Ô¤Ë¤ªÌ䤤¹ç¤ï¤»¤¯¤À¤µ¤¤¡£');
+define('_CREATE_ACCOUNT_USER_DATA',                    '¿·µ¬¥¢¥«¥¦¥ó¥È¤Î¾ðÊó');
+define('_CREATE_ACCOUNT_LOGIN_NAME',           '¥í¥°¥¤¥óID (ɬ¿Ü)¡§');
+define('_CREATE_ACCOUNT_LOGIN_NAME_VALID',     ' a-z ¤Î±Ñ¾®Ê¸»ú¤È 0-9 ¤Î¿ô»ú¤Î¤ß»ÈÍѤǤ­¤Þ¤¹');
+define('_CREATE_ACCOUNT_REAL_NAME',                    '¥Ï¥ó¥É¥ë (ɬ¿Ü)¡§');
+define('_CREATE_ACCOUNT_EMAIL',                                '¥á¡¼¥ë¥¢¥É¥ì¥¹ (ɬ¿Ü)¡§');
+define('_CREATE_ACCOUNT_EMAIL2',                       '(¥¢¥¯¥Æ¥£¥Ù¡¼¥·¥ç¥óÍѤΥê¥ó¥¯¤¬Á÷¤é¤ì¤ë¤Î¤ÇÍ­¸ú¤Ê¤â¤Î¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤)');
+define('_CREATE_ACCOUNT_URL',                          '(¤â¤·¤¢¤ì¤Ð)¼«Ê¬¤Î¥µ¥¤¥È¤ÎURL¡§');
+define('_CREATE_ACCOUNT_SUBMIT',                       '¥¢¥«¥¦¥ó¥È¤ÎºîÀ®');
+
+define('_BMLET_BACKTODRAFTS',                          '¥É¥é¥Õ¥È¤ËÌ᤹');
+define('_BMLET_CANCEL',                                                '¥­¥ã¥ó¥»¥ë');
+
+define('_LIST_ITEM_NOCONTENT',                                         '¥³¥á¥ó¥È¤Ï¤¢¤ê¤Þ¤»¤ó');
+define('_LIST_ITEM_COMMENTS',                                          '¥³¥á¥ó¥È(%d)·ï');
+
+define('_EDITC_URL',                                                           'Web site');
+define('_EDITC_EMAIL',                                                         'E-mail');
+
+define('_MANAGER_PLUGINFILE_NOTFOUND',                         "¥×¥é¥°¥¤¥ó¡Ö%s¡×¤òÆɤ߹þ¤á¤Þ¤»¤ó¤Ç¤·¤¿(¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó)");
+/* changed */
+// plugin dependency
+define('_ERROR_INSREQPLUGIN',                          '¥×¥é¥°¥¤¥ó %s ¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Ê¤¤¤¿¤á¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_ERROR_DELREQPLUGIN',                          '¥×¥é¥°¥¤¥ó %s ¤¬¤³¤Î¥×¥é¥°¥¤¥ó¤Ë°Í¸¤·¤Æ¤¤¤ë°Ù¤Ëºï½ü¤Ç¤­¤Þ¤»¤ó¡£');
+
+//define('_ADD_ADDLATER',                                              '¸å¤ÇÄɲÃ');
+define('_ADD_ADDLATER',                                                'Æü»þ¤ò»ØÄꤷ¤ÆÄɲÃ');  // <mod by shizuki />
+
+define('_LOGIN_NAME',                                          '¥í¥°¥¤¥óID:');
+define('_LOGIN_PASSWORD',                                      '¥Ñ¥¹¥ï¡¼¥É:');
+
+// changed from _BOOKMARLET_BMARKLFOLLOW
+define('_BOOKMARKLET_BMARKFOLLOW',                                     ' (¤Û¤È¤ó¤É¤Î¥Ö¥é¥¦¥¶¤ÇÆ°ºî¤·¤Þ¤¹)');
+// END changed/added after 3.33 END
+
+// START merge EUC-JP and EUC-JP
+
+// Create New blog
+define('_ADMIN_NOTABILIA',                                     'Ãí°Õ»ö¹à');
+define('_ADMIN_PLEASE_READ',                           'ºîÀ®¤Ë¤¢¤¿¤Ã¤Æ¡¢²¼µ­¤Î<strong>Ãí°Õ»ö¹à</strong> ¤ò¤Þ¤º¤ªÆɤ߲¼¤µ¤¤');
+define('_ADMIN_HOW_TO_ACCESS',                         '¿·¤·¤¤Blog¤òºîÀ®¤·¤¿¸å¤Ë¡¢¤³¤ÎBlog¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤ÎÊýË¡¤ò¾Ò²ð¤·¤Æ¤ª¤­¤Þ¤¹¡£ÊýË¡¤Ï2¤Ä¤¢¤ê¤Þ¤¹:');
+define('_ADMIN_SIMPLE_WAY',                                    '<strong>´Êñ¤ÊÊýË¡:</strong> <code>index.php</code>¤ÎÊ£À½¤òºî¤ê¡¢¿·¤·¤¤Blog¤òɽ¼¨¤¹¤ë¤è¤¦¤ËÊѹ¹¤ò²Ã¤¨¤Þ¤¹¡£ ¤³¤ÎÊѹ¹¤Î¾ÜºÙ¤Ï¡¢ºîÀ®¸å¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£');
+define('_ADMIN_ADVANCED_WAY',                          '<strong>¹âÅÙ¤ÊÊýË¡:</strong> ¸½ºß¤ÎBlog¤Ç»ÈÍѤ·¤Æ¤¤¤ë¥¹¥­¥ó¤Ë<code>&lt;%otherblog()&gt;</code>¤È¤¤¤¦¥³¡¼¥É¤ò»È¤Ã¤¿µ­½Ò¤ò²Ã¤¨¤Þ¤¹¡£¤³¤ÎÊýË¡¤Ç¤Ï¡¢Æ±¤¸¥Ú¡¼¥¸Æâ¤ÇÊ£¿ô¤ÎBlog¤òɽ¼¨¤¹¤ë¤³¤È¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£');
+define('_ADMIN_HOW_TO_CREATE',                         'Blog¤ÎºîÀ®');
+
+
+define('_BOOKMARKLET_NEW_CATEGORY',                    '¥¢¥¤¥Æ¥à¤ÏÄɲ䵤졢¿·¤·¤¤¥«¥Æ¥´¥ê¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿¡£');
+define('_BOOKMARKLET_NEW_CATEGORY_EDIT',       '¤³¤³¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¥«¥Æ¥´¥ê¡¼¤Î̾Á°¤ÈÀâÌÀ¤òÊÔ½¸¤·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_BOOKMARKLET_NEW_WINDOW',                      '¿·¤·¤¤¥¦¥£¥ó¥É¥¦¤¬³«¤­¤Þ¤¹');
+define('_BOOKMARKLET_SEND_PING',                       '¥¢¥¤¥Æ¥à¤ÎÄɲäËÀ®¸ù¤·¤Þ¤·¤¿¡£¸½ºßblog¸¡º÷¥µ¡¼¥Ó¥¹¤Ë¹¹¿·ping¤òÁ÷¿®¤·¤Þ¤¹¡£'); // NOTE: This string is no longer in used
+
+// END merge EUC-JP and EUC-JP
+
+// <add by shizuki>
+// OVERVIEW screen
+define('_OVERVIEW_SHOWALL',                                                    'Á´¤Æ¤Îblog¤òɽ¼¨');
+
+// Edit skins
+define('_SKINEDIT_ALLOWEDBLOGS',                                       'ºîÀ®ºÑ¤ß¤Îblog:');
+define('_SKINEDIT_ALLOWEDTEMPLATESS',                          '»ÈÍѲÄǽ¤Ê¥Æ¥ó¥×¥ì¡¼¥È:');
+
+// delete member
+define('_WARNINGTXT_NOTDELMEDIAFILES',                         '¥á¥ó¥Ð¡¼¤Ë¤è¤Ã¤Æ¥¢¥Ã¥×¥í¡¼¥É¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ï<b>ºï½ü¤µ¤ì¤Þ¤»¤ó</b>¤Î¤Çµ¤¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£(¾¯¤Ê¤¯¤È¤â¤³¤Î¥Ð¡¼¥¸¥ç¥ó°Ê²¼¤ÎNucleus¤Ç¤Ï¤½¤¦¤Ê¤Ã¤Æ¤¤¤Þ¤¹)');        // <add by shizuki />
+
+// send Weblogupdate.ping
+define('_UPDATEDPING_MESSAGE',                                         '<h2>¥µ¥¤¥È¤¬¹¹¿·¤µ¤ì¤Þ¤·¤¿¡£Ping¥µ¡¼¥Ð¤Ë¹¹¿·¤òÄÌÃΤ·¤Þ¤¹¡£</h2><p>¤·¤Ð¤é¤¯¤ªÂÔ¤Á¤¯¤À¤µ¤¤</p><p>¼«Æ°Åª¤Ë¥Ú¡¼¥¸¤¬ÀÚ¤êÂؤï¤é¤Ê¤¤¾ì¹ç¤Ï¡¢É½¼¨¤µ¤ì¤ë¥ê¥ó¥¯¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_GOPINGPAGE',                                      '¹¹¿·PingÁ÷¿®'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_PINGING',                                         'Ping¥µ¡¼¥Ð¤ËÁ÷¿®Ãæ¤Ç¤¹'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_VIEWITEM',                                                '¹¹¿·¤µ¤ì¤¿blog:'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_VISITOWNSITE',                                    '¥µ¥¤¥È¤Ø¹Ô¤Ã¤Æ¤ß¤ë'); // NOTE: This string is no longer in used
+
+// General category
+define('_EBLOGDEFAULTCATEGORY_NAME',                           'Áí¹ç');
+define('_EBLOGDEFAULTCATEGORY_DESC',                           'Åê¹Æ¤·¤¿µ­»ö¤Ë¹ç¤¦¥«¥Æ¥´¥ê¤¬Ìµ¤¤»þ¤Ë¤³¤Î¥«¥Æ¥´¥ê¤ò»ÈÍѤ¹¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦');
+
+// First ITEM
+define('_EBLOG_FIRSTITEM_TITLE',                                       'ºÇ½é¤Îµ­»ö(¼«Æ°Åê¹Æ)');
+define('_EBLOG_FIRSTITEM_BODY',                                                '¤³¤ì¤Ï¤¢¤Ê¤¿¤Îblog¤Ë¤ª¤±¤ëºÇ½é¤Î¥¢¥¤¥Æ¥à¤Ç¤¹¡£¼«Í³¤Ëºï½ü¤·¤Æ¤¤¤¿¤À¤¤¤Æ¤«¤Þ¤¤¤Þ¤»¤ó¡£');
+
+// New weblog was created
+define('_BLOGCREATED_TITLE',                                           '¿·¤·¤¤blog¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿');
+define('_BLOGCREATED_ADDEDTXT',                                                '¿·¤·¤¤blog ¡Ö%s¡×¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿¡£Â³¤±¤Æ¡¢blog¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Ë°Ê²¼¤Î¤É¤Á¤é¤«¤Î¼ê½ç¤Ë¿Ê¤ó¤Ç¤¯¤À¤µ¤¤¡£');
+define('_BLOGCREATED_SIMPLEWAY',                                       '´Êñ¤ÊÊýË¡: ²¼¤Î¥³¡¼¥É¤òŽÉÕ¤±¤¿ <code>%s.php</code> ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹¤ë');
+define('_BLOGCREATED_ADVANCEDWAY',                                     '¹âÅÙ¤ÊÊýË¡: ¸½ºß»ÈÍѤ·¤Æ¤¤¤ë¥¹¥­¥ó¤Ë¿·¤·¤¤blog¤òŸ³«¤µ¤»¤ë¤¿¤á¤Îµ­½Ò¤ò²Ã¤¨¤ë');
+define('_BLOGCREATED_SIMPLEDESC1',                                     'ÊýË¡ 1 :´Êñ¤ÊÊýË¡: <code>%s.php</code> ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤òºîÀ®');
+define('_BLOGCREATED_SIMPLEDESC2',                                     '<code>%s.php</code> ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¤Æ¡¢Ãæ¿È¤Ë°Ê²¼¤Î¥³¡¼¥É¤òŽ¤êÉÕ¤±¤Þ¤¹:');
+define('_BLOGCREATED_SIMPLEDESC3',                                     '¤¹¤Ç¤Ë¤¢¤ë<code>index.php</code>¤ÈƱ¤¸¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¢¥Ã¥×¥í¡¼¥É¤·¤Þ¤¹¡£');
+define('_BLOGCREATED_SIMPLEDESC4',                                     '¿·¤·¤¤blog¤ÎºîÀ®¤ò´°Î»¤¹¤ë¤¿¤á¤Ë¡¢¤³¤Î¥Õ¥¡¥¤¥ë¤ÎURL¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£(<em>¿ʬ</em>ÆþÎϺѤߤÎÃͤǹç¤Ã¤Æ¤¤¤ë¤È¤Ï»×¤¤¤Þ¤¹¤¬ÊݾڤϤǤ­¤Þ¤»¤ó):');
+define('_BLOGCREATED_ADVANCEDWAY2',                                    'ÊýË¡ 2 :¹âÅÙ¤ÊÊýË¡: ¸½ºß»ÈÍѤ·¤Æ¤¤¤ë¥¹¥­¥ó¤Ë¿·¤·¤¤blog¤òŸ³«¤¹¤ëµ­½Ò¤ò²Ã¤¨¤ë');
+define('_BLOGCREATED_ADVANCEDWAY3',                                    '¿·¤·¤¤blog¤ÎºîÀ®¤ò´°Î»¤¹¤ë¤¿¤á¤ËURL¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£(¤Û¤È¤ó¤É¤Î¾ì¹ç´û¸blog¤ÈƱ¤¸URL¤Ë¤Ê¤ê¤Þ¤¹)');
+
+// Donate!
+define('_ADMINPAGEFOOT_OFFICIALURL',                           'http://japan.nucleuscms.org/');
+define('_ADMINPAGEFOOT_DONATEURL',                                     'http://japan.nucleuscms.org/donate.php');
+define('_ADMINPAGEFOOT_DONATE',                                                '´óÉդˤĤ¤¤Æ');
+define('_ADMINPAGEFOOT_COPYRIGHT',                                     'The Nucleus Group &amp; Nucleus CMS Japan¥Á¡¼¥à');
+
+// Quick menu
+define('_QMENU_MANAGE_SYSTEM',                                         '¥·¥¹¥Æ¥à´Ä¶­');
+
+// REG file
+define('_WINREGFILE_TEXT',                                                     '¡Ö%s¡×¤Ëµ­»ö¤òÅê¹Æ');
+
+// Bookmarklet
+define('_BOOKMARKLET_TITLE',                                           '¥Ö¥Ã¥¯¥Þ¡¼¥¯¥ì¥Ã¥È<!-- ¤È ±¦¥¯¥ê¥Ã¥¯¥á¥Ë¥å¡¼ -->');
+define('_BOOKMARKLET_DESC1',                                           '¥Ö¥Ã¥¯¥Þ¡¼¥¯¥ì¥Ã¥È¡ÊBookmarklet¡Ë¤È¤Ï¡¢Web¥Ö¥é¥¦¥¶¤Î¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿¤·¤Æ»È¤¦JavaScript¥×¥í¥°¥é¥à¤Ç¤¹¡£<br />');
+define('_BOOKMARKLET_DESC2',                                           'Nucleus¤Ë¤Ï¡Ø¤ªµ¤¤ËÆþ¤ê¡Ù¤Þ¤¿¤Ï¡Ø¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Ä¡¼¥ë¥Ð¡¼¡Ù¤ËÅÐÏ¿¤Ç¤­¡¢¥¯¥ê¥Ã¥¯¤Ò¤È¤Ä¤Ç blog ¤Ø¤ÎÅê¹Æ²èÌ̤ò³«¤¯µ¡Ç½¤ò¥Ö¥é¥¦¥¶¤ËÄɲ乤뤳¤È¤¬½ÐÍè¤Þ¤¹¡£<br />');
+define('_BOOKMARKLET_DESC3',                                           'Web¥µ¥¤¥È¤ò¸«¤Æ¤¤¤Æ¤½¤Î¥Ú¡¼¥¸¤Ë¥ê¥ó¥¯¤òÄ¥¤Ã¤¿Åê¹Æ¤ò¤·¤¿¤¤¤È»×¤Ã¤¿»þ¤Ë¥Ö¥Ã¥¯¥Þ¡¼¥¯¥ì¥Ã¥È¤ò»ÈÍѤ¹¤ì¤Ð¡¢¤½¤Î¥µ¥¤¥È(¥Ú¡¼¥¸)¤Ø¤Î¥ê¥ó¥¯¤¬½ñ¤­¹þ¤Þ¤ì¤¿¾õÂ֤ǡ¢');
+define('_BOOKMARKLET_DESC4',                                           '¤µ¤é¤Ë¡¢¤½¤Î¥Ú¡¼¥¸Æâ¤Çʸ¾Ï¤òÁªÂò¤·¤¿¾õÂ֤ǻÈÍѤ·¤¿¾ì¹ç¡¢ÁªÂò¤µ¤ì¤Æ¤¤¤ëʸ¾Ï¤¬¼«Æ°Åª¤Ë°úÍѤµ¤ì¤¿¾õÂ֤ǡ¢Nucleus¤Î¿·µ¬¥¢¥¤¥Æ¥à¤ÎÄɲ妥£¥ó¥É¥¦¤¬¥Ý¥Ã¥×¥¢¥Ã¥×¤·¤Þ¤¹¡£<br />');
+define('_BOOKMARKLET_DESC5',                                           '¤Þ¤¿Windows Internet Explorer¤Î¤ß¤Ç¤¹¤¬¡¢¤³¤Îµ¡Ç½¤ò±¦¥¯¥ê¥Ã¥¯¥á¥Ë¥å¡¼¤ËÅÐÏ¿¤¹¤ë¤³¤È¤â½ÐÍè¤Þ¤¹¡£');
+define('_BOOKMARKLET_BOOKARKLET',                                      '¥Ö¥Ã¥¯¥Þ¡¼¥¯¥ì¥Ã¥È');
+define('_BOOKMARKLET_ANCHOR',                                          '¡Ö%s¡×¤Ëµ­»ö¤òÅê¹Æ');
+define('_BOOKMARKLET_BMARKTEXT',                                       ' ²¼¤Î¥ê¥ó¥¯¤ò¡Ö¤ªµ¤¤ËÆþ¤ê¡×¤â¤·¤¯¤Ï¡Ö¥Ö¥Ã¥¯¥Þ¡¼¥¯¡×¤ËÄɲ䷤Ƥ¯¤À¤µ¤¤¡£ÄɲäλÅÊý¤Ï¤½¤ì¤¾¤ì¤Î¥Ö¥é¥¦¥¶¤Î¥Ø¥ë¥×¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£<br />');
+define('_BOOKMARKLET_BMARKTEST',                                       ' (¥Æ¥¹¥È¤·¤Æ¤ß¤¿¤¤¾ì¹ç¤Ï²¼¤Î¥ê¥ó¥¯¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤)');
+define('_BOOKMARKLET_RIGHTCLICK',                                      '±¦¥¯¥ê¥Ã¥¯¥á¥Ë¥å¡¼¤Ë¥¤¥ó¥¹¥È¡¼¥ë(Windows Internet Explorer¤Î¤ß)');
+define('_BOOKMARKLET_RIGHTLABEL',                                      '±¦¥¯¥ê¥Ã¥¯¥á¥Ë¥å¡¼');
+define('_BOOKMARKLET_RIGHTTEXT1',                                      'Windows¤Ç¥¤¥ó¥¿¡¼¥Í¥Ã¥È¥¨¥¯¥¹¥×¥í¡¼¥é¡¼¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢');
+define('_BOOKMARKLET_RIGHTTEXT2',                                      '¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¤â½ÐÍè¤Þ¤¹<br />(¡Ö³«¤¯¡×¤òÁªÂò¤¹¤ì¤ÐľÀܥ쥸¥¹¥È¥ê¤ËÅÐÏ¿¤·¤Þ¤¹)');
+define('_BOOKMARKLET_RIGHTTEXT3',                                      '¤³¤Î¥¤¥ó¥¹¥È¡¼¥ë¤·¤¿±¦¥¯¥ê¥Ã¥¯¥á¥Ë¥å¡¼¤òɽ¼¨¤¹¤ë¤¿¤á¤Ë¤ÏIE¤ÎºÆµ¯Æ°¤¬É¬ÍפǤ¹¡£');
+define('_BOOKMARKLET_UNINSTALLTT',                                     '¥¢¥ó¥¤¥ó¥¹¥È¡¼¥ë');
+define('_BOOKMARKLET_DELETEBAR',                                       '¡Ö¤ªµ¤¤ËÆþ¤ê¡×¤â¤·¤¯¤Ï¥Ä¡¼¥ë¥Ð¡¼¤«¤é¾Ã¤¹¤Ë¤Ï¡¢Ã±¤Ëºï½ü¤¹¤ë¤À¤±¤Ç¤¹¡£');
+define('_BOOKMARKLET_DELETERIGHTT',                                    '±¦¥¯¥ê¥Ã¥¯¥á¥Ë¥å¡¼¤«¤é¾Ã¤·¤¿¤¤»þ¤Ï¡¢°Ê²¼¤Î¼ê½ç¤òƧ¤ó¤Ç¤¯¤À¤µ¤¤:');
+define('_BOOKMARKLET_DELETERIGHT1',                                    '¥¹¥¿¡¼¥È¥á¥Ë¥å¡¼¤«¤é¡Ö¥Õ¥¡¥¤¥ë¤ò»ØÄꤷ¤Æ¼Â¹Ô...¡×¤òÁªÂò');
+define('_BOOKMARKLET_DELETERIGHT2',                                    '"regedit" ¤ÈÆþÎÏ');
+define('_BOOKMARKLET_DELETERIGHT3',                                    '"OK" ¥Ü¥¿¥ó¤ò²¡¤¹');
+define('_BOOKMARKLET_DELETERIGHT4',                                    '"\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt" ¤ò¥Ä¥ê¡¼¤ÎÃ椫¤é¸¡º÷');
+define('_BOOKMARKLET_DELETERIGHT5',                                    '"¡Ö(¤¢¤Ê¤¿¤Îblog¤Î̾Á°)¡×¤Ëµ­»ö¤òÅê¹Æ" ¥¨¥ó¥È¥ê¤òºï½ü');
+
+define('_BOOKMARKLET_ERROR_SOMETHINGWRONG',                    '²¿¤«¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹');
+define('_BOOKMARKLET_ERROR_COULDNTNEWCAT',                     '¿·¤·¤¤¥«¥Æ¥´¥ê¤òºî¤ë¤³¤È¤¬½ÐÍè¤Þ¤»¤ó¤Ç¤·¤¿');
+
+// BAN
+define('_BAN_EXAMPLE_TITLE',                                           'Îã');
+define('_BAN_EXAMPLE_TEXT',                                                    ': "134.58.253.193"¤ÈÆþÎϤ·¤¿¾ì¹ç¤Ï¡¢¤³¤ÎIP¥¢¥É¥ì¥¹¤ò»ý¤ÄPC1Âæ¤À¤±¤ò¥Ö¥í¥Ã¥¯¤·¤Þ¤¹¡£"134.58.253"¤ÈÆþÎϤ·¤¿¾ì¹ç¤Ï¡¢"134.58.235.0¤«¤é134.58.235.255"¤ÎÈϰϤÎ256¸Ä¤ÎIP¥¢¥É¥ì¥¹¤ò»ý¤ÄPC¤òÁ´¤Æ¥Ö¥í¥Ã¥¯¤·¤Þ¤¹¡£¤³¤ì¤Ï¡¢Á°¼Ô¤ÎIP¥¢¥É¥ì¥¹(134.58.253.193)¤ò´Þ¤ß¤Þ¤¹¡£');
+define('_BAN_IP_CUSTOM',                                                       '¥Ö¥í¥Ã¥¯»ØÄê: ');
+define('_BAN_BANBLOGNAME',                                                     '%s ¤Î¤ß');
+
+// Plugin Options
+define('_PLUGIN_OPTIONS_TITLE',                                                '%s ¤Î¥ª¥×¥·¥ç¥óÀßÄê');
+
+// Plugin file loda error
+define('_PLUGINFILE_COULDNT_BELOADED',                         '¥¨¥é¡¼: ¥×¥é¥°¥¤¥ó¥Õ¥¡¥¤¥ë <strong>%s.php</strong> ¤òÆɤ߹þ¤á¤Þ¤»¤ó¤Ç¤·¤¿¡£¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤¤¡¢¤â¤¯¤Ï»ÈÍÑÃæ¤Î Nucleus ¾å¤ÇÆ°ºî¤µ¤»¤ë¤¿¤á¤ËɬÍפʵ¡Ç½¤¬¥×¥é¥°¥¤¥ó¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£(<a href="?action=actionlog">´ÉÍýÁàºîÍúÎò</a>¤Ë¾ÜºÙ¤¬¤¢¤ê¤Þ¤¹¡£)');
+
+//ITEM add/edit template (for japanese only)
+define('_ITEM_ADDEDITTEMPLATE_FORMAT',                         '¥Õ¥©¡¼¥Þ¥Ã¥È¡§');
+define('_ITEM_ADDEDITTEMPLATE_YEAR',                           'ǯ');
+define('_ITEM_ADDEDITTEMPLATE_MONTH',                          '·î');
+define('_ITEM_ADDEDITTEMPLATE_DAY',                                    'Æü');
+define('_ITEM_ADDEDITTEMPLATE_HOUR',                           '»þ');
+define('_ITEM_ADDEDITTEMPLATE_MINUTE',                         'ʬ');
+
+// Errors
+define('_ERRORS_INSTALLSQL',                                           '\8e¢install.sql\8e£¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤');
+define('_ERRORS_INSTALLDIR',                                           '\8e¢install\8e£¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤');  // <add by shizuki />
+define('_ERRORS_INSTALLPHP',                                           '\8e¢install.php\8e£¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤');
+define('_ERRORS_UPGRADESDIR',                                          '\8e¢nucleus/upgrades\8e£¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤');
+define('_ERRORS_CONVERTDIR',                                           '\8e¢nucleus/convert\8e£¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤');
+define('_ERRORS_CONFIGPHP',                                                    '\8e¢config.php\8e£¥Õ¥¡¥¤¥ë¤òÆɤ߼è¤êÀìÍÑ(\8e¢chmod 444\8e£Åù)¤Ë¤·¤Æ¤¯¤À¤µ¤¤');
+define('_ERRORS_STARTUPERROR1',                                                '<p>°ì¤Ä¡¢¤Þ¤¿¤Ï¤½¤ì°Ê¾å¤ÎNucleusCMS¤Î¥¤¥ó¥¹¥È¡¼¥ë(¥¢¥Ã¥×¥°¥ì¡¼¥É)ÍÑ¥Õ¥¡¥¤¥ë¤¬¥µ¡¼¥Ð¾å¤Ë»Ä¤Ã¤Æ¤¤¤ë¡¢¤â¤·¤¯¤Ï½ñ¤­¹þ¤ß²Äǽ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</p><p>¤³¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤òºï½ü¡¢¤Þ¤¿¤Ï¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤òÊѹ¹¤·¤Æ¥»¥­¥å¥ê¥Æ¥£¤ò³ÎÊݤ·¤Æ¤¯¤À¤µ¤¤¡£Nucleus¤¬¸«¤Ä¤±¤¿¥Õ¥¡¥¤¥ë¤Î¤¤¤¯¤Ä¤«¤ò¼¡¤Ë¼¨¤·¤Þ¤¹¡£</p> <ul><li>');
+define('_ERRORS_STARTUPERROR2',                                                '</li></ul><p>¤³¤Î·Ù¹ð¤òɽ¼¨¤µ¤»¤¿¤¯¤Ê¤¤¾ì¹ç¤Ï¡¢<code>globalfunctions.php</code>¤Î<code>$CONF[\'alertOnSecurityRisk\']</code>¤ÎÃͤò<code>0</code>¤Ë¤¹¤ë¤«¡¢Æ±ÍͤÎÆâÍƤò<code>config.php</code>¤ÎºÇ¸å¤Ëµ­½Ò¤·¤Þ¤¹(¥»¥­¥å¥ê¥Æ¥£¥ì¥Ù¥ë¤¬²¼¤¬¤ê¤Þ¤¹)</p>');
+define('_ERRORS_STARTUPERROR3',                                                '¥»¥­¥å¥ê¥Æ¥£ ¥ê¥¹¥¯¤Î·Ù¹ð');
+
+// PluginAdmin tickets by javascript
+define('_PLUGINADMIN_TICKETS_JAVASCRIPT',                      '<p><b>¥Á¥±¥Ã¥È¤Î¼«Æ°È¯¹ÔÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿</b></p>');
+
+// Global settings disablesite URL
+define('_SETTINGS_DISABLESITEURL',                                     'žÁ÷Àè¤ÎURL:');
+
+// Skin import/export
+define('_SKINIE_SEELEMENT_UNEXPECTEDTAG',                      'ͽ´ü¤·¤Ê¤¤¥¿¥°');
+define('_SKINIE_ERROR_FAILEDOPEN_FILEURL',                     '¥Õ¥¡¥¤¥ë¡¢¤Þ¤¿¤ÏURL¤ò³«¤¯»ö¤¬½ÐÍè¤Þ¤»¤ó');
+define('_SKINIE_NAME_CLASHES_DETECTED',                                '¥¹¥­¥ó/¥Æ¥ó¥×¥ì¡¼¥È¤Ë̾Á°¤ÎƱ¤¸¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£allowOverwrite¤ò1¤ËÀßÄꤷ¤Æ¡¢¾å½ñ¤­¥â¡¼¥É¤ÇºÆÅټ¹Ԥ·¤Æ¤¯¤À¤µ¤¤¡£');
+
+// ACTIONS.php parse_commentform
+define('_ACTIONURL_NOTLONGER_PARAMATER',                       '\8e¢action.php\8e£¤ÎURL¤Ï¥³¥á¥ó¥È¥Õ¥©¡¼¥àÍѤÎÊÑ¿ô¤Î¥Ñ¥é¥á¡¼¥¿¡¼¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤ÎÀßÄê¤Ï\8e¢¥°¥í¡¼¥Ð¥ëÀßÄê\8e£¤Ë°ÜÆ°¤·¤Þ¤·¤¿');
+
+// ADMIN.php addToTemplate 'Query error: '
+define('_ADMIN_SQLDIE_QUERYERROR',                                     '¥¯¥¨¥ê ¥¨¥é¡¼: ');
+
+// backup.php Backup WARNING
+define('_BACKUP_BACKUPFILE_TITLE',                                     'Nucleus CMS ¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Ç¤¹');
+define('_BACKUP_BACKUPFILE_BACKUPDATE',                                '¥Ð¥Ã¥¯¥¢¥Ã¥×¤·¤¿Æü:');
+define('_BACKUP_BACKUPFILE_NUCLEUSVERSION',                    'Nucleus CMS ¤Î¥Ð¡¼¥¸¥ç¥ó:');
+define('_BACKUP_BACKUPFILE_DATABASE_NAME',                     'Nucleus CMS ¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î̾Á°:');
+define('_BACKUP_BACKUPFILE_TABLE_NAME',                                '¥Æ¡¼¥Ö¥ë¤Î¹½Â¤ :');
+define('_BACKUP_BACKUPFILE_TABLEDATAFOR',                      '%s ¥Æ¡¼¥Ö¥ë¤Î¥À¥ó¥×¥Ç¡¼¥¿');
+define('_BACKUP_WARNING_NUCLEUSVERSION',                               'Ãí°Õ¡ª: ¥Ð¥Ã¥¯¥¢¥Ã¥×¤«¤é¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÉü¸µ¤¹¤ëºÝ¤Ï¡¢Nucleus¤Î¥Ð¡¼¥¸¥ç¥ó¤¬¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºîÀ®¤·¤¿»þ¤ÈƱ¤¸¤â¤Î¤«¤è¤¯³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_BACKUP_RESTOR_NOFILEUPLOADED',                                '¥Õ¥¡¥¤¥ë¤¬¥¢¥Ã¥×¥í¡¼¥É¤µ¤ì¤Æ¤¤¤Þ¤»¤ó');
+define('_BACKUP_RESTOR_UPLOAD_ERROR',                          '¥¢¥Ã¥×¥í¡¼¥ÉÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿');
+define('_BACKUP_RESTOR_UPLOAD_NOCORRECTTYPE',          '¥¢¥Ã¥×¥í¡¼¥É¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î·Á¼°¤¬ÉÔÀµ¤Ç¤¹');
+define('_BACKUP_RESTOR_UPLOAD_NOZLIB',                         '°µ½Ì·Á¼°¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ò²òÅà¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿(\8e¢zlib\8e£¥é¥¤¥Ö¥é¥ê¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤»¤ó)');
+define('_BACKUP_RESTOR_SQL_ERROR',                                     'SQL ¥¨¥é¡¼: ');
+
+// BLOG.php addTeamMember
+define('_TEAM_ADD_NEWTEAMMEMBER',                                      '%s(ID=%d) ¤ò¡¢¥Ö¥í¥° "%s" ¤Î¥Á¡¼¥à¤Ë²Ã¤¨¤Þ¤·¤¿');
+
+// ADMIN.php systemoverview()
+define('_ADMIN_SYSTEMOVERVIEW_HEADING',                                '¥·¥¹¥Æ¥à´Ä¶­°ìÍ÷');
+define('_ADMIN_SYSTEMOVERVIEW_PHPANDMYSQL',                    'PHP ¤È MySQL');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONS',                       '¥Ð¡¼¥¸¥ç¥ó');
+define('_ADMIN_SYSTEMOVERVIEW_PHPVERSION',                     'PHP ¤Î¥Ð¡¼¥¸¥ç¥ó');
+define('_ADMIN_SYSTEMOVERVIEW_MYSQLVERSION',           'MySQL ¤Î¥Ð¡¼¥¸¥ç¥ó');
+define('_ADMIN_SYSTEMOVERVIEW_SETTINGS',                       'PHP ¤ÎÀßÄê');
+define('_ADMIN_SYSTEMOVERVIEW_GDLIBRALY',                      'GD ¥é¥¤¥Ö¥é¥ê');
+define('_ADMIN_SYSTEMOVERVIEW_MODULES',                                'Apache ¥â¥¸¥å¡¼¥ë');
+define('_ADMIN_SYSTEMOVERVIEW_ENABLE',                         'Í­¸ú');
+define('_ADMIN_SYSTEMOVERVIEW_DISABLE',                                '̵¸ú');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSSYSTEM',          'Nucleus ¤Î¥·¥¹¥Æ¥à¤Ë¤Ä¤¤¤Æ');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSVERSION',         'Nucleus ¤Î¥Ð¡¼¥¸¥ç¥ó');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSPATCHLEVEL',      'Nucleus ¤Î¥Ñ¥Ã¥Á¥ì¥Ù¥ë');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSSETTINGS',                '½ÅÍפÊÀßÄê');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK',           '¥Ð¡¼¥¸¥ç¥ó¥Á¥§¥Ã¥¯');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TXT',       '¤è¤ê¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Î¥ê¥ê¡¼¥¹¤¬Ìµ¤¤¤«¡¢¸ø¼°¥µ¥¤¥È¤Ç¥Á¥§¥Ã¥¯¤Ç¤­¤Þ¤¹: ');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL',       'http://japan.nucleuscms.org/version.php?v=%d&amp;pl=%d');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE',     'ºÇ¿·¤Î¥Ð¡¼¥¸¥ç¥ó¤ò¥Á¥§¥Ã¥¯');
+define('_ADMIN_SYSTEMOVERVIEW_NOT_ADMIN',                      '¤³¤Î²èÌ̤ò±ÜÍ÷¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó');
+
+// ENCAPSULATE.php
+define('_ENCAPSULATE_ENCAPSULATE_NOENTRY',                     '¥¨¥ó¥È¥ê¡¼¤¬¤¢¤ê¤Þ¤»¤ó');
+
+// globalfunctions.php
+define('_GFUNCTIONS_LOGINPCSHARED_YES',                                '¶¦Í­PC¤«¤é¤Î¥í¥°¥¤¥ó');
+define('_GFUNCTIONS_LOGINPCSHARED_NO',                         '¶¦Í­¤Ç¤Ï¤Ê¤¤PC¤«¤é¤Î¥í¥°¥¤¥ó');
+define('_GFUNCTIONS_LOGINSUCCESSFUL_TXT',                      '%s ¤¬¥í¥°¥¤¥ó¤·¤Þ¤·¤¿ (%s)');
+define('_GFUNCTIONS_LOGINFAILED_TXT',                          '%s ¤¬¥í¥°¥¤¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿');
+define('_GFUNCTIONS_LOGOUT_TXT',                                       '%s ¤¬¥í¥°¥¢¥¦¥È¤·¤Þ¤·¤¿');
+define('_GFUNCTIONS_HEADERSALREADYSENT_FILE',          '<code>%s</code> ¤Î <code>%s</code> ¹ÔÌܤÇ');
+define('_GFUNCTIONS_HEADERSALREADYSENT_TITLE',         'HTTP¥Ø¥Ã¥À¤ÏÁ÷¿®ºÑ¤ß¤Ç¤¹');
+define('_GFUNCTIONS_HEADERSALREADYSENT_TXT',           '<p>%s¤¹¤Ç¤Ë¥Ú¡¼¥¸¤ÎHTTP¥Ø¥Ã¥À¤¬Á÷½Ð¤µ¤ì¤Æ¤ª¤ê¡¢Nucleus¤¬Àµ¾ï¤ËÆ°ºî¤·¤Ê¤¯¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£</p><p><code>config.php</code>¤ä¥é¥ó¥²¡¼¥¸¥Õ¥¡¥¤¥ë¡¢¤½¤Î¾¥×¥é¥°¥¤¥ó¤Î¥Õ¥¡¥¤¥ë¤Î½ª¤ï¤ê¤Ë¡¢Í¾Ê¬¤Ê²þ¹Ô¤äʸ»úÎ󤬤ʤ¤¤«³Îǧ¤·¤Æ¤â¤¦¤¤¤Á¤É¥¢¥¯¥»¥¹¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£</p><p>º¬ËÜŪ¤Ê²ò·è¤ò¤»¤º¤Ë¤³¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤µ¤»¤Ê¤¯¤¹¤ë¤Ë¤Ï¡¢<code>globalfunctions.php</code>¤ÎËÁƬ¤Î<code>$CONF[\'alertOnHeadersSent\']</code>¤ò<code>0</code>¤ËÀßÄꤷ¤Þ¤¹¡£</p>');
+define('_GFUNCTIONS_PARSEFILE_FILEMISSING',                    '¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó');
+define('_GFUNCTIONS_AN_ERROR_OCCURRED',                                '¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿');
+define('_GFUNCTIONS_YOU_AERNT_LOGGEDIN',                       '¥í¥°¥¤¥ó¤·¤Æ¤¤¤Þ¤»¤ó');
+
+// MANAGER.php
+define('_MANAGER_PLUGINFILE_NOCLASS',                          "¥×¥é¥°¥¤¥ó¡Ö%s¡×¤òÆɤ߹þ¤á¤Þ¤»¤ó¤Ç¤·¤¿(¥Õ¥¡¥¤¥ëÆâ¤Ë¥×¥é¥°¥¤¥ó¥¯¥é¥¹¤¬Â¸ºß¤·¤Þ¤»¤ó)");
+define('_MANAGER_PLUGINTABLEPREFIX_NOTSUPPORT',                "¥×¥é¥°¥¤¥ó¡Ö%s¡×¤òÆɤ߹þ¤á¤Þ¤»¤ó¤Ç¤·¤¿(\8e¢SqlTablePrefix\8e£¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó)");
+
+// mysql.php
+define('_NO_SUITABLE_MYSQL_LIBRARY',                           "<p>Nucleus¤òÆ°¤«¤¹¤Î¤ËɬÍפÊmySQLÍѤΥ饤¥Ö¥é¥ê¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤»¤ó</p>");
+
+// PLUGIN.php
+define('_ERROR_PLUGIN_NOSUCHACTION',                           '»ØÄꤵ¤ì¤¿¥¢¥¯¥·¥ç¥ó¤Ï¸ºß¤·¤Þ¤»¤ó¡£');
+
+// PLUGINADMIN.php
+define('_ERROR_INVALID_PLUGIN',                                                'ÉÔÀµ¤Ê¥×¥é¥°¥¤¥ó¤Ç¤¹');
+
+// showlist.php
+define('_LIST_PLUGS_DEPREQ',                                           '¤³¤Î¥×¥é¥°¥¤¥ó¤Ë°Í¸¤¹¤ë¥×¥é¥°¥¤¥ó:');
+define('_LIST_SKIN_PREVIEW',                                           "'%s' ¥¹¥­¥ó¤Î¥×¥ì¥Ó¥å¡¼");
+define('_LIST_SKIN_PREVIEW_VIEWLARGER',                                "Â礭¤Ê²èÁü¤ò¸«¤ë");
+define('_LIST_SKIN_README',                                                    "'%s' ¥¹¥­¥ó¤Ë¤Ä¤¤¤Æ¤â¤Ã¤È¾Ü¤·¤¯");
+define('_LIST_SKIN_README_TXT',                                                'Read me');
+
+// BLOG.php createNewCategory()
+define('_CREATED_NEW_CATEGORY_NAME',                           '¿·¤·¤¤¥«¥Æ¥´¥ê');
+define('_CREATED_NEW_CATEGORY_DESC',                           '¿·¤·¤¤¥«¥Æ¥´¥ê¤ÎÀâÌÀ');
+
+// ADMIN.php blog settings
+define('_EBLOG_CURRENT_TEAM_MEMBER',                           '¤³¤Î¥Ö¥í¥°¥Á¡¼¥à¤Î¸½ºß¤Î¥á¥ó¥Ð¡¼¡§');
+
+// HTML outputs
+define('_HTML_XML_NAME_SPACE_AND_LANG_CODE',           'xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"');
+
+// Language Files
+define('_LANGUAGEFILES_JAPANESE-UTF8',                         'ÆüËܸì - ÆüËܸì (EUC-JP)');
+define('_LANGUAGEFILES_JAPANESE-EUC',                          'ÆüËܸì - ÆüËܸì (EUC)');
+define('_LANGUAGEFILES_JAPANESE-SJIS',                         'ÆüËܸì - ÆüËܸì (Shift-JIS)');
+define('_LANGUAGEFILES_ENGLISH-UTF8',                          '±Ñ¸ì - English (EUC-JP)');
+define('_LANGUAGEFILES_ENGLISH',                                       '±Ñ¸ì - English (iso-8859-1)');
+/*
+define('_LANGUAGEFILES_BULGARIAN',                                     '¥Ö¥ë¥¬¥ê¥¢¸ì - &#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080; (iso-8859-5)');
+define('_LANGUAGEFILES_CATALAN',                                       '¥«¥¿¥é¥ó¸ì - Catal&agrave; (iso-8859-1)');
+define('_LANGUAGEFILES_CHINESE-GBK',                           '´ÊÂλúÃæ¹ñ¸ì - &#31777;&#20307;&#23383;&#20013;&#25991; (gbk)');
+define('_LANGUAGEFILES_SIMCHINESE',                                    '´ÊÂλúÃæ¹ñ¸ì - &#31777;&#20307;&#23383;&#20013;&#25991; (gb2312)');
+define('_LANGUAGEFILES_CHINESE-UTF8',                          '´ÊÂλúÃæ¹ñ¸ì - &#31777;&#20307;&#23383;&#20013;&#25991; (EUC-JP)');
+define('_LANGUAGEFILES_CHINESEB5',                                     'ÈËÂλúÃæ¹ñ¸ì - &#32321;&#20307;&#23383;&#20013;&#25991; (big5)');
+define('_LANGUAGEFILES_CHINESEB5-UTF8',                                'ÈËÂλúÃæ¹ñ¸ì - &#32321;&#20307;&#23383;&#20013;&#25991; (EUC-JP)');
+define('_LANGUAGEFILES_TRADITIONAL_CHINESE',           'ÈËÂλúÃæ¹ñ¸ì - &#32321;&#20307;&#23383;&#20013;&#25991; (big5)');
+define('_LANGUAGEFILES_TRADITIONAL_CHINESE-EUC-JP',    'ÈËÂλúÃæ¹ñ¸ì - &#32321;&#20307;&#23383;&#20013;&#25991; (EUC-JP)');
+define('_LANGUAGEFILES_CZECH',                                         '¥Á¥§¥³¸ì - &#268;esky (windows-1250)');
+define('_LANGUAGEFILES_FINNISH',                                       '¥Õ¥£¥ó¥é¥ó¥É¸ì - Suomi (iso-8859-1)');
+define('_LANGUAGEFILES_FRENCH',                                                '¥Õ¥é¥ó¥¹¸ì - Fran&ccedil;ais (iso-8859-1)');
+define('_LANGUAGEFILES_GALEGO',                                                '¥¬¥ê¥·¥¢¸ì - Galego (iso-8859-1)');
+define('_LANGUAGEFILES_GERMAN',                                                '¥É¥¤¥Ä¸ì - Deutsch (iso-8859-1)');
+define('_LANGUAGEFILES_HUNGARIAN',                                     '¥Ï¥ó¥¬¥ê¡¼¸ì - Magyar (iso-8859-2)');
+define('_LANGUAGEFILES_ITALIANO',                                      '¥¤¥¿¥ê¥¢¸ì - Italiano (iso-8859-1)');
+define('_LANGUAGEFILES_KOREAN-EUC-KR',                         '´Ú¹ñ¸ì - &#54620;&#44397;&#50612; (euc-kr)');
+define('_LANGUAGEFILES_KOREAN-UTF',                                    '´Ú¹ñ¸ì - &#54620;&#44397;&#50612; (EUC-JP)');
+define('_LANGUAGEFILES_LATVIAN',                                       '¥é¥È¥Ó¥¢¸ì - Latvie&scaron;u (windows-1257)');
+define('_LANGUAGEFILES_NEDERLANDS',                                    '¥ª¥é¥ó¥À¸ì - Nederlands (iso-8859-15)');
+define('_LANGUAGEFILES_PERSIAN',                                       '¥Ú¥ë¥·¥¢¸ì - &#1601;&#1575;&#1585;&#1587;&#1740; (EUC-JP)');
+define('_LANGUAGEFILES_PORTUGUESE_BRAZIL',                     '¥Ö¥é¥¸¥ë-¥Ý¥ë¥È¥¬¥ë¸ì - Portugu&ecirc;s (iso-8859-1)');
+define('_LANGUAGEFILES_RUSSIAN',                                       '¥í¥·¥¢¸ì - &#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081; (windows-1251)');
+define('_LANGUAGEFILES_SLOVAK',                                                '¥¹¥í¥Ù¥­¥¢¸ì - Sloven&#269;ina (ISO-8859-2)');
+define('_LANGUAGEFILES_SPANISH-UTF8',                          '¥¹¥Ú¥¤¥ó¸ì - Espa&ntilde;ol (EUC-JP)');
+define('_LANGUAGEFILES_SPANISH',                                       '¥¹¥Ú¥¤¥ó¸ì - Espa&ntilde;ol (iso-8859-1)');
+*/
+
+// </add by shizuki>
+
+/********************************************
+ *        End New for 3.40                  *
+ ********************************************/
+
+// START changed/added after 3.3 START
+define('_AUTOSAVEDRAFT',                                       '¥É¥é¥Õ¥ÈÊݸ¾õ¶·');
+define('_AUTOSAVEDRAFT_LASTSAVED',                     'ºÇ½ª¥É¥é¥Õ¥ÈÊݸÆü»þ: ');
+define('_AUTOSAVEDRAFT_NOTYETSAVED',           'Êݸ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó');
+define('_AUTOSAVEDRAFT_NOW',                           '¥É¥é¥Õ¥ÈÊݸ');
+define('_SKIN_PARTS_SPECIAL',                          '¥¹¥Ú¥·¥ã¥ë¥¹¥­¥ó¥Ñ¡¼¥Ä');
+define('_ERROR_SKIN_PARTS_SPECIAL_FORMAT',     '±Ñ¿ô»ú°Ê³°¤Îʸ»ú¤Ï»È¤¨¤Þ¤»¤ó');
+define('_ERROR_SKIN_PARTS_SPECIAL_DELETE',     '¤³¤Î¥¹¥­¥ó¥Ñ¡¼¥Ä¤òºï½ü¤Ç¤­¤Þ¤»¤ó');
+define('_CONFIRMTXT_SKIN_PARTS_SPECIAL',       'ËÜÅö¤Ë¤³¤Î¥¹¥Ú¥·¥ã¥ë¥¹¥­¥ó¥Ñ¡¼¥Ä¤òºï½ü¤·¤Æ¤â¤¤¤¤¤Ç¤¹¤«¡©');
+define('_ERROR_PLUGIN_LOAD',                           'Nucleus¤Î¥×¥é¥°¥¤¥ó¤È¤·¤ÆɬÍפʥ᥽¥Ã¥É¤¬¥×¥é¥°¥¤¥ó¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¡¢¥×¥é¥°¥¤¥ó¥Õ¥¡¥¤¥ë¤¬¸«Åö¤¿¤ê¤Þ¤»¤ó¡£(<a href="?action=actionlog">´ÉÍýÁàºîÍúÎò</a>¤Ë¾ÜºÙ¤¬¤¢¤ê¤Þ¤¹¡£)');
+// END changed/added after 3.3 END
+
+// START changed/added after 3.22 START
+define('_SEARCHFORM_QUERY',                                    '¸¡º÷¥­¡¼¥ï¡¼¥É');
+define('_ERROR_EMAIL_REQUIRED',                                '¥á¡¼¥ë¥¢¥É¥ì¥¹¤¬É¬ÍפǤ¹');
+define('_COMMENTFORM_MAIL',                                    '¤¢¤Ê¤¿¤Î¥µ¥¤¥È¤ÎURL:');
+define('_COMMENTFORM_EMAIL',                           '¥á¡¼¥ë¥¢¥É¥ì¥¹:');
+define('_EBLOG_REQUIREDEMAIL',                         '¥³¥á¥ó¥È»þ¤Ë¥á¡¼¥ë¥¢¥É¥ì¥¹¤òÍ׵᤹¤ë');
+define('_ERROR_COMMENTS_SPAM',              '¤¢¤Ê¤¿¤Î¥³¥á¥ó¥È¤Ï¡¢¥¹¥Ñ¥à¥Æ¥¹¥È¤Î·ë²ÌµñÈݤµ¤ì¤Þ¤·¤¿');
+// END changed/added after 3.22 END
+
+// START changed/added after 3.15 START
+
+define('_LIST_PLUG_SUBS_NEEDUPDATE',           '\8e¢ÅÐÏ¿¥ê¥¹¥È¤Î¥¢¥Ã¥×¥Ç¡¼¥È\8e£¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¥¤¥Ù¥ó¥È¾ðÊó¤ò¹¹¿·¤·¤Æ¤¯¤À¤µ¤¤');
+define('_LIST_PLUGS_DEP',                                      '°Í¸¤¹¤ë¥×¥é¥°¥¤¥ó:');
+
+// END changed/added after 3.15
+
+// START changed/added after 3.1 START
+
+// comments list per weblog
+define('_COMMENTS_BLOG',                                       '¥³¥á¥ó¥È¤Î¥ê¥¹¥È:');
+define('_NOCOMMENTS_BLOG',                                     '¤³¤Îblog¤Ë¤Ï¤Þ¤À¥³¥á¥ó¥È¤¬¤Ä¤±¤é¤ì¤Æ¤¤¤Þ¤»¤ó');
+define('_BLOGLIST_COMMENTS',                           '¥³¥á¥ó¥È');
+define('_BLOGLIST_TT_COMMENTS',                                '¤³¤Îblog¤Ë¤Ä¤±¤é¤ì¤¿¥³¥á¥ó¥È¤Î¥ê¥¹¥È');
+
+
+// for use in archivetype-skinvar
+define('_ARCHIVETYPE_DAY',                                     'Æü');
+define('_ARCHIVETYPE_MONTH',                           '·î');
+
+// tickets (prevents malicious users to trick an admin to perform actions he doesn't want)
+define('_ERROR_BADTICKET',                                     '¥Á¥±¥Ã¥È¤¬ÉÔÀµ¡¢¤â¤·¤¯¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹');
+
+// cookie prefix
+define('_SETTINGS_COOKIEPREFIX',                       'Cookie ¥×¥ì¥Õ¥£¥Ã¥¯¥¹');
+
+// account activation
+define('_ERROR_NOLOGON_NOACTIVATE',                    'ǧ¾ÚÍÑ¥ê¥ó¥¯¤òÁ÷¿®¤Ç¤­¤Þ¤»¤ó¡£¤¢¤Ê¤¿¤Î¥í¥°¥¤¥ó¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£');
+define('_ERROR_ACTIVATE',                                      'ǧ¾Ú¥­¡¼¤Ï¸ºß¤·¤Ê¤¤¤«¡¢Ìµ¸ú¤«¡¢¤¢¤ë¤¤¤Ï´ü¸ÂÀÚ¤ì¤Ç¤¹¡£');
+define('_ACTIONLOG_ACTIVATIONLINK',                    'ǧ¾ÚÍÑ¥ê¥ó¥¯¤¬Á÷¿®¤µ¤ì¤Þ¤·¤¿¡£');
+define('_MSG_ACTIVATION_SENT',                         'ǧ¾ÚÍÑ¥ê¥ó¥¯¤ò¥á¡¼¥ë¤ÇÁ÷¿®¤·¤Þ¤·¤¿¡£');
+
+// activation link emails
+define('_ACTIVATE_REGISTER_MAIL',                      "¤³¤ó¤Ë¤Á¤Ï <%memberName%>\n\n<%siteName%> (<%siteUrl%>)¤Ë¤ª¤±¤ë¥¢¥«¥¦¥ó¥È¤òÍ­¸ú¤Ë¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£\n²¼¤Î¥ê¥ó¥¯¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¥¢¥¯¥Æ¥£¥Ù¡¼¥·¥ç¥ó¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£¡§\n\n\t<%activationUrl%>\n\n¥¢¥¯¥Æ¥£¥Ù¡¼¥·¥ç¥óÍѤÎURL¤ÎÍ­¸ú´ü¸Â¤Ï2Æü´Ö¤Ç¤¹¡£¤½¤ì°Ê¹ß¤Ï̵¸ú¤Ë¤Ê¤ê¤Þ¤¹¤Î¤ÇÁá¤á¤Ë¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£");
+define('_ACTIVATE_REGISTER_MAILTITLE',         "¥¢¥«¥¦¥ó¥È'<%memberName%>'¤Î¥¢¥¯¥Æ¥£¥Ù¡¼¥·¥ç¥ó");
+define('_ACTIVATE_REGISTER_TITLE',                     '¤è¤¦¤³¤½ <%memberName%>');
+define('_ACTIVATE_REGISTER_TEXT',                      '¥¢¥«¥¦¥ó¥ÈºîÀ®¤Ï¤Û¤Ü´°Î»¤·¤Þ¤·¤¿¡£²¼¤Î¥Õ¥©¡¼¥à¤Ç¥¢¥«¥¦¥ó¥È¤Î¥Ñ¥¹¥ï¡¼¥É¤òÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£');
+define('_ACTIVATE_FORGOT_MAIL',                                "¤³¤ó¤Ë¤Á¤Ï <%memberName%>\n\n²¼¤Î¥ê¥ó¥¯¤«¤é¡¢¤³¤Î<%siteName%> (<%siteUrl%>)¤Ë¤ª¤±¤ë¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£\n\n\t<%activationUrl%>\n\n¥¢¥¯¥Æ¥£¥Ù¡¼¥·¥ç¥óÍѤÎURL¤ÎÍ­¸ú´ü¸Â¤Ï2Æü´Ö¤Ç¤¹¡£¤½¤ì°Ê¹ß¤Ï̵¸ú¤Ë¤Ê¤ê¤Þ¤¹¤Î¤ÇÁá¤á¤Ë¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£");
+define('_ACTIVATE_FORGOT_MAILTITLE',           "¥¢¥«¥¦¥ó¥È'<%memberName%>'¤ÎºÆǧ¾Ú");
+define('_ACTIVATE_FORGOT_TITLE',                       '¤è¤¦¤³¤½ <%memberName%>');
+define('_ACTIVATE_FORGOT_TEXT',                                '²¼¤Î¥Õ¥©¡¼¥à¤Ç¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É¤¬ÀßÄê¤Ç¤­¤Þ¤¹¡£');
+define('_ACTIVATE_CHANGE_MAIL',                                "¤³¤ó¤Ë¤Á¤Ï <%memberName%>\n\n¥á¡¼¥ë¥¢¥É¥ì¥¹¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿¡£\n\n<%siteName%> (<%siteUrl%>)¤Ë¤ª¤±¤ë¥¢¥«¥¦¥ó¥È¤òºÆǧ¾Ú¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£\n²¼¤Î¥ê¥ó¥¯¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¥¢¥¯¥Æ¥£¥Ù¡¼¥·¥ç¥ó¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£¡§\n\n\t<%activationUrl%>\n\n¥¢¥¯¥Æ¥£¥Ù¡¼¥·¥ç¥óÍѤÎURL¤ÎÍ­¸ú´ü¸Â¤Ï2Æü´Ö¤Ç¤¹¡£¤½¤ì°Ê¹ß¤Ï̵¸ú¤Ë¤Ê¤ê¤Þ¤¹¤Î¤ÇÁá¤á¤Ë¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£");
+define('_ACTIVATE_CHANGE_MAILTITLE',           "¥¢¥«¥¦¥ó¥È'<%memberName%>'¤ÎºÆǧ¾Ú");
+define('_ACTIVATE_CHANGE_TITLE',                       '¤è¤¦¤³¤½ <%memberName%>');
+define('_ACTIVATE_CHANGE_TEXT',                                '¥á¡¼¥ë¥¢¥É¥ì¥¹¤ÎÊѹ¹¤¬³Îǧ¤µ¤ì¤Þ¤·¤¿¡£');
+define('_ACTIVATE_SUCCESS_TITLE',                      '¥¢¥¯¥Æ¥£¥Ù¡¼¥·¥ç¥ó¤ËÀ®¸ù¤·¤Þ¤·¤¿');
+define('_ACTIVATE_SUCCESS_TEXT',                       '¥¢¥¯¥Æ¥£¥Ù¡¼¥·¥ç¥ó¤ËÀ®¸ù¤·¤Þ¤·¤¿¡£');
+define('_MEMBERS_SETPWD',                                      '¥Ñ¥¹¥ï¡¼¥É¤òÀßÄꤹ¤ë');
+define('_MEMBERS_SETPWD_BTN',                          '¥Ñ¥¹¥ï¡¼¥É¤òÀßÄê');
+define('_QMENU_ACTIVATE',                                      '¥¢¥¯¥Æ¥£¥Ù¡¼¥·¥ç¥ó');
+define('_QMENU_ACTIVATE_TEXT',                         '<p>¥¢¥¯¥Æ¥£¥Ù¡¼¥·¥ç¥ó¤ò´°Î»¤¹¤ì¤Ð¡¢<a href="index.php?action=showlogin">¥í¥°¥¤¥ó</a>¤·¤Æ¤«¤éÍøÍѤǤ­¤Þ¤¹¡£</p>');
+
+define('_PLUGS_BTN_UPDATE',                                    'ÅÐÏ¿¥ê¥¹¥È¤Î¥¢¥Ã¥×¥Ç¡¼¥È');
+
+// global settings
+define('_SETTINGS_JSTOOLBAR',                          'Javascript¥Ä¡¼¥ë¥Ð¡¼¤Î¥¹¥¿¥¤¥ë');
+define('_SETTINGS_JSTOOLBAR_FULL',                     '¥Õ¥ë¡¦¥Ä¡¼¥ë¥Ð¡¼(IE)');
+define('_SETTINGS_JSTOOLBAR_SIMPLE',           '¥·¥ó¥×¥ë¡¦¥Ä¡¼¥ë¥Ð¡¼(IE°Ê³°)');
+define('_SETTINGS_JSTOOLBAR_NONE',                     '¥Ä¡¼¥ë¥Ð¡¼¤ò»È¤ï¤Ê¤¤');
+define('_SETTINGS_URLMODE_HELP',                       '(»²¹Í¡§<a href="documentation/tips.html#searchengines-fancyurls">FancyURL¤òÍ­¸ú¤Ë¤¹¤ëÊýË¡</a>)');
+
+// extra plugin settings part when editing categories/members/blogs/...
+define('_PLUGINS_EXTRA',                                       '¥×¥é¥°¥¤¥ó¤Ë¤è¤ëÄɲÃÀßÄê');
+
+// itemlist info column keys
+define('_LIST_ITEM_BLOG',                                      'blog:');
+define('_LIST_ITEM_CAT',                                       'cat:');
+define('_LIST_ITEM_AUTHOR',                                    'Ãø¼Ô:');
+define('_LIST_ITEM_DATE',                                      'ÆüÉÕ:');
+define('_LIST_ITEM_TIME',                                      '»þ´Ö:');
+
+// indication of registered members in comments list
+define('_LIST_COMMENTS_MEMBER',                        '(¥á¥ó¥Ð¡¼)');
+
+// batch operations
+define('_BATCH_WITH_SEL',                                      'ÁªÂò¤µ¤ì¤¿¤â¤Î¤ò¡§');
+define('_BATCH_EXEC',                                          '¼Â¹Ô');
+
+// quickmenu
+// Note: _USER_SETTINGS ¤È _MANAGE_SETTINGS ¤Ï 3.3 °Ê¹ß¡¢¥ª¥ê¥¸¥Ê¥ëÈǤÏ
+// Êѹ¹¤µ¤ì¤Þ¤·¤¿¤¬¡¢ÆüËܸìÈǤÏɽµ­¤ò¤½¤Î¤Þ¤Þ¤È¤·¤Þ¤¹¡£
+// ´Ö°ã¤Ã¤Æ¹¹¿·¤·¤Ê¤¤¤è¤¦¤Ë!!
+define('_QMENU_HOME',                                          '´ÉÍý¥Û¡¼¥à');
+define('_QMENU_ADD',                                           '¥¢¥¤¥Æ¥àÄɲÃ');
+define('_QMENU_ADD_SELECT',                                    '- blogÁªÂò -');
+define('_QMENU_USER_SETTINGS',                         '¤¢¤Ê¤¿¤ÎÀßÄê');
+define('_QMENU_USER_ITEMS',                                    '¤¢¤Ê¤¿¤Î¥¢¥¤¥Æ¥à');
+define('_QMENU_USER_COMMENTS',                         '¤¢¤Ê¤¿¤Î¥³¥á¥ó¥È');
+define('_QMENU_MANAGE',                                                '¥µ¥¤¥È´ÉÍý');
+define('_QMENU_MANAGE_LOG',                                    '´ÉÍýÁàºîÍúÎò');
+define('_QMENU_MANAGE_SETTINGS',                       '¥°¥í¡¼¥Ð¥ëÀßÄê');
+define('_QMENU_MANAGE_MEMBERS',                                '¥á¥ó¥Ð¡¼´ÉÍý');
+define('_QMENU_MANAGE_NEWBLOG',                                '¿·µ¬BlogºîÀ®');
+define('_QMENU_MANAGE_BACKUPS',                                'DBÊݸ/Éü¸µ');
+define('_QMENU_MANAGE_PLUGINS',                                '¥×¥é¥°¥¤¥ó´ÉÍý');
+define('_QMENU_LAYOUT',                                                '¥ì¥¤¥¢¥¦¥ÈÀßÄê');
+define('_QMENU_LAYOUT_SKINS',                          '¥¹¥­¥óÊÔ½¸');
+define('_QMENU_LAYOUT_TEMPL',                          '¥Æ¥ó¥×¥ì¡¼¥ÈÊÔ½¸');
+define('_QMENU_LAYOUT_IEXPORT',                                'Æɹþ/½ñ½Ð');
+define('_QMENU_PLUGINS',                                       '¥×¥é¥°¥¤¥ó');
+
+// quickmenu on logon screen
+define('_QMENU_INTRO',                                         'ƳÆþ¥¬¥¤¥É');
+define('_QMENU_INTRO_TEXT',                                    '<p>¤³¤³¤Ï¥¦¥§¥Ö¥µ¥¤¥È¤Î´ÉÍý¤ò¹Ô¤¦¥³¥ó¥Æ¥ó¥Ä´ÉÍý¥·¥¹¥Æ¥à¡¢¡ÖNucleus CMS¡×¤Î¥í¥°¥¤¥ó²èÌ̤Ǥ¹¡£</p><p>¥¢¥«¥¦¥ó¥È¤ò»ý¤Ã¤Æ¤¤¤ì¤Ð¥í¥°¥¤¥ó¤·¤Æ¿·¤·¤¤µ­»ö¤ÎÅê¹Æ¤¬¤Ç¤­¤Þ¤¹¡£</p>');
+
+// helppages for plugins
+define('_ERROR_PLUGNOHELPFILE',                                '¤³¤Î¥×¥é¥°¥¤¥óÍѤΥإë¥×¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó');
+define('_PLUGS_HELP_TITLE',                                    '¥×¥é¥°¥¤¥ó¤Î¥Ø¥ë¥×¥Ú¡¼¥¸');
+define('_LIST_PLUGS_HELP',                                     '¥Ø¥ë¥×');
+
+
+// END changed/started after 3.1
+
+// START changed/added after v2.5beta START
+
+// general settings (security)
+define('_SETTINGS_EXTAUTH',                                    '³°Éôǧ¾Ú¤ÎÍ­¸ú²½');
+define('_WARNING_EXTAUTH',                                     '·Ù¹ð:ɬÍפʻþ°Ê³°¤ÏÍ­¸ú¤Ë¤·¤Ê¤¤');
+
+// member profile
+define('_MEMBERS_BYPASS',                                      '³°Éôǧ¾Ú¤ò»ÈÍѤ¹¤ë');
+
+// 'always include in search' blog setting (yes/no) [in v2.5beta, the 'always' part wasn't clear]
+define('_EBLOG_SEARCH',                                                '<em>¾ï¤Ë</em>¸¡º÷Âоݤˤ¹¤ë');
+
+// END changed/added after v2.5beta
+
+// START introduced after v2.0 START
+
+// media library
+define('_MEDIA_VIEW',                                          'ɽ¼¨');
+define('_MEDIA_VIEW_TT',                                       '¥Õ¥¡¥¤¥ëɽ¼¨ (¿·¤·¤¤¥¦¥£¥ó¥É¥¦¤¬³«¤­¤Þ¤¹)');
+define('_MEDIA_FILTER_APPLY',                          '¥Õ¥£¥ë¥¿¡¼Å¬ÍÑ');
+define('_MEDIA_FILTER_LABEL',                          '¥Õ¥£¥ë¥¿¡¼: ');
+define('_MEDIA_UPLOAD_TO',                                     '¥¢¥Ã¥×¥í¡¼¥ÉÀè...');
+define('_MEDIA_UPLOAD_NEW',                                    '¿·µ¬¥¢¥Ã¥×¥í¡¼¥É...');
+define('_MEDIA_COLLECTION_SELECT',                     'ÁªÂò');
+define('_MEDIA_COLLECTION_TT',                         '¤³¤Î¥«¥Æ¥´¥ê¡¼¤ËÀÚ¤êÂؤ¨');
+define('_MEDIA_COLLECTION_LABEL',                      '¸½ºß¤Î¥³¥ì¥¯¥·¥ç¥ó: ');
+
+// tooltips on toolbar
+define('_ADD_ALIGNLEFT_TT',                                    'º¸´ó¤»');
+define('_ADD_ALIGNRIGHT_TT',                           '±¦´ó¤»');
+define('_ADD_ALIGNCENTER_TT',                          'Ãæ±û´ó¤»');
+
+
+// generic upload failure
+define('_ERROR_UPLOADFAILED',                          '¥¢¥Ã¥×¥í¡¼¥É¤Ë¼ºÇÔ¤·¤Þ¤·¤¿');
+
+// END introduced after v2.0 END
+
+// START introduced after v1.5 START
+
+// posting to the past/edit timestamps
+define('_EBLOG_ALLOWPASTPOSTING',                      '²áµî¤ÎÆü»þ¤Ç¤ÎÅê¹Æ¤òµö²Ä¤¹¤ë');
+define('_ADD_CHANGEDATE',                                      '¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò¹¹¿·');
+define('_BMLET_CHANGEDATE',                                    '¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò¹¹¿·');
+
+// skin import/export
+define('_OVERVIEW_SKINIMPORT',                         'Æɹþ/½ñ½Ð');
+
+// skin settings
+define('_PARSER_INCMODE_NORMAL',                       '¥Î¡¼¥Þ¥ë');
+define('_PARSER_INCMODE_SKINDIR',                      'skindir¤ò»È¤¦');
+define('_SKIN_INCLUDE_MODE',                           'Include¥â¡¼¥É');
+define('_SKIN_INCLUDE_PREFIX',                         'Include¥×¥ê¥Õ¥£¥Ã¥¯¥¹');
+
+// global settings
+define('_SETTINGS_BASESKIN',                           '´ðËܤΥ¹¥­¥ó');
+define('_SETTINGS_SKINSURL',                           '¥¹¥­¥óURL');
+define('_SETTINGS_ACTIONSURL',                         '¡Öhttp://¡×¤«¤é»Ï¤Þ¤ë action.php ¤ÎURL');
+
+// category moves (batch)
+define('_ERROR_MOVEDEFCATEGORY',                       '¥Ç¥Õ¥©¥ë¥È¤Î¥«¥Æ¥´¥ê¡¼¤Ï°ÜÆ°¤Ç¤­¤Þ¤»¤ó');
+define('_ERROR_MOVETOSELF',                                    '¥«¥Æ¥´¥ê¡¼¤ò°ÜÆ°¤Ç¤­¤Þ¤»¤ó (°ÜÆ°Àè¤ÎBlog¤¬°ÜÆ°¸µ¤ÈƱ¤¸¤Ç¤¹)');
+define('_MOVECAT_TITLE',                                       '¥«¥Æ¥´¥ê¡¼¤ò°ÜÆ°¤¹¤ëBlog¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤');
+define('_MOVECAT_BTN',                                         '¥«¥Æ¥´¥ê¡¼¤ò°ÜÆ°');
+
+// URLMode setting
+define('_SETTINGS_URLMODE',                                    'URL ¥â¡¼¥É');
+define('_SETTINGS_URLMODE_NORMAL',                     'Normal');
+define('_SETTINGS_URLMODE_PATHINFO',           'Fancy');
+
+// Batch operations
+define('_BATCH_NOSELECTION',                           'Âоݤ¬ÁªÂò¤µ¤ì¤Æ¤¤¤Þ¤»¤ó');
+define('_BATCH_ITEMS',                                         '¥¢¥¤¥Æ¥à¡¡¡¡¡¡¤ËÂФ·¤Æ¤Î¥Ð¥Ã¥ÁÁàºî');
+define('_BATCH_CATEGORIES',                                    '¥«¥Æ¥´¥ê¡¼¡¡¡¡¤ËÂФ·¤Æ¤Î¥Ð¥Ã¥ÁÁàºî');
+define('_BATCH_MEMBERS',                                       '¥á¥ó¥Ð¡¼¡¡¡¡¡¡¤ËÂФ·¤Æ¤Î¥Ð¥Ã¥ÁÁàºî');
+define('_BATCH_TEAM',                                          '¥Á¡¼¥à¥á¥ó¥Ð¡¼¤ËÂФ·¤Æ¤Î¥Ð¥Ã¥ÁÁàºî');
+define('_BATCH_COMMENTS',                                      '¥³¥á¥ó¥È¡¡¡¡¡¡¤ËÂФ·¤Æ¤Î¥Ð¥Ã¥ÁÁàºî');
+define('_BATCH_UNKNOWN',                                       '̤ÃΤΥХåÁÁàºî: ');
+define('_BATCH_EXECUTING',                                     '¼Â¹ÔÃæ');
+define('_BATCH_ONCATEGORY',                                    '- Âоݥ«¥Æ¥´¥ê¡¼');
+define('_BATCH_ONITEM',                                                '- Âоݥ¢¥¤¥Æ¥à');
+define('_BATCH_ONCOMMENT',                                     '- Âоݥ³¥á¥ó¥È');
+define('_BATCH_ONMEMBER',                                      '- Âоݥá¥ó¥Ð¡¼');
+define('_BATCH_ONTEAM',                                                '- ÂоݥÁ¡¼¥à¥á¥ó¥Ð¡¼');
+define('_BATCH_SUCCESS',                                       'À®¸ù!');
+define('_BATCH_DONE',                                          '½ªÎ»!');
+define('_BATCH_DELETE_CONFIRM',                                '¥Ð¥Ã¥Áºï½ü¤Î³Îǧ');
+define('_BATCH_DELETE_CONFIRM_BTN',                    '¥Ð¥Ã¥Áºï½ü¤Î³Îǧ');
+define('_BATCH_SELECTALL',                                     'Á´¤ÆÁªÂò');
+define('_BATCH_DESELECTALL',                           'Á´¤Æ¤ÎÁªÂò¤ò²ò½ü');
+
+// batch operations: options in dropdowns
+define('_BATCH_ITEM_DELETE',                           'ºï½ü');
+define('_BATCH_ITEM_MOVE',                                     '°ÜÆ°');
+define('_BATCH_MEMBER_DELETE',                         'ºï½ü');
+define('_BATCH_MEMBER_SET_ADM',                                '´ÉÍý¼Ô¸¢¸Â¤òÍ¿¤¨¤ë');
+define('_BATCH_MEMBER_UNSET_ADM',                      '´ÉÍý¼Ô¸¢¸Â¤ò³°¤¹');
+define('_BATCH_TEAM_DELETE',                           '¥Á¡¼¥à¤«¤éºï½ü');
+define('_BATCH_TEAM_SET_ADM',                          '´ÉÍý¼Ô¸¢¸Â¤òÍ¿¤¨¤ë');
+define('_BATCH_TEAM_UNSET_ADM',                                '´ÉÍý¼Ô¸¢¸Â¤ò³°¤¹');
+define('_BATCH_CAT_DELETE',                                    'ºï½ü');
+define('_BATCH_CAT_MOVE',                                      '¾¤ÎBlog¤Ë°ÜÆ°');
+define('_BATCH_COMMENT_DELETE',                                'ºï½ü');
+
+// itemlist: Add new item...
+define('_ITEMLIST_ADDNEW',                                     '¿·¤·¤¤¥¢¥¤¥Æ¥à¤ÎÄɲÃ...');
+define('_ADD_PLUGIN_EXTRAS',                           'Äɲåץ饰¥¤¥ó¥ª¥×¥·¥ç¥ó');
+
+// errors
+define('_ERROR_CATCREATEFAIL',                         '¿·¤·¤¤¥«¥Æ¥´¥ê¡¼¤òºîÀ®¤Ç¤­¤Þ¤»¤ó');
+define('_ERROR_NUCLEUSVERSIONREQ',                     '¤³¤Î¥×¥é¥°¥¤¥ó¤ò»ÈÍѤ¹¤ë¤Ë¤Ï¡¢¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Î Nucleus ¤¬É¬ÍפǤ¹: ');
+
+// backlinks
+define('_BACK_TO_BLOGSETTINGS',                                'Blog¤ÎÀßÄê¤ËÌá¤ë');
+
+// skin import export
+define('_SKINIE_TITLE_IMPORT',                         'Æɤ߹þ¤ß');
+define('_SKINIE_TITLE_EXPORT',                         '½ñ¤­½Ð¤·');
+define('_SKINIE_BTN_IMPORT',                           'Æɤ߹þ¤ß');
+define('_SKINIE_BTN_EXPORT',                           'ÁªÂò¤µ¤ì¤¿¥¹¥­¥ó/¥Æ¥ó¥×¥ì¡¼¥È¤ò½ñ¤­½Ð¤·');
+define('_SKINIE_LOCAL',                                                '¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¤«¤éÆɤ߹þ¤ß:');
+define('_SKINIE_NOCANDIDATES',                         '¥¹¥­¥ó¥Ç¥£¥ì¥¯¥È¥êÆâ¤ËÆɤ߹þ¤á¤ë¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó');
+define('_SKINIE_FROMURL',                                      'URL¤ò»ØÄꤷ¤ÆÆɤ߹þ¤ß:');
+define('_SKINIE_EXPORT_INTRO',                         '½ñ¤­½Ð¤¹¥¹¥­¥ó/¥Æ¥ó¥×¥ì¡¼¥È¤ò°Ê²¼¤«¤éÁªÂò¤·¤Æ¤¯¤À¤µ¤¤');
+define('_SKINIE_EXPORT_SKINS',                         '¥¹¥­¥ó');
+define('_SKINIE_EXPORT_TEMPLATES',                     '¥Æ¥ó¥×¥ì¡¼¥È');
+define('_SKINIE_EXPORT_EXTRA',                         'ÄɲþðÊó¡Ê½ñ¤­½Ð¤·¥Õ¥¡¥¤¥ë¤ËÄɲ乤ëÈ÷¹Í¡Ë');
+define('_SKINIE_CONFIRM_OVERWRITE',                    '´û¤Ë¸ºß¤¹¤ë¥¹¥­¥ó¤ò¾å½ñ¤­¤¹¤ë (¤Ö¤Ä¤«¤ë¥¹¥­¥ó̾¤ò»²¾È)');
+define('_SKINIE_CONFIRM_IMPORT',                       '¤Ï¤¤¡¢¤³¤ì¤òÆɤ߹þ¤ß¤Þ¤¹');
+define('_SKINIE_CONFIRM_TITLE',                                '¥¹¥­¥ó¤È¥Æ¥ó¥×¥ì¡¼¥È¤òÆɤ߹þ¤â¤¦¤È¤·¤Æ¤¤¤Þ¤¹');
+define('_SKINIE_INFO_SKINS',                           '¥Õ¥¡¥¤¥ëÆâ¤Î¥¹¥­¥ó:');
+define('_SKINIE_INFO_TEMPLATES',                       '¥Õ¥¡¥¤¥ëÆâ¤Î¥Æ¥ó¥×¥ì¡¼¥È:');
+define('_SKINIE_INFO_GENERAL',                         '¾ðÊó:');
+define('_SKINIE_INFO_SKINCLASH',                       '¼¡¤Î¥¹¥­¥ó̾¤¬¤Ö¤Ä¤«¤ê¤Þ¤¹:');
+define('_SKINIE_INFO_TEMPLCLASH',                      '¼¡¤Î¥Æ¥ó¥×¥ì¡¼¥È̾¤¬¤Ö¤Ä¤«¤ê¤Þ¤¹:');
+define('_SKINIE_INFO_IMPORTEDSKINS',           'Æɤ߹þ¤Þ¤ì¤¿¥¹¥­¥ó:');
+define('_SKINIE_INFO_IMPORTEDTEMPLS',          'Æɤ߹þ¤Þ¤ì¤¿¥Æ¥ó¥×¥ì¡¼¥È:');
+define('_SKINIE_DONE',                                         'Æɤ߹þ¤ß´°Î»');
+
+define('_AND',                                                         'and');
+define('_OR',                                                          'or');
+
+// empty fields on template edit
+define('_EDITTEMPLATE_EMPTY',                          '̵¤·(¥¯¥ê¥Ã¥¯¤¹¤ë¤È¥Õ¥©¡¼¥à¤¬³«¤­¤Þ¤¹)');
+
+// skin overview list
+define('_LIST_SKINS_INCMODE',                          'Include¥â¡¼¥É:');
+define('_LIST_SKINS_INCPREFIX',                                'Include¥×¥ê¥Õ¥£¥Ã¥¯¥¹:');
+define('_LIST_SKINS_DEFINED',                          'ÄêµÁºÑ¤ß¥Ñ¡¼¥Ä:');
+
+// backup
+define('_BACKUPS_TITLE',                                       '¥Ð¥Ã¥¯¥¢¥Ã¥× / ¥ê¥¹¥È¥¢');
+define('_BACKUP_TITLE',                                                '¥Ð¥Ã¥¯¥¢¥Ã¥×');
+define('_BACKUP_INTRO',                                                '²¼¤Î¥Ü¥¿¥ó¤ò²¡¤¹¤È¡¢Nucleus¤¬»ÈÍѤ·¤Æ¤¤¤ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò¥Ð¥Ã¥¯¥¢¥Ã¥×¤Ç¤­¤Þ¤¹¡£¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Ï°ÂÁ´¤Ê¾ì½ê¤ËÊݸ¤·¤Æ¤ª¤¯¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¡£');
+define('_BACKUP_ZIP_YES',                                      '°µ½Ì¤¹¤ë');
+define('_BACKUP_ZIP_NO',                                       '°µ½Ì¤·¤Ê¤¤');
+define('_BACKUP_BTN',                                          '¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºîÀ®¤¹¤ë');
+define('_BACKUP_NOTE',                                         '<b style="color:#f00;">Ãí°Õ:</b> ¥Ð¥Ã¥¯¥¢¥Ã¥×¤µ¤ì¤ë¤Î¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÎÆâÍƤÀ¤±¤Ç¤¹¡£¥¢¥Ã¥×¥í¡¼¥É¤·¤¿¥Õ¥¡¥¤¥ë¤ä config.php Æâ¤ÎÀßÄê¤Ï¥Ð¥Ã¥¯¥¢¥Ã¥×<b style="color:#f00;">¤µ¤ì¤Þ¤»¤ó</b>¡£');
+define('_RESTORE_TITLE',                                       '¥ê¥¹¥È¥¢');
+define('_RESTORE_NOTE',                                                '<b style="color:#f00;">·Ù¹ð:</b> ¥Ð¥Ã¥¯¥¢¥Ã¥×¤«¤é¤Î¥ê¥¹¥È¥¢¤Ï¸½ºß¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹Æâ¤Î Nucleus ¥Ç¡¼¥¿¤òÁ´¤Æ<b style="color:#f00;">ºï½ü</b>¤·¤Þ¤¹¡ªÎɤ¯Ãí°Õ¤·¤Æ»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡ª<br /><b style="color:#f00;">Ãí°Õ:</b> ¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºîÀ®¤·¤¿ Nucleus ¤Î¥Ð¡¼¥¸¥ç¥ó¤¬ ¸½ºß»ÈÍѤ·¤Æ¤¤¤ë Nucleus ¤Î¥Ð¡¼¥¸¥ç¥ó¤ÈƱ¤¸¤«³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡ª¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÀµ¤·¤¯Æ°ºî¤·¤Þ¤»¤ó¡£');
+define('_RESTORE_INTRO',                                       '°Ê²¼¤«¤é¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÁªÂò¡Ê¥µ¡¼¥Ð¤Ë¥¢¥Ã¥×¥í¡¼¥É¤µ¤ì¤Þ¤¹¡Ë¤·¤Æ"¥ê¥¹¥È¥¢"¥Ü¥¿¥ó¤ò²¡¤¹¤È³«»Ï¤·¤Þ¤¹¡£');
+define('_RESTORE_IMSURE',                                      '¤Ï¤¤¡¢³Î¤«¤Ë¤³¤ÎÁàºî¤Î¼Â¹Ô¤ò¾µÇ§¤·¤Þ¤¹¡ª');
+define('_RESTORE_BTN',                                         '¥Õ¥¡¥¤¥ë¤«¤é¥ê¥¹¥È¥¢');
+define('_RESTORE_WARNING',                                     '¡ÊÀµ¤·¤¤¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¥ê¥¹¥È¥¢¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¤«³Îǧ¤·¡¢»Ï¤á¤ëÁ°¤Ë¸½ºß¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºî¤Ã¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡Ë');
+define('_ERROR_BACKUP_NOTSURE',                                '"¾µÇ§"¥Á¥§¥Ã¥¯¥Ü¥Ã¥¯¥¹¤ò¥Á¥§¥Ã¥¯¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹');
+define('_RESTORE_COMPLETE',                                    '¥ê¥¹¥È¥¢´°Î»');
+
+// new item notification
+define('_NOTIFY_NI_MSG',                                       '¿·¤·¤¤¥¢¥¤¥Æ¥à¤¬Åê¹Æ¤µ¤ì¤Þ¤·¤¿:');
+define('_NOTIFY_NI_TITLE',                                     '¿·¤·¤¤¥¢¥¤¥Æ¥à!');
+define('_NOTIFY_KV_MSG',                                       '¥¢¥¤¥Æ¥à¤Ë¥«¥ë¥Þ¤ÎÅêɼ¤¬¤¢¤ê¤Þ¤·¤¿:');
+define('_NOTIFY_KV_TITLE',                                     'Nucleus¥«¥ë¥Þ:');
+define('_NOTIFY_NC_MSG',                                       '¥¢¥¤¥Æ¥à¤Ë¥³¥á¥ó¥È¤¬¤¢¤ê¤Þ¤·¤¿:');
+define('_NOTIFY_NC_TITLE',                                     'Nucleus¥³¥á¥ó¥È:');
+define('_NOTIFY_USERID',                                       '¥æ¡¼¥¶¡¼ID:');
+define('_NOTIFY_USER',                                         '¥æ¡¼¥¶¡¼:');
+define('_NOTIFY_COMMENT',                                      '¥³¥á¥ó¥È:');
+define('_NOTIFY_VOTE',                                         'Åêɼ:');
+define('_NOTIFY_HOST',                                         '¥Û¥¹¥È:');
+define('_NOTIFY_IP',                                           'IP¥¢¥É¥ì¥¹:');
+define('_NOTIFY_MEMBER',                                       '¥á¥ó¥Ð¡¼:');
+define('_NOTIFY_TITLE',                                                '¥¿¥¤¥È¥ë:');
+define('_NOTIFY_CONTENTS',                                     'ÆâÍÆ:');
+
+// member mail message
+define('_MMAIL_MSG',                                           '¼¡¤ÎÊý¤«¤é¤¢¤Ê¤¿°¸¤Î¥á¥Ã¥»¡¼¥¸¤¬Á÷¤é¤ì¤Æ¤­¤Þ¤·¤¿');
+define('_MMAIL_FROMANON',                                      'ƿ̾¤Î¥Ó¥¸¥¿¡¼');
+define('_MMAIL_FROMNUC',                                       'Á÷¿®¸µ¤ÎNucleus Blog');
+define('_MMAIL_TITLE',                                         '¥á¥Ã¥»¡¼¥¸ from');
+define('_MMAIL_MAIL',                                          '¥á¥Ã¥»¡¼¥¸:');
+
+// END introduced after v1.5 END
+
+
+// START introduced after v1.1 START
+
+// bookmarklet buttons
+define('_BMLET_ADD',                                           '¥¢¥¤¥Æ¥à¤ÎÄɲÃ');
+define('_BMLET_EDIT',                                          'Êݸ');
+define('_BMLET_DELETE',                                                '¥¢¥¤¥Æ¥à¤Îºï½ü');
+define('_BMLET_BODY',                                          'ËÜʸ');
+define('_BMLET_MORE',                                          '³¤­');
+define('_BMLET_OPTIONS',                                       '¥ª¥×¥·¥ç¥ó');
+define('_BMLET_PREVIEW',                                       '¥×¥ì¥Ó¥å¡¼');
+
+// used in bookmarklet
+define('_ITEM_UPDATED',                                                '¥¢¥¤¥Æ¥à¤¬¹¹¿·¤µ¤ì¤Þ¤·¤¿');
+define('_ITEM_DELETED',                                                '¥¢¥¤¥Æ¥à¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿');
+
+// plugins
+define('_CONFIRMTXT_PLUGIN',                           '¤³¤Î¥×¥é¥°¥¤¥ó¤òºï½ü¤·¤Þ¤¹¤«¡©');
+define('_ERROR_NOSUCHPLUGIN',                          '»ØÄꤵ¤ì¤¿¥×¥é¥°¥¤¥ó¤Ï¤¢¤ê¤Þ¤»¤ó');
+define('_ERROR_DUPPLUGIN',                                     '¤½¤Î¥×¥é¥°¥¤¥ó¤Ï´û¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤¹');
+define('_ERROR_PLUGFILEERROR',                         '»ØÄꤵ¤ì¤¿¥×¥é¥°¥¤¥ó¤Ï¸ºß¤·¤Ê¤¤¤«¡¢¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤¬Àµ¤·¤¯ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó');
+define('_PLUGS_NOCANDIDATES',                          '¥×¥é¥°¥¤¥ó¤Î¥¤¥ó¥¹¥È¡¼¥ë¸õÊä¤Ï¤¢¤ê¤Þ¤»¤ó¡£');
+
+define('_PLUGS_TITLE_MANAGE',                          '¥×¥é¥°¥¤¥ó¤Î´ÉÍý');
+define('_PLUGS_TITLE_INSTALLED',                       '¥¤¥ó¥¹¥È¡¼¥ëºÑ¤ß');
+define('_PLUGS_TITLE_UPDATE',                          'ÅÐÏ¿¥ê¥¹¥È¤Î¥¢¥Ã¥×¥Ç¡¼¥È');
+define('_PLUGS_TEXT_UPDATE',                           'Nucleus¤¬´ÉÍý¤·¤Æ¤¤¤ë³Æ¥×¥é¥°¥¤¥ó¤¬ÅÐÏ¿Ãæ¤Î¥¤¥Ù¥ó¥È¾ðÊ󤬡¢²¿¤é¤«¤Î¸¶°ø(¥×¥é¥°¥¤¥ó¤Î¥Ð¡¼¥¸¥ç¥ó¥¢¥Ã¥×¤Ëȼ¤¦¥Õ¥¡¥¤¥ë¤Î¾å½ñ¤­Åù)¤Ë¤è¤Ã¤ÆÀµ¾ï¤Ç¤Ï¤Ê¤¤¾õÂ֤ˤʤä¿»þ¤Ë¡Ö¥¢¥Ã¥×¥Ç¡¼¥È¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_PLUGS_TITLE_NEW',                                     '¿·¤·¤¤¥×¥é¥°¥¤¥ó¤ò¥¤¥ó¥¹¥È¡¼¥ë');
+define('_PLUGS_ADD_TEXT',                                      '°Ê²¼¤Ïplugins¥Ç¥£¥ì¥¯¥È¥êÆâ¤Ë¤¢¤ëÁ´¤Æ¤Î¡Ö¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Ê¤¤¥×¥é¥°¥¤¥ó¡×¤Î²ÄǽÀ­¤¬¤¢¤ë¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤Ç¤¹¡£Äɲ乤ëÁ°¤Ë¥×¥é¥°¥¤¥ó¤«¤É¤¦¤«¤ò<strong>¤·¤Ã¤«¤ê³Îǧ</strong>¤·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_PLUGS_BTN_INSTALL',                           '¥×¥é¥°¥¤¥ó¤Î¥¤¥ó¥¹¥È¡¼¥ë');
+define('_BACKTOOVERVIEW',                                      '°ìÍ÷¤ËÌá¤ë');
+
+// editlink
+define('_TEMPLATE_EDITLINK',                           '¥¢¥¤¥Æ¥à¤òÊÔ½¸¤¹¤ë¤¿¤á¤Î¥ê¥ó¥¯');
+
+// add left / add right tooltips
+define('_ADD_LEFT_TT',                                         'left box¤òÄɲÃ');
+define('_ADD_RIGHT_TT',                                                'right box¤òÄɲÃ');
+
+// add/edit item: new category (in dropdown box)
+define('_ADD_NEWCAT',                                          '¿·¤·¤¤¥«¥Æ¥´¥ê¡¼¤òÄɲÃ...');
+
+// new settings
+define('_SETTINGS_PLUGINURL',                          '¥×¥é¥°¥¤¥ó¥Ç¥£¥ì¥¯¥È¥ê¤ÎURL');
+define('_SETTINGS_MAXUPLOADSIZE',                      '¥¢¥Ã¥×¥í¡¼¥É¤Ç¤­¤ë¥Õ¥¡¥¤¥ë¤ÎºÇÂ祵¥¤¥º (bytes)');
+define('_SETTINGS_NONMEMBERMSGS',                      '¥á¥ó¥Ð¡¼°Ê³°¤«¤é¤Î¥á¥Ã¥»¡¼¥¸¤ò¼õ¤±ÉÕ¤±¤ë');
+define('_SETTINGS_PROTECTMEMNAMES',                    '¥á¥ó¥Ð¡¼Ì¾¤ÎÊݸî');
+
+// overview screen
+define('_OVERVIEW_PLUGINS',                                    '¥×¥é¥°¥¤¥ó´ÉÍý');
+
+// actionlog
+define('_ACTIONLOG_NEWMEMBER',                         '¿·¤·¤¤¥á¥ó¥Ð¡¼¤ÎÅÐÏ¿:');
+
+// membermail (when not logged in)
+define('_MEMBERMAIL_MAIL',                                     '¤¢¤Ê¤¿¤Î¥á¡¼¥ë¥¢¥É¥ì¥¹:');
+
+// file upload
+define('_ERROR_DISALLOWEDUPLOAD2',                     '¥Á¡¼¥à¤Ë»²²Ã¤·¤Æ¤¤¤ë¤É¤Î¥Ö¥í¥°¤â´ÉÍý¸¢¸Â¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤°Ù¡¢¥Õ¥¡¥¤¥ë¤Î¥¢¥Ã¥×¥í¡¼¥É¤¬½ÐÍè¤Þ¤»¤ó¡£');
+
+/* plugin list
+define('_LISTS_INFO',                                          '¾ðÊó');
+define('_LIST_PLUGS_AUTHOR',                           'ºî¼Ô:');
+define('_LIST_PLUGS_VER',                                      '¥Ð¡¼¥¸¥ç¥ó:');
+define('_LIST_PLUGS_SITE',                                     '¥µ¥¤¥È');
+define('_LIST_PLUGS_DESC',                                     'ÀâÌÀ:');
+define('_LIST_PLUGS_SUBS',                                     '°Ê²¼¤Î¥¤¥Ù¥ó¥È¤ËÅÐÏ¿:');
+define('_LIST_PLUGS_UP',                                       '¾å¤Ø');
+define('_LIST_PLUGS_DOWN',                                     '²¼¤Ø');
+define('_LIST_PLUGS_UNINSTALL',                                'ºï½ü');
+define('_LIST_PLUGS_ADMIN',                                    '´ÉÍý');
+define('_LIST_PLUGS_OPTIONS',                          'ÊÔ½¸');*/
+define('_LISTS_INFO',                                          '¥¤¥ó¥Õ¥©¥á¡¼¥·¥ç¥ó');
+define('_LIST_PLUGS_AUTHOR',                           'À½ºî¼Ô¡§');
+define('_LIST_PLUGS_VER',                                      '¥Ð¡¼¥¸¥ç¥ó¡§');
+define('_LIST_PLUGS_SITE',                                     'Æþ¼ê¥µ¥¤¥È¡§');
+define('_LIST_PLUGS_DESC',                                     '³µÍס§');
+define('_LIST_PLUGS_SUBS',                                     'ÅÐÏ¿ºÑ¤ß¥¤¥Ù¥ó¥È¡§');
+define('_LIST_PLUGS_UP',                                       '&uarr; ¤Ò¤È¤Ä¾å¤Ø');
+define('_LIST_PLUGS_DOWN',                                     '&darr; ¤Ò¤È¤Ä²¼¤Ø');
+define('_LIST_PLUGS_UNINSTALL',                                '¥¢¥ó¥¤¥ó¥¹¥È¡¼¥ë');
+define('_LIST_PLUGS_ADMIN',                                    '´ÉÍý');
+define('_LIST_PLUGS_OPTIONS',                          '¥ª¥×¥·¥ç¥óÊÔ½¸');
+
+// plugin option list
+define('_LISTS_VALUE',                                         'ÃÍ(ÆâÍÆ)');
+
+// plugin options
+define('_ERROR_NOPLUGOPTIONS',                         '¤³¤Î¥×¥é¥°¥¤¥ó¤Ë¤Ï¥ª¥×¥·¥ç¥ó¤¬¤¢¤ê¤Þ¤»¤ó');
+define('_PLUGS_BACK',                                          '¥×¥é¥°¥¤¥ó¤Î°ìÍ÷¤ËÌá¤ë');
+define('_PLUGS_SAVE',                                          '¥ª¥×¥·¥ç¥ó¤ÎÊݸ');
+define('_PLUGS_OPTIONS_UPDATED',                       '¥×¥é¥°¥¤¥ó¥ª¥×¥·¥ç¥ó¤¬¹¹¿·¤µ¤ì¤Þ¤·¤¿');
+
+define('_OVERVIEW_MANAGEMENT',                         '´ÉÍý');
+define('_OVERVIEW_MANAGE',                                     'Nucleus¤Î´ÉÍý');
+define('_MANAGE_GENERAL',                                      '´ÉÍý');
+define('_MANAGE_SKINS',                                                '¥¹¥­¥ó/¥Æ¥ó¥×¥ì¡¼¥È');
+define('_MANAGE_EXTRA',                                                'Äɲõ¡Ç½');
+
+define('_BACKTOMANAGE',                                                'Nucleus¤Î´ÉÍý¤ËÌá¤ë');
+
+
+// END introduced after v1.1 END
+
+
+
+
+// charset to use
+define('_CHARSET',                                                     'EUC-JP');
+
+// global stuff
+define('_LOGOUT',                                                      '¥í¥°¥¢¥¦¥È');
+define('_LOGIN',                                                       '¥í¥°¥¤¥ó');
+define('_YES',                                                         '¤Ï¤¤');
+define('_NO',                                                          '¤¤¤¤¤¨');
+define('_SUBMIT',                                                      'Á÷¿®');
+define('_ERROR',                                                       '¥¨¥é¡¼');
+define('_ERRORMSG',                                                    '¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡ª');
+define('_BACK',                                                                'Ìá¤ë');
+define('_NOTLOGGEDIN',                                         '¥í¥°¥¤¥ó¤·¤Æ¤¤¤Þ¤»¤ó');
+define('_LOGGEDINAS',                                          '¥í¥°¥¤¥ó:');
+define('_ADMINHOME',                                           '´ÉÍý¥Û¡¼¥à');
+define('_NAME',                                                                '̾Á°');
+define('_BACKHOME',                                                    '´ÉÍý¥Û¡¼¥à¤ËÌá¤ë');
+define('_BADACTION',                                           '¸ºß¤·¤Ê¤¤¥¢¥¯¥·¥ç¥ó¤¬Í׵ᤵ¤ì¤Þ¤·¤¿');
+define('_MESSAGE',                                                     '¥á¥Ã¥»¡¼¥¸');
+define('_HELP_TT',                                                     '¥Ø¥ë¥×¡ª');
+define('_YOURSITE',                                                    '¥µ¥¤¥È¤Î³Îǧ');
+
+
+define('_POPUP_CLOSE',                                         '¥¦¥£¥ó¥É¥¦¤òÊĤ¸¤ë');
+
+define('_LOGIN_PLEASE',                                                '¤Þ¤º¥í¥°¥¤¥ó¤·¤Æ¤¯¤À¤µ¤¤');
+
+// commentform
+define('_COMMENTFORM_YOUARE',                          '¥æ¡¼¥¶¡¼Ì¾: ');
+define('_COMMENTFORM_SUBMIT',                          '¥³¥á¥ó¥È¤òÄɲÃ');
+define('_COMMENTFORM_COMMENT',                         '¥³¥á¥ó¥È:');
+define('_COMMENTFORM_NAME',                                    '¤ªÌ¾Á°:');
+define('_COMMENTFORM_REMEMBER',                                '¾ðÊó¤òµ­²±¤·¤Æ¤ª¤¯');
+
+// loginform
+define('_LOGINFORM_NAME',                                      '¥í¥°¥¤¥óID:');
+define('_LOGINFORM_PWD',                                       '¥Ñ¥¹¥ï¡¼¥É:');
+define('_LOGINFORM_YOUARE',                                    '¥í¥°¥¤¥óÃæ:');
+define('_LOGINFORM_SHARED',                                    '¤³¤ÎPC¤ò¾¤Î¿Í¤È¶¦ÍѤ¹¤ë');
+
+// member mailform
+define('_MEMBERMAIL_SUBMIT',                           '¥á¥Ã¥»¡¼¥¸Á÷¿®');
+
+// search form
+define('_SEARCHFORM_SUBMIT',                           '¸¡º÷');
+
+// add item form
+define('_ADD_ADDTO',                                           '¥¢¥¤¥Æ¥à¤ÎÄɲÃ:');
+define('_ADD_CREATENEW',                                       '¿·¤·¤¤¥¢¥¤¥Æ¥à');
+define('_ADD_BODY',                                                    'ËÜʸ');
+define('_ADD_TITLE',                                           '¥¿¥¤¥È¥ë');
+define('_ADD_MORE',                                                    '³¤­ (¶õÍó¤Ç¤â²Ä)');
+define('_ADD_CATEGORY',                                                '¥«¥Æ¥´¥ê¡¼');
+define('_ADD_PREVIEW',                                         '¥×¥ì¥Ó¥å¡¼');
+define('_ADD_DISABLE_COMMENTS',                                '¥³¥á¥ó¥È¤ò¼õ¤±ÉÕ¤±¤Ê¤¤');
+define('_ADD_DRAFTNFUTURE',                                    '¥É¥é¥Õ¥È¤È̤Íè¤Îµ­»ö');
+define('_ADD_ADDITEM',                                         '¥¢¥¤¥Æ¥à¤òÄɲÃ');
+define('_ADD_ADDNOW',                                          'º£¤¹¤°ÄɲÃ');
+define('_ADD_PLACE_ON',                                                'Æü»þ:');
+define('_ADD_ADDDRAFT',                                                '¥É¥é¥Õ¥È¤ËÄɲÃ');
+define('_ADD_NOPASTDATES',                                     '(²áµî¤ÎÆü»þ¤Ï»ØÄê¤Ç¤­¤Þ¤»¤ó¡£»ØÄꤵ¤ì¤¿¾ì¹ç¤Ï¸½ºß¤ÎÆü»þ¤¬»ÈÍѤµ¤ì¤Þ¤¹)');
+define('_ADD_BOLD_TT',                                         'ÂÀ»ú');
+define('_ADD_ITALIC_TT',                                       '¼ÐÂÎ');
+define('_ADD_HREF_TT',                                         '¥ê¥ó¥¯ºîÀ®');
+define('_ADD_MEDIA_TT',                                                '¥á¥Ç¥£¥¢(²èÁü¡¦²»À¼)¤ÎÄɲÃ');
+define('_ADD_PREVIEW_TT',                                      '¥×¥ì¥Ó¥å¡¼¤Îɽ¼¨/Èóɽ¼¨');
+define('_ADD_CUT_TT',                                          '¥«¥Ã¥È');
+define('_ADD_COPY_TT',                                         '¥³¥Ô¡¼');
+define('_ADD_PASTE_TT',                                                '¥Ú¡¼¥¹¥È');
+
+
+// edit item form
+define('_EDIT_ITEM',                                           '¥¢¥¤¥Æ¥à¤ÎÊÔ½¸');
+define('_EDIT_SUBMIT',                                         'Êݸ');
+define('_EDIT_ORIG_AUTHOR',                                    '¸¶ºî¼Ô');
+define('_EDIT_BACKTODRAFTS',                           'ºÆÅ٥ɥé¥Õ¥È¤È¤·¤ÆÊݸ');
+define('_EDIT_COMMENTSNOTE',                           '(Ãí°Õ: ¥³¥á¥ó¥È¤ÎÈóɽ¼¨¤Ï°ÊÁ°¤ËÄɲ䵤줿¥³¥á¥ó¥È¤ò±£¤·¤Ï¤·¤Þ¤»¤ó)');
+
+// used on delete screens
+define('_DELETE_CONFIRM',                                      'ºï½ü¤Î³Îǧ¤ò¤·¤Æ¤¯¤À¤µ¤¤');
+define('_DELETE_CONFIRM_BTN',                          'ºï½ü¤Î³Îǧ');
+define('_CONFIRMTXT_ITEM',                                     '°Ê²¼¤Î¥¢¥¤¥Æ¥à¤òºï½ü¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹:');
+define('_CONFIRMTXT_COMMENT',                          '°Ê²¼¤Î¥³¥á¥ó¥È¤òºï½ü¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹:');
+define('_CONFIRMTXT_TEAM1',                                    '¤³¤Îblog¤Î¥Á¡¼¥à¥ê¥¹¥È¤«¤é');
+define('_CONFIRMTXT_TEAM2',                                    'ºï½ü¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹');
+define('_CONFIRMTXT_BLOG',                                     'ºï½ü¤¹¤ëBlog: ');
+define('_WARNINGTXT_BLOGDEL',                          '·Ù¹ð¡ª Blog¤òºï½ü¤¹¤ë¤È¤½¤ì¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëÁ´¤Æ¤Î¥¢¥¤¥Æ¥à¡¢¥³¥á¥ó¥È¤Ïºï½ü¤µ¤ì¤Þ¤¹¡£¤½¤ÎÅÀ¤ò³Îǧ¤·¤¿¾å¤Ç¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£<br />¤µ¤é¤Ë¡¢Blog¤Îºï½üÃæ¤ËNucleus¤òÃæÃǤµ¤»¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£');
+define('_CONFIRMTXT_MEMBER',                           '°Ê²¼¤Î¥á¥ó¥Ð¡¼¥×¥í¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹: ');
+define('_CONFIRMTXT_TEMPLATE',                         '¼¡¤Î¥Æ¥ó¥×¥ì¡¼¥È¤òºï½ü¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹: ');
+define('_CONFIRMTXT_SKIN',                                     '¼¡¤Î¥¹¥­¥ó¤òºï½ü¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹: ');
+define('_CONFIRMTXT_BAN',                                      '¼¡¤Î¶Ø»ßIPÈϰϤòºï½ü¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹: ');
+define('_CONFIRMTXT_CATEGORY',                         '¼¡¤Î¥«¥Æ¥´¥ê¡¼¤òºï½ü¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹: ');
+
+// some status messages
+define('_DELETED_ITEM',                                                '¥¢¥¤¥Æ¥à¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿');
+define('_DELETED_MEMBER',                                      '¥á¥ó¥Ð¡¼¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿');
+define('_DELETED_COMMENT',                                     '¥³¥á¥ó¥È¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿');
+define('_DELETED_BLOG',                                                'Blog¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿');
+define('_DELETED_CATEGORY',                                    '¥«¥Æ¥´¥ê¡¼¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿');
+define('_ITEM_MOVED',                                          '¥¢¥¤¥Æ¥à¤¬°ÜÆ°¤µ¤ì¤Þ¤·¤¿');
+define('_ITEM_ADDED',                                          '¥¢¥¤¥Æ¥à¤¬Äɲ䵤ì¤Þ¤·¤¿');
+define('_COMMENT_UPDATED',                                     '¥³¥á¥ó¥È¤¬¹¹¿·¤µ¤ì¤Þ¤·¤¿');
+define('_SKIN_UPDATED',                                                '¥¹¥­¥ó¥Ç¡¼¥¿¤¬Êݸ¤µ¤ì¤Þ¤·¤¿');
+define('_TEMPLATE_UPDATED',                                    '¥Æ¥ó¥×¥ì¡¼¥È¥Ç¡¼¥¿¤¬Êݸ¤µ¤ì¤Þ¤·¤¿');
+
+// errors
+define('_ERROR_COMMENT_LONGWORD',                      '¥³¥á¥ó¥È¤Ë¤ÏȾ³Ñ¤Ç90ʸ»ú°Ê¾å¤Îñ¸ì¤ò»È¤ï¤Ê¤¤¤Ç²¼¤µ¤¤¡£');
+define('_ERROR_COMMENT_NOCOMMENT',                     '¥³¥á¥ó¥È¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_ERROR_COMMENT_NOUSERNAME',                    '»ÈÍѤǤ­¤Ê¤¤Ì¾Á°¤Ç¤¹¡£');
+define('_ERROR_COMMENT_TOOLONG',                       '¥³¥á¥ó¥È¤¬Ä¹¤¹¤®¤Þ¤¹¡£(Ⱦ³Ñ¤Ç5000ʸ»ú¤Þ¤Ç)');
+define('_ERROR_COMMENTS_DISABLED',                     '¸½ºß¤³¤ÎBlog¤Ç¤Ï¥³¥á¥ó¥È¤ò¼õ¤±ÉÕ¤±¤Æ¤¤¤Þ¤»¤ó¡£');
+define('_ERROR_COMMENTS_NONPUBLIC',                    '¤³¤ÎBlog¤Ø¥³¥á¥ó¥È¤òÄɲ乤ë¤Ë¤Ï¥á¥ó¥Ð¡¼¤È¤·¤Æ¥í¥°¥¤¥ó¤·¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£');
+define('_ERROR_COMMENTS_MEMBERNICK',           '¤¢¤Ê¤¿¤¬»È¤ª¤¦¤È¤·¤¿Ì¾Á°¤Ï´û¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤¹¡£Â¾¤Î̾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_ERROR_SKIN',                                          '¥¹¥­¥ó¡¡¥¨¥é¡¼');
+define('_ERROR_ITEMCLOSED',                                    '¤³¤Î¥¢¥¤¥Æ¥à¤Ï±ÜÍ÷ÀìÍѤǤ¹¡£¥³¥á¥ó¥È¤ÎÅê¹Æ¡¢Åêɼ¤Ï¤Ç¤­¤Þ¤»¤ó¡£');
+define('_ERROR_NOSUCHITEM',                                    '¤½¤Î¤è¤¦¤Ê¥¢¥¤¥Æ¥à¤Ï¸ºß¤·¤Þ¤»¤ó¡£');
+define('_ERROR_NOSUCHBLOG',                                    '¤½¤Î¤è¤¦¤ÊBlog¤Ï¸ºß¤·¤Þ¤»¤ó¡£');
+define('_ERROR_NOSUCHSKIN',                                    '¤½¤Î¤è¤¦¤Ê¥¹¥­¥ó¤Ï¸ºß¤·¤Þ¤»¤ó¡£');
+define('_ERROR_NOSUCHMEMBER',                          '¤½¤Î¤è¤¦¤Ê¥á¥ó¥Ð¡¼¤Ï¸ºß¤·¤Þ¤»¤ó¡£');
+define('_ERROR_NOTONTEAM',                                     '¤¢¤Ê¤¿¤Ï¤³¤ÎBlog¤Î¥Á¡¼¥à¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó¡£');
+define('_ERROR_BADDESTBLOG',                           'Á÷¤êÀè¤ÎBlog¤¬Â¸ºß¤·¤Þ¤»¤ó¡£');
+define('_ERROR_NOTONDESTTEAM',                         '¤¢¤Ê¤¿¤¬Á÷¤êÀè¤ÎBlog¤Î¥Á¡¼¥à¤ËÆþ¤Ã¤Æ¤¤¤Ê¤¤¤¿¤á¥¢¥¤¥Æ¥à¤ò°ÜÆ°¤Ç¤­¤Þ¤»¤ó¡£');
+define('_ERROR_NOEMPTYITEMS',                          'ËÜʸ¤¬¶õ¤Î¥¢¥¤¥Æ¥à¤ÏÅê¹Æ¤Ç¤­¤Þ¤»¤ó¡ª');
+define('_ERROR_BADMAILADDRESS',                                '¥á¡¼¥ë¥¢¥É¥ì¥¹¤¬ÉÔÀµ¤Ç¤¹¡£');
+define('_ERROR_BADNOTIFY',                                     'ÄÌÃΥ᡼¥ë¥¢¥É¥ì¥¹¤ÎÃæ¤ËÉÔÀµ¤Ê¤â¤Î¤¬º®¤¸¤Ã¤Æ¤¤¤Þ¤¹¡£');
+define('_ERROR_BADNAME',                                       '»ÈÍѤǤ­¤Ê¤¤Ì¾Á°¤Ç¤¹¡£( a-z ¡¢0-9 ¤Î±Ñ¿ô»ú¤·¤«»È¤¨¤Þ¤»¤ó)');
+define('_ERROR_NICKNAMEINUSE',                         '¾¤Î¥á¥ó¥Ð¡¼¤¬Æ±¤¸¥í¥°¥¤¥óID¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£');
+define('_ERROR_PASSWORDMISMATCH',                      'ÆþÎϤµ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤¬Æ±°ì¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£');
+define('_ERROR_PASSWORDTOOSHORT',                      '¥Ñ¥¹¥ï¡¼¥É¤Ï6ʸ»ú°Ê¾å¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£');
+define('_ERROR_PASSWORDMISSING',                       '¥Ñ¥¹¥ï¡¼¥É¤¬¶õ¤Ç¤¹¡£');
+define('_ERROR_REALNAMEMISSING',                       '¥Ï¥ó¥É¥ë¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_ERROR_ATLEASTONEADMIN',                       '´ÉÍýÎΰè¤Ë¥í¥°¥¤¥ó¤Ç¤­¤ësuper-admin¤¬¾¯¤Ê¤¯¤È¤â1¿Í¤Ï¤¤¤Ê¤¯¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£');
+define('_ERROR_ATLEASTONEBLOGADMIN',           '¤³¤Î¥¢¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤¹¤ë¤È¤¢¤Ê¤¿¤ÎBlog¤Ï¥á¥ó¥Æ¥Ê¥ó¥¹ÉÔǽ¤Ë¤Ê¤ê¤Þ¤¹¡£¾¯¤Ê¤¯¤È¤â1¿Í¤Î´ÉÍý¼Ô¤¬¤¤¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_ERROR_ALREADYONTEAM',                         '´û¤Ë¥Á¡¼¥à¤ËÆþ¤Ã¤Æ¤¤¤Þ¤¹¡£');
+define('_ERROR_BADSHORTBLOGNAME',                      'Blog¤Îû½Ì̾(ά¾Î)¤Ë¤Ï a-z ¡¢0-9¡¢¤Î±Ñ¿ô»ú¤Î¤ß»ÈÍѤǤ­¤Þ¤¹¡£¥¹¥Ú¡¼¥¹¤Ï»ÈÍѤǤ­¤Þ¤»¤ó¡£');
+define('_ERROR_DUPSHORTBLOGNAME',                      '¾¤ÎBlog¤ÇƱ¤¸Ã»½Ì̾(ά¾Î)¤¬»È¤ï¤ì¤Æ¤¤¤Þ¤¹¡£Ê̤Îû½Ì̾(ά¾Î)¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_ERROR_UPDATEFILE',                                    '¹¹¿·¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Þ¤»¤ó¡£¥Õ¥¡¥¤¥ë¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤¬Àµ¤·¤¯¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¤«³Îǧ¤·¤Æ¤¯¤À¤µ¤¤ (chmod 666 ¤ò»î¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤)¡£¤â¤·ÁêÂХѥ¹¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ë¤Ê¤é¡¢ÀäÂХѥ¹¤Ç»ØÄꤷ¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£(/your/path/to/nucleus/ ¤Î¤è¤¦¤Ë)');
+define('_ERROR_DELDEFBLOG',                                    '´ûÄê¤ÎBlog¤Ïºï½ü¤Ç¤­¤Þ¤»¤ó');
+define('_ERROR_DELETEMEMBER',                          '¤ª¤½¤é¤¯¤³¤Î¥á¥ó¥Ð¡¼¤Ï£±¤Ä°Ê¾å¤Î¥¢¥¤¥Æ¥à¤ÎÃø¼Ô¤Ç¤¢¤ë¤¿¤á¡¢ºï½ü¤Ç¤­¤Þ¤»¤ó¡£');
+define('_ERROR_BADTEMPLATENAME',                       'ÉÔÀµ¤Ê¥Æ¥ó¥×¥ì¡¼¥È̾¤Ç¤¹¡£(a-z ¡¢0-9 ¤Î±Ñ¿ô»ú¤Î¤ß»ÈÍѲġ£¥¹¥Ú¡¼¥¹¤Ï»ÈÍÑÉÔ²Ä)');
+define('_ERROR_DUPTEMPLATENAME',                       'Ʊ¤¸Ì¾Á°¤Î¥Æ¥ó¥×¥ì¡¼¥È¤¬´û¤Ë¸ºß¤·¤Þ¤¹');
+define('_ERROR_BADSKINNAME',                           'ÉÔÀµ¤Ê¥¹¥­¥ó̾¤Ç¤¹¡£(a-z ¡¢0-9 ¤Î±Ñ¿ô»ú¤Î¤ß»ÈÍѲġ£¥¹¥Ú¡¼¥¹¤Ï»ÈÍÑÉÔ²Ä)');
+define('_ERROR_DUPSKINNAME',                           'Ʊ¤¸Ì¾Á°¤Î¥¹¥­¥ó¤¬´û¤Ë¸ºß¤·¤Þ¤¹¡£');
+define('_ERROR_DEFAULTSKIN',                           '¤³¤Î¥¹¥­¥ó¤Ïɸ½à¤Î¥¹¥­¥ó¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤¿¤áºï½ü¤Ç¤­¤Þ¤»¤ó¡£');
+define('_ERROR_SKINDEFDELETE',                         '°Ê²¼¤ÎBlog¤Î´ûÄê¤Î¥¹¥­¥ó¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë¤¿¤á¡¢¥¹¥­¥ó¤òºï½ü¤Ç¤­¤Þ¤»¤ó¡£: ');
+define('_ERROR_DISALLOWED',                                    '¤³¤Î¥¢¥¯¥·¥ç¥ó¤Î¼Â¹Ô¤¬µö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£');
+define('_ERROR_DELETEBAN',                                     '¶Ø»ß¼Ô¤Îºï½üÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿(¶Ø»ß¼Ô¤¬Â¸ºß¤·¤Þ¤»¤ó)');
+define('_ERROR_ADDBAN',                                                '¶Ø»ß¼Ô¤ÎÄɲÃÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£Á´¤Æ¤Îblog¤ËÀµ¤·¤¯Äɲ䵤ì¤Æ¤¤¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£');
+define('_ERROR_BADACTION',                                     'Í׵ᤵ¤ì¤¿¥¢¥¯¥·¥ç¥ó¤¬Â¸ºß¤·¤Þ¤»¤ó¡£');
+define('_ERROR_MEMBERMAILDISABLED',                    '¥á¥ó¥Ð¡¼´Ö¤Î¥á¡¼¥ë¥á¥Ã¥»¡¼¥¸¤¬»ÈÍÑÉԲĤˤʤäƤ¤¤Þ¤¹¡£');
+define('_ERROR_MEMBERCREATEDISABLED',          '¥á¥ó¥Ð¡¼ºîÀ®¤¬¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£');
+define('_ERROR_INCORRECTEMAIL',                                'ÉÔÀµ¤Ê¥á¡¼¥ë¥¢¥É¥ì¥¹¤Ç¤¹¡£');
+define('_ERROR_VOTEDBEFORE',                           '¤³¤Î¥¢¥¤¥Æ¥à¤Ë¤Ï´û¤ËÅêɼºÑ¤ß¤Ç¤¹¡£');
+define('_ERROR_BANNED1',                                       '¤¢¤Ê¤¿ (IPÈÏ°Ï ');
+define('_ERROR_BANNED2',                                       ') ¤Ï¤³¤Î¥¢¥¯¥·¥ç¥ó¤Î¼Â¹Ô¤¬¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥á¥Ã¥»¡¼¥¸: \'');
+define('_ERROR_BANNED3',                                       '\'');
+define('_ERROR_LOGINNEEDED',                           '¼Â¹Ô¤¹¤ë¤Ë¤Ï¥í¥°¥¤¥ó¤¬É¬ÍפǤ¹¡£');
+define('_ERROR_CONNECT',                                       'Àܳ¥¨¥é¡¼');
+define('_ERROR_FILE_TOO_BIG',                          '¥Õ¥¡¥¤¥ë¤¬Â礭¤¹¤®¤Þ¤¹¡ª');
+define('_ERROR_BADFILETYPE',                           '¥¢¥Ã¥×¥í¡¼¥É¤¬Ç§¤á¤é¤ì¤Æ¤¤¤Ê¤¤¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤Ç¤¹¡£');
+define('_ERROR_BADREQUEST',                                    'ÉÔÀµ¤Ê¥¢¥Ã¥×¥í¡¼¥ÉÍ×µá¤Ç¤¹');
+define('_ERROR_DISALLOWEDUPLOAD',                      '¤¢¤Ê¤¿¤Ï¤É¤ÎBlog¥Á¡¼¥à¤Ë¤âÆþ¤Ã¤Æ¤¤¤Ê¤¤¤Î¤Ç¥Õ¥¡¥¤¥ë¤ò¥¢¥Ã¥×¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¡£');
+define('_ERROR_BADPERMISSIONS',                                '¥Õ¥¡¥¤¥ë/¥Ç¥£¥ì¥¯¥È¥ê¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤¬Àµ¤·¤¯¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£');
+define('_ERROR_UPLOADMOVEP',                           '¥¢¥Ã¥×¥í¡¼¥É¥Õ¥¡¥¤¥ë¤Î°ÜÆ°Ãæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£');
+define('_ERROR_UPLOADCOPY',                                    '¥Õ¥¡¥¤¥ë¤Î¥³¥Ô¡¼Ãæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£');
+define('_ERROR_UPLOADDUPLICATE',                       'Ʊ¤¸Ì¾Á°¤Î¥Õ¥¡¥¤¥ë¤¬´û¤Ë¸ºß¤·¤Þ¤¹¡£¥¢¥Ã¥×¥í¡¼¥É¤¹¤ëÁ°¤Ë̾Á°¤òÊѹ¹¤·¤Æ¤·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_ERROR_LOGINDISALLOWED',                       '´ÉÍýÎΰè¤Ø¤Î¥í¥°¥¤¥ó¤¬Ç§¤á¤é¤ì¤Æ¤¤¤Þ¤»¤ó¡£¤â¤·¤¢¤Ê¤¿¤¬´ÉÍý¥æ¡¼¥¶¡¼¤Î¥¢¥«¥¦¥ó¥È¤ò»ý¤Ã¤Æ¤¤¤ë¤Î¤Ê¤é¡¢´ÉÍý¥æ¡¼¥¶¡¼¤È¤·¤Æ¥í¥°¥¤¥ó¤·¤Ê¤ª¤·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_ERROR_DBCONNECT',                                     'MySQL¥µ¡¼¥Ð¤ËÀܳ¤Ç¤­¤Þ¤»¤ó');
+define('_ERROR_DBSELECT',                                      'Nucleus¤¬»ÈÍѤ¹¤ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÁªÂò¤Ç¤­¤Þ¤»¤ó¡£');
+define('_ERROR_NOSUCHLANGUAGE',                                '»ØÄꤵ¤ì¤¿¸À¸ì¥Õ¥¡¥¤¥ë¤Ï¸ºß¤·¤Þ¤»¤ó¡£');
+define('_ERROR_NOSUCHCATEGORY',                                '»ØÄꤵ¤ì¤¿¥«¥Æ¥´¥ê¡¼¤Ï¸ºß¤·¤Þ¤»¤ó¡£');
+define('_ERROR_DELETELASTCATEGORY',                    '¥«¥Æ¥´¥ê¡¼¤òºÇÄã°ì¤Ä¤ÏÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£');
+define('_ERROR_DELETEDEFCATEGORY',                     '´ûÄê¤Î¥«¥Æ¥´¥ê¡¼¤Ïºï½ü¤Ç¤­¤Þ¤»¤ó¡£');
+define('_ERROR_BADCATEGORYNAME',                       '¥«¥Æ¥´¥ê¡¼Ì¾¤È¤·¤Æ»È¤¨¤Þ¤»¤ó');
+define('_ERROR_DUPCATEGORYNAME',                       'Ʊ¤¸Ì¾Á°¤Î¥«¥Æ¥´¥ê¡¼¤¬´û¤Ë¸ºß¤·¤Þ¤¹¡£');
+
+// some warnings (used for mediadir setting)
+define('_WARNING_NOTADIR',                                     '·Ù¹ð: ¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡ª');
+define('_WARNING_NOTREADABLE',                         '·Ù¹ð: Æɤ߼è¤êÉÔ²Äǽ¤Ê¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹¡ª');
+define('_WARNING_NOTWRITABLE',                         '·Ù¹ð: ½ñ¤­¹þ¤ßÉÔ²Äǽ¤Ê¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹¡ª');
+
+// media and upload
+define('_MEDIA_UPLOADLINK',                                    '¥Õ¥¡¥¤¥ë¤Î¥¢¥Ã¥×¥í¡¼¥É');
+define('_MEDIA_MODIFIED',                                      '¹¹¿·Æü');
+define('_MEDIA_FILENAME',                                      '¥Õ¥¡¥¤¥ë̾');
+define('_MEDIA_DIMENSIONS',                                    '¥µ¥¤¥º');
+define('_MEDIA_INLINE',                                                'Ëä¤á¹þ¤ß·¿');
+define('_MEDIA_POPUP',                                         '¥Ý¥Ã¥×¥¢¥Ã¥×·¿');
+define('_UPLOAD_TITLE',                                                '¥Õ¥¡¥¤¥ëÁªÂò');
+define('_UPLOAD_MSG',                                          '¥¢¥Ã¥×¥í¡¼¥É¤¹¤ë¥Õ¥¡¥¤¥ë¤òÁªÂò¤·¤Æ¡Ö¥¢¥Ã¥×¥í¡¼¥É¡×¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤');
+define('_UPLOAD_BUTTON',                                       '¥¢¥Ã¥×¥í¡¼¥É');
+
+// some status messages
+//define('_MSG_ACCOUNTCREATED',                                '¥¢¥«¥¦¥ó¥È¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿¡£¥Ñ¥¹¥ï¡¼¥É¤¬¥á¡¼¥ë¤ÇÁ÷¿®¤µ¤ì¤Þ¤¹');
+//define('_MSG_PASSWORDSENT',                          '¥Ñ¥¹¥ï¡¼¥É¤¬¥á¡¼¥ë¤ÇÁ÷¿®¤µ¤ì¤Þ¤·¤¿¡£');
+define('_MSG_LOGINAGAIN',                                      '¥¢¥«¥¦¥ó¥È¾ðÊó¤¬Êѹ¹¤µ¤ì¤¿°Ù¡¢¥í¥°¥¤¥ó¤·¤Ê¤ª¤¹É¬Íפ¬¤¢¤ê¤Þ¤¹');
+define('_MSG_SETTINGSCHANGED',                         'ÀßÄ꤬Êѹ¹¤µ¤ì¤Þ¤·¤¿');
+define('_MSG_ADMINCHANGED',                                    '´ÉÍý¼Ô¸¢¸Â¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿');
+define('_MSG_NEWBLOG',                                         '¿·¤·¤¤Blog¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿');
+define('_MSG_ACTIONLOGCLEARED',                                '´ÉÍýÁàºîÍúÎò¤¬¾Ãµî¤µ¤ì¤Þ¤·¤¿');
+
+// actionlog in admin area
+define('_ACTIONLOG_DISALLOWED',                                'µö²Ä¤µ¤ì¤Æ¤¤¤Ê¤¤¥¢¥¯¥·¥ç¥ó: ');
+define('_ACTIONLOG_PWDREMINDERSENT',           '¿·¤·¤¤¥Ñ¥¹¥ï¡¼¥É¤ÎÁ÷¿®Àè: ');
+define('_ACTIONLOG_TITLE',                                     '´ÉÍýÁàºîÍúÎò');
+define('_ACTIONLOG_CLEAR_TITLE',                       '´ÉÍýÁàºîÍúÎò¤Î¾Ãµî');
+define('_ACTIONLOG_CLEAR_TEXT',                                '´ÉÍýÁàºîÍúÎò¤òº£¤¹¤°¾Ãµî');
+
+// team management
+define('_TEAM_TITLE',                                          'Blog¤Î¥Á¡¼¥à¤ò´ÉÍý¤¹¤ë ');
+define('_TEAM_CURRENT',                                                '¸½ºß¤Î¥Á¡¼¥à¥á¥ó¥Ð¡¼');
+define('_TEAM_ADDNEW',                                         '¥Á¡¼¥à¤Ë¿·¤·¤¤¥á¥ó¥Ð¡¼¤òÄɲ乤ë');
+define('_TEAM_CHOOSEMEMBER',                           '¥á¥ó¥Ð¡¼¤òÁª¤Ö');
+define('_TEAM_ADMIN',                                          '´ÉÍý¼Ô¸¢¸Â¤òÍ¿¤¨¤ë ');
+define('_TEAM_ADD',                                                    '¥Á¡¼¥à¤ËÄɲÃ');
+define('_TEAM_ADD_BTN',                                                '¥Á¡¼¥à¤ËÄɲÃ');
+
+// blogsettings
+define('_EBLOG_TITLE',                                         'BlogÀßÄê¤ÎÊÔ½¸');
+define('_EBLOG_TEAM_TITLE',                                    '¥Á¡¼¥à¤Î´ÉÍý');
+define('_EBLOG_TEAM_TEXT',                                     '¥Á¡¼¥à¤Î´ÉÍý...');
+define('_EBLOG_SETTINGS_TITLE',                                'BlogÀßÄê');
+define('_EBLOG_NAME',                                          'Blog¤Î̾Á°');
+define('_EBLOG_SHORTNAME',                                     'Blog¤Îû½Ì̾(ά¾Î)');
+define('_EBLOG_SHORTNAME_EXTRA',                       '<br />(a-z¤Î±Ñ¾®Ê¸»ú¤Î¤ß¤¬»ÈÍѤǤ­¤Þ¤¹¡£¶õÇò¤Ï»ÈÍѤǤ­¤Þ¤»¤ó)');
+define('_EBLOG_DESC',                                          'Blog¤ÎÀâÌÀ');
+define('_EBLOG_URL',                                           'Blog¤ÎURL');
+define('_EBLOG_DEFSKIN',                                       'Blog¤Îɸ½à¤Î¥¹¥­¥ó');
+define('_EBLOG_DEFCAT',                                                'Blog¤Îɸ½à¤Î¥«¥Æ¥´¥ê');
+define('_EBLOG_LINEBREAKS',                                    '¥¢¥¤¥Æ¥à¤Î²þ¹Ô¤òÊÑ´¹¤¹¤ë');
+define('_EBLOG_DISABLECOMMENTS',                       '¥³¥á¥ó¥È¤ò¼õ¤±ÉÕ¤±¤ë<br /><small>(¥³¥á¥ó¥È¤ò¶Ø»ß¤¹¤ë¤È¥³¥á¥ó¥È¤ÎÄɲäϤǤ­¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£)</small>');
+define('_EBLOG_ANONYMOUS',                                     '¥á¥ó¥Ð¡¼°Ê³°¤Î¥³¥á¥ó¥È¤ò¼õ¤±ÉÕ¤±¤ë');
+define('_EBLOG_NOTIFY',                                                'ÄÌÃΤ¹¤ë¥á¡¼¥ë¥¢¥É¥ì¥¹ ( ; ¤Ç¶èÀڤäƤ¯¤À¤µ¤¤)');
+define('_EBLOG_NOTIFY_ON',                                     '°Ê²¼¤òÄÌÃΤ¹¤ë');
+define('_EBLOG_NOTIFY_COMMENT',                                '¿·¤·¤¤¥³¥á¥ó¥È');
+define('_EBLOG_NOTIFY_KARMA',                          '¿·¤·¤¤¥«¥ë¥ÞÅêɼ');
+define('_EBLOG_NOTIFY_ITEM',                           '¿·¤·¤¤Blog¥¢¥¤¥Æ¥à');
+define('_EBLOG_PING',                                          '¹¹¿·»þ¤ËBlog¸¡º÷¥µ¡¼¥Ó¥¹¤Ë¹¹¿·¤òÄÌÃΤ¹¤ë'); // NOTE: This string is no longer in used
+define('_EBLOG_MAXCOMMENTS',                           '°ìÍ÷¤Ëɽ¼¨¤¹¤ë¥³¥á¥ó¥È¤ÎºÇÂç¿ô');
+define('_EBLOG_UPDATE',                                                '¼«Æ°¹¹¿·¤¹¤ë¥Õ¥¡¥¤¥ë');
+define('_EBLOG_OFFSET',                                                '¥µ¡¼¥Ð»þ¹ï¤È¤Î»þº¹');
+define('_EBLOG_STIME',                                         '¸½ºß¤Î¥µ¡¼¥Ð»þ¹ï: ');
+define('_EBLOG_BTIME',                                         '¸½ºß¤ÎBlog»þ¹ï: ');
+define('_EBLOG_CHANGE',                                                'ÀßÄê¤ÎÊѹ¹');
+define('_EBLOG_CHANGE_BTN',                                    'ÀßÄê¤ÎÊѹ¹');
+define('_EBLOG_ADMIN',                                         'Blog´ÉÍý¼Ô¸¢¸Â');
+define('_EBLOG_ADMIN_MSG',                                     '¤¢¤Ê¤¿¤Ë¤Ï´ÉÍý¼Ô¸¢¸Â¤¬³ä¤êÅö¤Æ¤é¤ì¤Þ¤¹');
+define('_EBLOG_CREATE_TITLE',                          '¿·¤·¤¤Blog¤ÎºîÀ®');
+define('_EBLOG_CREATE_TEXT',                           '¿·¤·¤¤Blog¤òºîÀ®¤¹¤ë°Ù¤Ë°Ê²¼¤Î¥Õ¥©¡¼¥à¤òËä¤á¤Æ¤¯¤À¤µ¤¤¡£<br /><br /> <b>Ãí°Õ:</b> É¬Íפʥª¥×¥·¥ç¥ó¤Î¤ß¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ÄɲäΥª¥×¥·¥ç¥ó¤òÀßÄꤷ¤¿¤¤¾ì¹ç¤ÏBlog¤òºîÀ®¤·¤¿¸å¡¢BlogÀßÄê¥Ú¡¼¥¸¤ÇÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£');
+define('_EBLOG_CREATE',                                                'ºîÀ®¡ª');
+define('_EBLOG_CREATE_BTN',                                    'Blog¤òºîÀ®');
+define('_EBLOG_CAT_TITLE',                                     '¥«¥Æ¥´¥ê¡¼');
+define('_EBLOG_CAT_NAME',                                      '¥«¥Æ¥´¥ê¡¼Ì¾');
+define('_EBLOG_CAT_DESC',                                      '¥«¥Æ¥´¥ê¡¼¤ÎÀâÌÀ');
+define('_EBLOG_CAT_CREATE',                                    '¿·¤·¤¤¥«¥Æ¥´¥ê¡¼¤òºî¤ë');
+define('_EBLOG_CAT_UPDATE',                                    '¥«¥Æ¥´¥ê¡¼¤Î¹¹¿·');
+define('_EBLOG_CAT_UPDATE_BTN',                                '¥«¥Æ¥´¥ê¡¼¤ò¹¹¿·');
+
+// templates
+define('_TEMPLATE_TITLE',                                      '¥Æ¥ó¥×¥ì¡¼¥È¤ÎÊÔ½¸');
+define('_TEMPLATE_AVAILABLE_TITLE',                    '»ÈÍѲÄǽ¤Ê¥Æ¥ó¥×¥ì¡¼¥È');
+define('_TEMPLATE_NEW_TITLE',                          '¿·¤·¤¤¥Æ¥ó¥×¥ì¡¼¥È');
+define('_TEMPLATE_NAME',                                       '¥Æ¥ó¥×¥ì¡¼¥È̾');
+define('_TEMPLATE_DESC',                                       '¥Æ¥ó¥×¥ì¡¼¥È¤ÎÀâÌÀ');
+define('_TEMPLATE_CREATE',                                     '¥Æ¥ó¥×¥ì¡¼¥È¤ÎºîÀ®');
+define('_TEMPLATE_CREATE_BTN',                         '¥Æ¥ó¥×¥ì¡¼¥È¤òºîÀ®');
+define('_TEMPLATE_EDIT_TITLE',                         '¥Æ¥ó¥×¥ì¡¼¥È¤ÎÊÔ½¸');
+define('_TEMPLATE_BACK',                                       '¥Æ¥ó¥×¥ì¡¼¥È¤Î°ìÍ÷¤ËÌá¤ë');
+define('_TEMPLATE_EDIT_MSG',                           'Á´¤Æ¤Î¥Æ¥ó¥×¥ì¡¼¥È¥Ñ¡¼¥Ä¤¬É¬ÍפÊÌõ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£É¬Íפʤ¤¾ì¹ç¤Ï¶õÍó¤Î¤Þ¤Þ¤Ë¤·¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡£');
+define('_TEMPLATE_SETTINGS',                           '¥Æ¥ó¥×¥ì¡¼¥ÈÀßÄê');
+define('_TEMPLATE_ITEMS',                                      '¥¢¥¤¥Æ¥à');
+define('_TEMPLATE_ITEMHEADER',                         '¥¢¥¤¥Æ¥à¤Î¥Ø¥Ã¥À¡¼');
+define('_TEMPLATE_ITEMBODY',                           '¥¢¥¤¥Æ¥à¤ÎËÜÂÎ');
+define('_TEMPLATE_ITEMFOOTER',                         '¥¢¥¤¥Æ¥à¤Î¥Õ¥Ã¥¿¡¼');
+define('_TEMPLATE_MORELINK',                           '³¤­¤Ø¤Î¥ê¥ó¥¯');
+define('_TEMPLATE_NEW',                                                '¿·¤·¤¤¥¢¥¤¥Æ¥à¤ËÉÕ¤±¤ë¥Þ¡¼¥¯');
+define('_TEMPLATE_COMMENTS_ANY',                       '¥³¥á¥ó¥È (¤¢¤ë¾ì¹ç)');
+define('_TEMPLATE_CHEADER',                                    '¥³¥á¥ó¥È¤Î¥Ø¥Ã¥À¡¼');
+define('_TEMPLATE_CBODY',                                      '¥³¥á¥ó¥È¤ÎËÜÂÎ');
+define('_TEMPLATE_CFOOTER',                                    '¥³¥á¥ó¥È¤Î¥Õ¥Ã¥¿¡¼');
+define('_TEMPLATE_CONE',                                       '¥³¥á¥ó¥È¤¬1¤Ä¤Î»þ');
+define('_TEMPLATE_CMANY',                                      '¥³¥á¥ó¥È¤¬2¤Ä°Ê¾å¤Î»þ');
+define('_TEMPLATE_CMORE',                                      '¥³¥á¥ó¥È¤Î³¤­¤òÆɤà');
+define('_TEMPLATE_CMEXTRA',                                    'ÅÐÏ¿¥á¥ó¥Ð¡¼¤«¤é¤Î¥³¥á¥ó¥È¤Ø¤ÎÄɲÃɽ¼¨');
+define('_TEMPLATE_COMMENTS_NONE',                      '¥³¥á¥ó¥È (̵¤¤¾ì¹ç)');
+define('_TEMPLATE_CNONE',                                      '¥³¥á¥ó¥È¤¬Ìµ¤¤»þ');
+define('_TEMPLATE_COMMENTS_TOOMUCH',           '¥³¥á¥ó¥È (ºÇÂçɽ¼¨¿ô¤è¤ê¿¤¤¾ì¹ç)');
+define('_TEMPLATE_CTOOMUCH',                           '¥³¥á¥ó¥È¤¬Â¿¤¹¤®¤ë»þ');
+define('_TEMPLATE_ARCHIVELIST',                                '¥¢¡¼¥«¥¤¥Ö°ìÍ÷');
+define('_TEMPLATE_AHEADER',                                    '¥¢¡¼¥«¥¤¥Ö°ìÍ÷¤Î¥Ø¥Ã¥À¡¼');
+define('_TEMPLATE_AITEM',                                      '¥¢¡¼¥«¥¤¥Ö°ìÍ÷¤ÎËÜÂÎ');
+define('_TEMPLATE_AFOOTER',                                    '¥¢¡¼¥«¥¤¥Ö°ìÍ÷¤Î¥Õ¥Ã¥¿¡¼');
+define('_TEMPLATE_DATETIME',                           'ÆüÉդȻþ¹ï');
+define('_TEMPLATE_DHEADER',                                    'ÆüÉդΥإåÀ¡¼');
+define('_TEMPLATE_DFOOTER',                                    'ÆüÉդΥեå¿¡¼');
+define('_TEMPLATE_DFORMAT',                                    'ÆüÉÕ¥Õ¥©¡¼¥Þ¥Ã¥È');
+define('_TEMPLATE_TFORMAT',                                    '»þ¹ï¥Õ¥©¡¼¥Þ¥Ã¥È');
+define('_TEMPLATE_LOCALE',                                     '¥í¥±¡¼¥ë');
+define('_TEMPLATE_IMAGE',                                      '²èÁü¤È¥á¥Ç¥£¥¢¤Î¥Ý¥Ã¥×¥¢¥Ã¥×');
+define('_TEMPLATE_PCODE',                                      '¥Ý¥Ã¥×¥¢¥Ã¥×²èÁü¤Ø¤Î¥ê¥ó¥¯¥³¡¼¥É');
+define('_TEMPLATE_ICODE',                                      '¥¤¥ó¥é¥¤¥ó²èÁü¤Î¥³¡¼¥É');
+define('_TEMPLATE_MCODE',                                      '¥á¥Ç¥£¥¢¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥ê¥ó¥¯¥³¡¼¥É');
+define('_TEMPLATE_SEARCH',                                     '¸¡º÷');
+define('_TEMPLATE_SHIGHLIGHT',                         '¥Ï¥¤¥é¥¤¥Èɽ¼¨');
+define('_TEMPLATE_SNOTFOUND',                          '¸¡º÷¤Ç²¿¤â¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç');
+define('_TEMPLATE_UPDATE',                                     '¹¹¿·');
+define('_TEMPLATE_UPDATE_BTN',                         '¥Æ¥ó¥×¥ì¡¼¥È¤Î¹¹¿·');
+define('_TEMPLATE_RESET_BTN',                          '¥ê¥»¥Ã¥È');
+define('_TEMPLATE_CATEGORYLIST',                       '¥«¥Æ¥´¥ê¡¼°ìÍ÷');
+define('_TEMPLATE_CATHEADER',                          '¥«¥Æ¥´¥ê¡¼°ìÍ÷¤Î¥Ø¥Ã¥À¡¼');
+define('_TEMPLATE_CATITEM',                                    '¥«¥Æ¥´¥ê¡¼°ìÍ÷¤ÎËÜÂÎ');
+define('_TEMPLATE_CATFOOTER',                          '¥«¥Æ¥´¥ê¡¼°ìÍ÷¤Î¥Õ¥Ã¥¿¡¼');
+
+// skins
+define('_SKIN_EDIT_TITLE',                                     '¥¹¥­¥ó¤ÎÊÔ½¸');
+define('_SKIN_AVAILABLE_TITLE',                                '»ÈÍѲÄǽ¤Ê¥¹¥­¥ó');
+define('_SKIN_NEW_TITLE',                                      '¿·¤·¤¤¥¹¥­¥ó');
+define('_SKIN_NAME',                                           '̾Á°');
+define('_SKIN_DESC',                                           'ÀâÌÀ');
+define('_SKIN_TYPE',                                           'Content Type');
+define('_SKIN_CREATE',                                         'ºîÀ®');
+define('_SKIN_CREATE_BTN',                                     '¥¹¥­¥ó¤ÎºîÀ®');
+define('_SKIN_EDITONE_TITLE',                          '¥¹¥­¥ó¤ÎÊÔ½¸');
+define('_SKIN_BACK',                                           '¥¹¥­¥ó¤Î°ìÍ÷¤ËÌá¤ë');
+define('_SKIN_PARTS_TITLE',                                    '¥¹¥­¥ó¥Ñ¡¼¥Ä');
+define('_SKIN_PARTS_MSG',                                      '¤½¤ì¤¾¤ì¤Î¥¹¥­¥ó¤ËÁ´¤Æ¤Î¥¿¥¤¥×¤¬É¬ÍפȤϸ¤ê¤Þ¤»¤ó¡£É¬Íפʤ¤¾ì¹ç¤Ï¶õÍó¤Î¤Þ¤Þ¤Ë¤·¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡£°Ê²¼¤«¤éÊÔ½¸¤¹¤ë¥¹¥­¥ó¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:');
+define('_SKIN_PART_MAIN',                                      '¥á¥¤¥ó¤ÎÌܼ¡¥Ú¡¼¥¸');
+define('_SKIN_PART_ITEM',                                      '¸ÄÊÌ¥¢¥¤¥Æ¥à¥Ú¡¼¥¸');
+define('_SKIN_PART_ALIST',                                     '·îÊÌ¥¢¡¼¥«¥¤¥Ö°ìÍ÷¥Ú¡¼¥¸');
+define('_SKIN_PART_ARCHIVE',                           '·îÊÌ¥¢¡¼¥«¥¤¥Ö¥Ú¡¼¥¸');
+define('_SKIN_PART_SEARCH',                                    '¸¡º÷¥Ú¡¼¥¸');
+define('_SKIN_PART_ERROR',                                     '¥¨¥é¡¼¥Ú¡¼¥¸');
+define('_SKIN_PART_MEMBER',                                    '¥á¥ó¥Ð¡¼¾ÜºÙ¥Ú¡¼¥¸');
+define('_SKIN_PART_POPUP',                                     '²èÁü¥Ý¥Ã¥×¥¢¥Ã¥×¥¦¥£¥ó¥É¥¦');
+define('_SKIN_GENSETTINGS_TITLE',                      '°ìÈÌÀßÄê');
+define('_SKIN_CHANGE',                                         'Êѹ¹');
+define('_SKIN_CHANGE_BTN',                                     'ÀßÄê¤ÎÊѹ¹');
+define('_SKIN_UPDATE_BTN',                                     '¥¹¥­¥ó¤Î¹¹¿·');
+define('_SKIN_RESET_BTN',                                      '¥ê¥»¥Ã¥È');
+define('_SKIN_EDITPART_TITLE',                         '¥¹¥­¥ó¤ÎÊÔ½¸');
+define('_SKIN_GOBACK',                                         'Ìá¤ë');
+define('_SKIN_ALLOWEDVARS',                                    '»ÈÍѲÄǽ¤ÊÊÑ¿ô (¥¯¥ê¥Ã¥¯¤ÇÀâÌÀɽ¼¨):');
+
+// global settings
+define('_SETTINGS_TITLE',                                      '¥°¥í¡¼¥Ð¥ëÀßÄê');
+define('_SETTINGS_SUB_GENERAL',                                '¥°¥í¡¼¥Ð¥ëÀßÄê');
+define('_SETTINGS_DEFBLOG',                                    '´ûÄê¤ÎBlog');
+define('_SETTINGS_ADMINMAIL',                          '´ÉÍý¼Ô¤Î¥á¡¼¥ë¥¢¥É¥ì¥¹');
+define('_SETTINGS_SITENAME',                           '¥µ¥¤¥È̾');
+define('_SETTINGS_SITEURL',                                    '¥µ¥¤¥È¤ÎURL (ºÇ¸å¤Ë¥¹¥é¥Ã¥·¥å "/" ¤òÉÕ¤±¤Æ¤¯¤À¤µ¤¤)');
+define('_SETTINGS_ADMINURL',                           '´ÉÍý¼ÔÎΰè¤ÎURL (ºÇ¸å¤Ë¥¹¥é¥Ã¥·¥å "/" ¤òÉÕ¤±¤Æ¤¯¤À¤µ¤¤)');
+define('_SETTINGS_DIRS',                                       'Nucleus¥Ç¥£¥ì¥¯¥È¥ê');
+define('_SETTINGS_MEDIADIR',                           '¥á¥Ç¥£¥¢(²èÁü¡¦²»À¼)¤¬¥¢¥Ã¥×¥í¡¼¥É¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê');
+define('_SETTINGS_SEECONFIGPHP',                       '(config.php ¤ò»²¾È)');
+define('_SETTINGS_MEDIAURL',                           '¥á¥Ç¥£¥¢URL (ºÇ¸å¤Ë¥¹¥é¥Ã¥·¥å "/" ¤òÉÕ¤±¤Æ¤¯¤À¤µ¤¤)');
+define('_SETTINGS_ALLOWUPLOAD',                                '¥Õ¥¡¥¤¥ë¤Î¥¢¥Ã¥×¥í¡¼¥É¤ò²Äǽ¤Ë¤¹¤ë');
+define('_SETTINGS_ALLOWUPLOADTYPES',           '¥¢¥Ã¥×¥í¡¼¥É¤òµö²Ä¤¹¤ë¥Õ¥¡¥¤¥ë¥¿¥¤¥×');
+define('_SETTINGS_CHANGELOGIN',                                '¥á¥ó¥Ð¡¼¤Ë¤è¤ë¥í¥°¥¤¥ó̾/¥Ñ¥¹¥ï¡¼¥É¤ÎÊѹ¹¤ò²Äǽ¤Ë¤¹¤ë');
+define('_SETTINGS_COOKIES_TITLE',                      'Cookie ÀßÄê');
+define('_SETTINGS_COOKIELIFE',                         '¥í¥°¥¤¥ó Cookie ¤ÎÍ­¸ú´ü´Ö');
+define('_SETTINGS_COOKIESESSION',                      '¥»¥Ã¥·¥ç¥ó¤´¤È');
+define('_SETTINGS_COOKIEMONTH',                                '°ì¥ö·î');
+define('_SETTINGS_COOKIEPATH',                         'Cookie ¥Ñ¥¹ (¾åµé¥ª¥×¥·¥ç¥ó)');
+define('_SETTINGS_COOKIEDOMAIN',                       'Cookie ¥É¥á¥¤¥ó (¾åµé¥ª¥×¥·¥ç¥ó)');
+define('_SETTINGS_COOKIESECURE',                       '¥»¥­¥å¥¢ Cookie (¾åµé¥ª¥×¥·¥ç¥ó)');
+define('_SETTINGS_LASTVISIT',                          'ºÇ½ªË¬ÌäÆü»þ¤òCookie¤ËÊݸ¤¹¤ë');
+define('_SETTINGS_ALLOWCREATE',                                '¥Ó¥¸¥¿¡¼¤Ë¤è¤ë¥á¥ó¥Ð¡¼¥¢¥«¥¦¥ó¥ÈºîÀ®¤ò²Äǽ¤Ë¤¹¤ë');
+define('_SETTINGS_NEWLOGIN',                           '¥Ó¥¸¥¿¡¼¤¬ºîÀ®¤·¤¿¥¢¥«¥¦¥ó¥È¤Ç¤Î¥í¥°¥¤¥ó¤òºîÀ®Ä¾¸å¤Ë²Äǽ¤Ë¤¹¤ë');
+define('_SETTINGS_NEWLOGIN2',                          '(¿·¤·¤¯ºîÀ®¤µ¤ì¤¿¥¢¥«¥¦¥ó¥È¤Î¤ß)');
+define('_SETTINGS_MEMBERMSGS',                         '¥á¥ó¥Ð¡¼´Ö¥µ¡¼¥Ó¥¹¤ò²Äǽ¤Ë¤¹¤ë');
+define('_SETTINGS_LANGUAGE',                           '»ÈÍѤ¹¤ë¸À¸ì');
+define('_SETTINGS_DISABLESITE',                                '¥µ¥¤¥È¤òÊĺ¿¤·¡¢»ØÄê¤ÎURL¤ËžÁ÷¤¹¤ë¡ÊÈó¾ï»þÍÑ¡Ë');
+define('_SETTINGS_DBLOGIN',                                    'MySQL ¥í¥°¥¤¥ó &amp; ¥Ç¡¼¥¿¥Ù¡¼¥¹');
+define('_SETTINGS_UPDATE',                                     'ÀßÄê¤Î¹¹¿·');
+define('_SETTINGS_UPDATE_BTN',                         'ÀßÄê¤ò¹¹¿·');
+define('_SETTINGS_DISABLEJS',                          'JavaScript¥Ä¡¼¥ë¥Ð¡¼¤ò̵¸ú¤Ë¤¹¤ë');
+define('_SETTINGS_MEDIA',                                      '¥á¥Ç¥£¥¢/¥¢¥Ã¥×¥í¡¼¥ÉÀßÄê');
+define('_SETTINGS_MEDIAPREFIX',                                '¥¢¥Ã¥×¥í¡¼¥É¤¹¤ë¥Õ¥¡¥¤¥ë̾¤ÎƬ¤ËÆüÉÕ¤òÉղ乤ë');
+define('_SETTINGS_MEMBERS',                                    '¥á¥ó¥Ð¡¼ÀßÄê');
+
+// bans
+define('_BAN_TITLE',                                           '¥¢¥¯¶Ø¥ê¥¹¥È:');
+define('_BAN_NONE',                                                    '¤³¤ÎBlog¤Ï¥¢¥¯¥»¥¹µ¬À©¤µ¤ì¤Æ¤¤¤Þ¤»¤ó');
+define('_BAN_NEW_TITLE',                                       'µ¬À©¤¹¤ëIP¥¢¥É¥ì¥¹¤ÎÄɲÃ');
+define('_BAN_NEW_TEXT',                                                'º£¤¹¤°µ¬À©¥¢¥É¥ì¥¹¤òÄɲ乤ë');
+define('_BAN_REMOVE_TITLE',                                    '¥¢¥¯¥»¥¹µ¬À©¤Î²ò½ü');
+define('_BAN_IPRANGE',                                         '¥¢¥¯¥»¥¹µ¬À©¤¹¤ëIP¥¢¥É¥ì¥¹¤ÎÈÏ°Ï');
+define('_BAN_BLOGS',                                           '¥¢¥¯¥»¥¹µ¬À©¤¹¤ëBlog: ');
+define('_BAN_DELETE_TITLE',                                    '¥¢¥¯¥»¥¹µ¬À©¤Î²ò½ü');
+define('_BAN_ALLBLOGS',                                                '¤¢¤Ê¤¿¤¬´ÉÍý¼Ô¸¢¸Â¤ò»ý¤ÄÁ´¤Æ¤ÎBlog');
+define('_BAN_REMOVED_TITLE',                           '¥¢¥¯¥»¥¹µ¬À©¤ò²ò½ü¤·¤Þ¤·¤¿');
+define('_BAN_REMOVED_TEXT',                                    '°Ê²¼¤ÎBlog¤Î¥¢¥¯¥»¥¹µ¬À©¤ò²ò½ü¤·¤Þ¤·¤¿:');
+define('_BAN_ADD_TITLE',                                       'µ¬À©¤¹¤ëIP¥¢¥É¥ì¥¹¤ÎÄɲÃ');
+define('_BAN_IPRANGE_TEXT',                                    '°Ê²¼¤Ë¥Ö¥í¥Ã¥¯¤·¤¿¤¤IP¥¢¥É¥ì¥¹¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£');
+define('_BAN_BLOGS_TEXT',                                      '1¤Ä¤ÎBlog¤Î¤ß¤Çµ¬À©¤¹¤ë¤«¡¢¤¢¤Ê¤¿¤¬´ÉÍý¼Ô¸¢¸Â¤ò»ý¤ÄÁ´¤Æ¤ÎBlog¤Çµ¬À©¤¹¤ë¤«¤òÁªÂò¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£°Ê²¼¤«¤éÁª¤ó¤Ç¤¯¤À¤µ¤¤¡£');
+define('_BAN_REASON_TITLE',                                    'Íýͳ');
+define('_BAN_REASON_TEXT',                                     'µ¬À©Ãæ¤ÎIP¥¢¥É¥ì¥¹¤ÎÈÏ°ÏÆâ¤ÎHOST¤«¤é¥³¥á¥ó¥È¤òÅê¹Æ¤·¤¿¤ê¥«¥ë¥ÞÅêɼ¤ò¤·¤è¤¦¤È¤·¤¿¤È¤­¤Ëɽ¼¨¤µ¤ì¤ëµ¬À©Íýͳ¤ò½ñ¤¤¤Æ¤ª¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹ (¾å¸Â256ʸ»ú)¡£');
+define('_BAN_ADD_BTN',                                         'µ¬À©¤¹¤ëIP¥¢¥É¥ì¥¹¤ÎÄɲÃ');
+
+// LOGIN screen
+define('_LOGIN_MESSAGE',                                       '¥á¥Ã¥»¡¼¥¸');
+define('_LOGIN_SHARED',                                                _LOGINFORM_SHARED);
+define('_LOGIN_FORGOT',                                                '¥Ñ¥¹¥ï¡¼¥É¤ò˺¤ì¤¿');
+
+// membermanagement
+define('_MEMBERS_TITLE',                                       '¥á¥ó¥Ð¡¼¤Î´ÉÍý');
+define('_MEMBERS_CURRENT',                                     '¸½ºß¤Î¥á¥ó¥Ð¡¼');
+define('_MEMBERS_NEW',                                         '¿·¤·¤¤¥á¥ó¥Ð¡¼¤ÎÄɲÃ');
+define('_MEMBERS_DISPLAY',                                     'ɽ¼¨¤µ¤ì¤ë̾Á°(¥í¥°¥¤¥óID)');
+define('_MEMBERS_DISPLAY_INFO',                                '(¤³¤Î̾Á°¤Ï¥í¥°¥¤¥ó»þ¤Ë»È¤ï¤ì¤Þ¤¹)');
+define('_MEMBERS_REALNAME',                                    '¥Ï¥ó¥É¥ë¥Í¡¼¥à');
+define('_MEMBERS_PWD',                                         '¥Ñ¥¹¥ï¡¼¥É');
+define('_MEMBERS_REPPWD',                                      '¥Ñ¥¹¥ï¡¼¥É¡Ê³Îǧ¡Ë');
+define('_MEMBERS_EMAIL',                                       '¥á¡¼¥ë¥¢¥É¥ì¥¹');
+define('_MEMBERS_EMAIL_EDIT',                          '(¥á¡¼¥ë¥¢¥É¥ì¥¹¤òÊѹ¹¤¹¤ë¤È¡¢¤½¤Î¥¢¥É¥ì¥¹¤Ø¼«Æ°Åª¤Ëǧ¾ÚÍÑ¥ê¥ó¥¯¤¬Á÷¿®¤µ¤ì¤Þ¤¹)');
+define('_MEMBERS_URL',                                         'Web site¥¢¥É¥ì¥¹ (URL)');
+define('_MEMBERS_SUPERADMIN',                          'Super-admin(ºÇ¹â´ÉÍý)¸¢¸Â¤òÍ¿¤¨¤ë');
+define('_MEMBERS_CANLOGIN',                                    '´ÉÍý¼ÔÎΰè¤Ø¤Î¥í¥°¥¤¥ó¤ò²Äǽ¤Ë¤¹¤ë');
+define('_MEMBERS_NOTES',                                       'È÷¹Í');
+define('_MEMBERS_NEW_BTN',                                     '¥á¥ó¥Ð¡¼¤ÎÄɲÃ');
+define('_MEMBERS_EDIT',                                                '¥á¥ó¥Ð¡¼¤ÎÊÔ½¸');
+define('_MEMBERS_EDIT_BTN',                                    'ÀßÄê¤ÎÊѹ¹');
+define('_MEMBERS_BACKTOOVERVIEW',                      '¥á¥ó¥Ð¡¼¤Î°ìÍ÷¤ËÌá¤ë');
+define('_MEMBERS_DEFLANG',                                     '»ÈÍѤ¹¤ë¸À¸ì');
+define('_MEMBERS_USESITELANG',                         '- ¥µ¥¤¥È¤ÎÀßÄê¤ò»È¤¦ -');
+
+// List of blogs (TT = tooltip)
+define('_BLOGLIST_TT_VISIT',                           '¥µ¥¤¥È¤ò¸«¤ë');
+define('_BLOGLIST_ADD',                                                '¥¢¥¤¥Æ¥à¤ÎÄɲÃ');
+define('_BLOGLIST_TT_ADD',                                     '¤³¤ÎBlog¤Ë¿·¤·¤¤¥¢¥¤¥Æ¥à¤òÄɲä·¤Þ¤¹');
+define('_BLOGLIST_EDIT',                                       '¥¢¥¤¥Æ¥à¤ÎÊÔ½¸/ºï½ü');
+define('_BLOGLIST_TT_EDIT',                                    '¸ø³«ºÑ¤ß¤Î¥¢¥¤¥Æ¥à¤òÊÔ½¸¤Èºï½ü');
+define('_BLOGLIST_BMLET',                                      '¥Ö¥Ã¥¯¥Þ¡¼¥¯¥ì¥Ã¥È');
+define('_BLOGLIST_TT_BMLET',                           '¥Ö¥Ã¥¯¥Þ¡¼¥¯¥ì¥Ã¥È¤Î¥¤¥ó¥¹¥È¡¼¥ë');
+define('_BLOGLIST_SETTINGS',                           '¥Ö¥í¥°ÀßÄê');
+define('_BLOGLIST_TT_SETTINGS',                                '¥Ö¥í¥°¤ÎÀßÄê¤È¥Ö¥í¥°¥Á¡¼¥à¤Î´ÉÍý');
+define('_BLOGLIST_BANS',                                       '¥¢¥¯¥»¥¹µ¬À©');
+define('_BLOGLIST_TT_BANS',                                    '¥¢¥¯¥»¥¹µ¬À©¤Î³Îǧ/ÄɲÃ/ºï½ü');
+define('_BLOGLIST_DELETE',                                     'Á´¤Æºï½ü');
+define('_BLOGLIST_TT_DELETE',                          '¤³¤ÎBlog¤òºï½ü');
+
+// OVERVIEW screen
+define('_OVERVIEW_YRBLOGS',                                    '¤¢¤Ê¤¿¤ÎBlog');
+define('_OVERVIEW_YRDRAFTS',                           '¥É¥é¥Õ¥È(²¼½ñ¤­)');
+define('_OVERVIEW_YRSETTINGS',                         'ÀßÄê');
+define('_OVERVIEW_GSETTINGS',                          '´ðËÜÀßÄê');
+define('_OVERVIEW_NOBLOGS',                                    '¤¢¤Ê¤¿¤Ï¤É¤ÎBlog¥Á¡¼¥à¥ê¥¹¥È¤Ë¤âÆþ¤Ã¤Æ¤¤¤Þ¤»¤ó');
+define('_OVERVIEW_NODRAFTS',                           '¥É¥é¥Õ¥È(²¼½ñ¤­Ãæ)¤Îµ­»ö¤Ï¤¢¤ê¤Þ¤»¤ó');
+define('_OVERVIEW_EDITSETTINGS',                       '¤¢¤Ê¤¿¤ÎÀßÄê');
+define('_OVERVIEW_BROWSEITEMS',                                '¤¢¤Ê¤¿¤Î¥¢¥¤¥Æ¥à');
+define('_OVERVIEW_BROWSECOMM',                         '¤¢¤Ê¤¿¤Î¥³¥á¥ó¥È');
+define('_OVERVIEW_VIEWLOG',                                    '´ÉÍýÁàºîÍúÎò');
+define('_OVERVIEW_MEMBERS',                                    '¥á¥ó¥Ð¡¼´ÉÍý');
+define('_OVERVIEW_NEWLOG',                                     '¿·µ¬BlogºîÀ®');
+define('_OVERVIEW_SETTINGS',                           '¥°¥í¡¼¥Ð¥ëÀßÄê');
+define('_OVERVIEW_TEMPLATES',                          '¥Æ¥ó¥×¥ì¡¼¥ÈÊÔ½¸');
+define('_OVERVIEW_SKINS',                                      '¥¹¥­¥óÊÔ½¸');
+define('_OVERVIEW_BACKUP',                                     'DBÊݸ/Éü¸µ');
+
+// ITEMLIST
+define('_ITEMLIST_BLOG',                                                       'Blog¥¢¥¤¥Æ¥à¤ÎÊÔ½¸: ');
+define('_ITEMLIST_YOUR',                                                       '¤¢¤Ê¤¿¤Î¥¢¥¤¥Æ¥à');
+
+// Comments
+define('_COMMENTS',                                                                    '¥³¥á¥ó¥È');
+define('_NOCOMMENTS',                                                          '¤³¤Î¥¢¥¤¥Æ¥à¤Ø¤Î¥³¥á¥ó¥È¤Ï¤¢¤ê¤Þ¤»¤ó');
+define('_COMMENTS_YOUR',                                                       '¤¢¤Ê¤¿¤Î¥³¥á¥ó¥È');
+define('_NOCOMMENTS_YOUR',                                                     '¤¢¤Ê¤¿¤Î¥³¥á¥ó¥È¤Ï¤¢¤ê¤Þ¤»¤ó');
+
+// LISTS (general)
+define('_LISTS_NOMORE',                                                                '²¿¤â¤¢¤ê¤Þ¤»¤ó');
+define('_LISTS_PREV',                                                          'Á°¤Ø');
+define('_LISTS_NEXT',                                                          '¼¡¤Ø');
+define('_LISTS_SEARCH',                                                                '¸¡º÷');
+define('_LISTS_CHANGE',                                                                'Êѹ¹');
+define('_LISTS_PERPAGE',                                                       '¥¢¥¤¥Æ¥à/¥Ú¡¼¥¸');
+define('_LISTS_ACTIONS',                                                       '¥¢¥¯¥·¥ç¥ó');
+define('_LISTS_DELETE',                                                                'ºï½ü');
+define('_LISTS_EDIT',                                                          'ÊÔ½¸');
+define('_LISTS_MOVE',                                                          '°ÜÆ°');
+define('_LISTS_CLONE',                                                         'Ê£À½');
+define('_LISTS_TITLE',                                                         '¥¿¥¤¥È¥ë');
+define('_LISTS_BLOG',                                                          'Blog');
+define('_LISTS_NAME',                                                          '̾Á°');
+define('_LISTS_DESC',                                                          'ÀâÌÀ');
+define('_LISTS_TIME',                                                          '»þ´Ö');
+define('_LISTS_COMMENTS',                                                      '¥³¥á¥ó¥È');
+define('_LISTS_TYPE',                                                          '¥¿¥¤¥×');
+
+
+// member list
+define('_LIST_MEMBER_NAME',                                                    'ɽ¼¨¤µ¤ì¤ë̾Á°(¥í¥°¥¤¥óID)');
+define('_LIST_MEMBER_RNAME',                                           '¥Ï¥ó¥É¥ë¥Í¡¼¥à');
+define('_LIST_MEMBER_ADMIN',                                           'Super-admin¸¢¸Â ');
+define('_LIST_MEMBER_LOGIN',                                           '¥í¥°¥¤¥ó²Äǽ');
+define('_LIST_MEMBER_URL',                                                     '¥¦¥§¥Ö¥µ¥¤¥È');
+
+// banlist
+define('_LIST_BAN_IPRANGE',                                                    'µ¬À©Ãæ¤ÎIP¥¢¥É¥ì¥¹¤ÎÈÏ°Ï');
+define('_LIST_BAN_REASON',                                                     'µ¬À©¤ÎÍýͳ');
+
+// actionlist
+define('_LIST_ACTION_MSG',                                                     '¥á¥Ã¥»¡¼¥¸');
+
+// commentlist
+define('_LIST_COMMENT_BANIP',                                          'IP¥¢¥É¥ì¥¹¤òµ¬À©');
+define('_LIST_COMMENT_WHO',                                                    'ºî¼Ô');
+define('_LIST_COMMENT',                                                                '¥³¥á¥ó¥È');
+define('_LIST_COMMENT_HOST',                                           '¥Û¥¹¥È');
+
+// itemlist
+define('_LIST_ITEM_INFO',                                                      '¾ðÊó');
+define('_LIST_ITEM_CONTENT',                                           '¥¿¥¤¥È¥ë¤ÈËÜʸ');
+
+
+// teamlist
+define('_LIST_TEAM_ADMIN',                                                     '´ÉÍý¼Ô¸¢¸Â ');
+define('_LIST_TEAM_CHADMIN',                                           '´ÉÍý¼Ô¸¢¸Â¤ÎÊѹ¹');
+
+// edit comments
+define('_EDITC_TITLE',                                                         '¥³¥á¥ó¥È¤ÎÊÔ½¸');
+define('_EDITC_WHO',                                                           'ºî¼Ô');
+define('_EDITC_HOST',                                                          '¥Û¥¹¥È');
+define('_EDITC_WHEN',                                                          'Æü»þ');
+define('_EDITC_TEXT',                                                          'ËÜʸ');
+define('_EDITC_EDIT',                                                          '¥³¥á¥ó¥È¤ÎÊÔ½¸');
+define('_EDITC_MEMBER',                                                                '¥á¥ó¥Ð¡¼');
+define('_EDITC_NONMEMBER',                                                     'Èó¥á¥ó¥Ð¡¼');
+
+// move item
+define('_MOVE_TITLE',                                                          '¤É¤ÎBlog¤Ë°ÜÆ°¤·¤Þ¤¹¤«¡©');
+define('_MOVE_BTN',                                                                    '¥¢¥¤¥Æ¥à¤ò°ÜÆ°¤¹¤ë');
+
+?>
diff --git a/utf8/nucleus/language/japanese-utf8.php b/utf8/nucleus/language/japanese-utf8.php
new file mode 100755 (executable)
index 0000000..e5255f8
--- /dev/null
@@ -0,0 +1,1330 @@
+<?php
+// Japanese (UTF-8) Nucleus Language File
+//
+// Author: chrome (chrome@cgi.no-ip.org)
+// Modified by: Osamu Higuchi (osamu@higuchi.com)
+// Modified by: shizuki (shizuki@kinezumi.net)
+// Nucleus version: v1.0-v3.5
+//
+// Please note: if you want to translate this file to your own language, be aware
+// that in a next Nucleus version, new variables might be added and some other ones
+// might be deleted. Therefor, it's important to list the Nucleus version for which
+// the file was written in your document.
+//
+// Fully translated language file can be sent to us and will be made
+// available for download (with proper credit to the author, of course)
+
+// Note for Japanese users
+// このファイルは Nucleus の UTF-8 版日本語ランゲージファイルです。
+
+
+
+/**
+ * Japanese UTF-8 Nucleus Language File
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The NucleusCMS Japanチーム
+ * @version $Id$
+ */
+
+/********************************************
+ *        Start New for 3.50                *
+ ********************************************/
+define('_PLUGS_TITLE_GETPLUGINS',              'プラグインを入手…');
+define('_ARCHIVETYPE_YEAR', '年');
+define('_ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE',            '新しいバージョンが入手可能です');
+define('_ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT',             'アップグレードが入手可能です: v');
+define('_MANAGER_PLUGINSQLAPI_NOTSUPPORT', "プラグイン %s を読み込めませんでした。(このプラグインはSqlAPIをサポートしていません。データベースの接続方法を見直してください)");
+
+
+/********************************************
+ *        Start New for 3.40                *
+ ********************************************/
+
+// START changed/added after 3.33 START
+define('_MEMBERS_USEAUTOSAVE',                         '下書きの自動保存機能を有効にしますか?');
+
+define('_TEMPLATE_PLUGIN_FIELDS',                      'プラグインによる拡張フィールド');
+define('_TEMPLATE_BLOGLIST',                           'Blog一覧');
+define('_TEMPLATE_BLOGHEADER',                         'Blog一覧のヘッダー');
+define('_TEMPLATE_BLOGITEM',                           'Blog一覧の本体');
+define('_TEMPLATE_BLOGFOOTER',                         'Blog一覧のフッター');
+
+define('_SETTINGS_DEFAULTLISTSIZE',                    '一覧の既定の表示数');
+define('_SETTINGS_DEBUGVARS',                          'デバッグモードを有効にする');
+
+define('_CREATE_ACCOUNT_TITLE',                                'アカウントの新規作成');
+define('_CREATE_ACCOUNT0',                                     'アカウントの作成');
+define('_CREATE_ACCOUNT1',                                     'アカウントの作成は許可されていません。<br /><br />');
+define('_CREATE_ACCOUNT2',                                     '詳細はウェブサイトの管理者にお問い合わせください。');
+define('_CREATE_ACCOUNT_USER_DATA',                    '新規アカウントの情報');
+define('_CREATE_ACCOUNT_LOGIN_NAME',           'ログインID (必須):');
+define('_CREATE_ACCOUNT_LOGIN_NAME_VALID',     ' a-z の英小文字と 0-9 の数字のみ使用できます');
+define('_CREATE_ACCOUNT_REAL_NAME',                    'ハンドル (必須):');
+define('_CREATE_ACCOUNT_EMAIL',                                'メールアドレス (必須):');
+define('_CREATE_ACCOUNT_EMAIL2',                       '(アクティベーション用のリンクが送られるので有効なものを使用してください)');
+define('_CREATE_ACCOUNT_URL',                          '(もしあれば)自分のサイトのURL:');
+define('_CREATE_ACCOUNT_SUBMIT',                       'アカウントの作成');
+
+define('_BMLET_BACKTODRAFTS',                          'ドラフトに戻す');
+define('_BMLET_CANCEL',                                                'キャンセル');
+
+define('_LIST_ITEM_NOCONTENT',                                         'コメントはありません');
+define('_LIST_ITEM_COMMENTS',                                          'コメント(%d)件');
+
+define('_EDITC_URL',                                                           'Web site');
+define('_EDITC_EMAIL',                                                         'E-mail');
+
+define('_MANAGER_PLUGINFILE_NOTFOUND',                         "プラグイン「%s」を読み込めませんでした(ファイルが見つかりません)");
+/* changed */
+// plugin dependency
+define('_ERROR_INSREQPLUGIN',                          'プラグイン %s がインストールされていないためにインストールすることができませんでした。');
+define('_ERROR_DELREQPLUGIN',                          'プラグイン %s がこのプラグインに依存している為に削除できません。');
+
+//define('_ADD_ADDLATER',                                              '後で追加');
+define('_ADD_ADDLATER',                                                '日時を指定して追加'); // <mod by shizuki />
+
+define('_LOGIN_NAME',                                          'ログインID:');
+define('_LOGIN_PASSWORD',                                      'パスワード:');
+
+// changed from _BOOKMARLET_BMARKLFOLLOW
+define('_BOOKMARKLET_BMARKFOLLOW',                                     ' (ほとんどのブラウザで動作します)');
+// END changed/added after 3.33 END
+
+// START merge UTF-8 and EUC-JP
+
+// Create New blog
+define('_ADMIN_NOTABILIA',                                     '注意事項');
+define('_ADMIN_PLEASE_READ',                           '作成にあたって、下記の<strong>注意事項</strong> をまずお読み下さい');
+define('_ADMIN_HOW_TO_ACCESS',                         '新しいBlogを作成した後に、このBlogにアクセスするための方法を紹介しておきます。方法は2つあります:');
+define('_ADMIN_SIMPLE_WAY',                                    '<strong>簡単な方法:</strong> <code>index.php</code>の複製を作り、新しいBlogを表示するように変更を加えます。 この変更の詳細は、作成後に表示されます。');
+define('_ADMIN_ADVANCED_WAY',                          '<strong>高度な方法:</strong> 現在のBlogで使用しているスキンに<code>&lt;%otherblog()&gt;</code>というコードを使った記述を加えます。この方法では、同じページ内で複数のBlogを表示することが可能となります。');
+define('_ADMIN_HOW_TO_CREATE',                         'Blogの作成');
+
+
+define('_BOOKMARKLET_NEW_CATEGORY',                    'アイテムは追加され、新しいカテゴリが作成されました。');
+define('_BOOKMARKLET_NEW_CATEGORY_EDIT',       'ここをクリックしてカテゴリーの名前と説明を編集してください。');
+define('_BOOKMARKLET_NEW_WINDOW',                      '新しいウィンドウが開きます');
+define('_BOOKMARKLET_SEND_PING',                       'アイテムの追加に成功しました。現在blog検索サービスに更新pingを送信します。'); // NOTE: This string is no longer in used
+
+// END merge UTF-8 and EUC-JP
+
+// <add by shizuki>
+// OVERVIEW screen
+define('_OVERVIEW_SHOWALL',                                                    '全てのblogを表示');
+
+// Edit skins
+define('_SKINEDIT_ALLOWEDBLOGS',                                       '作成済みのblog:');
+define('_SKINEDIT_ALLOWEDTEMPLATESS',                          '使用可能なテンプレート:');
+
+// delete member
+define('_WARNINGTXT_NOTDELMEDIAFILES',                         'メンバーによってアップロードされたファイルは<b>削除されません</b>ので気をつけてください。(少なくともこのバージョン以下のNucleusではそうなっています)');      // <add by shizuki />
+
+// send Weblogupdate.ping
+define('_UPDATEDPING_MESSAGE',                                         '<h2>サイトが更新されました。Pingサーバに更新を通知します。</h2><p>しばらくお待ちください</p><p>自動的にページが切り替わらない場合は、表示されるリンクをクリックしてください。'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_GOPINGPAGE',                                      '更新Ping送信'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_PINGING',                                         'Pingサーバに送信中です'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_VIEWITEM',                                                '更新されたblog:'); // NOTE: This string is no longer in used
+define('_UPDATEDPING_VISITOWNSITE',                                    'サイトへ行ってみる'); // NOTE: This string is no longer in used
+
+// General category
+define('_EBLOGDEFAULTCATEGORY_NAME',                           '総合');
+define('_EBLOGDEFAULTCATEGORY_DESC',                           '投稿した記事に合うカテゴリが無い時にこのカテゴリを使用すると良いでしょう');
+
+// First ITEM
+define('_EBLOG_FIRSTITEM_TITLE',                                       '最初の記事(自動投稿)');
+define('_EBLOG_FIRSTITEM_BODY',                                                'これはあなたのblogにおける最初のアイテムです。自由に削除していただいてかまいません。');
+
+// New weblog was created
+define('_BLOGCREATED_TITLE',                                           '新しいblogが作成されました');
+define('_BLOGCREATED_ADDEDTXT',                                                '新しいblog 「%s」が作成されました。続けて、blogにアクセスするために以下のどちらかの手順に進んでください。');
+define('_BLOGCREATED_SIMPLEWAY',                                       '簡単な方法: 下のコードを貼付けた <code>%s.php</code> というファイルを作成する');
+define('_BLOGCREATED_ADVANCEDWAY',                                     '高度な方法: 現在使用しているスキンに新しいblogを展開させるための記述を加える');
+define('_BLOGCREATED_SIMPLEDESC1',                                     '方法 1 :簡単な方法: <code>%s.php</code> というファイルを作成');
+define('_BLOGCREATED_SIMPLEDESC2',                                     '<code>%s.php</code> というファイルを作成して、中身に以下のコードを貼り付けます:');
+define('_BLOGCREATED_SIMPLEDESC3',                                     'すでにある<code>index.php</code>と同じディレクトリにアップロードします。');
+define('_BLOGCREATED_SIMPLEDESC4',                                     '新しいblogの作成を完了するために、このファイルのURLを入力してください。(<em>多分</em>入力済みの値で合っているとは思いますが保証はできません):');
+define('_BLOGCREATED_ADVANCEDWAY2',                                    '方法 2 :高度な方法: 現在使用しているスキンに新しいblogを展開する記述を加える');
+define('_BLOGCREATED_ADVANCEDWAY3',                                    '新しいblogの作成を完了するためにURLを入力してください。(ほとんどの場合既存blogと同じURLになります)');
+
+// Donate!
+define('_ADMINPAGEFOOT_OFFICIALURL',                           'http://japan.nucleuscms.org/');
+define('_ADMINPAGEFOOT_DONATEURL',                                     'http://japan.nucleuscms.org/donate.php');
+define('_ADMINPAGEFOOT_DONATE',                                                '寄付について');
+define('_ADMINPAGEFOOT_COPYRIGHT',                                     'The Nucleus Group &amp; Nucleus CMS Japanチーム');
+
+// Quick menu
+define('_QMENU_MANAGE_SYSTEM',                                         'システム環境');
+
+// REG file
+define('_WINREGFILE_TEXT',                                                     '「%s」に記事を投稿');
+
+// Bookmarklet
+define('_BOOKMARKLET_TITLE',                                           'ブックマークレット<!-- と 右クリックメニュー -->');
+define('_BOOKMARKLET_DESC1',                                           'ブックマークレット(Bookmarklet)とは、Webブラウザのブックマークに登録して使うJavaScriptプログラムです。<br />');
+define('_BOOKMARKLET_DESC2',                                           'Nucleusには『お気に入り』または『ブックマークツールバー』に登録でき、クリックひとつで blog への投稿画面を開く機能をブラウザに追加することが出来ます。<br />');
+define('_BOOKMARKLET_DESC3',                                           'Webサイトを見ていてそのページにリンクを張った投稿をしたいと思った時にブックマークレットを使用すれば、そのサイト(ページ)へのリンクが書き込まれた状態で、');
+define('_BOOKMARKLET_DESC4',                                           'さらに、そのページ内で文章を選択した状態で使用した場合、選択されている文章が自動的に引用された状態で、Nucleusの新規アイテムの追加ウィンドウがポップアップします。<br />');
+define('_BOOKMARKLET_DESC5',                                           'またWindows Internet Explorerのみですが、この機能を右クリックメニューに登録することも出来ます。');
+define('_BOOKMARKLET_BOOKARKLET',                                      'ブックマークレット');
+define('_BOOKMARKLET_ANCHOR',                                          '「%s」に記事を投稿');
+define('_BOOKMARKLET_BMARKTEXT',                                       ' 下のリンクを「お気に入り」もしくは「ブックマーク」に追加してください。追加の仕方はそれぞれのブラウザのヘルプを参照してください。<br />');
+define('_BOOKMARKLET_BMARKTEST',                                       ' (テストしてみたい場合は下のリンクをクリックしてみてください)');
+define('_BOOKMARKLET_RIGHTCLICK',                                      '右クリックメニューにインストール(Windows Internet Explorerのみ)');
+define('_BOOKMARKLET_RIGHTLABEL',                                      '右クリックメニュー');
+define('_BOOKMARKLET_RIGHTTEXT1',                                      'Windowsでインターネットエクスプローラーを使用している場合は、');
+define('_BOOKMARKLET_RIGHTTEXT2',                                      'にインストールすることも出来ます<br />(「開く」を選択すれば直接レジストリに登録します)');
+define('_BOOKMARKLET_RIGHTTEXT3',                                      'このインストールした右クリックメニューを表示するためにはIEの再起動が必要です。');
+define('_BOOKMARKLET_UNINSTALLTT',                                     'アンインストール');
+define('_BOOKMARKLET_DELETEBAR',                                       '「お気に入り」もしくはツールバーから消すには、単に削除するだけです。');
+define('_BOOKMARKLET_DELETERIGHTT',                                    '右クリックメニューから消したい時は、以下の手順を踏んでください:');
+define('_BOOKMARKLET_DELETERIGHT1',                                    'スタートメニューから「ファイルを指定して実行...」を選択');
+define('_BOOKMARKLET_DELETERIGHT2',                                    '"regedit" と入力');
+define('_BOOKMARKLET_DELETERIGHT3',                                    '"OK" ボタンを押す');
+define('_BOOKMARKLET_DELETERIGHT4',                                    '"\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt" をツリーの中から検索');
+define('_BOOKMARKLET_DELETERIGHT5',                                    '"「(あなたのblogの名前)」に記事を投稿" エントリを削除');
+
+define('_BOOKMARKLET_ERROR_SOMETHINGWRONG',                    '何かが間違っています');
+define('_BOOKMARKLET_ERROR_COULDNTNEWCAT',                     '新しいカテゴリを作ることが出来ませんでした');
+
+// BAN
+define('_BAN_EXAMPLE_TITLE',                                           '例');
+define('_BAN_EXAMPLE_TEXT',                                                    ': "134.58.253.193"と入力した場合は、このIPアドレスを持つPC1台だけをブロックします。"134.58.253"と入力した場合は、"134.58.235.0~134.58.235.255"の範囲の256個のIPアドレスを持つPCを全てブロックします。これは、前者のIPアドレス(134.58.253.193)を含みます。');
+define('_BAN_IP_CUSTOM',                                                       'ブロック指定: ');
+define('_BAN_BANBLOGNAME',                                                     '%s のみ');
+
+// Plugin Options
+define('_PLUGIN_OPTIONS_TITLE',                                                '%s のオプション設定');
+
+// Plugin file loda error
+define('_PLUGINFILE_COULDNT_BELOADED',                         'エラー: プラグインファイル <strong>%s.php</strong> を読み込めませんでした。ファイルが存在しない、もくは使用中の Nucleus 上で動作させるために必要な機能がプラグインでサポートされていません。(<a href="?action=actionlog">管理操作履歴</a>に詳細があります。)');
+
+//ITEM add/edit template (for japanese only)
+define('_ITEM_ADDEDITTEMPLATE_FORMAT',                         'フォーマット:');
+define('_ITEM_ADDEDITTEMPLATE_YEAR',                           '年');
+define('_ITEM_ADDEDITTEMPLATE_MONTH',                          '月');
+define('_ITEM_ADDEDITTEMPLATE_DAY',                                    '日');
+define('_ITEM_ADDEDITTEMPLATE_HOUR',                           '時');
+define('_ITEM_ADDEDITTEMPLATE_MINUTE',                         '分');
+
+// Errors
+define('_ERRORS_INSTALLSQL',                                           '「install.sql」ファイルを削除してください');
+define('_ERRORS_INSTALLDIR',                                           '「install」ディレクトリを削除してください');  // <add by shizuki />
+define('_ERRORS_INSTALLPHP',                                           '「install.php」ファイルを削除してください');
+define('_ERRORS_UPGRADESDIR',                                          '「nucleus/upgrades」ディレクトリを削除してください');
+define('_ERRORS_CONVERTDIR',                                           '「nucleus/convert」ディレクトリを削除してください');
+define('_ERRORS_CONFIGPHP',                                                    '「config.php」ファイルを読み取り専用(「chmod 444」等)にしてください');
+define('_ERRORS_STARTUPERROR1',                                                '<p>一つ、またはそれ以上のNucleusCMSのインストール(アップグレード)用ファイルがサーバ上に残っている、もしくは書き込み可能になっています。</p><p>これらのファイルを削除、またはパーミッションを変更してセキュリティを確保してください。Nucleusが見つけたファイルのいくつかを次に示します。</p> <ul><li>');
+define('_ERRORS_STARTUPERROR2',                                                '</li></ul><p>この警告を表示させたくない場合は、<code>globalfunctions.php</code>の<code>$CONF[\'alertOnSecurityRisk\']</code>の値を<code>0</code>にするか、同様の内容を<code>config.php</code>の最後に記述します(セキュリティレベルが下がります)</p>');
+define('_ERRORS_STARTUPERROR3',                                                'セキュリティ リスクの警告');
+
+// PluginAdmin tickets by javascript
+define('_PLUGINADMIN_TICKETS_JAVASCRIPT',                      '<p><b>チケットの自動発行中にエラーが発生しました</b></p>');
+
+// Global settings disablesite URL
+define('_SETTINGS_DISABLESITEURL',                                     '転送先のURL:');
+
+// Skin import/export
+define('_SKINIE_SEELEMENT_UNEXPECTEDTAG',                      '予期しないタグ');
+define('_SKINIE_ERROR_FAILEDOPEN_FILEURL',                     'ファイル、またはURLを開く事が出来ません');
+define('_SKINIE_NAME_CLASHES_DETECTED',                                'スキン/テンプレートに名前の同じものがあります。allowOverwriteを1に設定して、上書きモードで再度実行してください。');
+
+// ACTIONS.php parse_commentform
+define('_ACTIONURL_NOTLONGER_PARAMATER',                       '「action.php」のURLはコメントフォーム用の変数のパラメーターではなくなっています。この設定は「グローバル設定」に移動しました');
+
+// ADMIN.php addToTemplate 'Query error: '
+define('_ADMIN_SQLDIE_QUERYERROR',                                     'クエリ エラー: ');
+
+// backup.php Backup WARNING
+define('_BACKUP_BACKUPFILE_TITLE',                                     'Nucleus CMS のデータベースバックアップファイルです');
+define('_BACKUP_BACKUPFILE_BACKUPDATE',                                'バックアップした日:');
+define('_BACKUP_BACKUPFILE_NUCLEUSVERSION',                    'Nucleus CMS のバージョン:');
+define('_BACKUP_BACKUPFILE_DATABASE_NAME',                     'Nucleus CMS のデータベースの名前:');
+define('_BACKUP_BACKUPFILE_TABLE_NAME',                                'テーブルの構造 :');
+define('_BACKUP_BACKUPFILE_TABLEDATAFOR',                      '%s テーブルのダンプデータ');
+define('_BACKUP_WARNING_NUCLEUSVERSION',                               '注意!: バックアップからデータベースを復元する際は、Nucleusのバージョンがバックアップを作成した時と同じものかよく確認してください。');
+define('_BACKUP_RESTOR_NOFILEUPLOADED',                                'ファイルがアップロードされていません');
+define('_BACKUP_RESTOR_UPLOAD_ERROR',                          'アップロード中にエラーが発生しました');
+define('_BACKUP_RESTOR_UPLOAD_NOCORRECTTYPE',          'アップロードされたファイルの形式が不正です');
+define('_BACKUP_RESTOR_UPLOAD_NOZLIB',                         '圧縮形式のバックアップファイルを解凍できませんでした(「zlib」ライブラリがインストールされていません)');
+define('_BACKUP_RESTOR_SQL_ERROR',                                     'SQL エラー: ');
+
+// BLOG.php addTeamMember
+define('_TEAM_ADD_NEWTEAMMEMBER',                                      '%s(ID=%d) を、ブログ "%s" のチームに加えました');
+
+// ADMIN.php systemoverview()
+define('_ADMIN_SYSTEMOVERVIEW_HEADING',                                'システム環境一覧');
+define('_ADMIN_SYSTEMOVERVIEW_PHPANDMYSQL',                    'PHP と MySQL');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONS',                       'バージョン');
+define('_ADMIN_SYSTEMOVERVIEW_PHPVERSION',                     'PHP のバージョン');
+define('_ADMIN_SYSTEMOVERVIEW_MYSQLVERSION',           'MySQL のバージョン');
+define('_ADMIN_SYSTEMOVERVIEW_SETTINGS',                       'PHP の設定');
+define('_ADMIN_SYSTEMOVERVIEW_GDLIBRALY',                      'GD ライブラリ');
+define('_ADMIN_SYSTEMOVERVIEW_MODULES',                                'Apache モジュール');
+define('_ADMIN_SYSTEMOVERVIEW_ENABLE',                         '有効');
+define('_ADMIN_SYSTEMOVERVIEW_DISABLE',                                '無効');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSSYSTEM',          'Nucleus のシステムについて');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSVERSION',         'Nucleus のバージョン');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSPATCHLEVEL',      'Nucleus のパッチレベル');
+define('_ADMIN_SYSTEMOVERVIEW_NUCLEUSSETTINGS',                '重要な設定');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK',           'バージョンチェック');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TXT',       'より新しいバージョンのリリースが無いか、公式サイトでチェックできます: ');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL',       'http://japan.nucleuscms.org/version.php?v=%d&amp;pl=%d');
+define('_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE',     '最新のバージョンをチェック');
+define('_ADMIN_SYSTEMOVERVIEW_NOT_ADMIN',                      'この画面を閲覧する権限がありません');
+
+// ENCAPSULATE.php
+define('_ENCAPSULATE_ENCAPSULATE_NOENTRY',                     'エントリーがありません');
+
+// globalfunctions.php
+define('_GFUNCTIONS_LOGINPCSHARED_YES',                                '共有PCからのログイン');
+define('_GFUNCTIONS_LOGINPCSHARED_NO',                         '共有ではないPCからのログイン');
+define('_GFUNCTIONS_LOGINSUCCESSFUL_TXT',                      '%s がログインしました (%s)');
+define('_GFUNCTIONS_LOGINFAILED_TXT',                          '%s がログインに失敗しました');
+define('_GFUNCTIONS_LOGOUT_TXT',                                       '%s がログアウトしました');
+define('_GFUNCTIONS_HEADERSALREADYSENT_FILE',          '<code>%s</code> の <code>%s</code> 行目で');
+define('_GFUNCTIONS_HEADERSALREADYSENT_TITLE',         'HTTPヘッダは送信済みです');
+define('_GFUNCTIONS_HEADERSALREADYSENT_TXT',           '<p>%sすでにページのHTTPヘッダが送出されており、Nucleusが正常に動作しなくなる可能性があります。</p><p><code>config.php</code>やランゲージファイル、その他プラグインのファイルの終わりに、余分な改行や文字列がないか確認してもういちどアクセスしてみてください。</p><p>根本的な解決をせずにこのメッセージを表示させなくするには、<code>globalfunctions.php</code>の冒頭の<code>$CONF[\'alertOnHeadersSent\']</code>を<code>0</code>に設定します。</p>');
+define('_GFUNCTIONS_PARSEFILE_FILEMISSING',                    'ファイルが見つかりません');
+define('_GFUNCTIONS_AN_ERROR_OCCURRED',                                'エラーが発生しました');
+define('_GFUNCTIONS_YOU_AERNT_LOGGEDIN',                       'ログインしていません');
+
+// MANAGER.php
+define('_MANAGER_PLUGINFILE_NOCLASS',                          "プラグイン「%s」を読み込めませんでした(ファイル内にプラグインクラスが存在しません)");
+define('_MANAGER_PLUGINTABLEPREFIX_NOTSUPPORT',                "プラグイン「%s」を読み込めませんでした(「SqlTablePrefix」をサポートしていません)");
+
+// mysql.php
+define('_NO_SUITABLE_MYSQL_LIBRARY',                           "<p>Nucleusを動かすのに必要なmySQL用のライブラリがインストールされていません</p>");
+
+// PLUGIN.php
+define('_ERROR_PLUGIN_NOSUCHACTION',                           '指定されたアクションは存在しません。');
+
+// PLUGINADMIN.php
+define('_ERROR_INVALID_PLUGIN',                                                '不正なプラグインです');
+
+// showlist.php
+define('_LIST_PLUGS_DEPREQ',                                           'このプラグインに依存するプラグイン:');
+define('_LIST_SKIN_PREVIEW',                                           "'%s' スキンのプレビュー");
+define('_LIST_SKIN_PREVIEW_VIEWLARGER',                                "大きな画像を見る");
+define('_LIST_SKIN_README',                                                    "'%s' スキンについてもっと詳しく");
+define('_LIST_SKIN_README_TXT',                                                'Read me');
+
+// BLOG.php createNewCategory()
+define('_CREATED_NEW_CATEGORY_NAME',                           '新しいカテゴリ');
+define('_CREATED_NEW_CATEGORY_DESC',                           '新しいカテゴリの説明');
+
+// ADMIN.php blog settings
+define('_EBLOG_CURRENT_TEAM_MEMBER',                           'このブログチームの現在のメンバー:');
+
+// HTML outputs
+define('_HTML_XML_NAME_SPACE_AND_LANG_CODE',           'xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"');
+
+// Language Files
+define('_LANGUAGEFILES_JAPANESE-UTF8',                         '日本語 - 日本語 (UTF-8)');
+define('_LANGUAGEFILES_JAPANESE-EUC',                          '日本語 - 日本語 (EUC)');
+define('_LANGUAGEFILES_JAPANESE-SJIS',                         '日本語 - 日本語 (Shift-JIS)');
+define('_LANGUAGEFILES_ENGLISH-UTF8',                          '英語 - English (UTF-8)');
+define('_LANGUAGEFILES_ENGLISH',                                       '英語 - English (iso-8859-1)');
+/*
+define('_LANGUAGEFILES_BULGARIAN',                                     'ブルガリア語 - &#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080; (iso-8859-5)');
+define('_LANGUAGEFILES_CATALAN',                                       'カタラン語 - Catal&agrave; (iso-8859-1)');
+define('_LANGUAGEFILES_CHINESE-GBK',                           '簡体字中国語 - &#31777;&#20307;&#23383;&#20013;&#25991; (gbk)');
+define('_LANGUAGEFILES_SIMCHINESE',                                    '簡体字中国語 - &#31777;&#20307;&#23383;&#20013;&#25991; (gb2312)');
+define('_LANGUAGEFILES_CHINESE-UTF8',                          '簡体字中国語 - &#31777;&#20307;&#23383;&#20013;&#25991; (utf-8)');
+define('_LANGUAGEFILES_CHINESEB5',                                     '繁体字中国語 - &#32321;&#20307;&#23383;&#20013;&#25991; (big5)');
+define('_LANGUAGEFILES_CHINESEB5-UTF8',                                '繁体字中国語 - &#32321;&#20307;&#23383;&#20013;&#25991; (utf-8)');
+define('_LANGUAGEFILES_TRADITIONAL_CHINESE',           '繁体字中国語 - &#32321;&#20307;&#23383;&#20013;&#25991; (big5)');
+define('_LANGUAGEFILES_TRADITIONAL_CHINESE-UTF-8',     '繁体字中国語 - &#32321;&#20307;&#23383;&#20013;&#25991; (utf-8)');
+define('_LANGUAGEFILES_CZECH',                                         'チェコ語 - &#268;esky (windows-1250)');
+define('_LANGUAGEFILES_FINNISH',                                       'フィンランド語 - Suomi (iso-8859-1)');
+define('_LANGUAGEFILES_FRENCH',                                                'フランス語 - Fran&ccedil;ais (iso-8859-1)');
+define('_LANGUAGEFILES_GALEGO',                                                'ガリシア語 - Galego (iso-8859-1)');
+define('_LANGUAGEFILES_GERMAN',                                                'ドイツ語 - Deutsch (iso-8859-1)');
+define('_LANGUAGEFILES_HUNGARIAN',                                     'ハンガリー語 - Magyar (iso-8859-2)');
+define('_LANGUAGEFILES_ITALIANO',                                      'イタリア語 - Italiano (iso-8859-1)');
+define('_LANGUAGEFILES_KOREAN-EUC-KR',                         '韓国語 - &#54620;&#44397;&#50612; (euc-kr)');
+define('_LANGUAGEFILES_KOREAN-UTF',                                    '韓国語 - &#54620;&#44397;&#50612; (utf-8)');
+define('_LANGUAGEFILES_LATVIAN',                                       'ラトビア語 - Latvie&scaron;u (windows-1257)');
+define('_LANGUAGEFILES_NEDERLANDS',                                    'オランダ語 - Nederlands (iso-8859-15)');
+define('_LANGUAGEFILES_PERSIAN',                                       'ペルシア語 - &#1601;&#1575;&#1585;&#1587;&#1740; (utf-8)');
+define('_LANGUAGEFILES_PORTUGUESE_BRAZIL',                     'ブラジル-ポルトガル語 - Portugu&ecirc;s (iso-8859-1)');
+define('_LANGUAGEFILES_RUSSIAN',                                       'ロシア語 - &#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081; (windows-1251)');
+define('_LANGUAGEFILES_SLOVAK',                                                'スロベキア語 - Sloven&#269;ina (ISO-8859-2)');
+define('_LANGUAGEFILES_SPANISH-UTF8',                          'スペイン語 - Espa&ntilde;ol (utf-8)');
+define('_LANGUAGEFILES_SPANISH',                                       'スペイン語 - Espa&ntilde;ol (iso-8859-1)');
+*/
+
+// </add by shizuki>
+
+/********************************************
+ *        End New for 3.40                  *
+ ********************************************/
+
+// START changed/added after 3.3 START
+define('_AUTOSAVEDRAFT',                                       'ドラフト保存状況');
+define('_AUTOSAVEDRAFT_LASTSAVED',                     '最終ドラフト保存日時: ');
+define('_AUTOSAVEDRAFT_NOTYETSAVED',           '保存されていません');
+define('_AUTOSAVEDRAFT_NOW',                           'ドラフト保存');
+define('_SKIN_PARTS_SPECIAL',                          'スペシャルスキンパーツ');
+define('_ERROR_SKIN_PARTS_SPECIAL_FORMAT',     '英数字以外の文字は使えません');
+define('_ERROR_SKIN_PARTS_SPECIAL_DELETE',     'このスキンパーツを削除できません');
+define('_CONFIRMTXT_SKIN_PARTS_SPECIAL',       '本当にこのスペシャルスキンパーツを削除してもいいですか?');
+define('_ERROR_PLUGIN_LOAD',                           'Nucleusのプラグインとして必要なメソッドがプラグインでサポートされていないか、プラグインファイルが見当たりません。(<a href="?action=actionlog">管理操作履歴</a>に詳細があります。)');
+// END changed/added after 3.3 END
+
+// START changed/added after 3.22 START
+define('_SEARCHFORM_QUERY',                                    '検索キーワード');
+define('_ERROR_EMAIL_REQUIRED',                                'メールアドレスが必要です');
+define('_COMMENTFORM_MAIL',                                    'あなたのサイトのURL:');
+define('_COMMENTFORM_EMAIL',                           'メールアドレス:');
+define('_EBLOG_REQUIREDEMAIL',                         'コメント時にメールアドレスを要求する');
+define('_ERROR_COMMENTS_SPAM',              'あなたのコメントは、スパムテストの結果拒否されました');
+// END changed/added after 3.22 END
+
+// START changed/added after 3.15 START
+
+define('_LIST_PLUG_SUBS_NEEDUPDATE',           '「登録リストのアップデート」ボタンをクリックしてイベント情報を更新してください');
+define('_LIST_PLUGS_DEP',                                      '依存するプラグイン:');
+
+// END changed/added after 3.15
+
+// START changed/added after 3.1 START
+
+// comments list per weblog
+define('_COMMENTS_BLOG',                                       'コメントのリスト:');
+define('_NOCOMMENTS_BLOG',                                     'このblogにはまだコメントがつけられていません');
+define('_BLOGLIST_COMMENTS',                           'コメント');
+define('_BLOGLIST_TT_COMMENTS',                                'このblogにつけられたコメントのリスト');
+
+
+// for use in archivetype-skinvar
+define('_ARCHIVETYPE_DAY',                                     '日');
+define('_ARCHIVETYPE_MONTH',                           '月');
+
+// tickets (prevents malicious users to trick an admin to perform actions he doesn't want)
+define('_ERROR_BADTICKET',                                     'チケットが不正、もしくは期限切れです');
+
+// cookie prefix
+define('_SETTINGS_COOKIEPREFIX',                       'Cookie プレフィックス');
+
+// account activation
+define('_ERROR_NOLOGON_NOACTIVATE',                    '認証用リンクを送信できません。あなたのログインは許可されていません。');
+define('_ERROR_ACTIVATE',                                      '認証キーは存在しないか、無効か、あるいは期限切れです。');
+define('_ACTIONLOG_ACTIVATIONLINK',                    '認証用リンクが送信されました。');
+define('_MSG_ACTIVATION_SENT',                         '認証用リンクをメールで送信しました。');
+
+// activation link emails
+define('_ACTIVATE_REGISTER_MAIL',                      "こんにちは <%memberName%>\n\n<%siteName%> (<%siteUrl%>)におけるアカウントを有効にしなければなりません。\n下のリンクをクリックしてアクティベーションを行ってください。:\n\n\t<%activationUrl%>\n\nアクティベーション用のURLの有効期限は2日間です。それ以降は無効になりますので早めに行ってください。");
+define('_ACTIVATE_REGISTER_MAILTITLE',         "アカウント'<%memberName%>'のアクティベーション");
+define('_ACTIVATE_REGISTER_TITLE',                     'ようこそ <%memberName%>');
+define('_ACTIVATE_REGISTER_TEXT',                      'アカウント作成はほぼ完了しました。下のフォームでアカウントのパスワードを設定してください。');
+define('_ACTIVATE_FORGOT_MAIL',                                "こんにちは <%memberName%>\n\n下のリンクから、この<%siteName%> (<%siteUrl%>)における新しいパスワードを設定することができます。\n\n\t<%activationUrl%>\n\nアクティベーション用のURLの有効期限は2日間です。それ以降は無効になりますので早めに行ってください。");
+define('_ACTIVATE_FORGOT_MAILTITLE',           "アカウント'<%memberName%>'の再認証");
+define('_ACTIVATE_FORGOT_TITLE',                       'ようこそ <%memberName%>');
+define('_ACTIVATE_FORGOT_TEXT',                                '下のフォームで新しいパスワードが設定できます。');
+define('_ACTIVATE_CHANGE_MAIL',                                "こんにちは <%memberName%>\n\nメールアドレスが変更されました。\n\n<%siteName%> (<%siteUrl%>)におけるアカウントを再認証する必要があります。\n下のリンクをクリックしてアクティベーションを行ってください。:\n\n\t<%activationUrl%>\n\nアクティベーション用のURLの有効期限は2日間です。それ以降は無効になりますので早めに行ってください。");
+define('_ACTIVATE_CHANGE_MAILTITLE',           "アカウント'<%memberName%>'の再認証");
+define('_ACTIVATE_CHANGE_TITLE',                       'ようこそ <%memberName%>');
+define('_ACTIVATE_CHANGE_TEXT',                                'メールアドレスの変更が確認されました。');
+define('_ACTIVATE_SUCCESS_TITLE',                      'アクティベーションに成功しました');
+define('_ACTIVATE_SUCCESS_TEXT',                       'アクティベーションに成功しました。');
+define('_MEMBERS_SETPWD',                                      'パスワードを設定する');
+define('_MEMBERS_SETPWD_BTN',                          'パスワードを設定');
+define('_QMENU_ACTIVATE',                                      'アクティベーション');
+define('_QMENU_ACTIVATE_TEXT',                         '<p>アクティベーションを完了すれば、<a href="index.php?action=showlogin">ログイン</a>してから利用できます。</p>');
+
+define('_PLUGS_BTN_UPDATE',                                    '登録リストのアップデート');
+
+// global settings
+define('_SETTINGS_JSTOOLBAR',                          'Javascriptツールバーのスタイル');
+define('_SETTINGS_JSTOOLBAR_FULL',                     'フル・ツールバー(IE)');
+define('_SETTINGS_JSTOOLBAR_SIMPLE',           'シンプル・ツールバー(IE以外)');
+define('_SETTINGS_JSTOOLBAR_NONE',                     'ツールバーを使わない');
+define('_SETTINGS_URLMODE_HELP',                       '(参考:<a href="documentation/tips.html#searchengines-fancyurls">FancyURLを有効にする方法</a>)');
+
+// extra plugin settings part when editing categories/members/blogs/...
+define('_PLUGINS_EXTRA',                                       'プラグインによる追加設定');
+
+// itemlist info column keys
+define('_LIST_ITEM_BLOG',                                      'blog:');
+define('_LIST_ITEM_CAT',                                       'cat:');
+define('_LIST_ITEM_AUTHOR',                                    '著者:');
+define('_LIST_ITEM_DATE',                                      '日付:');
+define('_LIST_ITEM_TIME',                                      '時間:');
+
+// indication of registered members in comments list
+define('_LIST_COMMENTS_MEMBER',                        '(メンバー)');
+
+// batch operations
+define('_BATCH_WITH_SEL',                                      '選択されたものを:');
+define('_BATCH_EXEC',                                          '実行');
+
+// quickmenu
+// Note: _USER_SETTINGS と _MANAGE_SETTINGS は 3.3 以降、オリジナル版は
+// 変更されましたが、日本語版は表記をそのままとします。
+// 間違って更新しないように!!
+define('_QMENU_HOME',                                          '管理ホーム');
+define('_QMENU_ADD',                                           'アイテム追加');
+define('_QMENU_ADD_SELECT',                                    '- blog選択 -');
+define('_QMENU_USER_SETTINGS',                         'あなたの設定');
+define('_QMENU_USER_ITEMS',                                    'あなたのアイテム');
+define('_QMENU_USER_COMMENTS',                         'あなたのコメント');
+define('_QMENU_MANAGE',                                                'サイト管理');
+define('_QMENU_MANAGE_LOG',                                    '管理操作履歴');
+define('_QMENU_MANAGE_SETTINGS',                       'グローバル設定');
+define('_QMENU_MANAGE_MEMBERS',                                'メンバー管理');
+define('_QMENU_MANAGE_NEWBLOG',                                '新規Blog作成');
+define('_QMENU_MANAGE_BACKUPS',                                'DB保存/復元');
+define('_QMENU_MANAGE_PLUGINS',                                'プラグイン管理');
+define('_QMENU_LAYOUT',                                                'レイアウト設定');
+define('_QMENU_LAYOUT_SKINS',                          'スキン編集');
+define('_QMENU_LAYOUT_TEMPL',                          'テンプレート編集');
+define('_QMENU_LAYOUT_IEXPORT',                                '読込/書出');
+define('_QMENU_PLUGINS',                                       'プラグイン');
+
+// quickmenu on logon screen
+define('_QMENU_INTRO',                                         '導入ガイド');
+define('_QMENU_INTRO_TEXT',                                    '<p>ここはウェブサイトの管理を行うコンテンツ管理システム、「Nucleus CMS」のログイン画面です。</p><p>アカウントを持っていればログインして新しい記事の投稿ができます。</p>');
+
+// helppages for plugins
+define('_ERROR_PLUGNOHELPFILE',                                'このプラグイン用のヘルプファイルが見つかりません');
+define('_PLUGS_HELP_TITLE',                                    'プラグインのヘルプページ');
+define('_LIST_PLUGS_HELP',                                     'ヘルプ');
+
+
+// END changed/started after 3.1
+
+// START changed/added after v2.5beta START
+
+// general settings (security)
+define('_SETTINGS_EXTAUTH',                                    '外部認証の有効化');
+define('_WARNING_EXTAUTH',                                     '警告:必要な時以外は有効にしない');
+
+// member profile
+define('_MEMBERS_BYPASS',                                      '外部認証を使用する');
+
+// 'always include in search' blog setting (yes/no) [in v2.5beta, the 'always' part wasn't clear]
+define('_EBLOG_SEARCH',                                                '<em>常に</em>検索対象にする');
+
+// END changed/added after v2.5beta
+
+// START introduced after v2.0 START
+
+// media library
+define('_MEDIA_VIEW',                                          '表示');
+define('_MEDIA_VIEW_TT',                                       'ファイル表示 (新しいウィンドウが開きます)');
+define('_MEDIA_FILTER_APPLY',                          'フィルター適用');
+define('_MEDIA_FILTER_LABEL',                          'フィルター: ');
+define('_MEDIA_UPLOAD_TO',                                     'アップロード先...');
+define('_MEDIA_UPLOAD_NEW',                                    '新規アップロード...');
+define('_MEDIA_COLLECTION_SELECT',                     '選択');
+define('_MEDIA_COLLECTION_TT',                         'このカテゴリーに切り替え');
+define('_MEDIA_COLLECTION_LABEL',                      '現在のコレクション: ');
+
+// tooltips on toolbar
+define('_ADD_ALIGNLEFT_TT',                                    '左寄せ');
+define('_ADD_ALIGNRIGHT_TT',                           '右寄せ');
+define('_ADD_ALIGNCENTER_TT',                          '中央寄せ');
+
+
+// generic upload failure
+define('_ERROR_UPLOADFAILED',                          'アップロードに失敗しました');
+
+// END introduced after v2.0 END
+
+// START introduced after v1.5 START
+
+// posting to the past/edit timestamps
+define('_EBLOG_ALLOWPASTPOSTING',                      '過去の日時での投稿を許可する');
+define('_ADD_CHANGEDATE',                                      'タイムスタンプを更新');
+define('_BMLET_CHANGEDATE',                                    'タイムスタンプを更新');
+
+// skin import/export
+define('_OVERVIEW_SKINIMPORT',                         '読込/書出');
+
+// skin settings
+define('_PARSER_INCMODE_NORMAL',                       'ノーマル');
+define('_PARSER_INCMODE_SKINDIR',                      'skindirを使う');
+define('_SKIN_INCLUDE_MODE',                           'Includeモード');
+define('_SKIN_INCLUDE_PREFIX',                         'Includeプリフィックス');
+
+// global settings
+define('_SETTINGS_BASESKIN',                           '基本のスキン');
+define('_SETTINGS_SKINSURL',                           'スキンURL');
+define('_SETTINGS_ACTIONSURL',                         '「http://」から始まる action.php のURL');
+
+// category moves (batch)
+define('_ERROR_MOVEDEFCATEGORY',                       'デフォルトのカテゴリーは移動できません');
+define('_ERROR_MOVETOSELF',                                    'カテゴリーを移動できません (移動先のBlogが移動元と同じです)');
+define('_MOVECAT_TITLE',                                       'カテゴリーを移動するBlogを選択してください');
+define('_MOVECAT_BTN',                                         'カテゴリーを移動');
+
+// URLMode setting
+define('_SETTINGS_URLMODE',                                    'URL モード');
+define('_SETTINGS_URLMODE_NORMAL',                     'Normal');
+define('_SETTINGS_URLMODE_PATHINFO',           'Fancy');
+
+// Batch operations
+define('_BATCH_NOSELECTION',                           '対象が選択されていません');
+define('_BATCH_ITEMS',                                         'アイテム   に対してのバッチ操作');
+define('_BATCH_CATEGORIES',                                    'カテゴリー  に対してのバッチ操作');
+define('_BATCH_MEMBERS',                                       'メンバー   に対してのバッチ操作');
+define('_BATCH_TEAM',                                          'チームメンバーに対してのバッチ操作');
+define('_BATCH_COMMENTS',                                      'コメント   に対してのバッチ操作');
+define('_BATCH_UNKNOWN',                                       '未知のバッチ操作: ');
+define('_BATCH_EXECUTING',                                     '実行中');
+define('_BATCH_ONCATEGORY',                                    '- 対象カテゴリー');
+define('_BATCH_ONITEM',                                                '- 対象アイテム');
+define('_BATCH_ONCOMMENT',                                     '- 対象コメント');
+define('_BATCH_ONMEMBER',                                      '- 対象メンバー');
+define('_BATCH_ONTEAM',                                                '- 対象チームメンバー');
+define('_BATCH_SUCCESS',                                       '成功!');
+define('_BATCH_DONE',                                          '終了!');
+define('_BATCH_DELETE_CONFIRM',                                'バッチ削除の確認');
+define('_BATCH_DELETE_CONFIRM_BTN',                    'バッチ削除の確認');
+define('_BATCH_SELECTALL',                                     '全て選択');
+define('_BATCH_DESELECTALL',                           '全ての選択を解除');
+
+// batch operations: options in dropdowns
+define('_BATCH_ITEM_DELETE',                           '削除');
+define('_BATCH_ITEM_MOVE',                                     '移動');
+define('_BATCH_MEMBER_DELETE',                         '削除');
+define('_BATCH_MEMBER_SET_ADM',                                '管理者権限を与える');
+define('_BATCH_MEMBER_UNSET_ADM',                      '管理者権限を外す');
+define('_BATCH_TEAM_DELETE',                           'チームから削除');
+define('_BATCH_TEAM_SET_ADM',                          '管理者権限を与える');
+define('_BATCH_TEAM_UNSET_ADM',                                '管理者権限を外す');
+define('_BATCH_CAT_DELETE',                                    '削除');
+define('_BATCH_CAT_MOVE',                                      '他のBlogに移動');
+define('_BATCH_COMMENT_DELETE',                                '削除');
+
+// itemlist: Add new item...
+define('_ITEMLIST_ADDNEW',                                     '新しいアイテムの追加...');
+define('_ADD_PLUGIN_EXTRAS',                           '追加プラグインオプション');
+
+// errors
+define('_ERROR_CATCREATEFAIL',                         '新しいカテゴリーを作成できません');
+define('_ERROR_NUCLEUSVERSIONREQ',                     'このプラグインを使用するには、新しいバージョンの Nucleus が必要です: ');
+
+// backlinks
+define('_BACK_TO_BLOGSETTINGS',                                'Blogの設定に戻る');
+
+// skin import export
+define('_SKINIE_TITLE_IMPORT',                         '読み込み');
+define('_SKINIE_TITLE_EXPORT',                         '書き出し');
+define('_SKINIE_BTN_IMPORT',                           '読み込み');
+define('_SKINIE_BTN_EXPORT',                           '選択されたスキン/テンプレートを書き出し');
+define('_SKINIE_LOCAL',                                                'ローカルファイルから読み込み:');
+define('_SKINIE_NOCANDIDATES',                         'スキンディレクトリ内に読み込めるファイルがありません');
+define('_SKINIE_FROMURL',                                      'URLを指定して読み込み:');
+define('_SKINIE_EXPORT_INTRO',                         '書き出すスキン/テンプレートを以下から選択してください');
+define('_SKINIE_EXPORT_SKINS',                         'スキン');
+define('_SKINIE_EXPORT_TEMPLATES',                     'テンプレート');
+define('_SKINIE_EXPORT_EXTRA',                         '追加情報(書き出しファイルに追加する備考)');
+define('_SKINIE_CONFIRM_OVERWRITE',                    '既に存在するスキンを上書きする (ぶつかるスキン名を参照)');
+define('_SKINIE_CONFIRM_IMPORT',                       'はい、これを読み込みます');
+define('_SKINIE_CONFIRM_TITLE',                                'スキンとテンプレートを読み込もうとしています');
+define('_SKINIE_INFO_SKINS',                           'ファイル内のスキン:');
+define('_SKINIE_INFO_TEMPLATES',                       'ファイル内のテンプレート:');
+define('_SKINIE_INFO_GENERAL',                         '情報:');
+define('_SKINIE_INFO_SKINCLASH',                       '次のスキン名がぶつかります:');
+define('_SKINIE_INFO_TEMPLCLASH',                      '次のテンプレート名がぶつかります:');
+define('_SKINIE_INFO_IMPORTEDSKINS',           '読み込まれたスキン:');
+define('_SKINIE_INFO_IMPORTEDTEMPLS',          '読み込まれたテンプレート:');
+define('_SKINIE_DONE',                                         '読み込み完了');
+
+define('_AND',                                                         'and');
+define('_OR',                                                          'or');
+
+// empty fields on template edit
+define('_EDITTEMPLATE_EMPTY',                          '無し(クリックするとフォームが開きます)');
+
+// skin overview list
+define('_LIST_SKINS_INCMODE',                          'Includeモード:');
+define('_LIST_SKINS_INCPREFIX',                                'Includeプリフィックス:');
+define('_LIST_SKINS_DEFINED',                          '定義済みパーツ:');
+
+// backup
+define('_BACKUPS_TITLE',                                       'バックアップ / リストア');
+define('_BACKUP_TITLE',                                                'バックアップ');
+define('_BACKUP_INTRO',                                                '下のボタンを押すと、Nucleusが使用しているデータベースをバックアップできます。バックアップファイルは安全な場所に保存しておくことをお勧めします。');
+define('_BACKUP_ZIP_YES',                                      '圧縮する');
+define('_BACKUP_ZIP_NO',                                       '圧縮しない');
+define('_BACKUP_BTN',                                          'バックアップを作成する');
+define('_BACKUP_NOTE',                                         '<b style="color:#f00;">注意:</b> バックアップされるのはデータベースの内容だけです。アップロードしたファイルや config.php 内の設定はバックアップ<b style="color:#f00;">されません</b>。');
+define('_RESTORE_TITLE',                                       'リストア');
+define('_RESTORE_NOTE',                                                '<b style="color:#f00;">警告:</b> バックアップからのリストアは現在のデータベース内の Nucleus データを全て<b style="color:#f00;">削除</b>します!良く注意して使用してください!<br /><b style="color:#f00;">注意:</b> バックアップを作成した Nucleus のバージョンが 現在使用している Nucleus のバージョンと同じか確認してください!そうでなければ正しく動作しません。');
+define('_RESTORE_INTRO',                                       '以下からバックアップファイルを選択(サーバにアップロードされます)して"リストア"ボタンを押すと開始します。');
+define('_RESTORE_IMSURE',                                      'はい、確かにこの操作の実行を承認します!');
+define('_RESTORE_BTN',                                         'ファイルからリストア');
+define('_RESTORE_WARNING',                                     '(正しいバックアップをリストアしようとしているか確認し、始める前に現在のバックアップを作っておいてください)');
+define('_ERROR_BACKUP_NOTSURE',                                '"承認"チェックボックスをチェックする必要があります');
+define('_RESTORE_COMPLETE',                                    'リストア完了');
+
+// new item notification
+define('_NOTIFY_NI_MSG',                                       '新しいアイテムが投稿されました:');
+define('_NOTIFY_NI_TITLE',                                     '新しいアイテム!');
+define('_NOTIFY_KV_MSG',                                       'アイテムにカルマの投票がありました:');
+define('_NOTIFY_KV_TITLE',                                     'Nucleusカルマ:');
+define('_NOTIFY_NC_MSG',                                       'アイテムにコメントがありました:');
+define('_NOTIFY_NC_TITLE',                                     'Nucleusコメント:');
+define('_NOTIFY_USERID',                                       'ユーザーID:');
+define('_NOTIFY_USER',                                         'ユーザー:');
+define('_NOTIFY_COMMENT',                                      'コメント:');
+define('_NOTIFY_VOTE',                                         '投票:');
+define('_NOTIFY_HOST',                                         'ホスト:');
+define('_NOTIFY_IP',                                           'IPアドレス:');
+define('_NOTIFY_MEMBER',                                       'メンバー:');
+define('_NOTIFY_TITLE',                                                'タイトル:');
+define('_NOTIFY_CONTENTS',                                     '内容:');
+
+// member mail message
+define('_MMAIL_MSG',                                           '次の方からあなた宛のメッセージが送られてきました');
+define('_MMAIL_FROMANON',                                      '匿名のビジター');
+define('_MMAIL_FROMNUC',                                       '送信元のNucleus Blog');
+define('_MMAIL_TITLE',                                         'メッセージ from');
+define('_MMAIL_MAIL',                                          'メッセージ:');
+
+// END introduced after v1.5 END
+
+
+// START introduced after v1.1 START
+
+// bookmarklet buttons
+define('_BMLET_ADD',                                           'アイテムの追加');
+define('_BMLET_EDIT',                                          '保存');
+define('_BMLET_DELETE',                                                'アイテムの削除');
+define('_BMLET_BODY',                                          '本文');
+define('_BMLET_MORE',                                          '続き');
+define('_BMLET_OPTIONS',                                       'オプション');
+define('_BMLET_PREVIEW',                                       'プレビュー');
+
+// used in bookmarklet
+define('_ITEM_UPDATED',                                                'アイテムが更新されました');
+define('_ITEM_DELETED',                                                'アイテムが削除されました');
+
+// plugins
+define('_CONFIRMTXT_PLUGIN',                           'このプラグインを削除しますか?');
+define('_ERROR_NOSUCHPLUGIN',                          '指定されたプラグインはありません');
+define('_ERROR_DUPPLUGIN',                                     'そのプラグインは既にインストールされています');
+define('_ERROR_PLUGFILEERROR',                         '指定されたプラグインは存在しないか、パーミッションが正しく設定されていません');
+define('_PLUGS_NOCANDIDATES',                          'プラグインのインストール候補はありません。');
+
+define('_PLUGS_TITLE_MANAGE',                          'プラグインの管理');
+define('_PLUGS_TITLE_INSTALLED',                       'インストール済み');
+define('_PLUGS_TITLE_UPDATE',                          '登録リストのアップデート');
+define('_PLUGS_TEXT_UPDATE',                           'Nucleusが管理している各プラグインが登録中のイベント情報が、何らかの原因(プラグインのバージョンアップに伴うファイルの上書き等)によって正常ではない状態になった時に「アップデート」ボタンをクリックしてください。');
+define('_PLUGS_TITLE_NEW',                                     '新しいプラグインをインストール');
+define('_PLUGS_ADD_TEXT',                                      '以下はpluginsディレクトリ内にある全ての「インストールされていないプラグイン」の可能性があるファイルのリストです。追加する前にプラグインかどうかを<strong>しっかり確認</strong>してください。');
+define('_PLUGS_BTN_INSTALL',                           'プラグインのインストール');
+define('_BACKTOOVERVIEW',                                      '一覧に戻る');
+
+// editlink
+define('_TEMPLATE_EDITLINK',                           'アイテムを編集するためのリンク');
+
+// add left / add right tooltips
+define('_ADD_LEFT_TT',                                         'left boxを追加');
+define('_ADD_RIGHT_TT',                                                'right boxを追加');
+
+// add/edit item: new category (in dropdown box)
+define('_ADD_NEWCAT',                                          '新しいカテゴリーを追加...');
+
+// new settings
+define('_SETTINGS_PLUGINURL',                          'プラグインディレクトリのURL');
+define('_SETTINGS_MAXUPLOADSIZE',                      'アップロードできるファイルの最大サイズ (bytes)');
+define('_SETTINGS_NONMEMBERMSGS',                      'メンバー以外からのメッセージを受け付ける');
+define('_SETTINGS_PROTECTMEMNAMES',                    'メンバー名の保護');
+
+// overview screen
+define('_OVERVIEW_PLUGINS',                                    'プラグイン管理');
+
+// actionlog
+define('_ACTIONLOG_NEWMEMBER',                         '新しいメンバーの登録:');
+
+// membermail (when not logged in)
+define('_MEMBERMAIL_MAIL',                                     'あなたのメールアドレス:');
+
+// file upload
+define('_ERROR_DISALLOWEDUPLOAD2',                     'チームに参加しているどのブログも管理権限を持っていない為、ファイルのアップロードが出来ません。');
+
+/* plugin list
+define('_LISTS_INFO',                                          '情報');
+define('_LIST_PLUGS_AUTHOR',                           '作者:');
+define('_LIST_PLUGS_VER',                                      'バージョン:');
+define('_LIST_PLUGS_SITE',                                     'サイト');
+define('_LIST_PLUGS_DESC',                                     '説明:');
+define('_LIST_PLUGS_SUBS',                                     '以下のイベントに登録:');
+define('_LIST_PLUGS_UP',                                       '上へ');
+define('_LIST_PLUGS_DOWN',                                     '下へ');
+define('_LIST_PLUGS_UNINSTALL',                                '削除');
+define('_LIST_PLUGS_ADMIN',                                    '管理');
+define('_LIST_PLUGS_OPTIONS',                          '編集');*/
+define('_LISTS_INFO',                                          'インフォメーション');
+define('_LIST_PLUGS_AUTHOR',                           '製作者:');
+define('_LIST_PLUGS_VER',                                      'バージョン:');
+define('_LIST_PLUGS_SITE',                                     '入手サイト:');
+define('_LIST_PLUGS_DESC',                                     '概要:');
+define('_LIST_PLUGS_SUBS',                                     '登録済みイベント:');
+define('_LIST_PLUGS_UP',                                       '&uarr; ひとつ上へ');
+define('_LIST_PLUGS_DOWN',                                     '&darr; ひとつ下へ');
+define('_LIST_PLUGS_UNINSTALL',                                'アンインストール');
+define('_LIST_PLUGS_ADMIN',                                    '管理');
+define('_LIST_PLUGS_OPTIONS',                          'オプション編集');
+
+// plugin option list
+define('_LISTS_VALUE',                                         '値(内容)');
+
+// plugin options
+define('_ERROR_NOPLUGOPTIONS',                         'このプラグインにはオプションがありません');
+define('_PLUGS_BACK',                                          'プラグインの一覧に戻る');
+define('_PLUGS_SAVE',                                          'オプションの保存');
+define('_PLUGS_OPTIONS_UPDATED',                       'プラグインオプションが更新されました');
+
+define('_OVERVIEW_MANAGEMENT',                         '管理');
+define('_OVERVIEW_MANAGE',                                     'Nucleusの管理');
+define('_MANAGE_GENERAL',                                      '管理');
+define('_MANAGE_SKINS',                                                'スキン/テンプレート');
+define('_MANAGE_EXTRA',                                                '追加機能');
+
+define('_BACKTOMANAGE',                                                'Nucleusの管理に戻る');
+
+
+// END introduced after v1.1 END
+
+
+
+
+// charset to use
+define('_CHARSET',                                                     'UTF-8');
+
+// global stuff
+define('_LOGOUT',                                                      'ログアウト');
+define('_LOGIN',                                                       'ログイン');
+define('_YES',                                                         'はい');
+define('_NO',                                                          'いいえ');
+define('_SUBMIT',                                                      '送信');
+define('_ERROR',                                                       'エラー');
+define('_ERRORMSG',                                                    'エラーが発生しました!');
+define('_BACK',                                                                '戻る');
+define('_NOTLOGGEDIN',                                         'ログインしていません');
+define('_LOGGEDINAS',                                          'ログイン:');
+define('_ADMINHOME',                                           '管理ホーム');
+define('_NAME',                                                                '名前');
+define('_BACKHOME',                                                    '管理ホームに戻る');
+define('_BADACTION',                                           '存在しないアクションが要求されました');
+define('_MESSAGE',                                                     'メッセージ');
+define('_HELP_TT',                                                     'ヘルプ!');
+define('_YOURSITE',                                                    'サイトの確認');
+
+
+define('_POPUP_CLOSE',                                         'ウィンドウを閉じる');
+
+define('_LOGIN_PLEASE',                                                'まずログインしてください');
+
+// commentform
+define('_COMMENTFORM_YOUARE',                          'ユーザー名: ');
+define('_COMMENTFORM_SUBMIT',                          'コメントを追加');
+define('_COMMENTFORM_COMMENT',                         'コメント:');
+define('_COMMENTFORM_NAME',                                    'お名前:');
+define('_COMMENTFORM_REMEMBER',                                '情報を記憶しておく');
+
+// loginform
+define('_LOGINFORM_NAME',                                      'ログインID:');
+define('_LOGINFORM_PWD',                                       'パスワード:');
+define('_LOGINFORM_YOUARE',                                    'ログイン中:');
+define('_LOGINFORM_SHARED',                                    'このPCを他の人と共用する');
+
+// member mailform
+define('_MEMBERMAIL_SUBMIT',                           'メッセージ送信');
+
+// search form
+define('_SEARCHFORM_SUBMIT',                           '検索');
+
+// add item form
+define('_ADD_ADDTO',                                           'アイテムの追加:');
+define('_ADD_CREATENEW',                                       '新しいアイテム');
+define('_ADD_BODY',                                                    '本文');
+define('_ADD_TITLE',                                           'タイトル');
+define('_ADD_MORE',                                                    '続き (空欄でも可)');
+define('_ADD_CATEGORY',                                                'カテゴリー');
+define('_ADD_PREVIEW',                                         'プレビュー');
+define('_ADD_DISABLE_COMMENTS',                                'コメントを受け付けない');
+define('_ADD_DRAFTNFUTURE',                                    'ドラフトと未来の記事');
+define('_ADD_ADDITEM',                                         'アイテムを追加');
+define('_ADD_ADDNOW',                                          '今すぐ追加');
+define('_ADD_PLACE_ON',                                                '日時:');
+define('_ADD_ADDDRAFT',                                                'ドラフトに追加');
+define('_ADD_NOPASTDATES',                                     '(過去の日時は指定できません。指定された場合は現在の日時が使用されます)');
+define('_ADD_BOLD_TT',                                         '太字');
+define('_ADD_ITALIC_TT',                                       '斜体');
+define('_ADD_HREF_TT',                                         'リンク作成');
+define('_ADD_MEDIA_TT',                                                'メディア(画像・音声)の追加');
+define('_ADD_PREVIEW_TT',                                      'プレビューの表示/非表示');
+define('_ADD_CUT_TT',                                          'カット');
+define('_ADD_COPY_TT',                                         'コピー');
+define('_ADD_PASTE_TT',                                                'ペースト');
+
+
+// edit item form
+define('_EDIT_ITEM',                                           'アイテムの編集');
+define('_EDIT_SUBMIT',                                         '保存');
+define('_EDIT_ORIG_AUTHOR',                                    '原作者');
+define('_EDIT_BACKTODRAFTS',                           '再度ドラフトとして保存');
+define('_EDIT_COMMENTSNOTE',                           '(注意: コメントの非表示は以前に追加されたコメントを隠しはしません)');
+
+// used on delete screens
+define('_DELETE_CONFIRM',                                      '削除の確認をしてください');
+define('_DELETE_CONFIRM_BTN',                          '削除の確認');
+define('_CONFIRMTXT_ITEM',                                     '以下のアイテムを削除しようとしています:');
+define('_CONFIRMTXT_COMMENT',                          '以下のコメントを削除しようとしています:');
+define('_CONFIRMTXT_TEAM1',                                    'このblogのチームリストから');
+define('_CONFIRMTXT_TEAM2',                                    '削除しようとしています');
+define('_CONFIRMTXT_BLOG',                                     '削除するBlog: ');
+define('_WARNINGTXT_BLOGDEL',                          '警告! Blogを削除するとそれに含まれている全てのアイテム、コメントは削除されます。その点を確認した上で行ってください。<br />さらに、Blogの削除中にNucleusを中断させないでください。');
+define('_CONFIRMTXT_MEMBER',                           '以下のメンバープロファイルを削除しようとしています: ');
+define('_CONFIRMTXT_TEMPLATE',                         '次のテンプレートを削除しようとしています: ');
+define('_CONFIRMTXT_SKIN',                                     '次のスキンを削除しようとしています: ');
+define('_CONFIRMTXT_BAN',                                      '次の禁止IP範囲を削除しようとしています: ');
+define('_CONFIRMTXT_CATEGORY',                         '次のカテゴリーを削除しようとしています: ');
+
+// some status messages
+define('_DELETED_ITEM',                                                'アイテムが削除されました');
+define('_DELETED_MEMBER',                                      'メンバーが削除されました');
+define('_DELETED_COMMENT',                                     'コメントが削除されました');
+define('_DELETED_BLOG',                                                'Blogが削除されました');
+define('_DELETED_CATEGORY',                                    'カテゴリーが削除されました');
+define('_ITEM_MOVED',                                          'アイテムが移動されました');
+define('_ITEM_ADDED',                                          'アイテムが追加されました');
+define('_COMMENT_UPDATED',                                     'コメントが更新されました');
+define('_SKIN_UPDATED',                                                'スキンデータが保存されました');
+define('_TEMPLATE_UPDATED',                                    'テンプレートデータが保存されました');
+
+// errors
+define('_ERROR_COMMENT_LONGWORD',                      'コメントには半角で90文字以上の単語を使わないで下さい。');
+define('_ERROR_COMMENT_NOCOMMENT',                     'コメントを入力してください。');
+define('_ERROR_COMMENT_NOUSERNAME',                    '使用できない名前です。');
+define('_ERROR_COMMENT_TOOLONG',                       'コメントが長すぎます。(半角で5000文字まで)');
+define('_ERROR_COMMENTS_DISABLED',                     '現在このBlogではコメントを受け付けていません。');
+define('_ERROR_COMMENTS_NONPUBLIC',                    'このBlogへコメントを追加するにはメンバーとしてログインしなければいけません。');
+define('_ERROR_COMMENTS_MEMBERNICK',           'あなたが使おうとした名前は既に使われています。他の名前を入力してください。');
+define('_ERROR_SKIN',                                          'スキン エラー');
+define('_ERROR_ITEMCLOSED',                                    'このアイテムは閲覧専用です。コメントの投稿、投票はできません。');
+define('_ERROR_NOSUCHITEM',                                    'そのようなアイテムは存在しません。');
+define('_ERROR_NOSUCHBLOG',                                    'そのようなBlogは存在しません。');
+define('_ERROR_NOSUCHSKIN',                                    'そのようなスキンは存在しません。');
+define('_ERROR_NOSUCHMEMBER',                          'そのようなメンバーは存在しません。');
+define('_ERROR_NOTONTEAM',                                     'あなたはこのBlogのチームに含まれていません。');
+define('_ERROR_BADDESTBLOG',                           '送り先のBlogが存在しません。');
+define('_ERROR_NOTONDESTTEAM',                         'あなたが送り先のBlogのチームに入っていないためアイテムを移動できません。');
+define('_ERROR_NOEMPTYITEMS',                          '本文が空のアイテムは投稿できません!');
+define('_ERROR_BADMAILADDRESS',                                'メールアドレスが不正です。');
+define('_ERROR_BADNOTIFY',                                     '通知メールアドレスの中に不正なものが混じっています。');
+define('_ERROR_BADNAME',                                       '使用できない名前です。( a-z 、0-9 の英数字しか使えません)');
+define('_ERROR_NICKNAMEINUSE',                         '他のメンバーが同じログインIDを使用しています。');
+define('_ERROR_PASSWORDMISMATCH',                      '入力されたパスワードが同一ではありません。');
+define('_ERROR_PASSWORDTOOSHORT',                      'パスワードは6文字以上でなければなりません。');
+define('_ERROR_PASSWORDMISSING',                       'パスワードが空です。');
+define('_ERROR_REALNAMEMISSING',                       'ハンドルを入力してください。');
+define('_ERROR_ATLEASTONEADMIN',                       '管理領域にログインできるsuper-adminが少なくとも1人はいなくてはいけません。');
+define('_ERROR_ATLEASTONEBLOGADMIN',           'このアクションを実行するとあなたのBlogはメンテナンス不能になります。少なくとも1人の管理者がいるようにしてください。');
+define('_ERROR_ALREADYONTEAM',                         '既にチームに入っています。');
+define('_ERROR_BADSHORTBLOGNAME',                      'Blogの短縮名(略称)には a-z 、0-9、の英数字のみ使用できます。スペースは使用できません。');
+define('_ERROR_DUPSHORTBLOGNAME',                      '他のBlogで同じ短縮名(略称)が使われています。別の短縮名(略称)を入力してください。');
+define('_ERROR_UPDATEFILE',                                    '更新ファイルに書き込めません。ファイルのパーミッションが正しくセットされているか確認してください (chmod 666 を試してみてください)。もし相対パスで指定されているなら、絶対パスで指定してみてください。(/your/path/to/nucleus/ のように)');
+define('_ERROR_DELDEFBLOG',                                    '既定のBlogは削除できません');
+define('_ERROR_DELETEMEMBER',                          'おそらくこのメンバーは1つ以上のアイテムの著者であるため、削除できません。');
+define('_ERROR_BADTEMPLATENAME',                       '不正なテンプレート名です。(a-z 、0-9 の英数字のみ使用可。スペースは使用不可)');
+define('_ERROR_DUPTEMPLATENAME',                       '同じ名前のテンプレートが既に存在します');
+define('_ERROR_BADSKINNAME',                           '不正なスキン名です。(a-z 、0-9 の英数字のみ使用可。スペースは使用不可)');
+define('_ERROR_DUPSKINNAME',                           '同じ名前のスキンが既に存在します。');
+define('_ERROR_DEFAULTSKIN',                           'このスキンは標準のスキンに設定されているため削除できません。');
+define('_ERROR_SKINDEFDELETE',                         '以下のBlogの既定のスキンに指定されているため、スキンを削除できません。: ');
+define('_ERROR_DISALLOWED',                                    'このアクションの実行が許可されていません。');
+define('_ERROR_DELETEBAN',                                     '禁止者の削除中にエラーが発生しました(禁止者が存在しません)');
+define('_ERROR_ADDBAN',                                                '禁止者の追加中にエラーが発生しました。全てのblogに正しく追加されていないかもしれません。');
+define('_ERROR_BADACTION',                                     '要求されたアクションが存在しません。');
+define('_ERROR_MEMBERMAILDISABLED',                    'メンバー間のメールメッセージが使用不可になっています。');
+define('_ERROR_MEMBERCREATEDISABLED',          'メンバー作成が禁止されています。');
+define('_ERROR_INCORRECTEMAIL',                                '不正なメールアドレスです。');
+define('_ERROR_VOTEDBEFORE',                           'このアイテムには既に投票済みです。');
+define('_ERROR_BANNED1',                                       'あなた (IP範囲 ');
+define('_ERROR_BANNED2',                                       ') はこのアクションの実行が禁止されています。メッセージ: \'');
+define('_ERROR_BANNED3',                                       '\'');
+define('_ERROR_LOGINNEEDED',                           '実行するにはログインが必要です。');
+define('_ERROR_CONNECT',                                       '接続エラー');
+define('_ERROR_FILE_TOO_BIG',                          'ファイルが大きすぎます!');
+define('_ERROR_BADFILETYPE',                           'アップロードが認められていないファイルタイプです。');
+define('_ERROR_BADREQUEST',                                    '不正なアップロード要求です');
+define('_ERROR_DISALLOWEDUPLOAD',                      'あなたはどのBlogチームにも入っていないのでファイルをアップロードできません。');
+define('_ERROR_BADPERMISSIONS',                                'ファイル/ディレクトリのパーミッションが正しくセットされていません。');
+define('_ERROR_UPLOADMOVEP',                           'アップロードファイルの移動中にエラーが発生しました。');
+define('_ERROR_UPLOADCOPY',                                    'ファイルのコピー中にエラーが発生しました。');
+define('_ERROR_UPLOADDUPLICATE',                       '同じ名前のファイルが既に存在します。アップロードする前に名前を変更してしてください。');
+define('_ERROR_LOGINDISALLOWED',                       '管理領域へのログインが認められていません。もしあなたが管理ユーザーのアカウントを持っているのなら、管理ユーザーとしてログインしなおしてください。');
+define('_ERROR_DBCONNECT',                                     'MySQLサーバに接続できません');
+define('_ERROR_DBSELECT',                                      'Nucleusが使用するデータベースを選択できません。');
+define('_ERROR_NOSUCHLANGUAGE',                                '指定された言語ファイルは存在しません。');
+define('_ERROR_NOSUCHCATEGORY',                                '指定されたカテゴリーは存在しません。');
+define('_ERROR_DELETELASTCATEGORY',                    'カテゴリーを最低一つは設定してください。');
+define('_ERROR_DELETEDEFCATEGORY',                     '既定のカテゴリーは削除できません。');
+define('_ERROR_BADCATEGORYNAME',                       'カテゴリー名として使えません');
+define('_ERROR_DUPCATEGORYNAME',                       '同じ名前のカテゴリーが既に存在します。');
+
+// some warnings (used for mediadir setting)
+define('_WARNING_NOTADIR',                                     '警告: ディレクトリではありません!');
+define('_WARNING_NOTREADABLE',                         '警告: 読み取り不可能なディレクトリです!');
+define('_WARNING_NOTWRITABLE',                         '警告: 書き込み不可能なディレクトリです!');
+
+// media and upload
+define('_MEDIA_UPLOADLINK',                                    'ファイルのアップロード');
+define('_MEDIA_MODIFIED',                                      '更新日');
+define('_MEDIA_FILENAME',                                      'ファイル名');
+define('_MEDIA_DIMENSIONS',                                    'サイズ');
+define('_MEDIA_INLINE',                                                '埋め込み型');
+define('_MEDIA_POPUP',                                         'ポップアップ型');
+define('_UPLOAD_TITLE',                                                'ファイル選択');
+define('_UPLOAD_MSG',                                          'アップロードするファイルを選択して「アップロード」ボタンを押してください');
+define('_UPLOAD_BUTTON',                                       'アップロード');
+
+// some status messages
+//define('_MSG_ACCOUNTCREATED',                                'アカウントが作成されました。パスワードがメールで送信されます');
+//define('_MSG_PASSWORDSENT',                          'パスワードがメールで送信されました。');
+define('_MSG_LOGINAGAIN',                                      'アカウント情報が変更された為、ログインしなおす必要があります');
+define('_MSG_SETTINGSCHANGED',                         '設定が変更されました');
+define('_MSG_ADMINCHANGED',                                    '管理者権限が変更されました');
+define('_MSG_NEWBLOG',                                         '新しいBlogが作成されました');
+define('_MSG_ACTIONLOGCLEARED',                                '管理操作履歴が消去されました');
+
+// actionlog in admin area
+define('_ACTIONLOG_DISALLOWED',                                '許可されていないアクション: ');
+define('_ACTIONLOG_PWDREMINDERSENT',           '新しいパスワードの送信先: ');
+define('_ACTIONLOG_TITLE',                                     '管理操作履歴');
+define('_ACTIONLOG_CLEAR_TITLE',                       '管理操作履歴の消去');
+define('_ACTIONLOG_CLEAR_TEXT',                                '管理操作履歴を今すぐ消去');
+
+// team management
+define('_TEAM_TITLE',                                          'Blogのチームを管理する ');
+define('_TEAM_CURRENT',                                                '現在のチームメンバー');
+define('_TEAM_ADDNEW',                                         'チームに新しいメンバーを追加する');
+define('_TEAM_CHOOSEMEMBER',                           'メンバーを選ぶ');
+define('_TEAM_ADMIN',                                          '管理者権限を与える ');
+define('_TEAM_ADD',                                                    'チームに追加');
+define('_TEAM_ADD_BTN',                                                'チームに追加');
+
+// blogsettings
+define('_EBLOG_TITLE',                                         'Blog設定の編集');
+define('_EBLOG_TEAM_TITLE',                                    'チームの管理');
+define('_EBLOG_TEAM_TEXT',                                     'チームの管理...');
+define('_EBLOG_SETTINGS_TITLE',                                'Blog設定');
+define('_EBLOG_NAME',                                          'Blogの名前');
+define('_EBLOG_SHORTNAME',                                     'Blogの短縮名(略称)');
+define('_EBLOG_SHORTNAME_EXTRA',                       '<br />(a-zの英小文字のみが使用できます。空白は使用できません)');
+define('_EBLOG_DESC',                                          'Blogの説明');
+define('_EBLOG_URL',                                           'BlogのURL');
+define('_EBLOG_DEFSKIN',                                       'Blogの標準のスキン');
+define('_EBLOG_DEFCAT',                                                'Blogの標準のカテゴリ');
+define('_EBLOG_LINEBREAKS',                                    'アイテムの改行を変換する');
+define('_EBLOG_DISABLECOMMENTS',                       'コメントを受け付ける<br /><small>(コメントを禁止するとコメントの追加はできなくなります。)</small>');
+define('_EBLOG_ANONYMOUS',                                     'メンバー以外のコメントを受け付ける');
+define('_EBLOG_NOTIFY',                                                '通知するメールアドレス ( ; で区切ってください)');
+define('_EBLOG_NOTIFY_ON',                                     '以下を通知する');
+define('_EBLOG_NOTIFY_COMMENT',                                '新しいコメント');
+define('_EBLOG_NOTIFY_KARMA',                          '新しいカルマ投票');
+define('_EBLOG_NOTIFY_ITEM',                           '新しいBlogアイテム');
+define('_EBLOG_PING',                                          '更新時にBlog検索サービスに更新を通知する'); // NOTE: This string is no longer in used
+define('_EBLOG_MAXCOMMENTS',                           '一覧に表示するコメントの最大数');
+define('_EBLOG_UPDATE',                                                '自動更新するファイル');
+define('_EBLOG_OFFSET',                                                'サーバ時刻との時差');
+define('_EBLOG_STIME',                                         '現在のサーバ時刻: ');
+define('_EBLOG_BTIME',                                         '現在のBlog時刻: ');
+define('_EBLOG_CHANGE',                                                '設定の変更');
+define('_EBLOG_CHANGE_BTN',                                    '設定の変更');
+define('_EBLOG_ADMIN',                                         'Blog管理者権限');
+define('_EBLOG_ADMIN_MSG',                                     'あなたには管理者権限が割り当てられます');
+define('_EBLOG_CREATE_TITLE',                          '新しいBlogの作成');
+define('_EBLOG_CREATE_TEXT',                           '新しいBlogを作成する為に以下のフォームを埋めてください。<br /><br /> <b>注意:</b> 必要なオプションのみが表示されています。追加のオプションを設定したい場合はBlogを作成した後、Blog設定ページで設定してください。');
+define('_EBLOG_CREATE',                                                '作成!');
+define('_EBLOG_CREATE_BTN',                                    'Blogを作成');
+define('_EBLOG_CAT_TITLE',                                     'カテゴリー');
+define('_EBLOG_CAT_NAME',                                      'カテゴリー名');
+define('_EBLOG_CAT_DESC',                                      'カテゴリーの説明');
+define('_EBLOG_CAT_CREATE',                                    '新しいカテゴリーを作る');
+define('_EBLOG_CAT_UPDATE',                                    'カテゴリーの更新');
+define('_EBLOG_CAT_UPDATE_BTN',                                'カテゴリーを更新');
+
+// templates
+define('_TEMPLATE_TITLE',                                      'テンプレートの編集');
+define('_TEMPLATE_AVAILABLE_TITLE',                    '使用可能なテンプレート');
+define('_TEMPLATE_NEW_TITLE',                          '新しいテンプレート');
+define('_TEMPLATE_NAME',                                       'テンプレート名');
+define('_TEMPLATE_DESC',                                       'テンプレートの説明');
+define('_TEMPLATE_CREATE',                                     'テンプレートの作成');
+define('_TEMPLATE_CREATE_BTN',                         'テンプレートを作成');
+define('_TEMPLATE_EDIT_TITLE',                         'テンプレートの編集');
+define('_TEMPLATE_BACK',                                       'テンプレートの一覧に戻る');
+define('_TEMPLATE_EDIT_MSG',                           '全てのテンプレートパーツが必要な訳ではありません。必要ない場合は空欄のままにしておいてください。');
+define('_TEMPLATE_SETTINGS',                           'テンプレート設定');
+define('_TEMPLATE_ITEMS',                                      'アイテム');
+define('_TEMPLATE_ITEMHEADER',                         'アイテムのヘッダー');
+define('_TEMPLATE_ITEMBODY',                           'アイテムの本体');
+define('_TEMPLATE_ITEMFOOTER',                         'アイテムのフッター');
+define('_TEMPLATE_MORELINK',                           '続きへのリンク');
+define('_TEMPLATE_NEW',                                                '新しいアイテムに付けるマーク');
+define('_TEMPLATE_COMMENTS_ANY',                       'コメント (ある場合)');
+define('_TEMPLATE_CHEADER',                                    'コメントのヘッダー');
+define('_TEMPLATE_CBODY',                                      'コメントの本体');
+define('_TEMPLATE_CFOOTER',                                    'コメントのフッター');
+define('_TEMPLATE_CONE',                                       'コメントが1つの時');
+define('_TEMPLATE_CMANY',                                      'コメントが2つ以上の時');
+define('_TEMPLATE_CMORE',                                      'コメントの続きを読む');
+define('_TEMPLATE_CMEXTRA',                                    '登録メンバーからのコメントへの追加表示');
+define('_TEMPLATE_COMMENTS_NONE',                      'コメント (無い場合)');
+define('_TEMPLATE_CNONE',                                      'コメントが無い時');
+define('_TEMPLATE_COMMENTS_TOOMUCH',           'コメント (最大表示数より多い場合)');
+define('_TEMPLATE_CTOOMUCH',                           'コメントが多すぎる時');
+define('_TEMPLATE_ARCHIVELIST',                                'アーカイブ一覧');
+define('_TEMPLATE_AHEADER',                                    'アーカイブ一覧のヘッダー');
+define('_TEMPLATE_AITEM',                                      'アーカイブ一覧の本体');
+define('_TEMPLATE_AFOOTER',                                    'アーカイブ一覧のフッター');
+define('_TEMPLATE_DATETIME',                           '日付と時刻');
+define('_TEMPLATE_DHEADER',                                    '日付のヘッダー');
+define('_TEMPLATE_DFOOTER',                                    '日付のフッター');
+define('_TEMPLATE_DFORMAT',                                    '日付フォーマット');
+define('_TEMPLATE_TFORMAT',                                    '時刻フォーマット');
+define('_TEMPLATE_LOCALE',                                     'ロケール');
+define('_TEMPLATE_IMAGE',                                      '画像とメディアのポップアップ');
+define('_TEMPLATE_PCODE',                                      'ポップアップ画像へのリンクコード');
+define('_TEMPLATE_ICODE',                                      'インライン画像のコード');
+define('_TEMPLATE_MCODE',                                      'メディアオブジェクトへのリンクコード');
+define('_TEMPLATE_SEARCH',                                     '検索');
+define('_TEMPLATE_SHIGHLIGHT',                         'ハイライト表示');
+define('_TEMPLATE_SNOTFOUND',                          '検索で何も見つからなかった場合');
+define('_TEMPLATE_UPDATE',                                     '更新');
+define('_TEMPLATE_UPDATE_BTN',                         'テンプレートの更新');
+define('_TEMPLATE_RESET_BTN',                          'リセット');
+define('_TEMPLATE_CATEGORYLIST',                       'カテゴリー一覧');
+define('_TEMPLATE_CATHEADER',                          'カテゴリー一覧のヘッダー');
+define('_TEMPLATE_CATITEM',                                    'カテゴリー一覧の本体');
+define('_TEMPLATE_CATFOOTER',                          'カテゴリー一覧のフッター');
+
+// skins
+define('_SKIN_EDIT_TITLE',                                     'スキンの編集');
+define('_SKIN_AVAILABLE_TITLE',                                '使用可能なスキン');
+define('_SKIN_NEW_TITLE',                                      '新しいスキン');
+define('_SKIN_NAME',                                           '名前');
+define('_SKIN_DESC',                                           '説明');
+define('_SKIN_TYPE',                                           'Content Type');
+define('_SKIN_CREATE',                                         '作成');
+define('_SKIN_CREATE_BTN',                                     'スキンの作成');
+define('_SKIN_EDITONE_TITLE',                          'スキンの編集');
+define('_SKIN_BACK',                                           'スキンの一覧に戻る');
+define('_SKIN_PARTS_TITLE',                                    'スキンパーツ');
+define('_SKIN_PARTS_MSG',                                      'それぞれのスキンに全てのタイプが必要とは限りません。必要ない場合は空欄のままにしておいてください。以下から編集するスキンを選んでください:');
+define('_SKIN_PART_MAIN',                                      'メインの目次ページ');
+define('_SKIN_PART_ITEM',                                      '個別アイテムページ');
+define('_SKIN_PART_ALIST',                                     '月別アーカイブ一覧ページ');
+define('_SKIN_PART_ARCHIVE',                           '月別アーカイブページ');
+define('_SKIN_PART_SEARCH',                                    '検索ページ');
+define('_SKIN_PART_ERROR',                                     'エラーページ');
+define('_SKIN_PART_MEMBER',                                    'メンバー詳細ページ');
+define('_SKIN_PART_POPUP',                                     '画像ポップアップウィンドウ');
+define('_SKIN_GENSETTINGS_TITLE',                      '一般設定');
+define('_SKIN_CHANGE',                                         '変更');
+define('_SKIN_CHANGE_BTN',                                     '設定の変更');
+define('_SKIN_UPDATE_BTN',                                     'スキンの更新');
+define('_SKIN_RESET_BTN',                                      'リセット');
+define('_SKIN_EDITPART_TITLE',                         'スキンの編集');
+define('_SKIN_GOBACK',                                         '戻る');
+define('_SKIN_ALLOWEDVARS',                                    '使用可能な変数 (クリックで説明表示):');
+
+// global settings
+define('_SETTINGS_TITLE',                                      'グローバル設定');
+define('_SETTINGS_SUB_GENERAL',                                'グローバル設定');
+define('_SETTINGS_DEFBLOG',                                    '既定のBlog');
+define('_SETTINGS_ADMINMAIL',                          '管理者のメールアドレス');
+define('_SETTINGS_SITENAME',                           'サイト名');
+define('_SETTINGS_SITEURL',                                    'サイトのURL (最後にスラッシュ "/" を付けてください)');
+define('_SETTINGS_ADMINURL',                           '管理者領域のURL (最後にスラッシュ "/" を付けてください)');
+define('_SETTINGS_DIRS',                                       'Nucleusディレクトリ');
+define('_SETTINGS_MEDIADIR',                           'メディア(画像・音声)がアップロードされるディレクトリ');
+define('_SETTINGS_SEECONFIGPHP',                       '(config.php を参照)');
+define('_SETTINGS_MEDIAURL',                           'メディアURL (最後にスラッシュ "/" を付けてください)');
+define('_SETTINGS_ALLOWUPLOAD',                                'ファイルのアップロードを可能にする');
+define('_SETTINGS_ALLOWUPLOADTYPES',           'アップロードを許可するファイルタイプ');
+define('_SETTINGS_CHANGELOGIN',                                'メンバーによるログイン名/パスワードの変更を可能にする');
+define('_SETTINGS_COOKIES_TITLE',                      'Cookie 設定');
+define('_SETTINGS_COOKIELIFE',                         'ログイン Cookie の有効期間');
+define('_SETTINGS_COOKIESESSION',                      'セッションごと');
+define('_SETTINGS_COOKIEMONTH',                                '一ヶ月');
+define('_SETTINGS_COOKIEPATH',                         'Cookie パス (上級オプション)');
+define('_SETTINGS_COOKIEDOMAIN',                       'Cookie ドメイン (上級オプション)');
+define('_SETTINGS_COOKIESECURE',                       'セキュア Cookie (上級オプション)');
+define('_SETTINGS_LASTVISIT',                          '最終訪問日時をCookieに保存する');
+define('_SETTINGS_ALLOWCREATE',                                'ビジターによるメンバーアカウント作成を可能にする');
+define('_SETTINGS_NEWLOGIN',                           'ビジターが作成したアカウントでのログインを作成直後に可能にする');
+define('_SETTINGS_NEWLOGIN2',                          '(新しく作成されたアカウントのみ)');
+define('_SETTINGS_MEMBERMSGS',                         'メンバー間サービスを可能にする');
+define('_SETTINGS_LANGUAGE',                           '使用する言語');
+define('_SETTINGS_DISABLESITE',                                'サイトを閉鎖し、指定のURLに転送する(非常時用)');
+define('_SETTINGS_DBLOGIN',                                    'MySQL ログイン &amp; データベース');
+define('_SETTINGS_UPDATE',                                     '設定の更新');
+define('_SETTINGS_UPDATE_BTN',                         '設定を更新');
+define('_SETTINGS_DISABLEJS',                          'JavaScriptツールバーを無効にする');
+define('_SETTINGS_MEDIA',                                      'メディア/アップロード設定');
+define('_SETTINGS_MEDIAPREFIX',                                'アップロードするファイル名の頭に日付を付加する');
+define('_SETTINGS_MEMBERS',                                    'メンバー設定');
+
+// bans
+define('_BAN_TITLE',                                           'アク禁リスト:');
+define('_BAN_NONE',                                                    'このBlogはアクセス規制されていません');
+define('_BAN_NEW_TITLE',                                       '規制するIPアドレスの追加');
+define('_BAN_NEW_TEXT',                                                '今すぐ規制アドレスを追加する');
+define('_BAN_REMOVE_TITLE',                                    'アクセス規制の解除');
+define('_BAN_IPRANGE',                                         'アクセス規制するIPアドレスの範囲');
+define('_BAN_BLOGS',                                           'アクセス規制するBlog: ');
+define('_BAN_DELETE_TITLE',                                    'アクセス規制の解除');
+define('_BAN_ALLBLOGS',                                                'あなたが管理者権限を持つ全てのBlog');
+define('_BAN_REMOVED_TITLE',                           'アクセス規制を解除しました');
+define('_BAN_REMOVED_TEXT',                                    '以下のBlogのアクセス規制を解除しました:');
+define('_BAN_ADD_TITLE',                                       '規制するIPアドレスの追加');
+define('_BAN_IPRANGE_TEXT',                                    '以下にブロックしたいIPアドレスを入力してください。');
+define('_BAN_BLOGS_TEXT',                                      '1つのBlogのみで規制するか、あなたが管理者権限を持つ全てのBlogで規制するかを選択することが出来ます。以下から選んでください。');
+define('_BAN_REASON_TITLE',                                    '理由');
+define('_BAN_REASON_TEXT',                                     '規制中のIPアドレスの範囲内のHOSTからコメントを投稿したりカルマ投票をしようとしたときに表示される規制理由を書いておくことができます (上限256文字)。');
+define('_BAN_ADD_BTN',                                         '規制するIPアドレスの追加');
+
+// LOGIN screen
+define('_LOGIN_MESSAGE',                                       'メッセージ');
+define('_LOGIN_SHARED',                                                _LOGINFORM_SHARED);
+define('_LOGIN_FORGOT',                                                'パスワードを忘れた');
+
+// membermanagement
+define('_MEMBERS_TITLE',                                       'メンバーの管理');
+define('_MEMBERS_CURRENT',                                     '現在のメンバー');
+define('_MEMBERS_NEW',                                         '新しいメンバーの追加');
+define('_MEMBERS_DISPLAY',                                     '表示される名前(ログインID)');
+define('_MEMBERS_DISPLAY_INFO',                                '(この名前はログイン時に使われます)');
+define('_MEMBERS_REALNAME',                                    'ハンドルネーム');
+define('_MEMBERS_PWD',                                         'パスワード');
+define('_MEMBERS_REPPWD',                                      'パスワード(確認)');
+define('_MEMBERS_EMAIL',                                       'メールアドレス');
+define('_MEMBERS_EMAIL_EDIT',                          '(メールアドレスを変更すると、そのアドレスへ自動的に認証用リンクが送信されます)');
+define('_MEMBERS_URL',                                         'Web siteアドレス (URL)');
+define('_MEMBERS_SUPERADMIN',                          'Super-admin(最高管理)権限を与える');
+define('_MEMBERS_CANLOGIN',                                    '管理者領域へのログインを可能にする');
+define('_MEMBERS_NOTES',                                       '備考');
+define('_MEMBERS_NEW_BTN',                                     'メンバーの追加');
+define('_MEMBERS_EDIT',                                                'メンバーの編集');
+define('_MEMBERS_EDIT_BTN',                                    '設定の変更');
+define('_MEMBERS_BACKTOOVERVIEW',                      'メンバーの一覧に戻る');
+define('_MEMBERS_DEFLANG',                                     '使用する言語');
+define('_MEMBERS_USESITELANG',                         '- サイトの設定を使う -');
+
+// List of blogs (TT = tooltip)
+define('_BLOGLIST_TT_VISIT',                           'サイトを見る');
+define('_BLOGLIST_ADD',                                                'アイテムの追加');
+define('_BLOGLIST_TT_ADD',                                     'このBlogに新しいアイテムを追加します');
+define('_BLOGLIST_EDIT',                                       'アイテムの編集/削除');
+define('_BLOGLIST_TT_EDIT',                                    '公開済みのアイテムを編集と削除');
+define('_BLOGLIST_BMLET',                                      'ブックマークレット');
+define('_BLOGLIST_TT_BMLET',                           'ブックマークレットのインストール');
+define('_BLOGLIST_SETTINGS',                           'ブログ設定');
+define('_BLOGLIST_TT_SETTINGS',                                'ブログの設定とブログチームの管理');
+define('_BLOGLIST_BANS',                                       'アクセス規制');
+define('_BLOGLIST_TT_BANS',                                    'アクセス規制の確認/追加/削除');
+define('_BLOGLIST_DELETE',                                     '全て削除');
+define('_BLOGLIST_TT_DELETE',                          'このBlogを削除');
+
+// OVERVIEW screen
+define('_OVERVIEW_YRBLOGS',                                    'あなたのBlog');
+define('_OVERVIEW_YRDRAFTS',                           'ドラフト(下書き)');
+define('_OVERVIEW_YRSETTINGS',                         '設定');
+define('_OVERVIEW_GSETTINGS',                          '基本設定');
+define('_OVERVIEW_NOBLOGS',                                    'あなたはどのBlogチームリストにも入っていません');
+define('_OVERVIEW_NODRAFTS',                           'ドラフト(下書き中)の記事はありません');
+define('_OVERVIEW_EDITSETTINGS',                       'あなたの設定');
+define('_OVERVIEW_BROWSEITEMS',                                'あなたのアイテム');
+define('_OVERVIEW_BROWSECOMM',                         'あなたのコメント');
+define('_OVERVIEW_VIEWLOG',                                    '管理操作履歴');
+define('_OVERVIEW_MEMBERS',                                    'メンバー管理');
+define('_OVERVIEW_NEWLOG',                                     '新規Blog作成');
+define('_OVERVIEW_SETTINGS',                           'グローバル設定');
+define('_OVERVIEW_TEMPLATES',                          'テンプレート編集');
+define('_OVERVIEW_SKINS',                                      'スキン編集');
+define('_OVERVIEW_BACKUP',                                     'DB保存/復元');
+
+// ITEMLIST
+define('_ITEMLIST_BLOG',                                                       'Blogアイテムの編集: ');
+define('_ITEMLIST_YOUR',                                                       'あなたのアイテム');
+
+// Comments
+define('_COMMENTS',                                                                    'コメント');
+define('_NOCOMMENTS',                                                          'このアイテムへのコメントはありません');
+define('_COMMENTS_YOUR',                                                       'あなたのコメント');
+define('_NOCOMMENTS_YOUR',                                                     'あなたのコメントはありません');
+
+// LISTS (general)
+define('_LISTS_NOMORE',                                                                '何もありません');
+define('_LISTS_PREV',                                                          '前へ');
+define('_LISTS_NEXT',                                                          '次へ');
+define('_LISTS_SEARCH',                                                                '検索');
+define('_LISTS_CHANGE',                                                                '変更');
+define('_LISTS_PERPAGE',                                                       'アイテム/ページ');
+define('_LISTS_ACTIONS',                                                       'アクション');
+define('_LISTS_DELETE',                                                                '削除');
+define('_LISTS_EDIT',                                                          '編集');
+define('_LISTS_MOVE',                                                          '移動');
+define('_LISTS_CLONE',                                                         '複製');
+define('_LISTS_TITLE',                                                         'タイトル');
+define('_LISTS_BLOG',                                                          'Blog');
+define('_LISTS_NAME',                                                          '名前');
+define('_LISTS_DESC',                                                          '説明');
+define('_LISTS_TIME',                                                          '時間');
+define('_LISTS_COMMENTS',                                                      'コメント');
+define('_LISTS_TYPE',                                                          'タイプ');
+
+
+// member list
+define('_LIST_MEMBER_NAME',                                                    '表示される名前(ログインID)');
+define('_LIST_MEMBER_RNAME',                                           'ハンドルネーム');
+define('_LIST_MEMBER_ADMIN',                                           'Super-admin権限 ');
+define('_LIST_MEMBER_LOGIN',                                           'ログイン可能');
+define('_LIST_MEMBER_URL',                                                     'ウェブサイト');
+
+// banlist
+define('_LIST_BAN_IPRANGE',                                                    '規制中のIPアドレスの範囲');
+define('_LIST_BAN_REASON',                                                     '規制の理由');
+
+// actionlist
+define('_LIST_ACTION_MSG',                                                     'メッセージ');
+
+// commentlist
+define('_LIST_COMMENT_BANIP',                                          'IPアドレスを規制');
+define('_LIST_COMMENT_WHO',                                                    '作者');
+define('_LIST_COMMENT',                                                                'コメント');
+define('_LIST_COMMENT_HOST',                                           'ホスト');
+
+// itemlist
+define('_LIST_ITEM_INFO',                                                      '情報');
+define('_LIST_ITEM_CONTENT',                                           'タイトルと本文');
+
+
+// teamlist
+define('_LIST_TEAM_ADMIN',                                                     '管理者権限 ');
+define('_LIST_TEAM_CHADMIN',                                           '管理者権限の変更');
+
+// edit comments
+define('_EDITC_TITLE',                                                         'コメントの編集');
+define('_EDITC_WHO',                                                           '作者');
+define('_EDITC_HOST',                                                          'ホスト');
+define('_EDITC_WHEN',                                                          '日時');
+define('_EDITC_TEXT',                                                          '本文');
+define('_EDITC_EDIT',                                                          'コメントの編集');
+define('_EDITC_MEMBER',                                                                'メンバー');
+define('_EDITC_NONMEMBER',                                                     '非メンバー');
+
+// move item
+define('_MOVE_TITLE',                                                          'どのBlogに移動しますか?');
+define('_MOVE_BTN',                                                                    'アイテムを移動する');
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/.htaccess b/utf8/nucleus/libs/.htaccess
new file mode 100644 (file)
index 0000000..6b2c90b
--- /dev/null
@@ -0,0 +1,2 @@
+Order allow,deny\r
+Deny from all\r
diff --git a/utf8/nucleus/libs/ACTION.php b/utf8/nucleus/libs/ACTION.php
new file mode 100755 (executable)
index 0000000..b8c8732
--- /dev/null
@@ -0,0 +1,430 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * Actions that can be called via action.php
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: ACTION.php,v 1.10 2007/05/31 07:23:39 kimitake Exp $
+ */
+class ACTION
+{
+    /**
+     *  Constructor for an new ACTION object
+     */
+    function ACTION()
+    {
+        // do nothing
+    }
+
+    /**
+     *  Calls functions that handle an action called from action.php
+     */
+    function doAction($action)
+    {
+        switch($action) {
+            case 'autodraft':
+                return $this->autoDraft();
+                break;
+            case 'updateticket':
+                return $this->updateTicket();
+                break;
+            case 'addcomment':
+                return $this->addComment();
+                break;
+            case 'sendmessage':
+                return $this->sendMessage();
+                break;
+            case 'createaccount':
+                return $this->createAccount();
+                break;
+            case 'forgotpassword':
+                return $this->forgotPassword();
+                break;
+            case 'votepositive':
+                return $this->doKarma('pos');
+                break;
+            case 'votenegative':
+                return $this->doKarma('neg');
+                break;
+            case 'plugin':
+                return $this->callPlugin();
+                break;
+            default:
+                doError(_ERROR_BADACTION);
+        }
+    }
+
+    /**
+     *  Adds a new comment to an item (if IP isn't banned)
+     */
+    function addComment() {
+        global $CONF, $errormessage, $manager;
+
+        $post['itemid'] =   intPostVar('itemid');
+        $post['user'] =     postVar('user');
+        $post['userid'] =   postVar('userid');
+        $post['email'] =   postVar('email');
+        $post['body'] =     postVar('body');
+
+        // set cookies when required
+        $remember = intPostVar('remember');
+        if ($remember == 1) {
+            $lifetime = time()+2592000;
+            setcookie($CONF['CookiePrefix'] . 'comment_user',$post['user'],$lifetime,'/','',0);
+            setcookie($CONF['CookiePrefix'] . 'comment_userid', $post['userid'],$lifetime,'/','',0);
+            setcookie($CONF['CookiePrefix'] . 'comment_email',  $post['email'], $lifetime,'/','',0);
+        }
+
+        $comments = new COMMENTS($post['itemid']);
+
+        $blogid = getBlogIDFromItemID($post['itemid']);
+        $this->checkban($blogid);
+        $blog =& $manager->getBlog($blogid);
+
+        // note: PreAddComment and PostAddComment gets called somewhere inside addComment
+        $errormessage = $comments->addComment($blog->getCorrectTime(),$post);
+
+        if ($errormessage == '1') {
+            // redirect when adding comments succeeded
+            if (postVar('url')) {
+                redirect(postVar('url'));
+            } else {
+                $url = createItemLink($post['itemid']);
+                redirect($url);
+            }
+        } else {
+            // else, show error message using default skin for blog
+            return array(
+                'message' => $errormessage,
+                'skinid' => $blog->getDefaultSkin()
+            );
+        }
+
+        exit;
+    }
+
+    /**
+     *  Sends a message from the current member to the member given as argument
+     */
+    function sendMessage() {
+        global $CONF, $member;
+
+        $error = $this->validateMessage();
+        if ($error != '')
+            return array('message' => $error);
+
+        if (!$member->isLoggedIn()) {
+            $fromMail = postVar('frommail');
+            $fromName = _MMAIL_FROMANON;
+        } else {
+            $fromMail = $member->getEmail();
+            $fromName = $member->getDisplayName();
+        }
+
+        $tomem = new MEMBER();
+        $tomem->readFromId(postVar('memberid'));
+
+        $message  = _MMAIL_MSG . ' ' . $fromName . "\n"
+              . '(' . _MMAIL_FROMNUC. ' ' . $CONF['IndexURL'] .") \n\n"
+              . _MMAIL_MAIL . " \n\n"
+              . postVar('message');
+        $message .= getMailFooter();
+
+        $title = _MMAIL_TITLE . ' ' . $fromName;
+        mb_language('ja');
+        mb_internal_encoding(_CHARSET);
+        @mb_send_mail($tomem->getEmail(), $title, $message, "From: ". $fromMail);
+
+        if (postVar('url')) {
+            redirect(postVar('url'));
+        } else {
+            $CONF['MemberURL'] = $CONF['IndexURL'];
+            if ($CONF['URLMode'] == 'pathinfo')
+            {
+                $url = createLink('member', array('memberid' => $tomem->getID(), 'name' => $tomem->getDisplayName()));
+            }
+            else
+            {
+                $url = $CONF['IndexURL'] . createMemberLink($tomem->getID());
+            }
+            redirect($url);
+        }
+        exit;
+    }
+
+    /**
+     *  Checks if a mail to a member is allowed
+     *  Returns a string with the error message if the mail is disallowed
+     */
+    function validateMessage() {
+        global $CONF, $member, $manager;
+
+        if (!$CONF['AllowMemberMail'])
+            return _ERROR_MEMBERMAILDISABLED;
+
+        if (!$member->isLoggedIn() && !$CONF['NonmemberMail'])
+            return _ERROR_DISALLOWED;
+
+        if (!$member->isLoggedIn() && (!isValidMailAddress(postVar('frommail'))))
+            return _ERROR_BADMAILADDRESS;
+
+        // let plugins do verification (any plugin which thinks the comment is invalid
+        // can change 'error' to something other than '')
+        $result = '';
+        $manager->notify('ValidateForm', array('type' => 'membermail', 'error' => &$result));
+
+        return $result;
+
+    }
+
+    /**
+     *  Creates a new user account
+     */
+    function createAccount() {
+        global $CONF, $manager;
+
+        if (!$CONF['AllowMemberCreate'])
+            doError(_ERROR_MEMBERCREATEDISABLED);
+
+        // evaluate content from FormExtra
+        $result = 1;
+        $data = array('type' => 'membermail', 'error' => &$result);
+        $manager->notify('ValidateForm', &$data);
+
+        if ($result!=1) {
+            return $result;
+        }
+        else {
+
+            // even though the member can not log in, set some random initial password. One never knows.
+            srand((double)microtime()*1000000);
+            $initialPwd = md5(uniqid(rand(), true));
+
+            // create member (non admin/can not login/no notes/random string as password)
+            $name = shorten(postVar('name'), 32, '');
+            $r = MEMBER::create($name, postVar('realname'), $initialPwd, postVar('email'), postVar('url'), 0, 0, '');
+
+            if ($r != 1) {
+                return $r;
+            }
+
+            // send message containing password.
+            $newmem = new MEMBER();
+            $newmem->readFromName($name);
+            $newmem->sendActivationLink('register');
+
+            $manager->notify('PostRegister',array('member' => &$newmem));
+
+            if (postVar('desturl')) {
+                redirect(postVar('desturl'));
+            } else {
+                // header has been already sent, so deleted the line below
+                //header ("Content-Type: text/html; charset="._CHARSET);
+                echo _MSG_ACTIVATION_SENT;
+                echo '<br /><br />Return to <a href="'.$CONF['IndexURL'].'" title="'.$CONF['SiteName'].'">'.$CONF['SiteName'].'</a>';
+                echo "\n</body>\n</html>";
+            }
+            exit;
+        }
+    }
+
+    /**
+     *  Sends a new password
+     */
+    function forgotPassword() {
+        $membername = trim(postVar('name'));
+
+        if (!MEMBER::exists($membername))
+            doError(_ERROR_NOSUCHMEMBER);
+        $mem = MEMBER::createFromName($membername);
+
+        /* below keeps regular users from resetting passwords using forgot password feature
+             Removing for now until clear why it is required.*/
+        /*if (!$mem->canLogin())
+            doError(_ERROR_NOLOGON_NOACTIVATE);*/
+
+        // check if e-mail address is correct
+        if (!($mem->getEmail() == postVar('email')))
+            doError(_ERROR_INCORRECTEMAIL);
+
+        // send activation link
+        $mem->sendActivationLink('forgot');
+
+        if (postVar('url')) {
+            redirect(postVar('url'));
+        } else {
+            header ("Content-Type: text/html; charset="._CHARSET);
+            echo _MSG_ACTIVATION_SENT;
+            echo '<br /><br />Return to <a href="'.$CONF['IndexURL'].'" title="'.$CONF['SiteName'].'">'.$CONF['SiteName'].'</a>';
+        }
+        exit;
+    }
+
+    /**
+     *  Handle karma votes
+     */
+    function doKarma($type) {
+        global $itemid, $member, $CONF, $manager;
+
+        // check if itemid exists
+        if (!$manager->existsItem($itemid,0,0))
+            doError(_ERROR_NOSUCHITEM);
+
+        $blogid = getBlogIDFromItemID($itemid);
+        $this->checkban($blogid);
+
+        $karma =& $manager->getKarma($itemid);
+
+        // check if not already voted
+        if (!$karma->isVoteAllowed(serverVar('REMOTE_ADDR')))
+            doError(_ERROR_VOTEDBEFORE);
+
+        // check if item does allow voting
+        $item =& $manager->getItem($itemid,0,0);
+        if ($item['closed'])
+            doError(_ERROR_ITEMCLOSED);
+
+        switch($type) {
+            case 'pos':
+                $karma->votePositive();
+                break;
+            case 'neg':
+                $karma->voteNegative();
+                break;
+        }
+
+//             $blogid = getBlogIDFromItemID($itemid);
+        $blog =& $manager->getBlog($blogid);
+
+        // send email to notification address, if any
+        if ($blog->getNotifyAddress() && $blog->notifyOnVote()) {
+
+            $mailto_msg = _NOTIFY_KV_MSG . ' ' . $itemid . "\n";
+            $itemLink = createItemLink(intval($itemid));
+            $temp = parse_url($itemLink);
+            if (!$temp['scheme']) {
+                $itemLink = $CONF['IndexURL'] . $itemLink;
+            }
+            $mailto_msg .= $itemLink . "\n\n";
+            if ($member->isLoggedIn()) {
+                $mailto_msg .= _NOTIFY_MEMBER . ' ' . $member->getDisplayName() . ' (ID=' . $member->getID() . ")\n";
+            }
+            $mailto_msg .= _NOTIFY_IP . ' ' . serverVar('REMOTE_ADDR') . "\n";
+            $mailto_msg .= _NOTIFY_HOST . ' ' .  gethostbyaddr(serverVar('REMOTE_ADDR'))  . "\n";
+            $mailto_msg .= _NOTIFY_VOTE . "\n " . $type . "\n";
+            $mailto_msg .= getMailFooter();
+
+            $mailto_title = _NOTIFY_KV_TITLE . ' ' . strip_tags($item['title']) . ' (' . $itemid . ')';
+
+            $frommail = $member->getNotifyFromMailAddress();
+
+            $notify = new NOTIFICATION($blog->getNotifyAddress());
+            $notify->notify($mailto_title, $mailto_msg , $frommail);
+        }
+
+
+        $refererUrl = serverVar('HTTP_REFERER');
+        if ($refererUrl) {
+            $url = $refererUrl;
+        } else {
+//                     $url = $CONF['IndexURL'] . 'index.php?itemid=' . $itemid;
+            $url = $itemLink;
+        }
+
+        redirect($url);
+        exit;
+    }
+
+    /**
+      * Calls a plugin action
+      */
+    function callPlugin() {
+        global $manager;
+
+        $pluginName = 'NP_' . requestVar('name');
+        $actionType = requestVar('type');
+
+        // 1: check if plugin is installed
+        if (!$manager->pluginInstalled($pluginName))
+            doError(_ERROR_NOSUCHPLUGIN);
+
+        // 2: call plugin
+        $pluginObject =& $manager->getPlugin($pluginName);
+        if ($pluginObject)
+            $error = $pluginObject->doAction($actionType);
+        else
+            $error = 'Could not load plugin (see actionlog)';
+
+        // doAction returns error when:
+        // - an error occurred (duh)
+        // - no actions are allowed (doAction is not implemented)
+        if ($error)
+            doError($error);
+
+        exit;
+
+    }
+
+    /**
+     *  Checks if an IP or IP range is banned
+     */
+    function checkban($blogid) {
+        // check if banned
+        $ban = BAN::isBanned($blogid, serverVar('REMOTE_ADDR'));
+        if ($ban != 0) {
+            doError(_ERROR_BANNED1 . $ban->iprange . _ERROR_BANNED2 . $ban->message . _ERROR_BANNED3);
+        }
+
+    }
+
+    /**
+     * Gets a new ticket
+     */
+    function updateTicket() {
+        global $manager;
+        if ($manager->checkTicket()) {
+            echo $manager->getNewTicket();
+        }
+        else {
+            echo _ERROR . ':' . _ERROR_BADTICKET;
+        }
+        return false;
+    }
+
+    /**
+     * Handles AutoSaveDraft
+     */
+    function autoDraft() {
+        global $manager;
+        if ($manager->checkTicket()) {
+            $manager->loadClass('ITEM');
+            $info = ITEM::createDraftFromRequest();
+            if ($info['status'] == 'error') {
+                echo $info['message'];
+            }
+            else {
+                echo $info['draftid'];
+            }
+        }
+        else {
+            echo _ERROR . ':' . _ERROR_BADTICKET;
+        }
+        return false;
+    }
+
+
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/ACTIONLOG.php b/utf8/nucleus/libs/ACTIONLOG.php
new file mode 100755 (executable)
index 0000000..bbe318e
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * Actionlog class for Nucleus
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: ACTIONLOG.php,v 1.7 2007/03/13 05:18:32 shizuki Exp $
+ */
+define('ERROR',1);             // only errors
+define('WARNING',2);   // errors and warnings
+define('INFO',3);              // info, errors and warnings
+define('DEBUG',4);             // everything
+$CONF['LogLevel'] = INFO;
+
+class ACTIONLOG {
+
+       /**
+         * (Static) Method to add a message to the action log
+         */
+       function add($level, $message) {
+               global $member, $CONF;
+
+               if ($CONF['LogLevel'] < $level)
+                       return;
+
+               if ($member && $member->isLoggedIn())
+                       $message = "[" . $member->getDisplayName() . "] " . $message;
+
+               $message = addslashes($message);                // add slashes
+               $timestamp = date("Y-m-d H:i:s",time());        // format timestamp
+               $query = "INSERT INTO " . sql_table('actionlog') . " (timestamp, message) VALUES ('$timestamp', '$message')";
+
+               sql_query($query);
+
+               ACTIONLOG::trimLog();
+       }
+
+       /**
+         * (Static) Method to clear the whole action log
+         */
+       function clear() {
+               global $manager;
+
+               $query = 'DELETE FROM ' . sql_table('actionlog');
+
+               $manager->notify('ActionLogCleared',array());
+
+               return sql_query($query);
+       }
+
+       /**
+         * (Static) Method to trim the action log (from over 500 back to 250 entries)
+         */
+       function trimLog() {
+               static $checked = 0;
+
+               // only check once per run
+               if ($checked) return;
+
+               // trim
+               $checked = 1;
+
+               $iTotal = quickQuery('SELECT COUNT(*) AS result FROM ' . sql_table('actionlog'));
+
+               // if size > 500, drop back to about 250
+               $iMaxSize = 500;
+               $iDropSize = 250;
+               if ($iTotal > $iMaxSize) {
+                       $tsChop = quickQuery('SELECT timestamp as result FROM ' . sql_table('actionlog') . ' ORDER BY timestamp DESC LIMIT '.$iDropSize.',1');
+                       sql_query('DELETE FROM ' . sql_table('actionlog') . ' WHERE timestamp < \'' . $tsChop . '\'');
+               }
+
+       }
+
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/ACTIONS.php b/utf8/nucleus/libs/ACTIONS.php
new file mode 100644 (file)
index 0000000..afe58bf
--- /dev/null
@@ -0,0 +1,1369 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * This class contains the functions that get called by using
+ * the special tags in the skins
+ *
+ * The allowed tags for a type of skinpart are defined by the
+ * SKIN::getAllowedActionsForType($type) method
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: ACTIONS.php,v 1.8 2007/04/19 06:05:55 kimitake Exp $
+ */
+
+class ACTIONS extends BaseActions {
+
+       // part of the skin currently being parsed ('index', 'item', 'archive',
+       // 'archivelist', 'member', 'search', 'error', 'imagepopup')
+       var $skintype;
+
+       // contains an assoc array with parameters that need to be included when
+       // generating links to items/archives/... (e.g. catid)
+       var $linkparams;
+
+       // reference to the skin object for which a part is being parsed
+       var $skin;
+
+       // used when including templated forms from the include/ dir. The $formdata var
+       // contains the values to fill out in there (assoc array name -> value)
+       var $formdata;
+
+       // filled out with the number of displayed items after calling one of the
+       // (other)blog/(other)searchresults skinvars.
+       var $amountfound;
+
+       /**
+        * Constructor for a new ACTIONS object
+        */
+       function ACTIONS($type) {
+               // call constructor of superclass first
+               $this->BaseActions();
+
+               $this->skintype = $type;
+
+               global $catid;
+               if ($catid)
+                       $this->linkparams = array('catid' => $catid);
+       }
+
+       /**
+        *  Set the skin
+        */
+       function setSkin(&$skin) {
+               $this->skin =& $skin;
+       }
+
+       /**
+        *  Set the parser
+        */
+       function setParser(&$parser) {
+               $this->parser =& $parser;
+       }
+
+       /**
+        *      Forms get parsedincluded now, using an extra <formdata> skinvar
+       */
+       function doForm($filename) {
+               global $DIR_NUCLEUS;
+               array_push($this->parser->actions,'formdata','text','callback','errordiv','ticket');
+               $oldIncludeMode = PARSER::getProperty('IncludeMode');
+               $oldIncludePrefix = PARSER::getProperty('IncludePrefix');
+               PARSER::setProperty('IncludeMode','normal');
+               PARSER::setProperty('IncludePrefix','');
+               $this->parse_parsedinclude($DIR_NUCLEUS . 'forms/' . $filename . '.template');
+               PARSER::setProperty('IncludeMode',$oldIncludeMode);
+               PARSER::setProperty('IncludePrefix',$oldIncludePrefix);
+               array_pop($this->parser->actions);              // errordiv
+               array_pop($this->parser->actions);              // callback
+               array_pop($this->parser->actions);              // text
+               array_pop($this->parser->actions);              // formdata
+               array_pop($this->parser->actions);              // ticket
+       }
+
+       /**
+        * Checks conditions for if statements
+        *
+        * @param string $field type of <%if%>
+        * @param string $name property of field
+        * @param string $value value of property
+        */
+       function checkCondition($field, $name='', $value = '') {
+               global $catid, $blog, $member, $itemidnext, $itemidprev, $manager, $archiveprevexists, $archivenextexists;
+
+               $condition = 0;
+               switch($field) {
+                       case 'category':
+                               $condition = ($blog && $this->_ifCategory($name,$value));
+                               break;
+                       case 'blogsetting':
+                               $condition = ($blog && ($blog->getSetting($name) == $value));
+                               break;
+                       case 'loggedin':
+                               $condition = $member->isLoggedIn();
+                               break;
+                       case 'onteam':
+                               $condition = $member->isLoggedIn() && $this->_ifOnTeam($name);
+                               break;
+                       case 'admin':
+                               $condition = $member->isLoggedIn() && $this->_ifAdmin($name);
+                               break;
+                       case 'nextitem':
+                               $condition = ($itemidnext != '');
+                               break;
+                       case 'previtem':
+                               $condition = ($itemidprev != '');
+                               break;
+                       case 'archiveprevexists':
+                               $condition = ($archiveprevexists == true);
+                               break;
+                       case 'archivenextexists':
+                               $condition = ($archivenextexists == true);
+                               break;
+                       case 'skintype':
+                               $condition = ($name == $this->skintype);
+                               break;
+                       case 'hasplugin':
+                               $condition = $this->_ifHasPlugin($name, $value);
+                               break;
+                       default:
+                               $condition = $manager->pluginInstalled('NP_' . $field) && $this->_ifPlugin($field, $name, $value);
+                               break;
+               }
+               return $condition;
+       }
+
+       /**
+        *      hasplugin,PlugName
+        *         -> checks if plugin exists
+        *      hasplugin,PlugName,OptionName
+        *         -> checks if the option OptionName from plugin PlugName is not set to 'no'
+        *      hasplugin,PlugName,OptionName=value
+        *         -> checks if the option OptionName from plugin PlugName is set to value
+        */
+       function _ifHasPlugin($name, $value) {
+               global $manager;
+               $condition = false;
+               // (pluginInstalled method won't write a message in the actionlog on failure)
+               if ($manager->pluginInstalled('NP_'.$name)) {
+                       $plugin =& $manager->getPlugin('NP_' . $name);
+                       if ($plugin != NULL) {
+                               if ($value == "") {
+                                       $condition = true;
+                               } else {
+                                       list($name2, $value2) = explode('=', $value, 2);
+                                       if ($value2 == "" && $plugin->getOption($name2) != 'no') {
+                                               $condition = true;
+                                       } else if ($plugin->getOption($name2) == $value2) {
+                                               $condition = true;
+                                       }
+                               }
+                       }
+               }
+               return $condition;
+       }
+
+       /**
+        * Checks if a plugin exists and call its doIf function
+        */
+       function _ifPlugin($name, $key = '', $value = '') {
+               global $manager;
+
+               $plugin =& $manager->getPlugin('NP_' . $name);
+               if (!$plugin) return;
+
+               $params = func_get_args();
+               array_shift($params);
+
+               return call_user_func_array(array(&$plugin, 'doIf'), $params);
+       }
+
+       /**
+        *  Different checks for a category
+        */
+       function _ifCategory($name = '', $value='') {
+               global $blog, $catid;
+
+               // when no parameter is defined, just check if a category is selected
+               if (($name != 'catname' && $name != 'catid') || ($value == ''))
+                       return $blog->isValidCategory($catid);
+
+               // check category name
+               if ($name == 'catname') {
+                       $value = $blog->getCategoryIdFromName($value);
+                       if ($value == $catid)
+                               return $blog->isValidCategory($catid);
+               }
+
+               // check category id
+               if (($name == 'catid') && ($value == $catid))
+                       return $blog->isValidCategory($catid);
+
+               return false;
+       }
+
+       /**
+        *  Checks if a member is on the team of a blog and return his rights
+        */
+       function _ifOnTeam($blogName = '') {
+               global $blog, $member, $manager;
+
+               // when no blog found
+               if (($blogName == '') && (!is_object($blog)))
+                       return 0;
+
+               // explicit blog selection
+               if ($blogName != '')
+                       $blogid = getBlogIDFromName($blogName);
+
+               if (($blogName == '') || !$manager->existsBlogID($blogid))
+                       // use current blog
+                       $blogid = $blog->getID();
+
+               return $member->teamRights($blogid);
+       }
+
+       /**
+        *  Checks if a member is admin of a blog
+        */
+       function _ifAdmin($blogName = '') {
+               global $blog, $member, $manager;
+
+               // when no blog found
+               if (($blogName == '') && (!is_object($blog)))
+                       return 0;
+
+               // explicit blog selection
+               if ($blogName != '')
+                       $blogid = getBlogIDFromName($blogName);
+
+               if (($blogName == '') || !$manager->existsBlogID($blogid))
+                       // use current blog
+                       $blogid = $blog->getID();
+
+               return $member->isBlogAdmin($blogid);
+       }
+       
+       /**
+        * returns either
+        *              - a raw link (html/xml encoded) when no linktext is provided
+        *              - a (x)html <a href... link when a text is present (text htmlencoded)
+        */
+       function _link($url, $linktext = '')
+       {
+               $u = htmlspecialchars($url);
+               $u = preg_replace("/&amp;amp;/",'&amp;',$u); // fix URLs that already had encoded ampersands
+               if ($linktext != '')
+                       $l = '<a href="' . $u .'">'.htmlspecialchars($linktext).'</a>';
+               else
+                       $l = $u;
+               return $l;
+       }
+       
+       /**
+        * Outputs a next/prev link
+        *
+        * @param $maxresults
+        *              The maximum amount of items shown per page (e.g. 10)
+        * @param $startpos
+        *              Current start position (requestVar('startpos'))
+        * @param $direction
+        *              either 'prev' or 'next'
+        * @param $linktext
+        *              When present, the output will be a full <a href...> link. When empty,
+        *              only a raw link will be outputted
+        */
+       function _searchlink($maxresults, $startpos, $direction, $linktext = '') {
+               global $CONF, $blog, $query, $amount;
+               // TODO: Move request uri to linkparams. this is ugly. sorry for that.
+               $startpos       = intval($startpos);            // will be 0 when empty.
+               $parsed         = parse_url(serverVar('REQUEST_URI'));
+               $parsed         = $parsed['query'];
+               $url            = '';
+
+               switch ($direction) {
+                       case 'prev':
+                               if ( intval($startpos) - intval($maxresults) >= 0) {
+                                       $startpos       = intval($startpos) - intval($maxresults);
+                                       $url            = $CONF['SearchURL'].'?'.alterQueryStr($parsed,'startpos',$startpos);
+                               }
+                               break;
+                       case 'next':
+                               $iAmountOnPage = $this->amountfound;
+                               if ($iAmountOnPage == 0)
+                               {
+                                       // [%nextlink%] or [%prevlink%] probably called before [%blog%] or [%searchresults%]
+                                       // try a count query
+                                       switch ($this->skintype)
+                                       {
+                                               case 'index':
+                                                       $sqlquery = $blog->getSqlBlog('', 'count');
+                                                       break;
+                                               case 'search':
+                                                       $sqlquery = $blog->getSqlSearch($query, $amount, $unused_highlight, 'count');
+                                                       break;
+                                       }
+                                       if ($sqlquery)
+                                               $iAmountOnPage = intval(quickQuery($sqlquery)) - intval($startpos);
+                               }
+                               if (intval($iAmountOnPage) >= intval($maxresults)) {
+                                       $startpos       = intval($startpos) + intval($maxresults);
+                                       $url            = $CONF['SearchURL'].'?'.alterQueryStr($parsed,'startpos',$startpos);
+                               }
+                               break;
+                       default:
+                               break;
+               } // switch($direction)
+
+               if ($url != '')
+                       echo $this->_link($url, $linktext);
+       }
+
+       /**
+        *  Creates an item link and if no id is given a todaylink 
+        */
+       function _itemlink($id, $linktext = '') {
+               global $CONF;
+               if ($id)
+                       echo $this->_link(createItemLink($id, $this->linkparams), $linktext);
+               else
+                       $this->parse_todaylink($linktext);
+       }
+       
+       /**
+        *  Creates an archive link and if no id is given a todaylink 
+        */
+       function _archivelink($id, $linktext = '') {
+               global $CONF, $blog;
+               if ($id)
+                       echo $this->_link(createArchiveLink($blog->getID(), $id, $this->linkparams), $linktext);
+               else
+                       $this->parse_todaylink($linktext);
+       }
+       
+       /**
+         * Helper function that sets the category that a blog will need to use
+         *
+         * @param $blog
+         *             An object of the blog class, passed by reference (we want to make changes to it)
+         * @param $catname
+         *             The name of the category to use
+         */
+       function _setBlogCategory(&$blog, $catname) {
+               global $catid;
+               if ($catname != '')
+                       $blog->setSelectedCategoryByName($catname);
+               else
+                       $blog->setSelectedCategory($catid);
+       }
+
+       /**
+        *  Notifies the Manager that a PreBlogContent event occurs
+        */
+       function _preBlogContent($type, &$blog) {
+               global $manager;
+               $manager->notify('PreBlogContent',array('blog' => &$blog, 'type' => $type));
+       }
+
+       /**
+        *  Notifies the Manager that a PostBlogContent event occurs
+        */
+       function _postBlogContent($type, &$blog) {
+               global $manager;
+               $manager->notify('PostBlogContent',array('blog' => &$blog, 'type' => $type));
+       }
+       
+       /**
+        * Parse skinvar additemform
+        */
+       function parse_additemform() {
+               global $blog, $CONF;
+               $this->formdata = array(
+                       'adminurl' => htmlspecialchars($CONF['AdminURL'],ENT_QUOTES),
+                       'catid' => $blog->getDefaultCategory()
+               );
+               $blog->InsertJavaScriptInfo();
+               $this->doForm('additemform');
+       }
+       
+       /**
+        * Parse skinvar addlink
+        * A Link that allows to open a bookmarklet to add an item
+        */
+       function parse_addlink() {
+               global $CONF, $member, $blog;
+               if ($member->isLoggedIn() && $member->isTeamMember($blog->blogid) ) {
+                       echo $CONF['AdminURL'].'bookmarklet.php?blogid='.$blog->blogid;
+               }
+       }
+       
+       /**
+        * Parse skinvar addpopupcode
+        * Code that opens a bookmarklet in an popup window
+        */
+       function parse_addpopupcode() {
+               echo "if (event &amp;&amp; event.preventDefault) event.preventDefault();winbm=window.open(this.href,'nucleusbm','scrollbars=no,width=710,height=550,left=10,top=10,status=no,resizable=yes');winbm.focus();return false;";
+       }
+       
+       /**
+        * Parse skinvar adminurl
+        * (shortcut for admin url)      
+        */
+       function parse_adminurl() {
+               $this->parse_sitevar('adminurl');
+       }
+
+       /**
+        * Parse skinvar archive
+        */
+       function parse_archive($template, $category = '') {
+               global $blog, $archive;
+               // can be used with either yyyy-mm or yyyy-mm-dd
+               sscanf($archive,'%d-%d-%d',$y,$m,$d);
+               $this->_setBlogCategory($blog, $category);
+               $this->_preBlogContent('achive',$blog);
+               $blog->showArchive($template, $y, $m, $d);
+               $this->_postBlogContent('achive',$blog);
+
+       }
+
+       /**
+         * %archivedate(locale,date format)%
+         */
+       function parse_archivedate($locale = '-def-') {
+               global $archive;
+
+               if ($locale == '-def-')
+                       setlocale(LC_TIME,$template['LOCALE']);
+               else
+                       setlocale(LC_TIME,$locale);
+
+               // get archive date
+               sscanf($archive,'%d-%d-%d',$y,$m,$d);
+
+               // get format
+               $args = func_get_args();
+               // format can be spread over multiple parameters
+               if (sizeof($args) > 1) {
+                       // take away locale
+                       array_shift($args);
+                       // implode
+                       $format=implode(',',$args);
+               } elseif ($d == 0 && $m !=0) {
+                       $format = '%B %Y';
+               } elseif ($m == 0) {
+                       $format = '%Y';
+               } else {
+                       $format = '%d %B %Y';
+               }
+
+               echo strftime($format,mktime(0,0,0,$m?$m:1,$d?$d:1,$y));
+       }
+
+       /**
+        *  Parse skinvar archivedaylist
+        */             
+       function parse_archivedaylist($template, $category = 'all', $limit = 0) {
+               global $blog;
+               if ($category == 'all') $category = '';
+               $this->_preBlogContent('archivelist',$blog);
+               $this->_setBlogCategory($blog, $category);
+               $blog->showArchiveList($template, 'day', $limit);
+               $this->_postBlogContent('archivelist',$blog);
+       }
+       
+       /**
+        *      A link to the archives for the current blog (or for default blog)
+        */
+       function parse_archivelink($linktext = '') {
+               global $blog, $CONF;
+               if ($blog)
+                       echo $this->_link(createArchiveListLink($blog->getID(),$this->linkparams), $linktext);
+               else
+                       echo $this->_link(createArchiveListLink(), $linktext);
+       }
+
+       function parse_archivelist($template, $category = 'all', $limit = 0) {
+               global $blog;
+               if ($category == 'all') $category = '';
+               $this->_preBlogContent('archivelist',$blog);
+               $this->_setBlogCategory($blog, $category);
+               $blog->showArchiveList($template, 'month', $limit);
+               $this->_postBlogContent('archivelist',$blog);
+       }
+
+       function parse_archiveyearlist($template, $category = 'all', $limit = 0) {
+               global $blog;
+               if ($category == 'all') $category = '';
+               $this->_preBlogContent('archivelist',$blog);
+               $this->_setBlogCategory($blog, $category);
+               $blog->showArchiveList($template, 'year', $limit);
+               $this->_postBlogContent('archivelist',$blog);
+       }
+
+       /**
+        * Parse skinvar archivetype
+        */
+       function parse_archivetype() {
+               global $archivetype;
+               echo $archivetype;
+       }
+
+       /**
+        * Parse skinvar blog
+        */
+       function parse_blog($template, $amount = 10, $category = '') {
+               global $blog, $startpos;
+
+               list($limit, $offset) = sscanf($amount, '%d(%d)');
+               $this->_setBlogCategory($blog, $category);
+               $this->_preBlogContent('blog',$blog);
+               $this->amountfound = $blog->readLog($template, $limit, $offset, $startpos);
+               $this->_postBlogContent('blog',$blog);
+       }
+       
+       /*
+       *       Parse skinvar bloglist
+       *       Shows a list of all blogs
+       *       bnametype: whether 'name' or 'shortname' is used for the link text        
+       *       orderby: order criteria
+       *       direction: order ascending or descending                  
+       */
+       function parse_bloglist($template, $bnametype = '', $orderby='number', $direction='asc') {
+               BLOG::showBlogList($template, $bnametype, $orderby, $direction);
+       }
+       
+       /**
+        * Parse skinvar blogsetting
+        */
+       function parse_blogsetting($which) {
+               global $blog;
+               switch($which) {
+                       case 'id':
+                               echo htmlspecialchars($blog->getID(),ENT_QUOTES);
+                               break;
+                       case 'url':
+                               echo htmlspecialchars($blog->getURL(),ENT_QUOTES);
+                               break;
+                       case 'name':
+                               echo htmlspecialchars($blog->getName(),ENT_QUOTES);
+                               break;
+                       case 'desc':
+                               echo htmlspecialchars($blog->getDescription(),ENT_QUOTES);
+                               break;
+                       case 'short':
+                               echo htmlspecialchars($blog->getShortName(),ENT_QUOTES);
+                               break;
+               }
+       }
+       
+       /**
+        * Parse callback
+        */
+       function parse_callback($eventName, $type)
+       {
+               global $manager;
+               $manager->notify($eventName, array('type' => $type));
+       }
+       
+       /**
+        * Parse skinvar category
+        */
+       function parse_category($type = 'name') {
+               global $catid, $blog;
+               if (!$blog->isValidCategory($catid))
+                       return;
+
+               switch($type) {
+                       case 'name':
+                               echo $blog->getCategoryName($catid);
+                               break;
+                       case 'desc':
+                               echo $blog->getCategoryDesc($catid);
+                               break;
+                       case 'id':
+                               echo $catid;
+                               break;
+               }
+       }
+       
+       /**
+        * Parse categorylist
+        */
+       function parse_categorylist($template, $blogname = '') {
+               global $blog, $manager;
+
+               if ($blogname == '') {
+                       $this->_preBlogContent('categorylist',$blog);
+                       $blog->showCategoryList($template);
+                       $this->_postBlogContent('categorylist',$blog);
+               } else {
+                       $b =& $manager->getBlog(getBlogIDFromName($blogname));
+                       $this->_preBlogContent('categorylist',$b);
+                       $b->showCategoryList($template);
+                       $this->_postBlogContent('categorylist',$b);
+               }
+       }
+       
+       /**
+        * Parse skinvar charset
+        */
+       function parse_charset() {
+               echo _CHARSET;
+       }
+       
+       /**
+        * Parse skinvar commentform
+        */
+       function parse_commentform($destinationurl = '') {
+               global $blog, $itemid, $member, $CONF, $manager, $DIR_LIBS, $errormessage;
+
+               // warn when trying to provide a actionurl (used to be a parameter in Nucleus <2.0)
+               if (stristr($destinationurl, 'action.php')) {
+                       $args = func_get_args();
+                       $destinationurl = $args[1];
+                       ACTIONLOG::add(WARNING,_ACTIONURL_NOTLONGER_PARAMATER);
+               }
+
+               $actionurl = $CONF['ActionURL'];
+
+               // if item is closed, show message and do nothing
+               $item =& $manager->getItem($itemid,0,0);
+               if ($item['closed'] || !$blog->commentsEnabled()) {
+                       $this->doForm('commentform-closed');
+                       return;
+               }
+
+               if (!$destinationurl)
+               {
+                       $destinationurl = createLink(
+                               'item',
+                               array(
+                                       'itemid' => $itemid,
+                                       'title' => $item['title'],
+                                       'timestamp' => $item['timestamp'],
+                                       'extra' => $this->linkparams
+                               )
+                       );
+
+                       // note: createLink returns an HTML encoded URL
+               } else {
+                       // HTML encode URL
+                       $destinationurl = htmlspecialchars($destinationurl,ENT_QUOTES);
+               }
+
+               // values to prefill
+               $user = cookieVar($CONF['CookiePrefix'] .'comment_user');
+               if (!$user) $user = postVar('user');
+               $userid = cookieVar($CONF['CookiePrefix'] .'comment_userid');
+               if (!$userid) $userid = postVar('userid');
+               $email = cookieVar($CONF['CookiePrefix'] .'comment_email');
+               if (!$email) {
+                       $email = postVar('email');
+               }
+               $body = postVar('body');
+
+               $this->formdata = array(
+                       'destinationurl' => $destinationurl,    // url is already HTML encoded
+                       'actionurl' => htmlspecialchars($actionurl,ENT_QUOTES),
+                       'itemid' => $itemid,
+                       'user' => htmlspecialchars($user,ENT_QUOTES),
+                       'userid' => htmlspecialchars($userid,ENT_QUOTES),
+                       'email' => htmlspecialchars($email,ENT_QUOTES),
+                       'body' => htmlspecialchars($body,ENT_QUOTES),
+                       'membername' => $member->getDisplayName(),
+                       'rememberchecked' => cookieVar($CONF['CookiePrefix'] .'comment_user')?'checked="checked"':''
+               );
+
+               if (!$member->isLoggedIn()) {
+                       $this->doForm('commentform-notloggedin');
+               } else {
+                       $this->doForm('commentform-loggedin');
+               }
+       }
+       
+       /**
+        * Parse skinvar comments
+        * include comments for one item         
+        */
+       function parse_comments($template) {
+               global $itemid, $manager, $blog, $highlight;
+               $template =& $manager->getTemplate($template);
+
+               // create parser object & action handler
+               $actions =& new ITEMACTIONS($blog);
+               $parser =& new PARSER($actions->getDefinedActions(),$actions);
+               $actions->setTemplate($template);
+               $actions->setParser($parser);
+               $item = ITEM::getitem($itemid, 0, 0);
+               $actions->setCurrentItem($item);
+
+               $comments =& new COMMENTS($itemid);
+               $comments->setItemActions($actions);
+               $comments->showComments($template, -1, 1, $highlight);  // shows ALL comments
+       }
+
+       /**
+        * Parse errordiv
+        */
+       function parse_errordiv() {
+               global $errormessage;
+               if ($errormessage)
+                       echo '<div class="error">', htmlspecialchars($errormessage),'</div>';
+       }
+       
+       /**
+        * Parse skinvar errormessage
+        */
+       function parse_errormessage() {
+               global $errormessage;
+               echo $errormessage;
+       }
+       
+       /**
+        * Parse formdata
+        */
+       function parse_formdata($what) {
+               echo $this->formdata[$what];
+       }
+       
+       /**
+        * Parse ifcat
+        */
+       function parse_ifcat($text = '') {
+               if ($text == '') {
+                       // new behaviour
+                       $this->parse_if('category');
+               } else {
+                       // old behaviour
+                       global $catid, $blog;
+                       if ($blog->isValidCategory($catid))
+                               echo $text;
+               }
+       }
+
+       /**
+        * Parse skinvar image
+        */
+       function parse_image($what = 'imgtag') {
+               global $CONF;
+
+               $imagetext      = htmlspecialchars(requestVar('imagetext'));
+               $imagepopup = requestVar('imagepopup');
+               $width          = intRequestVar('width');
+               $height         = intRequestVar('height');
+               $fullurl        = htmlspecialchars($CONF['MediaURL'] . $imagepopup);
+
+               switch($what)
+               {
+                       case 'url':
+                               echo $fullurl;
+                               break;
+                       case 'width':
+                               echo $width;
+                               break;
+                       case 'height':
+                               echo $height;
+                               break;
+                       case 'caption':
+                       case 'text':
+                               echo $imagetext;
+                               break;
+                       case 'imgtag':
+                       default:
+                               echo "<img src=\"$fullurl\" width=\"$width\" height=\"$height\" alt=\"$imagetext\" title=\"$imagetext\" />";
+                               break;
+               }
+       }
+       
+       /**
+        * Parse skinvar imagetext
+        */
+       function parse_imagetext() {
+               echo htmlspecialchars(requestVar('imagetext'),ENT_QUOTES);
+       }
+
+       /**
+        * Parse skinvar item
+        * include one item (no comments)        
+        */
+       function parse_item($template) {
+               global $blog, $itemid, $highlight;
+               $this->_setBlogCategory($blog, '');     // need this to select default category
+               $this->_preBlogContent('item',$blog);
+               $r = $blog->showOneitem($itemid, $template, $highlight);
+               if ($r == 0)
+                       echo _ERROR_NOSUCHITEM;
+               $this->_postBlogContent('item',$blog);
+       }
+
+       /**
+        * Parse skinvar itemid
+        */
+       function parse_itemid() {
+               global $itemid;
+               echo $itemid;
+       }
+       
+       /**
+        * Parse skinvar itemlink
+        */
+       function parse_itemlink($linktext = '') {
+               global $itemid;
+               $this->_itemlink($itemid, $linktext);
+       }
+
+       /**
+        * Parse itemtitle
+        */
+       function parse_itemtitle($format = '') {
+               global $manager, $itemid;
+               $item =& $manager->getItem($itemid,0,0);
+
+               switch ($format) {
+                       case 'xml':
+                               echo stringToXML ($item['title']);
+                               break;
+                       case 'attribute':
+                               echo stringToAttribute ($item['title']);
+                               break;
+                       case 'raw':
+                               echo $item['title'];
+                               break;
+                       default:
+                               echo htmlspecialchars(strip_tags($item['title']),ENT_QUOTES);
+                               break;
+               }
+       }
+
+       /**
+        * Parse skinvar loginform
+        */
+       function parse_loginform() {
+               global $member, $CONF;
+               if (!$member->isLoggedIn()) {
+                       $filename = 'loginform-notloggedin';
+                       $this->formdata = array();
+               } else {
+                       $filename = 'loginform-loggedin';
+                       $this->formdata = array(
+                               'membername' => $member->getDisplayName(),
+                       );
+               }
+               $this->doForm($filename);
+       }
+
+       /**
+        * Parse skinvar member
+        * (includes a member info thingie)      
+        */
+       function parse_member($what) {
+               global $memberinfo, $member;
+
+               // 1. only allow the member-details-page specific variables on member pages
+               if ($this->skintype == 'member') {
+
+                       switch($what) {
+                               case 'name':
+                                       echo htmlspecialchars($memberinfo->getDisplayName(),ENT_QUOTES);
+                                       break;
+                               case 'realname':
+                                       echo htmlspecialchars($memberinfo->getRealName(),ENT_QUOTES);
+                                       break;
+                               case 'notes':
+                                       echo htmlspecialchars($memberinfo->getNotes(),ENT_QUOTES);
+                                       break;
+                               case 'url':
+                                       echo htmlspecialchars($memberinfo->getURL(),ENT_QUOTES);
+                                       break;
+                               case 'email':
+                                       echo htmlspecialchars($memberinfo->getEmail(),ENT_QUOTES);
+                                       break;
+                               case 'id':
+                                       echo htmlspecialchars($memberinfo->getID(),ENT_QUOTES);
+                                       break;
+                       }
+               }
+
+               // 2. the next bunch of options is available everywhere, as long as the user is logged in
+               if ($member->isLoggedIn())
+               {
+                       switch($what) {
+                               case 'yourname':
+                                       echo $member->getDisplayName();
+                                       break;
+                               case 'yourrealname':
+                                       echo $member->getRealName();
+                                       break;
+                               case 'yournotes':
+                                       echo $member->getNotes();
+                                       break;
+                               case 'yoururl':
+                                       echo $member->getURL();
+                                       break;
+                               case 'youremail':
+                                       echo $member->getEmail();
+                                       break;
+                               case 'yourid':
+                                       echo $member->getID();
+                                       break;
+                       }
+               }
+
+       }
+
+       /**
+        * Parse skinvar membermailform
+        */
+       function parse_membermailform($rows = 10, $cols = 40, $desturl = '') {
+               global $member, $CONF, $memberid;
+
+               if ($desturl == '') {
+                       if ($CONF['URLMode'] == 'pathinfo')
+                               $desturl = createMemberLink($memberid);
+                       else
+                               $desturl = $CONF['IndexURL'] . createMemberLink($memberid);
+               }
+
+               $message = postVar('message');
+               $frommail = postVar('frommail');
+
+               $this->formdata = array(
+                       'url' => htmlspecialchars($desturl),
+                       'actionurl' => htmlspecialchars($CONF['ActionURL'],ENT_QUOTES),
+                       'memberid' => $memberid,
+                       'rows' => $rows,
+                       'cols' => $cols,
+                       'message' => htmlspecialchars($message,ENT_QUOTES),
+                       'frommail' => htmlspecialchars($frommail,ENT_QUOTES)
+               );
+               if ($member->isLoggedIn()) {
+                       $this->doForm('membermailform-loggedin');
+               } else if ($CONF['NonmemberMail']) {
+                       $this->doForm('membermailform-notloggedin');
+               } else {
+                       $this->doForm('membermailform-disallowed');
+               }
+
+       }
+       
+       /**
+        * Parse skinvar nextarchive
+        */
+       function parse_nextarchive() {
+               global $archivenext;
+               echo $archivenext;
+       }
+
+       /**
+        * Parse skinvar nextitem
+        * (include itemid of next item)
+        */
+       function parse_nextitem() {
+               global $itemidnext;
+               if (isset($itemidnext)) echo (int)$itemidnext;
+       }
+
+       /**
+        * Parse skinvar nextitemtitle
+        * (include itemtitle of next item)
+        */
+       function parse_nextitemtitle($format = '') {
+               global $itemtitlenext;
+
+               switch ($format) {
+                       case 'xml':
+                               echo stringToXML ($itemtitlenext);
+                               break;
+                       case 'attribute':
+                               echo stringToAttribute ($itemtitlenext);
+                               break;
+                       case 'raw':
+                               echo $itemtitlenext;
+                               break;
+                       default:
+                               echo htmlspecialchars($itemtitlenext,ENT_QUOTES);
+                               break;
+               }
+       }
+
+       /**
+        * Parse skinvar nextlink
+        */
+       function parse_nextlink($linktext = '', $amount = 10) {
+               global $itemidnext, $archivenext, $startpos;
+               if ($this->skintype == 'item')
+                       $this->_itemlink($itemidnext, $linktext);
+               else if ($this->skintype == 'search' || $this->skintype == 'index')
+                       $this->_searchlink($amount, $startpos, 'next', $linktext);
+               else
+                       $this->_archivelink($archivenext, $linktext);
+       }
+
+       /**
+        * Parse skinvar nucleusbutton
+        */
+       function parse_nucleusbutton($imgurl = '',
+                                                                $imgwidth = '85',
+                                                                $imgheight = '31') {
+               global $CONF;
+               if ($imgurl == '') {
+                       $imgurl = $CONF['AdminURL'] . 'nucleus.gif';
+               } else if (PARSER::getProperty('IncludeMode') == 'skindir'){
+                       // when skindit IncludeMode is used: start from skindir
+                       $imgurl = $CONF['SkinsURL'] . PARSER::getProperty('IncludePrefix') . $imgurl;
+               }
+
+               $this->formdata = array(
+                       'imgurl' => $imgurl,
+                       'imgwidth' => $imgwidth,
+                       'imgheight' => $imgheight,
+               );
+               $this->doForm('nucleusbutton');
+       }
+       
+       /**
+        * Parse skinvar otherarchive
+        */     
+       function parse_otherarchive($blogname, $template, $category = '') {
+               global $archive, $manager;
+               sscanf($archive,'%d-%d-%d',$y,$m,$d);
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->_setBlogCategory($b, $category);
+               $this->_preBlogContent('otherachive',$b);
+               $b->showArchive($template, $y, $m, $d);
+               $this->_postBlogContent('otherachive',$b);
+       }
+       
+       /**
+        * Parse skinvar otherarchivedaylist
+        */
+       function parse_otherarchivedaylist($blogname, $template, $category = 'all', $limit = 0) {
+               global $manager;
+               if ($category == 'all') $category = '';
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->_setBlogCategory($b, $category);
+               $this->_preBlogContent('otherarchivelist',$b);
+               $b->showArchiveList($template, 'day', $limit);
+               $this->_postBlogContent('otherarchivelist',$b);
+       }
+       
+       /**
+        * Parse skinvar otherarchivelist
+        */
+       function parse_otherarchivelist($blogname, $template, $category = 'all', $limit = 0) {
+               global $manager;
+               if ($category == 'all') $category = '';
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->_setBlogCategory($b, $category);
+               $this->_preBlogContent('otherarchivelist',$b);
+               $b->showArchiveList($template, 'month', $limit);
+               $this->_postBlogContent('otherarchivelist',$b);
+       }
+
+       /**
+        * Parse skinvar otherarchiveyearlist
+        */
+       function parse_otherarchiveyearlist($blogname, $template, $category = 'all', $limit = 0) {
+               global $manager;
+               if ($category == 'all') $category = '';
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->_setBlogCategory($b, $category);
+               $this->_preBlogContent('otherarchivelist',$b);
+               $b->showArchiveList($template, 'year', $limit);
+               $this->_postBlogContent('otherarchivelist',$b);
+       }
+
+       /**
+        * Parse skinvar otherblog
+        */
+       function parse_otherblog($blogname, $template, $amount = 10, $category = '') {
+               global $manager;
+
+               list($limit, $offset) = sscanf($amount, '%d(%d)');
+
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->_setBlogCategory($b, $category);
+               $this->_preBlogContent('otherblog',$b);
+               $this->amountfound = $b->readLog($template, $limit, $offset);
+               $this->_postBlogContent('otherblog',$b);
+       }
+
+       /**
+        * Parse skinvar othersearchresults
+        */
+       function parse_othersearchresults($blogname, $template, $maxresults = 50) {
+               global $query, $amount, $manager, $startpos;
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->_setBlogCategory($b, '');        // need this to select default category
+               $this->_preBlogContent('othersearchresults',$b);
+               $b->search($query, $template, $amount, $maxresults, $startpos);
+               $this->_postBlogContent('othersearchresults',$b);
+       }
+
+       /**
+         * Executes a plugin skinvar
+         *
+         * @param pluginName name of plugin (without the NP_)
+         *
+         * extra parameters can be added
+         */
+       function parse_plugin($pluginName) {
+               global $manager;
+
+               // should be already tested from the parser (PARSER.php)
+               // only continue when the plugin is really installed
+               /*if (!$manager->pluginInstalled('NP_' . $pluginName))
+                       return;*/
+
+               $plugin =& $manager->getPlugin('NP_' . $pluginName);
+               if (!$plugin) return;
+
+               // get arguments
+               $params = func_get_args();
+
+               // remove plugin name
+               array_shift($params);
+
+               // add skin type on front
+               array_unshift($params, $this->skintype);
+
+               call_user_func_array(array(&$plugin,'doSkinVar'), $params);
+       }
+       
+       /**
+        * Parse skinvar prevarchive
+        */
+       function parse_prevarchive() {
+               global $archiveprev;
+               echo $archiveprev;
+       }
+
+       /**
+        * Parse skinvar preview
+        */
+       function parse_preview($template) {
+               global $blog, $CONF, $manager;
+
+               $template =& $manager->getTemplate($template);
+               $row['body'] = '<span id="prevbody"></span>';
+               $row['title'] = '<span id="prevtitle"></span>';
+               $row['more'] = '<span id="prevmore"></span>';
+               $row['itemlink'] = '';
+               $row['itemid'] = 0; $row['blogid'] = $blog->getID();
+               echo TEMPLATE::fill($template['ITEM_HEADER'],$row);
+               echo TEMPLATE::fill($template['ITEM'],$row);
+               echo TEMPLATE::fill($template['ITEM_FOOTER'],$row);
+       }
+
+       /*
+        * Parse skinvar previtem
+        * (include itemid of prev item)                 
+        */
+       function parse_previtem() {
+               global $itemidprev;
+               if (isset($itemidprev)) echo (int)$itemidprev;
+       }
+
+       /**
+        * Parse skinvar previtemtitle
+        * (include itemtitle of prev item)
+        */
+       function parse_previtemtitle($format = '') {
+               global $itemtitleprev;
+
+               switch ($format) {
+                       case 'xml':
+                               echo stringToXML ($itemtitleprev);
+                               break;
+                       case 'attribute':
+                               echo stringToAttribute ($itemtitleprev);
+                               break;
+                       case 'raw':
+                               echo $itemtitleprev;
+                               break;
+                       default:
+                               echo htmlspecialchars($itemtitleprev,ENT_QUOTES);
+                               break;
+               }
+       }
+
+       /**
+        * Parse skinvar prevlink
+        */
+       function parse_prevlink($linktext = '', $amount = 10) {
+               global $itemidprev, $archiveprev, $startpos;
+
+               if ($this->skintype == 'item')
+                       $this->_itemlink($itemidprev, $linktext);
+               else if ($this->skintype == 'search' || $this->skintype == 'index')
+                       $this->_searchlink($amount, $startpos, 'prev', $linktext);
+               else
+                       $this->_archivelink($archiveprev, $linktext);
+       }
+
+       /**
+        * Parse skinvar query
+        * (includes the search query)   
+        */
+       function parse_query() {
+               global $query;
+               echo htmlspecialchars($query,ENT_QUOTES);
+       }
+       
+       /**
+        * Parse skinvar referer
+        */
+       function parse_referer() {
+               echo htmlspecialchars(serverVar('HTTP_REFERER'),ENT_QUOTES);
+       }
+
+       /**
+        * Parse skinvar searchform
+        */
+       function parse_searchform($blogname = '') {
+               global $CONF, $manager, $maxresults;
+               if ($blogname) {
+                       $blog =& $manager->getBlog(getBlogIDFromName($blogname));
+               } else {
+                       global $blog;
+               }
+               // use default blog when no blog is selected
+               $this->formdata = array(
+                       'id' => $blog?$blog->getID():$CONF['DefaultBlog'],
+                       'query' => htmlspecialchars(getVar('query'),ENT_QUOTES),
+               );
+               $this->doForm('searchform');
+       }
+
+       /**
+        * Parse skinvar searchresults
+        */
+       function parse_searchresults($template, $maxresults = 50 ) {
+               global $blog, $query, $amount, $startpos;
+
+               $this->_setBlogCategory($blog, '');     // need this to select default category
+               $this->_preBlogContent('searchresults',$blog);
+               $this->amountfound = $blog->search($query, $template, $amount, $maxresults, $startpos);
+               $this->_postBlogContent('searchresults',$blog);
+       }
+
+       /**
+        * Parse skinvar self
+        */
+       function parse_self() {
+               global $CONF;
+               echo $CONF['Self'];
+       }
+
+       /**
+        * Parse skinvar sitevar
+        * (include a sitevar)   
+        */
+       function parse_sitevar($which) {
+               global $CONF;
+               switch($which) {
+                       case 'url':
+                               echo $CONF['IndexURL'];
+                               break;
+                       case 'name':
+                               echo $CONF['SiteName'];
+                               break;
+                       case 'admin':
+                               echo $CONF['AdminEmail'];
+                               break;
+                       case 'adminurl':
+                               echo $CONF['AdminURL'];
+               }
+       }
+
+       /**
+        * Parse skinname
+        */
+       function parse_skinname() {
+               echo $this->skin->getName();
+       }
+       
+       /**
+        * Parse skintype (experimental)
+        */
+       function parse_skintype() {
+               echo $this->skintype;
+       }
+
+       /**
+        * Parse text
+        */
+       function parse_text($which) {
+               // constant($which) only available from 4.0.4 :(
+               if (defined($which)) {
+                       eval("echo $which;");
+               }
+       }
+       
+       /**
+        * Parse ticket
+        */
+       function parse_ticket() {
+               global $manager;
+               $manager->addTicketHidden();
+       }
+
+       /**
+        *      Parse skinvar todaylink
+        *      A link to the today page (depending on selected blog, etc...)
+        */
+       function parse_todaylink($linktext = '') {
+               global $blog, $CONF;
+               if ($blog)
+                       echo $this->_link(createBlogidLink($blog->getID(),$this->linkparams), $linktext);
+               else
+                       echo $this->_link($CONF['SiteUrl'], $linktext);
+       }
+
+       /**
+        * Parse vars
+        * When commentform is not used, to include a hidden field with itemid   
+        */
+       function parse_vars() {
+               global $itemid;
+               echo '<input type="hidden" name="itemid" value="'.$itemid.'" />';
+       }
+
+       /**
+        * Parse skinvar version
+        * (include nucleus versionnumber)       
+        */
+       function parse_version() {
+               global $nucleus;
+               echo 'Nucleus CMS ' . $nucleus['version'];
+       }
+
+       /**
+        * Parse skinvar sticky
+        */
+       function parse_sticky($itemnumber = 0, $template = '') {
+               global $manager;
+               
+               $itemnumber = intval($itemnumber);
+               $itemarray = array($itemnumber);
+
+               $b =& $manager->getBlog(getBlogIDFromItemID($itemnumber));
+               $this->_preBlogContent('sticky',$b);
+               $this->amountfound = $b->readLogFromList($itemarray, $template);
+               $this->_postBlogContent('sticky',$b);
+       }
+
+
+}
+?>
diff --git a/utf8/nucleus/libs/ADMIN.php b/utf8/nucleus/libs/ADMIN.php
new file mode 100755 (executable)
index 0000000..0ea39ce
--- /dev/null
@@ -0,0 +1,6488 @@
+<?php\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+/**\r
+ * The code for the Nucleus admin area\r
+ *\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ * @version $NucleusJP: ADMIN.php,v 1.21.2.4 2007/10/30 19:04:24 kmorimatsu Exp $\r
+ */\r
+\r
+if ( !function_exists('requestVar') ) exit;\r
+require_once dirname(__FILE__) . '/showlist.php';\r
+\r
+/**\r
+ * Builds the admin area and executes admin actions\r
+ */\r
+class ADMIN {\r
+\r
+       /**\r
+        * @var string $action action currently being executed ($action=xxxx -> action_xxxx method)\r
+        */\r
+       var $action;\r
+\r
+       /**\r
+        * Class constructor\r
+        */\r
+       function ADMIN() {\r
+\r
+       }\r
+\r
+       /**\r
+        * Executes an action\r
+        *\r
+        * @param string $action action to be performed\r
+        */\r
+       function action($action) {\r
+               global $CONF, $manager;\r
+\r
+               // list of action aliases\r
+               $alias = array(\r
+                       'login' => 'overview',\r
+                       '' => 'overview'\r
+               );\r
+\r
+               if (isset($alias[$action]))\r
+                       $action = $alias[$action];\r
+\r
+               $methodName = 'action_' . $action;\r
+\r
+               $this->action = strtolower($action);\r
+\r
+               // check ticket. All actions need a ticket, unless they are considered to be safe (a safe action\r
+               // is an action that requires user interaction before something is actually done)\r
+               // all safe actions are in this array:\r
+               $aActionsNotToCheck = array(\r
+                       'showlogin',\r
+                       'login',\r
+                       'overview',\r
+                       'itemlist',\r
+                       'blogcommentlist',\r
+                       'bookmarklet',\r
+                       'blogsettings',\r
+                       'banlist',\r
+                       'deleteblog',\r
+                       'editmembersettings',\r
+                       'browseownitems',\r
+                       'browseowncomments',\r
+                       'createitem',\r
+                       'itemedit',\r
+                       'itemmove',\r
+                       'categoryedit',\r
+                       'categorydelete',\r
+                       'manage',\r
+                       'actionlog',\r
+                       'settingsedit',\r
+                       'backupoverview',\r
+                       'pluginlist',\r
+                       'createnewlog',\r
+                       'usermanagement',\r
+                       'skinoverview',\r
+                       'templateoverview',\r
+                       'skinieoverview',\r
+                       'itemcommentlist',\r
+                       'commentedit',\r
+                       'commentdelete',\r
+                       'banlistnewfromitem',\r
+                       'banlistdelete',\r
+                       'itemdelete',\r
+                       'manageteam',\r
+                       'teamdelete',\r
+                       'banlistnew',\r
+                       'memberedit',\r
+                       'memberdelete',\r
+                       'pluginhelp',\r
+                       'pluginoptions',\r
+                       'plugindelete',\r
+                       'skinedittype',\r
+                       'skinremovetype',\r
+                       'skindelete',\r
+                       'skinedit',\r
+                       'templateedit',\r
+                       'templatedelete',\r
+                       'activate',\r
+                       'systemoverview'\r
+               );\r
+/*\r
+               // the rest of the actions needs to be checked\r
+               $aActionsToCheck = array('additem', 'itemupdate', 'itemmoveto', 'categoryupdate', 'categorydeleteconfirm', 'itemdeleteconfirm', 'commentdeleteconfirm', 'teamdeleteconfirm', 'memberdeleteconfirm', 'templatedeleteconfirm', 'skindeleteconfirm', 'banlistdeleteconfirm', 'plugindeleteconfirm', 'batchitem', 'batchcomment', 'batchmember', 'batchcategory', 'batchteam', 'regfile', 'commentupdate', 'banlistadd', 'changemembersettings', 'clearactionlog', 'settingsupdate', 'blogsettingsupdate', 'categorynew', 'teamchangeadmin', 'teamaddmember', 'memberadd', 'addnewlog', 'addnewlog2', 'backupcreate', 'backuprestore', 'pluginup', 'plugindown', 'pluginupdate', 'pluginadd', 'pluginoptionsupdate', 'skinupdate', 'skinclone', 'skineditgeneral', 'templateclone', 'templatenew', 'templateupdate', 'skinieimport', 'skinieexport', 'skiniedoimport', 'skinnew', 'deleteblogconfirm', 'activatesetpwd');\r
+*/\r
+               if (!in_array($this->action, $aActionsNotToCheck))\r
+               {\r
+                       if (!$manager->checkTicket())\r
+                               $this->error(_ERROR_BADTICKET);\r
+               }\r
+\r
+               if (method_exists($this, $methodName))\r
+                       call_user_func(array(&$this, $methodName));\r
+               else\r
+                       $this->error(_BADACTION . htmlspecialchars(" ($action)"));\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_showlogin() {\r
+               global $error;\r
+               $this->action_login($error);\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_login($msg = '', $passvars = 1) {\r
+               global $member;\r
+\r
+               // skip to overview when allowed\r
+               if ($member->isLoggedIn() && $member->canLogin()) {\r
+                       $this->action_overview();\r
+                       exit;\r
+               }\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<h2>', _LOGIN ,'</h2>';\r
+               if ($msg) echo _MESSAGE , ': ', htmlspecialchars($msg);\r
+               ?>\r
+\r
+               <form action="index.php" method="post"><p>\r
+               <?php echo _LOGIN_NAME; ?> <br /><input name="login"  tabindex="10" />\r
+               <br />\r
+               <?php echo _LOGIN_PASSWORD; ?> <br /><input name="password"  tabindex="20" type="password" />\r
+               <br />\r
+               <input name="action" value="login" type="hidden" />\r
+               <br />\r
+               <input type="submit" value="<?php echo _LOGIN?>" tabindex="30" />\r
+               <br />\r
+               <small>\r
+                       <input type="checkbox" value="1" name="shared" tabindex="40" id="shared" /><label for="shared"><?php echo _LOGIN_SHARED?></label>\r
+                       <br /><a href="forgotpassword.html"><?php echo _LOGIN_FORGOT?></a>\r
+               </small>\r
+               <?php              // pass through vars\r
+\r
+                       $oldaction = postVar('oldaction');\r
+                       if (  ($oldaction != 'logout')  && ($oldaction != 'login')  && $passvars ) {\r
+                               passRequestVars();\r
+                       }\r
+\r
+\r
+               ?>\r
+               </p></form>\r
+               <?php      $this->pagefoot();\r
+       }\r
+\r
+\r
+       /**\r
+        * provides a screen with the overview of the actions available\r
+        * @todo document parameter\r
+        */\r
+       function action_overview($msg = '') {\r
+               global $member;\r
+\r
+               $this->pagehead();\r
+\r
+               if ($msg)\r
+                       echo _MESSAGE , ': ', $msg;\r
+\r
+               /* ---- add items ---- */\r
+               echo '<h2>' . _OVERVIEW_YRBLOGS . '</h2>';\r
+\r
+               $showAll = requestVar('showall');\r
+\r
+               if (($member->isAdmin()) && ($showAll == 'yes')) {\r
+                       // Super-Admins have access to all blogs! (no add item support though)\r
+                       $query =  'SELECT bnumber, bname, 1 as tadmin, burl, bshortname'\r
+                                  . ' FROM ' . sql_table('blog')\r
+                                  . ' ORDER BY bname';\r
+               } else {\r
+                       $query =  'SELECT bnumber, bname, tadmin, burl, bshortname'\r
+                                  . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')\r
+                                  . ' WHERE tblog=bnumber and tmember=' . $member->getID()\r
+                                  . ' ORDER BY bname';\r
+               }\r
+               $template['content'] = 'bloglist';\r
+               $template['superadmin'] = $member->isAdmin();\r
+               $amount = showlist($query,'table',$template);\r
+\r
+               if (($showAll != 'yes') && ($member->isAdmin())) {\r
+                       $total = quickQuery('SELECT COUNT(*) as result FROM ' . sql_table('blog'));\r
+                       if ($total > $amount)\r
+                               echo '<p><a href="index.php?action=overview&amp;showall=yes">' . _OVERVIEW_SHOWALL . '</a></p>';\r
+               }\r
+\r
+               if ($amount == 0)\r
+                       echo _OVERVIEW_NOBLOGS;\r
+\r
+               if ($amount != 0) {\r
+                       echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';\r
+                       $query =  'SELECT ititle, inumber, bshortname'\r
+                                  . ' FROM ' . sql_table('item'). ', ' . sql_table('blog')\r
+                                  . ' WHERE iauthor='.$member->getID().' and iblog=bnumber and idraft=1';\r
+                       $template['content'] = 'draftlist';\r
+                       $amountdrafts = showlist($query, 'table', $template);\r
+                       if ($amountdrafts == 0)\r
+                               echo _OVERVIEW_NODRAFTS;\r
+               }\r
+\r
+               /* ---- user settings ---- */\r
+               echo '<h2>' . _OVERVIEW_YRSETTINGS . '</h2>';\r
+               echo '<ul>';\r
+               echo '<li><a href="index.php?action=editmembersettings">' . _OVERVIEW_EDITSETTINGS. '</a></li>';\r
+               echo '<li><a href="index.php?action=browseownitems">' . _OVERVIEW_BROWSEITEMS.'</a></li>';\r
+               echo '<li><a href="index.php?action=browseowncomments">'._OVERVIEW_BROWSECOMM.'</a></li>';\r
+               echo '</ul>';\r
+\r
+               /* ---- general settings ---- */\r
+               if ($member->isAdmin()) {\r
+                       echo '<h2>' . _OVERVIEW_MANAGEMENT. '</h2>';\r
+                       echo '<ul>';\r
+                       echo '<li><a href="index.php?action=manage">',_OVERVIEW_MANAGE,'</a></li>';\r
+                       echo '</ul>';\r
+               }\r
+\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * Returns a link to a weblog\r
+        * @param object BLOG\r
+        */\r
+       function bloglink(&$blog) {\r
+               return '<a href="'.htmlspecialchars($blog->getURL()).'" title="'._BLOGLIST_TT_VISIT.'">'. htmlspecialchars( $blog->getName() ) .'</a>';\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_manage($msg = '') {\r
+               global $member;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
+\r
+               if ($msg)\r
+                       echo '<p>' , _MESSAGE , ': ', $msg , '</p>';\r
+\r
+\r
+               echo '<h2>' . _MANAGE_GENERAL. '</h2>';\r
+\r
+               echo '<ul>';\r
+               echo '<li><a href="index.php?action=createnewlog">'._OVERVIEW_NEWLOG.'</a></li>';\r
+               echo '<li><a href="index.php?action=settingsedit">'._OVERVIEW_SETTINGS.'</a></li>';\r
+               echo '<li><a href="index.php?action=usermanagement">'._OVERVIEW_MEMBERS.'</a></li>';\r
+               echo '<li><a href="index.php?action=actionlog">'._OVERVIEW_VIEWLOG.'</a></li>';\r
+               echo '</ul>';\r
+\r
+               echo '<h2>' . _MANAGE_SKINS . '</h2>';\r
+               echo '<ul>';\r
+               echo '<li><a href="index.php?action=skinoverview">'._OVERVIEW_SKINS.'</a></li>';\r
+               echo '<li><a href="index.php?action=templateoverview">'._OVERVIEW_TEMPLATES.'</a></li>';\r
+               echo '<li><a href="index.php?action=skinieoverview">'._OVERVIEW_SKINIMPORT.'</a></li>';\r
+               echo '</ul>';\r
+\r
+               echo '<h2>' . _MANAGE_EXTRA . '</h2>';\r
+               echo '<ul>';\r
+               echo '<li><a href="index.php?action=backupoverview">'._OVERVIEW_BACKUP.'</a></li>';\r
+               echo '<li><a href="index.php?action=pluginlist">'._OVERVIEW_PLUGINS.'</a></li>';\r
+               echo '</ul>';\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_itemlist($blogid = '') {\r
+               global $member, $manager, $CONF;\r
+\r
+               if ($blogid == '')\r
+                       $blogid = intRequestVar('blogid');\r
+\r
+               $member->teamRights($blogid) or $member->isAdmin() or $this->disallow();\r
+\r
+               $this->pagehead();\r
+               $blog =& $manager->getBlog($blogid);\r
+\r
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
+               echo '<h2>' . _ITEMLIST_BLOG . ' ' . $this->bloglink($blog) . '</h2>';\r
+\r
+               // start index\r
+               if (postVar('start'))\r
+                       $start = intPostVar('start');\r
+               else\r
+                       $start = 0;\r
+\r
+               if ($start == 0)\r
+                       echo '<p><a href="index.php?action=createitem&amp;blogid='.$blogid.'">',_ITEMLIST_ADDNEW,'</a></p>';\r
+\r
+               // amount of items to show\r
+               if (postVar('amount'))\r
+                       $amount = intPostVar('amount');\r
+               else {\r
+                       $amount = intval($CONF['DefaultListSize']);\r
+                       if ($amount < 1)\r
+                               $amount = 10;\r
+               }\r
+\r
+               $search = postVar('search');    // search through items\r
+\r
+               $query =  'SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime, bnumber, catid'\r
+                          . ' FROM ' . sql_table('item') . ', ' . sql_table('blog') . ', ' . sql_table('member') . ', ' . sql_table('category')\r
+                          . ' WHERE iblog=bnumber and iauthor=mnumber and icat=catid and iblog=' . $blogid;\r
+\r
+               if ($search)\r
+                       $query .= ' and ((ititle LIKE "%' . addslashes($search) . '%") or (ibody LIKE "%' . addslashes($search) . '%") or (imore LIKE "%' . addslashes($search) . '%"))';\r
+\r
+               // non-blog-admins can only edit/delete their own items\r
+               if (!$member->blogAdminRights($blogid))\r
+                       $query .= ' and iauthor=' . $member->getID();\r
+\r
+\r
+               $query .= ' ORDER BY itime DESC'\r
+                               . " LIMIT $start,$amount";\r
+\r
+               $template['content'] = 'itemlist';\r
+               $template['now'] = $blog->getCorrectTime(time());\r
+\r
+               $manager->loadClass("ENCAPSULATE");\r
+               $navList =& new NAVLIST('itemlist', $start, $amount, 0, 1000, $blogid, $search, 0);\r
+               $navList->showBatchList('item',$query,'table',$template);\r
+\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_batchitem() {\r
+               global $member, $manager;\r
+\r
+               // check if logged in\r
+               $member->isLoggedIn() or $this->disallow();\r
+\r
+               // more precise check will be done for each performed operation\r
+\r
+               // get array of itemids from request\r
+               $selected = requestIntArray('batch');\r
+               $action = requestVar('batchaction');\r
+\r
+               // Show error when no items were selected\r
+               if (!is_array($selected) || sizeof($selected) == 0)\r
+                       $this->error(_BATCH_NOSELECTION);\r
+\r
+               // On move: when no destination blog/category chosen, show choice now\r
+               $destCatid = intRequestVar('destcatid');\r
+               if (($action == 'move') && (!$manager->existsCategory($destCatid)))\r
+                       $this->batchMoveSelectDestination('item',$selected);\r
+\r
+               // On delete: check if confirmation has been given\r
+               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))\r
+                       $this->batchAskDeleteConfirmation('item',$selected);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<a href="index.php?action=overview">(',_BACKHOME,')</a>';\r
+               echo '<h2>',_BATCH_ITEMS,'</h2>';\r
+               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';\r
+               echo '<ul>';\r
+\r
+\r
+               // walk over all itemids and perform action\r
+               foreach ($selected as $itemid) {\r
+                       $itemid = intval($itemid);\r
+                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONITEM,' <b>', $itemid, '</b>...';\r
+\r
+                       // perform action, display errors if needed\r
+                       switch($action) {\r
+                               case 'delete':\r
+                                       $error = $this->deleteOneItem($itemid);\r
+                                       break;\r
+                               case 'move':\r
+                                       $error = $this->moveOneItem($itemid, $destCatid);\r
+                                       break;\r
+                               default:\r
+                                       $error = _BATCH_UNKNOWN . htmlspecialchars($action);\r
+                       }\r
+\r
+                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';\r
+                       echo '</li>';\r
+               }\r
+\r
+               echo '</ul>';\r
+               echo '<b>',_BATCH_DONE,'</b>';\r
+\r
+               $this->pagefoot();\r
+\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_batchcomment() {\r
+               global $member;\r
+\r
+               // check if logged in\r
+               $member->isLoggedIn() or $this->disallow();\r
+\r
+               // more precise check will be done for each performed operation\r
+\r
+               // get array of itemids from request\r
+               $selected = requestIntArray('batch');\r
+               $action = requestVar('batchaction');\r
+\r
+               // Show error when no items were selected\r
+               if (!is_array($selected) || sizeof($selected) == 0)\r
+                       $this->error(_BATCH_NOSELECTION);\r
+\r
+               // On delete: check if confirmation has been given\r
+               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))\r
+                       $this->batchAskDeleteConfirmation('comment',$selected);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<a href="index.php?action=overview">(',_BACKHOME,')</a>';\r
+               echo '<h2>',_BATCH_COMMENTS,'</h2>';\r
+               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';\r
+               echo '<ul>';\r
+\r
+               // walk over all itemids and perform action\r
+               foreach ($selected as $commentid) {\r
+                       $commentid = intval($commentid);\r
+                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONCOMMENT,' <b>', $commentid, '</b>...';\r
+\r
+                       // perform action, display errors if needed\r
+                       switch($action) {\r
+                               case 'delete':\r
+                                       $error = $this->deleteOneComment($commentid);\r
+                                       break;\r
+                               default:\r
+                                       $error = _BATCH_UNKNOWN . htmlspecialchars($action);\r
+                       }\r
+\r
+                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';\r
+                       echo '</li>';\r
+               }\r
+\r
+               echo '</ul>';\r
+               echo '<b>',_BATCH_DONE,'</b>';\r
+\r
+               $this->pagefoot();\r
+\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_batchmember() {\r
+               global $member;\r
+\r
+               // check if logged in and admin\r
+               ($member->isLoggedIn() && $member->isAdmin()) or $this->disallow();\r
+\r
+               // get array of itemids from request\r
+               $selected = requestIntArray('batch');\r
+               $action = requestVar('batchaction');\r
+\r
+               // Show error when no members selected\r
+               if (!is_array($selected) || sizeof($selected) == 0)\r
+                       $this->error(_BATCH_NOSELECTION);\r
+\r
+               // On delete: check if confirmation has been given\r
+               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))\r
+                       $this->batchAskDeleteConfirmation('member',$selected);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<a href="index.php?action=usermanagement">(',_MEMBERS_BACKTOOVERVIEW,')</a>';\r
+               echo '<h2>',_BATCH_MEMBERS,'</h2>';\r
+               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';\r
+               echo '<ul>';\r
+\r
+               // walk over all itemids and perform action\r
+               foreach ($selected as $memberid) {\r
+                       $memberid = intval($memberid);\r
+                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONMEMBER,' <b>', $memberid, '</b>...';\r
+\r
+                       // perform action, display errors if needed\r
+                       switch($action) {\r
+                               case 'delete':\r
+                                       $error = $this->deleteOneMember($memberid);\r
+                                       break;\r
+                               case 'setadmin':\r
+                                       // always succeeds\r
+                                       sql_query('UPDATE ' . sql_table('member') . ' SET madmin=1 WHERE mnumber='.$memberid);\r
+                                       $error = '';\r
+                                       break;\r
+                               case 'unsetadmin':\r
+                                       // there should always remain at least one super-admin\r
+                                       $r = sql_query('SELECT * FROM '.sql_table('member'). ' WHERE madmin=1 and mcanlogin=1');\r
+                                       if (sql_num_rows($r) < 2)\r
+                                               $error = _ERROR_ATLEASTONEADMIN;\r
+                                       else\r
+                                               sql_query('UPDATE ' . sql_table('member') .' SET madmin=0 WHERE mnumber='.$memberid);\r
+                                       break;\r
+                               default:\r
+                                       $error = _BATCH_UNKNOWN . htmlspecialchars($action);\r
+                       }\r
+\r
+                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';\r
+                       echo '</li>';\r
+               }\r
+\r
+               echo '</ul>';\r
+               echo '<b>',_BATCH_DONE,'</b>';\r
+\r
+               $this->pagefoot();\r
+\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_batchteam() {\r
+               global $member;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               // check if logged in and admin\r
+               ($member->isLoggedIn() && $member->blogAdminRights($blogid)) or $this->disallow();\r
+\r
+               // get array of itemids from request\r
+               $selected = requestIntArray('batch');\r
+               $action = requestVar('batchaction');\r
+\r
+               // Show error when no members selected\r
+               if (!is_array($selected) || sizeof($selected) == 0)\r
+                       $this->error(_BATCH_NOSELECTION);\r
+\r
+               // On delete: check if confirmation has been given\r
+               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))\r
+                       $this->batchAskDeleteConfirmation('team',$selected);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=manageteam&amp;blogid=',$blogid,'">(',_BACK,')</a></p>';\r
+\r
+               echo '<h2>',_BATCH_TEAM,'</h2>';\r
+               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';\r
+               echo '<ul>';\r
+\r
+               // walk over all itemids and perform action\r
+               foreach ($selected as $memberid) {\r
+                       $memberid = intval($memberid);\r
+                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONTEAM,' <b>', $memberid, '</b>...';\r
+\r
+                       // perform action, display errors if needed\r
+                       switch($action) {\r
+                               case 'delete':\r
+                                       $error = $this->deleteOneTeamMember($blogid, $memberid);\r
+                                       break;\r
+                               case 'setadmin':\r
+                                       // always succeeds\r
+                                       sql_query('UPDATE '.sql_table('team').' SET tadmin=1 WHERE tblog='.$blogid.' and tmember='.$memberid);\r
+                                       $error = '';\r
+                                       break;\r
+                               case 'unsetadmin':\r
+                                       // there should always remain at least one admin\r
+                                       $r = sql_query('SELECT * FROM '.sql_table('team').' WHERE tadmin=1 and tblog='.$blogid);\r
+                                       if (sql_num_rows($r) < 2)\r
+                                               $error = _ERROR_ATLEASTONEBLOGADMIN;\r
+                                       else\r
+                                               sql_query('UPDATE '.sql_table('team').' SET tadmin=0 WHERE tblog='.$blogid.' and tmember='.$memberid);\r
+                                       break;\r
+                               default:\r
+                                       $error = _BATCH_UNKNOWN . htmlspecialchars($action);\r
+                       }\r
+\r
+                       echo '<b>',($error ? $error : _BATCH_SUCCESS),'</b>';\r
+                       echo '</li>';\r
+               }\r
+\r
+               echo '</ul>';\r
+               echo '<b>',_BATCH_DONE,'</b>';\r
+\r
+               $this->pagefoot();\r
+\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_batchcategory() {\r
+               global $member, $manager;\r
+\r
+               // check if logged in\r
+               $member->isLoggedIn() or $this->disallow();\r
+\r
+               // more precise check will be done for each performed operation\r
+\r
+               // get array of itemids from request\r
+               $selected = requestIntArray('batch');\r
+               $action = requestVar('batchaction');\r
+\r
+               // Show error when no items were selected\r
+               if (!is_array($selected) || sizeof($selected) == 0)\r
+                       $this->error(_BATCH_NOSELECTION);\r
+\r
+               // On move: when no destination blog chosen, show choice now\r
+               $destBlogId = intRequestVar('destblogid');\r
+               if (($action == 'move') && (!$manager->existsBlogID($destBlogId)))\r
+                       $this->batchMoveCategorySelectDestination('category',$selected);\r
+\r
+               // On delete: check if confirmation has been given\r
+               if (($action == 'delete') && (requestVar('confirmation') != 'yes'))\r
+                       $this->batchAskDeleteConfirmation('category',$selected);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<a href="index.php?action=overview">(',_BACKHOME,')</a>';\r
+               echo '<h2>',BATCH_CATEGORIES,'</h2>';\r
+               echo '<p>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b></p>';\r
+               echo '<ul>';\r
+\r
+               // walk over all itemids and perform action\r
+               foreach ($selected as $catid) {\r
+                       $catid = intval($catid);\r
+                       echo '<li>',_BATCH_EXECUTING,' <b>',htmlspecialchars($action),'</b> ',_BATCH_ONCATEGORY,' <b>', $catid, '</b>...';\r
+\r
+                       // perform action, display errors if needed\r
+                       switch($action) {\r
+                               case 'delete':\r
+                                       $error = $this->deleteOneCategory($catid);\r
+                                       break;\r
+                               case 'move':\r
+                                       $error = $this->moveOneCategory($catid, $destBlogId);\r
+                                       break;\r
+                               default:\r
+                                       $error = _BATCH_UNKNOWN . htmlspecialchars($action);\r
+                       }\r
+\r
+                       echo '<b>',($error ? _ERROR . ': '.$error : _BATCH_SUCCESS),'</b>';\r
+                       echo '</li>';\r
+               }\r
+\r
+               echo '</ul>';\r
+               echo '<b>',_BATCH_DONE,'</b>';\r
+\r
+               $this->pagefoot();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function batchMoveSelectDestination($type, $ids) {\r
+               global $manager;\r
+               $this->pagehead();\r
+               ?>\r
+               <h2><?php echo _MOVE_TITLE?></h2>\r
+               <form method="post" action="index.php"><div>\r
+\r
+                       <input type="hidden" name="action" value="batch<?php echo $type?>" />\r
+                       <input type="hidden" name="batchaction" value="move" />\r
+                       <?php\r
+                               $manager->addTicketHidden();\r
+\r
+                               // insert selected item numbers\r
+                               $idx = 0;\r
+                               foreach ($ids as $id)\r
+                                       echo '<input type="hidden" name="batch[',($idx++),']" value="',intval($id),'" />';\r
+\r
+                               // show blog/category selection list\r
+                               $this->selectBlogCategory('destcatid');\r
+\r
+                       ?>\r
+\r
+\r
+                       <input type="submit" value="<?php echo _MOVE_BTN?>" onclick="return checkSubmit();" />\r
+\r
+               </div></form>\r
+               <?php      $this->pagefoot();\r
+               exit;\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function batchMoveCategorySelectDestination($type, $ids) {\r
+               global $manager;\r
+               $this->pagehead();\r
+               ?>\r
+               <h2><?php echo _MOVECAT_TITLE?></h2>\r
+               <form method="post" action="index.php"><div>\r
+\r
+                       <input type="hidden" name="action" value="batch<?php echo $type?>" />\r
+                       <input type="hidden" name="batchaction" value="move" />\r
+                       <?php\r
+                               $manager->addTicketHidden();\r
+\r
+                               // insert selected item numbers\r
+                               $idx = 0;\r
+                               foreach ($ids as $id)\r
+                                       echo '<input type="hidden" name="batch[',($idx++),']" value="',intval($id),'" />';\r
+\r
+                               // show blog/category selection list\r
+                               $this->selectBlog('destblogid');\r
+\r
+                       ?>\r
+\r
+\r
+                       <input type="submit" value="<?php echo _MOVECAT_BTN?>" onclick="return checkSubmit();" />\r
+\r
+               </div></form>\r
+               <?php      $this->pagefoot();\r
+               exit;\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function batchAskDeleteConfirmation($type, $ids) {\r
+               global $manager;\r
+\r
+               $this->pagehead();\r
+               ?>\r
+               <h2><?php echo _BATCH_DELETE_CONFIRM?></h2>\r
+               <form method="post" action="index.php"><div>\r
+\r
+                       <input type="hidden" name="action" value="batch<?php echo $type?>" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+                       <input type="hidden" name="batchaction" value="delete" />\r
+                       <input type="hidden" name="confirmation" value="yes" />\r
+                       <?php                      // insert selected item numbers\r
+                               $idx = 0;\r
+                               foreach ($ids as $id)\r
+                                       echo '<input type="hidden" name="batch[',($idx++),']" value="',intval($id),'" />';\r
+\r
+                               // add hidden vars for team & comment\r
+                               if ($type == 'team')\r
+                               {\r
+                                       echo '<input type="hidden" name="blogid" value="',intRequestVar('blogid'),'" />';\r
+                               }\r
+                               if ($type == 'comment')\r
+                               {\r
+                                       echo '<input type="hidden" name="itemid" value="',intRequestVar('itemid'),'" />';\r
+                               }\r
+\r
+                       ?>\r
+\r
+                       <input type="submit" value="<?php echo _BATCH_DELETE_CONFIRM_BTN?>" onclick="return checkSubmit();" />\r
+\r
+               </div></form>\r
+               <?php      $this->pagefoot();\r
+               exit;\r
+       }\r
+\r
+\r
+       /**\r
+        * Inserts a HTML select element with choices for all categories to which the current\r
+        * member has access\r
+        * @see function selectBlog\r
+        */\r
+       function selectBlogCategory($name, $selected = 0, $tabindex = 0, $showNewCat = 0, $iForcedBlogInclude = -1) {\r
+               ADMIN::selectBlog($name, 'category', $selected, $tabindex, $showNewCat, $iForcedBlogInclude);\r
+       }\r
+\r
+       /**\r
+        * Inserts a HTML select element with choices for all blogs to which the user has access\r
+        *        mode = 'blog' => shows blognames and values are blogids\r
+        *        mode = 'category' => show category names and values are catids\r
+        *\r
+        * @param $iForcedBlogInclude\r
+        *        ID of a blog that always needs to be included, without checking if the\r
+        *        member is on the blog team (-1 = none)\r
+        * @todo document parameters\r
+        */\r
+       function selectBlog($name, $mode='blog', $selected = 0, $tabindex = 0, $showNewCat = 0, $iForcedBlogInclude = -1) {\r
+               global $member, $CONF;\r
+\r
+               // 0. get IDs of blogs to which member can post items (+ forced blog)\r
+               $aBlogIds = array();\r
+               if ($iForcedBlogInclude != -1)\r
+                       $aBlogIds[] = intval($iForcedBlogInclude);\r
+\r
+               if (($member->isAdmin()) && ($CONF['ShowAllBlogs']))\r
+                       $queryBlogs =  'SELECT bnumber FROM '.sql_table('blog').' ORDER BY bname';\r
+               else\r
+                       $queryBlogs =  'SELECT bnumber FROM '.sql_table('blog').', '.sql_table('team').' WHERE tblog=bnumber and tmember=' . $member->getID();\r
+               $rblogids = sql_query($queryBlogs);\r
+               while ($o = sql_fetch_object($rblogids))\r
+                       if ($o->bnumber != $iForcedBlogInclude)\r
+                               $aBlogIds[] = intval($o->bnumber);\r
+\r
+               if (count($aBlogIds) == 0)\r
+                       return;\r
+\r
+               echo '<select name="',$name,'" tabindex="',$tabindex,'">';\r
+\r
+               // 1. select blogs (we'll create optiongroups)\r
+               // (only select those blogs that have the user on the team)\r
+               $queryBlogs =  'SELECT bnumber, bname FROM '.sql_table('blog').' WHERE bnumber in ('.implode(',',$aBlogIds).') ORDER BY bname';\r
+               $blogs = sql_query($queryBlogs);\r
+               if ($mode == 'category') {\r
+                       if (sql_num_rows($blogs) > 1)\r
+                               $multipleBlogs = 1;\r
+\r
+                       while ($oBlog = sql_fetch_object($blogs)) {\r
+                               if ($multipleBlogs)\r
+                                       echo '<optgroup label="',htmlspecialchars($oBlog->bname),'">';\r
+\r
+                               // show selection to create new category when allowed/wanted\r
+                               if ($showNewCat) {\r
+                                       // check if allowed to do so\r
+                                       if ($member->blogAdminRights($oBlog->bnumber))\r
+                                               echo '<option value="newcat-',$oBlog->bnumber,'">',_ADD_NEWCAT,'</option>';\r
+                               }\r
+\r
+                               // 2. for each category in that blog\r
+                               $categories = sql_query('SELECT cname, catid FROM '.sql_table('category').' WHERE cblog=' . $oBlog->bnumber . ' ORDER BY cname ASC');\r
+                               while ($oCat = sql_fetch_object($categories)) {\r
+                                       if ($oCat->catid == $selected)\r
+                                               $selectText = ' selected="selected" ';\r
+                                       else\r
+                                               $selectText = '';\r
+                                       echo '<option value="',$oCat->catid,'" ', $selectText,'>',htmlspecialchars($oCat->cname),'</option>';\r
+                               }\r
+\r
+                               if ($multipleBlogs)\r
+                                       echo '</optgroup>';\r
+                       }\r
+               } else {\r
+                       // blog mode\r
+                       while ($oBlog = sql_fetch_object($blogs)) {\r
+                               echo '<option value="',$oBlog->bnumber,'"';\r
+                               if ($oBlog->bnumber == $selected)\r
+                                       echo ' selected="selected"';\r
+                               echo'>',htmlspecialchars($oBlog->bname),'</option>';\r
+                       }\r
+               }\r
+               echo '</select>';\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_browseownitems() {\r
+               global $member, $manager, $CONF;\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
+               echo '<h2>' . _ITEMLIST_YOUR. '</h2>';\r
+\r
+               // start index\r
+               if (postVar('start'))\r
+                       $start = intPostVar('start');\r
+               else\r
+                       $start = 0;\r
+\r
+               // amount of items to show\r
+               if (postVar('amount'))\r
+                       $amount = intPostVar('amount');\r
+               else {\r
+                       $amount = intval($CONF['DefaultListSize']);\r
+                       if ($amount < 1)\r
+                               $amount = 10;\r
+               }\r
+\r
+               $search = postVar('search');    // search through items\r
+\r
+               $query =  'SELECT bshortname, cname, mname, ititle, ibody, idraft, inumber, itime'\r
+                          . ' FROM '.sql_table('item').', '.sql_table('blog') . ', '.sql_table('member') . ', '.sql_table('category')\r
+                          . ' WHERE iauthor='. $member->getID() .' and iauthor=mnumber and iblog=bnumber and icat=catid';\r
+\r
+               if ($search)\r
+                       $query .= ' and ((ititle LIKE "%' . addslashes($search) . '%") or (ibody LIKE "%' . addslashes($search) . '%") or (imore LIKE "%' . addslashes($search) . '%"))';\r
+\r
+               $query .= ' ORDER BY itime DESC'\r
+                               . " LIMIT $start,$amount";\r
+\r
+               $template['content'] = 'itemlist';\r
+               $template['now'] = time();\r
+\r
+               $manager->loadClass("ENCAPSULATE");\r
+               $navList =& new NAVLIST('browseownitems', $start, $amount, 0, 1000, /*$blogid*/ 0, $search, 0);\r
+               $navList->showBatchList('item',$query,'table',$template);\r
+\r
+               $this->pagefoot();\r
+\r
+       }\r
+\r
+       /**\r
+        * Show all the comments for a given item\r
+        * @param int $itemid\r
+        */\r
+       function action_itemcommentlist($itemid = '') {\r
+               global $member, $manager, $CONF;\r
+\r
+               if ($itemid == '')\r
+                       $itemid = intRequestVar('itemid');\r
+\r
+               // only allow if user is allowed to alter item\r
+               $member->canAlterItem($itemid) or $this->disallow();\r
+\r
+               $blogid = getBlogIdFromItemId($itemid);\r
+\r
+               $this->pagehead();\r
+\r
+               // start index\r
+               if (postVar('start'))\r
+                       $start = intPostVar('start');\r
+               else\r
+                       $start = 0;\r
+\r
+               // amount of items to show\r
+               if (postVar('amount'))\r
+                       $amount = intPostVar('amount');\r
+               else {\r
+                       $amount = intval($CONF['DefaultListSize']);\r
+                       if ($amount < 1)\r
+                               $amount = 10;\r
+               }\r
+\r
+               $search = postVar('search');\r
+\r
+               echo '<p>(<a href="index.php?action=itemlist&amp;blogid=',$blogid,'">',_BACKTOOVERVIEW,'</a>)</p>';\r
+               echo '<h2>',_COMMENTS,'</h2>';\r
+\r
+               $query = 'SELECT cbody, cuser, cmail, cemail, mname, ctime, chost, cnumber, cip, citem FROM ' . sql_table('comment') . ' LEFT OUTER JOIN ' . sql_table('member') . ' ON mnumber = cmember WHERE citem = ' . $itemid;\r
+\r
+               if ($search)\r
+                       $query .= ' and cbody LIKE "%' . addslashes($search) . '%"';\r
+\r
+               $query .= ' ORDER BY ctime ASC'\r
+                               . " LIMIT $start,$amount";\r
+\r
+               $template['content'] = 'commentlist';\r
+               $template['canAddBan'] = $member->blogAdminRights(getBlogIDFromItemID($itemid));\r
+\r
+               $manager->loadClass("ENCAPSULATE");\r
+               $navList =& new NAVLIST('itemcommentlist', $start, $amount, 0, 1000, 0, $search, $itemid);\r
+               $navList->showBatchList('comment',$query,'table',$template,_NOCOMMENTS);\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * Browse own comments\r
+        */\r
+       function action_browseowncomments() {\r
+               global $member, $manager, $CONF;\r
+\r
+               // start index\r
+               if (postVar('start'))\r
+                       $start = intPostVar('start');\r
+               else\r
+                       $start = 0;\r
+\r
+               // amount of items to show\r
+               if (postVar('amount'))\r
+                       $amount = intPostVar('amount');\r
+               else {\r
+                       $amount = intval($CONF['DefaultListSize']);\r
+                       if ($amount < 1)\r
+                               $amount = 10;\r
+               }\r
+\r
+               $search = postVar('search');\r
+\r
+\r
+               $query =  'SELECT cbody, cuser, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE cmember=' . $member->getID();\r
+\r
+               if ($search)\r
+                       $query .= ' and cbody LIKE "%' . addslashes($search) . '%"';\r
+\r
+               $query .= ' ORDER BY ctime DESC'\r
+                               . " LIMIT $start,$amount";\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
+               echo '<h2>', _COMMENTS_YOUR ,'</h2>';\r
+\r
+               $template['content'] = 'commentlist';\r
+               $template['canAddBan'] = 0; // doesn't make sense to allow banning yourself\r
+\r
+               $manager->loadClass("ENCAPSULATE");\r
+               $navList =& new NAVLIST('browseowncomments', $start, $amount, 0, 1000, 0, $search, 0);\r
+               $navList->showBatchList('comment',$query,'table',$template,_NOCOMMENTS_YOUR);\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * Browse all comments for a weblog\r
+        * @param int $blogid\r
+        */\r
+       function action_blogcommentlist($blogid = '')\r
+       {\r
+               global $member, $manager, $CONF;\r
+\r
+               if ($blogid == '')\r
+                       $blogid = intRequestVar('blogid');\r
+               else\r
+                       $blogid = intval($blogid);\r
+\r
+               $member->teamRights($blogid) or $member->isAdmin() or $this->disallow();\r
+\r
+               // start index\r
+               if (postVar('start'))\r
+                       $start = intPostVar('start');\r
+               else\r
+                       $start = 0;\r
+\r
+               // amount of items to show\r
+               if (postVar('amount'))\r
+                       $amount = intPostVar('amount');\r
+               else {\r
+                       $amount = intval($CONF['DefaultListSize']);\r
+                       if ($amount < 1)\r
+                               $amount = 10;\r
+               }\r
+\r
+               $search = postVar('search');            // search through comments\r
+\r
+\r
+               $query =  'SELECT cbody, cuser, cemail, cmail, mname, ctime, chost, cnumber, cip, citem FROM '.sql_table('comment').' LEFT OUTER JOIN '.sql_table('member').' ON mnumber=cmember WHERE cblog=' . intval($blogid);\r
+\r
+               if ($search != '')\r
+                       $query .= ' and cbody LIKE "%' . addslashes($search) . '%"';\r
+\r
+\r
+               $query .= ' ORDER BY ctime DESC'\r
+                               . " LIMIT $start,$amount";\r
+\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
+               echo '<h2>', _COMMENTS_BLOG , ' ' , $this->bloglink($blog), '</h2>';\r
+\r
+               $template['content'] = 'commentlist';\r
+               $template['canAddBan'] = $member->blogAdminRights($blogid);\r
+\r
+               $manager->loadClass("ENCAPSULATE");\r
+               $navList =& new NAVLIST('blogcommentlist', $start, $amount, 0, 1000, $blogid, $search, 0);\r
+               $navList->showBatchList('comment',$query,'table',$template, _NOCOMMENTS_BLOG);\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * Provide a page to item a new item to the given blog\r
+        */\r
+       function action_createitem() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               // check if allowed\r
+               $member->teamRights($blogid) or $this->disallow();\r
+\r
+               $memberid = $member->getID();\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+\r
+               $this->pagehead();\r
+\r
+               // generate the add-item form\r
+               $formfactory =& new PAGEFACTORY($blogid);\r
+               $formfactory->createAddForm('admin');\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_itemedit() {\r
+               global $member, $manager;\r
+\r
+               $itemid = intRequestVar('itemid');\r
+\r
+               // only allow if user is allowed to alter item\r
+               $member->canAlterItem($itemid) or $this->disallow();\r
+\r
+               $item =& $manager->getItem($itemid,1,1);\r
+               $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));\r
+\r
+               $manager->notify('PrepareItemForEdit', array('item' => &$item));\r
+\r
+               if ($blog->convertBreaks()) {\r
+                       $item['body'] = removeBreaks($item['body']);\r
+                       $item['more'] = removeBreaks($item['more']);\r
+               }\r
+\r
+               // form to edit blog items\r
+               $this->pagehead();\r
+               $formfactory =& new PAGEFACTORY($blog->getID());\r
+               $formfactory->createEditForm('admin',$item);\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_itemupdate() {\r
+               global $member, $manager, $CONF;\r
+\r
+               $itemid = intRequestVar('itemid');\r
+               $catid = postVar('catid');\r
+\r
+               // only allow if user is allowed to alter item\r
+               $member->canUpdateItem($itemid, $catid) or $this->disallow();\r
+\r
+               $actiontype = postVar('actiontype');\r
+\r
+               // delete actions are handled by itemdelete (which has confirmation)\r
+               if ($actiontype == 'delete') {\r
+                       $this->action_itemdelete();\r
+                       return;\r
+               }\r
+\r
+               $body   = postVar('body');\r
+               $title  = postVar('title');\r
+               $more   = postVar('more');\r
+               $closed = intPostVar('closed');\r
+               $draftid = intPostVar('draftid');\r
+\r
+               // default action = add now\r
+               if (!$actiontype)\r
+                       $actiontype='addnow';\r
+\r
+               // create new category if needed\r
+               if (strstr($catid,'newcat')) {\r
+                       // get blogid\r
+                       list($blogid) = sscanf($catid,"newcat-%d");\r
+\r
+                       // create\r
+                       $blog =& $manager->getBlog($blogid);\r
+                       $catid = $blog->createNewCategory();\r
+\r
+                       // show error when sth goes wrong\r
+                       if (!$catid)\r
+                               $this->doError(_ERROR_CATCREATEFAIL);\r
+               }\r
+\r
+               /*\r
+                       set some variables based on actiontype\r
+\r
+                       actiontypes:\r
+                               draft items -> addnow, addfuture, adddraft, delete\r
+                               non-draft items -> edit, changedate, delete\r
+\r
+                       variables set:\r
+                               $timestamp: set to a nonzero value for future dates or date changes\r
+                               $wasdraft: set to 1 when the item used to be a draft item\r
+                               $publish: set to 1 when the edited item is not a draft\r
+               */\r
+               $blogid =  getBlogIDFromItemID($itemid);\r
+               $blog   =& $manager->getBlog($blogid);\r
+\r
+               $wasdrafts = array('adddraft', 'addfuture', 'addnow');\r
+               $wasdraft  = in_array($actiontype, $wasdrafts) ? 1 : 0;\r
+               $publish   = ($actiontype != 'adddraft' && $actiontype != 'backtodrafts') ? 1 : 0;\r
+               if ($actiontype == 'addfuture' || $actiontype == 'changedate') {\r
+                       $timestamp = mktime(intPostVar('hour'), intPostVar('minutes'), 0, intPostVar('month'), intPostVar('day'), intPostVar('year'));\r
+               } else {\r
+                       $timestamp =0;\r
+               }\r
+\r
+               // edit the item for real\r
+               ITEM::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp);\r
+\r
+               $this->updateFuturePosted($blogid);\r
+\r
+               if ($draftid > 0) {\r
+                       // delete permission is checked inside ITEM::delete()\r
+                       ITEM::delete($draftid);\r
+               }\r
+\r
+               // show category edit window when we created a new category\r
+               // ($catid will then be a new category ID, while postVar('catid') will be 'newcat-x')\r
+               if ($catid != intPostVar('catid')) {\r
+                       $this->action_categoryedit(\r
+                               $catid,\r
+                               $blog->getID(),\r
+                               $CONF['AdminURL'] . 'index.php?action=itemlist&blogid=' . getBlogIDFromItemID($itemid)\r
+                       );\r
+               } else {\r
+                       // TODO: set start item correctly for itemlist\r
+                       $this->action_itemlist(getBlogIDFromItemID($itemid));\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_itemdelete() {\r
+               global $member, $manager;\r
+\r
+               $itemid = intRequestVar('itemid');\r
+\r
+               // only allow if user is allowed to alter item\r
+               $member->canAlterItem($itemid) or $this->disallow();\r
+\r
+               if (!$manager->existsItem($itemid,1,1))\r
+                       $this->error(_ERROR_NOSUCHITEM);\r
+\r
+               $item =& $manager->getItem($itemid,1,1);\r
+               $title = htmlspecialchars(strip_tags($item['title']));\r
+               $body = strip_tags($item['body']);\r
+               $body = htmlspecialchars(shorten($body,300,'...'));\r
+\r
+               $this->pagehead();\r
+               ?>\r
+                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
+\r
+                       <p><?php echo _CONFIRMTXT_ITEM?></p>\r
+\r
+                       <div class="note">\r
+                               <b>"<?php echo  $title ?>"</b>\r
+                               <br />\r
+                               <?php echo $body?>\r
+                       </div>\r
+\r
+                       <form method="post" action="index.php"><div>\r
+                               <input type="hidden" name="action" value="itemdeleteconfirm" />\r
+                               <?php $manager->addTicketHidden() ?>\r
+                               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />\r
+                               <input type="submit" value="<?php echo _DELETE_CONFIRM_BTN?>"  tabindex="10" />\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_itemdeleteconfirm() {\r
+               global $member;\r
+\r
+               $itemid = intRequestVar('itemid');\r
+\r
+               // only allow if user is allowed to alter item\r
+               $member->canAlterItem($itemid) or $this->disallow();\r
+\r
+               // get blogid first\r
+               $blogid = getBlogIdFromItemId($itemid);\r
+\r
+               // delete item (note: some checks will be performed twice)\r
+               $this->deleteOneItem($itemid);\r
+\r
+               $this->action_itemlist($blogid);\r
+       }\r
+\r
+       /**\r
+        * Deletes one item and returns error if something goes wrong\r
+        * @param int $itemid\r
+        */\r
+       function deleteOneItem($itemid) {\r
+               global $member, $manager;\r
+\r
+               // only allow if user is allowed to alter item (also checks if itemid exists)\r
+               if (!$member->canAlterItem($itemid))\r
+                       return _ERROR_DISALLOWED;\r
+\r
+               // need to get blogid before the item is deleted\r
+               $blogid = getBlogIDFromItemId($itemid);\r
+\r
+               $manager->loadClass('ITEM');\r
+               ITEM::delete($itemid);\r
+\r
+               // update blog's futureposted\r
+               $this->updateFuturePosted($blogid);\r
+       }\r
+\r
+       /**\r
+        * Update a blog's future posted flag\r
+        * @param int $blogid\r
+        */\r
+       function updateFuturePosted($blogid) {\r
+               global $manager;\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+               $currenttime = $blog->getCorrectTime(time());\r
+               $result = sql_query("SELECT * FROM ".sql_table('item').\r
+                       " WHERE iblog='".$blogid."' AND iposted=0 AND itime>".mysqldate($currenttime));\r
+               if (sql_num_rows($result) > 0) {\r
+                               $blog->setFuturePost();\r
+               }\r
+               else {\r
+                               $blog->clearFuturePost();\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_itemmove() {\r
+               global $member, $manager;\r
+\r
+               $itemid = intRequestVar('itemid');\r
+\r
+               // only allow if user is allowed to alter item\r
+               $member->canAlterItem($itemid) or $this->disallow();\r
+\r
+               $item =& $manager->getItem($itemid,1,1);\r
+\r
+               $this->pagehead();\r
+               ?>\r
+                       <h2><?php echo _MOVE_TITLE?></h2>\r
+                       <form method="post" action="index.php"><div>\r
+                               <input type="hidden" name="action" value="itemmoveto" />\r
+                               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />\r
+\r
+                               <?php\r
+\r
+                                       $manager->addTicketHidden();\r
+                                       $this->selectBlogCategory('catid',$item['catid'],10,1);\r
+                               ?>\r
+\r
+                               <input type="submit" value="<?php echo _MOVE_BTN?>" tabindex="10000" onclick="return checkSubmit();" />\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_itemmoveto() {\r
+               global $member, $manager;\r
+\r
+               $itemid = intRequestVar('itemid');\r
+               $catid = requestVar('catid');\r
+\r
+               // create new category if needed\r
+               if (strstr($catid,'newcat')) {\r
+                       // get blogid\r
+                       list($blogid) = sscanf($catid,'newcat-%d');\r
+\r
+                       // create\r
+                       $blog =& $manager->getBlog($blogid);\r
+                       $catid = $blog->createNewCategory();\r
+\r
+                       // show error when sth goes wrong\r
+                       if (!$catid)\r
+                               $this->doError(_ERROR_CATCREATEFAIL);\r
+               }\r
+\r
+               // only allow if user is allowed to alter item\r
+               $member->canUpdateItem($itemid, $catid) or $this->disallow();\r
+\r
+               $old_blogid = getBlogIDFromItemId($itemid);\r
+\r
+               ITEM::move($itemid, $catid);\r
+\r
+               // set the futurePosted flag on the blog\r
+               $this->updateFuturePosted(getBlogIDFromItemId($itemid));\r
+\r
+               // reset the futurePosted in case the item is moved from one blog to another\r
+               $this->updateFuturePosted($old_blogid);\r
+\r
+               if ($catid != intRequestVar('catid'))\r
+                       $this->action_categoryedit($catid, $blog->getID());\r
+               else\r
+                       $this->action_itemlist(getBlogIDFromCatID($catid));\r
+       }\r
+\r
+       /**\r
+        * Moves one item to a given category (category existance should be checked by caller)\r
+        * errors are returned\r
+        * @param int $itemid\r
+        * @param int $destCatid category ID to which the item will be moved\r
+        */\r
+       function moveOneItem($itemid, $destCatid) {\r
+               global $member;\r
+\r
+               // only allow if user is allowed to move item\r
+               if (!$member->canUpdateItem($itemid, $destCatid))\r
+                       return _ERROR_DISALLOWED;\r
+\r
+               ITEM::move($itemid, $destCatid);\r
+       }\r
+\r
+       /**\r
+        * Adds a item to the chosen blog\r
+        */\r
+       function action_additem() {\r
+               global $manager, $CONF;\r
+\r
+               $manager->loadClass('ITEM');\r
+\r
+               $result = ITEM::createFromRequest();\r
+\r
+               if ($result['status'] == 'error')\r
+                       $this->error($result['message']);\r
+\r
+               $blogid = getBlogIDFromItemID($result['itemid']);\r
+               $blog =& $manager->getBlog($blogid);\r
+               $btimestamp = $blog->getCorrectTime();\r
+               $item      = $manager->getItem(intval($result['itemid']), 1, 1);\r
+\r
+               if ($result['status'] == 'newcategory') {\r
+                       $distURI = $manager->addTicketToUrl($CONF['AdminURL'] . 'index.php?action=itemList&blogid=' . intval($blogid));\r
+                       $this->action_categoryedit($result['catid'], $blogid, $distURI);\r
+               } else {\r
+                       $methodName = 'action_itemList';\r
+                       call_user_func(array(&$this, $methodName), $blogid);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Allows to edit previously made comments\r
+        */\r
+       function action_commentedit() {\r
+               global $member, $manager;\r
+\r
+               $commentid = intRequestVar('commentid');\r
+\r
+               $member->canAlterComment($commentid) or $this->disallow();\r
+\r
+               $comment = COMMENT::getComment($commentid);\r
+\r
+               $manager->notify('PrepareCommentForEdit',array('comment' => &$comment));\r
+\r
+               // change <br /> to \n\r
+               $comment['body'] = str_replace('<br />','',$comment['body']);\r
+\r
+               $comment['body'] = eregi_replace("<a href=['\"]([^'\"]+)['\"]( rel=\"nofollow\")?>[^<]*</a>","\\1",$comment['body']);\r
+\r
+               $this->pagehead();\r
+\r
+               ?>\r
+               <h2><?php echo _EDITC_TITLE?></h2>\r
+\r
+               <form action="index.php" method="post"><div>\r
+\r
+               <input type="hidden" name="action" value="commentupdate" />\r
+               <?php $manager->addTicketHidden(); ?>\r
+               <input type="hidden" name="commentid" value="<?php echo  $commentid; ?>" />\r
+               <table><tr>\r
+                       <th colspan="2"><?php echo _EDITC_TITLE?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _EDITC_WHO?></td>\r
+                       <td>\r
+                       <?php                      if ($comment['member'])\r
+                                       echo $comment['member'] . " (" . _EDITC_MEMBER . ")";\r
+                               else\r
+                                       echo $comment['user'] . " (" . _EDITC_NONMEMBER . ")";\r
+                       ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _EDITC_WHEN?></td>\r
+                       <td><?php echo  date("Y-m-d @ H:i",$comment['timestamp']); ?></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EDITC_HOST?></td>\r
+                       <td><?php echo  $comment['host']; ?></td>\r
+               </tr>\r
+               <tr>\r
+                       <td><?php echo _EDITC_URL; ?></td>\r
+                       <td><input type="text" name="url" size="30" tabindex="6" value="<?php echo $comment['userid']; ?>" /></td>\r
+               </tr>\r
+               <tr>\r
+                       <td><?php echo _EDITC_EMAIL; ?></td>\r
+                       <td><input type="text" name="email" size="30" tabindex="8" value="<?php echo $comment['email']; ?>" /></td>\r
+               </tr>\r
+               <tr>\r
+                       <td><?php echo _EDITC_TEXT?></td>\r
+                       <td>\r
+                               <textarea name="body" tabindex="10" rows="10" cols="50"><?php                              // htmlspecialchars not needed (things should be escaped already)\r
+                                       echo $comment['body'];\r
+                               ?></textarea>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _EDITC_EDIT?></td>\r
+                       <td><input type="submit"  tabindex="20" value="<?php echo _EDITC_EDIT?>" onclick="return checkSubmit();" /></td>\r
+               </tr></table>\r
+\r
+               </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_commentupdate() {\r
+               global $member, $manager;\r
+\r
+               $commentid = intRequestVar('commentid');\r
+\r
+               $member->canAlterComment($commentid) or $this->disallow();\r
+\r
+               $url = postVar('url');\r
+               $email = postVar('email');\r
+               $body = postVar('body');\r
+\r
+               // intercept words that are too long\r
+               if (eregi("[a-zA-Z0-9|\.,;:!\?=\/\\]{90,90}",$body) != false)\r
+                       $this->error(_ERROR_COMMENT_LONGWORD);\r
+\r
+               // check length\r
+               if (strlen($body)<3)\r
+                       $this->error(_ERROR_COMMENT_NOCOMMENT);\r
+               if (strlen($body)>5000)\r
+                       $this->error(_ERROR_COMMENT_TOOLONG);\r
+\r
+\r
+               // prepare body\r
+               $body = COMMENT::prepareBody($body);\r
+\r
+               // call plugins\r
+               $manager->notify('PreUpdateComment',array('body' => &$body));\r
+\r
+               $query =  'UPDATE '.sql_table('comment')\r
+                          . " SET cmail = '" . addslashes($url) . "', cemail = '" . addslashes($email) . "', cbody = '" . addslashes($body) . "'"\r
+                          . " WHERE cnumber=" . $commentid;\r
+               sql_query($query);\r
+\r
+               // get itemid\r
+               $res = sql_query('SELECT citem FROM '.sql_table('comment').' WHERE cnumber=' . $commentid);\r
+               $o = sql_fetch_object($res);\r
+               $itemid = $o->citem;\r
+\r
+               if ($member->canAlterItem($itemid))\r
+                       $this->action_itemcommentlist($itemid);\r
+               else\r
+                       $this->action_browseowncomments();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_commentdelete() {\r
+               global $member, $manager;\r
+\r
+               $commentid = intRequestVar('commentid');\r
+\r
+               $member->canAlterComment($commentid) or $this->disallow();\r
+\r
+               $comment = COMMENT::getComment($commentid);\r
+\r
+               $body = strip_tags($comment['body']);\r
+               $body = htmlspecialchars(shorten($body, 300, '...'));\r
+\r
+               if ($comment['member'])\r
+                       $author = $comment['member'];\r
+               else\r
+                       $author = $comment['user'];\r
+\r
+               $this->pagehead();\r
+               ?>\r
+\r
+                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
+\r
+                       <p><?php echo _CONFIRMTXT_COMMENT?></p>\r
+\r
+                       <div class="note">\r
+                       <b><?php echo _EDITC_WHO?>:</b> <?php echo  $author ?>\r
+                       <br />\r
+                       <b><?php echo _EDITC_TEXT?>:</b> <?php echo  $body ?>\r
+                       </div>\r
+\r
+                       <form method="post" action="index.php"><div>\r
+                               <input type="hidden" name="action" value="commentdeleteconfirm" />\r
+                               <?php $manager->addTicketHidden() ?>\r
+                               <input type="hidden" name="commentid" value="<?php echo  $commentid; ?>" />\r
+                               <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_commentdeleteconfirm() {\r
+               global $member;\r
+\r
+               $commentid = intRequestVar('commentid');\r
+\r
+               // get item id first\r
+               $res = sql_query('SELECT citem FROM '.sql_table('comment') .' WHERE cnumber=' . $commentid);\r
+               $o = sql_fetch_object($res);\r
+               $itemid = $o->citem;\r
+\r
+               $error = $this->deleteOneComment($commentid);\r
+               if ($error)\r
+                       $this->doError($error);\r
+\r
+               if ($member->canAlterItem($itemid))\r
+                       $this->action_itemcommentlist($itemid);\r
+               else\r
+                       $this->action_browseowncomments();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function deleteOneComment($commentid) {\r
+               global $member, $manager;\r
+\r
+               $commentid = intval($commentid);\r
+\r
+               if (!$member->canAlterComment($commentid))\r
+                       return _ERROR_DISALLOWED;\r
+\r
+               $manager->notify('PreDeleteComment', array('commentid' => $commentid));\r
+\r
+               // delete the comments associated with the item\r
+               $query = 'DELETE FROM '.sql_table('comment').' WHERE cnumber=' . $commentid;\r
+               sql_query($query);\r
+\r
+               $manager->notify('PostDeleteComment', array('commentid' => $commentid));\r
+\r
+               return '';\r
+       }\r
+\r
+       /**\r
+        * Usermanagement main\r
+        */\r
+       function action_usermanagement() {\r
+               global $member, $manager;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
+\r
+               echo '<h2>' . _MEMBERS_TITLE .'</h2>';\r
+\r
+               echo '<h3>' . _MEMBERS_CURRENT .'</h3>';\r
+\r
+               // show list of members with actions\r
+               $query =  'SELECT *'\r
+                          . ' FROM '.sql_table('member');\r
+               $template['content'] = 'memberlist';\r
+               $template['tabindex'] = 10;\r
+\r
+               $manager->loadClass("ENCAPSULATE");\r
+               $batch =& new BATCH('member');\r
+               $batch->showlist($query,'table',$template);\r
+\r
+               echo '<h3>' . _MEMBERS_NEW .'</h3>';\r
+               ?>\r
+                       <form method="post" action="index.php" name="memberedit"><div>\r
+\r
+                       <input type="hidden" name="action" value="memberadd" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+\r
+                       <table>\r
+                       <tr>\r
+                               <th colspan="2"><?php echo _MEMBERS_NEW?></th>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_DISPLAY?> <?php help('shortnames');?>\r
+                               <br /><small><?php echo _MEMBERS_DISPLAY_INFO?></small>\r
+                               </td>\r
+                               <td><input tabindex="10010" name="name" size="32" maxlength="32" /></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_REALNAME?></td>\r
+                               <td><input name="realname" tabindex="10020" size="40" maxlength="60" /></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_PWD?></td>\r
+                               <td><input name="password" tabindex="10030" size="16" maxlength="40" type="password" /></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_REPPWD?></td>\r
+                               <td><input name="repeatpassword" tabindex="10035" size="16" maxlength="40" type="password" /></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_EMAIL?></td>\r
+                               <td><input name="email" tabindex="10040" size="40" maxlength="60" /></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_URL?></td>\r
+                               <td><input name="url" tabindex="10050" size="40" maxlength="100" /></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_SUPERADMIN?> <?php help('superadmin'); ?></td>\r
+                               <td><?php $this->input_yesno('admin',0,10060); ?> </td>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_CANLOGIN?> <?php help('canlogin'); ?></td>\r
+                               <td><?php $this->input_yesno('canlogin',1,10070); ?></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_NOTES?></td>\r
+                               <td><input name="notes" maxlength="100" size="40" tabindex="10080" /></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_NEW?></td>\r
+                               <td><input type="submit" value="<?php echo _MEMBERS_NEW_BTN?>" tabindex="10090" onclick="return checkSubmit();" /></td>\r
+                       </tr></table>\r
+\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * Edit member settings\r
+        */\r
+       function action_memberedit() {\r
+               $this->action_editmembersettings(intRequestVar('memberid'));\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_editmembersettings($memberid = '') {\r
+               global $member, $manager, $CONF;\r
+\r
+               if ($memberid == '')\r
+                       $memberid = $member->getID();\r
+\r
+               // check if allowed\r
+               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();\r
+\r
+               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';\r
+               $this->pagehead($extrahead);\r
+\r
+               // show message to go back to member overview (only for admins)\r
+               if ($member->isAdmin())\r
+                       echo '<a href="index.php?action=usermanagement">(' ._MEMBERS_BACKTOOVERVIEW. ')</a>';\r
+               else\r
+                       echo '<a href="index.php?action=overview">(' ._BACKHOME. ')</a>';\r
+\r
+               echo '<h2>' . _MEMBERS_EDIT . '</h2>';\r
+\r
+               $mem = MEMBER::createFromID($memberid);\r
+\r
+               ?>\r
+               <form method="post" action="index.php" name="memberedit"><div>\r
+\r
+               <input type="hidden" name="action" value="changemembersettings" />\r
+               <input type="hidden" name="memberid" value="<?php echo  $memberid; ?>" />\r
+               <?php $manager->addTicketHidden() ?>\r
+\r
+               <table><tr>\r
+                       <th colspan="2"><?php echo _MEMBERS_EDIT?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _MEMBERS_DISPLAY?> <?php help('shortnames');?>\r
+                               <br /><small><?php echo _MEMBERS_DISPLAY_INFO?></small>\r
+                       </td>\r
+                       <td>\r
+                       <?php if ($CONF['AllowLoginEdit'] || $member->isAdmin()) { ?>\r
+                               <input name="name" tabindex="10" maxlength="32" size="32" value="<?php echo  htmlspecialchars($mem->getDisplayName()); ?>" />\r
+                       <?php } else {\r
+                               echo htmlspecialchars($member->getDisplayName());\r
+                          }\r
+                       ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _MEMBERS_REALNAME?></td>\r
+                       <td><input name="realname" tabindex="20" maxlength="60" size="40" value="<?php echo  htmlspecialchars($mem->getRealName()); ?>" /></td>\r
+               </tr><tr>\r
+               <?php if ($CONF['AllowLoginEdit'] || $member->isAdmin()) { ?>\r
+                       <td><?php echo _MEMBERS_PWD?></td>\r
+                       <td><input type="password" tabindex="30" maxlength="40" size="16" name="password" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _MEMBERS_REPPWD?></td>\r
+                       <td><input type="password" tabindex="35" maxlength="40" size="16" name="repeatpassword" /></td>\r
+               <?php } ?>\r
+               </tr><tr>\r
+                       <td><?php echo _MEMBERS_EMAIL?>\r
+                               <br /><small><?php echo _MEMBERS_EMAIL_EDIT?></small>\r
+                       </td>\r
+                       <td><input name="email" tabindex="40" size="40" maxlength="60" value="<?php echo  htmlspecialchars($mem->getEmail()); ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _MEMBERS_URL?></td>\r
+                       <td><input name="url" tabindex="50" size="40" maxlength="100" value="<?php echo  htmlspecialchars($mem->getURL()); ?>" /></td>\r
+               <?php // only allow to change this by super-admins\r
+                  // we don't want normal users to 'upgrade' themselves to super-admins, do we? ;-)\r
+                  if ($member->isAdmin()) {\r
+               ?>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_SUPERADMIN?> <?php help('superadmin'); ?></td>\r
+                               <td><?php $this->input_yesno('admin',$mem->isAdmin(),60); ?></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _MEMBERS_CANLOGIN?> <?php help('canlogin'); ?></td>\r
+                               <td><?php $this->input_yesno('canlogin',$mem->canLogin(),70,1,0,_YES,_NO,$mem->isAdmin()); ?></td>\r
+               <?php } ?>\r
+               </tr><tr>\r
+                       <td><?php echo _MEMBERS_NOTES?></td>\r
+                       <td><input name="notes" tabindex="80" size="40" maxlength="100" value="<?php echo  htmlspecialchars($mem->getNotes()); ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _MEMBERS_DEFLANG?> <?php help('language'); ?>\r
+                       </td>\r
+                       <td>\r
+\r
+                               <select name="deflang" tabindex="85">\r
+                                       <option value=""><?php echo _MEMBERS_USESITELANG?></option>\r
+                               <?php                      // show a dropdown list of all available languages\r
+                               global $DIR_LANG;\r
+                               $dirhandle = opendir($DIR_LANG);\r
+                               while ($filename = readdir($dirhandle)) {\r
+                                       if (ereg("^(.*)\.php$",$filename,$matches)) {\r
+                                               $name = $matches[1];\r
+                                               echo "<option value='$name'";\r
+                                               if ($name == $mem->getLanguage())\r
+                                                       echo " selected='selected'";\r
+                                               echo ">$name</option>";\r
+                                       }\r
+                               }\r
+                               closedir($dirhandle);\r
+\r
+                               ?>\r
+                               </select>\r
+\r
+                       </td>\r
+               </tr>\r
+               <tr>\r
+                       <td><?php echo _MEMBERS_USEAUTOSAVE?> <?php help('autosave'); ?></td>\r
+                       <td><?php $this->input_yesno('autosave', $mem->getAutosave(), 87); ?></td>\r
+               </tr>\r
+               <?php\r
+                       // plugin options\r
+                       $this->_insertPluginOptions('member',$memberid);\r
+               ?>\r
+               <tr>\r
+                       <th colspan="2"><?php echo _MEMBERS_EDIT ?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _MEMBERS_EDIT?></td>\r
+                       <td><input type="submit" tabindex="90" value="<?php echo _MEMBERS_EDIT_BTN?>" onclick="return checkSubmit();" /></td>\r
+               </tr></table>\r
+\r
+               </div></form>\r
+\r
+               <?php\r
+                       echo '<h3>',_PLUGINS_EXTRA,'</h3>';\r
+\r
+                       $manager->notify(\r
+                               'MemberSettingsFormExtras',\r
+                               array(\r
+                                       'member' => &$mem\r
+                               )\r
+                       );\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_changemembersettings() {\r
+               global $member, $CONF, $manager;\r
+\r
+               $memberid = intRequestVar('memberid');\r
+\r
+               // check if allowed\r
+               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();\r
+\r
+               $name              = trim(strip_tags(postVar('name')));\r
+               $realname          = trim(strip_tags(postVar('realname')));\r
+               $password          = postVar('password');\r
+               $repeatpassword = postVar('repeatpassword');\r
+               $email            = strip_tags(postVar('email'));\r
+               $url                    = strip_tags(postVar('url'));\r
+\r
+               // Sometimes user didn't prefix the URL with http://, this cause a malformed URL. Let's fix it.\r
+               if (!eregi("^https?://", $url))\r
+                       $url = "http://".$url;\r
+\r
+               $admin            = postVar('admin');\r
+               $canlogin          = postVar('canlogin');\r
+               $notes            = strip_tags(postVar('notes'));\r
+               $deflang                = postVar('deflang');\r
+\r
+               $mem = MEMBER::createFromID($memberid);\r
+\r
+               if ($CONF['AllowLoginEdit'] || $member->isAdmin()) {\r
+\r
+                       if (!isValidDisplayName($name))\r
+                               $this->error(_ERROR_BADNAME);\r
+\r
+                       if (($name != $mem->getDisplayName()) && MEMBER::exists($name))\r
+                               $this->error(_ERROR_NICKNAMEINUSE);\r
+\r
+                       if ($password != $repeatpassword)\r
+                               $this->error(_ERROR_PASSWORDMISMATCH);\r
+\r
+                       if ($password && (strlen($password) < 6))\r
+                               $this->error(_ERROR_PASSWORDTOOSHORT);\r
+\r
+                       if ($password) {\r
+                               $pwdvalid = true;\r
+                               $pwderror = '';\r
+                               $manager->notify('PrePasswordSet',array('password' => $password, 'errormessage' => &$pwderror, 'valid' => &$pwdvalid));\r
+                               if (!$pwdvalid) {\r
+                                       $this->error($pwderror);\r
+                               }\r
+                       }\r
+               }\r
+\r
+               if (!isValidMailAddress($email))\r
+                       $this->error(_ERROR_BADMAILADDRESS);\r
+\r
+\r
+               if (!$realname)\r
+                       $this->error(_ERROR_REALNAMEMISSING);\r
+\r
+               if (($deflang != '') && (!checkLanguage($deflang)))\r
+                       $this->error(_ERROR_NOSUCHLANGUAGE);\r
+\r
+               // check if there will remain at least one site member with both the logon and admin rights\r
+               // (check occurs when taking away one of these rights from such a member)\r
+               if (    (!$admin && $mem->isAdmin() && $mem->canLogin())\r
+                        || (!$canlogin && $mem->isAdmin() && $mem->canLogin())\r
+                  )\r
+               {\r
+                       $r = sql_query('SELECT * FROM '.sql_table('member').' WHERE madmin=1 and mcanlogin=1');\r
+                       if (sql_num_rows($r) < 2)\r
+                               $this->error(_ERROR_ATLEASTONEADMIN);\r
+               }\r
+\r
+               if ($CONF['AllowLoginEdit'] || $member->isAdmin()) {\r
+                       $mem->setDisplayName($name);\r
+                       if ($password)\r
+                               $mem->setPassword($password);\r
+               }\r
+\r
+               $oldEmail = $mem->getEmail();\r
+\r
+               $mem->setRealName($realname);\r
+               $mem->setEmail($email);\r
+               $mem->setURL($url);\r
+               $mem->setNotes($notes);\r
+               $mem->setLanguage($deflang);\r
+\r
+\r
+               // only allow super-admins to make changes to the admin status\r
+               if ($member->isAdmin()) {\r
+                       $mem->setAdmin($admin);\r
+                       $mem->setCanLogin($canlogin);\r
+               }\r
+\r
+               $autosave = postVar ('autosave');\r
+               $mem->setAutosave($autosave);\r
+\r
+               $mem->write();\r
+\r
+               // store plugin options\r
+               $aOptions = requestArray('plugoption');\r
+               NucleusPlugin::_applyPluginOptions($aOptions);\r
+               $manager->notify('PostPluginOptionsUpdate',array('context' => 'member', 'memberid' => $memberid, 'member' => &$mem));\r
+\r
+               // if email changed, generate new password\r
+               if ($oldEmail != $mem->getEmail())\r
+               {\r
+                       $mem->sendActivationLink('addresschange', $oldEmail);\r
+                       // logout member\r
+                       $mem->newCookieKey();\r
+\r
+                       // only log out if the member being edited is the current member.\r
+                       if ($member->getID() == $memberid)\r
+                               $member->logout();\r
+                       $this->action_login(_MSG_ACTIVATION_SENT, 0);\r
+                       return;\r
+               }\r
+\r
+\r
+               if (  ( $mem->getID() == $member->getID() )\r
+                  && ( $mem->getDisplayName() != $member->getDisplayName() )\r
+                  ) {\r
+                       $mem->newCookieKey();\r
+                       $member->logout();\r
+                       $this->action_login(_MSG_LOGINAGAIN, 0);\r
+               } else {\r
+                       $this->action_overview(_MSG_SETTINGSCHANGED);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_memberadd() {\r
+               global $member, $manager;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               if (postVar('password') != postVar('repeatpassword'))\r
+                       $this->error(_ERROR_PASSWORDMISMATCH);\r
+               if (strlen(postVar('password')) < 6)\r
+                       $this->error(_ERROR_PASSWORDTOOSHORT);\r
+\r
+               $res = MEMBER::create(postVar('name'), postVar('realname'), postVar('password'), postVar('email'), postVar('url'), postVar('admin'), postVar('canlogin'), postVar('notes'));\r
+               if ($res != 1)\r
+                       $this->error($res);\r
+\r
+               // fire PostRegister event\r
+               $newmem = new MEMBER();\r
+               $newmem->readFromName(postVar('name'));\r
+               $manager->notify('PostRegister',array('member' => &$newmem));\r
+\r
+               $this->action_usermanagement();\r
+       }\r
+\r
+       /**\r
+        * Account activation\r
+        *\r
+        * @author dekarma\r
+        */\r
+       function action_activate() {\r
+\r
+               $key = getVar('key');\r
+               $this->_showActivationPage($key);\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function _showActivationPage($key, $message = '')\r
+       {\r
+               global $manager;\r
+\r
+               // clean up old activation keys\r
+               MEMBER::cleanupActivationTable();\r
+\r
+               // get activation info\r
+               $info = MEMBER::getActivationInfo($key);\r
+\r
+               if (!$info)\r
+                       $this->error(_ERROR_ACTIVATE);\r
+\r
+               $mem = MEMBER::createFromId($info->vmember);\r
+\r
+               if (!$mem)\r
+                       $this->error(_ERROR_ACTIVATE);\r
+\r
+               $text = '';\r
+               $title = '';\r
+               $bNeedsPasswordChange = true;\r
+\r
+               switch ($info->vtype)\r
+               {\r
+                       case 'forgot':\r
+                               $title = _ACTIVATE_FORGOT_TITLE;\r
+                               $text = _ACTIVATE_FORGOT_TEXT;\r
+                               break;\r
+                       case 'register':\r
+                               $title = _ACTIVATE_REGISTER_TITLE;\r
+                               $text = _ACTIVATE_REGISTER_TEXT;\r
+                               break;\r
+                       case 'addresschange':\r
+                               $title = _ACTIVATE_CHANGE_TITLE;\r
+                               $text = _ACTIVATE_CHANGE_TEXT;\r
+                               $bNeedsPasswordChange = false;\r
+                               MEMBER::activate($key);\r
+                               break;\r
+               }\r
+\r
+               $aVars = array(\r
+                       'memberName' => htmlspecialchars($mem->getDisplayName())\r
+               );\r
+               $title = TEMPLATE::fill($title, $aVars);\r
+               $text = TEMPLATE::fill($text, $aVars);\r
+\r
+               $this->pagehead();\r
+\r
+                       echo '<h2>' , $title, '</h2>';\r
+                       echo '<p>' , $text, '</p>';\r
+\r
+                       if ($message != '')\r
+                       {\r
+                               echo '<p class="error">',$message,'</p>';\r
+                       }\r
+\r
+                       if ($bNeedsPasswordChange)\r
+                       {\r
+                               ?>\r
+                                       <div><form action="index.php" method="post">\r
+\r
+                                               <input type="hidden" name="action" value="activatesetpwd" />\r
+                                               <?php $manager->addTicketHidden() ?>\r
+                                               <input type="hidden" name="key" value="<?php echo htmlspecialchars($key) ?>" />\r
+\r
+                                               <table><tr>\r
+                                                       <td><?php echo _MEMBERS_PWD?></td>\r
+                                                       <td><input type="password" maxlength="40" size="16" name="password" /></td>\r
+                                               </tr><tr>\r
+                                                       <td><?php echo _MEMBERS_REPPWD?></td>\r
+                                                       <td><input type="password" maxlength="40" size="16" name="repeatpassword" /></td>\r
+                                               <?php\r
+\r
+                                                       global $manager;\r
+                                                       $manager->notify('FormExtra', array('type' => 'activation', 'member' => $mem));\r
+\r
+                                               ?>\r
+                                               </tr><tr>\r
+                                                       <td><?php echo _MEMBERS_SETPWD ?></td>\r
+                                                       <td><input type='submit' value='<?php echo _MEMBERS_SETPWD_BTN ?>' /></td>\r
+                                               </tr></table>\r
+\r
+\r
+                                       </form></div>\r
+\r
+                               <?php\r
+\r
+                       }\r
+\r
+               $this->pagefoot();\r
+\r
+       }\r
+\r
+       /**\r
+        * Account activation - set password part\r
+        *\r
+        * @author dekarma\r
+        */\r
+       function action_activatesetpwd() {\r
+               \r
+               $key = postVar('key');\r
+\r
+               // clean up old activation keys\r
+               MEMBER::cleanupActivationTable();\r
+\r
+               // get activation info\r
+               $info = MEMBER::getActivationInfo($key);\r
+\r
+               if (!$info || ($info->type == 'addresschange'))\r
+                       return $this->_showActivationPage($key, _ERROR_ACTIVATE);\r
+\r
+               $mem = MEMBER::createFromId($info->vmember);\r
+\r
+               if (!$mem)\r
+                       return $this->_showActivationPage($key, _ERROR_ACTIVATE);\r
+\r
+               $password          = postVar('password');\r
+               $repeatpassword = postVar('repeatpassword');\r
+\r
+               if ($password != $repeatpassword)\r
+                       return $this->_showActivationPage($key, _ERROR_PASSWORDMISMATCH);\r
+\r
+               if ($password && (strlen($password) < 6))\r
+                       return $this->_showActivationPage($key, _ERROR_PASSWORDTOOSHORT);\r
+\r
+               $pwdvalid = true;\r
+               $pwderror = '';\r
+               global $manager;\r
+               $manager->notify('PrePasswordSet',array('password' => $password, 'errormessage' => &$pwderror, 'valid' => &$pwdvalid));\r
+               if (!$pwdvalid) {\r
+                       return $this->_showActivationPage($key,$pwderror);\r
+               }\r
+\r
+               $error = '';\r
+               $manager->notify('ValidateForm', array('type' => 'activation', 'member' => $mem, 'error' => &$error));\r
+               if ($error != '')\r
+                       return $this->_showActivationPage($key, $error);\r
+\r
+\r
+               // set password\r
+               $mem->setPassword($password);\r
+               $mem->write();\r
+\r
+               // do the activation\r
+               MEMBER::activate($key);\r
+\r
+               $this->pagehead();\r
+                       echo '<h2>',_ACTIVATE_SUCCESS_TITLE,'</h2>';\r
+                       echo '<p>',_ACTIVATE_SUCCESS_TEXT,'</p>';\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * Manage team\r
+        */\r
+       function action_manageteam() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               // check if allowed\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $this->pagehead();\r
+\r
+               echo "<p><a href='index.php?action=blogsettings&amp;blogid=$blogid'>(",_BACK_TO_BLOGSETTINGS,")</a></p>";\r
+\r
+               echo '<h2>' . _TEAM_TITLE . getBlogNameFromID($blogid) . '</h2>';\r
+\r
+               echo '<h3>' . _TEAM_CURRENT . '</h3>';\r
+\r
+\r
+\r
+               $query =  'SELECT tblog, tmember, mname, mrealname, memail, tadmin'\r
+                          . ' FROM '.sql_table('member').', '.sql_table('team')\r
+                          . ' WHERE tmember=mnumber and tblog=' . $blogid;\r
+\r
+               $template['content'] = 'teamlist';\r
+               $template['tabindex'] = 10;\r
+\r
+               $manager->loadClass("ENCAPSULATE");\r
+               $batch =& new BATCH('team');\r
+               $batch->showlist($query, 'table', $template);\r
+\r
+               ?>\r
+                       <h3><?php echo _TEAM_ADDNEW?></h3>\r
+\r
+                       <form method='post' action='index.php'><div>\r
+\r
+                       <input type='hidden' name='action' value='teamaddmember' />\r
+                       <input type='hidden' name='blogid' value='<?php echo  $blogid; ?>' />\r
+                       <?php $manager->addTicketHidden() ?>\r
+\r
+                       <table><tr>\r
+                               <td><?php echo _TEAM_CHOOSEMEMBER?></td>\r
+                               <td><?php                                  // TODO: try to make it so only non-team-members are listed\r
+                                       $query =  'SELECT mname as text, mnumber as value'\r
+                                                  . ' FROM '.sql_table('member');\r
+\r
+                                       $template['name'] = 'memberid';\r
+                                       $template['tabindex'] = 10000;\r
+                                       showlist($query,'select',$template);\r
+                               ?></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _TEAM_ADMIN?><?php help('teamadmin'); ?></td>\r
+                               <td><?php $this->input_yesno('admin',0,10020); ?></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _TEAM_ADD?></td>\r
+                               <td><input type='submit' value='<?php echo _TEAM_ADD_BTN?>' tabindex="10030" /></td>\r
+                       </tr></table>\r
+\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * Add member to team\r
+        */\r
+       function action_teamaddmember() {\r
+               global $member, $manager;\r
+\r
+               $memberid = intPostVar('memberid');\r
+               $blogid = intPostVar('blogid');\r
+               $admin = intPostVar('admin');\r
+\r
+               // check if allowed\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+               if (!$blog->addTeamMember($memberid, $admin))\r
+                       $this->error(_ERROR_ALREADYONTEAM);\r
+\r
+               $this->action_manageteam();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_teamdelete() {\r
+               global $member, $manager;\r
+\r
+               $memberid = intRequestVar('memberid');\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               // check if allowed\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $teammem = MEMBER::createFromID($memberid);\r
+               $blog =& $manager->getBlog($blogid);\r
+\r
+               $this->pagehead();\r
+               ?>\r
+                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
+\r
+                       <p><?php echo _CONFIRMTXT_TEAM1?><b><?php echo  htmlspecialchars($teammem->getDisplayName()) ?></b><?php echo _CONFIRMTXT_TEAM2?><b><?php echo  htmlspecialchars(strip_tags($blog->getName())) ?></b>\r
+                       </p>\r
+\r
+\r
+                       <form method="post" action="index.php"><div>\r
+                       <input type="hidden" name="action" value="teamdeleteconfirm" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+                       <input type="hidden" name="memberid" value="<?php echo  $memberid; ?>" />\r
+                       <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />\r
+                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_teamdeleteconfirm() {\r
+               global $member;\r
+\r
+               $memberid = intRequestVar('memberid');\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               $error = $this->deleteOneTeamMember($blogid, $memberid);\r
+               if ($error)\r
+                       $this->error($error);\r
+\r
+\r
+               $this->action_manageteam();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function deleteOneTeamMember($blogid, $memberid) {\r
+               global $member, $manager;\r
+\r
+               $blogid = intval($blogid);\r
+               $memberid = intval($memberid);\r
+\r
+               // check if allowed\r
+               if (!$member->blogAdminRights($blogid))\r
+                       return _ERROR_DISALLOWED;\r
+\r
+               // check if: - there remains at least one blog admin\r
+               //                 - (there remains at least one team member)\r
+               $tmem = MEMBER::createFromID($memberid);\r
+\r
+               $manager->notify('PreDeleteTeamMember', array('member' => &$tmem, 'blogid' => $blogid));\r
+\r
+               if ($tmem->isBlogAdmin($blogid)) {\r
+                       // check if there are more blog members left and at least one admin\r
+                       // (check for at least two admins before deletion)\r
+                       $query = 'SELECT * FROM '.sql_table('team') . ' WHERE tblog='.$blogid.' and tadmin=1';\r
+                       $r = sql_query($query);\r
+                       if (sql_num_rows($r) < 2)\r
+                               return _ERROR_ATLEASTONEBLOGADMIN;\r
+               }\r
+\r
+               $query = 'DELETE FROM '.sql_table('team')." WHERE tblog=$blogid and tmember=$memberid";\r
+               sql_query($query);\r
+\r
+               $manager->notify('PostDeleteTeamMember', array('member' => &$tmem, 'blogid' => $blogid));\r
+\r
+               return '';\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_teamchangeadmin() {\r
+               global $member;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+               $memberid = intRequestVar('memberid');\r
+\r
+               // check if allowed\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $mem = MEMBER::createFromID($memberid);\r
+\r
+               // don't allow when there is only one admin at this moment\r
+               if ($mem->isBlogAdmin($blogid)) {\r
+                       $r = sql_query('SELECT * FROM '.sql_table('team') . " WHERE tblog=$blogid and tadmin=1");\r
+                       if (sql_num_rows($r) == 1)\r
+                               $this->error(_ERROR_ATLEASTONEBLOGADMIN);\r
+               }\r
+\r
+               if ($mem->isBlogAdmin($blogid))\r
+                       $newval = 0;\r
+               else\r
+                       $newval = 1;\r
+\r
+               $query = 'UPDATE '.sql_table('team') ." SET tadmin=$newval WHERE tblog=$blogid and tmember=$memberid";\r
+               sql_query($query);\r
+\r
+               // only show manageteam if member did not change its own admin privileges\r
+               if ($member->isBlogAdmin($blogid))\r
+                       $this->action_manageteam();\r
+               else\r
+                       $this->action_overview(_MSG_ADMINCHANGED);\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_blogsettings() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               // check if allowed\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+\r
+               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';\r
+               $this->pagehead($extrahead);\r
+\r
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
+               ?>\r
+               <h2><?php echo _EBLOG_TITLE?>: '<?php echo $this->bloglink($blog)?>'</h2>\r
+\r
+               <h3><?php echo _EBLOG_TEAM_TITLE?></h3>\r
+\r
+               <p><?php echo _EBLOG_CURRENT_TEAM_MEMBER; ?>\r
+               <?php\r
+                       $res = sql_query('SELECT mname, mrealname FROM ' . sql_table('member') . ',' . sql_table('team') . ' WHERE mnumber=tmember AND tblog=' . intval($blogid));\r
+                       $aMemberNames = array();\r
+                       while ($o = sql_fetch_object($res))\r
+                               array_push($aMemberNames, htmlspecialchars($o->mname) . ' (' . htmlspecialchars($o->mrealname). ')');\r
+                       echo implode(',', $aMemberNames);\r
+               ?>\r
+               </p>\r
+\r
+\r
+\r
+               <p>\r
+               <a href="index.php?action=manageteam&amp;blogid=<?php echo $blogid?>"><?php echo _EBLOG_TEAM_TEXT?></a>\r
+               </p>\r
+\r
+               <h3><?php echo _EBLOG_SETTINGS_TITLE?></h3>\r
+\r
+               <form method="post" action="index.php"><div>\r
+\r
+               <input type="hidden" name="action" value="blogsettingsupdate" />\r
+               <?php $manager->addTicketHidden() ?>\r
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />\r
+               <table><tr>\r
+                       <td><?php echo _EBLOG_NAME?></td>\r
+                       <td><input name="name" tabindex="10" size="40" maxlength="60" value="<?php echo  htmlspecialchars($blog->getName()) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_SHORTNAME?> <?php help('shortblogname'); ?>\r
+                               <?php echo _EBLOG_SHORTNAME_EXTRA?>\r
+                       </td>\r
+                       <td><input name="shortname" tabindex="20" maxlength="15" size="15" value="<?php echo  htmlspecialchars($blog->getShortName()) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_DESC?></td>\r
+                       <td><input name="desc" tabindex="30" maxlength="200" size="40" value="<?php echo  htmlspecialchars($blog->getDescription()) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_URL?></td>\r
+                       <td><input name="url" tabindex="40" size="40" maxlength="100" value="<?php echo  htmlspecialchars($blog->getURL()) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_DEFSKIN?>\r
+                               <?php help('blogdefaultskin'); ?>\r
+                       </td>\r
+                       <td>\r
+                               <?php\r
+                                       $query =  'SELECT sdname as text, sdnumber as value'\r
+                                                  . ' FROM '.sql_table('skin_desc');\r
+                                       $template['name'] = 'defskin';\r
+                                       $template['selected'] = $blog->getDefaultSkin();\r
+                                       $template['tabindex'] = 50;\r
+                                       showlist($query,'select',$template);\r
+                               ?>\r
+\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_LINEBREAKS?> <?php help('convertbreaks'); ?>\r
+                       </td>\r
+                       <td><?php $this->input_yesno('convertbreaks',$blog->convertBreaks(),55); ?></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_ALLOWPASTPOSTING?> <?php help('allowpastposting'); ?>\r
+                       </td>\r
+                       <td><?php $this->input_yesno('allowpastposting',$blog->allowPastPosting(),57); ?></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_DISABLECOMMENTS?>\r
+                       </td>\r
+                       <td><?php $this->input_yesno('comments',$blog->commentsEnabled(),60); ?></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_ANONYMOUS?>\r
+                       </td>\r
+                       <td><?php $this->input_yesno('public',$blog->isPublic(),70); ?></td>\r
+               </tr><tr>\r
+       <td><?php echo _EBLOG_REQUIREDEMAIL?>\r
+                </td>\r
+                <td><?php $this->input_yesno('reqemail',$blog->emailRequired(),72); ?></td>\r
+         </tr><tr>\r
+                       <td><?php echo _EBLOG_NOTIFY?> <?php help('blognotify'); ?></td>\r
+                       <td><input name="notify" tabindex="80" maxlength="60" size="40" value="<?php echo  htmlspecialchars($blog->getNotifyAddress()); ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_NOTIFY_ON?></td>\r
+                       <td>\r
+                               <input name="notifyComment" value="3" type="checkbox" tabindex="81" id="notifyComment"\r
+                                       <?php if  ($blog->notifyOnComment()) echo "checked='checked'" ?>\r
+                               /><label for="notifyComment"><?php echo _EBLOG_NOTIFY_COMMENT?></label>\r
+                               <br />\r
+                               <input name="notifyVote" value="5" type="checkbox" tabindex="82" id="notifyVote"\r
+                                       <?php if  ($blog->notifyOnVote()) echo "checked='checked'" ?>\r
+                               /><label for="notifyVote"><?php echo _EBLOG_NOTIFY_KARMA?></label>\r
+                               <br />\r
+                               <input name="notifyNewItem" value="7" type="checkbox" tabindex="83" id="notifyNewItem"\r
+                                       <?php if  ($blog->notifyOnNewItem()) echo "checked='checked'" ?>\r
+                               /><label for="notifyNewItem"><?php echo _EBLOG_NOTIFY_ITEM?></label>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_MAXCOMMENTS?> <?php help('blogmaxcomments'); ?></td>\r
+                       <td><input name="maxcomments" tabindex="90" size="3" value="<?php echo  htmlspecialchars($blog->getMaxComments()); ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_UPDATE?> <?php help('blogupdatefile'); ?></td>\r
+                       <td><input name="update" tabindex="100" size="40" maxlength="60" value="<?php echo  htmlspecialchars($blog->getUpdateFile()) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_DEFCAT?></td>\r
+                       <td>\r
+                               <?php\r
+                                       $query =  'SELECT cname as text, catid as value'\r
+                                                  . ' FROM '.sql_table('category')\r
+                                                  . ' WHERE cblog=' . $blog->getID();\r
+                                       $template['name'] = 'defcat';\r
+                                       $template['selected'] = $blog->getDefaultCategory();\r
+                                       $template['tabindex'] = 110;\r
+                                       showlist($query,'select',$template);\r
+                               ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_OFFSET?> <?php help('blogtimeoffset'); ?>\r
+                               <br /><?php echo _EBLOG_STIME?> <b><?php echo  strftime("%H:%M",time()); ?></b>\r
+                               <br /><?php echo _EBLOG_BTIME?> <b><?php echo  strftime("%H:%M",$blog->getCorrectTime()); ?></b>\r
+                               </td>\r
+                       <td><input name="timeoffset" tabindex="120" size="3" value="<?php echo  htmlspecialchars($blog->getTimeOffset()); ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_SEARCH?> <?php help('blogsearchable'); ?></td>\r
+                       <td><?php $this->input_yesno('searchable',$blog->getSearchable(),122); ?></td>\r
+               </tr>\r
+               <?php\r
+                       // plugin options\r
+                       $this->_insertPluginOptions('blog',$blogid);\r
+               ?>\r
+               <tr>\r
+                       <th colspan="2"><?php echo _EBLOG_CHANGE?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_CHANGE?></td>\r
+                       <td><input type="submit" tabindex="130" value="<?php echo _EBLOG_CHANGE_BTN?>" onclick="return checkSubmit();" /></td>\r
+               </tr></table>\r
+\r
+               </div></form>\r
+\r
+               <h3><?php echo _EBLOG_CAT_TITLE?></h3>\r
+\r
+\r
+               <?php\r
+               $query = 'SELECT * FROM '.sql_table('category').' WHERE cblog='.$blog->getID().' ORDER BY cname';\r
+               $template['content'] = 'categorylist';\r
+               $template['tabindex'] = 200;\r
+\r
+               $manager->loadClass("ENCAPSULATE");\r
+               $batch =& new BATCH('category');\r
+               $batch->showlist($query,'table',$template);\r
+\r
+               ?>\r
+\r
+\r
+               <form action="index.php" method="post"><div>\r
+               <input name="action" value="categorynew" type="hidden" />\r
+               <?php $manager->addTicketHidden() ?>\r
+               <input name="blogid" value="<?php echo $blog->getID()?>" type="hidden" />\r
+\r
+               <table><tr>\r
+                       <th colspan="2"><?php echo _EBLOG_CAT_CREATE?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_CAT_NAME?></td>\r
+                       <td><input name="cname" size="40" maxlength="40" tabindex="300" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_CAT_DESC?></td>\r
+                       <td><input name="cdesc" size="40" maxlength="200" tabindex="310" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_CAT_CREATE?></td>\r
+                       <td><input type="submit" value="<?php echo _EBLOG_CAT_CREATE?>" tabindex="320" /></td>\r
+               </tr></table>\r
+\r
+               </div></form>\r
+\r
+               <?php\r
+\r
+                       echo '<h3>',_PLUGINS_EXTRA,'</h3>';\r
+\r
+                       $manager->notify(\r
+                               'BlogSettingsFormExtras',\r
+                               array(\r
+                                       'blog' => &$blog\r
+                               )\r
+                       );\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_categorynew() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $cname = postVar('cname');\r
+               $cdesc = postVar('cdesc');\r
+\r
+               if (!isValidCategoryName($cname))\r
+                       $this->error(_ERROR_BADCATEGORYNAME);\r
+\r
+               $query = 'SELECT * FROM '.sql_table('category') . ' WHERE cname=\'' . addslashes($cname).'\' and cblog=' . intval($blogid);\r
+               $res = sql_query($query);\r
+               if (sql_num_rows($res) > 0)\r
+                       $this->error(_ERROR_DUPCATEGORYNAME);\r
+\r
+               $blog      =& $manager->getBlog($blogid);\r
+               $newCatID   =  $blog->createNewCategory($cname, $cdesc);\r
+\r
+               $this->action_blogsettings();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_categoryedit($catid = '', $blogid = '', $desturl = '') {\r
+               global $member, $manager;\r
+\r
+               if ($blogid == '')\r
+                       $blogid = intGetVar('blogid');\r
+               else\r
+                       $blogid = intval($blogid);\r
+               if ($catid == '')\r
+                       $catid = intGetVar('catid');\r
+               else\r
+                       $catid = intval($catid);\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $res = sql_query('SELECT * FROM '.sql_table('category')." WHERE cblog=$blogid AND catid=$catid");\r
+               $obj = sql_fetch_object($res);\r
+\r
+               $cname = $obj->cname;\r
+               $cdesc = $obj->cdesc;\r
+\r
+               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';\r
+               $this->pagehead($extrahead);\r
+\r
+               echo "<p><a href='index.php?action=blogsettings&amp;blogid=$blogid'>(",_BACK_TO_BLOGSETTINGS,")</a></p>";\r
+\r
+               ?>\r
+               <h2><?php echo _EBLOG_CAT_UPDATE?> '<?php echo htmlspecialchars($cname)?>'</h2>\r
+               <form method='post' action='index.php'><div>\r
+               <input name="blogid" type="hidden" value="<?php echo $blogid?>" />\r
+               <input name="catid" type="hidden" value="<?php echo $catid?>" />\r
+               <input name="desturl" type="hidden" value="<?php echo htmlspecialchars($desturl) ?>" />\r
+               <input name="action" type="hidden" value="categoryupdate" />\r
+               <?php $manager->addTicketHidden(); ?>\r
+\r
+               <table><tr>\r
+                       <th colspan="2"><?php echo _EBLOG_CAT_UPDATE ?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_CAT_NAME?></td>\r
+                       <td><input type="text" name="cname" value="<?php echo htmlspecialchars($cname)?>" size="40" maxlength="40" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_CAT_DESC?></td>\r
+                       <td><input type="text" name="cdesc" value="<?php echo htmlspecialchars($cdesc)?>" size="40" maxlength="200" /></td>\r
+               </tr>\r
+               <?php\r
+                       // insert plugin options\r
+                       $this->_insertPluginOptions('category',$catid);\r
+               ?>\r
+               <tr>\r
+                       <th colspan="2"><?php echo _EBLOG_CAT_UPDATE ?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_CAT_UPDATE?></td>\r
+                       <td><input type="submit" value="<?php echo _EBLOG_CAT_UPDATE_BTN?>" /></td>\r
+               </tr></table>\r
+\r
+               </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_categoryupdate() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intPostVar('blogid');\r
+               $catid = intPostVar('catid');\r
+               $cname = postVar('cname');\r
+               $cdesc = postVar('cdesc');\r
+               $desturl = postVar('desturl');\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               if (!isValidCategoryName($cname))\r
+                       $this->error(_ERROR_BADCATEGORYNAME);\r
+\r
+               $query = 'SELECT * FROM '.sql_table('category').' WHERE cname=\'' . addslashes($cname).'\' and cblog=' . intval($blogid) . " and not(catid=$catid)";\r
+               $res = sql_query($query);\r
+               if (sql_num_rows($res) > 0)\r
+                       $this->error(_ERROR_DUPCATEGORYNAME);\r
+\r
+               $query =  'UPDATE '.sql_table('category').' SET'\r
+                          . " cname='" . addslashes($cname) . "',"\r
+                          . " cdesc='" . addslashes($cdesc) . "'"\r
+                          . " WHERE catid=" . $catid;\r
+\r
+               sql_query($query);\r
+\r
+               // store plugin options\r
+               $aOptions = requestArray('plugoption');\r
+               NucleusPlugin::_applyPluginOptions($aOptions);\r
+               $manager->notify('PostPluginOptionsUpdate',array('context' => 'category', 'catid' => $catid));\r
+\r
+\r
+               if ($desturl) {\r
+                       redirect($desturl);\r
+                       exit;\r
+               } else {\r
+                       $this->action_blogsettings();\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_categorydelete() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+               $catid = intRequestVar('catid');\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+\r
+               // check if the category is valid\r
+               if (!$blog->isValidCategory($catid))\r
+                       $this->error(_ERROR_NOSUCHCATEGORY);\r
+\r
+               // don't allow deletion of default category\r
+               if ($blog->getDefaultCategory() == $catid)\r
+                       $this->error(_ERROR_DELETEDEFCATEGORY);\r
+\r
+               // check if catid is the only category left for blogid\r
+               $query = 'SELECT catid FROM '.sql_table('category').' WHERE cblog=' . $blogid;\r
+               $res = sql_query($query);\r
+               if (sql_num_rows($res) == 1)\r
+                       $this->error(_ERROR_DELETELASTCATEGORY);\r
+\r
+\r
+               $this->pagehead();\r
+               ?>\r
+                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
+\r
+                       <div>\r
+                       <?php echo _CONFIRMTXT_CATEGORY?><b><?php echo  htmlspecialchars($blog->getCategoryName($catid))?></b>\r
+                       </div>\r
+\r
+                       <form method="post" action="index.php"><div>\r
+                       <input type="hidden" name="action" value="categorydeleteconfirm" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+                       <input type="hidden" name="blogid" value="<?php echo $blogid?>" />\r
+                       <input type="hidden" name="catid" value="<?php echo $catid?>" />\r
+                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_categorydeleteconfirm() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+               $catid = intRequestVar('catid');\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $error = $this->deleteOneCategory($catid);\r
+               if ($error)\r
+                       $this->error($error);\r
+\r
+               $this->action_blogsettings();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function deleteOneCategory($catid) {\r
+               global $manager, $member;\r
+\r
+               $catid = intval($catid);\r
+\r
+               $blogid = getBlogIDFromCatID($catid);\r
+\r
+               if (!$member->blogAdminRights($blogid))\r
+                       return ERROR_DISALLOWED;\r
+\r
+               // get blog\r
+               $blog =& $manager->getBlog($blogid);\r
+\r
+               // check if the category is valid\r
+               if (!$blog || !$blog->isValidCategory($catid))\r
+                       return _ERROR_NOSUCHCATEGORY;\r
+\r
+               $destcatid = $blog->getDefaultCategory();\r
+\r
+               // don't allow deletion of default category\r
+               if ($blog->getDefaultCategory() == $catid)\r
+                       return _ERROR_DELETEDEFCATEGORY;\r
+\r
+               // check if catid is the only category left for blogid\r
+               $query = 'SELECT catid FROM '.sql_table('category').' WHERE cblog=' . $blogid;\r
+               $res = sql_query($query);\r
+               if (sql_num_rows($res) == 1)\r
+                       return _ERROR_DELETELASTCATEGORY;\r
+\r
+               $manager->notify('PreDeleteCategory', array('catid' => $catid));\r
+\r
+               // change category for all items to the default category\r
+               $query = 'UPDATE '.sql_table('item')." SET icat=$destcatid WHERE icat=$catid";\r
+               sql_query($query);\r
+\r
+               // delete all associated plugin options\r
+               NucleusPlugin::_deleteOptionValues('category', $catid);\r
+\r
+               // delete category\r
+               $query = 'DELETE FROM '.sql_table('category').' WHERE catid=' .$catid;\r
+               sql_query($query);\r
+\r
+               $manager->notify('PostDeleteCategory', array('catid' => $catid));\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function moveOneCategory($catid, $destblogid) {\r
+               global $manager, $member;\r
+\r
+               $catid = intval($catid);\r
+               $destblogid = intval($destblogid);\r
+\r
+               $blogid = getBlogIDFromCatID($catid);\r
+\r
+               // mover should have admin rights on both blogs\r
+               if (!$member->blogAdminRights($blogid))\r
+                       return _ERROR_DISALLOWED;\r
+               if (!$member->blogAdminRights($destblogid))\r
+                       return _ERROR_DISALLOWED;\r
+\r
+               // cannot move to self\r
+               if ($blogid == $destblogid)\r
+                       return _ERROR_MOVETOSELF;\r
+\r
+               // get blogs\r
+               $blog =& $manager->getBlog($blogid);\r
+               $destblog =& $manager->getBlog($destblogid);\r
+\r
+               // check if the category is valid\r
+               if (!$blog || !$blog->isValidCategory($catid))\r
+                       return _ERROR_NOSUCHCATEGORY;\r
+\r
+               // don't allow default category to be moved\r
+               if ($blog->getDefaultCategory() == $catid)\r
+                       return _ERROR_MOVEDEFCATEGORY;\r
+\r
+               $manager->notify(\r
+                       'PreMoveCategory',\r
+                       array(\r
+                               'catid' => &$catid,\r
+                               'sourceblog' => &$blog,\r
+                               'destblog' => &$destblog\r
+                       )\r
+               );\r
+\r
+               // update comments table (cblog)\r
+               $query = 'SELECT inumber FROM '.sql_table('item').' WHERE icat='.$catid;\r
+               $items = sql_query($query);\r
+               while ($oItem = sql_fetch_object($items)) {\r
+                       sql_query('UPDATE '.sql_table('comment').' SET cblog='.$destblogid.' WHERE citem='.$oItem->inumber);\r
+               }\r
+\r
+               // update items (iblog)\r
+               $query = 'UPDATE '.sql_table('item').' SET iblog='.$destblogid.' WHERE icat='.$catid;\r
+               sql_query($query);\r
+\r
+               // move category\r
+               $query = 'UPDATE '.sql_table('category').' SET cblog='.$destblogid.' WHERE catid='.$catid;\r
+               sql_query($query);\r
+\r
+               $manager->notify(\r
+                       'PostMoveCategory',\r
+                       array(\r
+                               'catid' => &$catid,\r
+                               'sourceblog' => &$blog,\r
+                               'destblog' => $destblog\r
+                       )\r
+               );\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_blogsettingsupdate() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+\r
+               $notify          = trim(postVar('notify'));\r
+               $shortname        = trim(postVar('shortname'));\r
+               $updatefile      = trim(postVar('update'));\r
+\r
+               $notifyComment  = intPostVar('notifyComment');\r
+               $notifyVote      = intPostVar('notifyVote');\r
+               $notifyNewItem  = intPostVar('notifyNewItem');\r
+\r
+               if ($notifyComment == 0)        $notifyComment = 1;\r
+               if ($notifyVote == 0)      $notifyVote = 1;\r
+               if ($notifyNewItem == 0)        $notifyNewItem = 1;\r
+\r
+               $notifyType = $notifyComment * $notifyVote * $notifyNewItem;\r
+\r
+\r
+               if ($notify) {\r
+                       $not =& new NOTIFICATION($notify);\r
+                       if (!$not->validAddresses())\r
+                               $this->error(_ERROR_BADNOTIFY);\r
+\r
+               }\r
+\r
+               if (!isValidShortName($shortname))\r
+                       $this->error(_ERROR_BADSHORTBLOGNAME);\r
+\r
+               if (($blog->getShortName() != $shortname) && $manager->existsBlog($shortname))\r
+                       $this->error(_ERROR_DUPSHORTBLOGNAME);\r
+\r
+               // check if update file is writable\r
+               if ($updatefile && !is_writeable($updatefile))\r
+                       $this->error(_ERROR_UPDATEFILE);\r
+\r
+               $blog->setName(trim(postVar('name')));\r
+               $blog->setShortName($shortname);\r
+               $blog->setNotifyAddress($notify);\r
+               $blog->setNotifyType($notifyType);\r
+               $blog->setMaxComments(postVar('maxcomments'));\r
+               $blog->setCommentsEnabled(postVar('comments'));\r
+               $blog->setTimeOffset(postVar('timeoffset'));\r
+               $blog->setUpdateFile($updatefile);\r
+               $blog->setURL(trim(postVar('url')));\r
+               $blog->setDefaultSkin(intPostVar('defskin'));\r
+               $blog->setDescription(trim(postVar('desc')));\r
+               $blog->setPublic(postVar('public'));\r
+               $blog->setConvertBreaks(intPostVar('convertbreaks'));\r
+               $blog->setAllowPastPosting(intPostVar('allowpastposting'));\r
+               $blog->setDefaultCategory(intPostVar('defcat'));\r
+               $blog->setSearchable(intPostVar('searchable'));\r
+               $blog->setEmailRequired(intPostVar('reqemail'));\r
+\r
+               $blog->writeSettings();\r
+\r
+               // store plugin options\r
+               $aOptions = requestArray('plugoption');\r
+               NucleusPlugin::_applyPluginOptions($aOptions);\r
+               $manager->notify('PostPluginOptionsUpdate',array('context' => 'blog', 'blogid' => $blogid, 'blog' => &$blog));\r
+\r
+\r
+               $this->action_overview(_MSG_SETTINGSCHANGED);\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_deleteblog() {\r
+               global $member, $CONF, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               // check if blog is default blog\r
+               if ($CONF['DefaultBlog'] == $blogid)\r
+                       $this->error(_ERROR_DELDEFBLOG);\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+\r
+               $this->pagehead();\r
+               ?>\r
+                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
+\r
+                       <p><?php echo _WARNINGTXT_BLOGDEL?>\r
+                       </p>\r
+\r
+                       <div>\r
+                       <?php echo _CONFIRMTXT_BLOG?><b><?php echo  htmlspecialchars($blog->getName())?></b>\r
+                       </div>\r
+\r
+                       <form method="post" action="index.php"><div>\r
+                       <input type="hidden" name="action" value="deleteblogconfirm" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+                       <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />\r
+                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_deleteblogconfirm() {\r
+               global $member, $CONF, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               $manager->notify('PreDeleteBlog', array('blogid' => $blogid));\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               // check if blog is default blog\r
+               if ($CONF['DefaultBlog'] == $blogid)\r
+                       $this->error(_ERROR_DELDEFBLOG);\r
+\r
+               // delete all comments\r
+               $query = 'DELETE FROM '.sql_table('comment').' WHERE cblog='.$blogid;\r
+               sql_query($query);\r
+\r
+               // delete all items\r
+               $query = 'DELETE FROM '.sql_table('item').' WHERE iblog='.$blogid;\r
+               sql_query($query);\r
+\r
+               // delete all team members\r
+               $query = 'DELETE FROM '.sql_table('team').' WHERE tblog='.$blogid;\r
+               sql_query($query);\r
+\r
+               // delete all bans\r
+               $query = 'DELETE FROM '.sql_table('ban').' WHERE blogid='.$blogid;\r
+               sql_query($query);\r
+\r
+               // delete all categories\r
+               $query = 'DELETE FROM '.sql_table('category').' WHERE cblog='.$blogid;\r
+               sql_query($query);\r
+\r
+               // delete all associated plugin options\r
+               NucleusPlugin::_deleteOptionValues('blog', $blogid);\r
+\r
+               // delete the blog itself\r
+               $query = 'DELETE FROM '.sql_table('blog').' WHERE bnumber='.$blogid;\r
+               sql_query($query);\r
+\r
+               $manager->notify('PostDeleteBlog', array('blogid' => $blogid));\r
+\r
+               $this->action_overview(_DELETED_BLOG);\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_memberdelete() {\r
+               global $member, $manager;\r
+\r
+               $memberid = intRequestVar('memberid');\r
+\r
+               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();\r
+\r
+               $mem = MEMBER::createFromID($memberid);\r
+\r
+               $this->pagehead();\r
+               ?>\r
+                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
+\r
+                       <p><?php echo _CONFIRMTXT_MEMBER?><b><?php echo htmlspecialchars($mem->getDisplayName()) ?></b>\r
+                       </p>\r
+\r
+                       <p>\r
+                       <?php echo _WARNINGTXT_NOTDELMEDIAFILES ?>\r
+                       </p>\r
+\r
+                       <form method="post" action="index.php"><div>\r
+                       <input type="hidden" name="action" value="memberdeleteconfirm" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+                       <input type="hidden" name="memberid" value="<?php echo  $memberid; ?>" />\r
+                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_memberdeleteconfirm() {\r
+               global $member;\r
+\r
+               $memberid = intRequestVar('memberid');\r
+\r
+               ($member->getID() == $memberid) or $member->isAdmin() or $this->disallow();\r
+\r
+               $error = $this->deleteOneMember($memberid);\r
+               if ($error)\r
+                       $this->error($error);\r
+\r
+               if ($member->isAdmin())\r
+                       $this->action_usermanagement();\r
+               else\r
+                       $this->action_overview(_DELETED_MEMBER);\r
+       }\r
+\r
+       /**\r
+        * @static\r
+        * @todo document this\r
+        */\r
+       function deleteOneMember($memberid) {\r
+               global $manager;\r
+\r
+               $memberid = intval($memberid);\r
+               $mem = MEMBER::createFromID($memberid);\r
+\r
+               if (!$mem->canBeDeleted())\r
+                       return _ERROR_DELETEMEMBER;\r
+\r
+               $manager->notify('PreDeleteMember', array('member' => &$mem));\r
+\r
+               /* unlink comments from memberid */\r
+               if ($memberid) {\r
+                       $query = 'UPDATE ' . sql_table('comment') . ' SET cmember="0", cuser="'. addslashes($mem->getDisplayName())\r
+                                  .'" WHERE cmember='.$memberid;\r
+                       sql_query($query);\r
+               }\r
+\r
+               $query = 'DELETE FROM '.sql_table('member').' WHERE mnumber='.$memberid;\r
+               sql_query($query);\r
+\r
+               $query = 'DELETE FROM '.sql_table('team').' WHERE tmember='.$memberid;\r
+               sql_query($query);\r
+\r
+               $query = 'DELETE FROM '.sql_table('activation').' WHERE vmember='.$memberid;\r
+               sql_query($query);\r
+\r
+               // delete all associated plugin options\r
+               NucleusPlugin::_deleteOptionValues('member', $memberid);\r
+\r
+               $manager->notify('PostDeleteMember', array('member' => &$mem));\r
+\r
+               return '';\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_createnewlog() {\r
+               global $member, $CONF, $manager;\r
+\r
+               // Only Super-Admins can do this\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
+               ?>\r
+               <h2><?php echo _EBLOG_CREATE_TITLE?></h2>\r
+\r
+               <h3><?php echo _ADMIN_NOTABILIA ?></h3>\r
+\r
+               <p><?php echo _ADMIN_PLEASE_READ ?></p>\r
+\r
+               <p><?php echo _ADMIN_HOW_TO_ACCESS ?></p>\r
+\r
+               <ol>\r
+                       <li><?php echo _ADMIN_SIMPLE_WAY ?></li>\r
+                       <li><?php echo _ADMIN_ADVANCED_WAY ?></li>\r
+               </ol>\r
+\r
+               <h3><?php echo _ADMIN_HOW_TO_CREATE ?></h3>\r
+\r
+               <p>\r
+               <?php echo _EBLOG_CREATE_TEXT?>\r
+               </p>\r
+\r
+               <form method="post" action="index.php"><div>\r
+\r
+               <input type="hidden" name="action" value="addnewlog" />\r
+               <?php $manager->addTicketHidden() ?>\r
+\r
+\r
+               <table><tr>\r
+                       <td><?php echo _EBLOG_NAME?></td>\r
+                       <td><input name="name" tabindex="10" size="40" maxlength="60" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_SHORTNAME?>\r
+                               <?php help('shortblogname'); ?>\r
+                       </td>\r
+                       <td><input name="shortname" tabindex="20" maxlength="15" size="15" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_DESC?></td>\r
+                       <td><input name="desc" tabindex="30" maxlength="200" size="40" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_DEFSKIN?>\r
+                               <?php help('blogdefaultskin'); ?>\r
+                       </td>\r
+                       <td>\r
+                               <?php\r
+                                       $query =  'SELECT sdname as text, sdnumber as value'\r
+                                                  . ' FROM '.sql_table('skin_desc');\r
+                                       $template['name'] = 'defskin';\r
+                                       $template['tabindex'] = 50;\r
+                                       $template['selected'] = $CONF['BaseSkin'];  // set default selected skin to be globally defined base skin\r
+                                       showlist($query,'select',$template);\r
+                               ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_OFFSET?>\r
+                               <?php help('blogtimeoffset'); ?>\r
+                               <br /><?php echo _EBLOG_STIME?> <b><?php echo  strftime("%H:%M",time()); ?></b>\r
+                       </td>\r
+                       <td><input name="timeoffset" tabindex="110" size="3" value="0" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_ADMIN?>\r
+                               <?php help('teamadmin'); ?>\r
+                       </td>\r
+                       <td><?php echo _EBLOG_ADMIN_MSG?></td>\r
+               </tr><tr>\r
+                       <td><?php echo _EBLOG_CREATE?></td>\r
+                       <td><input type="submit" tabindex="120" value="<?php echo _EBLOG_CREATE_BTN?>" onclick="return checkSubmit();" /></td>\r
+               </tr></table>\r
+\r
+               </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_addnewlog() {\r
+               global $member, $manager, $CONF;\r
+\r
+               // Only Super-Admins can do this\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $bname            = trim(postVar('name'));\r
+               $bshortname      = trim(postVar('shortname'));\r
+               $btimeoffset    = postVar('timeoffset');\r
+               $bdesc            = trim(postVar('desc'));\r
+               $bdefskin          = postVar('defskin');\r
+\r
+               if (!isValidShortName($bshortname))\r
+                       $this->error(_ERROR_BADSHORTBLOGNAME);\r
+\r
+               if ($manager->existsBlog($bshortname))\r
+                       $this->error(_ERROR_DUPSHORTBLOGNAME);\r
+\r
+               $manager->notify(\r
+                       'PreAddBlog',\r
+                       array(\r
+                               'name'          => &$bname,\r
+                               'shortname'   => &$bshortname,\r
+                               'timeoffset'  => &$btimeoffset,\r
+                               'description' => &$bdesc,\r
+                               'defaultskin' => &$bdefskin\r
+                       )\r
+               );\r
+\r
+\r
+               // add slashes for sql queries\r
+               $bname     = addslashes($bname);\r
+               $bshortname  = addslashes($bshortname);\r
+               $btimeoffset = addslashes($btimeoffset);\r
+               $bdesc     = addslashes($bdesc);\r
+               $bdefskin       = addslashes($bdefskin);\r
+\r
+               // create blog\r
+               $query = 'INSERT INTO '.sql_table('blog')." (bname, bshortname, bdesc, btimeoffset, bdefskin) VALUES ('$bname', '$bshortname', '$bdesc', '$btimeoffset', '$bdefskin')";\r
+               sql_query($query);\r
+               $blogid = sql_insert_id();\r
+               $blog   =& $manager->getBlog($blogid);\r
+\r
+               // create new category\r
+\r
+\r
+               $sql = 'INSERT INTO %s (cblog, cname, cdesc) VALUES (%d, "%s", "%s")';\r
+               sql_query(sprintf($sql, sql_table('category'), $blogid, _EBLOGDEFAULTCATEGORY_NAME, _EBLOGDEFAULTCATEGORY_DESC));\r
+\r
+//             sql_query('INSERT INTO '.sql_table('category')." (cblog, cname, cdesc) VALUES ($blogid, _EBLOGDEFAULTCATEGORY_NAME, _EBLOGDEFAULTCATEGORY_DESC)");\r
+               $catid = sql_insert_id();\r
+\r
+               // set as default category\r
+               $blog->setDefaultCategory($catid);\r
+               $blog->writeSettings();\r
+\r
+               // create team member\r
+               $memberid = $member->getID();\r
+               $query = 'INSERT INTO '.sql_table('team')." (tmember, tblog, tadmin) VALUES ($memberid, $blogid, 1)";\r
+               sql_query($query);\r
+\r
+\r
+\r
+\r
+\r
+\r
+               $blog->additem($blog->getDefaultCategory(),_EBLOG_FIRSTITEM_TITLE,_EBLOG_FIRSTITEM_BODY,'',$blogid, $memberid,$blog->getCorrectTime(),0,0,0);\r
+\r
+\r
+               $manager->notify(\r
+                       'PostAddBlog',\r
+                       array(\r
+                               'blog' => &$blog\r
+                       )\r
+               );\r
+\r
+               $manager->notify(\r
+                       'PostAddCategory',\r
+                       array(\r
+                               'blog'          => &$blog,\r
+                               'name'          => _EBLOGDEFAULTCATEGORY_NAME,\r
+                               'description' => _EBLOGDEFAULTCATEGORY_DESC,\r
+                               'catid'    => $catid\r
+                       )\r
+               );\r
+\r
+               $this->pagehead();\r
+               ?>\r
+               <h2><?php echo _BLOGCREATED_TITLE ?></h2>\r
+\r
+               <p><?php echo sprintf(_BLOGCREATED_ADDEDTXT, htmlspecialchars($bname)) ?></p>\r
+\r
+               <ol>\r
+                       <li><a href="#index_php"><?php echo sprintf(_BLOGCREATED_SIMPLEWAY, htmlspecialchars($bshortname)) ?></a></li>\r
+                       <li><a href="#skins"><?php echo _BLOGCREATED_ADVANCEDWAY ?></a></li>\r
+               </ol>\r
+\r
+               <h3><a id="index_php"><?php echo sprintf(_BLOGCREATED_SIMPLEDESC1, htmlspecialchars($bshortname)) ?></a></h3>\r
+\r
+               <p><?php echo sprintf(_BLOGCREATED_SIMPLEDESC2, htmlspecialchars($bshortname)) ?></p>\r
+<pre><code>&lt;?php\r
+\r
+$CONF['Self'] = '<b><?php echo htmlspecialchars($bshortname)?>.php</b>';\r
+\r
+include('<i>./config.php</i>');\r
+\r
+selectBlog('<b><?php echo htmlspecialchars($bshortname)?></b>');\r
+selector();\r
+\r
+?&gt;</code></pre>\r
+\r
+               <p><?php echo _BLOGCREATED_SIMPLEDESC3 ?></p>\r
+\r
+               <p><?php echo _BLOGCREATED_SIMPLEDESC4 ?></p>\r
+\r
+               <form action="index.php" method="post"><div>\r
+                       <input type="hidden" name="action" value="addnewlog2" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+                       <input type="hidden" name="blogid" value="<?php echo intval($blogid)?>" />\r
+                       <table><tr>\r
+                               <td><?php echo _EBLOG_URL?></td>\r
+                               <td><input name="url" maxlength="100" size="40" value="<?php echo htmlspecialchars($CONF['IndexURL'].$bshortname.'.php')?>" /></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _EBLOG_CREATE?></td>\r
+                               <td><input type="submit" value="<?php echo _EBLOG_CREATE_BTN?>" onclick="return checkSubmit();" /></td>\r
+                       </tr></table>\r
+               </div></form>\r
+\r
+               <h3><a id="skins"><?php echo _BLOGCREATED_ADVANCEDWAY2 ?></a></h3>\r
+\r
+               <p><?php echo _BLOGCREATED_ADVANCEDWAY3 ?></p>\r
+\r
+               <form action="index.php" method="post"><div>\r
+                       <input type="hidden" name="action" value="addnewlog2" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+                       <input type="hidden" name="blogid" value="<?php echo intval($blogid)?>" />\r
+                       <table><tr>\r
+                               <td><?php echo _EBLOG_URL?></td>\r
+                               <td><input name="url" maxlength="100" size="40" /></td>\r
+                       </tr><tr>\r
+                               <td><?php echo _EBLOG_CREATE?></td>\r
+                               <td><input type="submit" value="<?php echo _EBLOG_CREATE_BTN?>" onclick="return checkSubmit();" /></td>\r
+                       </tr></table>\r
+               </div></form>\r
+\r
+               <?php      $this->pagefoot();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_addnewlog2() {\r
+               global $member, $manager;\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $burl   = requestVar('url');\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+               $blog->setURL(trim($burl));\r
+               $blog->writeSettings();\r
+\r
+               $this->action_overview(_MSG_NEWBLOG);\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skinieoverview() {\r
+               global $member, $DIR_LIBS, $manager;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // load skinie class\r
+               include_once($DIR_LIBS . 'skinie.php');\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
+\r
+       ?>\r
+               <h2><?php echo _SKINIE_TITLE_IMPORT?></h2>\r
+\r
+                               <p><label for="skinie_import_local"><?php echo _SKINIE_LOCAL?></label>\r
+                               <?php                              global $DIR_SKINS;\r
+\r
+                                       $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);\r
+\r
+                                       if (sizeof($candidates) > 0) {\r
+                                               ?>\r
+                                                       <form method="post" action="index.php"><div>\r
+                                                               <input type="hidden" name="action" value="skinieimport" />\r
+                                                               <?php $manager->addTicketHidden() ?>\r
+                                                               <input type="hidden" name="mode" value="file" />\r
+                                                               <select name="skinfile" id="skinie_import_local">\r
+                                                               <?php                                                              foreach ($candidates as $skinname => $skinfile) {\r
+                                                                               $html = htmlspecialchars($skinfile);\r
+                                                                               echo '<option value="',$html,'">',$skinname,'</option>';\r
+                                                                       }\r
+                                                               ?>\r
+                                                               </select>\r
+                                                               <input type="submit" value="<?php echo _SKINIE_BTN_IMPORT?>" />\r
+                                                       </div></form>\r
+                                               <?php                              } else {\r
+                                               echo _SKINIE_NOCANDIDATES;\r
+                                       }\r
+                               ?>\r
+                               </p>\r
+\r
+                               <p><em><?php echo _OR?></em></p>\r
+\r
+                               <form method="post" action="index.php"><p>\r
+                                       <?php $manager->addTicketHidden() ?>\r
+                                       <input type="hidden" name="action" value="skinieimport" />\r
+                                       <input type="hidden" name="mode" value="url" />\r
+                                       <label for="skinie_import_url"><?php echo _SKINIE_FROMURL?></label>\r
+                                       <input type="text" name="skinfile" id="skinie_import_url" size="60" value="http://" />\r
+                                       <input type="submit" value="<?php echo _SKINIE_BTN_IMPORT?>" />\r
+                               </p></form>\r
+\r
+\r
+               <h2><?php echo _SKINIE_TITLE_EXPORT?></h2>\r
+               <form method="post" action="index.php"><div>\r
+                       <input type="hidden" name="action" value="skinieexport" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+\r
+                       <p><?php echo _SKINIE_EXPORT_INTRO?></p>\r
+\r
+                       <table><tr>\r
+                               <th colspan="2"><?php echo _SKINIE_EXPORT_SKINS?></th>\r
+                       </tr><tr>\r
+       <?php      // show list of skins\r
+               $res = sql_query('SELECT * FROM '.sql_table('skin_desc'));\r
+               while ($skinObj = sql_fetch_object($res)) {\r
+                       $id = 'skinexp' . $skinObj->sdnumber;\r
+                       echo '<td><input type="checkbox" name="skin[',$skinObj->sdnumber,']"  id="',$id,'" />';\r
+                       echo '<label for="',$id,'">',htmlspecialchars($skinObj->sdname),'</label></td>';\r
+                       echo '<td>',htmlspecialchars($skinObj->sddesc),'</td>';\r
+                       echo '</tr><tr>';\r
+               }\r
+\r
+               echo '<th colspan="2">',_SKINIE_EXPORT_TEMPLATES,'</th></tr><tr>';\r
+\r
+               // show list of templates\r
+               $res = sql_query('SELECT * FROM '.sql_table('template_desc'));\r
+               while ($templateObj = sql_fetch_object($res)) {\r
+                       $id = 'templateexp' . $templateObj->tdnumber;\r
+                       echo '<td><input type="checkbox" name="template[',$templateObj->tdnumber,']" id="',$id,'" />';\r
+                       echo '<label for="',$id,'">',htmlspecialchars($templateObj->tdname),'</label></td>';\r
+                       echo '<td>',htmlspecialchars($templateObj->tddesc),'</td>';\r
+                       echo '</tr><tr>';\r
+               }\r
+\r
+       ?>\r
+                               <th colspan="2"><?php echo _SKINIE_EXPORT_EXTRA?></th>\r
+                       </tr><tr>\r
+                               <td colspan="2"><textarea cols="40" rows="5" name="info"></textarea></td>\r
+                       </tr><tr>\r
+                               <th colspan="2"><?php echo _SKINIE_TITLE_EXPORT?></th>\r
+                       </tr><tr>\r
+                               <td colspan="2"><input type="submit" value="<?php echo _SKINIE_BTN_EXPORT?>" /></td>\r
+                       </tr></table>\r
+               </div></form>\r
+\r
+       <?php\r
+               $this->pagefoot();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skinieimport() {\r
+               global $member, $DIR_LIBS, $DIR_SKINS, $manager;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // load skinie class\r
+               include_once($DIR_LIBS . 'skinie.php');\r
+\r
+               $skinFileRaw= postVar('skinfile');\r
+               $mode      = postVar('mode');\r
+\r
+               $importer =& new SKINIMPORT();\r
+\r
+               // get full filename\r
+               if ($mode == 'file')\r
+               {\r
+                       $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';\r
+\r
+                       // backwards compatibilty (in v2.0, exports were saved as skindata.xml)\r
+                       if (!file_exists($skinFile))\r
+                               $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml';\r
+               } else {\r
+                       $skinFile = $skinFileRaw;\r
+               }\r
+\r
+               // read only metadata\r
+               $error = $importer->readFile($skinFile, 1);\r
+\r
+               // clashes\r
+               $skinNameClashes = $importer->checkSkinNameClashes();\r
+               $templateNameClashes = $importer->checkTemplateNameClashes();\r
+               $hasNameClashes = (count($skinNameClashes) > 0) || (count($templateNameClashes) > 0);\r
+\r
+               if ($error) $this->error($error);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=skinieoverview">(',_BACK,')</a></p>';\r
+               ?>\r
+               <h2><?php echo _SKINIE_CONFIRM_TITLE?></h2>\r
+\r
+               <ul>\r
+                       <li><p><strong><?php echo _SKINIE_INFO_GENERAL?></strong> <?php echo htmlspecialchars($importer->getInfo())?></p></li>\r
+                       <li><p><strong><?php echo _SKINIE_INFO_SKINS?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getSkinNames())?></p></li>\r
+                       <li><p><strong><?php echo _SKINIE_INFO_TEMPLATES?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getTemplateNames())?></p></li>\r
+                       <?php\r
+                               if ($hasNameClashes)\r
+                               {\r
+                       ?>\r
+                       <li><p><strong style="color: red;"><?php echo _SKINIE_INFO_SKINCLASH?></strong> <?php echo implode(' <em>'._AND.'</em> ',$skinNameClashes)?></p></li>\r
+                       <li><p><strong style="color: red;"><?php echo _SKINIE_INFO_TEMPLCLASH?></strong> <?php echo implode(' <em>'._AND.'</em> ',$templateNameClashes)?></p></li>\r
+                       <?php\r
+                               } // if (hasNameClashes)\r
+                       ?>\r
+               </ul>\r
+\r
+               <form method="post" action="index.php"><div>\r
+                       <input type="hidden" name="action" value="skiniedoimport" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+                       <input type="hidden" name="skinfile" value="<?php echo htmlspecialchars(postVar('skinfile'))?>" />\r
+                       <input type="hidden" name="mode" value="<?php echo htmlspecialchars($mode)?>" />\r
+                       <input type="submit" value="<?php echo _SKINIE_CONFIRM_IMPORT?>" />\r
+                       <?php\r
+                               if ($hasNameClashes)\r
+                               {\r
+                       ?>\r
+                       <br />\r
+                       <input type="checkbox" name="overwrite" value="1" id="cb_overwrite" /><label for="cb_overwrite"><?php echo _SKINIE_CONFIRM_OVERWRITE?></label>\r
+                       <?php\r
+                               } // if (hasNameClashes)\r
+                       ?>\r
+               </div></form>\r
+\r
+\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skiniedoimport() {\r
+               global $member, $DIR_LIBS, $DIR_SKINS;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // load skinie class\r
+               include_once($DIR_LIBS . 'skinie.php');\r
+\r
+               $skinFileRaw= postVar('skinfile');\r
+               $mode      = postVar('mode');\r
+\r
+               $allowOverwrite = intPostVar('overwrite');\r
+\r
+               // get full filename\r
+               if ($mode == 'file')\r
+               {\r
+                       $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';\r
+\r
+                       // backwards compatibilty (in v2.0, exports were saved as skindata.xml)\r
+                       if (!file_exists($skinFile))\r
+                               $skinFile = $DIR_SKINS . $skinFileRaw . '/skindata.xml';\r
+\r
+               } else {\r
+                       $skinFile = $skinFileRaw;\r
+               }\r
+\r
+               $importer =& new SKINIMPORT();\r
+\r
+               $error = $importer->readFile($skinFile);\r
+\r
+               if ($error)\r
+                       $this->error($error);\r
+\r
+               $error = $importer->writeToDatabase($allowOverwrite);\r
+\r
+               if ($error)\r
+                       $this->error($error);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
+       ?>\r
+               <h2><?php echo _SKINIE_DONE?></h2>\r
+\r
+               <ul>\r
+                       <li><p><strong><?php echo _SKINIE_INFO_GENERAL?></strong> <?php echo htmlspecialchars($importer->getInfo())?></p></li>\r
+                       <li><p><strong><?php echo _SKINIE_INFO_IMPORTEDSKINS?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getSkinNames())?></p></li>\r
+                       <li><p><strong><?php echo _SKINIE_INFO_IMPORTEDTEMPLS?></strong> <?php echo implode(' <em>'._AND.'</em> ',$importer->getTemplateNames())?></p></li>\r
+               </ul>\r
+\r
+       <?php      $this->pagefoot();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skinieexport() {\r
+               global $member, $DIR_LIBS;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // load skinie class\r
+               include_once($DIR_LIBS . 'skinie.php');\r
+\r
+               $aSkins = requestIntArray('skin');\r
+               $aTemplates = requestIntArray('template');\r
+\r
+               if (!is_array($aTemplates)) $aTemplates = array();\r
+               if (!is_array($aSkins)) $aSkins = array();\r
+\r
+               $skinList = array_keys($aSkins);\r
+               $templateList = array_keys($aTemplates);\r
+\r
+               $info = postVar('info');\r
+\r
+               $exporter =& new SKINEXPORT();\r
+               foreach ($skinList as $skinId) {\r
+                       $exporter->addSkin($skinId);\r
+               }\r
+               foreach ($templateList as $templateId) {\r
+                       $exporter->addTemplate($templateId);\r
+               }\r
+               $exporter->setInfo($info);\r
+\r
+               $exporter->export();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_templateoverview() {\r
+               global $member, $manager;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
+\r
+               echo '<h2>' . _TEMPLATE_TITLE . '</h2>';\r
+               echo '<h3>' . _TEMPLATE_AVAILABLE_TITLE . '</h3>';\r
+\r
+               $query = 'SELECT * FROM '.sql_table('template_desc').' ORDER BY tdname';\r
+               $template['content'] = 'templatelist';\r
+               $template['tabindex'] = 10;\r
+               showlist($query,'table',$template);\r
+\r
+               echo '<h3>' . _TEMPLATE_NEW_TITLE . '</h3>';\r
+\r
+               ?>\r
+               <form method="post" action="index.php"><div>\r
+\r
+               <input name="action" value="templatenew" type="hidden" />\r
+               <?php $manager->addTicketHidden() ?>\r
+               <table><tr>\r
+                       <td><?php echo _TEMPLATE_NAME?> <?php help('shortnames');?></td>\r
+                       <td><input name="name" tabindex="10010" maxlength="20" size="20" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _TEMPLATE_DESC?></td>\r
+                       <td><input name="desc" tabindex="10020" maxlength="200" size="50" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _TEMPLATE_CREATE?></td>\r
+                       <td><input type="submit" tabindex="10030" value="<?php echo _TEMPLATE_CREATE_BTN?>" onclick="return checkSubmit();" /></td>\r
+               </tr></table>\r
+\r
+               </div></form>\r
+\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_templateedit($msg = '') {\r
+               global $member, $manager;\r
+\r
+               $templateid = intRequestVar('templateid');\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $extrahead = '<script type="text/javascript" src="javascript/templateEdit.js"></script>';\r
+               $extrahead .= '<script type="text/javascript">setTemplateEditText("'.addslashes(_EDITTEMPLATE_EMPTY).'");</script>';\r
+\r
+               $this->pagehead($extrahead);\r
+\r
+               $templatename = TEMPLATE::getNameFromId($templateid);\r
+               $templatedescription = TEMPLATE::getDesc($templateid);\r
+               $template =& $manager->getTemplate($templatename);\r
+\r
+               ?>\r
+               <p>\r
+               <a href="index.php?action=templateoverview">(<?php echo _TEMPLATE_BACK?>)</a>\r
+               </p>\r
+\r
+               <h2><?php echo _TEMPLATE_EDIT_TITLE?> '<?php echo  htmlspecialchars($templatename); ?>'</h2>\r
+\r
+               <?php                              if ($msg) echo "<p>"._MESSAGE.": $msg</p>";\r
+               ?>\r
+\r
+               <p><?php echo _TEMPLATE_EDIT_MSG?></p>\r
+\r
+               <form method="post" action="index.php">\r
+               <div>\r
+\r
+               <input type="hidden" name="action" value="templateupdate" />\r
+               <?php $manager->addTicketHidden() ?>\r
+               <input type="hidden" name="templateid" value="<?php echo  $templateid; ?>" />\r
+\r
+               <table><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_SETTINGS?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _TEMPLATE_NAME?> <?php help('shortnames');?></td>\r
+                       <td><input name="tname" tabindex="4" size="20" maxlength="20" value="<?php echo  htmlspecialchars($templatename) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _TEMPLATE_DESC?></td>\r
+                       <td><input name="tdesc" tabindex="5" size="50" maxlength="200" value="<?php echo  htmlspecialchars($templatedescription) ?>" /></td>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_UPDATE?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _TEMPLATE_UPDATE?></td>\r
+                       <td>\r
+                               <input type="submit" tabindex="6" value="<?php echo _TEMPLATE_UPDATE_BTN?>" onclick="return checkSubmit();" />\r
+                               <input type="reset" tabindex="7" value="<?php echo _TEMPLATE_RESET_BTN?>" />\r
+                       </td>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_ITEMS?> <?php help('templateitems'); ?></th>\r
+<?php  $this->_templateEditRow($template, _TEMPLATE_ITEMHEADER, 'ITEM_HEADER', '', 8);\r
+       $this->_templateEditRow($template, _TEMPLATE_ITEMBODY, 'ITEM', '', 9, 1);\r
+       $this->_templateEditRow($template, _TEMPLATE_ITEMFOOTER, 'ITEM_FOOTER', '', 10);\r
+       $this->_templateEditRow($template, _TEMPLATE_MORELINK, 'MORELINK', 'morelink', 20);\r
+       $this->_templateEditRow($template, _TEMPLATE_EDITLINK, 'EDITLINK', 'editlink', 25);\r
+       $this->_templateEditRow($template, _TEMPLATE_NEW, 'NEW', 'new', 30);\r
+?>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_COMMENTS_ANY?> <?php help('templatecomments'); ?></th>\r
+<?php  $this->_templateEditRow($template, _TEMPLATE_CHEADER, 'COMMENTS_HEADER', 'commentheaders', 40);\r
+       $this->_templateEditRow($template, _TEMPLATE_CBODY, 'COMMENTS_BODY', 'commentbody', 50, 1);\r
+       $this->_templateEditRow($template, _TEMPLATE_CFOOTER, 'COMMENTS_FOOTER', 'commentheaders', 60);\r
+       $this->_templateEditRow($template, _TEMPLATE_CONE, 'COMMENTS_ONE', 'commentwords', 70);\r
+       $this->_templateEditRow($template, _TEMPLATE_CMANY, 'COMMENTS_MANY', 'commentwords', 80);\r
+       $this->_templateEditRow($template, _TEMPLATE_CMORE, 'COMMENTS_CONTINUED', 'commentcontinued', 90);\r
+       $this->_templateEditRow($template, _TEMPLATE_CMEXTRA, 'COMMENTS_AUTH', 'memberextra', 100);\r
+?>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_COMMENTS_NONE?> <?php help('templatecomments'); ?></th>\r
+<?php\r
+       $this->_templateEditRow($template, _TEMPLATE_CNONE, 'COMMENTS_NONE', '', 110);\r
+?>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_COMMENTS_TOOMUCH?> <?php help('templatecomments'); ?></th>\r
+<?php  $this->_templateEditRow($template, _TEMPLATE_CTOOMUCH, 'COMMENTS_TOOMUCH', '', 120);\r
+?>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_ARCHIVELIST?> <?php help('templatearchivelists'); ?></th>\r
+<?php  $this->_templateEditRow($template, _TEMPLATE_AHEADER, 'ARCHIVELIST_HEADER', '', 130);\r
+       $this->_templateEditRow($template, _TEMPLATE_AITEM, 'ARCHIVELIST_LISTITEM', '', 140);\r
+       $this->_templateEditRow($template, _TEMPLATE_AFOOTER, 'ARCHIVELIST_FOOTER', '', 150);\r
+?>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_BLOGLIST?> <?php help('templatebloglists'); ?></th>\r
+<?php  $this->_templateEditRow($template, _TEMPLATE_BLOGHEADER, 'BLOGLIST_HEADER', '', 160);\r
+       $this->_templateEditRow($template, _TEMPLATE_BLOGITEM, 'BLOGLIST_LISTITEM', '', 170);\r
+       $this->_templateEditRow($template, _TEMPLATE_BLOGFOOTER, 'BLOGLIST_FOOTER', '', 180);\r
+?>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_CATEGORYLIST?> <?php help('templatecategorylists'); ?></th>\r
+<?php  $this->_templateEditRow($template, _TEMPLATE_CATHEADER, 'CATLIST_HEADER', '', 190);\r
+       $this->_templateEditRow($template, _TEMPLATE_CATITEM, 'CATLIST_LISTITEM', '', 200);\r
+       $this->_templateEditRow($template, _TEMPLATE_CATFOOTER, 'CATLIST_FOOTER', '', 210);\r
+?>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_DATETIME?></th>\r
+<?php  $this->_templateEditRow($template, _TEMPLATE_DHEADER, 'DATE_HEADER', 'dateheads', 220);\r
+       $this->_templateEditRow($template, _TEMPLATE_DFOOTER, 'DATE_FOOTER', 'dateheads', 230);\r
+       $this->_templateEditRow($template, _TEMPLATE_DFORMAT, 'FORMAT_DATE', 'datetime', 240);\r
+       $this->_templateEditRow($template, _TEMPLATE_TFORMAT, 'FORMAT_TIME', 'datetime', 250);\r
+       $this->_templateEditRow($template, _TEMPLATE_LOCALE, 'LOCALE', 'locale', 260);\r
+?>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_IMAGE?> <?php help('templatepopups'); ?></th>\r
+<?php  $this->_templateEditRow($template, _TEMPLATE_PCODE, 'POPUP_CODE', '', 270);\r
+       $this->_templateEditRow($template, _TEMPLATE_ICODE, 'IMAGE_CODE', '', 280);\r
+       $this->_templateEditRow($template, _TEMPLATE_MCODE, 'MEDIA_CODE', '', 290);\r
+?>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_SEARCH?></th>\r
+<?php  $this->_templateEditRow($template, _TEMPLATE_SHIGHLIGHT, 'SEARCH_HIGHLIGHT', 'highlight',300);\r
+       $this->_templateEditRow($template, _TEMPLATE_SNOTFOUND, 'SEARCH_NOTHINGFOUND', 'nothingfound',310);\r
+?>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_PLUGIN_FIELDS?></th>\r
+<?php\r
+               $tab = 600;\r
+               $pluginfields = array();\r
+               $manager->notify('TemplateExtraFields',array('fields'=>&$pluginfields));\r
+\r
+               foreach ($pluginfields as $pfkey=>$pfvalue) {\r
+                       echo "</tr><tr>\n";\r
+                       echo '<th colspan="2">'.htmlentities($pfkey)."</th>\n";\r
+                       foreach ($pfvalue as $pffield=>$pfdesc) {\r
+                               $this->_templateEditRow($template, $pfdesc, $pffield, '',++$tab,0);\r
+                       }\r
+               }\r
+?>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _TEMPLATE_UPDATE?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _TEMPLATE_UPDATE?></td>\r
+                       <td>\r
+                               <input type="submit" tabindex="800" value="<?php echo _TEMPLATE_UPDATE_BTN?>" onclick="return checkSubmit();" />\r
+                               <input type="reset" tabindex="810" value="<?php echo _TEMPLATE_RESET_BTN?>" />\r
+                       </td>\r
+               </tr></table>\r
+\r
+               </div>\r
+               </form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function _templateEditRow(&$template, $description, $name, $help = '', $tabindex = 0, $big = 0) {\r
+               static $count = 1;\r
+               if (!isset($template[$name])) $template[$name] = '';\r
+       ?>\r
+               </tr><tr>\r
+                       <td><?php echo $description?> <?php if ($help) help('template'.$help); ?></td>\r
+                       <td id="td<?php echo $count?>"><textarea class="templateedit" name="<?php echo $name?>" tabindex="<?php echo $tabindex?>" cols="50" rows="<?php echo $big?10:5?>" id="textarea<?php echo $count?>"><?php echo  htmlspecialchars($template[$name]); ?></textarea></td>\r
+       <?php      $count++;\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_templateupdate() {\r
+               global $member, $manager;\r
+\r
+               $templateid = intRequestVar('templateid');\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $name = postVar('tname');\r
+               $desc = postVar('tdesc');\r
+\r
+               if (!isValidTemplateName($name))\r
+                       $this->error(_ERROR_BADTEMPLATENAME);\r
+\r
+               if ((TEMPLATE::getNameFromId($templateid) != $name) && TEMPLATE::exists($name))\r
+                       $this->error(_ERROR_DUPTEMPLATENAME);\r
+\r
+\r
+               $name = addslashes($name);\r
+               $desc = addslashes($desc);\r
+\r
+               // 1. Remove all template parts\r
+               $query = 'DELETE FROM '.sql_table('template').' WHERE tdesc=' . $templateid;\r
+               sql_query($query);\r
+\r
+               // 2. Update description\r
+               $query =  'UPDATE '.sql_table('template_desc').' SET'\r
+                          . " tdname='" . $name . "',"\r
+                          . " tddesc='" . $desc . "'"\r
+                          . " WHERE tdnumber=" . $templateid;\r
+               sql_query($query);\r
+\r
+               // 3. Add non-empty template parts\r
+               $this->addToTemplate($templateid, 'ITEM_HEADER', postVar('ITEM_HEADER'));\r
+               $this->addToTemplate($templateid, 'ITEM', postVar('ITEM'));\r
+               $this->addToTemplate($templateid, 'ITEM_FOOTER', postVar('ITEM_FOOTER'));\r
+               $this->addToTemplate($templateid, 'MORELINK', postVar('MORELINK'));\r
+               $this->addToTemplate($templateid, 'EDITLINK', postVar('EDITLINK'));\r
+               $this->addToTemplate($templateid, 'NEW', postVar('NEW'));\r
+               $this->addToTemplate($templateid, 'COMMENTS_HEADER', postVar('COMMENTS_HEADER'));\r
+               $this->addToTemplate($templateid, 'COMMENTS_BODY', postVar('COMMENTS_BODY'));\r
+               $this->addToTemplate($templateid, 'COMMENTS_FOOTER', postVar('COMMENTS_FOOTER'));\r
+               $this->addToTemplate($templateid, 'COMMENTS_CONTINUED', postVar('COMMENTS_CONTINUED'));\r
+               $this->addToTemplate($templateid, 'COMMENTS_TOOMUCH', postVar('COMMENTS_TOOMUCH'));\r
+               $this->addToTemplate($templateid, 'COMMENTS_AUTH', postVar('COMMENTS_AUTH'));\r
+               $this->addToTemplate($templateid, 'COMMENTS_ONE', postVar('COMMENTS_ONE'));\r
+               $this->addToTemplate($templateid, 'COMMENTS_MANY', postVar('COMMENTS_MANY'));\r
+               $this->addToTemplate($templateid, 'COMMENTS_NONE', postVar('COMMENTS_NONE'));\r
+               $this->addToTemplate($templateid, 'ARCHIVELIST_HEADER', postVar('ARCHIVELIST_HEADER'));\r
+               $this->addToTemplate($templateid, 'ARCHIVELIST_LISTITEM', postVar('ARCHIVELIST_LISTITEM'));\r
+               $this->addToTemplate($templateid, 'ARCHIVELIST_FOOTER', postVar('ARCHIVELIST_FOOTER'));\r
+               $this->addToTemplate($templateid, 'BLOGLIST_HEADER', postVar('BLOGLIST_HEADER'));\r
+               $this->addToTemplate($templateid, 'BLOGLIST_LISTITEM', postVar('BLOGLIST_LISTITEM'));\r
+               $this->addToTemplate($templateid, 'BLOGLIST_FOOTER', postVar('BLOGLIST_FOOTER'));\r
+               $this->addToTemplate($templateid, 'CATLIST_HEADER', postVar('CATLIST_HEADER'));\r
+               $this->addToTemplate($templateid, 'CATLIST_LISTITEM', postVar('CATLIST_LISTITEM'));\r
+               $this->addToTemplate($templateid, 'CATLIST_FOOTER', postVar('CATLIST_FOOTER'));\r
+               $this->addToTemplate($templateid, 'DATE_HEADER', postVar('DATE_HEADER'));\r
+               $this->addToTemplate($templateid, 'DATE_FOOTER', postVar('DATE_FOOTER'));\r
+               $this->addToTemplate($templateid, 'FORMAT_DATE', postVar('FORMAT_DATE'));\r
+               $this->addToTemplate($templateid, 'FORMAT_TIME', postVar('FORMAT_TIME'));\r
+               $this->addToTemplate($templateid, 'LOCALE', postVar('LOCALE'));\r
+               $this->addToTemplate($templateid, 'SEARCH_HIGHLIGHT', postVar('SEARCH_HIGHLIGHT'));\r
+               $this->addToTemplate($templateid, 'SEARCH_NOTHINGFOUND', postVar('SEARCH_NOTHINGFOUND'));\r
+               $this->addToTemplate($templateid, 'POPUP_CODE', postVar('POPUP_CODE'));\r
+               $this->addToTemplate($templateid, 'MEDIA_CODE', postVar('MEDIA_CODE'));\r
+               $this->addToTemplate($templateid, 'IMAGE_CODE', postVar('IMAGE_CODE'));\r
+\r
+               $pluginfields = array();\r
+               $manager->notify('TemplateExtraFields',array('fields'=>&$pluginfields));\r
+               foreach ($pluginfields as $pfkey=>$pfvalue) {\r
+                       foreach ($pfvalue as $pffield=>$pfdesc) {\r
+                               $this->addToTemplate($templateid, $pffield, postVar($pffield));\r
+                       }\r
+               }\r
+\r
+               // jump back to template edit\r
+               $this->action_templateedit(_TEMPLATE_UPDATED);\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function addToTemplate($id, $partname, $content) {\r
+               $partname = addslashes($partname);\r
+               $content = addslashes($content);\r
+\r
+               $id = intval($id);\r
+\r
+               // don't add empty parts:\r
+               if (!trim($content)) return -1;\r
+\r
+               $query = 'INSERT INTO '.sql_table('template')." (tdesc, tpartname, tcontent) "\r
+                          . "VALUES ($id, '$partname', '$content')";\r
+               sql_query($query) or exit(_ADMIN_SQLDIE_QUERYERROR . sql_error());\r
+               return sql_insert_id();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_templatedelete() {\r
+               global $member, $manager;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $templateid = intRequestVar('templateid');\r
+               // TODO: check if template can be deleted\r
+\r
+               $this->pagehead();\r
+\r
+               $name = TEMPLATE::getNameFromId($templateid);\r
+               $desc = TEMPLATE::getDesc($templateid);\r
+\r
+               ?>\r
+                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
+\r
+                       <p>\r
+                       <?php echo _CONFIRMTXT_TEMPLATE?><b><?php echo htmlspecialchars($name)?></b> (<?php echo  htmlspecialchars($desc) ?>)\r
+                       </p>\r
+\r
+                       <form method="post" action="index.php"><div>\r
+                               <input type="hidden" name="action" value="templatedeleteconfirm" />\r
+                               <?php $manager->addTicketHidden() ?>\r
+                               <input type="hidden" name="templateid" value="<?php echo  $templateid ?>" />\r
+                               <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_templatedeleteconfirm() {\r
+               global $member, $manager;\r
+\r
+               $templateid = intRequestVar('templateid');\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $manager->notify('PreDeleteTemplate', array('templateid' => $templateid));\r
+\r
+               // 1. delete description\r
+               sql_query('DELETE FROM '.sql_table('template_desc').' WHERE tdnumber=' . $templateid);\r
+\r
+               // 2. delete parts\r
+               sql_query('DELETE FROM '.sql_table('template').' WHERE tdesc=' . $templateid);\r
+\r
+               $manager->notify('PostDeleteTemplate', array('templateid' => $templateid));\r
+\r
+               $this->action_templateoverview();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_templatenew() {\r
+               global $member;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $name = postVar('name');\r
+               $desc = postVar('desc');\r
+\r
+               if (!isValidTemplateName($name))\r
+                       $this->error(_ERROR_BADTEMPLATENAME);\r
+\r
+               if (TEMPLATE::exists($name))\r
+                       $this->error(_ERROR_DUPTEMPLATENAME);\r
+\r
+               $newTemplateId = TEMPLATE::createNew($name, $desc);\r
+\r
+               $this->action_templateoverview();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_templateclone() {\r
+               global $member;\r
+\r
+               $templateid = intRequestVar('templateid');\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // 1. read old template\r
+               $name = TEMPLATE::getNameFromId($templateid);\r
+               $desc = TEMPLATE::getDesc($templateid);\r
+\r
+               // 2. create desc thing\r
+               $name = "cloned" . $name;\r
+\r
+               // if a template with that name already exists:\r
+               if (TEMPLATE::exists($name)) {\r
+                       $i = 1;\r
+                       while (TEMPLATE::exists($name . $i))\r
+                               $i++;\r
+                       $name .= $i;\r
+               }\r
+\r
+               $newid = TEMPLATE::createNew($name, $desc);\r
+\r
+               // 3. create clone\r
+               // go through parts of old template and add them to the new one\r
+               $res = sql_query('SELECT tpartname, tcontent FROM '.sql_table('template').' WHERE tdesc=' . $templateid);\r
+               while ($o = sql_fetch_object($res)) {\r
+                       $this->addToTemplate($newid, $o->tpartname, $o->tcontent);\r
+               }\r
+\r
+               $this->action_templateoverview();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skinoverview() {\r
+               global $member, $manager;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
+\r
+               echo '<h2>' . _SKIN_EDIT_TITLE . '</h2>';\r
+\r
+               echo '<h3>' . _SKIN_AVAILABLE_TITLE . '</h3>';\r
+\r
+               $query = 'SELECT * FROM '.sql_table('skin_desc').' ORDER BY sdname';\r
+               $template['content'] = 'skinlist';\r
+               $template['tabindex'] = 10;\r
+               showlist($query,'table',$template);\r
+\r
+               echo '<h3>' . _SKIN_NEW_TITLE . '</h3>';\r
+\r
+               ?>\r
+               <form method="post" action="index.php">\r
+               <div>\r
+\r
+               <input name="action" value="skinnew" type="hidden" />\r
+               <?php $manager->addTicketHidden() ?>\r
+               <table><tr>\r
+                       <td><?php echo _SKIN_NAME?> <?php help('shortnames');?></td>\r
+                       <td><input name="name" tabindex="10010" maxlength="20" size="20" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SKIN_DESC?></td>\r
+                       <td><input name="desc" tabindex="10020" maxlength="200" size="50" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SKIN_CREATE?></td>\r
+                       <td><input type="submit" tabindex="10030" value="<?php echo _SKIN_CREATE_BTN?>" onclick="return checkSubmit();" /></td>\r
+               </tr></table>\r
+\r
+               </div>\r
+               </form>\r
+\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skinnew() {\r
+               global $member;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $name = trim(postVar('name'));\r
+               $desc = trim(postVar('desc'));\r
+\r
+               if (!isValidSkinName($name))\r
+                       $this->error(_ERROR_BADSKINNAME);\r
+\r
+               if (SKIN::exists($name))\r
+                       $this->error(_ERROR_DUPSKINNAME);\r
+\r
+               $newId = SKIN::createNew($name, $desc);\r
+\r
+               $this->action_skinoverview();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skinedit() {\r
+               global $member, $manager;\r
+\r
+               $skinid = intRequestVar('skinid');\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $skin =& new SKIN($skinid);\r
+\r
+               $this->pagehead();\r
+               ?>\r
+               <p>\r
+                       <a href="index.php?action=skinoverview">(<?php echo _SKIN_BACK?>)</a>\r
+               </p>\r
+               <h2><?php echo _SKIN_EDITONE_TITLE?> '<?php echo  $skin->getName() ?>'</h2>\r
+\r
+               <h3><?php echo _SKIN_PARTS_TITLE?></h3>\r
+               <?php echo _SKIN_PARTS_MSG?>\r
+               <ul>\r
+                       <li><a tabindex="10" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=index"><?php echo _SKIN_PART_MAIN?></a> <?php help('skinpartindex')?></li>\r
+                       <li><a tabindex="20" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=item"><?php echo _SKIN_PART_ITEM?></a> <?php help('skinpartitem')?></li>\r
+                       <li><a tabindex="30" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=archivelist"><?php echo _SKIN_PART_ALIST?></a> <?php help('skinpartarchivelist')?></li>\r
+                       <li><a tabindex="40" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=archive"><?php echo _SKIN_PART_ARCHIVE?></a> <?php help('skinpartarchive')?></li>\r
+                       <li><a tabindex="50" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=search"><?php echo _SKIN_PART_SEARCH?></a> <?php help('skinpartsearch')?></li>\r
+                       <li><a tabindex="60" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=error"><?php echo _SKIN_PART_ERROR?></a> <?php help('skinparterror')?></li>\r
+                       <li><a tabindex="70" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=member"><?php echo _SKIN_PART_MEMBER?></a> <?php help('skinpartmember')?></li>\r
+                       <li><a tabindex="75" href="index.php?action=skinedittype&amp;skinid=<?php echo  $skinid ?>&amp;type=imagepopup"><?php echo _SKIN_PART_POPUP?></a> <?php help('skinpartimagepopup')?></li>\r
+               </ul>\r
+\r
+               <?php\r
+\r
+               $query = "SELECT stype FROM " . sql_table('skin') . " WHERE stype NOT IN ('index', 'item', 'error', 'search', 'archive', 'archivelist', 'imagepopup', 'member') and sdesc = " . $skinid;\r
+               $res = sql_query($query);\r
+\r
+               echo '<h3>' . _SKIN_PARTS_SPECIAL . '</h3>';\r
+               echo '<form method="get" action="index.php">' . "\r\n";\r
+               echo '<input type="hidden" name="action" value="skinedittype" />' . "\r\n";\r
+               echo '<input type="hidden" name="skinid" value="' . $skinid . '" />' . "\r\n";\r
+               echo '<input name="type" tabindex="89" size="20" maxlength="20" />' . "\r\n";\r
+               echo '<input type="submit" tabindex="140" value="' . _SKIN_CREATE . '" onclick="return checkSubmit();" />' . "\r\n";\r
+               echo '</form>' . "\r\n";\r
+\r
+               if ($res && sql_num_rows($res) > 0) {\r
+                       echo '<ul>';\r
+                       $tabstart = 75;\r
+\r
+                       while ($row = sql_fetch_assoc($res)) {\r
+                               echo '<li><a tabindex="' . ($tabstart++) . '" href="index.php?action=skinedittype&amp;skinid=' . $skinid . '&amp;type=' . htmlspecialchars(strtolower($row['stype'])) . '">' . htmlspecialchars(ucfirst($row['stype'])) . '</a> (<a tabindex="' . ($tabstart++) . '" href="index.php?action=skinremovetype&amp;skinid=' . $skinid . '&amp;type=' . htmlspecialchars(strtolower($row['stype'])) . '">'._LISTS_DELETE.'</a>)</li>';\r
+                       }\r
+\r
+                       echo '</ul>';\r
+               }\r
+\r
+               ?>\r
+\r
+               <h3><?php echo _SKIN_GENSETTINGS_TITLE; ?></h3>\r
+               <form method="post" action="index.php">\r
+               <div>\r
+\r
+               <input type="hidden" name="action" value="skineditgeneral" />\r
+               <?php $manager->addTicketHidden() ?>\r
+               <input type="hidden" name="skinid" value="<?php echo  $skinid ?>" />\r
+               <table><tr>\r
+                       <td><?php echo _SKIN_NAME?> <?php help('shortnames');?></td>\r
+                       <td><input name="name" tabindex="90" value="<?php echo  htmlspecialchars($skin->getName()) ?>" maxlength="20" size="20" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SKIN_DESC?></td>\r
+                       <td><input name="desc" tabindex="100" value="<?php echo  htmlspecialchars($skin->getDescription()) ?>" maxlength="200" size="50" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SKIN_TYPE?></td>\r
+                       <td><input name="type" tabindex="110" value="<?php echo  htmlspecialchars($skin->getContentType()) ?>" maxlength="40" size="20" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SKIN_INCLUDE_MODE?> <?php help('includemode')?></td>\r
+                       <td><?php $this->input_yesno('inc_mode',$skin->getIncludeMode(),120,'skindir','normal',_PARSER_INCMODE_SKINDIR,_PARSER_INCMODE_NORMAL);?></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SKIN_INCLUDE_PREFIX?> <?php help('includeprefix')?></td>\r
+                       <td><input name="inc_prefix" tabindex="130" value="<?php echo  htmlspecialchars($skin->getIncludePrefix()) ?>" maxlength="40" size="20" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SKIN_CHANGE?></td>\r
+                       <td><input type="submit" tabindex="140" value="<?php echo _SKIN_CHANGE_BTN?>" onclick="return checkSubmit();" /></td>\r
+               </tr></table>\r
+\r
+               </div>\r
+               </form>\r
+\r
+\r
+               <?php      $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skineditgeneral() {\r
+               global $member;\r
+\r
+               $skinid = intRequestVar('skinid');\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $name = postVar('name');\r
+               $desc = postVar('desc');\r
+               $type = postVar('type');\r
+               $inc_mode = postVar('inc_mode');\r
+               $inc_prefix = postVar('inc_prefix');\r
+\r
+               $skin =& new SKIN($skinid);\r
+\r
+               // 1. Some checks\r
+               if (!isValidSkinName($name))\r
+                       $this->error(_ERROR_BADSKINNAME);\r
+\r
+               if (($skin->getName() != $name) && SKIN::exists($name))\r
+                       $this->error(_ERROR_DUPSKINNAME);\r
+\r
+               if (!$type) $type = 'text/html';\r
+               if (!$inc_mode) $inc_mode = 'normal';\r
+\r
+               // 2. Update description\r
+               $skin->updateGeneralInfo($name, $desc, $type, $inc_mode, $inc_prefix);\r
+\r
+               $this->action_skinedit();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skinedittype($msg = '') {\r
+               global $member, $manager;\r
+\r
+               $skinid = intRequestVar('skinid');\r
+               $type = requestVar('type');\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $type = trim($type);\r
+               $type = strtolower($type);\r
+\r
+               if (!isValidShortName($type)) {\r
+                       $this->error(_ERROR_SKIN_PARTS_SPECIAL_FORMAT);\r
+               }\r
+\r
+               $skin =& new SKIN($skinid);\r
+\r
+               $friendlyNames = SKIN::getFriendlyNames();\r
+\r
+               $this->pagehead();\r
+               ?>\r
+               <p>(<a href="index.php?action=skinoverview"><?php echo _SKIN_GOBACK?></a>)</p>\r
+\r
+               <h2><?php echo _SKIN_EDITPART_TITLE?> '<?php echo htmlspecialchars($skin->getName()) ?>': <?php echo htmlspecialchars(isset($friendlyNames[$type]) ? $friendlyNames[$type] : ucfirst($type)); ?></h2>\r
+\r
+               <?php              if ($msg) echo "<p>"._MESSAGE.": $msg</p>";\r
+               ?>\r
+\r
+\r
+               <form method="post" action="index.php">\r
+               <div>\r
+\r
+               <input type="hidden" name="action" value="skinupdate" />\r
+               <?php $manager->addTicketHidden() ?>\r
+               <input type="hidden" name="skinid" value="<?php echo  $skinid ?>" />\r
+               <input type="hidden" name="type" value="<?php echo  $type ?>" />\r
+\r
+               <input type="submit" value="<?php echo _SKIN_UPDATE_BTN?>" onclick="return checkSubmit();" />\r
+               <input type="reset" value="<?php echo _SKIN_RESET_BTN?>" />\r
+               (skin type: <?php echo htmlspecialchars(isset($friendlyNames[$type]) ? $friendlyNames[$type] : ucfirst($type)); ?>)\r
+               <?php if (in_array($type, array('index', 'item', 'archivelist', 'archive', 'search', 'error', 'member', 'imagepopup'))) {\r
+                       help('skinpart' . $type);\r
+               } else {\r
+                       help('skinpartspecial');\r
+               }?>\r
+               <br />\r
+\r
+               <textarea class="skinedit" tabindex="10" rows="20" cols="80" name="content"><?php echo  htmlspecialchars($skin->getContent($type)) ?></textarea>\r
+\r
+               <br />\r
+               <input type="submit" tabindex="20" value="<?php echo _SKIN_UPDATE_BTN?>" onclick="return checkSubmit();" />\r
+               <input type="reset" value="<?php echo _SKIN_RESET_BTN?>" />\r
+               (skin type: <?php echo htmlspecialchars(isset($friendlyNames[$type]) ? $friendlyNames[$type] : ucfirst($type)); ?>)\r
+\r
+               <br /><br />\r
+               <?php echo _SKIN_ALLOWEDVARS?>\r
+               <?php              $actions = SKIN::getAllowedActionsForType($type);\r
+\r
+                       sort($actions);\r
+\r
+                       while ($current = array_shift($actions)) {\r
+                               // skip deprecated vars\r
+                               if ($current == 'ifcat') continue;\r
+                               if ($current == 'imagetext') continue;\r
+                               if ($current == 'vars') continue;\r
+\r
+                               echo helplink('skinvar-' . $current) . "$current</a>";\r
+                               if (count($actions) != 0) echo ", ";\r
+                       }\r
+               echo '<br /><br />' . _SKINEDIT_ALLOWEDBLOGS;\r
+               $query = 'SELECT bshortname, bname FROM '.sql_table('blog');\r
+                       showlist($query,'table',array('content'=>'shortblognames'));\r
+               echo '<br />' . _SKINEDIT_ALLOWEDTEMPLATESS;\r
+               $query = 'SELECT tdname as name, tddesc as description FROM '.sql_table('template_desc');\r
+                       showlist($query,'table',array('content'=>'shortnames'));\r
+               echo '</div></form>';\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skinupdate() {\r
+               global $member;\r
+\r
+               $skinid = intRequestVar('skinid');\r
+               $content = trim(postVar('content'));\r
+               $type = postVar('type');\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $skin =& new SKIN($skinid);\r
+               $skin->update($type, $content);\r
+\r
+               $this->action_skinedittype(_SKIN_UPDATED);\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skindelete() {\r
+               global $member, $manager, $CONF;\r
+\r
+               $skinid = intRequestVar('skinid');\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // don't allow default skin to be deleted\r
+               if ($skinid == $CONF['BaseSkin'])\r
+                       $this->error(_ERROR_DEFAULTSKIN);\r
+\r
+               // don't allow deletion of default skins for blogs\r
+               $query = 'SELECT bname FROM '.sql_table('blog').' WHERE bdefskin=' . $skinid;\r
+               $r = sql_query($query);\r
+               if ($o = sql_fetch_object($r))\r
+                       $this->error(_ERROR_SKINDEFDELETE . htmlspecialchars($o->bname));\r
+\r
+               $this->pagehead();\r
+\r
+               $skin =& new SKIN($skinid);\r
+               $name = $skin->getName();\r
+               $desc = $skin->getDescription();\r
+\r
+               ?>\r
+                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
+\r
+                       <p>\r
+                               <?php echo _CONFIRMTXT_SKIN?><b><?php echo htmlspecialchars($name) ?></b> (<?php echo  htmlspecialchars($desc)?>)\r
+                       </p>\r
+\r
+                       <form method="post" action="index.php"><div>\r
+                               <input type="hidden" name="action" value="skindeleteconfirm" />\r
+                               <?php $manager->addTicketHidden() ?>\r
+                               <input type="hidden" name="skinid" value="<?php echo  $skinid ?>" />\r
+                               <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skindeleteconfirm() {\r
+               global $member, $CONF, $manager;\r
+\r
+               $skinid = intRequestVar('skinid');\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // don't allow default skin to be deleted\r
+               if ($skinid == $CONF['BaseSkin'])\r
+                       $this->error(_ERROR_DEFAULTSKIN);\r
+\r
+               // don't allow deletion of default skins for blogs\r
+               $query = 'SELECT bname FROM '.sql_table('blog').' WHERE bdefskin=' . $skinid;\r
+               $r = sql_query($query);\r
+               if ($o = sql_fetch_object($r))\r
+                       $this->error(_ERROR_SKINDEFDELETE .$o->bname);\r
+\r
+               $manager->notify('PreDeleteSkin', array('skinid' => $skinid));\r
+\r
+               // 1. delete description\r
+               sql_query('DELETE FROM '.sql_table('skin_desc').' WHERE sdnumber=' . $skinid);\r
+\r
+               // 2. delete parts\r
+               sql_query('DELETE FROM '.sql_table('skin').' WHERE sdesc=' . $skinid);\r
+\r
+               $manager->notify('PostDeleteSkin', array('skinid' => $skinid));\r
+\r
+               $this->action_skinoverview();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skinremovetype() {\r
+               global $member, $manager, $CONF;\r
+\r
+               $skinid = intRequestVar('skinid');\r
+               $skintype = requestVar('type');\r
+\r
+               if (!isValidShortName($skintype)) {\r
+                       $this->error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);\r
+               }\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // don't allow default skinparts to be deleted\r
+               if (in_array($skintype, array('index', 'item', 'archivelist', 'archive', 'search', 'error', 'member', 'imagepopup'))) {\r
+                       $this->error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);\r
+               }\r
+\r
+               $this->pagehead();\r
+\r
+               $skin =& new SKIN($skinid);\r
+               $name = $skin->getName();\r
+               $desc = $skin->getDescription();\r
+\r
+               ?>\r
+                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
+\r
+                       <p>\r
+                               <?php echo _CONFIRMTXT_SKIN_PARTS_SPECIAL; ?> <b><?php echo htmlspecialchars($skintype); ?> (<?php echo htmlspecialchars($name); ?>)</b> (<?php echo  htmlspecialchars($desc)?>)\r
+                       </p>\r
+\r
+                       <form method="post" action="index.php"><div>\r
+                               <input type="hidden" name="action" value="skinremovetypeconfirm" />\r
+                               <?php $manager->addTicketHidden() ?>\r
+                               <input type="hidden" name="skinid" value="<?php echo $skinid; ?>" />\r
+                               <input type="hidden" name="type" value="<?php echo htmlspecialchars($skintype); ?>" />\r
+                               <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skinremovetypeconfirm() {\r
+               global $member, $CONF, $manager;\r
+\r
+               $skinid = intRequestVar('skinid');\r
+               $skintype = requestVar('type');\r
+\r
+               if (!isValidShortName($skintype)) {\r
+                       $this->error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);\r
+               }\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // don't allow default skinparts to be deleted\r
+               if (in_array($skintype, array('index', 'item', 'archivelist', 'archive', 'search', 'error', 'member', 'imagepopup'))) {\r
+                       $this->error(_ERROR_SKIN_PARTS_SPECIAL_DELETE);\r
+               }\r
+\r
+               $manager->notify('PreDeleteSkinPart', array('skinid' => $skinid, 'skintype' => $skintype));\r
+\r
+               // delete part\r
+               sql_query('DELETE FROM '.sql_table('skin').' WHERE sdesc=' . $skinid . ' AND stype=\'' . $skintype . '\'');\r
+\r
+               $manager->notify('PostDeleteSkinPart', array('skinid' => $skinid, 'skintype' => $skintype));\r
+\r
+               $this->action_skinedit();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_skinclone() {\r
+               global $member;\r
+\r
+               $skinid = intRequestVar('skinid');\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // 1. read skin to clone\r
+               $skin =& new SKIN($skinid);\r
+\r
+               $name = "clone_" . $skin->getName();\r
+\r
+               // if a skin with that name already exists:\r
+               if (SKIN::exists($name)) {\r
+                       $i = 1;\r
+                       while (SKIN::exists($name . $i))\r
+                               $i++;\r
+                       $name .= $i;\r
+               }\r
+\r
+               // 2. create skin desc\r
+               $newid = SKIN::createNew(\r
+                       $name,\r
+                       $skin->getDescription(),\r
+                       $skin->getContentType(),\r
+                       $skin->getIncludeMode(),\r
+                       $skin->getIncludePrefix()\r
+               );\r
+\r
+\r
+               // 3. clone\r
+               /*\r
+               $this->skinclonetype($skin, $newid, 'index');\r
+               $this->skinclonetype($skin, $newid, 'item');\r
+               $this->skinclonetype($skin, $newid, 'archivelist');\r
+               $this->skinclonetype($skin, $newid, 'archive');\r
+               $this->skinclonetype($skin, $newid, 'search');\r
+               $this->skinclonetype($skin, $newid, 'error');\r
+               $this->skinclonetype($skin, $newid, 'member');\r
+               $this->skinclonetype($skin, $newid, 'imagepopup');\r
+               */\r
+\r
+               $query = "SELECT stype FROM " . sql_table('skin') . " WHERE sdesc = " . $skinid;\r
+               $res = sql_query($query);\r
+               while ($row = sql_fetch_assoc($res)) {\r
+                       $this->skinclonetype($skin, $newid, $row['stype']);\r
+               }\r
+\r
+               $this->action_skinoverview();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function skinclonetype($skin, $newid, $type) {\r
+               $newid = intval($newid);\r
+               $content = $skin->getContent($type);\r
+               if ($content) {\r
+                       $query = 'INSERT INTO '.sql_table('skin')." (sdesc, scontent, stype) VALUES ($newid,'". addslashes($content)."', '". addslashes($type)."')";\r
+                       sql_query($query);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_settingsedit() {\r
+               global $member, $manager, $CONF, $DIR_NUCLEUS, $DIR_MEDIA;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
+               ?>\r
+\r
+               <h2><?php echo _SETTINGS_TITLE?></h2>\r
+\r
+               <form action="index.php" method="post">\r
+               <div>\r
+\r
+               <input type="hidden" name="action" value="settingsupdate" />\r
+               <?php $manager->addTicketHidden() ?>\r
+\r
+               <table><tr>\r
+                       <th colspan="2"><?php echo _SETTINGS_SUB_GENERAL?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_DEFBLOG?> <?php help('defaultblog'); ?></td>\r
+                       <td>\r
+                               <?php\r
+                                       $query =  'SELECT bname as text, bnumber as value'\r
+                                                  . ' FROM '.sql_table('blog');\r
+                                       $template['name'] = 'DefaultBlog';\r
+                                       $template['selected'] = $CONF['DefaultBlog'];\r
+                                       $template['tabindex'] = 10;\r
+                                       showlist($query,'select',$template);\r
+                               ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_BASESKIN?> <?php help('baseskin'); ?></td>\r
+                       <td>\r
+                               <?php\r
+                                       $query =  'SELECT sdname as text, sdnumber as value'\r
+                                                  . ' FROM '.sql_table('skin_desc');\r
+                                       $template['name'] = 'BaseSkin';\r
+                                       $template['selected'] = $CONF['BaseSkin'];\r
+                                       $template['tabindex'] = 1;\r
+                                       showlist($query,'select',$template);\r
+                               ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_ADMINMAIL?></td>\r
+                       <td><input name="AdminEmail" tabindex="10010" size="40" value="<?php echo  htmlspecialchars($CONF['AdminEmail']) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_SITENAME?></td>\r
+                       <td><input name="SiteName" tabindex="10020" size="40" value="<?php echo  htmlspecialchars($CONF['SiteName']) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_SITEURL?></td>\r
+                       <td><input name="IndexURL" tabindex="10030" size="40" value="<?php echo  htmlspecialchars($CONF['IndexURL']) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_ADMINURL?></td>\r
+                       <td><input name="AdminURL" tabindex="10040" size="40" value="<?php echo  htmlspecialchars($CONF['AdminURL']) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_PLUGINURL?> <?php help('pluginurl');?></td>\r
+                       <td><input name="PluginURL" tabindex="10045" size="40" value="<?php echo  htmlspecialchars($CONF['PluginURL']) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_SKINSURL?> <?php help('skinsurl');?></td>\r
+                       <td><input name="SkinsURL" tabindex="10046" size="40" value="<?php echo  htmlspecialchars($CONF['SkinsURL']) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_ACTIONSURL?> <?php help('actionurl');?></td>\r
+                       <td><input name="ActionURL" tabindex="10047" size="40" value="<?php echo  htmlspecialchars($CONF['ActionURL']) ?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_LANGUAGE?> <?php help('language'); ?>\r
+                       </td>\r
+                       <td>\r
+\r
+                               <select name="Language" tabindex="10050">\r
+                               <?php                      // show a dropdown list of all available languages\r
+                               global $DIR_LANG;\r
+                               $dirhandle = opendir($DIR_LANG);\r
+                               while ($filename = readdir($dirhandle)) {\r
+                                       if (ereg("^(.*)\.php$",$filename,$matches)) {\r
+                                               $name = $matches[1];\r
+                                               echo "<option value='$name'";\r
+                                               if ($name == $CONF['Language'])\r
+                                                       echo " selected='selected'";\r
+                                               echo ">$name</option>";\r
+                                       }\r
+                               }\r
+                               closedir($dirhandle);\r
+\r
+                               ?>\r
+                               </select>\r
+\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_DISABLESITE?> <?php help('disablesite'); ?>\r
+                       </td>\r
+                       <td><?php $this->input_yesno('DisableSite',$CONF['DisableSite'],10060); ?>\r
+                                       <br />\r
+                               <?php echo _SETTINGS_DISABLESITEURL ?> <input name="DisableSiteURL" tabindex="10070" size="40" value="<?php echo  htmlspecialchars($CONF['DisableSiteURL'])?>" />\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_DIRS?></td>\r
+                       <td><?php echo  htmlspecialchars($DIR_NUCLEUS) ?>\r
+                               <i><?php echo _SETTINGS_SEECONFIGPHP?></i></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_DBLOGIN?></td>\r
+                       <td><i><?php echo _SETTINGS_SEECONFIGPHP?></i></td>\r
+               </tr><tr>\r
+                       <td>\r
+                       <?php\r
+                               echo _SETTINGS_JSTOOLBAR\r
+                               /* =_SETTINGS_DISABLEJS\r
+\r
+                                       I temporary changed the meaning of DisableJsTools, until I can find a good\r
+                                       way to select the javascript version to use\r
+\r
+                                       now, its:\r
+                                               0 : IE\r
+                                               1 : all javascript disabled\r
+                                               2 : 'simpler' javascript (for mozilla/opera/mac)\r
+                               */\r
+                          ?>\r
+                       </td>\r
+                       <td><?php /* $this->input_yesno('DisableJsTools',$CONF['DisableJsTools'],10075); */?>\r
+                               <select name="DisableJsTools" tabindex="10075">\r
+                       <?php                              $extra = ($CONF['DisableJsTools'] == 1) ? 'selected="selected"' : '';\r
+                                       echo "<option $extra value='1'>",_SETTINGS_JSTOOLBAR_NONE,"</option>";\r
+                                       $extra = ($CONF['DisableJsTools'] == 2) ? 'selected="selected"' : '';\r
+                                       echo "<option $extra value='2'>",_SETTINGS_JSTOOLBAR_SIMPLE,"</option>";\r
+                                       $extra = ($CONF['DisableJsTools'] == 0) ? 'selected="selected"' : '';\r
+                                       echo "<option $extra value='0'>",_SETTINGS_JSTOOLBAR_FULL,"</option>";\r
+                       ?>\r
+                               </select>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_URLMODE?> <?php help('urlmode');?></td>\r
+                                          <td><?php\r
+\r
+                                          $this->input_yesno('URLMode',$CONF['URLMode'],10077,\r
+                                                         'normal','pathinfo',_SETTINGS_URLMODE_NORMAL,_SETTINGS_URLMODE_PATHINFO);\r
+\r
+                                          echo ' ', _SETTINGS_URLMODE_HELP;\r
+\r
+                                                        ?>\r
+\r
+                                          </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_DEBUGVARS?> <?php help('debugvars');?></td>\r
+                                          <td><?php\r
+\r
+                                               $this->input_yesno('DebugVars',$CONF['DebugVars'],10078);\r
+\r
+                                                        ?>\r
+\r
+                                          </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_DEFAULTLISTSIZE?> <?php help('defaultlistsize');?></td>\r
+                       <td>\r
+                       <?php\r
+                               if (!array_key_exists('DefaultListSize',$CONF)) {\r
+                                       sql_query("INSERT INTO ".sql_table('config')." VALUES ('DefaultListSize', '10')");\r
+                                       $CONF['DefaultListSize'] = 10;\r
+                               }\r
+                       ?>\r
+                               <input name="DefaultListSize" tabindex="10079" size="40" value="<?php echo  htmlspecialchars((intval($CONF['DefaultListSize']) < 1 ? '10' : $CONF['DefaultListSize'])) ?>" />\r
+                       </td>\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _SETTINGS_MEDIA?> <?php help('media'); ?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_MEDIADIR?></td>\r
+                       <td><?php echo  htmlspecialchars($DIR_MEDIA) ?>\r
+                               <i><?php echo _SETTINGS_SEECONFIGPHP?></i>\r
+                               <?php                              if (!is_dir($DIR_MEDIA))\r
+                                               echo "<br /><b>" . _WARNING_NOTADIR . "</b>";\r
+                                       if (!is_readable($DIR_MEDIA))\r
+                                               echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>";\r
+                                       if (!is_writeable($DIR_MEDIA))\r
+                                               echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>";\r
+                               ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_MEDIAURL?></td>\r
+                       <td>\r
+                               <input name="MediaURL" tabindex="10080" size="40" value="<?php echo  htmlspecialchars($CONF['MediaURL']) ?>" />\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_ALLOWUPLOAD?></td>\r
+                       <td><?php $this->input_yesno('AllowUpload',$CONF['AllowUpload'],10090); ?></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_ALLOWUPLOADTYPES?></td>\r
+                       <td>\r
+                               <input name="AllowedTypes" tabindex="10100" size="40" value="<?php echo  htmlspecialchars($CONF['AllowedTypes']) ?>" />\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_MAXUPLOADSIZE?></td>\r
+                       <td>\r
+                               <input name="MaxUploadSize" tabindex="10105" size="40" value="<?php echo  htmlspecialchars($CONF['MaxUploadSize']) ?>" />\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_MEDIAPREFIX?></td>\r
+                       <td><?php $this->input_yesno('MediaPrefix',$CONF['MediaPrefix'],10110); ?></td>\r
+\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _SETTINGS_MEMBERS?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_CHANGELOGIN?></td>\r
+                       <td><?php $this->input_yesno('AllowLoginEdit',$CONF['AllowLoginEdit'],10120); ?></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_ALLOWCREATE?>\r
+                               <?php help('allowaccountcreation'); ?>\r
+                       </td>\r
+                       <td><?php $this->input_yesno('AllowMemberCreate',$CONF['AllowMemberCreate'],10130); ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_NEWLOGIN?> <?php help('allownewmemberlogin'); ?>\r
+                               <br /><?php echo _SETTINGS_NEWLOGIN2?>\r
+                       </td>\r
+                       <td><?php $this->input_yesno('NewMemberCanLogon',$CONF['NewMemberCanLogon'],10140); ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_MEMBERMSGS?>\r
+                               <?php help('messageservice'); ?>\r
+                       </td>\r
+                       <td><?php $this->input_yesno('AllowMemberMail',$CONF['AllowMemberMail'],10150); ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_NONMEMBERMSGS?>\r
+                               <?php help('messageservice'); ?>\r
+                       </td>\r
+                       <td><?php $this->input_yesno('NonmemberMail',$CONF['NonmemberMail'],10155); ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_PROTECTMEMNAMES?>\r
+                               <?php help('protectmemnames'); ?>\r
+                       </td>\r
+                       <td><?php $this->input_yesno('ProtectMemNames',$CONF['ProtectMemNames'],10156); ?>\r
+                       </td>\r
+\r
+\r
+\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _SETTINGS_COOKIES_TITLE?> <?php help('cookies'); ?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_COOKIEPREFIX?></td>\r
+                       <td><input name="CookiePrefix" tabindex="10159" size="40" value="<?php echo  htmlspecialchars($CONF['CookiePrefix'])?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_COOKIEDOMAIN?></td>\r
+                       <td><input name="CookieDomain" tabindex="10160" size="40" value="<?php echo  htmlspecialchars($CONF['CookieDomain'])?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_COOKIEPATH?></td>\r
+                       <td><input name="CookiePath" tabindex="10170" size="40" value="<?php echo  htmlspecialchars($CONF['CookiePath'])?>" /></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_COOKIESECURE?></td>\r
+                       <td><?php $this->input_yesno('CookieSecure',$CONF['CookieSecure'],10180); ?></td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_COOKIELIFE?></td>\r
+                       <td><?php $this->input_yesno('SessionCookie',$CONF['SessionCookie'],10190,\r
+                                                         1,0,_SETTINGS_COOKIESESSION,_SETTINGS_COOKIEMONTH); ?>\r
+                       </td>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_LASTVISIT?></td>\r
+                       <td><?php $this->input_yesno('LastVisit',$CONF['LastVisit'],10200); ?></td>\r
+\r
+\r
+\r
+               </tr><tr>\r
+                       <th colspan="2"><?php echo _SETTINGS_UPDATE?></th>\r
+               </tr><tr>\r
+                       <td><?php echo _SETTINGS_UPDATE?></td>\r
+                       <td><input type="submit" tabindex="10210" value="<?php echo _SETTINGS_UPDATE_BTN?>" onclick="return checkSubmit();" /></td>\r
+               </tr></table>\r
+\r
+               </div>\r
+               </form>\r
+\r
+               <?php\r
+                       echo '<h2>',_PLUGINS_EXTRA,'</h2>';\r
+\r
+                       $manager->notify(\r
+                               'GeneralSettingsFormExtras',\r
+                               array()\r
+                       );\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_settingsupdate() {\r
+               global $member, $CONF;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // check if email address for admin is valid\r
+               if (!isValidMailAddress(postVar('AdminEmail')))\r
+                       $this->error(_ERROR_BADMAILADDRESS);\r
+\r
+\r
+               // save settings\r
+               $this->updateConfig('DefaultBlog',        postVar('DefaultBlog'));\r
+               $this->updateConfig('BaseSkin',          postVar('BaseSkin'));\r
+               $this->updateConfig('IndexURL',          postVar('IndexURL'));\r
+               $this->updateConfig('AdminURL',          postVar('AdminURL'));\r
+               $this->updateConfig('PluginURL',                postVar('PluginURL'));\r
+               $this->updateConfig('SkinsURL',          postVar('SkinsURL'));\r
+               $this->updateConfig('ActionURL',                postVar('ActionURL'));\r
+               $this->updateConfig('Language',          postVar('Language'));\r
+               $this->updateConfig('AdminEmail',          postVar('AdminEmail'));\r
+               $this->updateConfig('SessionCookie',    postVar('SessionCookie'));\r
+               $this->updateConfig('AllowMemberCreate',postVar('AllowMemberCreate'));\r
+               $this->updateConfig('AllowMemberMail',  postVar('AllowMemberMail'));\r
+               $this->updateConfig('NonmemberMail',    postVar('NonmemberMail'));\r
+               $this->updateConfig('ProtectMemNames',  postVar('ProtectMemNames'));\r
+               $this->updateConfig('SiteName',          postVar('SiteName'));\r
+               $this->updateConfig('NewMemberCanLogon',postVar('NewMemberCanLogon'));\r
+               $this->updateConfig('DisableSite',        postVar('DisableSite'));\r
+               $this->updateConfig('DisableSiteURL',   postVar('DisableSiteURL'));\r
+               $this->updateConfig('LastVisit',                postVar('LastVisit'));\r
+               $this->updateConfig('MediaURL',          postVar('MediaURL'));\r
+               $this->updateConfig('AllowedTypes',      postVar('AllowedTypes'));\r
+               $this->updateConfig('AllowUpload',        postVar('AllowUpload'));\r
+               $this->updateConfig('MaxUploadSize',    postVar('MaxUploadSize'));\r
+               $this->updateConfig('MediaPrefix',        postVar('MediaPrefix'));\r
+               $this->updateConfig('AllowLoginEdit',   postVar('AllowLoginEdit'));\r
+               $this->updateConfig('DisableJsTools',   postVar('DisableJsTools'));\r
+               $this->updateConfig('CookieDomain',      postVar('CookieDomain'));\r
+               $this->updateConfig('CookiePath',          postVar('CookiePath'));\r
+               $this->updateConfig('CookieSecure',      postVar('CookieSecure'));\r
+               $this->updateConfig('URLMode',            postVar('URLMode'));\r
+               $this->updateConfig('CookiePrefix',      postVar('CookiePrefix'));\r
+               $this->updateConfig('DebugVars',                postVar('DebugVars'));\r
+               $this->updateConfig('DefaultListSize',  postVar('DefaultListSize'));\r
+\r
+               // load new config and redirect (this way, the new language will be used is necessary)\r
+               // note that when changing cookie settings, this redirect might cause the user\r
+               // to have to log in again.\r
+               getConfig();\r
+               redirect($CONF['AdminURL'] . '?action=manage');\r
+               exit;\r
+\r
+       }\r
+\r
+       /**\r
+        *  Give an overview over the used system\r
+        */\r
+       function action_systemoverview() {\r
+               global $member, $nucleus, $CONF;\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<h2>' . _ADMIN_SYSTEMOVERVIEW_HEADING . "</h2>\n";\r
+\r
+               if ($member->isLoggedIn() && $member->isAdmin()) {\r
+\r
+                       // Information about the used PHP and MySQL installation\r
+                       echo '<h3>' . _ADMIN_SYSTEMOVERVIEW_PHPANDMYSQL . "</h3>\n";\r
+\r
+                       // Version of PHP MySQL\r
+                       echo "<table>\n";\r
+                       echo "\t<tr>\n";\r
+                       echo "\t\t" . '<th colspan="2">' . _ADMIN_SYSTEMOVERVIEW_VERSIONS . "</th>\n";\r
+                       echo "\t</tr><tr>\n";\r
+                       echo "\t\t" . '<td width="50%">' . _ADMIN_SYSTEMOVERVIEW_PHPVERSION . "</td>\n";\r
+                       echo "\t\t" . '<td>' . phpversion() . "</td>\n";\r
+                       echo "\t</tr><tr>\n";\r
+                       echo "\t\t" . '<td>' . _ADMIN_SYSTEMOVERVIEW_MYSQLVERSION . "</td>\n";\r
+                       echo "\t\t" . '<td>' . sql_get_server_info() . ' (' . sql_get_client_info() . ')' . "</td>\n";\r
+                       echo "\t</tr>";\r
+                       echo "</table>\n";\r
+\r
+                       // Important PHP settings\r
+                       echo "<table>\n";\r
+                       echo "\t<tr>\n";\r
+                       echo "\t\t" . '<th colspan="2">' . _ADMIN_SYSTEMOVERVIEW_SETTINGS . "</th>\n";\r
+                       echo "\t</tr><tr>\n";\r
+                       echo "\t\t" . '<td width="50%">magic_quotes_gpc' . "</td>\n";\r
+                       $mqg = get_magic_quotes_gpc() ? 'On' : 'Off';\r
+                       echo "\t\t" . '<td>' . $mqg . "</td>\n";\r
+                       echo "\t</tr><tr>\n";\r
+                       echo "\t\t" . '<td>magic_quotes_runtime' . "</td>\n";\r
+                       $mqr = get_magic_quotes_runtime() ? 'On' : 'Off';\r
+                       echo "\t\t" . '<td>' . $mqr . "</td>\n";\r
+                       echo "\t</tr><tr>\n";\r
+                       echo "\t\t" . '<td>register_globals' . "</td>\n";\r
+                       $rg = ini_get('register_globals') ? 'On' : 'Off';\r
+                       echo "\t\t" . '<td>' . $rg . "</td>\n";\r
+                       echo "\t</tr>";\r
+                       echo "</table>\n";\r
+\r
+                       // Information about GD library\r
+                       $gdinfo = gd_info();\r
+                       echo "<table>\n";\r
+                       echo "\t<tr>";\r
+                       echo "\t\t" . '<th colspan="2">' . _ADMIN_SYSTEMOVERVIEW_GDLIBRALY . "</th>\n";\r
+                       echo "\t</tr>\n";\r
+                       foreach ($gdinfo as $key=>$value) {\r
+                               if (is_bool($value)) {\r
+                                       $value = $value ? _ADMIN_SYSTEMOVERVIEW_ENABLE : _ADMIN_SYSTEMOVERVIEW_DISABLE;\r
+                               } else {\r
+                                       $value = htmlspecialchars($value, ENT_QUOTES);\r
+                               }\r
+                               echo "\t<tr>";\r
+                               echo "\t\t" . '<td width="50%">' . $key . "</td>\n";\r
+                               echo "\t\t" . '<td>' . $value . "</td>\n";\r
+                               echo "\t</tr>\n";\r
+                       }\r
+                       echo "</table>\n";\r
+\r
+                       // Check if special modules are loaded\r
+                       ob_start();\r
+                       phpinfo(INFO_MODULES);\r
+                       $im = ob_get_contents();\r
+                       ob_clean();\r
+                       echo "<table>\n";\r
+                       echo "\t<tr>";\r
+                       echo "\t\t" . '<th colspan="2">' . _ADMIN_SYSTEMOVERVIEW_MODULES . "</th>\n";\r
+                       echo "\t</tr><tr>\n";\r
+                       echo "\t\t" . '<td width="50%">mod_rewrite' . "</td>\n";\r
+                       $modrewrite = (strstr($im, 'mod_rewrite') != '') ?\r
+                                               _ADMIN_SYSTEMOVERVIEW_ENABLE :\r
+                                               _ADMIN_SYSTEMOVERVIEW_DISABLE;\r
+                       echo "\t\t" . '<td>' . $modrewrite . "</td>\n";\r
+                       echo "\t</tr>\n";\r
+                       echo "</table>\n";\r
+\r
+                       // Information about the used Nucleus CMS\r
+                       echo '<h3>' . _ADMIN_SYSTEMOVERVIEW_NUCLEUSSYSTEM . "</h3>\n";\r
+                       global $nucleus;\r
+                       $nv = getNucleusVersion() / 100 . '(' . $nucleus['version'] . ')';\r
+                       $np = getNucleusPatchLevel();\r
+                       echo "<table>\n";\r
+                       echo "\t<tr>";\r
+                       echo "\t\t" . '<th colspan="2">Nucleus CMS' . "</th>\n";\r
+                       echo "\t</tr><tr>\n";\r
+                       echo "\t\t" . '<td width="50%">' . _ADMIN_SYSTEMOVERVIEW_NUCLEUSVERSION . "</td>\n";\r
+                       echo "\t\t" . '<td>' . $nv . "</td>\n";\r
+                       echo "\t</tr><tr>\n";\r
+                       echo "\t\t" . '<td width="50%">' . _ADMIN_SYSTEMOVERVIEW_NUCLEUSPATCHLEVEL . "</td>\n";\r
+                       echo "\t\t" . '<td>' . $np . "</td>\n";\r
+                       echo "\t</tr>\n";\r
+                       echo "</table>\n";\r
+\r
+                       // Important settings of the installation\r
+                       echo "<table>\n";\r
+                       echo "\t<tr>";\r
+                       echo "\t\t" . '<th colspan="2">' . _ADMIN_SYSTEMOVERVIEW_NUCLEUSSETTINGS . "</th>\n";\r
+                       echo "\t</tr><tr>\n";\r
+                       echo "\t\t" . '<td width="50%">' . '$CONF[' . "'Self']</td>\n";\r
+                       echo "\t\t" . '<td>' . $CONF['Self'] . "</td>\n";\r
+                       echo "\t</tr><tr>\n";\r
+                       echo "\t\t" . '<td width="50%">' . '$CONF[' . "'ItemURL']</td>\n";\r
+                       echo "\t\t" . '<td>' . $CONF['ItemURL'] . "</td>\n";\r
+                       echo "\t</tr><tr>\n";\r
+                       echo "\t\t" . '<td width="50%">' . '$CONF[' . "'alertOnHeadersSent']</td>\n";\r
+                       $ohs = $CONF['alertOnHeadersSent'] ?\r
+                                               _ADMIN_SYSTEMOVERVIEW_ENABLE :\r
+                                               _ADMIN_SYSTEMOVERVIEW_DISABLE;\r
+                       echo "\t\t" . '<td>' . $ohs . "</td>\n";\r
+                       echo "\t</tr>\n";\r
+                       echo "</table>\n";\r
+\r
+                       // Link to the online version test at the Nucleus CMS website\r
+                       echo '<h3>' . _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK . "</h3>\n";\r
+                       if ($nucleus['codename'] != '') {\r
+                               $codenamestring = ' &quot;' . $nucleus['codename'] . '&quot;';\r
+                       } else {\r
+                               $codenamestring = '';\r
+                       }\r
+                       echo _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TXT;\r
+                       $checkURL = sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());\r
+                       echo '<a href="' . $checkURL . '" title="' . _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE . '">';\r
+                       echo 'Nucleus CMS ' . $nv . $codenamestring;\r
+                       echo '</a>';\r
+               //echo '<br />';\r
+               }\r
+               else {\r
+                       echo _ADMIN_SYSTEMOVERVIEW_NOT_ADMIN;\r
+               }\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function updateConfig($name, $val) {\r
+               $name = addslashes($name);\r
+               $val = trim(addslashes($val));\r
+\r
+               $query = 'UPDATE '.sql_table('config')\r
+                          . " SET value='$val'"\r
+                          . " WHERE name='$name'";\r
+\r
+               sql_query($query) or die(_ADMIN_SQLDIE_QUERYERROR . sql_error());\r
+               return sql_insert_id();\r
+       }\r
+\r
+       /**\r
+        * Error message\r
+        * @param string $msg message that will be shown\r
+        */\r
+       function error($msg) {\r
+               $this->pagehead();\r
+               ?>\r
+               <h2>Error!</h2>\r
+               <?php      echo $msg;\r
+               echo "<br />";\r
+               echo "<a href='index.php' onclick='history.back()'>"._BACK."</a>";\r
+               $this->pagefoot();\r
+               exit;\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function disallow() {\r
+               ACTIONLOG::add(WARNING, _ACTIONLOG_DISALLOWED . serverVar('REQUEST_URI'));\r
+\r
+               $this->error(_ERROR_DISALLOWED);\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function pagehead($extrahead = '') {\r
+               global $member, $nucleus, $CONF, $manager;\r
+\r
+               $manager->notify(\r
+                       'AdminPrePageHead',\r
+                       array(\r
+                               'extrahead' => &$extrahead,\r
+                               'action' => $this->action\r
+                       )\r
+               );\r
+\r
+               $baseUrl = htmlspecialchars($CONF['AdminURL']);\r
+\r
+               ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+               <html <?php echo _HTML_XML_NAME_SPACE_AND_LANG_CODE; ?>>\r
+               <head>\r
+                       <meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />\r
+                       <title><?php echo htmlspecialchars($CONF['SiteName'])?> - Admin</title>\r
+                       <link rel="stylesheet" title="Nucleus Admin Default" type="text/css" href="<?php echo $baseUrl?>styles/admin.css" />\r
+                       <link rel="stylesheet" title="Nucleus Admin Default" type="text/css"\r
+                       href="<?php echo $baseUrl?>styles/addedit.css" />\r
+\r
+                       <script type="text/javascript" src="<?php echo $baseUrl?>javascript/edit.js"></script>\r
+                       <script type="text/javascript" src="<?php echo $baseUrl?>javascript/admin.js"></script>\r
+                       <script type="text/javascript" src="<?php echo $baseUrl?>javascript/compatibility.js"></script>\r
+\r
+         <meta http-equiv='Pragma' content='no-cache' />\r
+         <meta http-equiv='Cache-Control' content='no-cache, must-revalidate' />\r
+         <meta http-equiv='Expires' content='-1' />\r
+\r
+                       <?php echo $extrahead?>\r
+               </head>\r
+               <body>\r
+               <div id="adminwrapper">\r
+               <div class="header">\r
+               <h1><?php echo htmlspecialchars($CONF['SiteName'])?></h1>\r
+               </div>\r
+               <div id="container">\r
+               <div id="content">\r
+               <div class="loginname">\r
+               <?php              if ($member->isLoggedIn())\r
+                               echo _LOGGEDINAS . ' ' . $member->getDisplayName()\r
+                                       ." - <a href='index.php?action=logout'>" . _LOGOUT. "</a>"\r
+                                       . "<br /><a href='index.php?action=overview'>" . _ADMINHOME . "</a> - ";\r
+                       else\r
+                               echo '<a href="index.php?action=showlogin" title="Log in">' , _NOTLOGGEDIN , '</a> <br />';\r
+\r
+                       echo "<a href='".$CONF['IndexURL']."'>"._YOURSITE."</a>";\r
+\r
+                       echo '<br />(';\r
+\r
+                       $codenamestring = ($nucleus['codename']!='')? ' &quot;'.$nucleus['codename'].'&quot;':'';\r
+\r
+                       if ($member->isLoggedIn() && $member->isAdmin()) {\r
+                               $checkURL = sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());\r
+                               echo '<a href="' . $checkURL . '" title="' . _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE . '">Nucleus CMS ' . $nucleus['version'] . $codenamestring . '</a>';\r
+                               $newestVersion = getLatestVersion();\r
+                               $newestCompare = str_replace('/','.',$newestVersion);\r
+                               $newestCompare = intval($newestCompare);\r
+                               $currentVersion = str_replace(array('/','v'),array('.',''),$nucleus['version']);\r
+                               if ($newestVersion && version_compare($newestCompare,$currentVersion) > 0) {\r
+                                       echo '<br /><a style="color:red" href="http://nucleuscms.org/upgrade.php" title="'._ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE.'">'._ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT.$newestVersion.'</a>';\r
+                               }\r
+                       } else {\r
+                               echo 'Nucleus CMS ' . $nucleus['version'] . $codenamestring;\r
+                       }\r
+                       echo ')';\r
+               echo '</div>';\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function pagefoot() {\r
+               global $action, $member, $manager;\r
+\r
+               $manager->notify(\r
+                       'AdminPrePageFoot',\r
+                       array(\r
+                               'action' => $this->action\r
+                       )\r
+               );\r
+\r
+               if ($member->isLoggedIn() && ($action != 'showlogin')) {\r
+                       ?>\r
+                       <h2><?php echo  _LOGOUT ?></h2>\r
+                       <ul>\r
+                               <li><a href="index.php?action=overview"><?php echo  _BACKHOME?></a></li>\r
+                               <li><a href='index.php?action=logout'><?php echo  _LOGOUT?></a></li>\r
+                       </ul>\r
+                       <?php      }\r
+               ?>\r
+                       <div class="foot">\r
+                               <a href="<?php echo _ADMINPAGEFOOT_OFFICIALURL ?>">Nucleus CMS</a> &copy; 2002-<?php echo date('Y') . ' ' . _ADMINPAGEFOOT_COPYRIGHT; ?>\r
+                               -\r
+                               <a href="<?php echo _ADMINPAGEFOOT_DONATEURL ?>"><?php echo _ADMINPAGEFOOT_DONATE ?></a>\r
+                       </div>\r
+\r
+                       </div><!-- content -->\r
+\r
+                       <div id="quickmenu">\r
+\r
+                               <?php                      // ---- user settings ----\r
+                               if (($action != 'showlogin') && ($member->isLoggedIn())) {\r
+                                       echo '<ul>';\r
+                                       echo '<li><a href="index.php?action=overview">',_QMENU_HOME,'</a></li>';\r
+                                       echo '</ul>';\r
+\r
+                                       echo '<h2>',_QMENU_ADD,'</h2>';\r
+                                       echo '<form method="get" action="index.php"><div>';\r
+                                       echo '<input type="hidden" name="action" value="createitem" />';\r
+\r
+                                               $showAll = requestVar('showall');\r
+                                               if (($member->isAdmin()) && ($showAll == 'yes')) {\r
+                                                       // Super-Admins have access to all blogs! (no add item support though)\r
+                                                       $query =  'SELECT bnumber as value, bname as text'\r
+                                                                  . ' FROM ' . sql_table('blog')\r
+                                                                  . ' ORDER BY bname';\r
+                                               } else {\r
+                                                       $query =  'SELECT bnumber as value, bname as text'\r
+                                                                  . ' FROM ' . sql_table('blog') . ', ' . sql_table('team')\r
+                                                                  . ' WHERE tblog=bnumber and tmember=' . $member->getID()\r
+                                                                  . ' ORDER BY bname';\r
+                                               }\r
+                                               $template['name'] = 'blogid';\r
+                                               $template['tabindex'] = 15000;\r
+                                               $template['extra'] = _QMENU_ADD_SELECT;\r
+                                               $template['selected'] = -1;\r
+                                               $template['shorten'] = 10;\r
+                                               $template['shortenel'] = '';\r
+                                               $template['javascript'] = 'onchange="return form.submit()"';\r
+                                               showlist($query,'select',$template);\r
+\r
+                                       echo '</div></form>';\r
+\r
+                                       echo '<h2>' . $member->getDisplayName(). '</h2>';\r
+                                       echo '<ul>';\r
+                                       echo '<li><a href="index.php?action=editmembersettings">' . _QMENU_USER_SETTINGS . '</a></li>';\r
+                                       echo '<li><a href="index.php?action=browseownitems">' . _QMENU_USER_ITEMS . '</a></li>';\r
+                                       echo '<li><a href="index.php?action=browseowncomments">' . _QMENU_USER_COMMENTS . '</a></li>';\r
+                                       echo '</ul>';\r
+\r
+\r
+\r
+\r
+                                       // ---- general settings ----\r
+                                       if ($member->isAdmin()) {\r
+\r
+                                               echo '<h2>',_QMENU_MANAGE,'</h2>';\r
+\r
+                                               echo '<ul>';\r
+                                               echo '<li><a href="index.php?action=actionlog">' . _QMENU_MANAGE_LOG . '</a></li>';\r
+                                               echo '<li><a href="index.php?action=settingsedit">' . _QMENU_MANAGE_SETTINGS . '</a></li>';\r
+                                               echo '<li><a href="index.php?action=systemoverview">' . _QMENU_MANAGE_SYSTEM . '</a></li>';\r
+                                               echo '<li><a href="index.php?action=usermanagement">' . _QMENU_MANAGE_MEMBERS . '</a></li>';\r
+                                               echo '<li><a href="index.php?action=createnewlog">' . _QMENU_MANAGE_NEWBLOG . '</a></li>';\r
+                                               echo '<li><a href="index.php?action=backupoverview">' . _QMENU_MANAGE_BACKUPS . '</a></li>';\r
+                                               echo '<li><a href="index.php?action=pluginlist">' . _QMENU_MANAGE_PLUGINS . '</a></li>';\r
+                                               echo '</ul>';\r
+\r
+                                               echo '<h2>',_QMENU_LAYOUT,'</h2>';\r
+                                               echo '<ul>';\r
+                                               echo '<li><a href="index.php?action=skinoverview">' . _QMENU_LAYOUT_SKINS . '</a></li>';\r
+                                               echo '<li><a href="index.php?action=templateoverview">' . _QMENU_LAYOUT_TEMPL . '</a></li>';\r
+                                               echo '<li><a href="index.php?action=skinieoverview">' . _QMENU_LAYOUT_IEXPORT . '</a></li>';\r
+                                               echo '</ul>';\r
+\r
+                                       }\r
+\r
+                                       $aPluginExtras = array();\r
+                                       $manager->notify(\r
+                                               'QuickMenu',\r
+                                               array(\r
+                                                       'options' => &$aPluginExtras\r
+                                               )\r
+                                       );\r
+                                       if (count($aPluginExtras) > 0)\r
+                                       {\r
+                                               echo '<h2>', _QMENU_PLUGINS, '</h2>';\r
+                                               echo '<ul>';\r
+                                               foreach ($aPluginExtras as $aInfo)\r
+                                               {\r
+                                                       echo '<li><a href="'.htmlspecialchars($aInfo['url']).'" title="'.htmlspecialchars($aInfo['tooltip']).'">'.htmlspecialchars($aInfo['title']).'</a></li>';\r
+                                               }\r
+                                               echo '</ul>';\r
+                                       }\r
+\r
+                               } else if (($action == 'activate') || ($action == 'activatesetpwd')) {\r
+\r
+                                       echo '<h2>', _QMENU_ACTIVATE, '</h2>', _QMENU_ACTIVATE_TEXT;\r
+                               } else {\r
+                                       // introduction text on login screen\r
+                                       echo '<h2>', _QMENU_INTRO, '</h2>', _QMENU_INTRO_TEXT;\r
+                               }\r
+                               ?>\r
+                       </div>\r
+\r
+                       <!-- content / quickmenu container -->\r
+                       <div class="clear"></div>       <!-- new -->\r
+                       </div>\r
+\r
+                       <!-- adminwrapper -->   <!-- new -->\r
+                       </div>   <!-- new -->\r
+                       </body>\r
+                       </html>\r
+               <?php   }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_regfile() {\r
+               global $member, $CONF;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               $member->teamRights($blogid) or $this->disallow();\r
+\r
+               // header-code stolen from phpMyAdmin\r
+               // REGEDIT and bookmarklet code stolen from GreyMatter\r
+\r
+               $sjisBlogName = sprintf(_WINREGFILE_TEXT, getBlogNameFromID($blogid));\r
+               $sjisBlogName = mb_convert_encoding($sjisBlogName, "SJIS", "auto");\r
+\r
+               header('Content-Type: application/octetstream');\r
+               header('Content-Disposition: filename="nucleus.reg"');\r
+               header('Pragma: no-cache');\r
+               header('Expires: 0');\r
+\r
+               echo "REGEDIT4\n";\r
+               echo "[HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\MenuExt\\" . $sjisBlogName . "]\n";\r
+               echo '@="' . $CONF['AdminURL'] . "bookmarklet.php?action=contextmenucode&blogid=".intval($blogid)."\"\n";\r
+               echo '"contexts"=hex:31';\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_bookmarklet() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               $member->teamRights($blogid) or $this->disallow();\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+               $bm = getBookmarklet($blogid);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
+\r
+               ?>\r
+\r
+               <h2><?php echo _BOOKMARKLET_TITLE ?></h2>\r
+\r
+               <p>\r
+               <?php echo _BOOKMARKLET_DESC1 . _BOOKMARKLET_DESC2 . _BOOKMARKLET_DESC3 . _BOOKMARKLET_DESC4 . _BOOKMARKLET_DESC5 ?>\r
+               </p>\r
+\r
+               <h3><?php echo _BOOKMARKLET_BOOKARKLET ?></h3>\r
+               <p>\r
+                       <?php echo _BOOKMARKLET_BMARKTEXT ?><small><?php echo _BOOKMARKLET_BMARKTEST ?></small>\r
+                       <br />\r
+                       <br />\r
+                       <?php echo '<a href="' . htmlspecialchars($bm, ENT_QUOTES) . '">' . sprintf(_BOOKMARKLET_ANCHOR, htmlspecialchars($blog->getName(), ENT_QUOTES)) . '</a>' . _BOOKMARKLET_BMARKFOLLOW; ?>\r
+               </p>\r
+\r
+               <h3><?php echo _BOOKMARKLET_RIGHTCLICK ?></h3>\r
+               <p>\r
+                       <?php\r
+                               $url = 'index.php?action=regfile&blogid=' . intval($blogid);\r
+                               $url = $manager->addTicketToUrl($url);\r
+                       ?>\r
+                       <?php echo _BOOKMARKLET_RIGHTTEXT1 . '<a href="' . htmlspecialchars($url, ENT_QUOTES, "SJIS") . '">' . _BOOKMARKLET_RIGHTLABEL . '</a>' . _BOOKMARKLET_RIGHTTEXT2; ?>\r
+               </p>\r
+\r
+               <p>\r
+                       <?php echo _BOOKMARKLET_RIGHTTEXT3 ?>\r
+               </p>\r
+\r
+               <h3><?php echo _BOOKMARKLET_UNINSTALLTT ?></h3>\r
+               <p>\r
+                       <?php echo _BOOKMARKLET_DELETEBAR ?>\r
+               </p>\r
+\r
+               <p>\r
+                       <?php echo _BOOKMARKLET_DELETERIGHTT ?>\r
+               </p>\r
+\r
+               <ol>\r
+                       <li><?php echo _BOOKMARKLET_DELETERIGHT1 ?></li>\r
+                       <li><?php echo _BOOKMARKLET_DELETERIGHT2 ?></li>\r
+                       <li><?php echo _BOOKMARKLET_DELETERIGHT3 ?></li>\r
+                       <li><?php echo _BOOKMARKLET_DELETERIGHT4 ?></li>\r
+                       <li><?php echo _BOOKMARKLET_DELETERIGHT5 ?></li>\r
+               </ol>\r
+\r
+               <?php\r
+               $this->pagefoot();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_actionlog() {\r
+               global $member, $manager;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
+\r
+               $url = $manager->addTicketToUrl('index.php?action=clearactionlog');\r
+\r
+               ?>\r
+                       <h2><?php echo _ACTIONLOG_CLEAR_TITLE?></h2>\r
+                       <p><a href="<?php echo htmlspecialchars($url)?>"><?php echo _ACTIONLOG_CLEAR_TEXT?></a></p>\r
+               <?php\r
+               echo '<h2>' . _ACTIONLOG_TITLE . '</h2>';\r
+\r
+               $query =  'SELECT * FROM '.sql_table('actionlog').' ORDER BY timestamp DESC';\r
+               $template['content'] = 'actionlist';\r
+               $amount = showlist($query,'table',$template);\r
+\r
+               $this->pagefoot();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_banlist() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=overview">(',_BACKHOME,')</a></p>';\r
+\r
+               echo '<h2>' . _BAN_TITLE . " '". $this->bloglink($blog) ."'</h2>";\r
+\r
+               $query =  'SELECT * FROM '.sql_table('ban').' WHERE blogid='.$blogid.' ORDER BY iprange';\r
+               $template['content'] = 'banlist';\r
+               $amount = showlist($query,'table',$template);\r
+\r
+               if ($amount == 0)\r
+                       echo _BAN_NONE;\r
+\r
+               echo '<h2>'._BAN_NEW_TITLE.'</h2>';\r
+               echo "<p><a href='index.php?action=banlistnew&amp;blogid=$blogid'>"._BAN_NEW_TEXT."</a></p>";\r
+\r
+\r
+               $this->pagefoot();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_banlistdelete() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intRequestVar('blogid');\r
+               $iprange = requestVar('iprange');\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+               $banBlogName =  htmlspecialchars($blog->getName(), ENT_QUOTES);\r
+\r
+               $this->pagehead();\r
+               ?>\r
+                       <h2><?php echo _BAN_REMOVE_TITLE?></h2>\r
+\r
+                       <form method="post" action="index.php">\r
+\r
+                       <h3><?php echo _BAN_IPRANGE?></h3>\r
+\r
+                       <p>\r
+                               <?php echo _CONFIRMTXT_BAN?> <?php echo htmlspecialchars($iprange) ?>\r
+                               <input name="iprange" type="hidden" value="<?php echo htmlspecialchars($iprange)?>" />\r
+                       </p>\r
+\r
+                       <h3><?php echo _BAN_BLOGS?></h3>\r
+\r
+                       <div>\r
+                               <input type="hidden" name="blogid" value="<?php echo $blogid?>" />\r
+                               <input name="allblogs" type="radio" value="0" id="allblogs_one" />\r
+                               <label for="allblogs_one"><?php echo sprintf(_BAN_BANBLOGNAME, $banBlogName) ?></label>\r
+                               <br />\r
+                               <input name="allblogs" type="radio" value="1" checked="checked" id="allblogs_all" /><label for="allblogs_all"><?php echo _BAN_ALLBLOGS?></label>\r
+                       </div>\r
+\r
+                       <h3><?php echo _BAN_DELETE_TITLE?></h3>\r
+\r
+                       <div>\r
+                               <?php $manager->addTicketHidden() ?>\r
+                               <input type="hidden" name="action" value="banlistdeleteconfirm" />\r
+                               <input type="submit" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
+                       </div>\r
+\r
+                       </form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_banlistdeleteconfirm() {\r
+               global $member, $manager;\r
+\r
+               $blogid = intPostVar('blogid');\r
+               $allblogs = postVar('allblogs');\r
+               $iprange = postVar('iprange');\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $deleted = array();\r
+\r
+               if (!$allblogs) {\r
+                       if (BAN::removeBan($blogid, $iprange))\r
+                               array_push($deleted, $blogid);\r
+               } else {\r
+                       // get blogs fot which member has admin rights\r
+                       $adminblogs = $member->getAdminBlogs();\r
+                       foreach ($adminblogs as $blogje) {\r
+                               if (BAN::removeBan($blogje, $iprange))\r
+                                       array_push($deleted, $blogje);\r
+                       }\r
+               }\r
+\r
+               if (sizeof($deleted) == 0)\r
+                       $this->error(_ERROR_DELETEBAN);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<a href="index.php?action=banlist&amp;blogid=',$blogid,'">(',_BACK,')</a>';\r
+               echo '<h2>'._BAN_REMOVED_TITLE.'</h2>';\r
+               echo "<p>"._BAN_REMOVED_TEXT."</p>";\r
+\r
+               echo "<ul>";\r
+               foreach ($deleted as $delblog) {\r
+                       $b =& $manager->getBlog($delblog);\r
+                       echo "<li>" . htmlspecialchars($b->getName()). "</li>";\r
+               }\r
+               echo "</ul>";\r
+\r
+               $this->pagefoot();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_banlistnewfromitem() {\r
+               $this->action_banlistnew(getBlogIDFromItemID(intRequestVar('itemid')));\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_banlistnew($blogid = '') {\r
+               global $member, $manager;\r
+\r
+               if ($blogid == '')\r
+                       $blogid = intRequestVar('blogid');\r
+\r
+               $ip = requestVar('ip');\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               $blog =& $manager->getBlog($blogid);\r
+\r
+               $this->pagehead();\r
+               ?>\r
+               <h2><?php echo _BAN_ADD_TITLE?></h2>\r
+\r
+\r
+               <form method="post" action="index.php">\r
+\r
+               <h3><?php echo _BAN_IPRANGE?></h3>\r
+\r
+               <p><?php echo _BAN_IPRANGE_TEXT?></p>\r
+\r
+               <div class="note">\r
+                       <strong><?php echo _BAN_EXAMPLE_TITLE ?></strong>\r
+                       <?php echo _BAN_EXAMPLE_TEXT ?>\r
+               </div>\r
+\r
+               <div>\r
+               <?php\r
+               if ($ip) {\r
+                       $iprangeVal = htmlspecialchars($ip, ENT_QUOTES);\r
+               ?>\r
+                       <input name="iprange" type="radio" value="<?php echo $iprangeVal ?>" checked="checked" id="ip_fixed" />\r
+                       <label for="ip_fixed"><?php echo $iprangeVal ?></label>\r
+                       <br />\r
+                       <input name="iprange" type="radio" value="custom" id="ip_custom" />\r
+                       <label for="ip_custom"><?php echo _BAN_IP_CUSTOM ?></label>\r
+                       <input name='customiprange' value='<?php echo $iprangeVal ?>' maxlength='15' size='15' />\r
+               <?php\r
+               } else {\r
+                               echo "<input name='iprange' value='custom' type='hidden' />";\r
+                               echo "<input name='customiprange' value='' maxlength='15' size='15' />";\r
+                       }\r
+               ?>\r
+               </div>\r
+\r
+               <h3><?php echo _BAN_BLOGS?></h3>\r
+\r
+               <p><?php echo _BAN_BLOGS_TEXT?></p>\r
+\r
+               <div>\r
+                       <input type="hidden" name="blogid" value="<?php echo $blogid?>" />\r
+                       <input name="allblogs" type="radio" value="0" id="allblogs_one" /><label for="allblogs_one">'<?php echo htmlspecialchars($blog->getName())?>'</label>\r
+                       <br />\r
+                       <input name="allblogs" type="radio" value="1" checked="checked" id="allblogs_all" /><label for="allblogs_all"><?php echo _BAN_ALLBLOGS?></label>\r
+               </div>\r
+\r
+               <h3><?php echo _BAN_REASON_TITLE?></h3>\r
+\r
+               <p><?php echo _BAN_REASON_TEXT?></p>\r
+\r
+               <div><textarea name="reason" cols="40" rows="5"></textarea></div>\r
+\r
+               <h3><?php echo _BAN_ADD_TITLE?></h3>\r
+\r
+               <div>\r
+                       <input name="action" type="hidden" value="banlistadd" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+                       <input type="submit" value="<?php echo _BAN_ADD_BTN?>" />\r
+               </div>\r
+\r
+               </form>\r
+\r
+               <?php      $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_banlistadd() {\r
+               global $member;\r
+\r
+               $blogid =          intPostVar('blogid');\r
+               $allblogs =      postVar('allblogs');\r
+               $iprange =        postVar('iprange');\r
+               if ($iprange == "custom")\r
+                       $iprange = postVar('customiprange');\r
+               $reason =          postVar('reason');\r
+\r
+               $member->blogAdminRights($blogid) or $this->disallow();\r
+\r
+               // TODO: check IP range validity\r
+\r
+               if (!$allblogs) {\r
+                       if (!BAN::addBan($blogid, $iprange, $reason))\r
+                               $this->error(_ERROR_ADDBAN);\r
+               } else {\r
+                       // get blogs fot which member has admin rights\r
+                       $adminblogs = $member->getAdminBlogs();\r
+                       $failed = 0;\r
+                       foreach ($adminblogs as $blogje) {\r
+                               if (!BAN::addBan($blogje, $iprange, $reason))\r
+                                       $failed = 1;\r
+                       }\r
+                       if ($failed)\r
+                               $this->error(_ERROR_ADDBAN);\r
+               }\r
+\r
+               $this->action_banlist();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_clearactionlog() {\r
+               global $member;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               ACTIONLOG::clear();\r
+\r
+               $this->action_manage(_MSG_ACTIONLOGCLEARED);\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_backupoverview() {\r
+               global $member, $manager;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
+               ?>\r
+               <h2><?php echo _BACKUPS_TITLE?></h2>\r
+\r
+               <h3><?php echo _BACKUP_TITLE?></h3>\r
+\r
+               <p><?php echo _BACKUP_INTRO?></p>\r
+\r
+               <form method="post" action="index.php"><p>\r
+               <input type="hidden" name="action" value="backupcreate" />\r
+               <?php $manager->addTicketHidden() ?>\r
+\r
+               <input type="radio" name="gzip" value="1" checked="checked" id="gzip_yes" tabindex="10" /><label for="gzip_yes"><?php echo _BACKUP_ZIP_YES?></label>\r
+               <br />\r
+               <input type="radio" name="gzip" value="0" id="gzip_no" tabindex="10" /><label for="gzip_no" ><?php echo _BACKUP_ZIP_NO?></label>\r
+               <br /><br />\r
+               <input type="submit" value="<?php echo _BACKUP_BTN?>" tabindex="20" />\r
+\r
+               </p></form>\r
+\r
+               <div class="note"><?php echo _BACKUP_NOTE?></div>\r
+\r
+\r
+               <h3><?php echo _RESTORE_TITLE?></h3>\r
+\r
+               <div class="note"><?php echo _RESTORE_NOTE?></div>\r
+\r
+               <p><?php echo _RESTORE_INTRO?></p>\r
+\r
+               <form method="post" action="index.php" enctype="multipart/form-data"><p>\r
+                       <input type="hidden" name="action" value="backuprestore" />\r
+                       <?php $manager->addTicketHidden() ?>\r
+                       <input name="backup_file" type="file" tabindex="30" />\r
+                       <br /><br />\r
+                       <input type="submit" value="<?php echo _RESTORE_BTN?>" tabindex="40" />\r
+                       <br /><input type="checkbox" name="letsgo" value="1" id="letsgo" tabindex="50" /><label for="letsgo"><?php echo _RESTORE_IMSURE?></label>\r
+                       <br /><?php echo _RESTORE_WARNING?>\r
+               </p></form>\r
+\r
+               <?php      $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_backupcreate() {\r
+               global $member, $DIR_LIBS;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // use compression ?\r
+               $useGzip = intval(postVar('gzip'));\r
+\r
+               include($DIR_LIBS . 'backup.php');\r
+\r
+               // try to extend time limit\r
+               // (creating/restoring dumps might take a while)\r
+               @set_time_limit(1200);\r
+\r
+               $bu = new Backup();\r
+               $bu->do_backup($useGzip);\r
+               exit;\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_backuprestore() {\r
+               global $member, $DIR_LIBS;\r
+\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               if (intPostVar('letsgo') != 1)\r
+                       $this->error(_ERROR_BACKUP_NOTSURE);\r
+\r
+               include($DIR_LIBS . 'backup.php');\r
+\r
+               // try to extend time limit\r
+               // (creating/restoring dumps might take a while)\r
+               @set_time_limit(1200);\r
+\r
+               $bu = new Backup();\r
+               $message = $bu->do_restore();\r
+               if ($message != '')\r
+                       $this->error($message);\r
+\r
+               $this->pagehead();\r
+               ?>\r
+               <h2><?php echo _RESTORE_COMPLETE?></h2>\r
+               <?php      $this->pagefoot();\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_pluginlist() {\r
+               global $member, $manager;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=manage">(',_BACKTOMANAGE,')</a></p>';\r
+\r
+               echo '<h2>' , _PLUGS_TITLE_MANAGE , ' ', help('plugins'), '</h2>';\r
+\r
+               echo '<h3>' , _PLUGS_TITLE_INSTALLED , ' &nbsp;&nbsp;<span style="font-size:smaller">', helplink('getplugins'), _PLUGS_TITLE_GETPLUGINS, '</a></span></h3>';\r
+\r
+\r
+               $query =  'SELECT * FROM '.sql_table('plugin').' ORDER BY porder ASC';\r
+\r
+               $template['content'] = 'pluginlist';\r
+               $template['tabindex'] = 10;\r
+               showlist($query, 'table', $template);\r
+\r
+               ?>\r
+                       <h3><?php echo _PLUGS_TITLE_UPDATE?></h3>\r
+\r
+                       <p><?php echo _PLUGS_TEXT_UPDATE?></p>\r
+\r
+                       <form method="post" action="index.php"><div>\r
+                               <input type="hidden" name="action" value="pluginupdate" />\r
+                               <?php $manager->addTicketHidden() ?>\r
+                               <input type="submit" value="<?php echo _PLUGS_BTN_UPDATE ?>" tabindex="20" />\r
+                       </div></form>\r
+\r
+                       <h3><?php echo _PLUGS_TITLE_NEW?></h3>\r
+\r
+                       <?php                      // find a list of possibly non-installed plugins\r
+                               $candidates = array();\r
+                               global $DIR_PLUGINS;\r
+                               $dirhandle = opendir($DIR_PLUGINS);\r
+                               while ($filename = readdir($dirhandle)) {\r
+                                       if (ereg('^NP_(.*)\.php$',$filename,$matches)) {\r
+                                               $name = $matches[1];\r
+                                               // only show in list when not yet installed\r
+                                               $res = sql_query('SELECT * FROM '.sql_table('plugin').' WHERE pfile="NP_'.addslashes($name).'"');\r
+                                               if (sql_num_rows($res) == 0)\r
+                                                       array_push($candidates,$name);\r
+                                       }\r
+                               }\r
+                               closedir($dirhandle);\r
+\r
+                               if (sizeof($candidates) > 0) {\r
+                       ?>\r
+\r
+                       <p><?php echo _PLUGS_ADD_TEXT?></p>\r
+\r
+\r
+                       <form method='post' action='index.php'><div>\r
+                               <input type='hidden' name='action' value='pluginadd' />\r
+                               <?php $manager->addTicketHidden() ?>\r
+                               <select name="filename" tabindex="30">\r
+                               <?php                              foreach($candidates as $name)\r
+                                               echo '<option value="NP_',$name,'">',htmlspecialchars($name),'</option>';\r
+                               ?>\r
+                               </select>\r
+                               <input type='submit' tabindex="40" value='<?php echo _PLUGS_BTN_INSTALL?>' />\r
+                       </div></form>\r
+\r
+               <?php              } else {     // sizeof(candidates) == 0\r
+                               echo '<p>',_PLUGS_NOCANDIDATES,'</p>';\r
+                       }\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_pluginhelp() {\r
+               global $member, $manager, $DIR_PLUGINS, $CONF;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $plugid = intGetVar('plugid');\r
+\r
+               if (!$manager->pidInstalled($plugid))\r
+                       $this->error(_ERROR_NOSUCHPLUGIN);\r
+\r
+               $plugName = getPluginNameFromPid($plugid);\r
+\r
+               $this->pagehead();\r
+\r
+               echo '<p><a href="index.php?action=pluginlist">(',_PLUGS_BACK,')</a></p>';\r
+\r
+               echo '<h2>',_PLUGS_HELP_TITLE,': ',htmlspecialchars($plugName),'</h2>';\r
+\r
+               $plug =& $manager->getPlugin($plugName);\r
+               $helpFile = $DIR_PLUGINS.$plug->getShortName().'/help.html';\r
+\r
+               if (($plug->supportsFeature('HelpPage') > 0) && (@file_exists($helpFile))) {\r
+                       @readfile($helpFile);\r
+               } else {\r
+                       echo '<p>' . _ERROR .': ', _ERROR_PLUGNOHELPFILE,'</p>';\r
+                       echo '<p><a href="index.php?action=pluginlist">(',_BACK,')</a></p>';\r
+               }\r
+\r
+\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_pluginadd() {\r
+               global $member, $manager, $DIR_PLUGINS;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $name = postVar('filename');\r
+\r
+               if ($manager->pluginInstalled($name))\r
+                       $this->error(_ERROR_DUPPLUGIN);\r
+               if (!checkPlugin($name))\r
+                       $this->error(_ERROR_PLUGFILEERROR . ' (' . htmlspecialchars($name) . ')');\r
+\r
+               // get number of currently installed plugins\r
+               $res = sql_query('SELECT * FROM '.sql_table('plugin'));\r
+               $numCurrent = sql_num_rows($res);\r
+\r
+               // plugin will be added as last one in the list\r
+               $newOrder = $numCurrent + 1;\r
+\r
+               $manager->notify(\r
+                       'PreAddPlugin',\r
+                       array(\r
+                               'file' => &$name\r
+                       )\r
+               );\r
+\r
+               // do this before calling getPlugin (in case the plugin id is used there)\r
+               $query = 'INSERT INTO '.sql_table('plugin').' (porder, pfile) VALUES ('.$newOrder.',"'.addslashes($name).'")';\r
+               sql_query($query);\r
+               $iPid = sql_insert_id();\r
+\r
+               $manager->clearCachedInfo('installedPlugins');\r
+\r
+               // Load the plugin for condition checking and instalation\r
+               $plugin =& $manager->getPlugin($name);\r
+\r
+               // check if it got loaded (could have failed)\r
+               if (!$plugin)\r
+               {\r
+                       sql_query('DELETE FROM ' . sql_table('plugin') . ' WHERE pid='. intval($iPid));\r
+                       $manager->clearCachedInfo('installedPlugins');\r
+                       $this->error(_ERROR_PLUGIN_LOAD);\r
+               }\r
+\r
+               // check if plugin needs a newer Nucleus version\r
+               if (getNucleusVersion() < $plugin->getMinNucleusVersion())\r
+               {\r
+                       // uninstall plugin again...\r
+                       $this->deleteOnePlugin($plugin->getID());\r
+\r
+                       // ...and show error\r
+                       $this->error(_ERROR_NUCLEUSVERSIONREQ . htmlspecialchars($plugin->getMinNucleusVersion()));\r
+               }\r
+\r
+               // check if plugin needs a newer Nucleus version\r
+               if ((getNucleusVersion() == $plugin->getMinNucleusVersion()) && (getNucleusPatchLevel() < $plugin->getMinNucleusPatchLevel()))\r
+               {\r
+                       // uninstall plugin again...\r
+                       $this->deleteOnePlugin($plugin->getID());\r
+\r
+                       // ...and show error\r
+                       $this->error(_ERROR_NUCLEUSVERSIONREQ . htmlspecialchars( $plugin->getMinNucleusVersion() . ' patch ' . $plugin->getMinNucleusPatchLevel() ) );\r
+               }\r
+\r
+               $pluginList = $plugin->getPluginDep();\r
+               foreach ($pluginList as $pluginName)\r
+               {\r
+\r
+                       $res = sql_query('SELECT * FROM '.sql_table('plugin') . ' WHERE pfile="' . $pluginName . '"');\r
+                       if (sql_num_rows($res) == 0)\r
+                       {\r
+                               // uninstall plugin again...\r
+                               $this->deleteOnePlugin($plugin->getID());\r
+\r
+                               $this->error(sprintf(_ERROR_INSREQPLUGIN, htmlspecialchars($pluginName, ENT_QUOTES)));\r
+                       }\r
+               }\r
+\r
+               // call the install method of the plugin\r
+               $plugin->install();\r
+\r
+               $manager->notify(\r
+                       'PostAddPlugin',\r
+                       array(\r
+                               'plugin' => &$plugin\r
+                       )\r
+               );\r
+\r
+               // update all events\r
+               $this->action_pluginupdate();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_pluginupdate() {\r
+               global $member, $manager, $CONF;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               // delete everything from plugin_events\r
+               sql_query('DELETE FROM '.sql_table('plugin_event'));\r
+\r
+               // loop over all installed plugins\r
+               $res = sql_query('SELECT pid, pfile FROM '.sql_table('plugin'));\r
+               while($o = sql_fetch_object($res)) {\r
+                       $pid = $o->pid;\r
+                       $plug =& $manager->getPlugin($o->pfile);\r
+                       if ($plug)\r
+                       {\r
+                               $eventList = $plug->getEventList();\r
+                               foreach ($eventList as $eventName)\r
+                                       sql_query('INSERT INTO '.sql_table('plugin_event').' (pid, event) VALUES ('.$pid.', \''.addslashes($eventName).'\')');\r
+                       }\r
+               }\r
+\r
+               redirect($CONF['AdminURL'] . '?action=pluginlist');\r
+//             $this->action_pluginlist();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_plugindelete() {\r
+               global $member, $manager;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $pid = intGetVar('plugid');\r
+\r
+               if (!$manager->pidInstalled($pid))\r
+                       $this->error(_ERROR_NOSUCHPLUGIN);\r
+\r
+               $this->pagehead();\r
+               ?>\r
+                       <h2><?php echo _DELETE_CONFIRM?></h2>\r
+\r
+                       <p><?php echo _CONFIRMTXT_PLUGIN?> <strong><?php echo getPluginNameFromPid($pid)?></strong>?</p>\r
+\r
+                       <form method="post" action="index.php"><div>\r
+                       <?php $manager->addTicketHidden() ?>\r
+                       <input type="hidden" name="action" value="plugindeleteconfirm" />\r
+                       <input type="hidden" name="plugid" value="<?php echo $pid; ?>" />\r
+                       <input type="submit" tabindex="10" value="<?php echo _DELETE_CONFIRM_BTN?>" />\r
+                       </div></form>\r
+               <?php\r
+               $this->pagefoot();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_plugindeleteconfirm() {\r
+               global $member, $manager, $CONF;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $pid = intPostVar('plugid');\r
+\r
+               $error = $this->deleteOnePlugin($pid, 1);\r
+               if ($error) {\r
+                       $this->error($error);\r
+               }\r
+\r
+               redirect($CONF['AdminURL'] . '?action=pluginlist');\r
+//             $this->action_pluginlist();\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function deleteOnePlugin($pid, $callUninstall = 0) {\r
+               global $manager;\r
+\r
+               $pid = intval($pid);\r
+\r
+               if (!$manager->pidInstalled($pid))\r
+                       return _ERROR_NOSUCHPLUGIN;\r
+\r
+               $name = quickQuery('SELECT pfile as result FROM '.sql_table('plugin').' WHERE pid='.$pid);\r
+\r
+/*             // call the unInstall method of the plugin\r
+               if ($callUninstall) {\r
+                       $plugin =& $manager->getPlugin($name);\r
+                       if ($plugin) $plugin->unInstall();\r
+               }*/\r
+\r
+               // check dependency before delete\r
+               $res = sql_query('SELECT pfile FROM '.sql_table('plugin'));\r
+               while($o = sql_fetch_object($res)) {\r
+                       $plug =& $manager->getPlugin($o->pfile);\r
+                       if ($plug)\r
+                       {\r
+                               $depList = $plug->getPluginDep();\r
+                               foreach ($depList as $depName)\r
+                               {\r
+                                       if ($name == $depName)\r
+                                       {\r
+                                               return sprintf(_ERROR_DELREQPLUGIN, $o->pfile);\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               $manager->notify('PreDeletePlugin', array('plugid' => $pid));\r
+\r
+               // call the unInstall method of the plugin\r
+               if ($callUninstall) {\r
+                       $plugin =& $manager->getPlugin($name);\r
+                       if ($plugin) $plugin->unInstall();\r
+               }\r
+\r
+               // delete all subscriptions\r
+               sql_query('DELETE FROM '.sql_table('plugin_event').' WHERE pid=' . $pid);\r
+\r
+               // delete all options\r
+               // get OIDs from plugin_option_desc\r
+               $res = sql_query('SELECT oid FROM ' . sql_table('plugin_option_desc') . ' WHERE opid=' . $pid);\r
+               $aOIDs = array();\r
+               while ($o = sql_fetch_object($res)) {\r
+                       array_push($aOIDs, $o->oid);\r
+               }\r
+\r
+               // delete from plugin_option and plugin_option_desc\r
+               sql_query('DELETE FROM '.sql_table('plugin_option_desc').' WHERE opid=' . $pid);\r
+               if (count($aOIDs) > 0)\r
+                       sql_query('DELETE FROM '.sql_table('plugin_option').' WHERE oid in ('.implode(',',$aOIDs).')');\r
+\r
+               // update order numbers\r
+               $res = sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid=' . $pid);\r
+               $o = sql_fetch_object($res);\r
+               sql_query('UPDATE '.sql_table('plugin').' SET porder=(porder - 1) WHERE porder>'.$o->porder);\r
+\r
+               // delete row\r
+               sql_query('DELETE FROM '.sql_table('plugin').' WHERE pid='.$pid);\r
+\r
+               $manager->clearCachedInfo('installedPlugins');\r
+               $manager->notify('PostDeletePlugin', array('plugid' => $pid));\r
+\r
+               return '';\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_pluginup() {\r
+               global $member, $manager, $CONF;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $plugid = intGetVar('plugid');\r
+\r
+               if (!$manager->pidInstalled($plugid))\r
+                       $this->error(_ERROR_NOSUCHPLUGIN);\r
+\r
+               // 1. get old order number\r
+               $res = sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid='.$plugid);\r
+               $o = sql_fetch_object($res);\r
+               $oldOrder = $o->porder;\r
+\r
+               // 2. calculate new order number\r
+               $newOrder = ($oldOrder > 1) ? ($oldOrder - 1) : 1;\r
+\r
+               // 3. update plug numbers\r
+               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$oldOrder.' WHERE porder='.$newOrder);\r
+               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$newOrder.' WHERE pid='.$plugid);\r
+\r
+               //$this->action_pluginlist();\r
+               // To avoid showing ticket in the URL, redirect to pluginlist, instead.\r
+               redirect($CONF['AdminURL'] . '?action=pluginlist');\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_plugindown() {\r
+               global $member, $manager, $CONF;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $plugid = intGetVar('plugid');\r
+               if (!$manager->pidInstalled($plugid))\r
+                       $this->error(_ERROR_NOSUCHPLUGIN);\r
+\r
+               // 1. get old order number\r
+               $res = sql_query('SELECT porder FROM '.sql_table('plugin').' WHERE pid='.$plugid);\r
+               $o = sql_fetch_object($res);\r
+               $oldOrder = $o->porder;\r
+\r
+               $res = sql_query('SELECT * FROM '.sql_table('plugin'));\r
+               $maxOrder = sql_num_rows($res);\r
+\r
+               // 2. calculate new order number\r
+               $newOrder = ($oldOrder < $maxOrder) ? ($oldOrder + 1) : $maxOrder;\r
+\r
+               // 3. update plug numbers\r
+               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$oldOrder.' WHERE porder='.$newOrder);\r
+               sql_query('UPDATE '.sql_table('plugin').' SET porder='.$newOrder.' WHERE pid='.$plugid);\r
+\r
+               //$this->action_pluginlist();\r
+               // To avoid showing ticket in the URL, redirect to pluginlist, instead.\r
+               redirect($CONF['AdminURL'] . '?action=pluginlist');\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_pluginoptions($message = '') {\r
+               global $member, $manager;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $pid = intRequestVar('plugid');\r
+               if (!$manager->pidInstalled($pid))\r
+                       $this->error(_ERROR_NOSUCHPLUGIN);\r
+\r
+               $extrahead = '<script type="text/javascript" src="javascript/numbercheck.js"></script>';\r
+               $pluginName = htmlspecialchars(getPluginNameFromPid($pid), ENT_QUOTES);\r
+               $this->pagehead($extrahead);\r
+\r
+               ?>\r
+                       <p><a href="index.php?action=pluginlist">(<?php echo _PLUGS_BACK?>)</a></p>\r
+\r
+                       <h2><?php echo sprintf(_PLUGIN_OPTIONS_TITLE, $pluginName) ?></h2>\r
+\r
+                       <?php if  ($message) echo $message?>\r
+\r
+                       <form action="index.php" method="post">\r
+                       <div>\r
+                               <input type="hidden" name="action" value="pluginoptionsupdate" />\r
+                               <input type="hidden" name="plugid" value="<?php echo $pid?>" />\r
+\r
+               <?php\r
+\r
+               $manager->addTicketHidden();\r
+\r
+               $aOptions = array();\r
+               $aOIDs = array();\r
+               $query = 'SELECT * FROM ' . sql_table('plugin_option_desc') . ' WHERE ocontext=\'global\' and opid=' . $pid . ' ORDER BY oid ASC';\r
+               $r = sql_query($query);\r
+               while ($o = sql_fetch_object($r)) {\r
+                       array_push($aOIDs, $o->oid);\r
+                       $aOptions[$o->oid] = array(\r
+                                               'oid' => $o->oid,\r
+                                               'value' => $o->odef,\r
+                                               'name' => $o->oname,\r
+                                               'description' => $o->odesc,\r
+                                               'type' => $o->otype,\r
+                                               'typeinfo' => $o->oextra,\r
+                                               'contextid' => 0\r
+                       );\r
+               }\r
+               // fill out actual values\r
+               if (count($aOIDs) > 0) {\r
+                       $r = sql_query('SELECT oid, ovalue FROM ' . sql_table('plugin_option') . ' WHERE oid in ('.implode(',',$aOIDs).')');\r
+                       while ($o = sql_fetch_object($r))\r
+                               $aOptions[$o->oid]['value'] = $o->ovalue;\r
+               }\r
+\r
+               // call plugins\r
+               $manager->notify('PrePluginOptionsEdit',array('context' => 'global', 'plugid' => $pid, 'options'=>&$aOptions));\r
+\r
+               $template['content'] = 'plugoptionlist';\r
+               $amount = showlist($aOptions,'table',$template);\r
+               if ($amount == 0)\r
+                       echo '<p>',_ERROR_NOPLUGOPTIONS,'</p>';\r
+\r
+               ?>\r
+                       </div>\r
+                       </form>\r
+               <?php      $this->pagefoot();\r
+\r
+\r
+\r
+       }\r
+\r
+       /**\r
+        * @todo document this\r
+        */\r
+       function action_pluginoptionsupdate() {\r
+               global $member, $manager;\r
+\r
+               // check if allowed\r
+               $member->isAdmin() or $this->disallow();\r
+\r
+               $pid = intRequestVar('plugid');\r
+               if (!$manager->pidInstalled($pid))\r
+                       $this->error(_ERROR_NOSUCHPLUGIN);\r
+\r
+               $aOptions = requestArray('plugoption');\r
+               NucleusPlugin::_applyPluginOptions($aOptions);\r
+\r
+               $manager->notify('PostPluginOptionsUpdate',array('context' => 'global', 'plugid' => $pid));\r
+\r
+               $this->action_pluginoptions(_PLUGS_OPTIONS_UPDATED);\r
+       }\r
+\r
+       /**\r
+        * @static\r
+        * @todo document this\r
+        */\r
+       function _insertPluginOptions($context, $contextid = 0) {\r
+               // get all current values for this contextid\r
+               // (note: this might contain doubles for overlapping contextids)\r
+               $aIdToValue = array();\r
+               $res = sql_query('SELECT oid, ovalue FROM ' . sql_table('plugin_option') . ' WHERE ocontextid=' . intval($contextid));\r
+               while ($o = sql_fetch_object($res)) {\r
+                       $aIdToValue[$o->oid] = $o->ovalue;\r
+               }\r
+\r
+               // get list of oids per pid\r
+               $query = 'SELECT * FROM ' . sql_table('plugin_option_desc') . ',' . sql_table('plugin')\r
+                          . ' WHERE opid=pid and ocontext=\''.addslashes($context).'\' ORDER BY porder, oid ASC';\r
+               $res = sql_query($query);\r
+               $aOptions = array();\r
+               while ($o = sql_fetch_object($res)) {\r
+                       if (in_array($o->oid, array_keys($aIdToValue)))\r
+                               $value = $aIdToValue[$o->oid];\r
+                       else\r
+                               $value = $o->odef;\r
+\r
+                       array_push($aOptions, array(\r
+                               'pid' => $o->pid,\r
+                               'pfile' => $o->pfile,\r
+                               'oid' => $o->oid,\r
+                               'value' => $value,\r
+                               'name' => $o->oname,\r
+                               'description' => $o->odesc,\r
+                               'type' => $o->otype,\r
+                               'typeinfo' => $o->oextra,\r
+                               'contextid' => $contextid,\r
+                               'extra' => ''\r
+                       ));\r
+               }\r
+\r
+               global $manager;\r
+               $manager->notify('PrePluginOptionsEdit',array('context' => $context, 'contextid' => $contextid, 'options'=>&$aOptions));\r
+\r
+\r
+               $iPrevPid = -1;\r
+               foreach ($aOptions as $aOption) {\r
+\r
+                       // new plugin?\r
+                       if ($iPrevPid != $aOption['pid']) {\r
+                               $iPrevPid = $aOption['pid'];\r
+\r
+\r
+\r
+                               echo '<tr><th colspan="2">'.sprintf(_PLUGIN_OPTIONS_TITLE, htmlspecialchars($aOption['pfile'], ENT_QUOTES)).'</th></tr>';\r
+                       }\r
+\r
+                       $meta = NucleusPlugin::getOptionMeta($aOption['typeinfo']);\r
+                       if (@$meta['access'] != 'hidden') {\r
+                               echo '<tr>';\r
+                               listplug_plugOptionRow($aOption);\r
+                               echo '</tr>';\r
+                       }\r
+\r
+               }\r
+\r
+\r
+       }\r
+\r
+       /**\r
+        * Helper functions to create option forms etc.\r
+        * @todo document parameters\r
+        */\r
+       function input_yesno($name, $checkedval,$tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO, $isAdmin = 0) {\r
+               $id = htmlspecialchars($name);\r
+               $id = str_replace('[','-',$id);\r
+               $id = str_replace(']','-',$id);\r
+               $id1 = $id . htmlspecialchars($value1);\r
+               $id2 = $id . htmlspecialchars($value2);\r
+\r
+               if ($name=="admin") {\r
+                       echo '<input onclick="selectCanLogin(true);" type="radio" name="', htmlspecialchars($name),'" value="', htmlspecialchars($value1),'" ';\r
+               } else {\r
+                       echo '<input type="radio" name="', htmlspecialchars($name),'" value="', htmlspecialchars($value1),'" ';\r
+               }\r
+\r
+                       if ($checkedval == $value1)\r
+                               echo "tabindex='$tabindex' checked='checked'";\r
+                       echo ' id="'.$id1.'" /><label for="'.$id1.'">' . $yesval . '</label>';\r
+               echo ' ';\r
+               if ($name=="admin") {\r
+                       echo '<input onclick="selectCanLogin(false);" type="radio" name="', htmlspecialchars($name),'" value="', htmlspecialchars($value2),'" ';\r
+               } else {\r
+                       echo '<input type="radio" name="', htmlspecialchars($name),'" value="', htmlspecialchars($value2),'" ';\r
+               }\r
+                       if ($checkedval != $value1)\r
+                               echo "tabindex='$tabindex' checked='checked'";\r
+                       if ($isAdmin && $name=="canlogin")\r
+                               echo ' disabled="disabled"';\r
+                       echo ' id="'.$id2.'" /><label for="'.$id2.'">' . $noval . '</label>';\r
+       }\r
+\r
+} // class ADMIN\r
+\r
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/BAN.php b/utf8/nucleus/libs/BAN.php
new file mode 100755 (executable)
index 0000000..d7271b0
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * PHP class responsible for ban-management.
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: BAN.php,v 1.6 2006/07/20 08:01:52 kimitake Exp $
+ */
+
+class BAN {
+
+       /**
+         * Checks if a given IP is banned from commenting/voting
+         *
+         * Returns 0 when not banned, or a BANINFO object containing the
+         * message and other information of the ban
+         */
+       function isBanned($blogid, $ip) {
+               $blogid = intval($blogid);
+               $query = 'SELECT * FROM '.sql_table('ban').' WHERE blogid='.$blogid;
+               $res = sql_query($query);
+               while ($obj = sql_fetch_object($res)) {
+                       $found = strpos ($ip, $obj->iprange);
+                       if (!($found === false))
+                               // found a match!
+                                       return new BANINFO($obj->iprange, $obj->reason);
+               }
+               return 0;
+       }
+
+       /**
+         * Adds a new ban to the banlist. Returns 1 on success, 0 on error
+         */
+       function addBan($blogid, $iprange, $reason) {
+               global $manager;
+
+               $blogid = intval($blogid);
+
+               $manager->notify(
+                       'PreAddBan',
+                       array(
+                               'blogid' => $blogid,
+                               'iprange' => &$iprange,
+                               'reason' => &$reason
+                       )
+               );
+
+               $query = 'INSERT INTO '.sql_table('ban')." (blogid, iprange, reason) VALUES "
+                          . "($blogid,'".addslashes($iprange)."','".addslashes($reason)."')";
+               $res = sql_query($query);
+
+               $manager->notify(
+                       'PostAddBan',
+                       array(
+                               'blogid' => $blogid,
+                               'iprange' => $iprange,
+                               'reason' => $reason
+                       )
+               );
+
+               return $res ? 1 : 0;
+       }
+
+       /**
+         * Removes a ban from the banlist (correct iprange is needed as argument)
+         * Returns 1 on success, 0 on error
+         */
+       function removeBan($blogid, $iprange) {
+               global $manager;
+               $blogid = intval($blogid);
+
+               $manager->notify('PreDeleteBan', array('blogid' => $blogid, 'range' => $iprange));
+
+               $query = 'DELETE FROM '.sql_table('ban')." WHERE blogid=$blogid and iprange='" .addslashes($iprange). "'";
+               sql_query($query);
+
+               $result = (sql_affected_rows() > 0);
+
+               $manager->notify('PostDeleteBan', array('blogid' => $blogid, 'range' => $iprange));
+
+               return $result;
+       }
+}
+
+class BANINFO {
+       var $iprange;
+       var $message;
+
+       function BANINFO($iprange, $message) {
+               $this->iprange = $iprange;
+               $this->message = $message;
+       }
+}
+
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/BLOG.php b/utf8/nucleus/libs/BLOG.php
new file mode 100755 (executable)
index 0000000..18af84b
--- /dev/null
@@ -0,0 +1,1298 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * A class representing a blog and containing functions to get that blog shown
+ * on the screen
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: BLOG.php,v 1.12.2.2 2007/08/08 05:26:22 kimitake Exp $
+ */
+
+if ( !function_exists('requestVar') ) exit;
+require_once dirname(__FILE__) . '/ITEMACTIONS.php';
+
+class BLOG {
+
+    // blog id
+    var $blogid;
+
+    // ID of currently selected category
+    var $selectedcatid;
+
+    // After creating an object of the blog class, contains true if the BLOG object is
+    // valid (the blog exists)
+    var $isValid;
+
+    // associative array, containing all blogsettings (use the get/set functions instead)
+    var $settings;
+
+    /**
+     * Creates a new BLOG object for the given blog
+     *
+     * @param $id blogid
+     */
+    function BLOG($id) {
+        $this->blogid = intval($id);
+        $this->readSettings();
+
+        // try to set catid
+        // (the parse functions in SKIN.php will override this, so it's mainly useless)
+        global $catid;
+        $this->setSelectedCategory($catid);
+    }
+
+    /**
+     * Shows the given amount of items for this blog
+     *
+     * @param $template
+     *      String representing the template _NAME_ (!)
+     * @param $amountEntries
+     *      amount of entries to show
+     * @param $startpos
+     *      offset from where items should be shown (e.g. 5 = start at fifth item)
+     * @returns int
+     *      amount of items shown
+     */
+    function readLog($template, $amountEntries, $offset = 0, $startpos = 0) {
+        return $this->readLogAmount($template,$amountEntries,'','',1,1,$offset, $startpos);
+    }
+
+    /**
+     * Shows an archive for a given month
+     *
+     * @param $year
+     *      year
+     * @param $month
+     *      month
+     * @param $template
+     *      String representing the template name to be used
+     */
+    function showArchive($templatename, $year, $month = 0, $day = 0) {
+
+        // create extra where clause for select query
+        if ($day == 0 && $month != 0) {
+            $timestamp_start = mktime(0,0,0,$month,1,$year);
+            $timestamp_end = mktime(0,0,0,$month+1,1,$year);  // also works when $month==12
+        } elseif ($month == 0) {
+            $timestamp_start = mktime(0,0,0,1,1,$year);
+            $timestamp_end = mktime(0,0,0,12,31,$year);  // also works when $month==12
+        } else {
+            $timestamp_start = mktime(0,0,0,$month,$day,$year);
+            $timestamp_end = mktime(0,0,0,$month,$day+1,$year);
+        }
+        $extra_query = ' and i.itime>=' . mysqldate($timestamp_start)
+                     . ' and i.itime<' . mysqldate($timestamp_end);
+
+
+        $this->readLogAmount($templatename,0,$extra_query,'',1,1);
+
+    }
+
+
+    // sets/gets current category (only when category exists)
+    function setSelectedCategory($catid) {
+        if ($this->isValidCategory($catid) || (intval($catid) == 0))
+            $this->selectedcatid = intval($catid);
+    }
+
+    function setSelectedCategoryByName($catname) {
+        $this->setSelectedCategory($this->getCategoryIdFromName($catname));
+    }
+
+    function getSelectedCategory() {
+        return $this->selectedcatid;
+    }
+
+    /**
+     * Shows the given amount of items for this blog
+     *
+     * @param $template
+     *      String representing the template _NAME_ (!)
+     * @param $amountEntries
+     *      amount of entries to show (0 = no limit)
+     * @param $extraQuery
+     *      extra conditions to be added to the query
+     * @param $highlight
+     *      contains a query that should be highlighted
+     * @param $comments
+     *      1=show comments 0=don't show comments
+     * @param $dateheads
+     *      1=show dateheads 0=don't show dateheads
+     * @param $offset
+     *      offset
+     * @returns int
+     *      amount of items shown
+     */
+    function readLogAmount($template, $amountEntries, $extraQuery, $highlight, $comments, $dateheads, $offset = 0, $startpos = 0) {
+
+        $query = $this->getSqlBlog($extraQuery);
+
+        if ($amountEntries > 0) {
+                // $offset zou moeten worden:
+                // (($startpos / $amountentries) + 1) * $offset ... later testen ...
+               $query .= ' LIMIT ' . intval($startpos + $offset).',' . intval($amountEntries);
+        }
+        return $this->showUsingQuery($template, $query, $highlight, $comments, $dateheads);
+    }
+
+    function showUsingQuery($templateName, $query, $highlight = '', $comments = 0, $dateheads = 1) {
+        global $CONF, $manager;
+
+        $lastVisit = cookieVar($CONF['CookiePrefix'] .'lastVisit');
+        if ($lastVisit != 0)
+            $lastVisit = $this->getCorrectTime($lastVisit);
+
+        // set templatename as global variable (so plugins can access it)
+        global $currentTemplateName;
+        $currentTemplateName = $templateName;
+
+        $template =& $manager->getTemplate($templateName);
+
+        // create parser object & action handler
+        $actions =& new ITEMACTIONS($this);
+        $parser =& new PARSER($actions->getDefinedActions(),$actions);
+        $actions->setTemplate($template);
+        $actions->setHighlight($highlight);
+        $actions->setLastVisit($lastVisit);
+        $actions->setParser($parser);
+        $actions->setShowComments($comments);
+
+        // execute query
+        $items = sql_query($query);
+
+        // loop over all items
+        $old_date = 0;
+        while ($item = sql_fetch_object($items)) {
+
+            $item->timestamp = strtotime($item->itime); // string timestamp -> unix timestamp
+
+            // action handler needs to know the item we're handling
+            $actions->setCurrentItem($item);
+
+            // add date header if needed
+            if ($dateheads) {
+                $new_date = date('dFY',$item->timestamp);
+                if ($new_date != $old_date) {
+                    // unless this is the first time, write date footer
+                    $timestamp = $item->timestamp;
+                    if ($old_date != 0) {
+                        $oldTS = strtotime($old_date);
+                        $manager->notify('PreDateFoot',array('blog' => &$this, 'timestamp' => $oldTS));
+                        $tmp_footer = strftime(isset($template['DATE_FOOTER'])?$template['DATE_FOOTER']:'', $oldTS);
+                        $parser->parse($tmp_footer);
+                        $manager->notify('PostDateFoot',array('blog' => &$this, 'timestamp' => $oldTS));
+                    }
+                    $manager->notify('PreDateHead',array('blog' => &$this, 'timestamp' => $timestamp));
+                    // note, to use templatvars in the dateheader, the %-characters need to be doubled in
+                    // order to be preserved by strftime
+                    $tmp_header = strftime((isset($template['DATE_HEADER']) ? $template['DATE_HEADER'] : null), $timestamp);
+                    $parser->parse($tmp_header);
+                    $manager->notify('PostDateHead',array('blog' => &$this, 'timestamp' => $timestamp));
+                }
+                $old_date = $new_date;
+            }
+
+            // parse item
+            $parser->parse($template['ITEM_HEADER']);
+            $manager->notify('PreItem', array('blog' => &$this, 'item' => &$item));
+            $parser->parse($template['ITEM']);
+            $manager->notify('PostItem', array('blog' => &$this, 'item' => &$item));
+            $parser->parse($template['ITEM_FOOTER']);
+
+        }
+
+        $numrows = sql_num_rows($items);
+
+        // add another date footer if there was at least one item
+        if (($numrows > 0) && $dateheads) {
+            $manager->notify('PreDateFoot',array('blog' => &$this, 'timestamp' => strtotime($old_date)));
+            $parser->parse($template['DATE_FOOTER']);
+            $manager->notify('PostDateFoot',array('blog' => &$this, 'timestamp' => strtotime($old_date)));
+        }
+
+        sql_free_result($items);    // free memory
+
+        return $numrows;
+
+    }
+
+    function showOneitem($itemid, $template, $highlight) {
+        $extraQuery = ' and inumber=' . intval($itemid);
+
+        return $this->readLogAmount($template, 1, $extraQuery, $highlight, 0, 0);
+    }
+
+
+    /**
+      * Adds an item to this blog
+      */
+    function additem($catid, $title, $body, $more, $blogid, $authorid, $timestamp, $closed, $draft, $posted='1') {
+        global $manager;
+
+        $blogid     = intval($blogid);
+        $authorid   = intval($authorid);
+        $title      = $title;
+        $body       = $body;
+        $more       = $more;
+        $catid      = intval($catid);
+
+        // convert newlines to <br />
+        if ($this->convertBreaks()) {
+            $body = addBreaks($body);
+            $more = addBreaks($more);
+        }
+
+        if ($closed != '1') $closed = '0';
+        if ($draft != '0') $draft = '1';
+
+        if (!$this->isValidCategory($catid))
+            $catid = $this->getDefaultCategory();
+
+        if ($timestamp > $this->getCorrectTime())
+            $isFuture = 1;
+
+        $timestamp = date('Y-m-d H:i:s',$timestamp);
+
+        $manager->notify('PreAddItem',array('title' => &$title, 'body' => &$body, 'more' => &$more, 'blog' => &$this, 'authorid' => &$authorid, 'timestamp' => &$timestamp, 'closed' => &$closed, 'draft' => &$draft, 'catid' => &$catid));
+
+        $title = addslashes($title);
+        $body = addslashes($body);
+        $more = addslashes($more);
+
+        $query = 'INSERT INTO '.sql_table('item').' (ITITLE, IBODY, IMORE, IBLOG, IAUTHOR, ITIME, ICLOSED, IDRAFT, ICAT, IPOSTED) '
+               . "VALUES ('$title', '$body', '$more', $blogid, $authorid, '$timestamp', $closed, $draft, $catid, $posted)";
+        sql_query($query);
+        $itemid = sql_insert_id();
+
+        $manager->notify('PostAddItem',array('itemid' => $itemid));
+
+        if (!$draft)
+            $this->updateUpdateFile();
+
+        // send notification mail
+        if (!$draft && !$isFuture && $this->getNotifyAddress() && $this->notifyOnNewItem())
+            $this->sendNewItemNotification($itemid, stripslashes($title), stripslashes($body));
+
+        return $itemid;
+    }
+
+    function sendNewItemNotification($itemid, $title, $body) {
+        global $CONF, $member;
+
+        // create text version of html post
+        $ascii = toAscii($body);
+
+        $mailto_msg = _NOTIFY_NI_MSG . " \n";
+//             $mailto_msg .= $CONF['IndexURL'] . 'index.php?itemid=' . $itemid . "\n\n";
+        $temp = parse_url($CONF['Self']);
+        if ($temp['scheme']) {
+            $mailto_msg .= createItemLink($itemid) . "\n\n";
+        } else {
+            $tempurl = $this->getURL();
+            if (substr($tempurl, -1) == '/' || substr($tempurl, -4) == '.php') {
+                $mailto_msg .= $tempurl . '?itemid=' . $itemid . "\n\n";
+            } else {
+                $mailto_msg .= $tempurl . '/?itemid=' . $itemid . "\n\n";
+            }
+        }
+        $mailto_msg .= _NOTIFY_TITLE . ' ' . strip_tags($title) . "\n";
+        $mailto_msg .= _NOTIFY_CONTENTS . "\n " . $ascii . "\n";
+        $mailto_msg .= getMailFooter();
+
+        $mailto_title = $this->getName() . ': ' . _NOTIFY_NI_TITLE;
+
+        $frommail = $member->getNotifyFromMailAddress();
+
+        $notify =& new NOTIFICATION($this->getNotifyAddress());
+        $notify->notify($mailto_title, $mailto_msg , $frommail);
+
+
+
+    }
+
+
+    /**
+      * Creates a new category for this blog
+      *
+      * @param $catName
+      *     name of the new category. When empty, a name is generated automatically
+      *     (starting with newcat)
+      * @param $catDescription
+      *     description of the new category. Defaults to 'New Category'
+      *
+      * @returns
+      *     the new category-id in case of success.
+      *     0 on failure
+      */
+    function createNewCategory($catName = '', $catDescription = _CREATED_NEW_CATEGORY_DESC) {
+        global $member, $manager;
+
+        if ($member->blogAdminRights($this->getID())) {
+            // generate
+            if ($catName == '')
+            {
+                $catName = _CREATED_NEW_CATEGORY_NAME;
+                $i = 1;
+
+                $res = sql_query('SELECT * FROM '.sql_table('category')." WHERE cname='".$catName.$i."' and cblog=".$this->getID());
+                while (sql_num_rows($res) > 0)
+                {
+                    $i++;
+                    $res = sql_query('SELECT * FROM '.sql_table('category')." WHERE cname='".$catName.$i."' and cblog=".$this->getID());
+                }
+
+                $catName = $catName . $i;
+            }
+
+            $manager->notify(
+                'PreAddCategory',
+                array(
+                    'blog' => &$this,
+                    'name' => &$catName,
+                    'description' => $catDescription
+                )
+            );
+
+            $query = 'INSERT INTO '.sql_table('category').' (cblog, cname, cdesc) VALUES (' . $this->getID() . ", '" . addslashes($catName) . "', '" . addslashes($catDescription) . "')";
+            sql_query($query);
+            $catid = sql_insert_id();
+
+            $manager->notify(
+                'PostAddCategory',
+                array(
+                    'blog' => &$this,
+                    'name' => $catName,
+                    'description' => $catDescription,
+                    'catid' => $catid
+                )
+            );
+
+            return $catid;
+        } else {
+            return 0;
+        }
+
+    }
+
+
+    /**
+     * Searches all months of this blog for the given query
+     *
+     * @param $query
+     *      search query
+     * @param $template
+     *      template to be used (__NAME__ of the template)
+     * @param $amountMonths
+     *      max amount of months to be search (0 = all)
+     * @param $maxresults
+     *      max number of results to show
+     * @param $startpos
+     *      offset
+     * @returns
+     *      amount of hits found
+     */
+    function search($query, $template, $amountMonths, $maxresults, $startpos) {
+        global $CONF, $manager;
+
+        $highlight  = '';
+        $sqlquery   = $this->getSqlSearch($query, $amountMonths, $highlight);
+
+        if ($sqlquery == '')
+        {
+            // no query -> show everything
+            $extraquery = '';
+            $amountfound = $this->readLogAmount($template, $maxresults, $extraQuery, $query, 1, 1);
+        } else {
+
+            // add LIMIT to query (to split search results into pages)
+            if (intval($maxresults > 0))
+                $sqlquery .= ' LIMIT ' . intval($startpos).',' . intval($maxresults);
+
+            // show results
+            $amountfound = $this->showUsingQuery($template, $sqlquery, $highlight, 1, 1);
+
+            // when no results were found, show a message
+            if ($amountfound == 0)
+            {
+                $template =& $manager->getTemplate($template);
+                $vars = array(
+                    'query'     => htmlspecialchars($query),
+                    'blogid'    => $this->getID()
+                );
+                echo TEMPLATE::fill($template['SEARCH_NOTHINGFOUND'],$vars);
+            }
+        }
+
+        return $amountfound;
+    }
+
+    /**
+     * Returns an SQL query to use for a search query
+     *
+     * @param $query
+     *      search query
+     * @param $amountMonths
+     *      amount of months to search back. Default = 0 = unlimited
+     * @param $mode
+     *      either empty, or 'count'. In this case, the query will be a SELECT COUNT(*) query
+     * @returns $highlight
+     *      words to highlight (out parameter)
+     * @returns
+     *      either a full SQL query, or an empty string (if querystring empty)
+     * @note
+     *      No LIMIT clause is added. (caller should add this if multiple pages are requested)
+     */
+    function getSqlSearch($query, $amountMonths = 0, &$highlight, $mode = '')
+    {
+        $searchclass =& new SEARCH($query);
+
+        $highlight    = $searchclass->inclusive;
+
+        // if querystring is empty, return empty string
+        if ($searchclass->inclusive == '')
+            return '';
+
+
+        $where  = $searchclass->boolean_sql_where('ititle,ibody,imore');
+        $select = $searchclass->boolean_sql_select('ititle,ibody,imore');
+
+        // get list of blogs to search
+        $blogs      = $searchclass->blogs;      // array containing blogs that always need to be included
+        $blogs[]    = $this->getID();           // also search current blog (duh)
+        $blogs      = array_unique($blogs);     // remove duplicates
+        $selectblogs = '';
+        if (count($blogs) > 0)
+            $selectblogs = ' and i.iblog in (' . implode(',', $blogs) . ')';
+
+        if ($mode == '')
+        {
+            $query = 'SELECT i.inumber as itemid, i.ititle as title, i.ibody as body, m.mname as author, m.mrealname as authorname, i.itime, i.imore as more, m.mnumber as authorid, m.memail as authormail, m.murl as authorurl, c.cname as category, i.icat as catid, i.iclosed as closed';
+            if ($select)
+                $query .= ', '.$select. ' as score ';
+        } else {
+            $query = 'SELECT COUNT(*) as result ';
+        }
+
+        $query .= ' FROM '.sql_table('item').' as i, '.sql_table('member').' as m, '.sql_table('category').' as c'
+               . ' WHERE i.iauthor=m.mnumber'
+               . ' and i.icat=c.catid'
+               . ' and i.idraft=0'  // exclude drafts
+               . $selectblogs
+                    // don't show future items
+               . ' and i.itime<=' . mysqldate($this->getCorrectTime())
+               . ' and '.$where;
+
+        // take into account amount of months to search
+        if ($amountMonths > 0)
+        {
+            $localtime = getdate($this->getCorrectTime());
+            $timestamp_start = mktime(0,0,0,$localtime['mon'] - $amountMonths,1,$localtime['year']);
+            $query .= ' and i.itime>' . mysqldate($timestamp_start);
+        }
+
+        if ($mode == '')
+        {
+            if ($select)
+                $query .= ' ORDER BY score DESC';
+            else
+                $query .= ' ORDER BY i.itime DESC ';
+        }
+
+        return $query;
+    }
+
+    /**
+     * Returns the SQL query that's normally used to display the blog items on the index type skins
+     *
+     * @param $mode
+     *      either empty, or 'count'. In this case, the query will be a SELECT COUNT(*) query
+     * @returns
+     *      either a full SQL query, or an empty string
+     * @note
+     *      No LIMIT clause is added. (caller should add this if multiple pages are requested)
+     */
+    function getSqlBlog($extraQuery, $mode = '')
+    {
+        if ($mode == '')
+            $query = 'SELECT i.inumber as itemid, i.ititle as title, i.ibody as body, m.mname as author, m.mrealname as authorname, i.itime, i.imore as more, m.mnumber as authorid, m.memail as authormail, m.murl as authorurl, c.cname as category, i.icat as catid, i.iclosed as closed';
+        else
+            $query = 'SELECT COUNT(*) as result ';
+
+        $query .= ' FROM '.sql_table('item').' as i, '.sql_table('member').' as m, '.sql_table('category').' as c'
+               . ' WHERE i.iblog='.$this->blogid
+               . ' and i.iauthor=m.mnumber'
+               . ' and i.icat=c.catid'
+               . ' and i.idraft=0'  // exclude drafts
+                    // don't show future items
+               . ' and i.itime<=' . mysqldate($this->getCorrectTime());
+
+        if ($this->getSelectedCategory())
+            $query .= ' and i.icat=' . $this->getSelectedCategory() . ' ';
+
+
+        $query .= $extraQuery;
+
+        if ($mode == '')
+            $query .= ' ORDER BY i.itime DESC';
+
+        return $query;
+    }
+
+    /**
+      * Shows the archivelist using the given template
+      */
+    function showArchiveList($template, $mode = 'month', $limit = 0) {
+        global $CONF, $catid, $manager;
+
+        if (!isset ($linkparams)) {
+        $linkparams = array();
+        }
+
+        if ($catid) {
+            $linkparams = array('catid' => $catid);
+        }
+
+        $template =& $manager->getTemplate($template);
+        $data['blogid'] = $this->getID();
+
+        $tplt = isset($template['ARCHIVELIST_HEADER']) ? $template['ARCHIVELIST_HEADER']
+                                                       : '';
+        echo TEMPLATE::fill($tplt, $data);
+
+        $query = 'SELECT itime, SUBSTRING(itime,1,4) AS Year, SUBSTRING(itime,6,2) AS Month, SUBSTRING(itime,9,2) as Day FROM '.sql_table('item')
+        . ' WHERE iblog=' . $this->getID()
+        . ' and itime <=' . mysqldate($this->getCorrectTime())  // don't show future items!
+        . ' and idraft=0'; // don't show draft items
+
+        if ($catid)
+            $query .= ' and icat=' . intval($catid);
+
+        $query .= ' GROUP BY Year';
+        if ($mode == 'month' || $mode == 'day')
+            $query .= ', Month';
+        if ($mode == 'day')
+            $query .= ', Day';
+
+        $query .= ' ORDER BY itime DESC';
+
+        if ($limit > 0)
+            $query .= ' LIMIT ' . intval($limit);
+
+        $res = sql_query($query);
+
+        while ($current = sql_fetch_object($res)) {
+            $current->itime = strtotime($current->itime);   // string time -> unix timestamp
+
+            if ($mode == 'day') {
+                $archivedate      = date('Y-m-d',$current->itime);
+                $archive['day']   = date('d',$current->itime);
+                $data['day']      = date('d',$current->itime);
+                $data['month']    = date('m',$current->itime);
+                $archive['month'] = $data['month'];
+            } elseif ($mode == 'year') {
+                $archivedate      = date('Y',$current->itime);
+                $data['day']      = '';
+                $data['month']    = '';
+                $archive['day']   = '';
+                $archive['month'] = '';
+            } else {
+                $archivedate = date('Y-m',$current->itime);
+                $data['month'] = date('m',$current->itime);
+                $archive['month'] = $data['month'];
+                $data['day'] = '';
+                $archive['day'] = '';
+            }
+
+            $data['year'] = date('Y',$current->itime);
+            $archive['year'] = $data['year'];
+            $data['archivelink'] = createArchiveLink($this->getID(),$archivedate,$linkparams);
+
+            $manager->notify(
+                'PreArchiveListItem',
+                array(
+                    'listitem' => &$data
+                )
+            );
+
+            $temp = TEMPLATE::fill($template['ARCHIVELIST_LISTITEM'],$data);
+            echo strftime($temp,$current->itime);
+
+        }
+
+        sql_free_result($res);
+
+        $tplt = isset($template['ARCHIVELIST_FOOTER']) ? $template['ARCHIVELIST_FOOTER']
+                                                       : '';
+        echo TEMPLATE::fill($tplt, $data);
+    }
+
+
+    /**
+      * Shows the list of categories using a given template
+      */
+    function showCategoryList($template) {
+        global $CONF, $manager;
+
+        // determine arguments next to catids
+        // I guess this can be done in a better way, but it works
+        global $archive, $archivelist;
+
+        $linkparams = array();
+        if ($archive) {
+            $blogurl = createArchiveLink($this->getID(), $archive, '');
+            $linkparams['blogid'] = $this->getID();
+            $linkparams['archive'] = $archive;
+        } else if ($archivelist) {
+            $blogurl = createArchiveListLink($this->getID(), '');
+            $linkparams['archivelist'] = $archivelist;
+        } else {
+            $blogurl = createBlogidLink($this->getID(), '');
+            $linkparams['blogid'] = $this->getID();
+        }
+
+        //$blogurl = $this->getURL() . $qargs;
+        //$blogurl = createBlogLink($this->getURL(), $linkparams);
+
+        $template =& $manager->getTemplate($template);
+
+        echo TEMPLATE::fill((isset($template['CATLIST_HEADER']) ? $template['CATLIST_HEADER'] : null),
+                            array(
+                                'blogid' => $this->getID(),
+                                'blogurl' => $blogurl,
+                                'self' => $CONF['Self']
+                            ));
+
+        $query = 'SELECT catid, cdesc as catdesc, cname as catname FROM '.sql_table('category').' WHERE cblog=' . $this->getID() . ' ORDER BY cname ASC';
+        $res = sql_query($query);
+
+
+        while ($data = sql_fetch_assoc($res)) {
+            $data['blogid'] = $this->getID();
+            $data['blogurl'] = $blogurl;
+            $data['catlink'] = createLink(
+                                'category',
+                                array(
+                                    'catid' => $data['catid'],
+                                    'name' => $data['catname'],
+                                    'extra' => $linkparams
+                                )
+                               );
+            $data['self'] = $CONF['Self'];
+            
+            //catiscurrent
+            if ($this->getSelectedCategory()) {
+                if ($this->getSelectedCategory() == $data['catid']) {
+                    $data['catiscurrent'] = 'yes';
+                    $data['currentcat'] = 'yes';
+                }
+                else {
+                    $data['catiscurrent'] = 'no';
+                    $data['currentcat'] = 'no';
+                }
+            }
+            else {
+                global $itemid;
+                if (intval($itemid) && $manager->existsItem(intval($itemid),0,0)) {
+                    $iobj =& $manager->getItem(intval($itemid),0,0);
+                    $cid = $iobj['catid'];
+                    if ($cid == $data['catid']) {
+                        $data['catiscurrent'] = 'yes';
+                        $data['currentcat'] = 'yes';
+                    }
+                    else {
+                        $data['catiscurrent'] = 'no';
+                        $data['currentcat'] = 'no';
+                    }
+                }
+            }
+
+            $manager->notify(
+                'PreCategoryListItem',
+                array(
+                    'listitem' => &$data
+                )
+            );
+
+            echo TEMPLATE::fill((isset($template['CATLIST_LISTITEM']) ? $template['CATLIST_LISTITEM'] : null), $data);
+            //$temp = TEMPLATE::fill((isset($template['CATLIST_LISTITEM']) ? $template['CATLIST_LISTITEM'] : null), $data);
+            //echo strftime($temp, $current->itime);
+
+        }
+
+        sql_free_result($res);
+
+        echo TEMPLATE::fill((isset($template['CATLIST_FOOTER']) ? $template['CATLIST_FOOTER'] : null),
+                            array(
+                                'blogid' => $this->getID(),
+                                'blogurl' => $blogurl,
+                                'self' => $CONF['Self']
+                            ));
+    }
+
+    /**
+      * Shows a list of all blogs in the system using a given template
+      * ordered by  number, name, shortname or description
+      * in ascending or descending order
+      */
+    function showBlogList($template, $bnametype, $orderby, $direction) {
+        global $CONF, $manager;
+
+        switch ($orderby) {
+            case 'number':
+                $orderby='bnumber';
+                break;
+            case 'name':
+                $orderby='bname';
+                break;
+            case 'shortname':
+                $orderby='bshortname';
+                break;
+            case 'description':
+                $orderby='bdesc';
+                break;
+            default:
+                $orderby='bnumber';
+                break;
+        }
+
+        $direction=strtolower($direction);
+        switch ($direction) {
+            case 'asc':
+                $direction='ASC';
+                break;
+            case 'desc':
+                $direction='DESC';
+                break;
+            default:
+                $direction='ASC';
+                break;
+        }
+
+        $template =& $manager->getTemplate($template);
+
+        echo TEMPLATE::fill((isset($template['BLOGLIST_HEADER']) ? $template['BLOGLIST_HEADER'] : null),
+                            array(
+                                'sitename' => $CONF['SiteName'],
+                                'siteurl' => $CONF['IndexURL']
+                            ));
+
+        $query = 'SELECT bnumber, bname, bshortname, bdesc, burl FROM '.sql_table('blog').' ORDER BY '.$orderby.' '.$direction;
+        $res = sql_query($query);
+
+        while ($data = sql_fetch_assoc($res)) {
+
+            $list = array();
+
+//                     $list['bloglink'] = createLink('blog', array('blogid' => $data['bnumber']));
+            $list['bloglink'] = createBlogidLink($data['bnumber']);
+
+            $list['blogdesc'] = $data['bdesc'];
+
+            $list['blogurl'] = $data['burl'];
+
+            if ($bnametype=='shortname') {
+                $list['blogname'] = $data['bshortname'];
+            }
+            else { // all other cases
+                $list['blogname'] = $data['bname'];
+            }
+
+            $manager->notify(
+                'PreBlogListItem',
+                array(
+                    'listitem' => &$list
+                )
+            );
+
+            echo TEMPLATE::fill((isset($template['BLOGLIST_LISTITEM']) ? $template['BLOGLIST_LISTITEM'] : null), $list);
+
+        }
+
+        sql_free_result($res);
+
+        echo TEMPLATE::fill((isset($template['BLOGLIST_FOOTER']) ? $template['BLOGLIST_FOOTER'] : null),
+                            array(
+                                'sitename' => $CONF['SiteName'],
+                                'siteurl' => $CONF['IndexURL']
+                            ));
+
+    }
+
+    /**
+      * Blogsettings functions
+      */
+
+    function readSettings() {
+        $query =  'SELECT *'
+               . ' FROM '.sql_table('blog')
+               . ' WHERE bnumber=' . $this->blogid;
+        $res = sql_query($query);
+
+        $this->isValid = (sql_num_rows($res) > 0);
+        if (!$this->isValid)
+            return;
+
+        $this->settings = sql_fetch_assoc($res);
+    }
+
+    function writeSettings() {
+
+        // (can't use floatval since not available prior to PHP 4.2)
+        $offset = $this->getTimeOffset();
+        if (!is_float($offset))
+            $offset = intval($offset);
+
+        $query =  'UPDATE '.sql_table('blog')
+               . " SET bname='" . addslashes($this->getName()) . "',"
+               . "     bshortname='". addslashes($this->getShortName()) . "',"
+               . "     bcomments=". intval($this->commentsEnabled()) . ","
+               . "     bmaxcomments=" . intval($this->getMaxComments()) . ","
+               . "     btimeoffset=" . $offset . ","
+               . "     bpublic=" . intval($this->isPublic()) . ","
+               . "     breqemail=" . intval($this->emailRequired()) . ","
+               . "     bconvertbreaks=" . intval($this->convertBreaks()) . ","
+               . "     ballowpast=" . intval($this->allowPastPosting()) . ","
+               . "     bnotify='" . addslashes($this->getNotifyAddress()) . "',"
+               . "     bnotifytype=" . intval($this->getNotifyType()) . ","
+               . "     burl='" . addslashes($this->getURL()) . "',"
+               . "     bupdate='" . addslashes($this->getUpdateFile()) . "',"
+               . "     bdesc='" . addslashes($this->getDescription()) . "',"
+               . "     bdefcat=" . intval($this->getDefaultCategory()) . ","
+               . "     bdefskin=" . intval($this->getDefaultSkin()) . ","
+               . "     bincludesearch=" . intval($this->getSearchable())
+               . " WHERE bnumber=" . intval($this->getID());
+        sql_query($query);
+
+    }
+
+
+
+    // update update file if requested
+    function updateUpdatefile() {
+         if ($this->getUpdateFile()) {
+            $f_update = fopen($this->getUpdateFile(),'w');
+            fputs($f_update,$this->getCorrectTime());
+            fclose($f_update);
+         }
+
+    }
+
+    function isValidCategory($catid) {
+        $query = 'SELECT * FROM '.sql_table('category').' WHERE cblog=' . $this->getID() . ' and catid=' . intval($catid);
+        $res = sql_query($query);
+        return (sql_num_rows($res) != 0);
+    }
+
+    function getCategoryName($catid) {
+        $res = sql_query('SELECT cname FROM '.sql_table('category').' WHERE cblog='.$this->getID().' and catid=' . intval($catid));
+        $o = sql_fetch_object($res);
+        return $o->cname;
+    }
+
+    function getCategoryDesc($catid) {
+        $res = sql_query('SELECT cdesc FROM '.sql_table('category').' WHERE cblog='.$this->getID().' and catid=' . intval($catid));
+        $o = sql_fetch_object($res);
+        return $o->cdesc;
+    }
+
+    function getCategoryIdFromName($name) {
+        $res = sql_query('SELECT catid FROM '.sql_table('category').' WHERE cblog='.$this->getID().' and cname="' . addslashes($name) . '"');
+        if (sql_num_rows($res) > 0) {
+            $o = sql_fetch_object($res);
+            return $o->catid;
+        } else {
+            return $this->getDefaultCategory();
+        }
+    }
+
+    function convertBreaks() {
+        return $this->getSetting('bconvertbreaks');
+    }
+
+    function insertJavaScriptInfo($authorid = '') {
+        global $member, $CONF;
+
+        if ($authorid == '')
+            $authorid = $member->getID();
+
+        ?>
+        <script type="text/javascript">
+            setConvertBreaks(<?php echo  $this->convertBreaks() ? 'true' : 'false' ?>);
+            setMediaUrl("<?php echo $CONF['MediaURL']?>");
+            setAuthorId(<?php echo $authorid?>);
+        </script><?php  }
+
+    function setConvertBreaks($val) {
+        $this->setSetting('bconvertbreaks',$val);
+    }
+    function setAllowPastPosting($val) {
+        $this->setSetting('ballowpast',$val);
+    }
+    function allowPastPosting() {
+        return $this->getSetting('ballowpast');
+    }
+
+    function getCorrectTime($t=0) {
+        if ($t == 0) $t = time();
+        return ($t + 3600 * $this->getTimeOffset());
+    }
+
+    function getName() {
+        return $this->getSetting('bname');
+    }
+
+    function getShortName() {
+        return $this->getSetting('bshortname');
+    }
+
+    function getMaxComments() {
+        return $this->getSetting('bmaxcomments');
+    }
+
+    function getNotifyAddress() {
+        return $this->getSetting('bnotify');
+    }
+
+    function getNotifyType() {
+        return $this->getSetting('bnotifytype');
+    }
+
+    function notifyOnComment() {
+        $n = $this->getNotifyType();
+        return (($n != 0) && (($n % 3) == 0));
+    }
+
+    function notifyOnVote() {
+        $n = $this->getNotifyType();
+        return (($n != 0) && (($n % 5) == 0));
+    }
+
+    function notifyOnNewItem() {
+        $n = $this->getNotifyType();
+        return (($n != 0) && (($n % 7) == 0));
+    }
+
+    function setNotifyType($val) {
+        $this->setSetting('bnotifytype',$val);
+    }
+
+
+    function getTimeOffset() {
+        return $this->getSetting('btimeoffset');
+    }
+
+    function commentsEnabled() {
+        return $this->getSetting('bcomments');
+    }
+
+    function getURL() {
+        return $this->getSetting('burl');
+    }
+
+    function getDefaultSkin() {
+        return $this->getSetting('bdefskin');
+    }
+
+    function getUpdateFile() {
+        return $this->getSetting('bupdate');
+    }
+
+    function getDescription() {
+        return $this->getSetting('bdesc');
+    }
+
+    function isPublic() {
+        return $this->getSetting('bpublic');
+    }
+
+    function emailRequired() {
+        return $this->getSetting('breqemail');
+    }
+
+    function getSearchable() {
+        return $this->getSetting('bincludesearch');
+    }
+
+    function getDefaultCategory() {
+        return $this->getSetting('bdefcat');
+    }
+
+    function setPublic($val) {
+        $this->setSetting('bpublic',$val);
+    }
+
+    function setSearchable($val) {
+        $this->setSetting('bincludesearch',$val);
+    }
+
+    function setDescription($val) {
+        $this->setSetting('bdesc',$val);
+    }
+
+    function setUpdateFile($val) {
+        $this->setSetting('bupdate',$val);
+    }
+
+    function setDefaultSkin($val) {
+        $this->setSetting('bdefskin',$val);
+    }
+
+    function setURL($val) {
+        $this->setSetting('burl',$val);
+    }
+
+    function setName($val) {
+        $this->setSetting('bname',$val);
+    }
+
+    function setShortName($val) {
+        $this->setSetting('bshortname',$val);
+    }
+
+    function setCommentsEnabled($val) {
+        $this->setSetting('bcomments',$val);
+    }
+
+    function setMaxComments($val) {
+        $this->setSetting('bmaxcomments',$val);
+    }
+
+    function setNotifyAddress($val) {
+        $this->setSetting('bnotify',$val);
+    }
+
+    function setEmailRequired($val) {
+        $this->setSetting('breqemail',$val);
+    }
+
+    function setTimeOffset($val) {
+        // check validity of value
+        // 1. replace , by . (common mistake)
+        $val = str_replace(',','.',$val);
+        // 2. cast to float or int
+        if (is_numeric($val) && strstr($val,'.5')) {
+            $val = (float) $val;
+        } else {
+            $val = intval($val);
+        }
+
+        $this->setSetting('btimeoffset',$val);
+    }
+
+    function setDefaultCategory($val) {
+        $this->setSetting('bdefcat',$val);
+    }
+
+    function getSetting($key) {
+        return $this->settings[$key];
+    }
+
+    function setSetting($key,$value) {
+        $this->settings[$key] = $value;
+    }
+
+
+    // tries to add a member to the team. Returns false if the member was already on
+    // the team
+    function addTeamMember($memberid, $admin) {
+        global $manager;
+
+        $memberid = intval($memberid);
+        $admin = intval($admin);
+
+        // check if member is already a member
+        $tmem = MEMBER::createFromID($memberid);
+
+        if ($tmem->isTeamMember($this->getID()))
+            return 0;
+
+        $manager->notify(
+            'PreAddTeamMember',
+            array(
+                'blog' => &$this,
+                'member' => &$tmem,
+                'admin' => &$admin
+            )
+        );
+
+        // add to team
+        $query = 'INSERT INTO '.sql_table('team').' (TMEMBER, TBLOG, TADMIN) '
+               . 'VALUES (' . $memberid .', '.$this->getID().', "'.$admin.'")';
+        sql_query($query);
+
+        $manager->notify(
+            'PostAddTeamMember',
+            array(
+                'blog' => &$this,
+                'member' => &$tmem,
+                'admin' => $admin
+            )
+
+        );
+
+        $logMsg = sprintf(_TEAM_ADD_NEWTEAMMEMBER, $tmem->getDisplayName(), $memberid, $this->getName());
+        ACTIONLOG::add(INFO, $logMsg);
+
+        return 1;
+    }
+
+    function getID() {
+        return intVal($this->blogid);
+    }
+
+    // returns true if there is a blog with the given shortname (static)
+    function exists($name) {
+        $r = sql_query('select * FROM '.sql_table('blog').' WHERE bshortname="'.addslashes($name).'"');
+        return (sql_num_rows($r) != 0);
+    }
+
+    // returns true if there is a blog with the given ID (static)
+    function existsID($id) {
+        $r = sql_query('select * FROM '.sql_table('blog').' WHERE bnumber='.intval($id));
+        return (sql_num_rows($r) != 0);
+    }
+
+        // flag there is a future post pending
+        function setFuturePost() {
+        $query =  'UPDATE '.sql_table('blog')
+               . " SET bfuturepost='1' WHERE bnumber=" . $this->getID();
+        sql_query($query);
+        }
+
+    // clear there is a future post pending
+    function clearFuturePost() {
+        $query =  'UPDATE '.sql_table('blog')
+               . " SET bfuturepost='0' WHERE bnumber=" . $this->getID();
+        sql_query($query);
+    }
+
+    // check if we should throw justPosted event
+    function checkJustPosted() {
+        global $manager;
+
+        if ($this->settings['bfuturepost'] == 1) {
+            $blogid = $this->getID();
+            $result = sql_query("SELECT * FROM " . sql_table('item')
+                      . " WHERE iposted=0 AND iblog=" . $blogid . " AND itime<NOW()");
+            if (sql_num_rows($result) > 0) {
+                // This $pinged is allow a plugin to tell other hook to the event that a ping is sent already
+                // Note that the plugins's calling order is subject to thri order in the plugin list
+                $pinged = false;
+                $manager->notify(
+                        'JustPosted',
+                        array('blogid' => $blogid,
+                        'pinged' => &$pinged
+                        )
+                );
+
+                // clear all expired future posts
+                sql_query("UPDATE " . sql_table('item') . " SET iposted='1' WHERE iblog=" . $blogid . " AND itime<NOW()");
+
+                // check to see any pending future post, clear the flag is none
+                $result = sql_query("SELECT * FROM " . sql_table('item')
+                          . " WHERE iposted=0 AND iblog=" . $blogid);
+                if (sql_num_rows($result) == 0) {
+                    $this->clearFuturePost();
+                }
+            }
+        }
+    }
+
+    /**
+     * Shows the given list of items for this blog
+     *
+     * @param $itemarray
+     *      array of item numbers to be displayed
+     * @param $template
+     *      String representing the template _NAME_ (!)
+     * @param $highlight
+     *      contains a query that should be highlighted
+     * @param $comments
+     *      1=show comments 0=don't show comments
+     * @param $dateheads
+     *      1=show dateheads 0=don't show dateheads
+     * @returns int
+     *      amount of items shown
+     */
+    function readLogFromList($itemarray, $template, $highlight = '', $comments = 1, $dateheads = 1) {
+
+        $query = $this->getSqlItemList($itemarray);
+
+        return $this->showUsingQuery($template, $query, $highlight, $comments, $dateheads);
+    }
+
+    /**
+     * Returns the SQL query used to fill out templates for a list of items
+     *
+     * @param $itemarray
+     *      an array holding the item numbers of the items to be displayed
+     * @returns
+     *      either a full SQL query, or an empty string
+     * @note
+     *      No LIMIT clause is added. (caller should add this if multiple pages are requested)
+     */
+    function getSqlItemList($itemarray)
+    {
+        if (!is_array($itemarray)) return '';
+        $items = array();
+        foreach ($itemarray as $value) {
+            if (intval($value)) $items[] = intval($value);
+        }
+        if (!count($items)) return '';
+        //$itemlist = implode(',',$items);
+        $i = count($items);
+        $query = '';
+        foreach ($items as $value) {
+            $query .= '('
+                    .   'SELECT'
+                    .   ' i.inumber as itemid,'
+                    .   ' i.ititle as title,'
+                    .   ' i.ibody as body,'
+                    .   ' m.mname as author,'
+                    .   ' m.mrealname as authorname,'
+                    .   ' i.itime,'
+                    .   ' i.imore as more,'
+                    .   ' m.mnumber as authorid,'
+                    .   ' m.memail as authormail,'
+                    .   ' m.murl as authorurl,'
+                    .   ' c.cname as category,'
+                    .   ' i.icat as catid,'
+                    .   ' i.iclosed as closed';
+
+            $query .= ' FROM '
+                    . sql_table('item') . ' as i, '
+                    . sql_table('member') . ' as m, '
+                    . sql_table('category').' as c'
+                    . ' WHERE'
+                    .     ' i.iblog   = ' . $this->blogid
+                    . ' and i.iauthor = m.mnumber'
+                    . ' and i.icat    = c.catid'
+                    . ' and i.idraft  = 0'  // exclude drafts
+                        // don't show future items
+                    . ' and i.itime  <= ' . mysqldate($this->getCorrectTime());
+
+            //$query .= ' and i.inumber IN ('.$itemlist.')';
+            $query .= ' and i.inumber = '.intval($value);
+            $query .= ')';
+            $i--;
+            if ($i) $query .= ' UNION ';
+        }
+
+        return $query;
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/BODYACTIONS.php b/utf8/nucleus/libs/BODYACTIONS.php
new file mode 100644 (file)
index 0000000..059a317
--- /dev/null
@@ -0,0 +1,153 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * A class to parses plugin calls inside items
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: BODYACTIONS.php,v 1.6.2.1 2007/08/08 05:27:14 kimitake Exp $
+ */
+
+class BODYACTIONS extends BaseActions {
+
+       var $currentItem;
+
+       var $template;
+
+       function BODYACTIONS () {
+               $this->BaseActions();   
+       }
+       
+       function setCurrentItem(&$item) {
+               $this->currentItem =& $item;
+       }
+       
+       function setTemplate($template) {
+               $this->template =& $template;
+       }
+
+       function getDefinedActions() {
+               return array('image', 'media', 'popup', 'plugin');
+       }
+
+       function parse_plugin($pluginName) {
+               global $manager;
+
+               // should be already tested from the parser (PARSER.php)\r
+               // only continue when the plugin is really installed\r
+               /*if (!$manager->pluginInstalled('NP_' . $pluginName)) {\r
+                       return;\r
+               }*/\r
+
+               $plugin =& $manager->getPlugin('NP_' . $pluginName);
+               if (!$plugin) return;
+
+               // get arguments
+               $params = func_get_args();
+
+               // remove plugin name
+               array_shift($params);
+
+               // add item reference (array_unshift didn't work)
+               $params = array_merge(array(&$this->currentItem),$params);
+
+               call_user_func_array(array(&$plugin,'doItemVar'), $params);
+       }
+       
+       function parse_image() {
+               // image/popup calls have arguments separated by |
+               $args = func_get_args();
+               $args = explode('|',implode($args,', '));
+               call_user_func_array(array(&$this,'createImageCode'),$args);
+       }
+       
+       function createImageCode($filename, $width, $height, $text = '') {
+               global $CONF;
+
+               // select private collection when no collection given
+               if (!strstr($filename,'/')) {
+                       $filename = $this->currentItem->authorid . '/' . $filename;
+               }
+
+               $windowwidth = $width;
+               $windowheight = $height;
+
+               $vars['link']                   = htmlspecialchars($CONF['MediaURL']. $filename ,ENT_QUOTES);
+               $vars['text']                   = htmlspecialchars($text ,ENT_QUOTES);
+               $vars['image'] = '<img src="' . $vars['link'] . '" width="' . $width . '" height="' . $height . '" alt="' . $vars['text'] . '" title="' . $vars['text'] . '" />';
+               $vars['width']                  = $width;
+               $vars['height']                 = $height;
+               $vars['media']                  = '<a href="' . $vars['link'] . '">' . $vars['text'] . '</a>';
+
+
+               echo TEMPLATE::fill($this->template['IMAGE_CODE'],$vars);;
+
+       }
+       
+       function parse_media() {
+               // image/popup calls have arguments separated by |
+               $args = func_get_args();
+               $args = explode('|',implode($args,', '));
+               call_user_func_array(array(&$this,'createMediaCode'),$args);
+       }
+
+       function createMediaCode($filename, $text = '') {
+               global $CONF;
+
+               // select private collection when no collection given
+               if (!strstr($filename,'/')) {
+                       $filename = $this->currentItem->authorid . '/' . $filename;
+               }
+
+               $vars['link']                   = htmlspecialchars($CONF['MediaURL'] . $filename ,ENT_QUOTES);
+               $vars['text']                   = htmlspecialchars($text ,ENT_QUOTES);
+               $vars['media']                  = '<a href="' . $vars['link'] . '">' . $vars['text'] . '</a>';
+
+               echo TEMPLATE::fill($this->template['MEDIA_CODE'],$vars);;
+       }
+
+
+       function parse_popup() {
+               // image/popup calls have arguments separated by |
+               $args = func_get_args();
+               $args = explode('|',implode($args,', '));
+               call_user_func_array(array(&$this,'createPopupCode'),$args);
+       }
+
+       function createPopupCode($filename, $width, $height, $text = '') {
+               global $CONF;
+
+               // select private collection when no collection given
+               if (!strstr($filename,'/')) {
+                       $filename = $this->currentItem->authorid . '/' . $filename;
+               }
+
+               $windowwidth = $width;
+               $windowheight = $height;
+
+               $vars['rawpopuplink']   = $CONF['Self'] . "?imagepopup=" . htmlspecialchars($filename,ENT_QUOTES) . "&amp;width=$width&amp;height=$height&amp;imagetext=" . urlencode(htmlspecialchars($text));
+               $vars['popupcode']              = "window.open(this.href,'imagepopup','status=no,toolbar=no,scrollbars=no,resizable=yes,width=$windowwidth,height=$windowheight');return false;";
+               $vars['popuptext']              = htmlspecialchars($text,ENT_QUOTES);
+               $vars['popuplink']              = '<a href="' . $vars['rawpopuplink']. '" onclick="'. $vars['popupcode'].'" >' . $vars['popuptext'] . '</a>';
+               $vars['width']                  = $width;
+               $vars['height']                 = $height;
+               $vars['text']                   = $text;
+               $vars['link']                   = htmlspecialchars($CONF['MediaURL'] . $filename ,ENT_QUOTES);
+               $vars['media']                  = '<a href="' . $vars['link'] . '">' . $vars['popuptext'] . '</a>';
+
+               echo TEMPLATE::fill($this->template['POPUP_CODE'],$vars);
+       }
+
+}
+?>
diff --git a/utf8/nucleus/libs/BaseActions.php b/utf8/nucleus/libs/BaseActions.php
new file mode 100644 (file)
index 0000000..4cb6839
--- /dev/null
@@ -0,0 +1,311 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * This class contains parse actions that are available in all ACTION classes
+ * e.g. include, phpinclude, parsedinclude, skinfile, ...
+ *
+ * It should never be used on it's own
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: BaseActions.php,v 1.2 2006/07/20 08:01:52 kimitake Exp $
+ */
+
+class BaseActions {
+
+       // depth level for includes (max. level is 3)
+       var $level;
+
+       // array of evaluated conditions (true/false). The element at the end is the one for the most nested
+       // if block.
+       var $if_conditions;
+
+       // in the "elseif" / "elseifnot" sequences, if one of the conditions become "true" remained conditions should not
+       // be tested. this variable (actually a stack) holds this information.
+       var $if_execute;
+
+       // at all times, can be evaluated to either true if the current block needs to be displayed. This
+       // variable is used to decide to skip skinvars in parts that will never be outputted.
+       var $if_currentlevel;
+
+       // contains a search string with keywords that need to be highlighted. These get parsed into $aHighlight
+       var $strHighlight;
+
+       // array of keywords that need to be highlighted in search results (see the highlight()
+       // and parseHighlight() methods)
+       var $aHighlight;
+
+       // reference to the parser object that is using this object as actions-handler
+       var $parser;
+
+       function BaseActions() {
+               $this->level = 0;
+
+               // if nesting level
+               $this->if_conditions = array(); // array on which condition values are pushed/popped
+               $this->if_execute = array();    // array on which condition values are pushed/popped
+               $this->if_currentlevel = 1;             // 1 = current level is displayed; 0 = current level not displayed
+
+               // highlights
+               $this->strHighlight = '';                       // full highlight
+               $this->aHighlight = array();            // parsed highlight
+
+       }
+
+       // include file (no parsing of php)
+       function parse_include($filename) {
+               @readfile($this->getIncludeFileName($filename));
+       }
+
+       // php-include file
+       function parse_phpinclude($filename) {
+               includephp($this->getIncludeFileName($filename));
+       }
+
+       // parsed include
+       function parse_parsedinclude($filename) {
+               // check current level
+               if ($this->level > 3) return;   // max. depth reached (avoid endless loop)
+               global $skinid;
+               $skin = new SKIN($skinid);
+               $file = $this->getIncludeFileName($filename);
+               if (!$skin->isValid && !file_exists($file)) {
+                       return;
+               }
+               $contents = $skin->getContent($filename);
+               if (!$contents) {
+            if (!file_exists($file)) return;
+            $contents = file_get_contents($file);
+            if (empty($contents)) return;
+               }
+               $this->level = $this->level + 1;
+               // parse file contents
+               $this->parser->parse($contents);
+
+               $this->level = $this->level - 1;
+       }
+
+       /**
+        * Returns the correct location of the file to be included, according to
+        * parser properties
+        *
+        * IF IncludeMode = 'skindir' => use skindir
+        */
+       function getIncludeFileName($filename) {
+               // leave absolute filenames and http urls as they are
+               if (
+                               (substr($filename,0,1) == '/')
+                       ||      (substr($filename,0,7) == 'http://')
+                       ||      (substr($filename,0,6) == 'ftp://')
+                       )
+                       return $filename;
+
+               $filename = PARSER::getProperty('IncludePrefix') . $filename;
+               if (PARSER::getProperty('IncludeMode') == 'skindir') {
+                       global $DIR_SKINS;
+                       return $DIR_SKINS . $filename;
+               } else {
+                       return $filename;
+               }
+       }
+
+       /**
+        * Inserts an url relative to the skindir (useful when doing import/export)
+        *
+        * e.g. <skinfile(default/myfile.sth)>
+        */
+       function parse_skinfile($filename) {
+               global $CONF;
+
+               echo $CONF['SkinsURL'] . PARSER::getProperty('IncludePrefix') . $filename;
+       }
+
+       /**
+        * Sets a property for the parser
+        */
+       function parse_set($property, $value) {
+               PARSER::setProperty($property, $value);
+       }
+
+       /**
+        * Helper function: add if condition
+        */
+       function _addIfCondition($condition) {
+
+               array_push($this->if_conditions,$condition);
+
+               $this->_updateTopIfCondition();
+
+               ob_start();
+       }
+
+       function _updateTopIfCondition() {
+               if (sizeof($this->if_conditions) == 0)
+                       $this->if_currentlevel = 1;
+               else
+                       $this->if_currentlevel = $this->if_conditions[sizeof($this->if_conditions) - 1];
+       }
+
+       /**
+        * Helper function for elseif / elseifnot
+        */
+       function _addIfExecute() {
+               array_push($this->if_execute, 0);
+       }
+
+       /**
+        * Helper function for elseif / elseifnot
+        * @param string condition to be fullfilled
+        */
+       function _updateIfExecute($condition) {
+               $index = sizeof($this->if_execute) - 1;
+               $this->if_execute[$index] = $this->if_execute[$index] || $condition;
+       }
+
+       /**
+        * returns the currently top if condition
+        */
+       function _getTopIfCondition() {
+               return $this->if_currentlevel;
+       }
+
+       /**
+        * Sets the search terms to be highlighted
+        *
+        * @param $highlight
+        *              A series of search terms
+        */
+       function setHighlight($highlight) {
+               $this->strHighlight = $highlight;
+               if ($highlight) {
+                       $this->aHighlight = parseHighlight($highlight);
+               }
+       }
+
+       /**
+        * Applies the highlight to the given piece of text
+        *
+        * @param &$data
+        *              Data that needs to be highlighted
+        * @see setHighlight
+        */
+       function highlight(&$data) {
+               if ($this->aHighlight)
+                       return highlight($data,$this->aHighlight,$this->template['SEARCH_HIGHLIGHT']);
+               else
+                       return $data;
+       }
+
+       /**
+        * Parses <%if%> statements
+        */
+       function parse_if() {
+               $this->_addIfExecute();
+
+               $args = func_get_args();
+               $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+               $this->_addIfCondition($condition);
+       }
+
+       /**
+        * Parses <%else%> statements
+        */
+       function parse_else() {
+               if (sizeof($this->if_conditions) == 0) return;
+               array_pop($this->if_conditions);
+               if ($this->if_currentlevel) {
+                       ob_end_flush();
+                       $this->_updateIfExecute(1);
+                       $this->_addIfCondition(0);
+               } elseif ($this->if_execute[sizeof($this->if_execute) - 1]) {
+                       ob_end_clean();
+                       $this->_addIfCondition(0);
+               } else {
+                       ob_end_clean();
+                       $this->_addIfCondition(1);
+               }
+       }
+
+       /**
+        * Parses <%elseif%> statements
+        */
+       function parse_elseif() {
+               if (sizeof($this->if_conditions) == 0) return;
+               array_pop($this->if_conditions);
+               if ($this->if_currentlevel) {
+                       ob_end_flush();
+                       $this->_updateIfExecute(1);
+                       $this->_addIfCondition(0);
+               } elseif ($this->if_execute[sizeof($this->if_execute) - 1]) {
+                       ob_end_clean();
+                       $this->_addIfCondition(0);
+               } else {
+                       ob_end_clean();
+                       $args = func_get_args();
+                       $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+                       $this->_addIfCondition($condition);
+               }
+       }
+
+       /**
+        * Parses <%ifnot%> statements
+        */
+       function parse_ifnot() {
+               $this->_addIfExecute();
+
+               $args = func_get_args();
+               $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+               $this->_addIfCondition(!$condition);
+       }
+
+       /**
+        * Parses <%elseifnot%> statements
+        */
+       function parse_elseifnot() {
+               if (sizeof($this->if_conditions) == 0) return;
+               array_pop($this->if_conditions);
+               if ($this->if_currentlevel) {
+                       ob_end_flush();
+                       $this->_updateIfExecute(1);
+                       $this->_addIfCondition(0);
+               } elseif ($this->if_execute[sizeof($this->if_execute) - 1]) {
+                       ob_end_clean();
+                       $this->_addIfCondition(0);
+               } else {
+                       ob_end_clean();
+                       $args = func_get_args();
+                       $condition = call_user_func_array(array(&$this,'checkCondition'), $args);
+                       $this->_addIfCondition(!$condition);
+               }
+       }
+
+       /**
+        * Ends a conditional if-block
+        * see e.g. ifcat (BLOG), ifblogsetting (PAGEFACTORY)
+        */
+       function parse_endif() {
+               // we can only close what has been opened
+               if (sizeof($this->if_conditions) == 0) return;
+
+               if ($this->if_currentlevel) {
+                       ob_end_flush();
+               } else {
+                       ob_end_clean();
+               }
+               array_pop($this->if_conditions);
+               array_pop($this->if_execute);
+
+               $this->_updateTopIfCondition();
+       }
+}
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/COMMENT.php b/utf8/nucleus/libs/COMMENT.php
new file mode 100755 (executable)
index 0000000..39c83c4
--- /dev/null
@@ -0,0 +1,151 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2007 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * A class representing a single comment
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2007 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: COMMENT.php,v 1.4 2006/07/17 20:03:44 kimitake Exp $
+ */
+class COMMENT {
+
+       /**
+         * Returns the requested comment
+         * 
+         * @static
+         */
+       function getComment($commentid) {
+               $query =  'SELECT cnumber as commentid, cbody as body, cuser as user, cmail as userid, cemail as email, cmember as memberid, ctime, chost as host, mname as member, cip as ip, cblog as blogid'
+                          . ' FROM '.sql_table('comment').' left outer join '.sql_table('member').' on cmember=mnumber'
+                          . ' WHERE cnumber=' . intval($commentid);
+               $comments = sql_query($query);
+
+               $aCommentInfo = sql_fetch_assoc($comments);
+               if ($aCommentInfo)
+               {
+                       $aCommentInfo['timestamp'] = strtotime($aCommentInfo['ctime']);
+               }
+               return $aCommentInfo;
+       }
+
+       /**
+         * Prepares a comment to be saved
+         *       
+         * @static
+         */
+       function prepare($comment) {
+               $comment['user'] = strip_tags($comment['user']);
+               $comment['userid'] = strip_tags($comment['userid']);
+               $comment['email'] = strip_tags($comment['email']);
+
+               // remove quotes and newlines from user and userid
+               $comment['user'] = strtr($comment['user'], "\'\"\n",'-- ');
+               $comment['userid'] = strtr($comment['userid'], "\'\"\n",'-- ');
+               $comment['email'] = strtr($comment['email'], "\'\"\n",'-- ');
+
+               $comment['body'] = COMMENT::prepareBody($comment['body']);
+
+               return $comment;
+       }
+
+       /**
+        * Prepares the body of a comment
+        *
+        * @ static
+        */             
+       function prepareBody($body) {
+
+               // remove newlines when too many in a row
+               $body = ereg_replace("\n.\n.\n","\n",$body);
+
+               // encode special characters as entities
+               $body = htmlspecialchars($body);
+
+               // trim away whitespace and newlines at beginning and end
+               $body = trim($body);
+
+               // add <br /> tags
+               $body = addBreaks($body);
+
+               // create hyperlinks for http:// addresses
+               // there's a testcase for this in /build/testcases/urllinking.txt
+               $replaceFrom = array(
+                       '/([^:\/\/\w]|^)((https:\/\/)([\w\.-]+)([\/\w+\.~%&?@=_:;#,-]+))/ie',
+                       '/([^:\/\/\w]|^)((http:\/\/|www\.)([\w\.-]+)([\/\w+\.~%&?@=_:;#,-]+))/ie',
+                       '/([^:\/\/\w]|^)((ftp:\/\/|ftp\.)([\w\.-]+)([\/\w+\.~%&?@=_:;#,-]+))/ie',
+                       '/([^:\/\/\w]|^)(mailto:(([a-zA-Z\@\%\.\-\+_])+))/ie'
+               );
+               $replaceTo = array(
+                       'COMMENT::createLinkCode("\\1", "\\2","https")',
+                       'COMMENT::createLinkCode("\\1", "\\2","http")',
+                       'COMMENT::createLinkCode("\\1", "\\2","ftp")',
+                       'COMMENT::createLinkCode("\\1", "\\3","mailto")'
+               );
+               $body = preg_replace($replaceFrom, $replaceTo, $body);
+
+               return $body;
+       }
+
+       /**
+        * Creates a link code for unlinked URLs with different protocols
+        *
+        * @ static
+        */     
+       function createLinkCode($pre, $url, $protocol = 'http') {
+               $post = '';
+
+               // it's possible that $url ends contains entities we don't want,
+               // since htmlspecialchars is applied _before_ URL linking
+               // move the part of URL, starting from the disallowed entity to the 'post' link part
+               $aBadEntities = array('&quot;', '&gt;', '&lt;');
+               foreach ($aBadEntities as $entity)
+               {
+                       $pos = strpos($url, $entity);
+                       if ($pos)
+                       {
+                               $post = substr($url, $pos) . $post;
+                               $url = substr($url, 0, $pos);
+
+                       }
+               }
+
+               // remove entities at end (&&&&)
+               if (preg_match('/(&\w+;)+$/i', $url, $matches)) {
+                       $post = $matches[0] . $post;    // found entities (1 or more)
+                       $url = substr($url, 0, strlen($url) - strlen($post));
+               }
+
+               // move ending comma from url to 'post' part
+               if (substr($url, strlen($url) - 1) == ',')
+               {
+                       $url = substr($url, 0, strlen($url) - 1);
+                       $post = ',' . $post;
+               }
+
+               if (!ereg('^'.$protocol.'://',$url))
+                       $linkedUrl = $protocol . (($protocol == 'mailto') ? ':' : '://') . $url;
+               else
+                       $linkedUrl = $url;
+
+
+               if ($protocol != 'mailto')
+                       $displayedUrl = $linkedUrl;
+               else
+                       $displayedUrl = $url;
+               return $pre . '<a href="'.$linkedUrl.'" rel="nofollow">'.shorten($displayedUrl,30,'...').'</a>' . $post;
+       }
+
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/COMMENTACTIONS.php b/utf8/nucleus/libs/COMMENTACTIONS.php
new file mode 100644 (file)
index 0000000..351e2c3
--- /dev/null
@@ -0,0 +1,406 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * This class is used when parsing comment templates
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: COMMENTACTIONS.php,v 1.5.2.1 2007/08/08 05:31:31 kimitake Exp $
+ */
+
+class COMMENTACTIONS extends BaseActions {
+
+       // ref to COMMENTS object which is using this object to handle
+       // its templatevars
+       var $commentsObj;
+
+       // template to use to parse the comments
+       var $template;
+
+       // comment currenlty being handled (mysql result assoc array; see COMMENTS::showComments())
+       var $currentComment;
+
+       function COMMENTACTIONS(&$comments) {
+               // call constructor of superclass first
+               $this->BaseActions();
+
+               // reference to the comments object
+               $this->setCommentsObj($comments);
+       }
+
+       function getDefinedActions() {
+               return array(
+                       'blogurl',
+                       'commentcount',
+                       'commentword',
+                       'email',
+                       'itemlink',
+                       'itemid',
+                       'itemtitle',
+                       'date',
+                       'time',
+                       'commentid',
+                       'body',
+                       'memberid',
+                       'timestamp',
+                       'host',
+                       'ip',
+                       'blogid',
+                       'authtext',
+                       'user',
+                       'userid',
+                       'userlinkraw',
+                       'userlink',
+                       'useremail',
+                       'userwebsite',
+                       'userwebsitelink',
+                       'excerpt',
+                       'short',
+                       'skinfile',
+                       'set',
+                       'plugin',
+                       'include',
+                       'phpinclude',
+                       'parsedinclude'
+               );
+       }
+
+       function setParser(&$parser) {
+               $this->parser =& $parser;
+       }
+       
+       function setCommentsObj(&$commentsObj) {
+               $this->commentsObj =& $commentsObj;
+       }
+       
+       function setTemplate($template) {
+               $this->template =& $template;
+       }
+       
+       function setCurrentComment(&$comment) {
+               global $manager;
+               if ($comment['memberid'] != 0) {
+                       $comment['authtext'] = $template['COMMENTS_AUTH'];
+
+                       $mem =& $manager->getMember($comment['memberid']);
+                       $comment['user'] = $mem->getDisplayName();
+                       if ($mem->getURL())
+                               $comment['userid'] = $mem->getURL();
+                       else
+                               $comment['userid'] = $mem->getEmail();
+
+                       $comment['userlinkraw'] = createLink(
+                                                                               'member',
+                                                                               array(
+                                                                                       'memberid' => $comment['memberid'],
+                                                                                       'name' => $mem->getDisplayName(),
+                                                                                       'extra' => $this->commentsObj->itemActions->linkparams
+                                                                               )
+                                                                         );
+
+               } else {
+
+                       // create smart links
+/*                     if (isValidMailAddress($comment['userid']))
+                               $comment['userlinkraw'] = 'mailto:'.$comment['userid'];
+                       elseif (strstr($comment['userid'],'http://') != false)
+                               $comment['userlinkraw'] = $comment['userid'];
+                       elseif (strstr($comment['userid'],'www') != false)
+                               $comment['userlinkraw'] = 'http://'.$comment['userid'];*/
+                       if (strstr($comment['userid'],'http://') != false)
+                               $comment['userlinkraw'] = $comment['userid'];
+                       elseif (strstr($comment['userid'],'www') != false)
+                               $comment['userlinkraw'] = 'http://'.$comment['userid'];
+                       elseif (isValidMailAddress($comment['email']))
+                               $comment['userlinkraw'] = 'mailto:'.$comment['email'];
+                       elseif (isValidMailAddress($comment['userid']))
+                               $comment['userlinkraw'] = 'mailto:'.$comment['userid'];
+               }
+
+               $this->currentComment =& $comment;
+       }
+
+       /**
+        * Parse templatevar authtext
+        */
+       function parse_authtext() {
+               if ($this->currentComment['memberid'] != 0)
+                       $this->parser->parse($this->template['COMMENTS_AUTH']);
+       }
+
+       /**
+        * Parse templatevar blogid
+        */
+       function parse_blogid() {
+               echo $this->currentComment['blogid'];
+       }
+
+       /**
+        * Parse templatevar blogurl
+        */
+       function parse_blogurl() {
+               global $manager;
+               $blogid = getBlogIDFromItemID($this->commentsObj->itemid);
+               $blog =& $manager->getBlog($blogid);
+               echo $blog->getURL();
+       }
+
+       /**
+        * Parse templatevar body
+        */
+       function parse_body() {
+               echo $this->highlight($this->currentComment['body']);
+       }
+
+       /**
+        * Parse templatevar commentcount
+        */
+       function parse_commentcount() {
+                       echo $this->commentsObj->commentcount;
+       }
+
+       /**
+        * Parse templatevar commentid
+        */
+       function parse_commentid() {
+               echo $this->currentComment['commentid'];
+       }
+
+       /**
+        * Parse templatevar commentword
+        */
+       function parse_commentword() {
+               if ($this->commentsObj->commentcount == 1)
+                       echo $this->template['COMMENTS_ONE'];
+               else
+                       echo $this->template['COMMENTS_MANY'];
+       }
+
+       /**
+        * Parse templatevar date
+        */
+       function parse_date($format = '') {
+               echo formatDate($format, $this->currentComment['timestamp'], $this->template['FORMAT_DATE'], $this->commentsObj->itemActions->blog);
+       }
+       
+       /**
+        * Parse templatevar email
+        */
+       function parse_email() {
+               $email = $this->currentComment['email'];
+               $email = str_replace('@', ' (at) ', $email);
+               $email = str_replace('.', ' (dot) ', $email);
+               echo $email;
+       }
+
+       /**
+        * Parse templatevar excerpt
+        */
+       function parse_excerpt() {
+               echo stringToXML(shorten($this->currentComment['body'], 60, '...'));
+       }
+
+       /**
+        * Parse templatevar host
+        */
+       function parse_host() {
+               echo $this->currentComment['host'];
+       }
+
+       /**
+        * Parse templatevar ip
+        */
+       function parse_ip() {
+               echo $this->currentComment['ip'];
+       }
+
+       /**
+        * Parse templatevar itemid
+        */
+       function parse_itemid() {
+               echo $this->commentsObj->itemid;
+       }
+
+       /**
+        * Parse templatevar itemlink
+        */
+       function parse_itemlink() {
+               echo createLink(
+                       'item',
+                       array(
+                               'itemid' => $this->commentsObj->itemid,
+                               'timestamp' => $this->commentsObj->itemActions->currentItem->timestamp,
+                               'title' => $this->commentsObj->itemActions->currentItem->title,
+                               'extra' => $this->commentsObj->itemActions->linkparams
+                       )
+               );
+       }
+
+       /**
+        * Parse templatevar itemtitle
+        */
+       function parse_itemtitle($maxLength = 0) {
+               if ($maxLength == 0)
+                       $this->commentsObj->itemActions->parse_title();
+               else
+                       $this->commentsObj->itemActions->parse_syndicate_title($maxLength);
+       }
+
+       /**
+        * Parse templatevar memberid
+        */
+       function parse_memberid() {
+               echo $this->currentComment['memberid'];
+       }
+
+       /**
+        * Parse templatevar short
+        */
+       function parse_short() {
+               $tmp = strtok($this->currentComment['body'],"\n");
+               $tmp = str_replace('<br />','',$tmp);
+               echo $tmp;
+               if ($tmp != $this->currentComment['body'])
+                       $this->parser->parse($this->template['COMMENTS_CONTINUED']);
+       }
+
+       /**
+        * Parse templatevar time
+        */
+       function parse_time($format = '') {
+               echo strftime(
+                               ($format == '') ? $this->template['FORMAT_TIME'] : $format,
+                               $this->currentComment['timestamp']
+                       );
+       }
+
+       /**
+        * Parse templatevar timestamp
+        */
+       function parse_timestamp() {
+               echo $this->currentComment['timestamp'];
+       }
+
+       /**
+         * Executes a plugin templatevar
+         *
+         * @param pluginName name of plugin (without the NP_)
+         *
+         * extra parameters can be added
+         */
+       function parse_plugin($pluginName) {
+               global $manager;
+
+               // only continue when the plugin is really installed
+               if (!$manager->pluginInstalled('NP_' . $pluginName))
+                       return;
+
+               $plugin =& $manager->getPlugin('NP_' . $pluginName);
+               if (!$plugin) return;
+
+               // get arguments
+               $params = func_get_args();
+
+               // remove plugin name
+               array_shift($params);
+
+               // pass info on current item and current comment as well
+               $params = array_merge(array(&$this->currentComment),$params);
+               $params = array_merge(array(&$this->commentsObj->itemActions->currentItem),$params);
+
+               call_user_func_array(array(&$plugin,'doTemplateCommentsVar'), $params);
+       }
+
+       /**
+        * Parse templatevar user
+        */
+       function parse_user($mode='') {
+               global $manager;
+               if ($mode == 'realname' && $this->currentComment['memberid'] > 0) {
+                       $member =& $manager->getMember($this->currentComment['memberid']);
+                       echo $member->getRealName();
+               } else {
+                       echo $this->currentComment['user'];
+               }
+       }
+
+       /**
+        * Parse templatevar useremail
+        */
+       function parse_useremail() {
+               global $manager;
+               if ($this->currentComment['memberid'] > 0)
+               {
+                       $member =& $manager->getMember($this->currentComment['memberid']);
+
+                       if ($member->email != '')
+                               echo $member->email;
+               }
+               else
+               {
+                       if (isValidMailAddress($this->currentComment['email']))
+                               echo $this->currentComment['email'];
+                       elseif (isValidMailAddress($this->currentComment['userid']))
+                               echo $this->currentComment['userid'];
+//                     if (!(strpos($this->currentComment['userlinkraw'], 'mailto:') === false))
+//                             echo str_replace('mailto:', '', $this->currentComment['userlinkraw']);
+               }
+       }
+
+       /**
+        * Parse templatevar userid
+        */
+       function parse_userid() {
+                       echo $this->currentComment['userid'];
+       }
+
+
+       /**
+        * Parse templatevar userlink
+        */
+       function parse_userlink() {
+               if ($this->currentComment['userlinkraw']) {
+                       echo '<a href="'.$this->currentComment['userlinkraw'].'" rel="nofollow">'.$this->currentComment['user'].'</a>';
+               } else {
+                       echo $this->currentComment['user'];
+               }
+       }
+
+       /**
+        * Parse templatevar userlinkraw
+        */
+       function parse_userlinkraw() {
+               echo $this->currentComment['userlinkraw'];
+       }
+       
+       /**
+        * Parse templatevar userwebsite
+        */
+       function parse_userwebsite() {
+               if (!(strpos($this->currentComment['userlinkraw'], 'http://') === false))
+                       echo $this->currentComment['userlinkraw'];
+       }
+       
+       /**
+        * Parse templatevar userwebsitelink
+        */
+       function parse_userwebsitelink() {
+               if (!(strpos($this->currentComment['userlinkraw'], 'http://') === false)) {
+                       echo '<a href="'.$this->currentComment['userlinkraw'].'" rel="nofollow">'.$this->currentComment['user'].'</a>';
+               } else {
+                       echo $this->currentComment['user'];
+               }
+       }
+
+}
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/COMMENTS.php b/utf8/nucleus/libs/COMMENTS.php
new file mode 100755 (executable)
index 0000000..9796773
--- /dev/null
@@ -0,0 +1,344 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * A class representing the comments (all of them) for a certain post on a ceratin blog
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: COMMENTS.php,v 1.9.2.1 2007/08/08 05:32:21 kimitake Exp $
+ */
+
+if ( !function_exists('requestVar') ) exit;
+require_once dirname(__FILE__) . '/COMMENTACTIONS.php';
+
+class COMMENTS {
+
+       // item for which comment are being displayed
+       var $itemid;
+
+       // reference to the itemActions object that is calling the showComments function
+       var $itemActions;
+
+       // total amount of comments displayed
+       var $commentcount;
+
+       /**
+        * Creates a new COMMENTS object for the given blog and item
+        *
+        * @param $itemid
+        *              id of the item
+        */
+       function COMMENTS($itemid) {
+               $this->itemid = intval($itemid);
+       }
+
+       /**
+        * Used when parsing comments
+        *
+        * @param $itemActions
+        *              itemActions object, that will take care of the parsing
+        */
+       function setItemActions(&$itemActions) {
+               $this->itemActions =& $itemActions;
+       }
+
+       /**
+        * Shows maximum $max comments to the given item using the given template
+        * returns the amount of shown comments (if maxToShow = -1, then there is no limit)
+        *
+        * @param template
+        *              template to use
+        * @param maxToShow
+        *              max. comments to show
+        * @param showNone
+        *              indicates if the 'no comments' thingie should be outputted when there are no comments
+        *              (useful for closed items)
+        * @param highlight
+        *              Highlight to use (if any)
+        */
+       function showComments($template, $maxToShow = -1, $showNone = 1, $highlight = '') {
+               global $CONF, $manager;
+
+               // create parser object & action handler
+               $actions =& new COMMENTACTIONS($this);
+               $parser =& new PARSER($actions->getDefinedActions(),$actions);
+               $actions->setTemplate($template);
+               $actions->setParser($parser);
+
+               if ($maxToShow == 0) {
+                       $this->commentcount = $this->amountComments();
+               } else {
+                       $query =  'SELECT c.citem as itemid, c.cnumber as commentid, c.cbody as body, c.cuser as user, c.cmail as userid, c.cemail as email, c.cmember as memberid, c.ctime, c.chost as host, c.cip as ip, c.cblog as blogid'
+                                  . ' FROM '.sql_table('comment').' as c'
+                                  . ' WHERE c.citem=' . $this->itemid
+                                  . ' ORDER BY c.ctime';
+
+                       $comments = sql_query($query);
+                       $this->commentcount = sql_num_rows($comments);
+               }
+
+               // if no result was found
+               if ($this->commentcount == 0) {
+                       // note: when no reactions, COMMENTS_HEADER and COMMENTS_FOOTER are _NOT_ used
+                       if ($showNone) $parser->parse($template['COMMENTS_NONE']);
+                       return 0;
+               }
+
+               // if too many comments to show
+               if (($maxToShow != -1) && ($this->commentcount > $maxToShow)) {
+                       $parser->parse($template['COMMENTS_TOOMUCH']);
+                       return 0;
+               }
+
+               $parser->parse($template['COMMENTS_HEADER']);
+
+               while ( $comment = sql_fetch_assoc($comments) ) {
+                       $comment['timestamp'] = strtotime($comment['ctime']);
+                       $actions->setCurrentComment($comment);
+                       $actions->setHighlight($highlight);
+                       $manager->notify('PreComment', array('comment' => &$comment));
+                       $parser->parse($template['COMMENTS_BODY']);
+                       $manager->notify('PostComment', array('comment' => &$comment));
+               }
+
+               $parser->parse($template['COMMENTS_FOOTER']);
+
+               sql_free_result($comments);
+
+               return $this->commentcount;
+       }
+
+       /**
+        * Returns the amount of comments for this itemid
+        */
+       function amountComments() {
+               $query =  'SELECT COUNT(*)'
+                          . ' FROM '.sql_table('comment').' as c'
+                          . ' WHERE c.citem='. $this->itemid;
+               $res = sql_query($query);
+               $arr = sql_fetch_row($res);
+
+               return $arr[0];
+       }
+
+       /**
+        * Adds a new comment to the database
+        */
+       function addComment($timestamp, $comment) {
+               global $CONF, $member, $manager;
+
+               $blogid = getBlogIDFromItemID($this->itemid);
+
+               $settings =& $manager->getBlog($blogid);
+               $settings->readSettings();
+
+               if (!$settings->commentsEnabled())
+                       return _ERROR_COMMENTS_DISABLED;
+
+               if (!$settings->isPublic() && !$member->isLoggedIn())
+                       return _ERROR_COMMENTS_NONPUBLIC;
+
+               // member name protection
+               if ($CONF['ProtectMemNames'] && !$member->isLoggedIn() && MEMBER::isNameProtected($comment['user']))
+                       return _ERROR_COMMENTS_MEMBERNICK;
+
+               // email required protection
+               if ($settings->emailRequired() && strlen($comment['email']) == 0 && !$member->isLoggedIn()) {
+                       return _ERROR_EMAIL_REQUIRED;
+               }
+
+               $comment['timestamp'] = $timestamp;
+               $comment['host'] = gethostbyaddr(serverVar('REMOTE_ADDR'));
+               $comment['ip'] = serverVar('REMOTE_ADDR');
+
+               // if member is logged in, use that data
+               if ($member->isLoggedIn()) {
+                       $comment['memberid'] = $member->getID();
+                       $comment['user'] = '';
+                       $comment['userid'] = '';
+                       $comment['email'] = '';
+               } else {
+                       $comment['memberid'] = 0;
+               }
+
+               // spam check
+               $continue = false;
+               $plugins = array();
+
+               if (isset($manager->subscriptions['ValidateForm']))
+                       $plugins = array_merge($plugins, $manager->subscriptions['ValidateForm']);
+
+               if (isset($manager->subscriptions['PreAddComment']))
+                       $plugins = array_merge($plugins, $manager->subscriptions['PreAddComment']);
+
+               if (isset($manager->subscriptions['PostAddComment']))
+                       $plugins = array_merge($plugins, $manager->subscriptions['PostAddComment']);
+
+               $plugins = array_unique($plugins);
+
+               while (list(,$plugin) = each($plugins)) {
+                       $p = $manager->getPlugin($plugin);
+                       $continue = $continue || $p->supportsFeature('handleSpam');
+               }
+
+               $spamcheck = array (
+                       'type'          => 'comment',
+                       'body'          => $comment['body'],
+                       'id'        => $comment['itemid'],
+                       'live'          => true,
+                       'return'        => $continue
+               );
+
+               if ($member->isLoggedIn()) {
+                       $spamcheck['author'] = $member->displayname;
+                       $spamcheck['email'] = $member->email;
+               } else {
+                       $spamcheck['author'] = $comment['user'];
+                       $spamcheck['email'] = $comment['email'];
+                       $spamcheck['url'] = $comment['userid'];
+               }
+
+               $manager->notify('SpamCheck', array ('spamcheck' => &$spamcheck));
+
+               if (!$continue && isset($spamcheck['result']) && $spamcheck['result'] == true)
+                       return _ERROR_COMMENTS_SPAM;
+
+
+               // isValidComment returns either "1" or an error message
+               $isvalid = $this->isValidComment($comment, $spamcheck);
+               if ($isvalid != 1)
+                       return $isvalid;
+
+               // send email to notification address, if any
+               if ($settings->getNotifyAddress() && $settings->notifyOnComment()) {
+
+                       $mailto_msg = _NOTIFY_NC_MSG . ' ' . $this->itemid . "\n";
+//                     $mailto_msg .= $CONF['IndexURL'] . 'index.php?itemid=' . $this->itemid . "\n\n";
+                       $temp = parse_url($CONF['Self']);
+                       if ($temp['scheme']) {
+                               $mailto_msg .= createItemLink($this->itemid) . "\n\n";
+                       } else {
+                               $tempurl = $settings->getURL();
+                               if (substr($tempurl, -1) == '/' || substr($tempurl, -4) == '.php') {
+                                       $mailto_msg .= $tempurl . '?itemid=' . $this->itemid . "\n\n";
+                               } else {
+                                       $mailto_msg .= $tempurl . '/?itemid=' . $this->itemid . "\n\n";
+                               }
+                       }
+                       if ($comment['memberid'] == 0) {
+                               $mailto_msg .= _NOTIFY_USER . ' ' . $comment['user'] . "\n";
+                               $mailto_msg .= _NOTIFY_USERID . ' ' . $comment['userid'] . "\n";
+                       } else {
+                               $mailto_msg .= _NOTIFY_MEMBER .' ' . $member->getDisplayName() . ' (ID=' . $member->getID() . ")\n";
+                       }
+                       $mailto_msg .= _NOTIFY_HOST . ' ' . $comment['host'] . "\n";
+                       $mailto_msg .= _NOTIFY_COMMENT . "\n " . $comment['body'] . "\n";
+                       $mailto_msg .= getMailFooter();
+
+                       $item =& $manager->getItem($this->itemid, 0, 0);
+                       $mailto_title = _NOTIFY_NC_TITLE . ' ' . strip_tags($item['title']) . ' (' . $this->itemid . ')';
+
+                       $frommail = $member->getNotifyFromMailAddress($comment['email']);
+
+                       $notify =& new NOTIFICATION($settings->getNotifyAddress());
+                       $notify->notify($mailto_title, $mailto_msg , $frommail);
+               }
+
+               $comment = COMMENT::prepare($comment);
+
+               $manager->notify('PreAddComment',array('comment' => &$comment, 'spamcheck' => &$spamcheck));
+
+               $name           = addslashes($comment['user']);
+               $url            = addslashes($comment['userid']);
+               $email      = addslashes($comment['email']);
+               $body           = addslashes($comment['body']);
+               $host           = addslashes($comment['host']);
+               $ip                     = addslashes($comment['ip']);
+               $memberid       = intval($comment['memberid']);
+               $timestamp      = date('Y-m-d H:i:s', $comment['timestamp']);
+               $itemid         = $this->itemid;
+
+               $qSql       = 'SELECT COUNT(*) AS result '
+                                       . 'FROM ' . sql_table('comment')
+                                       . ' WHERE '
+                                       .      'cmail   = "' . $url . '"'
+                                       . ' AND cmember = "' . $memberid . '"'
+                                       . ' AND cbody   = "' . $body . '"'
+                                       . ' AND citem   = "' . $itemid . '"'
+                                       . ' AND cblog   = "' . $blogid . '"';
+               $result     = (integer) quickQuery($qSql);
+               if ($result > 0) {
+                       return _ERROR_BADACTION;
+               }
+
+               $query = 'INSERT INTO '.sql_table('comment').' (CUSER, CMAIL, CEMAIL, CMEMBER, CBODY, CITEM, CTIME, CHOST, CIP, CBLOG) '
+                          . "VALUES ('$name', '$url', '$email', $memberid, '$body', $itemid, '$timestamp', '$host', '$ip', '$blogid')";
+
+               sql_query($query);
+
+               // post add comment
+               $commentid = sql_insert_id();
+               $manager->notify('PostAddComment',array('comment' => &$comment, 'commentid' => &$commentid, 'spamcheck' => &$spamcheck));
+
+               // succeeded !
+               return true;
+       }
+
+       /**
+        * Checks if a comment is valid and call plugins
+        * that can check if the comment is a spam comment        
+        */
+       function isValidComment(&$comment, & $spamcheck) {
+               global $member, $manager;
+
+               // check if there exists a item for this date
+               $item =& $manager->getItem($this->itemid,0,0);
+
+               if (!$item)
+                       return _ERROR_NOSUCHITEM;
+
+               if ($item['closed'])
+                       return _ERROR_ITEMCLOSED;
+
+               // don't allow words that are too long
+               if (eregi('[a-zA-Z0-9|\.,;:!\?=\/\\]{90,90}',$comment['body']) != false)
+                       return _ERROR_COMMENT_LONGWORD;
+
+               // check lengths of comment
+               if (strlen($comment['body'])<3)
+                       return _ERROR_COMMENT_NOCOMMENT;
+
+               if (strlen($comment['body'])>5000)
+                       return _ERROR_COMMENT_TOOLONG;
+
+               // only check username if no member logged in
+               if (!$member->isLoggedIn())
+                       if (strlen($comment['user'])<2)
+                               return _ERROR_COMMENT_NOUSERNAME;
+
+               if ((strlen($comment['email']) != 0) && !(isValidMailAddress($comment['email']))) {
+                       return _ERROR_BADMAILADDRESS;
+               }
+
+               // let plugins do verification (any plugin which thinks the comment is invalid
+               // can change 'error' to something other than '1')
+               $result = 1;
+               $manager->notify('ValidateForm', array('type' => 'comment', 'comment' => &$comment, 'error' => &$result, 'spamcheck' => &$spamcheck));
+
+               return $result;
+       }
+
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/ENCAPSULATE.php b/utf8/nucleus/libs/ENCAPSULATE.php
new file mode 100644 (file)
index 0000000..7a3b7f9
--- /dev/null
@@ -0,0 +1,259 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * Part of the code for the Nucleus admin area
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: ENCAPSULATE.php,v 1.4.2.1 2007/08/08 05:32:54 kimitake Exp $
+ */
+
+class ENCAPSULATE {
+       /**
+         * Uses $call to call a function using parameters $params
+         * This function should return the amount of entries shown.
+         * When entries are show, batch operation handlers are shown too.
+         * When no entries were shown, $errormsg is used to display an error
+         *
+         * Passes on the amount of results found (for further encapsulation)
+         */
+       function doEncapsulate($call, $params, $errorMessage = _ENCAPSULATE_ENCAPSULATE_NOENTRY) {
+               // start output buffering
+               ob_start();
+
+               $nbOfRows = call_user_func_array($call, $params);
+
+               // get list contents and stop buffering
+               $list = ob_get_contents();
+               ob_end_clean();
+
+               if ($nbOfRows > 0) {
+                       $this->showHead();
+                       echo $list;
+                       $this->showFoot();
+               } else {
+                       echo $errorMessage;
+               }
+
+               return $nbOfRows;
+       }
+}
+
+/**
+  * A class used to encapsulate a list of some sort inside next/prev buttons
+  */
+class NAVLIST extends ENCAPSULATE {
+
+       function NAVLIST($action, $start, $amount, $minamount, $maxamount, $blogid, $search, $itemid) {
+               $this->action = $action;
+               $this->start = $start;
+               $this->amount = $amount;
+               $this->minamount = $minamount;
+               $this->maxamount = $maxamount;
+               $this->blogid = $blogid;
+               $this->search = $search;
+               $this->itemid = $itemid;
+       }
+
+       function showBatchList($batchtype, $query, $type, $template, $errorMessage = _LISTS_NOMORE) {
+               $batch =& new BATCH($batchtype);
+
+               $this->doEncapsulate(
+                               array(&$batch, 'showlist'),
+                               array(&$query, $type, $template),
+                               $errorMessage
+               );
+
+       }
+
+
+       function showHead() {
+               $this->showNavigation();
+       }
+       function showFoot() {
+               $this->showNavigation();
+       }
+
+       /**
+         * Displays a next/prev bar for long tables
+         */
+       function showNavigation() {
+               $action = $this->action;
+               $start = $this->start;
+               $amount = $this->amount;
+               $minamount = $this->minamount;
+               $maxamount = $this->maxamount;
+               $blogid = $this->blogid;
+               $search = htmlspecialchars($this->search);
+               $itemid = $this->itemid;
+
+               $prev = $start - $amount;
+               if ($prev < $minamount) $prev=$minamount;
+
+               // maxamount not used yet
+       //      if ($start + $amount <= $maxamount)
+                       $next = $start + $amount;
+       //      else
+       //              $next = $start;
+
+       ?>
+       <table class="navigation">
+       <tr><td>
+               <form method="post" action="index.php"><div>
+               <input type="submit" value="&lt;&lt; <?php echo  _LISTS_PREV?>" />
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />
+               <input type="hidden" name="search" value="<?php echo  $search; ?>" />
+               <input type="hidden" name="start" value="<?php echo  $prev; ?>" />
+               </div></form>
+       </td><td>
+               <form method="post" action="index.php"><div>
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input name="amount" size="3" value="<?php echo  $amount; ?>" /> <?php echo _LISTS_PERPAGE?>
+               <input type="hidden" name="start" value="<?php echo  $start; ?>" />
+               <input type="hidden" name="search" value="<?php echo  $search; ?>" />
+               <input type="submit" value="&gt; <?php echo _LISTS_CHANGE?>" />
+               </div></form>
+       </td><td>
+               <form method="post" action="index.php"><div>
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />
+               <input type="hidden" name="start" value="0" />
+               <input type="text" name="search" value="<?php echo  $search; ?>" size="7" />
+               <input type="submit" value="&gt; <?php echo  _LISTS_SEARCH?>" />
+               </div></form>
+       </td><td>
+               <form method="post" action="index.php"><div>
+               <input type="submit" value="<?php echo _LISTS_NEXT?> &gt; &gt;" />
+               <input type="hidden" name="search" value="<?php echo  $search; ?>" />
+               <input type="hidden" name="blogid" value="<?php echo  $blogid; ?>" />
+               <input type="hidden" name="itemid" value="<?php echo  $itemid; ?>" />
+               <input type="hidden" name="action" value="<?php echo  $action; ?>" />
+               <input type="hidden" name="amount" value="<?php echo  $amount; ?>" />
+               <input type="hidden" name="start" value="<?php echo  $next; ?>" />
+               </div></form>
+       </td></tr>
+       </table>
+       <?php   }
+
+
+}
+
+
+/**
+ * A class used to encapsulate a list of some sort in a batch selection
+ */
+class BATCH extends ENCAPSULATE {
+       function BATCH($type) {
+               $this->type = $type;
+       }
+
+       function showHead() {
+               ?>
+                       <form method="post" action="index.php">
+               <?php
+// TODO: get a list op operations above the list too
+// (be careful not to use the same names for the select...)
+//             $this->showOperationList();
+       }
+
+       function showFoot() {
+               $this->showOperationList();
+               ?>
+                       </form>
+               <?php   }
+
+       function showOperationList() {
+               global $manager;
+               ?>
+               <div class="batchoperations">
+                       <?php echo _BATCH_WITH_SEL ?>
+                       <select name="batchaction">
+                       <?php                           $options = array();
+                               switch($this->type) {
+                                       case 'item':
+                                               $options = array(
+                                                       'delete'        => _BATCH_ITEM_DELETE,
+                                                       'move'          => _BATCH_ITEM_MOVE
+                                               );
+                                               break;
+                                       case 'member':
+                                               $options = array(
+                                                       'delete'        => _BATCH_MEMBER_DELETE,
+                                                       'setadmin'      => _BATCH_MEMBER_SET_ADM,
+                                                       'unsetadmin' => _BATCH_MEMBER_UNSET_ADM
+                                               );
+                                               break;
+                                       case 'team':
+                                               $options = array(
+                                                       'delete'        => _BATCH_TEAM_DELETE,
+                                                       'setadmin'      => _BATCH_TEAM_SET_ADM,
+                                                       'unsetadmin' => _BATCH_TEAM_UNSET_ADM,
+                                               );
+                                               break;
+                                       case 'category':
+                                               $options = array(
+                                                       'delete'        => _BATCH_CAT_DELETE,
+                                                       'move'          => _BATCH_CAT_MOVE,
+                                               );
+                                               break;
+                                       case 'comment':
+                                               $options = array(
+                                                       'delete'        => _BATCH_COMMENT_DELETE,
+                                               );
+                                       break;
+                               }
+                               foreach ($options as $option => $label) {
+                                       echo '<option value="',$option,'">',$label,'</option>';
+                               }
+                       ?>
+                       </select>
+                       <input type="hidden" name="action" value="batch<?php echo $this->type?>" />
+                       <?php
+                               $manager->addTicketHidden();
+
+                               // add hidden fields for 'team' and 'comment' batchlists
+                               if ($this->type == 'team')
+                               {
+                                       echo '<input type="hidden" name="blogid" value="',intRequestVar('blogid'),'" />';
+                               }
+                               if ($this->type == 'comment')
+                               {
+                                       echo '<input type="hidden" name="itemid" value="',intRequestVar('itemid'),'" />';
+                               }
+
+                               echo '<input type="submit" value="',_BATCH_EXEC,'" />';
+                       ?>(
+                        <a href="" onclick="if (event &amp;&amp; event.preventDefault) event.preventDefault(); return batchSelectAll(1); "><?php echo _BATCH_SELECTALL?></a> -
+                        <a href="" onclick="if (event &amp;&amp; event.preventDefault) event.preventDefault(); return batchSelectAll(0); "><?php echo _BATCH_DESELECTALL?></a>
+                       )
+               </div>
+               <?php   }
+
+       // shortcut :)
+       function showList($query, $type, $template, $errorMessage = _LISTS_NOMORE) {
+               return $this->doEncapsulate(    'showlist',
+                                                                       array($query, $type, $template),
+                                                                       $errorMessage
+                                                               );
+       }
+
+}
+?>
diff --git a/utf8/nucleus/libs/ITEM.php b/utf8/nucleus/libs/ITEM.php
new file mode 100755 (executable)
index 0000000..139484d
--- /dev/null
@@ -0,0 +1,463 @@
+<?php\r
+\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+/**\r
+ * A class representing an item\r
+ *\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ * $NucleusJP: ITEM.php,v 1.7.2.3 2008/02/07 06:13:30 kimitake Exp $\r
+ */\r
+class ITEM {\r
+\r
+       var $itemid;\r
+\r
+       /**\r
+         * Constructor of an ITEM object\r
+         * \r
+         * @param integer $itemid id of the item\r
+         */\r
+       function ITEM($itemid) {\r
+               $this->itemid = $itemid;\r
+       }\r
+\r
+       /**\r
+         * Returns one item with the specific itemid\r
+         * \r
+         * @param integer $itemid id of the item\r
+         * @param boolean $allowdraft\r
+         * @param boolean $allowfuture\r
+         * @static\r
+         */\r
+       function getitem($itemid, $allowdraft, $allowfuture) {\r
+               global $manager;\r
+\r
+               $itemid = intval($itemid);\r
+\r
+               $query =  'SELECT i.idraft as draft, i.inumber as itemid, i.iclosed as closed, '\r
+                          . ' i.ititle as title, i.ibody as body, m.mname as author, '\r
+                          . ' i.iauthor as authorid, i.itime, i.imore as more, i.ikarmapos as karmapos, '\r
+                          . ' i.ikarmaneg as karmaneg, i.icat as catid, i.iblog as blogid '\r
+                          . ' FROM '.sql_table('item').' as i, '.sql_table('member').' as m, ' . sql_table('blog') . ' as b '\r
+                          . ' WHERE i.inumber=' . $itemid\r
+                          . ' and i.iauthor=m.mnumber '\r
+                          . ' and i.iblog=b.bnumber';\r
+\r
+               if (!$allowdraft)\r
+                       $query .= ' and i.idraft=0';\r
+\r
+               if (!$allowfuture) {\r
+                       $blog =& $manager->getBlog(getBlogIDFromItemID($itemid));\r
+                       $query .= ' and i.itime <=' . mysqldate($blog->getCorrectTime());\r
+               }\r
+\r
+               $query .= ' LIMIT 1';\r
+\r
+               $res = sql_query($query);\r
+\r
+               if (sql_num_rows($res) == 1)\r
+               {\r
+                       $aItemInfo = sql_fetch_assoc($res);\r
+                       $aItemInfo['timestamp'] = strtotime($aItemInfo['itime']);\r
+                       return $aItemInfo;\r
+               } else {\r
+                       return 0;\r
+               }\r
+\r
+       }\r
+\r
+       /**\r
+        * Tries to create an item from the data in the current request (comes from\r
+        * bookmarklet or admin area\r
+        *\r
+        * Returns an array with status info:\r
+        * status = 'added', 'error', 'newcategory'\r
+        *\r
+        * @static\r
+        */\r
+       function createFromRequest() {\r
+                global $member, $manager;\r
+\r
+                $i_author =            $member->getID();\r
+                $i_body =                      postVar('body');\r
+                $i_title =                     postVar('title');\r
+                $i_more =                      postVar('more');\r
+                $i_actiontype =        postVar('actiontype');\r
+                $i_closed =            intPostVar('closed');\r
+                $i_hour =                      intPostVar('hour');\r
+                $i_minutes =           intPostVar('minutes');\r
+                $i_month =             intPostVar('month');\r
+                $i_day =                       intPostVar('day');\r
+                $i_year =                      intPostVar('year');\r
+\r
+                $i_catid =             postVar('catid');\r
+\r
+                $i_draftid =           intPostVar('draftid');\r
+\r
+                if (!$member->canAddItem($i_catid))\r
+                       return array('status' => 'error', 'message' => _ERROR_DISALLOWED);\r
+\r
+                if (!$i_actiontype) $i_actiontype = 'addnow';\r
+\r
+                switch ($i_actiontype) {\r
+                       case 'adddraft':\r
+                               $i_draft = 1;\r
+                               break;\r
+                       case 'addfuture':\r
+                       case 'addnow':\r
+                       default:\r
+                               $i_draft = 0;\r
+                }\r
+\r
+                if (!trim($i_body))\r
+                       return array('status' => 'error', 'message' => _ERROR_NOEMPTYITEMS);\r
+\r
+               // create new category if needed\r
+               if (strstr($i_catid,'newcat')) {\r
+                       // get blogid\r
+                       list($i_blogid) = sscanf($i_catid,"newcat-%d");\r
+\r
+                       // create\r
+                       $blog =& $manager->getBlog($i_blogid);\r
+                       $i_catid = $blog->createNewCategory();\r
+\r
+                       // show error when sth goes wrong\r
+                       if (!$i_catid)\r
+                               return array('status' => 'error','message' => 'Could not create new category');\r
+               } else {\r
+                       // force blogid (must be same as category id)\r
+                       $i_blogid = getBlogIDFromCatID($i_catid);\r
+                       $blog =& $manager->getBlog($i_blogid);\r
+               }\r
+\r
+               if ($i_actiontype == 'addfuture') {\r
+                       $posttime = mktime($i_hour, $i_minutes, 0, $i_month, $i_day, $i_year);\r
+\r
+                       // make sure the date is in the future, unless we allow past dates\r
+                       if ((!$blog->allowPastPosting()) && ($posttime < $blog->getCorrectTime()))\r
+                               $posttime = $blog->getCorrectTime();\r
+               } else {\r
+                       // time with offset, or 0 for drafts\r
+                       $posttime = $i_draft ? 0 : $blog->getCorrectTime();\r
+               }\r
+\r
+               if ($posttime > $blog->getCorrectTime()) {\r
+                       $posted = 0;\r
+                       $blog->setFuturePost();\r
+               }\r
+               else {\r
+                       $posted = 1;\r
+               }\r
+\r
+               $itemid = $blog->additem($i_catid, $i_title,$i_body,$i_more,$i_blogid,$i_author,$posttime,$i_closed,$i_draft,$posted);\r
+\r
+               //Setting the itemOptions\r
+               $aOptions = requestArray('plugoption');\r
+               NucleusPlugin::_applyPluginOptions($aOptions, $itemid);\r
+               $manager->notify('PostPluginOptionsUpdate',array('context' => 'item', 'itemid' => $itemid, 'item' => array('title' => $i_title, 'body' => $i_body, 'more' => $i_more, 'closed' => $i_closed, 'catid' => $i_catid)));\r
+\r
+               if ($i_draftid > 0) {\r
+                       // delete permission is checked inside ITEM::delete()\r
+                       ITEM::delete($i_draftid);\r
+               }\r
+\r
+               // success\r
+               if ($i_catid != intRequestVar('catid'))\r
+                       return array('status' => 'newcategory', 'itemid' => $itemid, 'catid' => $i_catid);\r
+               else\r
+                       return array('status' => 'added', 'itemid' => $itemid);\r
+       }\r
+\r
+\r
+       /**\r
+         * Updates an item\r
+         *\r
+         * @static\r
+         */\r
+       function update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp = 0) {\r
+               global $manager;\r
+\r
+               $itemid = intval($itemid);\r
+\r
+               // make sure value is 1 or 0\r
+               if ($closed != 1) $closed = 0;\r
+\r
+               // get destination blogid\r
+               $new_blogid = getBlogIDFromCatID($catid);\r
+               $old_blogid = getBlogIDFromItemID($itemid);\r
+\r
+               // move will be done on end of method\r
+               if ($new_blogid != $old_blogid)\r
+                       $moveNeeded = 1;\r
+\r
+               // add <br /> before newlines\r
+               $blog =& $manager->getBlog($new_blogid);\r
+               if ($blog->convertBreaks()) {\r
+                       $body = addBreaks($body);\r
+                       $more = addBreaks($more);\r
+               }\r
+\r
+               // call plugins\r
+               $manager->notify('PreUpdateItem',array('itemid' => $itemid, 'title' => &$title, 'body' => &$body, 'more' => &$more, 'blog' => &$blog, 'closed' => &$closed, 'catid' => &$catid));\r
+\r
+               // update item itsself\r
+               $query =  'UPDATE '.sql_table('item')\r
+                          . ' SET'\r
+                          . " ibody='". addslashes($body) ."',"\r
+                          . " ititle='" . addslashes($title) . "',"\r
+                          . " imore='" . addslashes($more) . "',"\r
+                          . " iclosed=" . intval($closed) . ","\r
+                          . " icat=" . intval($catid);\r
+\r
+               // if we received an updated timestamp in the past, but past posting is not allowed,\r
+               // reject that date change (timestamp = 0 will make sure the current date is kept)\r
+               if ( (!$blog->allowPastPosting()) && ($timestamp < $blog->getCorrectTime()))\r
+                               $timestamp = 0;\r
+\r
+               if ($timestamp > $blog->getCorrectTime(time())) {\r
+                       $isFuture = 1;\r
+                       $query .= ', iposted=0';\r
+               }\r
+               else {\r
+                       $isFuture = 0;\r
+                       $query .= ', iposted=1';\r
+               }\r
+\r
+               if ($wasdraft && $publish) {\r
+                       // set timestamp to current date only if it's not a future item\r
+                       // draft items have timestamp == 0\r
+                       // don't allow timestamps in the past (unless otherwise defined in blogsettings)\r
+                       $query .= ', idraft=0';\r
+\r
+                       if ($timestamp == 0)\r
+                               $timestamp = $blog->getCorrectTime();\r
+\r
+                       // send new item notification\r
+                       if (!$isFuture && $blog->getNotifyAddress() && $blog->notifyOnNewItem())\r
+                               $blog->sendNewItemNotification($itemid, $title, $body);\r
+               }\r
+\r
+               // save back to drafts          \r
+               if (!$wasdraft && !$publish) {\r
+                       $query .= ', idraft=1';\r
+                       // set timestamp back to zero for a draft\r
+                       $query .= ", itime=" . mysqldate($timestamp);\r
+               }\r
+\r
+               // update timestamp when needed\r
+               if ($timestamp != 0)\r
+                       $query .= ", itime=" . mysqldate($timestamp);\r
+\r
+               // make sure the correct item is updated\r
+               $query .= ' WHERE inumber=' . $itemid;\r
+\r
+               // off we go!\r
+               sql_query($query);\r
+\r
+               $manager->notify('PostUpdateItem',array('itemid' => $itemid));\r
+\r
+               // when needed, move item and comments to new blog\r
+               if ($moveNeeded)\r
+                       ITEM::move($itemid, $catid);\r
+\r
+               //update the itemOptions\r
+               $aOptions = requestArray('plugoption');\r
+               NucleusPlugin::_applyPluginOptions($aOptions);\r
+               $manager->notify('PostPluginOptionsUpdate',array('context' => 'item', 'itemid' => $itemid, 'item' => array('title' => $title, 'body' => $body, 'more' => $more, 'closed' => $closed, 'catid' => $catid)));\r
+\r
+       }\r
+\r
+       /**\r
+        * Move an item to another blog (no checks)\r
+        *\r
+        * @static\r
+        */\r
+       function move($itemid, $new_catid) {\r
+               global $manager;\r
+\r
+               $itemid = intval($itemid);\r
+               $new_catid = intval($new_catid);\r
+\r
+               $new_blogid = getBlogIDFromCatID($new_catid);\r
+\r
+               $manager->notify(\r
+                       'PreMoveItem',\r
+                       array(\r
+                               'itemid' => $itemid,\r
+                               'destblogid' => $new_blogid,\r
+                               'destcatid' => $new_catid\r
+                       )\r
+               );\r
+\r
+\r
+               // update item table\r
+               $query = 'UPDATE '.sql_table('item')." SET iblog=$new_blogid, icat=$new_catid WHERE inumber=$itemid";\r
+               sql_query($query);\r
+\r
+               // update comments\r
+               $query = 'UPDATE '.sql_table('comment')." SET cblog=" . $new_blogid." WHERE citem=" . $itemid;\r
+               sql_query($query);\r
+\r
+               $manager->notify(\r
+                       'PostMoveItem',\r
+                       array(\r
+                               'itemid' => $itemid,\r
+                               'destblogid' => $new_blogid,\r
+                               'destcatid' => $new_catid\r
+                       )\r
+               );\r
+       }\r
+\r
+       /**\r
+         * Deletes an item\r
+         */\r
+       function delete($itemid) {\r
+               global $manager, $member;\r
+\r
+               $itemid = intval($itemid);\r
+\r
+               // check to ensure only those allow to alter the item can\r
+               // proceed\r
+               if (!$member->canAlterItem($itemid)) {\r
+                       return 1;\r
+               }\r
+\r
+\r
+               $manager->notify('PreDeleteItem', array('itemid' => $itemid));\r
+\r
+               // delete item\r
+               $query = 'DELETE FROM '.sql_table('item').' WHERE inumber=' . $itemid;\r
+               sql_query($query);\r
+\r
+               // delete the comments associated with the item\r
+               $query = 'DELETE FROM '.sql_table('comment').' WHERE citem=' . $itemid;\r
+               sql_query($query);\r
+\r
+               // delete all associated plugin options\r
+               NucleusPlugin::_deleteOptionValues('item', $itemid);\r
+\r
+               $manager->notify('PostDeleteItem', array('itemid' => $itemid));\r
+\r
+               return 0;\r
+       }\r
+\r
+       /**\r
+        * Returns true if there is an item with the given ID\r
+        *\r
+        * @static\r
+        */\r
+       function exists($id,$future,$draft) {\r
+               global $manager;\r
+\r
+               $id = intval($id);\r
+\r
+               $r = 'select * FROM '.sql_table('item').' WHERE inumber='.$id;\r
+               if (!$future) {\r
+                       $bid = getBlogIDFromItemID($id);\r
+                       if (!$bid) return 0;\r
+                       $b =& $manager->getBlog($bid);\r
+                       $r .= ' and itime<='.mysqldate($b->getCorrectTime());\r
+               }\r
+               if (!$draft) {\r
+                       $r .= ' and idraft=0';\r
+               }\r
+               $r = sql_query($r);\r
+\r
+               return (sql_num_rows($r) != 0);\r
+       }\r
+\r
+       /**\r
+        * Tries to create an draft from the data in the current request (comes from\r
+        * bookmarklet or admin area\r
+        *\r
+        * Returns an array with status info:\r
+        * status = 'added', 'error', 'newcategory'\r
+        *\r
+        * @static\r
+        *\r
+        * Used by xmlHTTPRequest AutoDraft\r
+        */\r
+       function createDraftFromRequest() {\r
+               global $member, $manager;\r
+\r
+               $i_author = $member->getID();\r
+               $i_body = postVar('body');\r
+               $i_title = postVar('title');\r
+               $i_more = postVar('more');\r
+\r
+               if(strtoupper(_CHARSET) != 'UTF-8'){\r
+                       $i_body  = mb_convert_encoding($i_body, _CHARSET, "UTF-8");\r
+                       $i_title = mb_convert_encoding($i_title, _CHARSET, "UTF-8");\r
+                       $i_more  = mb_convert_encoding($i_more, _CHARSET, "UTF-8");\r
+               }\r
+               //$i_actiontype = postVar('actiontype');\r
+               $i_closed = intPostVar('closed');\r
+               //$i_hour = intPostVar('hour');\r
+               //$i_minutes = intPostVar('minutes');\r
+               //$i_month = intPostVar('month');\r
+               //$i_day = intPostVar('day');\r
+               //$i_year = intPostVar('year');\r
+               $i_catid = postVar('catid');\r
+               $i_draft = 1;\r
+               $type = postVar('type');\r
+               if ($type == 'edit') {\r
+                       $i_blogid = getBlogIDFromItemID(intPostVar('itemid'));\r
+               }\r
+               else {\r
+                       $i_blogid = intPostVar('blogid');\r
+               }\r
+               $i_draftid = intPostVar('draftid');\r
+\r
+               if (!$member->canAddItem($i_catid)) {\r
+                       return array('status' => 'error', 'message' => _ERROR_DISALLOWED);\r
+               }\r
+\r
+               if (!trim($i_body)) {\r
+                       return array('status' => 'error', 'message' => _ERROR_NOEMPTYITEMS);\r
+               }\r
+\r
+               // create new category if needed\r
+               if (strstr($i_catid, 'newcat')) {\r
+                       // Set in default category\r
+                       $blog =& $manager->getBlog($i_blogid);\r
+                       $i_catid = $blog->getDefaultCategory();\r
+               }\r
+               else {\r
+                       // force blogid (must be same as category id)\r
+                       $i_blogid = getBlogIDFromCatID($i_catid);\r
+                       $blog =& $manager->getBlog($i_blogid);\r
+               }\r
+\r
+               $posttime = 0;\r
+\r
+               if ($i_draftid > 0) {\r
+                       ITEM::update($i_draftid, $i_catid, $i_title, $i_body, $i_more, $i_closed, 1, 0, 0);\r
+                       $itemid = $i_draftid;\r
+               }\r
+               else {\r
+                       $itemid = $blog->additem($i_catid, $i_title, $i_body, $i_more, $i_blogid, $i_author, $posttime, $i_closed, $i_draft);\r
+               }\r
+\r
+               // No plugin support in AutoSaveDraft yet\r
+               //Setting the itemOptions\r
+               //$aOptions = requestArray('plugoption');\r
+               //NucleusPlugin::_applyPluginOptions($aOptions, $itemid);\r
+               //$manager->notify('PostPluginOptionsUpdate',array('context' => 'item', 'itemid' => $itemid, 'item' => array('title' => $i_title, 'body' => $i_body, 'more' => $i_more, 'closed' => $i_closed, 'catid' => $i_catid)));\r
+\r
+               // success\r
+               return array('status' => 'added', 'draftid' => $itemid);\r
+       }\r
+\r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/ITEMACTIONS.php b/utf8/nucleus/libs/ITEMACTIONS.php
new file mode 100644 (file)
index 0000000..fb87f00
--- /dev/null
@@ -0,0 +1,546 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * This class is used to parse item templates
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: ITEMACTIONS.php,v 1.5.2.3 2007/10/30 19:05:20 kmorimatsu Exp $
+ */
+class ITEMACTIONS extends BaseActions {\r
+\r
+       // contains an assoc array with parameters that need to be included when\r
+       // generating links to items/archives/... (e.g. catid)\r
+       var $linkparams;\r
+\r
+       // true when the current user is a blog admin (and thus allowed to edit all items)\r
+       var $allowEditAll;\r
+\r
+       // timestamp of last visit\r
+       var $lastVisit;\r
+\r
+       // item currently being handled (mysql result object, see BLOG::showUsingQuery)\r
+       var $currentItem;\r
+\r
+       // reference to the blog currently being displayed\r
+       var $blog;\r
+\r
+       // associative array with template info (part name => contents)\r
+       var $template;\r
+\r
+       // true when comments need to be displayed\r
+       var $showComments;\r
+\r
+       function ITEMACTIONS(&$blog) {\r
+               // call constructor of superclass first\r
+               $this->BaseActions();\r
+\r
+               // extra parameters for created links\r
+               global $catid;\r
+               if ($catid)\r
+                       $this->linkparams = array('catid' => $catid);\r
+\r
+               // check if member is blog admin (and thus allowed to edit all items)\r
+               global $member;\r
+               $this->allowEditAll = ($member->isLoggedIn() && $member->blogAdminRights($blog->getID()));\r
+               $this->setBlog($blog);\r
+       }\r
+\r
+       /**\r
+         * Returns an array with the actions that are defined\r
+         * in the ITEMACTIONS class\r
+         */\r
+       function getDefinedActions() {\r
+               return array(\r
+                       'blogid',\r
+                       'title',\r
+                       'body',\r
+                       'more',\r
+                       'smartbody',\r
+                       'itemid',\r
+                       'morelink',\r
+                       'category',\r
+                       'categorylink',\r
+                       'author',\r
+                       'authorid',\r
+                       'authorlink',\r
+                       'catid',\r
+                       'karma',\r
+                       'date',\r
+                       'time',\r
+                       'query',\r
+                       'itemlink',\r
+                       'blogurl',\r
+                       'closed',\r
+                       'syndicate_title',\r
+                       'syndicate_description',\r
+                       'karmaposlink',\r
+                       'karmaneglink',\r
+                       'new',\r
+                       'image',\r
+                       'popup',\r
+                       'media',\r
+                       'daylink',\r
+                       'query',\r
+                       'include',\r
+                       'phpinclude',\r
+                       'parsedinclude',\r
+                       'skinfile',\r
+                       'set',\r
+                       'plugin',\r
+                       'edit',\r
+                       'editlink',\r
+                       'editpopupcode',\r
+                       'comments',\r
+                       'relevance'/*,\r
+                       'if',\r
+                       'else',\r
+                       'endif',\r
+                       'elseif',\r
+                       'ifnot',\r
+                       'elseifnot'*/\r
+               );\r
+       }\r
+\r
+       function setLastVisit($lastVisit) {\r
+               $this->lastVisit = $lastVisit;\r
+       }\r
+\r
+       function setParser(&$parser) {\r
+               $this->parser =& $parser;\r
+       }\r
+\r
+       function setCurrentItem(&$item) {\r
+               $this->currentItem =& $item;\r
+       }\r
+\r
+       function setBlog(&$blog) {\r
+               $this->blog =& $blog;\r
+       }\r
+\r
+       function setTemplate($template) {\r
+               $this->template =& $template;\r
+       }\r
+\r
+       function setShowComments($val) {\r
+               $this->showComments = $val;\r
+       }\r
+\r
+       // methods used by parser to insert content\r
+\r
+\r
+       /**\r
+        * Parse templatevar blogid\r
+        */\r
+       function parse_blogid() {\r
+               echo $this->blog->getID();\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar body\r
+        */\r
+       function parse_body() {\r
+               $this->highlightAndParse($this->currentItem->body);\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar more\r
+        */\r
+       function parse_more() {\r
+               $this->highlightAndParse($this->currentItem->more);\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar itemid\r
+        */\r
+       function parse_itemid() {\r
+               echo $this->currentItem->itemid;\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar category\r
+        */\r
+       function parse_category() {\r
+               echo $this->currentItem->category;\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar categorylink\r
+        */\r
+       function parse_categorylink() {\r
+               echo createLink('category', array('catid' => $this->currentItem->catid, 'name' => $this->currentItem->category));\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar catid\r
+        */\r
+       function parse_catid() {\r
+               echo $this->currentItem->catid;\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar authorid\r
+        */\r
+       function parse_authorid() {\r
+               echo $this->currentItem->authorid;\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar authorlink\r
+        */\r
+       function parse_authorlink() {\r
+               echo createLink(\r
+                       'member',\r
+                       array(\r
+                               'memberid' => $this->currentItem->authorid,\r
+                               'name' => $this->currentItem->author,\r
+                               'extra' => $this->linkparams\r
+                       )\r
+               );\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar query\r
+        */\r
+       function parse_query() {\r
+               echo $this->strHighlight;\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar itemlink\r
+        */\r
+       function parse_itemlink() {\r
+               echo createLink(\r
+                       'item',\r
+                       array(\r
+                               'itemid' => $this->currentItem->itemid,\r
+                               'title' => $this->currentItem->title,\r
+                               'timestamp' => $this->currentItem->timestamp,\r
+                               'extra' => $this->linkparams\r
+                       )\r
+               );\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar blogurl\r
+        */\r
+       function parse_blogurl() {\r
+               echo $this->blog->getURL();\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar closed\r
+        */\r
+       function parse_closed() {\r
+               echo $this->currentItem->closed;\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar relevance\r
+        */\r
+       function parse_relevance() {\r
+               echo round($this->currentItem->score,2);\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar title\r
+        *\r
+        * @param string $format defines in which format the title is shown\r
+        */\r
+       function parse_title($format = '') {\r
+               if (is_array($this->currentItem)) {\r
+                       $itemtitle = $this->currentItem['title'];\r
+               } elseif (is_object($this->currentItem)) {\r
+                       $itemtitle = $this->currentItem->title;\r
+               }\r
+               switch ($format) {\r
+                       case 'xml':\r
+//                             echo stringToXML ($this->currentItem->title);\r
+                               echo stringToXML ($itemtitle);\r
+                               break;\r
+                       case 'attribute':\r
+//                             echo stringToAttribute ($this->currentItem->title);\r
+                               echo stringToAttribute ($itemtitle);\r
+                               break;\r
+                       case 'raw':\r
+//                             echo $this->currentItem->title;\r
+                               echo $itemtitle;\r
+                               break;\r
+                       default:\r
+//                             $this->highlightAndParse($this->currentItem->title);\r
+                               $this->highlightAndParse($itemtitle);\r
+                               break;\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar karma\r
+        */\r
+       function parse_karma($type = 'totalscore') {\r
+               global $manager;\r
+\r
+               // get karma object\r
+               $karma =& $manager->getKarma($this->currentItem->itemid);\r
+\r
+               switch($type) {\r
+                       case 'pos':\r
+                               echo $karma->getNbPosVotes();\r
+                               break;\r
+                       case 'neg':\r
+                               echo $karma->getNbNegVotes();\r
+                               break;\r
+                       case 'votes':\r
+                               echo $karma->getNbOfVotes();\r
+                               break;\r
+                       case 'posp':\r
+                               $percentage = $karma->getNbOfVotes() ? 100 * ($karma->getNbPosVotes() / $karma->getNbOfVotes()) : 50;\r
+                               echo number_format($percentage,2), '%';\r
+                               break;\r
+                       case 'negp':\r
+                               $percentage = $karma->getNbOfVotes() ? 100 * ($karma->getNbNegVotes() / $karma->getNbOfVotes()) : 50;\r
+                               echo number_format($percentage,2), '%';\r
+                               break;\r
+                       case 'totalscore':\r
+                       default:\r
+                               echo $karma->getTotalScore();\r
+                               break;\r
+               }\r
+\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar author\r
+        */\r
+       function parse_author($which = '') {\r
+               switch($which)\r
+               {\r
+                       case 'realname':\r
+                               echo $this->currentItem->authorname;\r
+                               break;\r
+                       case 'id':\r
+                               echo $this->currentItem->authorid;\r
+                               break;\r
+                       case 'email':\r
+                               echo $this->currentItem->authormail;\r
+                               break;\r
+                       case 'url':\r
+                               echo $this->currentItem->authorurl;\r
+                               break;\r
+                       case 'name':\r
+                       default:\r
+                               echo $this->currentItem->author;\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar smartbody\r
+        */\r
+       function parse_smartbody() {\r
+               if (!$this->currentItem->more) {\r
+                       $this->highlightAndParse($this->currentItem->body);\r
+               } else {\r
+                       $this->highlightAndParse($this->currentItem->more);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar morelink\r
+        */\r
+       function parse_morelink() {\r
+               if ($this->currentItem->more)\r
+                       $this->parser->parse($this->template['MORELINK']);\r
+       }\r
+\r
+       /**\r
+        * Parse templatevar date\r
+        *\r
+        * @param format optional strftime format\r
+        */\r
+       function parse_date($format = '') {\r
+               if (!isset($this->template['FORMAT_DATE'])) $this->template['FORMAT_DATE'] = '';
+               echo formatDate($format, $this->currentItem->timestamp, $this->template['FORMAT_DATE'], $this->blog);\r
+       }\r
+\r
+       /**\r
+         * Parse templatevar time\r
+         *\r
+         * @param format optional strftime format\r
+         */\r
+       function parse_time($format = '') {\r
+               if (!isset($this->template['FORMAT_TIME'])) $this->template['FORMAT_TIME'] = '';
+               echo strftime($format ? $format : $this->template['FORMAT_TIME'],$this->currentItem->timestamp);\r
+       }\r
+\r
+       /**\r
+         * Parse templatevar syndicate_title\r
+         *\r
+         * @param maxLength optional maximum length\r
+         */\r
+       function parse_syndicate_title($maxLength = 100) {\r
+               $syndicated = strip_tags($this->currentItem->title);\r
+               echo htmlspecialchars(shorten($syndicated,$maxLength,'...'),ENT_QUOTES);\r
+       }\r
+\r
+       /**\r
+         * Parse templatevar syndicate_description\r
+         *\r
+         * @param maxLength optional maximum length\r
+         */\r
+       function parse_syndicate_description($maxLength = 250, $addHighlight = 0) {\r
+               $syndicated = strip_tags($this->currentItem->body);\r
+               if ($addHighlight) {\r
+                       $tmp_highlight = htmlspecialchars(shorten($syndicated,$maxLength,'...'),ENT_QUOTES);\r
+                       echo $this->highlightAndParse($tmp_highlight);\r
+               } else {\r
+                       echo htmlspecialchars(shorten($syndicated,$maxLength,'...'),ENT_QUOTES);\r
+               }\r
+       }\r
+\r
+       /**\r
+         * Parse templatevar karmaposlink\r
+         *\r
+         * @param string text\r
+         */\r
+       function parse_karmaposlink($text = '') {\r
+               global $CONF;\r
+               $link = $CONF['ActionURL'] . '?action=votepositive&amp;itemid='.$this->currentItem->itemid;\r
+               echo $text ? '<a href="'.$link.'">'.$text.'</a>' : $link;\r
+       }\r
+\r
+       /**\r
+         * Parse templatevar karmaneglink\r
+         *\r
+         * @param string text\r
+         */\r
+       function parse_karmaneglink($text = '') {\r
+               global $CONF;\r
+               $link = $CONF['ActionURL'] . '?action=votenegative&amp;itemid='.$this->currentItem->itemid;\r
+               echo $text ? '<a href="'.$link.'">'.$text.'</a>' : $link;\r
+       }\r
+\r
+       /**\r
+         * Parse templatevar new\r
+         */\r
+       function parse_new() {\r
+               if (($this->lastVisit != 0) && ($this->currentItem->timestamp > $this->lastVisit))\r
+                       echo $this->template['NEW'];\r
+       }\r
+\r
+       /**\r
+         * Parse templatevar daylink\r
+         */\r
+       function parse_daylink() {\r
+               echo createArchiveLink($this->blog->getID(), strftime('%Y-%m-%d',$this->currentItem->timestamp), $this->linkparams);\r
+       }\r
+\r
+       /**\r
+         * Parse templatevar comments\r
+         */\r
+       function parse_comments($maxToShow = 0) {\r
+               if ($maxToShow == 0)\r
+                       $maxToShow = $this->blog->getMaxComments();\r
+\r
+               // add comments\r
+               if ($this->showComments && $this->blog->commentsEnabled()) {\r
+                       $comments =& new COMMENTS($this->currentItem->itemid);\r
+                       $comments->setItemActions($this);\r
+                       $comments->showComments($this->template, $maxToShow, $this->currentItem->closed ? 0 : 1, $this->strHighlight);\r
+               }\r
+       }\r
+\r
+       /**\r
+         * Executes a plugin templatevar\r
+         *\r
+         * @param pluginName name of plugin (without the NP_)\r
+         *\r
+         * extra parameters can be added\r
+         */\r
+       function parse_plugin($pluginName) {\r
+               global $manager;\r
+\r
+               // should be already tested from the parser (PARSER.php)\r
+               // only continue when the plugin is really installed\r
+               /*if (!$manager->pluginInstalled('NP_' . $pluginName))\r
+                       return;*/\r
+\r
+               $plugin =& $manager->getPlugin('NP_' . $pluginName);\r
+               if (!$plugin) return;\r
+\r
+               // get arguments\r
+               $params = func_get_args();\r
+\r
+               // remove plugin name\r
+               array_shift($params);\r
+\r
+               // add item reference (array_unshift didn't work)\r
+               $params = array_merge(array(&$this->currentItem),$params);\r
+\r
+               call_user_func_array(array(&$plugin,'doTemplateVar'), $params);\r
+       }\r
+\r
+       /**\r
+         * Parse templatevar edit\r
+         */\r
+       function parse_edit() {\r
+               global $member, $CONF;\r
+               if ($this->allowEditAll || ($member->isLoggedIn() && ($member->getID() == $this->currentItem->authorid)) ) {\r
+                       $this->parser->parse($this->template['EDITLINK']);\r
+               }\r
+       }\r
+\r
+       /**\r
+         * Parse templatevar editlink\r
+         */\r
+       function parse_editlink() {\r
+               global $CONF;\r
+               echo $CONF['AdminURL'],'bookmarklet.php?action=edit&amp;itemid=',$this->currentItem->itemid;\r
+       }\r
+\r
+       /**\r
+         * Parse templatevar editpopupcode\r
+         */\r
+       function parse_editpopupcode() {\r
+               echo "if (event &amp;&amp; event.preventDefault) event.preventDefault();winbm=window.open(this.href,'nucleusbm','scrollbars=no,width=710,height=550,left=10,top=10,status=no,resizable=yes');winbm.focus();return false;";\r
+       }\r
+\r
+       // helper functions\r
+\r
+       /**\r
+        * Parses highlighted text, with limited actions only (to prevent not fully trusted team members\r
+        * from hacking your weblog.\r
+        * 'plugin variables in items' implementation by Andy\r
+        */\r
+       function highlightAndParse(&$data) {\r
+               $actions =& new BODYACTIONS($this->blog);\r
+               $parser =& new PARSER($actions->getDefinedActions(), $actions);\r
+               $actions->setTemplate($this->template);\r
+               $actions->setHighlight($this->strHighlight);\r
+               $actions->setCurrentItem($this->currentItem);\r
+               //$actions->setParser($parser);\r
+               $parser->parse($actions->highlight($data));\r
+       }\r
+\r
+       /*\r
+       // this is the function previous to the 'plugin variables in items' implementation by Andy\r
+       function highlightAndParse(&$data) {\r
+               // allow only a limited subset of actions (do not allow includes etc, they might be evil)\r
+               $this->parser->actions = array('image','media','popup');\r
+               $tmp_highlight = $this->highlight($data);\r
+               $this->parser->parse($tmp_highlight);\r
+               $this->parser->actions = $this->getDefinedActions();\r
+       }\r
+       */\r
+\r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/KARMA.php b/utf8/nucleus/libs/KARMA.php
new file mode 100755 (executable)
index 0000000..c1139ef
--- /dev/null
@@ -0,0 +1,118 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * Class representing the karma votes for a certain item
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: KARMA.php,v 1.5 2006/07/17 20:03:44 kimitake Exp $
+ */
+class KARMA {
+
+       // id of item about which this object contains information
+       var $itemid;
+
+       // indicates if the karma vote info has already been intialized from the DB
+       var $inforead;
+
+       // amount of positive/negative votes
+       var $karmapos;
+       var $karmaneg;
+
+       function KARMA($itemid, $initpos = 0, $initneg = 0, $initread = 0) {
+               // itemid
+               $this->itemid = intval($itemid);
+
+               // have we read the karma info yet?
+               $this->inforead = intval($initread);
+
+               // number of positive and negative votes
+               $this->karmapos = intval($initpos);
+               $this->karmaneg = intval($initneg);
+       }
+
+       function getNbPosVotes() {
+               if (!$this->inforead) $this->readFromDatabase();
+               return $this->karmapos;
+       }
+       function getNbNegVotes() {
+               if (!$this->inforead) $this->readFromDatabase();
+               return $this->karmaneg;
+       }
+       function getNbOfVotes() {
+               if (!$this->inforead) $this->readFromDatabase();
+               return ($this->karmapos + $this->karmaneg);
+       }
+       function getTotalScore() {
+               if (!$this->inforead) $this->readFromDatabase();
+               return ($this->karmapos - $this->karmaneg);
+       }
+
+       function setNbPosVotes($val) {
+               $this->karmapos = intval($val);
+       }
+       function setNbNegVotes($val) {
+               $this->karmaneg = intval($val);
+       }
+
+
+       // adds a positive vote
+       function votePositive() {
+               $newKarma = $this->getNbPosVotes() + 1;
+               $this->setNbPosVotes($newKarma);
+               $this->writeToDatabase();
+               $this->saveIP();
+       }
+
+       // adds a negative vote
+       function voteNegative() {
+               $newKarma = $this->getNbNegVotes() + 1;
+               $this->setNbNegVotes($newKarma);
+               $this->writeToDatabase();
+               $this->saveIP();
+       }
+
+
+
+       // these methods shouldn't be called directly
+       function readFromDatabase() {
+               $query = 'SELECT ikarmapos, ikarmaneg FROM '.sql_table('item').' WHERE inumber=' . $this->itemid;
+               $res = sql_query($query);
+               $obj = sql_fetch_object($res);
+
+               $this->karmapos = $obj->ikarmapos;
+               $this->karmaneg = $obj->ikarmaneg;
+               $this->inforead = 1;
+       }
+
+
+       function writeToDatabase() {
+               $query = 'UPDATE '.sql_table('item').' SET ikarmapos=' . $this->karmapos . ', ikarmaneg='.$this->karmaneg.' WHERE inumber=' . $this->itemid;
+               sql_query($query);
+       }
+
+       // checks if a vote is still allowed for an IP
+       function isVoteAllowed($ip) {
+               $query = 'SELECT * FROM '.sql_table('karma')." WHERE itemid=$this->itemid and ip='".addslashes($ip)."'";
+               $res = sql_query($query);
+               return (sql_num_rows($res) == 0);
+       }
+
+       // save IP in database so no multiple votes are possible
+       function saveIP() {
+               $query = 'INSERT INTO '.sql_table('karma').' (itemid, ip) VALUES ('.$this->itemid.",'".addslashes(serverVar('REMOTE_ADDR'))."')";
+               sql_query($query);
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/MANAGER.php b/utf8/nucleus/libs/MANAGER.php
new file mode 100755 (executable)
index 0000000..06826c7
--- /dev/null
@@ -0,0 +1,579 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * This class makes sure each item/weblog/comment object gets requested from
+ * the database only once, by keeping them in a cache. The class also acts as
+ * a dynamic classloader, loading classes _only_ when they are first needed,
+ * hoping to diminish execution time
+ *
+ * The class is a singleton, meaning that there will be only one object of it
+ * active at all times. The object can be requested using MANAGER::instance()
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: MANAGER.php,v 1.8.2.1 2007/09/05 07:00:18 kimitake Exp $
+ */
+class MANAGER {
+
+    /**
+     * Cached ITEM, BLOG, PLUGIN, KARMA and MEMBER objects. When these objects are requested
+     * through the global $manager object (getItem, getBlog, ...), only the first call
+     * will create an object. Subsequent calls will return the same object.
+     *
+     * The $items, $blogs, ... arrays map an id to an object (for plugins, the name is used
+     * rather than an ID)
+     */
+    var $items;
+    var $blogs;
+    var $plugins;
+    var $karma;
+    var $templates;
+    var $members;
+
+    /**
+     * cachedInfo to avoid repeated SQL queries (see pidInstalled/pluginInstalled/getPidFromName)
+     * e.g. which plugins exists?
+     *
+     * $cachedInfo['installedPlugins'] = array($pid -> $name)
+     */
+    var $cachedInfo;
+
+    /**
+      * The plugin subscriptionlist
+      *
+      * The subcription array has the following structure
+      *     $subscriptions[$EventName] = array containing names of plugin classes to be
+      *                                  notified when that event happens
+      */
+    var $subscriptions;
+
+    /**
+      * Returns the only instance of this class. Creates the instance if it
+      * does not yet exists. Users should use this function as
+      * $manager =& MANAGER::instance(); to get a reference to the object
+      * instead of a copy
+      */
+    function &instance() {
+        static $instance = array();
+        if (empty($instance)) {
+            $instance[0] =& new MANAGER();
+        }
+        return $instance[0];
+    }
+
+    /**
+      * The constructor of this class initializes the object caches
+      */
+    function MANAGER() {
+        $this->items = array();
+        $this->blogs = array();
+        $this->plugins = array();
+        $this->karma = array();
+        $this->parserPrefs = array();
+        $this->cachedInfo = array();
+    }
+
+    /**
+      * Returns the requested item object. If it is not in the cache, it will
+      * first be loaded and then placed in the cache.
+      * Intended use: $item =& $manager->getItem(1234)
+      */
+    function &getItem($itemid, $allowdraft, $allowfuture) {
+        $item =& $this->items[$itemid];
+
+        // check the draft and future rules if the item was already cached
+        if ($item) {
+            if ((!$allowdraft) && ($item['draft']))
+                return 0;
+
+            $blog =& $this->getBlog(getBlogIDFromItemID($itemid));
+            if ((!$allowfuture) && ($item['timestamp'] > $blog->getCorrectTime()))
+                return 0;
+        }
+        if (!$item) {
+            // load class if needed
+            $this->loadClass('ITEM');
+            // load item object
+            $item = ITEM::getitem($itemid, $allowdraft, $allowfuture);
+            $this->items[$itemid] = $item;
+        }
+        return $item;
+    }
+
+    /**
+      * Loads a class if it has not yet been loaded
+      */
+    function loadClass($name) {
+        $this->_loadClass($name, $name . '.php');
+    }
+
+    /**
+      * Checks if an item exists
+      */
+    function existsItem($id,$future,$draft) {
+        $this->_loadClass('ITEM','ITEM.php');
+        return ITEM::exists($id,$future,$draft);
+    }
+
+    /**
+      * Checks if a category exists
+      */
+    function existsCategory($id) {
+        return (quickQuery('SELECT COUNT(*) as result FROM '.sql_table('category').' WHERE catid='.intval($id)) > 0);
+    }
+
+    /**
+      * Returns the blog object for a given blogid
+      */
+    function &getBlog($blogid) {
+        $blog =& $this->blogs[$blogid];
+
+        if (!$blog) {
+            // load class if needed
+            $this->_loadClass('BLOG','BLOG.php');
+            // load blog object
+            $blog =& new BLOG($blogid);
+            $this->blogs[$blogid] =& $blog;
+        }
+        return $blog;
+    }
+
+    /**
+      * Checks if a blog exists
+      */
+    function existsBlog($name) {
+        $this->_loadClass('BLOG','BLOG.php');
+        return BLOG::exists($name);
+    }
+
+    /**
+      * Checks if a blog id exists
+      */
+    function existsBlogID($id) {
+        $this->_loadClass('BLOG','BLOG.php');
+        return BLOG::existsID($id);
+    }
+
+    /**
+     * Returns a previously read template
+     */
+    function &getTemplate($templateName) {
+        $template =& $this->templates[$templateName];
+
+        if (!$template) {
+            $template = TEMPLATE::read($templateName);
+            $this->templates[$templateName] =& $template;
+        }
+        return $template;
+    }
+
+    /**
+     * Returns a KARMA object (karma votes)
+     */
+    function &getKarma($itemid) {
+        $karma =& $this->karma[$itemid];
+
+        if (!$karma) {
+            // load class if needed
+            $this->_loadClass('KARMA','KARMA.php');
+            // create KARMA object
+            $karma =& new KARMA($itemid);
+            $this->karma[$itemid] =& $karma;
+        }
+        return $karma;
+    }
+
+    /**
+     * Returns a MEMBER object
+     */
+    function &getMember($memberid) {
+        $mem =& $this->members[$memberid];
+
+        if (!$mem) {
+            // load class if needed
+            $this->_loadClass('MEMBER','MEMBER.php');
+            // create MEMBER object
+            $mem =& MEMBER::createFromID($memberid);
+            $this->members[$memberid] =& $mem;
+        }
+        return $mem;
+    }
+
+    /**
+     * Set the global parser preferences
+     */
+    function setParserProperty($name, $value) {
+        $this->parserPrefs[$name] = $value;
+    }
+
+    /**
+     * Get the global parser preferences
+     */
+    function getParserProperty($name) {
+        return $this->parserPrefs[$name];
+    }
+
+    /**
+      * A helper function to load a class
+      * 
+      * private
+      */
+    function _loadClass($name, $filename) {
+        if (!class_exists($name)) {
+                global $DIR_LIBS;
+                include($DIR_LIBS . $filename);
+        }
+    }
+
+    /**
+      * A helper function to load a plugin
+      * 
+      * private
+      */
+    function _loadPlugin($name) {
+        if (!class_exists($name)) {
+                global $DIR_PLUGINS;
+
+                $fileName = $DIR_PLUGINS . $name . '.php';
+
+                if (!file_exists($fileName))
+                {
+                    if (!defined('_MANAGER_PLUGINFILE_NOTFOUND')) {
+                        define('_MANAGER_PLUGINFILE_NOTFOUND', 'Plugin %s was not loaded (File not found)');
+                    }
+                    ACTIONLOG::add(WARNING, sprintf(_MANAGER_PLUGINFILE_NOTFOUND, $name));
+                    return 0;
+                }
+
+                // load plugin
+                include($fileName);
+
+                // check if class exists (avoid errors in eval'd code)
+                if (!class_exists($name))
+                {
+                    if (!defined('_MANAGER_PLUGINFILE_NOCLASS')) {
+                        define('_MANAGER_PLUGINFILE_NOCLASS', "Plugin %s was not loaded (Class not found in file, possible parse error)");
+                    }
+                    ACTIONLOG::add(WARNING, sprintf(_MANAGER_PLUGINFILE_NOCLASS, $name));
+                    return 0;
+                }
+
+                // add to plugin array
+                eval('$this->plugins[$name] =& new ' . $name . '();');
+
+                // get plugid
+                $this->plugins[$name]->plugid = $this->getPidFromName($name);
+
+                // unload plugin if a prefix is used and the plugin cannot handle this^
+                global $MYSQL_PREFIX;
+                if (($MYSQL_PREFIX != '') && !$this->plugins[$name]->supportsFeature('SqlTablePrefix'))
+                {
+                    unset($this->plugins[$name]);
+                    ACTIONLOG::add(WARNING, sprintf(_MANAGER_PLUGINTABLEPREFIX_NOTSUPPORT, $name));
+                    return 0;
+                }
+
+                // unload plugin if using non-mysql handler and plugin does not support it 
+                global $MYSQL_HANDLER;
+                if ((!in_array('mysql',$MYSQL_HANDLER)) && !$this->plugins[$name]->supportsFeature('SqlApi'))
+                {
+                    unset($this->plugins[$name]);
+                    ACTIONLOG::add(WARNING, sprintf(_MANAGER_PLUGINSQLAPI_NOTSUPPORT, $name));
+                    return 0;
+                }
+
+                // call init method
+                $this->plugins[$name]->init();
+
+        }
+    }
+
+    /**
+     * Returns a PLUGIN object
+     */
+    function &getPlugin($name) {
+        // retrieve the name of the plugin in the right capitalisation
+        $name = $this->getUpperCaseName ($name);
+        // get the plugin   
+        $plugin =& $this->plugins[$name];
+
+        if (!$plugin) {
+            // load class if needed
+            $this->_loadPlugin($name);
+            $plugin =& $this->plugins[$name];
+        }
+        return $plugin;
+    }
+
+    /**
+      * Checks if the given plugin IS loaded or not
+      */
+    function &pluginLoaded($name) {
+        $plugin =& $this->plugins[$name];
+        return $plugin;
+    }
+
+    function &pidLoaded($pid) {
+        $plugin=false;
+        reset($this->plugins);
+        while (list($name) = each($this->plugins)) {
+            if ($pid!=$this->plugins[$name]->getId()) continue;
+            $plugin= & $this->plugins[$name];
+            break;
+        }
+        return $plugin;
+    }
+
+    /**
+      * checks if the given plugin IS installed or not
+      */
+    function pluginInstalled($name) {
+        $this->_initCacheInfo('installedPlugins');
+        return ($this->getPidFromName($name) != -1);
+    }
+
+    function pidInstalled($pid) {
+        $this->_initCacheInfo('installedPlugins');
+        return ($this->cachedInfo['installedPlugins'][$pid] != '');
+    }
+
+    function getPidFromName($name) {
+        $this->_initCacheInfo('installedPlugins');
+        foreach ($this->cachedInfo['installedPlugins'] as $pid => $pfile)
+        {
+            if (strtolower($pfile) == strtolower($name))
+                return $pid;
+        }
+        return -1;
+    }
+
+    /**
+      * Retrieve the name of a plugin in the right capitalisation
+      */
+    function getUpperCaseName ($name) {
+        $this->_initCacheInfo('installedPlugins');
+        foreach ($this->cachedInfo['installedPlugins'] as $pid => $pfile)
+        {
+            if (strtolower($pfile) == strtolower($name))
+                return $pfile;
+        }
+        return -1;
+    }
+
+    function clearCachedInfo($what) {
+        unset($this->cachedInfo[$what]);
+    }
+
+    /**
+     * Loads some info on the first call only
+     */
+    function _initCacheInfo($what)
+    {
+        if (isset($this->cachedInfo[$what]) && is_array($this->cachedInfo[$what]))
+            return;
+        switch ($what)
+        {
+            // 'installedPlugins' = array ($pid => $name)
+            case 'installedPlugins':
+                $this->cachedInfo['installedPlugins'] = array();
+                $res = sql_query('SELECT pid, pfile FROM ' . sql_table('plugin'));
+                while ($o = sql_fetch_object($res))
+                {
+                    $this->cachedInfo['installedPlugins'][$o->pid] = $o->pfile;
+                }
+                break;
+        }
+    }
+
+    /**
+      * A function to notify plugins that something has happened. Only the plugins
+      * that are subscribed to the event will get notified.
+      * Upon the first call, the list of subscriptions will be fetched from the
+      * database. The plugins itsself will only get loaded when they are first needed
+      *
+      * @param $eventName
+      *     Name of the event (method to be called on plugins)
+      * @param $data
+      *     Can contain any type of data, depending on the event type. Usually this is
+      *     an itemid, blogid, ... but it can also be an array containing multiple values
+      */
+    function notify($eventName, $data) {
+        // load subscription list if needed
+        if (!is_array($this->subscriptions))
+            $this->_loadSubscriptions();
+
+
+        // get listening objects
+        $listeners = false;
+        if (isset($this->subscriptions[$eventName])) {
+            $listeners = $this->subscriptions[$eventName];
+        }
+
+        // notify all of them
+        if (is_array($listeners)) {
+            foreach($listeners as $listener) {
+                // load class if needed
+                $this->_loadPlugin($listener);
+                // do notify (if method exists)
+                if (isset($this->plugins[$listener]) && method_exists($this->plugins[$listener], 'event_' . $eventName))
+                    call_user_func(array(&$this->plugins[$listener],'event_' . $eventName), &$data);
+            }
+        }
+
+    }
+
+    /**
+      * Loads plugin subscriptions
+      */
+    function _loadSubscriptions() {
+        // initialize as array
+        $this->subscriptions = array();
+
+        $res = sql_query('SELECT p.pfile as pfile, e.event as event FROM '.sql_table('plugin_event').' as e, '.sql_table('plugin').' as p WHERE e.pid=p.pid ORDER BY p.porder ASC');
+        while ($o = sql_fetch_object($res)) {
+            $pluginName = $o->pfile;
+            $eventName = $o->event;
+            $this->subscriptions[$eventName][] = $pluginName;
+        }
+
+    }
+
+    /*
+        Ticket functions. These are uses by the admin area to make it impossible to simulate certain GET/POST
+        requests. tickets are user specific
+    */
+
+    var $currentRequestTicket = '';
+
+    /**
+     * GET requests: Adds ticket to URL (URL should NOT be html-encoded!, ticket is added at the end)
+     */
+    function addTicketToUrl($url)
+    {
+        $ticketCode = 'ticket=' . $this->_generateTicket();
+        if (strstr($url, '?'))
+            return $url . '&' . $ticketCode;
+        else
+            return $url . '?' . $ticketCode;
+    }
+
+    /**
+     * POST requests: Adds ticket as hidden formvar
+     */
+    function addTicketHidden()
+    {
+        $ticket = $this->_generateTicket();
+
+        echo '<input type="hidden" name="ticket" value="', htmlspecialchars($ticket), '" />';
+    }
+
+    /**
+     * Get a new ticket
+     * (xmlHTTPRequest AutoSaveDraft uses this to refresh the ticket)
+     */
+    function getNewTicket()
+    {
+        $this->currentRequestTicket = '';
+        return $this->_generateTicket();
+    }
+
+    /**
+     * Checks the ticket that was passed along with the current request
+     */
+    function checkTicket()
+    {
+        global $member;
+
+        // get ticket from request
+        $ticket = requestVar('ticket');
+
+        // no ticket -> don't allow
+        if ($ticket == '')
+            return false;
+
+        // remove expired tickets first
+        $this->_cleanUpExpiredTickets();
+
+        // get member id
+        if (!$member->isLoggedIn())
+            $memberId = -1;
+        else
+            $memberId = $member->getID();
+
+        // check if ticket is a valid one
+        $query = 'SELECT COUNT(*) as result FROM ' . sql_table('tickets') . ' WHERE member=' . intval($memberId). ' and ticket=\''.addslashes($ticket).'\'';
+        if (quickQuery($query) == 1)
+        {
+            // [in the original implementation, the checked ticket was deleted. This would lead to invalid
+            //  tickets when using the browsers back button and clicking another link/form
+            //  leaving the keys in the database is not a real problem, since they're member-specific and
+            //  only valid for a period of one hour
+            // ]
+            // sql_query('DELETE FROM '.sql_table('tickets').' WHERE member=' . intval($memberId). ' and ticket=\''.addslashes($ticket).'\'');
+            return true;
+        } else {
+            // not a valid ticket
+            return false;
+        }
+
+    }
+
+    /**
+     * (internal method) Removes the expired tickets
+     */
+    function _cleanUpExpiredTickets()
+    {
+        // remove tickets older than 1 hour
+        $oldTime = time() - 60 * 60;
+        $query = 'DELETE FROM ' . sql_table('tickets'). ' WHERE ctime < \'' . date('Y-m-d H:i:s',$oldTime) .'\'';
+        sql_query($query);
+    }
+
+    /**
+     * (internal method) Generates/returns a ticket (one ticket per page request)
+     */
+    function _generateTicket()
+    {
+        if ($this->currentRequestTicket == '')
+        {
+            // generate new ticket (only one ticket will be generated per page request)
+            // and store in database
+            global $member;
+            // get member id
+            if (!$member->isLoggedIn())
+                $memberId = -1;
+            else
+                $memberId = $member->getID();
+
+            $ok = false;
+            while (!$ok)
+            {
+                // generate a random token
+                srand((double)microtime()*1000000);
+                $ticket = md5(uniqid(rand(), true));
+
+                // add in database as non-active
+                $query = 'INSERT INTO ' . sql_table('tickets') . ' (ticket, member, ctime) ';
+                $query .= 'VALUES (\'' . addslashes($ticket). '\', \'' . intval($memberId). '\', \'' . date('Y-m-d H:i:s',time()) . '\')';
+                if (sql_query($query))
+                    $ok = true;
+            }
+
+            $this->currentRequestTicket = $ticket;
+        }
+        return $this->currentRequestTicket;
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/MEDIA.php b/utf8/nucleus/libs/MEDIA.php
new file mode 100755 (executable)
index 0000000..b61a537
--- /dev/null
@@ -0,0 +1,290 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * Media classes for nucleus
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: MEDIA.php,v 1.5 2006/07/17 20:03:44 kimitake Exp $
+ */
+
+define('PRIVATE_COLLECTION', 'Private Collection');
+define('READ_ONLY_MEDIA_FOLDER', '(Read Only)');
+
+/**
+  * Represents the media objects for a certain member
+  */
+class MEDIA {
+
+       /**
+         * Gets the list of collections available to the currently logged
+         * in member
+         *
+         * @returns array of dirname => display name
+         */
+       function getCollectionList($exceptReadOnly = false) {
+               global $member, $DIR_MEDIA;
+
+               $collections = array();
+
+               // add private directory for member
+               $collections[$member->getID()] = PRIVATE_COLLECTION;
+               
+               // add global collections
+               if (!is_dir($DIR_MEDIA)) return $collections;
+
+               $dirhandle = opendir($DIR_MEDIA);
+               while ($dirname = readdir($dirhandle)) {
+                       // only add non-numeric (numeric=private) dirs
+                       if (@is_dir($DIR_MEDIA . $dirname) &&
+                               ($dirname != '.') &&
+                               ($dirname != '..') &&
+                               ($dirname != 'CVS') &&
+                               (!is_numeric($dirname)))  {
+                               if (@is_writable($DIR_MEDIA . $dirname))
+                                       $collections[$dirname] = $dirname;
+                               else if ($exceptReadOnly == false)
+                                       $collections[$dirname] = $dirname . ' ' . READ_ONLY_MEDIA_FOLDER;
+                       }
+               }
+               closedir($dirhandle);
+
+               return $collections;
+
+       }
+
+       /**
+         * Returns an array of MEDIAOBJECT objects for a certain collection
+         *
+         * @param $collection
+         *             name of the collection
+         * @param $filter
+         *             filter on filename (defaults to none)
+         */
+       function getMediaListByCollection($collection, $filter = '') {
+               global $DIR_MEDIA;
+
+               $filelist = array();
+
+               // 1. go through all objects and add them to the filelist
+
+               $mediadir = $DIR_MEDIA . $collection . '/';
+
+               // return if dir does not exist
+               if (!is_dir($mediadir)) return $filelist;
+
+               $dirhandle = opendir($mediadir);
+               while ($filename = readdir($dirhandle)) {
+                       // only add files that match the filter
+                       if (!@is_dir($filename) && MEDIA::checkFilter($filename, $filter))
+                               array_push($filelist, new MEDIAOBJECT($collection, $filename, filemtime($mediadir . $filename)));
+               }
+               closedir($dirhandle);
+
+               // sort array so newer files are shown first
+               usort($filelist, 'sort_media');
+
+               return $filelist;
+       }
+
+       function checkFilter($strText, $strFilter) {
+               if ($strFilter == '')
+                       return 1;
+               else
+                       return is_integer(strpos(strtolower($strText), strtolower($strFilter)));
+       }
+
+       /**
+         * checks if a collection exists with the given name, and if it's
+         * allowed for the currently logged in member to upload files to it
+         */
+       function isValidCollection($collectionName, $exceptReadOnly = false) {
+               global $member, $DIR_MEDIA;
+
+               // allow creating new private directory
+               if ($collectionName === (string)$member->getID())
+                       return true;
+                       
+               $collections = MEDIA::getCollectionList($exceptReadOnly);
+               $dirname = $collections[$collectionName];
+               if ($dirname == NULL || $dirname === PRIVATE_COLLECTION)
+                       return false;  
+
+               // other collections should exist and be writable
+               $collectionDir = $DIR_MEDIA . $collectionName;
+               if ($exceptReadOnly)
+                       return (@is_dir($collectionDir) && @is_writable($collectionDir));
+
+               // other collections should exist
+               return @is_dir($collectionDir);
+       }
+
+       /**
+         * Adds an uploaded file to the media archive
+         *
+         * @param collection
+         *             collection
+         * @param uploadfile
+         *             the postFileInfo(..) array
+         * @param filename
+         *             the filename that should be used to save the file as
+         *             (date prefix should be already added here)
+         */
+       function addMediaObject($collection, $uploadfile, $filename) {
+               global $DIR_MEDIA, $manager;
+
+               $manager->notify('PreMediaUpload',array('collection' => &$collection, 'uploadfile' => $uploadfile, 'filename' => &$filename));
+
+               // don't allow uploads to unknown or forbidden collections
+               $exceptReadOnly = true;
+               if (!MEDIA::isValidCollection($collection,$exceptReadOnly))
+                       return _ERROR_DISALLOWED;
+
+               // check dir permissions (try to create dir if it does not exist)
+               $mediadir = $DIR_MEDIA . $collection;
+
+               // try to create new private media directories if needed
+               if (!@is_dir($mediadir) && is_numeric($collection)) {
+                       $oldumask = umask(0000);
+                       if (!@mkdir($mediadir, 0777))
+                               return _ERROR_BADPERMISSIONS;
+                       umask($oldumask);
+               }
+
+               // if dir still not exists, the action is disallowed
+               if (!@is_dir($mediadir))
+                       return _ERROR_DISALLOWED;
+
+               if (!is_writeable($mediadir))
+                       return _ERROR_BADPERMISSIONS;
+
+               // add trailing slash (don't add it earlier since it causes mkdir to fail on some systems)
+               $mediadir .= '/';
+
+               if (file_exists($mediadir . $filename))
+                       return _ERROR_UPLOADDUPLICATE;
+
+               // move file to directory
+               if (is_uploaded_file($uploadfile)) {
+                       if (!@move_uploaded_file($uploadfile, $mediadir . $filename))
+                               return _ERROR_UPLOADMOVEP;
+               } else {
+                       if (!copy($uploadfile, $mediadir . $filename))
+                               return _ERROR_UPLOADCOPY ;
+               }
+
+               // chmod uploaded file
+               $oldumask = umask(0000);
+               @chmod($mediadir . $filename, 0644);
+               umask($oldumask);
+
+               $manager->notify('PostMediaUpload',array('collection' => $collection, 'mediadir' => $mediadir, 'filename' => $filename));
+
+               return '';
+
+       }
+
+       /**
+        * Adds an uploaded file to the media dir.
+        *
+        * @param $collection
+        *              collection to use
+        * @param $filename
+        *              the filename that should be used to save the file as
+        *              (date prefix should be already added here)
+        * @param &$data
+        *              File data (binary)
+        *
+        * NOTE: does not check if $collection is valid.
+        */
+       function addMediaObjectRaw($collection, $filename, &$data) {
+               global $DIR_MEDIA;
+
+               // check dir permissions (try to create dir if it does not exist)
+               $mediadir = $DIR_MEDIA . $collection;
+
+               // try to create new private media directories if needed
+               if (!@is_dir($mediadir) && is_numeric($collection)) {
+                       $oldumask = umask(0000);
+                       if (!@mkdir($mediadir, 0777))
+                               return _ERROR_BADPERMISSIONS;
+                       umask($oldumask);
+               }
+
+               // if dir still not exists, the action is disallowed
+               if (!@is_dir($mediadir))
+                       return _ERROR_DISALLOWED;
+
+               if (!is_writeable($mediadir))
+                       return _ERROR_BADPERMISSIONS;
+
+               // add trailing slash (don't add it earlier since it causes mkdir to fail on some systems)
+               $mediadir .= '/';
+
+               if (file_exists($mediadir . $filename))
+                       return _ERROR_UPLOADDUPLICATE;
+
+               // create file
+               $fh = @fopen($mediadir . $filename, 'wb');
+               if (!$fh)
+                       return _ERROR_UPLOADFAILED;
+               $ok = @fwrite($fh, $data);
+               @fclose($fh);
+               if (!$ok)
+                       return _ERROR_UPLOADFAILED;
+
+               // chmod uploaded file
+               $oldumask = umask(0000);
+               @chmod($mediadir . $filename, 0644);
+               umask($oldumask);
+
+               return '';
+
+       }
+
+}
+
+/**
+  * Represents the characteristics of one single media-object
+  *
+  * Description of properties:
+  *  - filename: filename, without paths
+  *  - timestamp: last modification (unix timestamp)
+  *  - collection: collection to which the file belongs (can also be a owner ID, for private collections)
+  *  - private: true if the media belongs to a private member collection
+  */
+class MEDIAOBJECT {
+
+       var $private;
+       var $collection;
+       var $filename;
+       var $timestamp;
+
+       function MEDIAOBJECT($collection, $filename, $timestamp) {
+               $this->private = is_numeric($collection);
+               $this->collection = $collection;
+               $this->filename = $filename;
+               $this->timestamp = $timestamp;
+       }
+
+}
+
+/**
+  * User-defined sort method to sort an array of MEDIAOBJECTS
+  */
+function sort_media($a, $b) {
+       if ($a->timestamp == $b->timestamp) return 0;
+       return ($a->timestamp > $b->timestamp) ? -1 : 1;
+}
+
+?>
diff --git a/utf8/nucleus/libs/MEMBER.php b/utf8/nucleus/libs/MEMBER.php
new file mode 100755 (executable)
index 0000000..b6296a0
--- /dev/null
@@ -0,0 +1,810 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * A class representing site members
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: MEMBER.php,v 1.6 2006/07/17 20:03:44 kimitake Exp $
+ */
+class MEMBER {
+
+       // 1 when authenticated, 0 when not
+       var $loggedin = 0;
+       var $password;          // not the actual password, but rather a MD5 hash
+
+       var $cookiekey;         // value that should also be in the client cookie to allow authentication
+
+       // member info
+       var $id = -1;
+       var $realname;
+       var $displayname;
+       var $email;
+       var $url;
+       var $language = '';             // name of the language file to use (e.g. 'english' -> english.php)
+       var $admin = 0;                 // (either 0 or 1)
+       var $canlogin = 0;              // (either 0 or 1)
+       var $notes;
+       var $autosave = 1;              // if the member use the autosave draft function
+
+       /**
+        * Constructor for a member object
+        */
+       function MEMBER() {
+               // do nothing
+       }
+
+       /**
+        * Create a member object for a given displayname
+        *
+        * @static
+        */
+       function &createFromName($displayname) {
+               $mem =& new MEMBER();
+               $mem->readFromName($displayname);
+               return $mem;
+       }
+
+       /**
+        * Create a member object for a given ID
+        *
+        * @static
+        */
+       function &createFromID($id) {
+               $mem =& new MEMBER();
+               $mem->readFromID($id);
+               return $mem;
+       }
+
+       function readFromName($displayname) {
+               return $this->read("mname='".addslashes($displayname)."'");
+       }
+
+       function readFromID($id) {
+               return $this->read("mnumber=" . intval($id));
+       }
+
+       /**
+         * Tries to login as a given user.
+         * Returns true when succeeded, returns false when failed
+         * 3.40 adds CustomLogin event
+         */
+       function login($login, $password) {
+               global $manager;
+               $this->loggedin = 0;
+               $success = 0;
+               $allowlocal = 1;
+               $manager->notify('CustomLogin', array('login' => &$login, 'password'=>&$password, 'success'=>&$success, 'allowlocal'=>&$allowlocal) );
+               if ($success && $this->readFromName($login)) {
+                       $this->loggedin = 1;
+                       return $this->isLoggedIn();
+               } elseif (!$success && $allowlocal) {
+                       if (!$this->readFromName($login))
+                               return 0;
+                       if (!$this->checkPassword($password))
+                               return 0;
+                       $this->loggedin = 1;
+                       return $this->isLoggedIn();
+               } else {
+                       return 0;
+               }
+       }
+
+       /**
+        * Login using cookie key
+        */
+       function cookielogin($login, $cookiekey) {
+               $this->loggedin = 0;
+               if (!$this->readFromName($login))
+                       return 0;
+               if (!$this->checkCookieKey($cookiekey))
+                       return 0;
+               $this->loggedin = 1;
+               return $this->isLoggedIn();
+       }
+
+       function logout() {
+               $this->loggedin=0;
+       }
+
+       function isLoggedIn() {
+               return $this->loggedin;
+       }
+
+       /**
+        * Read member information from the database
+        */
+       function read($where) {
+               // read info
+               $query =  'SELECT * FROM '.sql_table('member') . ' WHERE ' . $where;
+
+               $res = sql_query($query);
+               $obj = sql_fetch_object($res);
+
+               $this->setRealName($obj->mrealname);
+               $this->setEmail($obj->memail);
+               $this->password = $obj->mpassword;
+               $this->setCookieKey($obj->mcookiekey);
+               $this->setURL($obj->murl);
+               $this->setDisplayName($obj->mname);
+               $this->setAdmin($obj->madmin);
+               $this->id = $obj->mnumber;
+               $this->setCanLogin($obj->mcanlogin);
+               $this->setNotes($obj->mnotes);
+               $this->setLanguage($obj->deflang);
+               $this->setAutosave($obj->mautosave);
+
+               return sql_num_rows($res);
+       }
+
+
+       /**
+         * Returns true if member is an admin for the given blog
+         * (returns false if not a team member)
+         */
+       function isBlogAdmin($blogid) {
+               $query = 'SELECT tadmin FROM '.sql_table('team').' WHERE'
+                          . ' tblog=' . intval($blogid)
+                          . ' and tmember='. $this->getID();
+               $res = sql_query($query);
+               if (sql_num_rows($res) == 0)
+                       return 0;
+               else
+                       return (sql_result($res,0,0) == 1) ;
+       }
+
+       function blogAdminRights($blogid) {
+               return ($this->isAdmin() || $this->isBlogAdmin($blogid));
+       }
+
+
+       function teamRights($blogid) {
+               return ($this->isAdmin() || $this->isTeamMember($blogid));
+       }
+
+       /**
+         * Returns true if this member is a team member of the given blog
+         */
+       function isTeamMember($blogid) {
+               $query = 'SELECT * FROM '.sql_table('team').' WHERE'
+                          . ' tblog=' . intval($blogid)
+                          . ' and tmember='. $this->getID();
+               $res = sql_query($query);
+               return (sql_num_rows($res) != 0);
+       }
+
+       function canAddItem($catid) {
+               global $manager;
+
+               // if this is a 'newcat' style newcat
+               // no blog admin of destination blog -> NOK
+               // blog admin of destination blog -> OK
+               if (strstr($catid,'newcat')) {
+                       // get blogid
+                       list($blogid) = sscanf($catid,"newcat-%d");
+                       return $this->blogAdminRights($blogid);
+               }
+
+               // category does not exist -> NOK
+               if (!$manager->existsCategory($catid)) return 0;
+
+               $blogid = getBlogIDFromCatID($catid);
+
+               // no team rights for blog -> NOK
+               if (!$this->teamRights($blogid)) return 0;
+
+               // all other cases: OK
+               return 1;
+       }
+
+       /**
+         * Returns true if this member can edit/delete a commentitem. This can be in the
+         * following cases:
+         *       - member is a super-admin
+         *   - member is the author of the comment
+         *   - member is admin of the blog associated with the comment
+         *   - member is author of the item associated with the comment
+         */
+       function canAlterComment($commentid) {
+               if ($this->isAdmin()) return 1;
+
+               $query =  'SELECT citem as itemid, iblog as blogid, cmember as cauthor, iauthor'
+                          . ' FROM '.sql_table('comment') .', '.sql_table('item').', '.sql_table('blog')
+                          . ' WHERE citem=inumber and iblog=bnumber and cnumber=' . intval($commentid);
+               $res = sql_query($query);
+               $obj = sql_fetch_object($res);
+
+               return ($obj->cauthor == $this->getID()) or $this->isBlogAdmin($obj->blogid) or ($obj->iauthor == $this->getID());
+       }
+
+       /**
+         * Returns true if this member can edit/delete an item. This is true in the following
+         * cases: - member is a super-admin
+         *            - member is the author of the item
+         *        - member is admin of the the associated blog
+         */
+       function canAlterItem($itemid) {
+               if ($this->isAdmin()) return 1;
+
+               $query =  'SELECT iblog, iauthor FROM '.sql_table('item').' WHERE inumber=' . intval($itemid);
+               $res = sql_query($query);
+               $obj = sql_fetch_object($res);
+               return ($obj->iauthor == $this->getID()) or $this->isBlogAdmin($obj->iblog);
+       }
+
+       /**
+         * Return true if member can be deleted. This means that there are no items
+         * posted by the member left
+         */
+       function canBeDeleted() {
+               $res = sql_query('SELECT * FROM '.sql_table('item').' WHERE iauthor=' . $this->getID());
+               return (sql_num_rows($res) == 0);
+       }
+
+       /**
+         * returns true if this member can move/update an item to a given category,
+         * false if not (see comments fot the tests that are executed)
+         *
+         * @param itemid
+         * @param newcat (can also be of form 'newcat-x' with x=blogid)
+         */
+       function canUpdateItem($itemid, $newcat) {
+               global $manager;
+
+               // item does not exists -> NOK
+               if (!$manager->existsItem($itemid,1,1)) return 0;
+
+               // cannot alter item -> NOK
+               if (!$this->canAlterItem($itemid)) return 0;
+
+               // if this is a 'newcat' style newcat
+               // no blog admin of destination blog -> NOK
+               // blog admin of destination blog -> OK
+               if (strstr($newcat,'newcat')) {
+                       // get blogid
+                       list($blogid) = sscanf($newcat,'newcat-%d');
+                       return $this->blogAdminRights($blogid);
+               }
+
+               // category does not exist -> NOK
+               if (!$manager->existsCategory($newcat)) return 0;
+
+
+               // get item
+               $item =& $manager->getItem($itemid,1,1);
+
+               // old catid = new catid -> OK
+               if ($item['catid'] == $newcat) return 1;
+
+               // not a valid category -> NOK
+               $validCat = quickQuery('SELECT COUNT(*) AS result FROM '.sql_table('category').' WHERE catid='.intval($newcat));
+               if (!$validCat) return 0;
+
+               // get destination blog
+               $source_blogid = getBlogIDFromItemID($itemid);
+               $dest_blogid = getBlogIDFromCatID($newcat);
+
+               // not a team member of destination blog -> NOK
+               if (!$this->teamRights($dest_blogid)) return 0;
+
+               // if member is author of item -> OK
+               if ($item['authorid'] == $this->getID()) return 1;
+
+               // if member has admin rights on both blogs: OK
+               if (($this->blogAdminRights($dest_blogid)) && ($this->blogAdminRights($source_blogid))) return 1;
+
+               // all other cases: NOK
+               return 0;
+
+       }
+
+       /**
+         * Sets the cookies for the member
+         *
+         * @param shared
+         *             set this to 1 when using a shared computer. Cookies will expire
+         *             at the end of the session in this case.
+         */
+       function setCookies($shared = 0) {
+               global $CONF;
+
+               if ($CONF['SessionCookie'] || $shared)
+                       $lifetime = 0;
+               else
+                       $lifetime = (time()+2592000);
+
+               setcookie($CONF['CookiePrefix'] .'user',$this->getDisplayName(),$lifetime,$CONF['CookiePath'],$CONF['CookieDomain'],$CONF['CookieSecure']);
+               setcookie($CONF['CookiePrefix'] .'loginkey', $this->getCookieKey(),$lifetime,$CONF['CookiePath'],$CONF['CookieDomain'],$CONF['CookieSecure']);
+
+               // make sure cookies on shared pcs don't get renewed
+               if ($shared)
+                       setcookie($CONF['CookiePrefix'] .'sharedpc', '1',$lifetime,$CONF['CookiePath'],$CONF['CookieDomain'],$CONF['CookieSecure']);
+       }
+
+       function sendActivationLink($type, $extra='')
+       {
+               global $CONF;
+
+               // generate key and URL
+               $key = $this->generateActivationEntry($type, $extra);
+               $url = $CONF['AdminURL'] . 'index.php?action=activate&key=' . $key;
+
+               // choose text to use in mail
+               switch ($type)
+               {
+                       case 'register':
+                               $message = _ACTIVATE_REGISTER_MAIL;
+                               $title = _ACTIVATE_REGISTER_MAILTITLE;
+                               break;
+                       case 'forgot':
+                               $message = _ACTIVATE_FORGOT_MAIL;
+                               $title = _ACTIVATE_FORGOT_MAILTITLE;
+                               break;
+                       case 'addresschange':
+                               $message = _ACTIVATE_CHANGE_MAIL;
+                               $title = _ACTIVATE_CHANGE_MAILTITLE;
+                               break;
+                       default;
+               }
+
+               // fill out variables in text
+
+               $aVars = array(
+                       'siteName' => $CONF['SiteName'],
+                       'siteUrl' => $CONF['IndexURL'],
+                       'memberName' => $this->getDisplayName(),
+                       'activationUrl' => $url
+               );
+
+               $message = TEMPLATE::fill($message, $aVars);
+               $title = TEMPLATE::fill($title, $aVars);
+
+               // send mail
+
+               mb_language('ja');
+               mb_internal_encoding(_CHARSET);
+               @mb_send_mail($this->getEmail(), $title ,$message,'From: ' . $CONF['AdminEmail']);
+
+               ACTIONLOG::add(INFO, _ACTIONLOG_ACTIVATIONLINK . ' (' . $this->getDisplayName() . ' / type: ' . $type . ')');
+
+
+       }
+
+       /**
+         * Returns an array of all blogids for which member has admin rights
+         */
+       function getAdminBlogs() {
+               $blogs = array();
+
+               if ($this->isAdmin())
+                       $query = 'SELECT bnumber as blogid from '.sql_table('blog');
+               else
+                       $query = 'SELECT tblog as blogid from '.sql_table('team').' where tadmin=1 and tmember=' . $this->getID();
+
+               $res = sql_query($query);
+               if (sql_num_rows($res) > 0) {
+                       while ($obj = sql_fetch_object($res)) {
+                               array_push($blogs, $obj->blogid);
+                       }
+               }
+
+               return $blogs;
+       }
+
+       /**
+         * Returns an array of all blogids for which member has team rights
+         */
+       function getTeamBlogs($incAdmin = 1) {
+               $incAdmin = intval($incAdmin);
+               $blogs = array();
+
+               if ($this->isAdmin() && $incAdmin)
+                       $query = 'SELECT bnumber as blogid from '.sql_table('blog');
+               else
+                       $query = 'SELECT tblog as blogid from '.sql_table('team').' where tmember=' . $this->getID();
+
+               $res = sql_query($query);
+               if (sql_num_rows($res) > 0) {
+                       while ($obj = sql_fetch_object($res)) {
+                               array_push($blogs, $obj->blogid);
+                       }
+               }
+
+               return $blogs;
+       }
+
+       /**
+         * Returns an email address from which notification of commenting/karma voting can
+         * be sent. A suggestion can be given for when the member is not logged in
+         */
+       function getNotifyFromMailAddress($suggest = "") {
+               global $CONF;
+               if ($this->isLoggedIn()) {
+                       return $this->getDisplayName() . " <" . $this->getEmail() . ">";
+               } else if (isValidMailAddress($suggest)) {
+                       return $suggest;
+               } else {
+                       return $CONF['AdminEmail'];
+               }
+       }
+
+       /**
+         * Write data to database
+         */
+       function write() {
+
+               $query =  'UPDATE '.sql_table('member')
+                          . " SET mname='" . addslashes($this->getDisplayName()) . "',"
+                          . "     mrealname='". addslashes($this->getRealName()) . "',"
+                          . "     mpassword='". addslashes($this->getPassword()) . "',"
+                          . "     mcookiekey='". addslashes($this->getCookieKey()) . "',"
+                          . "     murl='" . addslashes($this->getURL()) . "',"
+                          . "     memail='" . addslashes($this->getEmail()) . "',"
+                          . "     madmin=" . $this->isAdmin() . ","
+                          . "     mnotes='" . addslashes($this->getNotes()) . "',"
+                          . "     mcanlogin=" . $this->canLogin() . ","
+                          . "     deflang='" . addslashes($this->getLanguage()) . "',"
+                          . "     mautosave=" . intval($this->getAutosave()) . ""
+                          . " WHERE mnumber=" . $this->getID();
+               sql_query($query);
+       }
+
+       function checkCookieKey($key) {
+               return (($key != '') && ($key == $this->getCookieKey()));
+       }
+
+       function checkPassword($pw) {
+               return (md5($pw) == $this->getPassword());
+       }
+
+       function getRealName() {
+               return $this->realname;
+       }
+
+       function setRealName($name) {
+               $this->realname = $name;
+       }
+
+       function getEmail() {
+               return $this->email;
+       }
+
+       function setEmail($email) {
+               $this->email = $email;
+       }
+
+       function getPassword() {
+               return $this->password;
+       }
+
+       function setPassword($pwd) {
+               $this->password = md5($pwd);
+       }
+
+       function getCookieKey() {
+               return $this->cookiekey;
+       }
+
+       /**
+         * Generate new cookiekey, save it, and return it
+         */
+       function newCookieKey() {
+               mt_srand( (double) microtime() * 1000000);
+               $this->cookiekey = md5(uniqid(mt_rand()));
+               $this->write();
+               return $this->cookiekey;
+       }
+
+       function setCookieKey($val) {
+               $this->cookiekey = $val;
+       }
+
+       function getURL() {
+               return $this->url;
+       }
+
+       function setURL($site) {
+               $this->url = $site;
+       }
+
+       function getLanguage() {
+               return $this->language;
+       }
+
+       function setLanguage($lang) {
+               $this->language = $lang;
+       }
+
+       function setDisplayName($nick) {
+               $this->displayname = $nick;
+       }
+
+       function getDisplayName() {
+               return $this->displayname;
+       }
+
+       function isAdmin() {
+               return $this->admin;
+       }
+
+       function setAdmin($val) {
+               $this->admin = $val;
+       }
+
+       function canLogin() {
+               return $this->canlogin;
+       }
+
+       function setCanLogin($val) {
+               $this->canlogin = $val;
+       }
+
+       function getNotes() {
+               return $this->notes;
+       }
+
+       function setNotes($val) {
+               $this->notes = $val;
+       }
+
+       function getAutosave() {
+               return $this->autosave;
+       }
+
+       function setAutosave($val) {
+               $this->autosave = $val;
+       }
+
+       function getID() {
+               return $this->id;
+       }
+
+       /**
+        * Returns true if there is a member with the given login name
+        *
+        * @static
+        */
+       function exists($name) {
+               $r = sql_query('select * FROM '.sql_table('member')." WHERE mname='".addslashes($name)."'");
+               return (sql_num_rows($r) != 0);
+       }
+
+       /**
+        * Returns true if there is a member with the given ID
+        *
+        * @static
+        */
+       function existsID($id) {
+               $r = sql_query('select * FROM '.sql_table('member')." WHERE mnumber='".intval($id)."'");
+               return (sql_num_rows($r) != 0);
+       }
+
+       /**
+        *  Checks if a username is protected.
+        *  If so, it can not be used on anonymous comments
+        */
+       function isNameProtected($name) {
+
+               // extract name
+               $name = strip_tags($name);
+               $name = trim($name);
+
+               return MEMBER::exists($name);
+       }
+
+       /**
+        * Adds a new member
+        *
+        * @static
+        */
+       function create($name, $realname, $password, $email, $url, $admin, $canlogin, $notes) {
+               if (!isValidMailAddress($email))
+                       return _ERROR_BADMAILADDRESS;
+
+               if (!isValidDisplayName($name))
+                       return _ERROR_BADNAME;
+
+               if (MEMBER::exists($name))
+                       return _ERROR_NICKNAMEINUSE;
+
+               if (!$realname)
+                       return _ERROR_REALNAMEMISSING;
+
+               if (!$password)
+                       return _ERROR_PASSWORDMISSING;
+
+               // Sometimes user didn't prefix the URL with http://, this cause a malformed URL. Let's fix it.
+               if (!eregi("^https?://", $url))
+                       $url = "http://".$url;
+
+               $name = addslashes($name);
+               $realname = addslashes($realname);
+               $password = addslashes(md5($password));
+               $email = addslashes($email);
+               $url = addslashes($url);
+               $admin = intval($admin);
+               $canlogin = intval($canlogin);
+               $notes = addslashes($notes);
+
+               if (($admin) && !($canlogin)) {return _ERROR;}
+
+               $query = 'INSERT INTO '.sql_table('member')." (MNAME,MREALNAME,MPASSWORD,MEMAIL,MURL, MADMIN, MCANLOGIN, MNOTES) "
+                          . "VALUES ('$name','$realname','$password','$email','$url',$admin, $canlogin, '$notes')";
+               sql_query($query);
+
+               ACTIONLOG::add(INFO, _ACTIONLOG_NEWMEMBER . ' ' . $name);
+
+               return 1;
+       }
+
+       /**
+        * Returns activation info for a certain key (an object with properties vkey, vmember, ...)
+        * (static)
+        *
+        * @author karma
+        */
+       function getActivationInfo($key)
+       {
+               $query = 'SELECT * FROM ' . sql_table('activation') . ' WHERE vkey=\'' . addslashes($key). '\'';
+               $res = sql_query($query);
+
+               if (!$res || (sql_num_rows($res) == 0))
+                       return 0;
+               else
+                       return sql_fetch_object($res);
+       }
+
+       /**
+        * Creates an account activation key
+        *
+        * @param $type one of the following values (determines what to do when activation expires)
+        *                'register' (new member registration)
+        *                'forgot' (forgotton password)
+        *                'addresschange' (member address has changed)
+        * @param $extra extra info (needed when validation link expires)
+        *                                addresschange -> old email address
+        * @author dekarma
+        */
+       function generateActivationEntry($type, $extra = '')
+       {
+               // clean up old entries
+               $this->cleanupActivationTable();
+
+               // kill any existing entries for the current member (delete is ok)
+               // (only one outstanding activation key can be present for a member)
+               sql_query('DELETE FROM ' . sql_table('activation') . ' WHERE vmember=' . intval($this->getID()));
+
+               $canLoginWhileActive = false; // indicates if the member can log in while the link is active
+               switch ($type)
+               {
+                       case 'forgot':
+                               $canLoginWhileActive = true;
+                               break;
+                       case 'register':
+                               break;
+                       case 'addresschange':
+                               $extra = $extra . '/' . ($this->canLogin() ? '1' : '0');
+                               break;
+               }
+
+               $ok = false;
+               while (!$ok)
+               {
+                       // generate a random key
+                       srand((double)microtime()*1000000);
+                       $key = md5(uniqid(rand(), true));
+
+                       // attempt to add entry in database
+                       // add in database as non-active
+                       $query = 'INSERT INTO ' . sql_table('activation'). ' (vkey, vtime, vmember, vtype, vextra) ';
+                       $query .= 'VALUES (\'' . addslashes($key). '\', \'' . date('Y-m-d H:i:s',time()) . '\', \'' . intval($this->getID()). '\', \'' . addslashes($type). '\', \'' . addslashes($extra). '\')';
+                       if (sql_query($query))
+                               $ok = true;
+               }
+
+               // mark member as not allowed to log in
+               if (!$canLoginWhileActive)
+               {
+                       $this->setCanLogin(0);
+                       $this->write();
+               }
+
+               // return the key
+               return $key;
+       }
+
+       /**
+        * Inidicates that an activation link has been clicked and any forms displayed
+        * there have been successfully filled out.
+        * @author dekarma
+        */
+       function activate($key)
+       {
+               // get activate info
+               $info = MEMBER::getActivationInfo($key);
+
+               // no active key
+               if (!$info)
+                       return false;
+
+               switch ($info->vtype)
+               {
+                       case 'forgot':
+                               // nothing to do
+                               break;
+                       case 'register':
+                               // set canlogin value
+                               global $CONF;
+                               sql_query('UPDATE ' . sql_table('member') . ' SET mcanlogin=' . intval($CONF['NewMemberCanLogon']). ' WHERE mnumber=' . intval($info->vmember));
+                               break;
+                       case 'addresschange':
+                               // reset old 'canlogin' value
+                               list($oldEmail, $oldCanLogin) = explode('/', $info->vextra);
+                               sql_query('UPDATE ' . sql_table('member') . ' SET mcanlogin=' . intval($oldCanLogin). ' WHERE mnumber=' . intval($info->vmember));
+                               break;
+               }
+
+               // delete from activation table
+               sql_query('DELETE FROM ' . sql_table('activation') . ' WHERE vkey=\'' . addslashes($key) . '\'');
+
+               // success!
+               return true;
+       }
+
+       /**
+        * Cleans up entries in the activation table. All entries older than 2 days are removed.
+        * (static)
+        *
+        * @author dekarma
+        */
+       function cleanupActivationTable()
+       {
+               $actdays = 2;
+               if (isset($CONF['ActivationDays']) && intval($CONF['ActivationDays']) > 0) {
+                   $actdays = intval($CONF['ActivationDays']);
+               }
+               $boundary = time() - (60 * 60 * 24 * $actdays);
+
+               // 1. walk over all entries, and see if special actions need to be performed
+               $res = sql_query('SELECT * FROM ' . sql_table('activation') . ' WHERE vtime < \'' . date('Y-m-d H:i:s',$boundary) . '\'');
+
+               while ($o = sql_fetch_object($res))
+               {
+                       switch ($o->vtype)
+                       {
+                               case 'register':
+                                       // delete all information about this site member. registration is undone because there was
+                                       // no timely activation
+                                       include_once($DIR_LIBS . 'ADMIN.php');
+                                       ADMIN::deleteOneMember(intval($o->vmember));
+                                       break;
+                               case 'addresschange':
+                                       // revert the e-mail address of the member back to old address
+                                       list($oldEmail, $oldCanLogin) = explode('/', $o->vextra);
+                                       sql_query('UPDATE ' . sql_table('member') . ' SET mcanlogin=' . intval($oldCanLogin). ', memail=\'' . addslashes($oldEmail). '\' WHERE mnumber=' . intval($o->vmember));
+                                       break;
+                               case 'forgot':
+                                       // delete the activation link and ignore. member can request a new password using the
+                                       // forgot password link
+                                       break;
+                       }
+               }
+
+               // 2. delete activation entries for real
+               sql_query('DELETE FROM ' . sql_table('activation') . ' WHERE vtime < \'' . date('Y-m-d H:i:s',$boundary) . '\'');
+       }
+
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/NOTIFICATION.php b/utf8/nucleus/libs/NOTIFICATION.php
new file mode 100755 (executable)
index 0000000..0789ef2
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * Class used to represent a collection of e-mail addresses, to which a
+ * message can be sent (e.g. comment or karma vote notification).
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: NOTIFICATION.php,v 1.6 2006/07/17 20:03:44 kimitake Exp $
+ */
+class NOTIFICATION {
+
+       // array of addresses that need to get a notification
+       var $addresses = array();
+
+       /**
+         * takes one string as argument, containing multiple e-mail addresses
+         * separated by semicolons
+         * eg: site@demuynck.org;nucleus@demuynck.org;foo@bar.com
+         */
+       function NOTIFICATION($addresses) {
+               $this->addresses = explode(';' , $addresses);
+       }
+
+       /**
+         * returns true if all addresses are valid
+         */
+       function validAddresses() {
+               foreach ( $this->addresses as $address ) {
+                       if (!isValidMailAddress(trim($address)))
+                               return 0;
+               }
+               return 1;
+       }
+
+       /**
+         * Sends email messages to all the email addresses
+         */
+       function notify($title, $message, $from) {
+               global $member;
+
+               foreach ( $this->addresses as $address ) {
+                       $address = trim($address);
+
+                       if (!$address)
+                               continue;
+
+                       // don't send messages to yourself
+                       if ($member->isLoggedIn() && ($member->getEmail() == $address))
+                               continue;
+
+                       @mb_language('ja');
+                       @mb_internal_encoding(_CHARSET);
+                       @mb_send_mail($address, $title, $message, "From: ". $from);
+               }
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/PAGEFACTORY.php b/utf8/nucleus/libs/PAGEFACTORY.php
new file mode 100755 (executable)
index 0000000..55c9d6f
--- /dev/null
@@ -0,0 +1,437 @@
+<?php\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+/**\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ * $NucleusJP: PAGEFACTORY.php,v 1.8.2.2 2007/10/30 16:12:27 shizuki Exp $\r
+ */\r
+\r
+/**\r
+ * The formfactory class can be used to insert add/edit item forms into\r
+ * admin area, bookmarklet, skins or any other places where such a form\r
+ * might be needed\r
+ */\r
+class PAGEFACTORY extends BaseActions {\r
+\r
+       // ref to the blog object for which an add:edit form is created\r
+       var $blog;\r
+\r
+       // allowed actions (for parser)\r
+       var $actions;\r
+\r
+       // allowed types of forms (bookmarklet/admin)\r
+       var $allowedTypes;\r
+       var $type;              // one of the types in $allowedTypes\r
+\r
+       // 'add' or 'edit'\r
+       var $method;\r
+\r
+       // info to fill out in the form (e.g. catid, itemid, ...)\r
+       var $variables;\r
+\r
+       /**\r
+        * creates a new PAGEFACTORY object\r
+        */\r
+       function PAGEFACTORY($blogid) {\r
+               // call constructor of superclass first\r
+               $this->BaseActions();\r
+\r
+               global $manager;\r
+               $this->blog =& $manager->getBlog($blogid);\r
+\r
+               // TODO: move the definition of actions to the createXForm\r
+               // methods\r
+               $this->actions = Array(\r
+                       'actionurl',\r
+                       'title',\r
+                       'body',\r
+                       'more',\r
+                       'blogid',\r
+                       'bloglink',\r
+                       'blogname',\r
+                       'authorname',\r
+                       'checkedonval',\r
+                       'helplink',\r
+                       'currenttime',\r
+                       'itemtime',\r
+                       'init',\r
+                       'text',\r
+                       'jsinput',\r
+                       'jsbuttonbar',\r
+                       'categories',\r
+                       'contents',\r
+                       'ifblogsetting',\r
+                       'ifitemproperty',\r
+                       'else',\r
+                       'endif',\r
+                       'pluginextras',\r
+                       'itemoptions',\r
+                       'extrahead',\r
+                       'ticket',\r
+                       'autosave',\r
+                       'autosaveinfo',\r
+                       'ifautosave',\r
+                       'xmldeclaration'\r
+               );\r
+\r
+               // TODO: maybe add 'skin' later on?\r
+               // TODO: maybe add other pages from admin area\r
+               $this->allowedTypes = Array('bookmarklet','admin');\r
+       }\r
+\r
+       /**\r
+        * creates a "add item" form for a given type of page\r
+        *\r
+        * @param type\r
+        *              'admin' or 'bookmarklet'\r
+        */\r
+       function createAddForm($type, $contents = array()) {\r
+               if (!in_array($type, $this->allowedTypes))\r
+                       return;\r
+               $this->type = $type;\r
+               $this->method = 'add';\r
+\r
+               global $manager;\r
+               $manager->notify('PreAddItemForm', array('contents' => &$contents, 'blog' => &$this->blog));\r
+\r
+               $this->createForm($contents);\r
+       }\r
+\r
+       /**\r
+        * creates a "add item" form for a given type of page\r
+        *\r
+        * @param type\r
+        *              'admin' or 'bookmarklet'\r
+        * @param contents\r
+        *              An associative array\r
+        *                      'author' => author\r
+        *                      '' =>\r
+        */\r
+       function createEditForm($type, $contents) {\r
+               if (!in_array($type, $this->allowedTypes))\r
+                       return;\r
+               $this->type = $type;\r
+               $this->method = 'edit';\r
+               $this->createForm($contents);\r
+       }\r
+\r
+       /**\r
+        * (private) creates a form for a given type of page\r
+        */\r
+       function createForm($contents) {\r
+               // save contents\r
+               $this->variables = $contents;\r
+\r
+               // get template to use\r
+               $template = $this->getTemplateFor($this->type);\r
+\r
+               // use the PARSER engine to parse that template\r
+               $parser =& new PARSER($this->actions, $this);\r
+               $parser->parse($template);\r
+       }\r
+\r
+       /**\r
+        * returns an appropriate template\r
+        */\r
+       function getTemplateFor($type) {\r
+               global $DIR_LIBS;\r
+\r
+               $filename = $DIR_LIBS . 'include/' . $this->type . '-' . $this->method . '.template';\r
+\r
+               if (!file_exists($filename))\r
+                       return '';\r
+\r
+               $fsize = filesize($filename);\r
+               if ($fsize <= 0)\r
+                       return '';\r
+\r
+               // read file and return it\r
+               $fd = fopen ($filename, 'r');\r
+               $contents = fread ($fd, $fsize);\r
+               fclose ($fd);\r
+\r
+               return $contents;\r
+\r
+       }\r
+\r
+       // create category dropdown box\r
+       function parse_categories($startidx = 0) {\r
+                       if ($this->variables['catid'])\r
+                               $catid = $this->variables['catid'];                             // on edit item\r
+                       else\r
+                               $catid = $this->blog->getDefaultCategory();             // on add item\r
+\r
+                       ADMIN::selectBlogCategory('catid',$catid,$startidx,1,$this->blog->getID());\r
+       }\r
+\r
+       function parse_xmldeclaration() {\r
+               $ua = serverVar('HTTP_USER_AGENT');\r
+               if (!(ereg("Windows", $ua) && ereg("MSIE", $ua)) || ereg("MSIE 7", $ua)) {\r
+                       echo '<' . '?xml version="1.0" encoding="' . _CHARSET .'"?' . '>' . "\n";\r
+               }\r
+       }\r
+\r
+       function parse_blogid() {\r
+               echo $this->blog->getID();\r
+       }\r
+\r
+       function parse_blogname() {\r
+               echo $this->blog->getName();\r
+       }\r
+\r
+       function parse_bloglink() {\r
+               echo '<a href="'.htmlspecialchars($this->blog->getURL()).'">'.htmlspecialchars($this->blog->getName()).'</a>';\r
+       }\r
+\r
+       function parse_authorname() {\r
+               // don't use on add item?\r
+               global $member;\r
+               echo $member->getDisplayName();\r
+       }\r
+\r
+       function parse_title() {\r
+               echo $this->contents['title'];\r
+       }\r
+\r
+       /**\r
+        * Indicates the start of a conditional block of data. It will be added to\r
+        * the output only if the blogsetting with the given name equals the\r
+        * given value (default for value = 1 = true)\r
+        *\r
+        * the name of the blogsetting is the column name in the nucleus_blog table\r
+        *\r
+        * the conditional block ends with an <endif> var\r
+        */\r
+       function parse_ifblogsetting($name,$value=1) {\r
+               $this->_addIfCondition(($this->blog->getSetting($name) == $value));\r
+       }\r
+\r
+       function parse_ifitemproperty($name,$value=1) {\r
+               $this->_addIfCondition(($this->variables[$name] == $value));\r
+       }\r
+\r
+       function parse_ifautosave($name,$value=1) {\r
+               global $member;\r
+               $this->_addIfCondition($member->getAutosave() == $value);\r
+       }\r
+\r
+       function parse_helplink($topic) {\r
+               help($topic);\r
+       }\r
+\r
+       // for future items\r
+       function parse_currenttime($what) {\r
+               $nu = getdate($this->blog->getCorrectTime());\r
+               echo $nu[$what];\r
+       }\r
+\r
+       // date change on edit item\r
+       function parse_itemtime($what) {\r
+               $itemtime = getdate($this->variables['timestamp']);\r
+               echo $itemtime[$what];\r
+       }\r
+\r
+       // some init stuff for all forms\r
+       function parse_init() {\r
+               $authorid = ($this->method == 'edit') ? $this->variables['authorid'] : '';\r
+               $this->blog->insertJavaScriptInfo($authorid);\r
+       }\r
+\r
+       // on bookmarklets only: insert extra html header information (by plugins)\r
+       function parse_extrahead() {\r
+               global $manager;\r
+\r
+               $extrahead = '';\r
+\r
+               $manager->notify(\r
+                       'BookmarkletExtraHead',\r
+                       array(\r
+                               'extrahead' => &$extrahead\r
+                       )\r
+               );\r
+\r
+               echo $extrahead;\r
+       }\r
+\r
+       // inserts some localized text\r
+       function parse_text($which) {\r
+               // constant($which) only available from 4.0.4 :(\r
+               if (defined($which)) {\r
+                       eval("echo $which;");\r
+               } else {\r
+                       echo $which;    // this way we see where definitions are missing\r
+               }\r
+\r
+       }\r
+\r
+       function parse_contents($which) {\r
+               if (!isset($this->variables[$which])) $this->variables[$which] = '';\r
+               echo htmlspecialchars($this->variables[$which],ENT_QUOTES);\r
+       }\r
+\r
+       function parse_checkedonval($value, $name) {\r
+               if (!isset($this->variables[$name])) $this->variables[$name] = '';\r
+               if ($this->variables[$name] == $value)\r
+                       echo 'checked="checked"';\r
+       }\r
+\r
+       // extra javascript for input and textarea fields\r
+       function parse_jsinput($which) {\r
+               global $CONF;\r
+               $out = 'name="' . $which . '" id="input' . $which . '"';\r
+               if ($CONF['DisableJsTools'] != 1) {\r
+                       $out .= 'onkeyup="storeCaret(this); updPreview(' . $which . '); doMonitor();"'\r
+                                 . 'onclick="storeCaret(this);"'\r
+                                 . 'onselect="storeCaret(this);"';\r
+               } elseif ($CONF['DisableJsTools'] == 0) {\r
+                       $out .= ' onkeyup="doMonitor();" onkeypress="shortCuts();"';\r
+               } else {\r
+                       $out .= ' onkeyup="doMonitor();"';\r
+               }\r
+               echo $out;\r
+       }\r
+\r
+       // shows the javascript button bar\r
+       function parse_jsbuttonbar($extrabuttons = "") {\r
+               global $CONF;\r
+               switch($CONF['DisableJsTools']) {\r
+\r
+                       case "0":\r
+                               echo '<div class="jsbuttonbar">';\r
+\r
+                                       $this->_jsbutton('cut','cutThis()',_ADD_CUT_TT . " (Ctrl + X)");\r
+                                       $this->_jsbutton('copy','copyThis()',_ADD_COPY_TT . " (Ctrl + C)");\r
+                                       $this->_jsbutton('paste','pasteThis()',_ADD_PASTE_TT . " (Ctrl + V)");\r
+                                       $this->_jsbuttonspacer();\r
+                                       $this->_jsbutton('bold',"boldThis()",_ADD_BOLD_TT ." (Ctrl + Shift + B)");\r
+                                       $this->_jsbutton('italic',"italicThis()",_ADD_ITALIC_TT ." (Ctrl + Shift + I)");\r
+                                       $this->_jsbutton('link',"ahrefThis()",_ADD_HREF_TT ." (Ctrl + Shift + A)");\r
+                                       $this->_jsbuttonspacer();\r
+                                       $this->_jsbutton('alignleft',"alignleftThis()",_ADD_ALIGNLEFT_TT);\r
+                                       $this->_jsbutton('alignright',"alignrightThis()",_ADD_ALIGNRIGHT_TT);\r
+                                       $this->_jsbutton('aligncenter',"aligncenterThis()",_ADD_ALIGNCENTER_TT);\r
+                                       $this->_jsbuttonspacer();\r
+                                       $this->_jsbutton('left',"leftThis()",_ADD_LEFT_TT);\r
+                                       $this->_jsbutton('right',"rightThis()",_ADD_RIGHT_TT);\r
+\r
+\r
+                                       if ($extrabuttons) {\r
+                                               $btns = explode('+',$extrabuttons);\r
+                                               $this->_jsbuttonspacer();\r
+                                               foreach ($btns as $button) {\r
+                                                       switch($button) {\r
+                                                               case "media":\r
+                                                                       $this->_jsbutton('media',"addMedia()",_ADD_MEDIA_TT .   " (Ctrl + Shift + M)");\r
+                                                                       break;\r
+                                                               case "preview":\r
+                                                                       $this->_jsbutton('preview',"showedit()",_ADD_PREVIEW_TT);\r
+                                                                       break;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+\r
+                               echo '</div>';\r
+\r
+                               break;\r
+                       case "2":\r
+                               echo '<div class="jsbuttonbar">';\r
+\r
+                                       $this->_jsbutton('bold',"boldThis()",_ADD_BOLD_TT);\r
+                                       $this->_jsbutton('italic',"italicThis()",_ADD_ITALIC_TT);\r
+                                       $this->_jsbutton('link',"ahrefThis()",_ADD_HREF_TT);\r
+                                       $this->_jsbuttonspacer();\r
+                                       $this->_jsbutton('alignleft',"alignleftThis()",_ADD_ALIGNLEFT_TT);\r
+                                       $this->_jsbutton('alignright',"alignrightThis()",_ADD_ALIGNRIGHT_TT);\r
+                                       $this->_jsbutton('aligncenter',"aligncenterThis()",_ADD_ALIGNCENTER_TT);\r
+                                       $this->_jsbuttonspacer();\r
+                                       $this->_jsbutton('left',"leftThis()",_ADD_LEFT_TT);\r
+                                       $this->_jsbutton('right',"rightThis()",_ADD_RIGHT_TT);\r
+\r
+\r
+                                       if ($extrabuttons) {\r
+                                               $btns = explode('+',$extrabuttons);\r
+                                               $this->_jsbuttonspacer();\r
+                                               foreach ($btns as $button) {\r
+                                                       switch($button) {\r
+                                                               case "media":\r
+                                                                       $this->_jsbutton('media',"addMedia()",_ADD_MEDIA_TT);\r
+                                                                       break;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+\r
+                               echo '</div>';\r
+\r
+                               break;\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Allows plugins to add their own custom fields\r
+        */\r
+       function parse_pluginextras() {\r
+               global $manager;\r
+\r
+               switch ($this->method) {\r
+                       case 'add':\r
+                               $manager->notify('AddItemFormExtras',\r
+                                               array(\r
+                                                       'blog' => &$this->blog\r
+                                               )\r
+                               );\r
+                               break;\r
+                       case 'edit':\r
+                               $manager->notify('EditItemFormExtras',\r
+                                               array(\r
+                                                       'variables' => $this->variables,\r
+                                                       'blog' => &$this->blog,\r
+                                                       'itemid' => $this->variables['itemid']\r
+                                               )\r
+                               );\r
+                               break;\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Adds the itemOptions of a plugin to a page\r
+        * @author TeRanEX\r
+        */\r
+       function parse_itemoptions() {\r
+               global $itemid;\r
+               ADMIN::_insertPluginOptions('item', $itemid);\r
+       }\r
+\r
+       function parse_ticket() {\r
+               global $manager;\r
+               $manager->addTicketHidden();\r
+       }\r
+\r
+       /**\r
+        * convenience method\r
+        */\r
+       function _jsbutton($type, $code ,$tooltip) {\r
+               echo <<<__JSBUTTON__\r
+                       <span class="jsbutton" onmouseover="BtnHighlight(this);" onmouseout="BtnNormal(this);" onclick="{$code}">\r
+                               <img src="images/button-{$type}.gif" title="{$tooltip}" alt="{$tooltip}" width="16" height="16" />\r
+                       </span>\r
+\r
+__JSBUTTON__;\r
+       }\r
+\r
+       function _jsbuttonspacer() {\r
+               echo '<span class="jsbuttonspacer">&nbsp;</span>';\r
+       }\r
+\r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/PARSER.php b/utf8/nucleus/libs/PARSER.php
new file mode 100755 (executable)
index 0000000..54ffa56
--- /dev/null
@@ -0,0 +1,161 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: PARSER.php,v 1.7.2.1 2007/09/05 07:35:59 kimitake Exp $
+ */
+
+if ( !function_exists('requestVar') ) exit;\r
+require_once dirname(__FILE__) . '/BaseActions.php';\r
+\r
+/**\r
+ * This is the parser class of Nucleus. It is used for various things (skin parsing,\r
+ * form generation, ...)\r
+ */\r
+class PARSER {\r
+\r
+       // array with the names of all allowed actions\r
+       var $actions;\r
+\r
+       // reference to actions handler\r
+       var $handler;\r
+\r
+       // delimiters that can be used for skin/templatevars\r
+       var $delim;\r
+\r
+       // parameter delimiter (to separate skinvar params)\r
+       var $pdelim;\r
+\r
+       // usually set to 0. When set to 1, all skinvars are allowed regardless of $actions\r
+       var $norestrictions;\r
+\r
+       /**\r
+        * Creates a new parser object with the given allowed actions\r
+        * and the given handler\r
+        *\r
+        * @param $allowedActions array\r
+        * @param $handler class object with functions for each action (reference)\r
+        * @param $delim optional delimiter\r
+        * @param $paramdelim optional parameterdelimiter\r
+        */\r
+       function PARSER($allowedActions, &$handler, $delim = '(<%|%>)', $pdelim = ',') {\r
+               $this->actions = $allowedActions;\r
+               $this->handler =& $handler;\r
+               $this->delim = $delim;\r
+               $this->pdelim = $pdelim;\r
+               $this->norestrictions = 0;      // set this to 1 to disable checking for allowedActions\r
+       }\r
+\r
+       /**\r
+        * Parses the given contents and outputs it\r
+        */\r
+       function parse(&$contents) {\r
+\r
+               $pieces = preg_split('/'.$this->delim.'/',$contents);\r
+\r
+               $maxidx = sizeof($pieces);\r
+               for ($idx = 0; $idx < $maxidx; $idx++) {\r
+                       echo $pieces[$idx];\r
+                       $idx++;\r
+                       if ($idx < $maxidx) {\r
+                               $this->doAction($pieces[$idx]);\r
+                       }\r
+               }\r
+       }\r
+\r
+\r
+       /**\r
+         * handle an action\r
+         */\r
+       function doAction($action) {\r
+               global $manager, $CONF;\r
+\r
+               if (!$action) return;\r
+\r
+               // split into action name + arguments\r
+               if (strstr($action,'(')) {\r
+                       $paramStartPos = strpos($action, '(');\r
+                       $params = substr($action, $paramStartPos + 1, strlen($action) - $paramStartPos - 2);\r
+                       $action = substr($action, 0, $paramStartPos);\r
+                       $params = explode ($this->pdelim, $params);\r
+\r
+                       // trim parameters\r
+                       // for PHP versions lower than 4.0.6:\r
+                       //   - add // before '$params = ...'\r
+                       //   - remove // before 'foreach'\r
+                       $params = array_map('trim',$params);\r
+                       // foreach ($params as $key => $value) { $params[$key] = trim($value); }\r
+               } else {\r
+                       // no parameters\r
+                       $params = array();\r
+               }\r
+\r
+               $actionlc = strtolower($action);\r
+\r
+               // skip execution of skinvars while inside an if condition which hides this part of the page\r
+               if (!$this->handler->if_currentlevel && ($actionlc != 'else') && ($actionlc != 'elseif') && ($actionlc != 'endif') && ($actionlc != 'ifnot') && ($actionlc != 'elseifnot') && (substr($actionlc,0,2) != 'if'))\r
+                       return;\r
+\r
+               if (in_array($actionlc, $this->actions) || $this->norestrictions ) {\r
+                       // when using PHP versions lower than 4.0.5, uncomment the line before\r
+                       // and comment the call_user_func_array call\r
+                       //$this->call_using_array($action, $this->handler, $params);\r
+                       call_user_func_array(array(&$this->handler,'parse_' . $actionlc), $params);\r
+               } else {\r
+                       // redirect to plugin action if possible\r
+                       if (in_array('plugin', $this->actions) && $manager->pluginInstalled('NP_' . $action)) {\r
+                               $this->doAction('plugin('.$action.$this->pdelim.implode($this->pdelim,$params).')');\r
+                       } else {\r
+                               if ($CONF['DebugVars']==true) {\r
+                                       echo '&lt;%' , $action , '(', implode($this->pdelim, $params), ')%&gt;';\r
+                               }\r
+                       }\r
+\r
+               }\r
+\r
+       }\r
+\r
+       /**\r
+         * Calls a method using an array of parameters (for use with PHP versions lower than 4.0.5)\r
+         * ( = call_user_func_array() function )\r
+         */\r
+       function call_using_array($methodname, &$handler, $paramarray) {\r
+\r
+               $methodname = 'parse_' . $methodname;\r
+\r
+               if (!method_exists($handler, $methodname)) {\r
+                       return;\r
+               }\r
+\r
+               $command = 'call_user_func(array(&$handler,$methodname)';\r
+               for ($i = 0; $i<count($paramarray); $i++)\r
+                       $command .= ',$paramarray[' . $i . ']';\r
+               $command .= ');';\r
+               eval($command); // execute the correct method\r
+       }\r
+\r
+       function setProperty($property, $value) {\r
+               global $manager;\r
+               $manager->setParserProperty($property, $value);\r
+       }\r
+\r
+       function getProperty($name) {\r
+               global $manager;\r
+               return $manager->getParserProperty($name);\r
+       }\r
+\r
+\r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/PLUGIN.php b/utf8/nucleus/libs/PLUGIN.php
new file mode 100755 (executable)
index 0000000..8f4d72e
--- /dev/null
@@ -0,0 +1,682 @@
+<?php
+       /*
+        * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+        * Copyright (C) 2002-2010 The Nucleus Group
+        *
+        * 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.
+        * (see nucleus/documentation/index.html#license for more info)
+        */
+       /**
+        * This is an (abstract) class of which all Nucleus Plugins must inherit
+        *
+        * for more information on plugins and how to write your own, see the
+        * plugins.html file that is included with the Nucleus documenation
+        *
+        * @license http://nucleuscms.org/license.txt GNU General Public License
+        * @copyright Copyright (C) 2002-2010 The Nucleus Group
+        * @version $Id$
+        * $NucleusJP: PLUGIN.php,v 1.12.2.3 2007/12/03 02:22:42 kmorimatsu Exp $
+        */
+       class NucleusPlugin {
+
+               // these functions _have_ to be redefined in your plugin
+
+               function getName() { return 'Undefined'; }
+               function getAuthor()  { return 'Undefined'; }
+               function getURL()  { return 'Undefined'; }
+               function getVersion() { return '0.0'; }
+               function getDescription() { return 'Undefined';}
+
+               // these function _may_ be redefined in your plugin
+
+               function getMinNucleusVersion() { return 150; }
+               function getMinNucleusPatchLevel() { return 0; }
+               function getEventList() { return array(); }
+               function getTableList() { return array(); }
+               function hasAdminArea() { return 0; }
+
+               function install() {}
+               function unInstall() {}
+
+               function init() {}
+
+               function doSkinVar($skinType) {}
+               function doTemplateVar(&$item) {
+                       $args = func_get_args();
+                       array_shift($args);
+                       array_unshift($args, 'template');
+                       call_user_func_array(array(&$this,'doSkinVar'),$args);
+               }
+               function doTemplateCommentsVar(&$item, &$comment) {
+                       $args = func_get_args();
+                       array_shift($args);
+                       array_shift($args);
+                       array_unshift($args, 'template');
+                       call_user_func_array(array(&$this,'doSkinVar'),$args);
+               }
+               function doAction($type) { return _ERROR_PLUGIN_NOSUCHACTION; }
+               function doIf($key,$value) { return false; }
+               function doItemVar (&$item) {}
+
+               /**
+                * Checks if a plugin supports a certain feature.
+                *
+                * @returns 1 if the feature is reported, 0 if not
+                * @param $feature
+                *              Name of the feature. See plugin documentation for more info
+                *                      'SqlTablePrefix' -> if the plugin uses the sql_table() method to get table names
+                *                      'HelpPage' -> if the plugin provides a helppage
+                *                              'SqlApi' -> if the plugin uses the complete sql_* api (must also require nucleuscms 3.5)
+                */
+               function supportsFeature($feature) {
+                       return 0;
+               }
+
+               /**
+                * Report a list of plugin that is required to function
+                *
+                * @returns an array of names of plugin, an empty array indicates no dependency
+                */
+               function getPluginDep() { return array(); }
+
+               // these helper functions should not be redefined in your plugin
+
+               /**
+                 * Creates a new option for this plugin
+                 *
+                 * @param name
+                 *             A string uniquely identifying your option. (max. length is 20 characters)
+                 * @param description
+                 *             A description that will show up in the nucleus admin area (max. length: 255 characters)
+                 * @param type
+                 *             Either 'text', 'yesno' or 'password'
+                 *             This info is used when showing 'edit plugin options' screens
+                 * @param value
+                 *             Initial value for the option (max. value length is 128 characters)
+                 */
+               function createOption($name, $desc, $type, $defValue = '', $typeExtras = '') {
+                       return $this->_createOption('global', $name, $desc, $type, $defValue, $typeExtras);
+               }
+               function createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '') {
+                       return $this->_createOption('blog', $name, $desc, $type, $defValue, $typeExtras);
+               }
+               function createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '') {
+                       return $this->_createOption('member', $name, $desc, $type, $defValue, $typeExtras);
+               }
+               function createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '') {
+                       return $this->_createOption('category', $name, $desc, $type, $defValue, $typeExtras);
+               }
+               function createItemOption($name, $desc, $type, $defValue = '', $typeExtras = '') {
+                       return $this->_createOption('item', $name, $desc, $type, $defValue, $typeExtras);
+               }
+
+               /**
+                 * Removes the option from the database
+                 *
+                 * Note: Options get erased automatically on plugin uninstall
+                 */
+               function deleteOption($name) {
+                       return $this->_deleteOption('global', $name);
+               }
+               function deleteBlogOption($name) {
+                       return $this->_deleteOption('blog', $name);
+               }
+               function deleteMemberOption($name) {
+                       return $this->_deleteOption('member', $name);
+               }
+               function deleteCategoryOption($name) {
+                       return $this->_deleteOption('category', $name);
+               }
+               function deleteItemOption($name) {
+                       return $this->_deleteOption('item', $name);
+               }
+
+               /**
+                 * Sets the value of an option to something new
+                 */
+               function setOption($name, $value) {
+                       return $this->_setOption('global', 0, $name, $value);
+               }
+               function setBlogOption($blogid, $name, $value) {
+                       return $this->_setOption('blog', $blogid, $name, $value);
+               }
+               function setMemberOption($memberid, $name, $value) {
+                       return $this->_setOption('member', $memberid, $name, $value);
+               }
+               function setCategoryOption($catid, $name, $value) {
+                       return $this->_setOption('category', $catid, $name, $value);
+               }
+               function setItemOption($itemid, $name, $value) {
+                       return $this->_setOption('item', $itemid, $name, $value);
+               }
+
+               /**
+                 * Retrieves the current value for an option
+                 */
+               function getOption($name)
+               {
+                       // only request the options the very first time. On subsequent requests
+                       // the static collection is used to save SQL queries.
+                       if ($this->plugin_options == 0)
+                       {
+                               $this->plugin_options = array();
+                               $query = sql_query(
+                                        'SELECT d.oname as name, o.ovalue as value '.
+                                        'FROM '.
+                                        sql_table('plugin_option').' o, '.
+                                        sql_table('plugin_option_desc').' d '.
+                                        'WHERE d.opid='. intval($this->getID()).' AND d.oid=o.oid'
+                               );
+                               while ($row = sql_fetch_object($query))
+                                       $this->plugin_options[strtolower($row->name)] = $row->value;
+                 }
+                 if (isset($this->plugin_options[strtolower($name)]))
+                               return $this->plugin_options[strtolower($name)];
+                 else
+                               return $this->_getOption('global', 0, $name);
+               }
+
+               function getBlogOption($blogid, $name) {
+                       return $this->_getOption('blog', $blogid, $name);
+               }
+               function getMemberOption($memberid, $name) {
+                       return $this->_getOption('member', $memberid, $name);
+               }
+               function getCategoryOption($catid, $name) {
+                       return $this->_getOption('category', $catid, $name);
+               }
+               function getItemOption($itemid, $name) {
+                       return $this->_getOption('item', $itemid, $name);
+               }
+
+               /**
+                * Retrieves an associative array with the option value for each
+                * context id
+                */
+               function getAllBlogOptions($name) {
+                       return $this->_getAllOptions('blog', $name);
+               }
+               function getAllMemberOptions($name) {
+                       return $this->_getAllOptions('member', $name);
+               }
+               function getAllCategoryOptions($name) {
+                       return $this->_getAllOptions('category', $name);
+               }
+               function getAllItemOptions($name) {
+                       return $this->_getAllOptions('item', $name);
+               }
+
+               /**
+                * Retrieves an indexed array with the top (or bottom) of an option
+                * (delegates to _getOptionTop())
+                */
+               function getBlogOptionTop($name, $amount = 10, $sort = 'desc') {
+                       return $this->_getOptionTop('blog', $name, $amount, $sort);
+               }
+               function getMemberOptionTop($name, $amount = 10, $sort = 'desc') {
+                       return $this->_getOptionTop('member', $name, $amount, $sort);
+               }
+               function getCategoryOptionTop($name, $amount = 10, $sort = 'desc') {
+                       return $this->_getOptionTop('category', $name, $amount, $sort);
+               }
+               function getItemOptionTop($name, $amount = 10, $sort = 'desc') {
+                       return $this->_getOptionTop('item', $name, $amount, $sort);
+               }
+
+               /**
+                 * Returns the plugin ID
+                 * 
+                 * public                                
+                 */
+               function getID() {
+                       return $this->plugid;
+               }
+
+               /**
+                 * Returns the URL of the admin area for this plugin (in case there's
+                 * no such area, the returned information is invalid)
+                 * 
+                 * public                                
+                 */
+               function getAdminURL() {
+                       global $CONF;
+                       return $CONF['PluginURL'] . $this->getShortName() . '/';
+               }
+
+               /**
+                 * Returns the directory where the admin directory is located and
+                 * where the plugin can maintain his extra files
+                 * 
+                 * public                                
+                 */
+               function getDirectory() {
+                       global $DIR_PLUGINS;
+                       return $DIR_PLUGINS . $this->getShortName() . '/';
+               }
+
+               /**
+                 * Derives the short name for the plugin from the classname (all 
+                 * lowercase)
+                 * 
+                 * public                                
+                 */
+               function getShortName() {
+                       return str_replace('np_','',strtolower(get_class($this)));
+               }
+
+               /**
+                *      Clears the option value cache which saves the option values during
+                *      the plugin execution. This function is usefull if the options has 
+                *      changed during the plugin execution (especially in association with
+                *      the PrePluginOptionsUpdate and the PostPluginOptionsUpdate events)
+                *      
+                *  public                               
+                **/                            
+               function clearOptionValueCache(){
+                       $this->_aOptionValues = array();
+                       $this->plugin_options = 0;
+               }
+
+               // internal functions of the class starts here
+
+               var $_aOptionValues;    // oid_contextid => value
+               var $_aOptionToInfo;    // context_name => array('oid' => ..., 'default' => ...)
+               var $plugin_options;    // see getOption()
+               var $plugid;                    // plugin id
+
+
+               /**
+                * Class constructor: Initializes some internal data
+                */                                             
+               function NucleusPlugin() {
+                       $this->_aOptionValues = array();        // oid_contextid => value
+                       $this->_aOptionToInfo = array();        // context_name => array('oid' => ..., 'default' => ...)
+                       $this->plugin_options = 0;
+               }
+
+               /**
+                * Retrieves an array of the top (or bottom) of an option from a plugin.
+                * @author TeRanEX
+                * @param  string $context the context for the option: item, blog, member,...
+                * @param  string $name    the name of the option
+                * @param  int    $amount  how many rows must be returned
+                * @param  string $sort    desc or asc
+                * @return array           array with both values and contextid's
+                * @access private
+                */
+               function _getOptionTop($context, $name, $amount = 10, $sort = 'desc') {
+                       if (($sort != 'desc') && ($sort != 'asc')) {
+                               $sort= 'desc';
+                       }
+
+                       $oid = $this->_getOID($context, $name);
+
+                       // retrieve the data and return
+                       $q = 'SELECT otype, oextra FROM '.sql_table('plugin_option_desc').' WHERE oid = '.$oid;
+                       $query = sql_query($q);
+
+                       $o = sql_fetch_array($query);
+
+                       if (($this->optionCanBeNumeric($o['otype'])) && ($o['oextra'] == 'number' )) {
+                               $orderby = 'CAST(ovalue AS SIGNED)';
+                       } else {
+                               $orderby = 'ovalue';
+                       }
+                       $q = 'SELECT ovalue value, ocontextid id FROM '.sql_table('plugin_option').' WHERE oid = '.$oid.' ORDER BY '.$orderby.' '.$sort.' LIMIT 0,'.intval($amount);
+                       $query = sql_query($q);
+
+                       // create the array
+                       $i = 0;
+                       $top = array();
+                       while($row = sql_fetch_array($query)) {
+                               $top[$i++] = $row;
+                       }
+
+                       // return the array (duh!)
+                       return $top;
+               }
+
+               /**
+                * Creates an option in the database table plugin_option_desc
+                *               
+                * private
+                */                                             
+               function _createOption($context, $name, $desc, $type, $defValue, $typeExtras = '') {
+                       // create in plugin_option_desc
+                       $query = 'INSERT INTO ' . sql_table('plugin_option_desc')
+                                  .' (opid, oname, ocontext, odesc, otype, odef, oextra)'
+                                  .' VALUES ('.intval($this->plugid)
+                                                        .', \''.addslashes($name).'\''
+                                                        .', \''.addslashes($context).'\''
+                                                        .', \''.addslashes($desc).'\''
+                                                        .', \''.addslashes($type).'\''
+                                                        .', \''.addslashes($defValue).'\''
+                                                        .', \''.addslashes($typeExtras).'\')';
+                       sql_query($query);
+                       $oid = sql_insert_id();
+
+                       $key = $context . '_' . $name;
+                       $this->_aOptionToInfo[$key] = array('oid' => $oid, 'default' => $defValue);
+                       return 1;
+               }
+
+
+               /**
+                * Deletes an option from the database tables
+                * plugin_option and plugin_option_desc 
+                *
+                * private               
+                */                                             
+               function _deleteOption($context, $name) {
+                       $oid = $this->_getOID($context, $name);
+                       if (!$oid) return 0; // no such option
+
+                       // delete all things from plugin_option
+                       sql_query('DELETE FROM ' . sql_table('plugin_option') . ' WHERE oid=' . $oid);
+
+                       // delete entry from plugin_option_desc
+                       sql_query('DELETE FROM ' . sql_table('plugin_option_desc') . ' WHERE oid=' . $oid);
+
+                       // clear from cache
+                       unset($this->_aOptionToInfo[$context . '_' . $name]);
+                       $this->_aOptionValues = array();
+                       return 1;
+               }
+
+               /**
+                * Update an option in the database table plugin_option
+                *               
+                * returns: 1 on success, 0 on failure
+                * private
+                */
+               function _setOption($context, $contextid, $name, $value) {
+                       global $manager;
+
+                       $oid = $this->_getOID($context, $name);
+                       if (!$oid) return 0;
+
+                       // check if context id exists
+                       switch ($context) {
+                               case 'member':
+                                       if (!MEMBER::existsID($contextid)) return 0;
+                                       break;
+                               case 'blog':
+                                       if (!$manager->existsBlogID($contextid)) return 0;
+                                       break;
+                               case 'category':
+                                       if (!$manager->existsCategory($contextid)) return 0;
+                                       break;
+                               case 'item':
+                                       if (!$manager->existsItem($contextid, true, true)) return 0;
+                                       break;
+                               case 'global':
+                                       if ($contextid != 0) return 0;
+                                       break;
+                       }
+
+
+                       // update plugin_option
+                       sql_query('DELETE FROM ' . sql_table('plugin_option') . ' WHERE oid='.intval($oid) . ' and ocontextid='. intval($contextid));
+                       sql_query('INSERT INTO ' . sql_table('plugin_option') . ' (ovalue, oid, ocontextid) VALUES (\''.addslashes($value).'\', '. intval($oid) . ', ' . intval($contextid) . ')');
+
+                       // update cache
+                       $this->_aOptionValues[$oid . '_' . $contextid] = $value;
+
+                       return 1;
+               }
+
+               /**
+                * Get an option from Cache or database
+                *       - if not in the option Cache read it from the database
+                *   - if not in the database write default values into the database
+                *                
+                * private               
+                */                                             
+               function _getOption($context, $contextid, $name) {
+                       $oid = $this->_getOID($context, $name);
+                       if (!$oid) return '';
+
+
+                       $key = $oid . '_' . $contextid;
+
+                       if (isset($this->_aOptionValues[$key]))
+                               return $this->_aOptionValues[$key];
+
+                       // get from DB
+                       $res = sql_query('SELECT ovalue FROM ' . sql_table('plugin_option') . ' WHERE oid='.intval($oid).' and ocontextid=' . intval($contextid));
+
+                       if (!$res || (sql_num_rows($res) == 0)) {
+                               $defVal = $this->_getDefVal($context, $name);
+                               $this->_aOptionValues[$key] = $defVal;
+
+                               // fill DB with default value
+                               $query = 'INSERT INTO ' . sql_table('plugin_option') . ' (oid,ocontextid,ovalue)'
+                                          .' VALUES ('.intval($oid).', '.intval($contextid).', \''.addslashes($defVal).'\')';
+                               sql_query($query);
+                       }
+                       else {
+                               $o = sql_fetch_object($res);
+                               $this->_aOptionValues[$key] = $o->ovalue;
+                       }
+
+                       return $this->_aOptionValues[$key];
+               }
+
+               /**
+                * Returns assoc array with all values for a given option 
+                * (one option per possible context id)
+                * 
+                * private                               
+                */
+               function _getAllOptions($context, $name) {
+                       $oid = $this->_getOID($context, $name);
+                       if (!$oid) return array();
+                       $defVal = $this->_getDefVal($context, $name);
+
+                       $aOptions = array();
+                       switch ($context) {
+                               case 'blog':
+                                       $r = sql_query('SELECT bnumber as contextid FROM ' . sql_table('blog'));
+                                       break;
+                               case 'category':
+                                       $r = sql_query('SELECT catid as contextid FROM ' . sql_table('category'));
+                                       break;
+                               case 'member':
+                                       $r = sql_query('SELECT mnumber as contextid FROM ' . sql_table('member'));
+                                       break;
+                               case 'item':
+                                       $r = sql_query('SELECT inumber as contextid FROM ' . sql_table('item'));
+                                       break;
+                       }
+                       if ($r) {
+                               while ($o = sql_fetch_object($r))
+                                       $aOptions[$o->contextid] = $defVal;
+                       }
+
+                       $res = sql_query('SELECT ocontextid, ovalue FROM ' . sql_table('plugin_option') . ' WHERE oid=' . $oid);
+                       while ($o = sql_fetch_object($res))
+                               $aOptions[$o->ocontextid] = $o->ovalue;
+
+                       return $aOptions;
+               }
+
+               /**
+                * Gets the 'option identifier' that corresponds to a given option name.
+                * When this method is called for the first time, all the OIDs for the plugin
+                * are loaded into memory, to avoid re-doing the same query all over.
+                */
+               function _getOID($context, $name) {
+                       $key = $context . '_' . $name;
+                       $info = @$this->_aOptionToInfo[$key];
+                       if (is_array($info)) return $info['oid'];
+
+                       // load all OIDs for this plugin from the database
+                       $this->_aOptionToInfo = array();
+                       $query = 'SELECT oid, oname, ocontext, odef FROM ' . sql_table('plugin_option_desc') . ' WHERE opid=' . intval($this->plugid);
+                       $res = sql_query($query);
+                       while ($o = sql_fetch_object($res)) {
+                               $k = $o->ocontext . '_' . $o->oname;
+                               $this->_aOptionToInfo[$k] = array('oid' => $o->oid, 'default' => $o->odef);
+                       }
+                       sql_free_result($res);
+
+                       return @$this->_aOptionToInfo[$key]['oid'];
+               }
+               function _getDefVal($context, $name) {
+                       $key = $context . '_' . $name;
+                       $info = $this->_aOptionToInfo[$key];
+                       if (is_array($info)) return $info['default'];
+               }
+
+
+               /**
+                * Deletes all option values for a given context and contextid
+                * (used when e.g. a blog, member or category is deleted)
+                *
+                * (static method)
+                */
+               function _deleteOptionValues($context, $contextid) {
+                       // delete all associated plugin options
+                       $aOIDs = array();
+                               // find ids
+                       $query = 'SELECT oid FROM '.sql_table('plugin_option_desc') . ' WHERE ocontext=\''.addslashes($context).'\'';
+                       $res = sql_query($query);
+                       while ($o = sql_fetch_object($res))
+                               array_push($aOIDs, $o->oid);
+                       sql_free_result($res);
+                               // delete those options. go go go
+                       if (count($aOIDs) > 0) {
+                               $query = 'DELETE FROM ' . sql_table('plugin_option') . ' WHERE oid in ('.implode(',',$aOIDs).') and ocontextid=' . intval($contextid);
+                               sql_query($query);
+                       }
+               }
+
+               /**
+                * splits the option's typeextra field (at ;'s) to split the meta collection
+                * @param string $typeExtra the value of the typeExtra field of an option
+                * @return array array of the meta-key/value-pairs
+                * @author TeRanEX
+                * @static
+                */
+               function getOptionMeta($typeExtra) {
+                       $tmpMeta = explode(';', $typeExtra);
+                       $meta = array();
+                       for ($i = 0; $i < count($tmpMeta); $i++) {
+                               if (($i == 0) && (!strstr($tmpMeta[0], '='))) {
+                                       // we have the select-list
+                                       $meta['select'] = $tmpMeta[0];
+                               } else {
+                                       $tmp = explode('=', $tmpMeta[$i]);
+                                       $meta[$tmp[0]] = $tmp[1];
+                               }
+                       }
+                       return $meta;
+               }
+
+               /**
+                * filters the selectlists out of the meta collection
+                * @param string $typeExtra the value of the typeExtra field of an option
+                * @return string the selectlist
+                * @author TeRanEX
+                */
+               function getOptionSelectValues($typeExtra) {
+                       $meta = NucleusPlugin::getOptionMeta($typeExtra);
+                       //the select list must always be the first part
+                       return $meta['select'];
+               }
+
+               /**
+                * checks if the eventlist in the database is up-to-date
+                * @return bool if it is up-to-date it return true, else false
+                * @author TeRanEX
+                */
+               function subscribtionListIsUptodate() {
+                       $res = sql_query('SELECT event FROM '.sql_table('plugin_event').' WHERE pid = '.$this->getID());
+                       $ev = array();
+                       while($a = sql_fetch_array($res)) {
+                               array_push($ev, $a['event']);
+                       }
+                       if (count($ev) != count($this->getEventList())) {
+                               return false;
+                       }
+                       $d = array_diff($ev, $this->getEventList());
+                       if (count($d) > 0) {
+                               // there are differences so the db is not up-to-date
+                               return false;
+                       }
+                       return true;
+               }
+
+               /**
+                * @param $aOptions: array ( 'oid' => array( 'contextid' => 'value'))
+                *        (taken from request using requestVar())
+                * @param $newContextid: integer (accepts a contextid when it is for a new
+                *        contextid there was no id available at the moment of writing the
+                *        formcontrols into the page (by ex: itemOptions for new item)
+                * @static
+                */
+               function _applyPluginOptions(&$aOptions, $newContextid = 0) {
+                       global $manager;
+                       if (!is_array($aOptions)) return;
+
+                       foreach ($aOptions as $oid => $values) {
+
+                               // get option type info
+                               $query = 'SELECT opid, oname, ocontext, otype, oextra, odef FROM ' . sql_table('plugin_option_desc') . ' WHERE oid=' . intval($oid);
+                               $res = sql_query($query);
+                               if ($o = sql_fetch_object($res))
+                               {
+                                       foreach ($values as $key => $value) {
+                                               // avoid overriding the key used by foreach statement
+                                               $contextid=$key;
+
+                                               // retreive any metadata
+                                               $meta = NucleusPlugin::getOptionMeta($o->oextra);
+
+                                               // if the option is readonly or hidden it may not be saved
+                                               if ((@$meta['access'] != 'readonly') && (@$meta['access'] != 'hidden')) {
+
+                                                       $value = undoMagic($value);     // value comes from request
+
+                                                       switch($o->otype) {
+                                                               case 'yesno':
+                                                                       if (($value != 'yes') && ($value != 'no')) $value = 'no';
+                                                                       break;
+                                                               default:
+                                                                       break;
+                                                       }
+
+                                                       // check the validity of numerical options
+                                                       if ((@$meta['datatype'] == 'numerical') && (!is_numeric($value))) {
+                                                               //the option must be numeric, but the it isn't
+                                                               //use the default for this option
+                                                               $value = $o->odef;
+                                                       }
+
+                                                       // decide wether we are using the contextid of newContextid
+                                                       if ($newContextid != 0) {
+                                                               $contextid = $newContextid;
+                                                       }
+
+                                                       //trigger event PrePluginOptionsUpdate to give the plugin the
+                                                       //possibility to change/validate the new value for the option
+                                                       $manager->notify('PrePluginOptionsUpdate',array('context' => $o->ocontext, 'plugid' => $o->opid, 'optionname' => $o->oname, 'contextid' => $contextid, 'value' => &$value));
+
+                                                       // delete the old value for the option
+                                                       sql_query('DELETE FROM '.sql_table('plugin_option').' WHERE oid='.intval($oid).' AND ocontextid='.intval($contextid));
+                                                       sql_query('INSERT INTO '.sql_table('plugin_option')." (oid, ocontextid, ovalue) VALUES (".intval($oid).",".intval($contextid).",'" . addslashes($value) . "')");
+                                               }
+                                       }
+                               }
+                               // clear option value cache if the plugin object is already loaded
+                               if (is_object($o)) {
+                                       $plugin=& $manager->pidLoaded($o->opid);
+                                       if ($plugin) $plugin->clearOptionValueCache();
+                               }
+                       }
+               }
+       }
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/PLUGINADMIN.php b/utf8/nucleus/libs/PLUGINADMIN.php
new file mode 100755 (executable)
index 0000000..c2efc14
--- /dev/null
@@ -0,0 +1,170 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * code to make it easier to create plugin admin areas
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: PLUGINADMIN.php,v 1.8.2.2 2007/10/23 22:48:56 kmorimatsu Exp $
+ */
+
+global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, $HTTP_ENV_VARS, $HTTP_POST_FILES, $HTTP_SESSION_VARS;\r
+$aVarsToCheck = array('HTTP_GET_VARS', 'HTTP_POST_VARS', 'HTTP_COOKIE_VARS', 'HTTP_ENV_VARS', 'HTTP_SESSION_VARS', 'HTTP_POST_FILES', 'HTTP_SERVER_VARS', 'GLOBALS', 'argv', 'argc', '_GET', '_POST', '_COOKIE', '_ENV', '_SESSION', '_SERVER', '_FILES', 'DIR_LIBS');\r
+\r
+foreach ($aVarsToCheck as $varName)\r
+{\r
+       if (phpversion() >= '4.1.0')\r
+       {\r
+               if (   isset($_GET[$varName])\r
+                       || isset($_POST[$varName])\r
+                       || isset($_COOKIE[$varName])\r
+                       || isset($_ENV[$varName])\r
+                       || isset($_SESSION[$varName])\r
+                       || isset($_FILES[$varName])\r
+               ){\r
+                       die('Sorry. An error occurred.');\r
+               }\r
+       } else {\r
+               if (   isset($HTTP_GET_VARS[$varName])\r
+                       || isset($HTTP_POST_VARS[$varName])\r
+                       || isset($HTTP_COOKIE_VARS[$varName])\r
+                       || isset($HTTP_ENV_VARS[$varName])\r
+                       || isset($HTTP_SESSION_VARS[$varName])\r
+                       || isset($HTTP_POST_FILES[$varName])\r
+               ){\r
+                       die('Sorry. An error occurred.');\r
+               }\r
+       }\r
+}\r
+\r
+if (!isset($DIR_LIBS)) {\r
+       die('Sorry.');\r
+}\r
+\r
+include($DIR_LIBS . 'ADMIN.php');\r
+\r
+class PluginAdmin {\r
+\r
+       var $strFullName;               // NP_SomeThing\r
+       var $plugin;                    // ref. to plugin object\r
+       var $bValid;                    // evaluates to true when object is considered valid\r
+       var $admin;                             // ref to an admin object\r
+\r
+       function PluginAdmin($pluginName)\r
+       {\r
+               global $manager;\r
+\r
+               $this->strFullName = 'NP_' . $pluginName;\r
+\r
+               // check if plugin exists and is installed\r
+               if (!$manager->pluginInstalled($this->strFullName))\r
+                       doError(_ERROR_INVALID_PLUGIN);\r
+\r
+               $this->plugin =& $manager->getPlugin($this->strFullName);\r
+               $this->bValid = $this->plugin;\r
+\r
+               if (!$this->bValid)\r
+                       doError(_ERROR_INVALID_PLUGIN);\r
+\r
+               $this->admin = new ADMIN();\r
+               $this->admin->action = 'plugin_' . $pluginName;\r
+       }\r
+\r
+       function start($extraHead = '')\r
+       {\r
+               global $CONF;\r
+               $strBaseHref  = '<base href="' . htmlspecialchars($CONF['AdminURL']) . '" />';\r
+               $extraHead .= $strBaseHref;\r
+\r
+               $this->admin->pagehead($extraHead);\r
+       }\r
+\r
+       function end()\r
+       {\r
+               $this->_AddTicketByJS();\r
+               $this->admin->pagefoot();\r
+       }\r
+\r
+/** \r
+ * Add ticket when not used in plugin's admin page\r
+ * to avoid CSRF.\r
+ */\r
+       function _AddTicketByJS(){\r
+               global $CONF,$ticketforplugin;\r
+               if (!($ticket=$ticketforplugin['ticket'])) {\r
+                       //echo "\n<!--TicketForPlugin skipped-->\n";\r
+                       return;\r
+               }\r
+               $ticket=htmlspecialchars($ticket,ENT_QUOTES);\r
\r
+?><script type="text/javascript">\r
+/*<![CDATA[*/\r
+/* Add tickets for available links (outside blog excluded) */\r
+for (i=0;document.links[i];i++){\r
+  if (document.links[i].href.indexOf('<?php echo $CONF['PluginURL']; ?>',0)<0\r
+    && !(document.links[i].href.indexOf('//',0)<0)) continue;\r
+  if ((j=document.links[i].href.indexOf('?',0))<0) continue;\r
+  if (document.links[i].href.indexOf('ticket=',j)>=0) continue;\r
+  document.links[i].href=document.links[i].href.substring(0,j+1)+'ticket=<?php echo $ticket; ?>&'+document.links[i].href.substring(j+1);\r
+}\r
+/* Add tickets for forms (outside blog excluded) */\r
+for (i=0;document.forms[i];i++){\r
+  /* check if ticket is already used */\r
+  for (j=0;document.forms[i].elements[j];j++) {\r
+    if (document.forms[i].elements[j].name=='ticket') {\r
+      j=-1;\r
+      break;\r
+    }\r
+  }\r
+  if (j==-1) continue;\r
\r
+  /* check if the modification works */\r
+  try{document.forms[i].innerHTML+='';}catch(e){\r
+    /* Modificaion falied: this sometime happens on IE */\r
+    if (!document.forms[i].action.name && document.forms[i].method.toUpperCase()=="POST") {\r
+      /* <input name="action"/> is not used for POST method*/\r
+      if (document.forms[i].action.indexOf('<?php echo $CONF['PluginURL']; ?>',0)<0\r
+        && !(document.forms[i].action.indexOf('//',0)<0)) continue;\r
+      if (0<(j=document.forms[i].action.indexOf('?',0))) if (0<document.forms[i].action.indexOf('ticket=',j)) continue;\r
+      if (j<0) document.forms[i].action+='?'+'ticket=<?php echo $ticket; ?>';\r
+      else document.forms[i].action+='&'+'ticket=<?php echo $ticket; ?>';\r
+      continue;\r
+    }\r
+    document.write('<?php echo _PLUGINADMIN_TICKETS_JAVASCRIPT ?>');\r
+    j=document.forms[i].outerHTML;\r
+    while (j!=j.replace('<','&lt;')) j=j.replace('<','&lt;');\r
+    document.write('<p>'+j+'</p>');\r
+    continue;\r
+  }\r
+  /* check the action paramer in form tag */\r
+  /* note that <input name="action"/> may be used here */\r
+  j=document.forms[i].innerHTML;\r
+  document.forms[i].innerHTML='';\r
+  if ((document.forms[i].action+'').indexOf('<?php echo $CONF['PluginURL']; ?>',0)<0\r
+      && !((document.forms[i].action+'').indexOf('//',0)<0)) {\r
+    document.forms[i].innerHTML=j;\r
+    continue;\r
+  }\r
+  /* add ticket */\r
+  document.forms[i].innerHTML=j+'<input type="hidden" name="ticket" value="<?php echo $ticket; ?>"/>';\r
+}\r
+/*]]>*/\r
+</script><?php\r
\r
+       }\r
+}\r
+\r
+\r
+\r
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/SEARCH.php b/utf8/nucleus/libs/SEARCH.php
new file mode 100755 (executable)
index 0000000..209a278
--- /dev/null
@@ -0,0 +1,296 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2003-2009 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * SEARCH(querystring) offers different functionality to create an
+ * SQL query to find certain items. (and comments)
+ *
+ * based on code by David Altherr:
+ * http://www.evolt.org/article/Boolean_Fulltext_Searching_with_PHP_and_MySQL/18/15665/
+ * http://davidaltherr.net/web/php_functions/boolean/funcs.mysql.boolean.txt
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: SEARCH.php,v 1.7 2006/07/20 08:01:52 kimitake Exp $
+ */
+
+class SEARCH
+{
+
+    var $querystring;
+    var $marked;
+    var $inclusive;
+    var $blogs;
+
+    function SEARCH($text)
+    {
+        global $blogid;
+//             $text = preg_replace ("/[<,>,=,?,!,#,^,(,),[,\],:,;,\\\,%]/","",$text);
+        /* * * for jp * * * * * * * * * * */
+        $this->encoding = strtolower(preg_replace('|[^a-z0-9-_]|i', '', _CHARSET));
+        if ($this->encoding != 'utf-8') {
+            $text = mb_convert_encoding($text, "UTF-8", $this->encoding);
+        }
+        $text = str_replace ("\xE3\x80\x80",' ',$text);
+        $text = preg_replace ("/[<>=?!#^()[\]:;\\%]/","",$text);
+
+        $this->ascii       = '[\x00-\x7F]';
+        $this->two         = '[\xC0-\xDF][\x80-\xBF]';
+        $this->three       = '[\xE0-\xEF][\x80-\xBF][\x80-\xBF]';
+
+        $this->jpmarked    = $this->boolean_mark_atoms_jp($text);
+        /* * * * * * * * * * * * * * * * */
+
+        $this->querystring = $text;
+//             $this->marked      = $this->boolean_mark_atoms($text);
+        $this->inclusive   = $this->boolean_inclusive_atoms($text);
+        $this->blogs       = array();
+
+        // get all public searchable blogs, no matter what, include the current blog allways.
+        $res = sql_query('SELECT bnumber FROM ' . sql_table('blog') . ' WHERE bincludesearch=1 ');
+        while ($obj = sql_fetch_object($res)) {
+            $this->blogs[] = intval($obj->bnumber);
+        }
+    }
+
+    function  boolean_sql_select($match)
+    {
+        if (!isset($stringsum)) {
+            $stringsum = '';
+        }
+        if (strlen($this->inclusive) > 0) {
+            /* build sql for determining score for each record */
+            $result=explode(" ",$this->inclusive);
+            if (!isset($stringsum_long)) {
+                $stringsum_long = '';
+            }
+            for ($cth = 0; $cth < count($result); $cth++) {
+                if (strlen($result[$cth])>=4) {
+                    $stringsum_long .=  " $result[$cth] ";
+                } else {
+                    $stringsum_a[] = ' ' . $this->boolean_sql_select_short($result[$cth], $match) . ' ';
+                }
+            }
+
+            if (strlen($stringsum_long) > 0) {
+                $stringsum_long = addslashes($stringsum_long);
+                $stringsum_a[]  = " match ($match) against ('$stringsum_long') ";
+            }
+
+            $stringsum .= implode("+", $stringsum_a);
+
+            return $stringsum;
+        }
+    }
+
+    
+
+    function boolean_inclusive_atoms($string)
+    {
+        $result = trim($string);
+        $result = preg_replace("/([[:space:]]{2,})/", ' ', $result);
+
+        /* convert normal boolean operators to shortened syntax */
+        $result = eregi_replace(' not ', ' -', $result);
+        $result = eregi_replace(' and ', ' ',  $result);
+        $result = eregi_replace(' or ',  ', ', $result);
+
+        /* drop unnecessary spaces */
+        $result = str_replace(' ,', ',', $result);
+        $result = str_replace(', ', ',', $result);
+        $result = str_replace('- ', '-', $result);
+        $result = str_replace('+',  '',  $result);
+
+        /* strip exlusive atoms */
+        $result = preg_replace(
+//            "(\-\([A-Za-z0-9]{1,}[A-Za-z0-9\-\.\_\,]{0,}\))",
+            "(\-\(([A-Za-z0-9]|$this->two|$this->three){1,}([A-Za-z0-9\-\.\_\,]|$this->two|$this->three){0,}\))",
+            '',
+            $result);
+
+/*             $result=preg_replace(
+//                     "(\-[A-Za-z0-9]{1,}[A-Za-z0-9\-\.\_]{0,})",
+            "(\-([A-Za-z0-9]|$this->two|$this->three){1,}([A-Za-z0-9\-\.\_\,]|$this->two|$this->three){0,})",
+            '',
+            $result);
+*/
+        $result = str_replace('(', ' ', $result);
+        $result = str_replace(')', ' ', $result);
+        $result = str_replace(',', ' ', $result);
+        if ($this->encoding != 'utf-8') {
+            $result = mb_convert_encoding($result, $this->encoding, "UTF-8");
+        }
+        return $result;
+    }
+
+    function boolean_sql_where($match)
+    {
+/*
+        $result = $this->marked;
+        $result = preg_replace(
+            "/foo\[\(\'([^\)]{4,})\'\)\]bar/e",
+            " 'match ('.\$match.') against (\''.\$this->copyvalue(\"$1\").'\') > 0 ' ",
+            $result);
+        $result = preg_replace(
+            "/foo\[\(\'([^\)]{1,3})\'\)\]bar/e",
+            " '('.\$this->boolean_sql_where_short(\"$1\",\"$match\").')' ",
+            $result);
+*/
+        $result = $this->jpmarked; /* for jp */
+        $result = $this->boolean_sql_where_jp_short($result, $match);/* for jp */
+        if ($this->encoding != 'utf-8') {
+            $result = mb_convert_encoding($result, $this->encoding, "UTF-8");
+        }
+        return $result;
+    }
+
+    // there must be a simple way to simply copy a value with backslashes in it through
+    // the preg_replace, but I cannot currently find it (karma 2003-12-30)
+    function copyvalue($foo)
+    {
+        return $foo;
+    }
+/*
+    function boolean_mark_atoms($string){
+        $result=trim($string);
+        $result=preg_replace("/([[:space:]]{2,})/",' ',$result);
+
+        // convert normal boolean operators to shortened syntax
+        $result=eregi_replace(' not ',' -',$result);
+        $result=eregi_replace(' and ',' ',$result);
+        $result=eregi_replace(' or ',',',$result);
+
+        // strip excessive whitespace
+        $result=str_replace('( ','(',$result);
+        $result=str_replace(' )',')',$result);
+        $result=str_replace(', ',',',$result);
+        $result=str_replace(' ,',',',$result);
+        $result=str_replace('- ','-',$result);
+        $result=str_replace('+','',$result);
+
+        // remove double spaces (we might have introduced some new ones above)
+        $result=trim($result);
+        $result=preg_replace("/([[:space:]]{2,})/",' ',$result);
+
+        // apply arbitrary function to all 'word' atoms
+
+        $result_a = explode(" ",$result);
+        for($word=0;$word<count($result_a);$word++){
+            $result_a[$word] = "foo[('".$result_a[$word]."')]bar";
+        }
+        $result = implode(" ",$result_a);
+
+        // dispatch ' ' to ' AND '
+        $result=str_replace(' ',' AND ',$result);
+
+        // dispatch ',' to ' OR '
+        $result=str_replace(',',' OR ',$result);
+
+        // dispatch '-' to ' NOT '
+        $result=str_replace(' -',' NOT ',$result);
+        return $result;
+    }
+
+    function boolean_sql_where_short($string,$match){
+        $match_a = explode(',',$match);
+        for($ith=0;$ith<count($match_a);$ith++){
+            $like_a[$ith] = " $match_a[$ith] LIKE '% $string %' ";
+        }
+        $like = implode(" OR ",$like_a);
+
+        return $like;
+    }
+*/
+
+    function boolean_sql_select_short($string, $match)
+    {
+        $match_a           = explode(',', $match);
+        $score_unit_weight = .2;
+        for ($ith = 0; $ith< count($match_a); $ith++){
+            $score_a[$ith] =
+                            " $score_unit_weight*(
+                            LENGTH(" . addslashes($match_a[$ith]) . ") -
+                            LENGTH(REPLACE(LOWER(" . addslashes($match_a[$ith]) . "),LOWER('" . addslashes($string) . "'),'')))
+                            /LENGTH('" . addslashes($string) . "') ";
+        }
+        $score = implode(" + ", $score_a);
+
+        return $score;
+    }
+
+/***********************************************
+    Make "WHERE" (jp)
+***********************************************/
+
+    function boolean_mark_atoms_jp($string)
+    {
+        $result = trim($string);
+        $result = preg_replace("/([[:space:]]{2,})/", ' ', $result);
+        
+        /* convert normal boolean operators to shortened syntax */
+        $result = eregi_replace(' not ', ' -', $result);
+        $result = eregi_replace(' and ', ' ',  $result);
+        $result = eregi_replace(' or ',  ',',  $result);
+
+        /* strip excessive whitespace */
+        $result = str_replace(', ', ',',  $result);
+        $result = str_replace(' ,', ',',  $result);
+        $result = str_replace('- ', '-',  $result);
+        $result = str_replace('+',  '',   $result);
+        $result = str_replace(',',  ' ,', $result);
+
+        return $result;
+    }
+
+    function boolean_sql_where_jp_short($string, $match)
+    {
+        $match_a = explode(',', $match);
+        $key_a   = explode(' ', $string);
+
+        for ($ith=0; $ith<count($match_a); $ith++) {
+//                     $temp_a[$ith] = "(i.$match_a[$ith] LIKE '%" . addslashes($key_a[0]) . "%') ";
+            $binKey       = preg_match('/[a-zA-Z]/', $key_a[0]) ? '' : 'BINARY';
+            $temp_a[$ith] = "(i.$match_a[$ith] LIKE " . $binKey . " '%" . addslashes($key_a[0]) . "%') ";
+        }
+        $like = '('.implode(' or ',$temp_a).')';
+
+        for ($kn = 1; $kn < count($key_a); $kn++) {
+            $binKey       = preg_match('/[a-zA-Z]/', $key_a[$kn]) ? '' : 'BINARY';
+            if (substr($key_a[$kn], 0, 1) == ",") {
+                for($ith = 0; $ith < count($match_a); $ith++) {
+//                                     $temp_a[$ith] = " (i.$match_a[$ith] LIKE '%" . addslashes(substr($key_a[$kn],1)) . "%') ";
+                    $temp_a[$ith] = " (i.$match_a[$ith] LIKE " . $binKey . " '%" . addslashes(substr($key_a[$kn], 1)) . "%') ";
+                }
+                $like .=' OR ('. implode(' or ', $temp_a).')';
+            }elseif(substr($key_a[$kn],0,1) != '-'){
+                for($ith=0;$ith<count($match_a);$ith++){
+//                                     $temp_a[$ith] = " (i.$match_a[$ith] LIKE '%" . addslashes($key_a[$kn]) . "%') ";
+                    $temp_a[$ith] = " (i.$match_a[$ith] LIKE " . $binKey . " '%" . addslashes($key_a[$kn]) . "%') ";
+                }
+                $like .=' AND ('. implode(' or ', $temp_a).')';
+            }else{
+                for($ith=0;$ith<count($match_a);$ith++){
+//                                     $temp_a[$ith] = " NOT(i.$match_a[$ith] LIKE '%" . addslashes(substr($key_a[$kn],1)) . "%') ";
+                    $temp_a[$ith] = " NOT(i.$match_a[$ith] LIKE " . $binKey . " '%" . addslashes(substr($key_a[$kn], 1)) . "%') ";
+                }
+                $like .=' AND ('. implode(' and ', $temp_a).')';
+            }
+        }
+        
+        $like = '('.$like.')';
+        return $like;
+    }
+
+/***********************************************/
+}
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/SKIN.php b/utf8/nucleus/libs/SKIN.php
new file mode 100755 (executable)
index 0000000..522a25a
--- /dev/null
@@ -0,0 +1,432 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * Class representing a skin
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: SKIN.php,v 1.8.2.1 2007/09/05 07:45:01 kimitake Exp $
+ */
+
+if ( !function_exists('requestVar') ) exit;
+require_once dirname(__FILE__) . '/ACTIONS.php';
+
+class SKIN {
+
+       // after creating a SKIN object, evaluates to true when the skin exists
+       var $isValid;
+
+       // skin characteristics. Use the getXXX methods rather than accessing directly
+       var $id;
+       var $description;
+       var $contentType;
+       var $includeMode;               // either 'normal' or 'skindir'
+       var $includePrefix;
+       var $name;
+
+       function SKIN($id) {
+               $this->id = intval($id);
+
+               // read skin name/description/content type
+               $res = sql_query('SELECT * FROM '.sql_table('skin_desc').' WHERE sdnumber=' . $this->id);
+               $obj = sql_fetch_object($res);
+               $this->isValid = (sql_num_rows($res) > 0);
+               if (!$this->isValid)
+                       return;
+
+               $this->name = $obj->sdname;
+               $this->description = $obj->sddesc;
+               $this->contentType = $obj->sdtype;
+               $this->includeMode = $obj->sdincmode;
+               $this->includePrefix = $obj->sdincpref;
+
+       }
+
+       function getID() {                              return $this->id; }
+       function getName() {                    return $this->name; }
+       function getDescription() {     return $this->description; }
+       function getContentType() {     return $this->contentType; }
+       function getIncludeMode() {     return $this->includeMode; }
+       function getIncludePrefix() {   return $this->includePrefix; }
+
+       /**
+        * Checks if a skin with a given shortname exists
+        * @param string $name Skin short name
+        * @return int number of skins with the given ID
+        * @static
+        */
+       function exists($name) {
+               return quickQuery('select count(*) as result FROM '.sql_table('skin_desc').' WHERE sdname="'.addslashes($name).'"') > 0;
+       }
+
+       /**
+        * Checks if a skin with a given ID exists
+        * @param string $id Skin ID
+        * @return int number of skins with the given ID
+        * @static
+        */
+       function existsID($id) {
+               return quickQuery('select COUNT(*) as result FROM '.sql_table('skin_desc').' WHERE sdnumber='.intval($id)) > 0;
+       }
+
+       /**
+        * Returns a skin given its shortname
+        * @param string $name Skin shortname
+        * @return object SKIN
+        * @static
+        */
+       function createFromName($name) {
+               return new SKIN(SKIN::getIdFromName($name));
+       }
+
+       /**
+        * Returns a skin ID given its shortname
+        * @param string $name Skin shortname
+        * @return int Skin ID
+        * @static
+        */
+       function getIdFromName($name) {
+               $query =  'SELECT sdnumber'
+                          . ' FROM '.sql_table('skin_desc')
+                          . ' WHERE sdname="'.addslashes($name).'"';
+               $res = sql_query($query);
+               $obj = sql_fetch_object($res);
+               return $obj->sdnumber;
+       }
+
+       /**
+        * Returns a skin shortname given its ID
+        * @param string $name
+        * @return string Skin short name
+        * @static
+        */
+       function getNameFromId($id) {
+               return quickQuery('SELECT sdname as result FROM '.sql_table('skin_desc').' WHERE sdnumber=' . intval($id));
+       }
+
+       /**
+        * Creates a new skin, with the given characteristics.
+        *
+        * @static
+        */
+       function createNew($name, $desc, $type = 'text/html', $includeMode = 'normal', $includePrefix = '') {
+               global $manager;
+
+               $manager->notify(
+                       'PreAddSkin',
+                       array(
+                               'name' => &$name,
+                               'description' => &$desc,
+                               'type' => &$type,
+                               'includeMode' => &$includeMode,
+                               'includePrefix' => &$includePrefix
+                       )
+               );
+
+               sql_query('INSERT INTO '.sql_table('skin_desc')." (sdname, sddesc, sdtype, sdincmode, sdincpref) VALUES ('" . addslashes($name) . "','" . addslashes($desc) . "','".addslashes($type)."','".addslashes($includeMode)."','".addslashes($includePrefix)."')");
+               $newid = sql_insert_id();
+
+               $manager->notify(
+                       'PostAddSkin',
+                       array(
+                               'skinid' => $newid,
+                               'name' => $name,
+                               'description' => $desc,
+                               'type' => $type,
+                               'includeMode' => $includeMode,
+                               'includePrefix' => $includePrefix
+                       )
+               );
+
+               return $newid;
+       }
+
+       function parse($type) {
+               global $manager, $CONF, $skinid;
+
+               $manager->notify('InitSkinParse',array('skin' => &$this, 'type' => $type));
+        $skinid = $this->id;
+
+               // set output type
+               sendContentType($this->getContentType(), 'skin', _CHARSET);
+
+               // set skin name as global var (so plugins can access it)
+               global $currentSkinName;
+               $currentSkinName = $this->getName();
+
+               $contents = $this->getContent($type);
+
+               if (!$contents) {
+                       // use base skin if this skin does not have contents
+                       $defskin =& new SKIN($CONF['BaseSkin']);
+                       $contents = $defskin->getContent($type);
+                       if (!$contents) {
+                               echo _ERROR_SKIN;
+                               return;
+                       }
+               }
+
+               $actions = $this->getAllowedActionsForType($type);
+
+               $manager->notify('PreSkinParse',array('skin' => &$this, 'type' => $type, 'contents' => &$contents));
+        $skinid = $this->id;
+
+               // set IncludeMode properties of parser
+               PARSER::setProperty('IncludeMode',$this->getIncludeMode());
+               PARSER::setProperty('IncludePrefix',$this->getIncludePrefix());
+
+               $handler =& new ACTIONS($type, $this);
+               $parser =& new PARSER($actions, $handler);
+               $handler->setParser($parser);
+               $handler->setSkin($this);
+               $parser->parse($contents);
+
+               $manager->notify('PostSkinParse',array('skin' => &$this, 'type' => $type));
+        $skinid = $this->id;
+
+
+       }
+
+       function getContent($type) {
+               $query = 'SELECT scontent FROM '.sql_table('skin')." WHERE sdesc=$this->id and stype='". addslashes($type) ."'";
+               $res = sql_query($query);
+
+               if (sql_num_rows($res) == 0)
+                       return '';
+               else
+                       return sql_result($res, 0, 0);
+       }
+
+       /**
+        * Updates the contents of one part of the skin
+        */
+       function update($type, $content) {
+               $skinid = $this->id;
+
+               // delete old thingie
+               sql_query('DELETE FROM '.sql_table('skin')." WHERE stype='".addslashes($type)."' and sdesc=" . intval($skinid));
+
+               // write new thingie
+               if ($content) {
+                       sql_query('INSERT INTO '.sql_table('skin')." SET scontent='" . addslashes($content) . "', stype='" . addslashes($type) . "', sdesc=" . intval($skinid));
+               }
+       }
+
+       /**
+        * Deletes all skin parts from the database
+        */
+       function deleteAllParts() {
+               sql_query('DELETE FROM '.sql_table('skin').' WHERE sdesc='.$this->getID());
+       }
+
+       /**
+        * Updates the general information about the skin
+        */
+       function updateGeneralInfo($name, $desc, $type = 'text/html', $includeMode = 'normal', $includePrefix = '') {
+               $query =  'UPDATE '.sql_table('skin_desc').' SET'
+                          . " sdname='" . addslashes($name) . "',"
+                          . " sddesc='" . addslashes($desc) . "',"
+                          . " sdtype='" . addslashes($type) . "',"
+                          . " sdincmode='" . addslashes($includeMode) . "',"
+                          . " sdincpref='" . addslashes($includePrefix) . "'"
+                          . " WHERE sdnumber=" . $this->getID();
+               sql_query($query);
+       }
+
+       /**
+        * static: returns an array of friendly names
+        */
+       function getFriendlyNames() {
+               $skintypes = array(
+                       'index' => _SKIN_PART_MAIN,
+                       'item' => _SKIN_PART_ITEM,
+                       'archivelist' => _SKIN_PART_ALIST,
+                       'archive' => _SKIN_PART_ARCHIVE,
+                       'search' => _SKIN_PART_SEARCH,
+                       'error' => _SKIN_PART_ERROR,
+                       'member' => _SKIN_PART_MEMBER,
+                       'imagepopup' => _SKIN_PART_POPUP
+               );
+
+               $query = "SELECT stype FROM " . sql_table('skin') . " WHERE stype NOT IN ('index', 'item', 'error', 'search', 'archive', 'archivelist', 'imagepopup', 'member')";
+               $res = sql_query($query);
+               while ($row = sql_fetch_array($res)) {
+                       $skintypes[strtolower($row['stype'])] = ucfirst($row['stype']);
+               }
+
+               return $skintypes;
+       }
+
+       function getAllowedActionsForType($type) {
+               global $blogid;
+
+               // some actions that can be performed at any time, from anywhere
+               $defaultActions = array('otherblog',
+                                                               'plugin',
+                                                               'version',
+                                                               'nucleusbutton',
+                                                               'include',
+                                                               'phpinclude',
+                                                               'parsedinclude',
+                                                               'loginform',
+                                                               'sitevar',
+                                                               'otherarchivelist',
+                                                               'otherarchivedaylist',
+                                                               'otherarchiveyearlist',
+                                                               'self',
+                                                               'adminurl',
+                                                               'todaylink',
+                                                               'archivelink',
+                                                               'member',
+                                                               'ifcat',                                        // deprecated (Nucleus v2.0)
+                                                               'category',
+                                                               'searchform',
+                                                               'referer',
+                                                               'skinname',
+                                                               'skinfile',
+                                                               'set',
+                                                               'if',
+                                                               'else',
+                                                               'endif',
+                                                               'elseif',
+                                                               'ifnot',
+                                                               'elseifnot',
+                                                               'charset',
+                                                               'bloglist',
+                                                               'addlink',
+                                                               'addpopupcode',
+                                                               'sticky'
+                                                               );
+
+               // extra actions specific for a certain skin type
+               $extraActions = array();
+
+               switch ($type) {
+                       case 'index':
+                               $extraActions = array('blog',
+                                                               'blogsetting',
+                                                               'preview',
+                                                               'additemform',
+                                                               'categorylist',
+                                                               'archivelist',
+                                                               'archivedaylist',
+                                                               'archiveyearlist',
+                                                               'nextlink',
+                                                               'prevlink'
+                                                               );
+                               break;
+                       case 'archive':
+                               $extraActions = array('blog',
+                                                               'archive',
+                                                               'otherarchive',
+                                                               'categorylist',
+                                                               'archivelist',
+                                                               'archivedaylist',
+                                                               'archiveyearlist',
+                                                               'blogsetting',
+                                                               'archivedate',
+                                                               'nextarchive',
+                                                               'prevarchive',
+                                                               'nextlink',
+                                                               'prevlink',
+                                                               'archivetype'
+                               );
+                               break;
+                       case 'archivelist':
+                               $extraActions = array('blog',
+                                                               'archivelist',
+                                                               'archivedaylist',
+                                                               'archiveyearlist',
+                                                               'categorylist',
+                                                               'blogsetting',
+                                                          );
+                               break;
+                       case 'search':
+                               $extraActions = array('blog',
+                                                               'archivelist',
+                                                               'archivedaylist',
+                                                               'archiveyearlist',
+                                                               'categorylist',
+                                                               'searchresults',
+                                                               'othersearchresults',
+                                                               'blogsetting',
+                                                               'query',
+                                                               'nextlink',
+                                                               'prevlink'
+                                                               );
+                               break;
+                       case 'imagepopup':
+                               $extraActions = array('image',
+                                                               'imagetext',                            // deprecated (Nucleus v2.0)
+                                                               );
+                               break;
+                       case 'member':
+                               $extraActions = array(
+                                                               'membermailform',
+                                                               'blogsetting',
+//                                                             'nucleusbutton'
+                               );
+                               break;
+                       case 'item':
+                               $extraActions = array('blog',
+                                                               'item',
+                                                               'comments',
+                                                               'commentform',
+                                                               'vars',
+                                                               'blogsetting',
+                                                               'nextitem',
+                                                               'previtem',
+                                                               'nextlink',
+                                                               'prevlink',
+                                                               'nextitemtitle',
+                                                               'previtemtitle',
+                                                               'categorylist',
+                                                               'archivelist',
+                                                               'archivedaylist',
+                                                               'archiveyearlist',
+                                                               'itemtitle',
+                                                               'itemid',
+                                                               'itemlink',
+                                                               );
+                               break;
+                       case 'error':
+                               $extraActions = array(
+                                                               'errormessage'
+                               );
+                               break;
+                       default:
+                               if ($blogid && $blogid > 0) {
+                                       $extraActions = array(
+                                               'blog',
+                                               'blogsetting',
+                                               'preview',
+                                               'additemform',
+                                               'categorylist',
+                                               'archivelist',
+                                               'archivedaylist',
+                                               'archiveyearlist',
+                                               'nextlink',
+                                               'prevlink',
+                                               'membermailform',
+//                                             'nucleusbutton'
+                                       );
+                               }
+                               break;
+               }
+
+               return array_merge($defaultActions, $extraActions);
+       }
+
+}
+
+?>
diff --git a/utf8/nucleus/libs/TEMPLATE.php b/utf8/nucleus/libs/TEMPLATE.php
new file mode 100755 (executable)
index 0000000..08df604
--- /dev/null
@@ -0,0 +1,199 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * A class representing a template
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: TEMPLATE.php,v 1.6 2006/07/20 08:01:52 kimitake Exp $
+ */
+class TEMPLATE {
+
+       var $id;
+
+       function TEMPLATE($templateid) {
+               $this->id = intval($templateid);
+       }
+
+       function getID() {
+               return intval($this->id);
+       }
+
+       // (static)
+       function createFromName($name) {
+               return new TEMPLATE(TEMPLATE::getIdFromName($name));
+       }
+
+       // (static)
+       function getIdFromName($name) {
+               $query =  'SELECT tdnumber'
+                          . ' FROM '.sql_table('template_desc')
+                          . ' WHERE tdname="'.addslashes($name).'"';
+               $res = sql_query($query);
+               $obj = sql_fetch_object($res);
+               return $obj->tdnumber;
+       }
+
+       /**
+        * Updates the general information about the template
+        */
+       function updateGeneralInfo($name, $desc) {
+               $query =  'UPDATE '.sql_table('template_desc').' SET'
+                          . " tdname='" . addslashes($name) . "',"
+                          . " tddesc='" . addslashes($desc) . "'"
+                          . " WHERE tdnumber=" . $this->getID();
+               sql_query($query);
+       }
+
+       /**
+        * Updates the contents of one part of the template
+        */
+       function update($type, $content) {
+               $id = $this->getID();
+
+               // delete old thingie
+               sql_query('DELETE FROM '.sql_table('template')." WHERE tpartname='". addslashes($type) ."' and tdesc=" . intval($id));
+
+               // write new thingie
+               if ($content) {
+                       sql_query('INSERT INTO '.sql_table('template')." SET tcontent='" . addslashes($content) . "', tpartname='" . addslashes($type) . "', tdesc=" . intval($id));
+               }
+       }
+
+
+       /**
+        * Deletes all template parts from the database
+        */
+       function deleteAllParts() {
+               sql_query('DELETE FROM '.sql_table('template').' WHERE tdesc='.$this->getID());
+       }
+
+       /**
+        * Creates a new template
+        *
+        * (static)
+        */
+       function createNew($name, $desc) {
+               global $manager;
+
+               $manager->notify(
+                       'PreAddTemplate',
+                       array(
+                               'name' => &$name,
+                               'description' => &$desc
+                       )
+               );
+
+               sql_query('INSERT INTO '.sql_table('template_desc')." (tdname, tddesc) VALUES ('" . addslashes($name) . "','" . addslashes($desc) . "')");
+               $newId = sql_insert_id();
+
+               $manager->notify(
+                       'PostAddTemplate',
+                       array(
+                               'templateid' => $newId,
+                               'name' => $name,
+                               'description' => $desc
+                       )
+               );
+
+               return $newId;
+       }
+
+
+
+       /**
+        * Reads a template and returns an array with the parts.
+        * (static)
+        *
+        * @param $name name of the template file
+        */
+       function read($name) {
+               global $manager;
+               $manager->notify(
+                       'PreTemplateRead',
+                       array(
+                               'template' => &$name
+                       )
+               );
+
+               $query = 'SELECT tpartname, tcontent'
+                          . ' FROM '.sql_table('template_desc').', '.sql_table('template')
+                          . ' WHERE tdesc=tdnumber and tdname="' . addslashes($name) . '"';
+               $res = sql_query($query);
+               while ($obj = sql_fetch_object($res))
+                       $template[$obj->tpartname] = $obj->tcontent;
+
+               // set locale according to template:
+               if (isset($template['LOCALE']))
+                       setlocale(LC_TIME,$template['LOCALE']);
+               else
+                       setlocale(LC_TIME,'');
+
+               return $template;
+       }
+
+       /**
+         * fills a template with values
+         * (static)
+         *
+         * @param $template
+         *             Template to be used
+         * @param $values
+         *             Array of all the values
+         */
+       function fill($template, $values) {
+
+               if (sizeof($values) != 0) {
+                       // go through all the values
+                       for(reset($values); $key = key($values); next($values)) {
+                               $template = str_replace("<%$key%>",$values[$key],$template);
+                       }
+               }
+
+               // remove non matched template-tags
+               return preg_replace('/<%[a-zA-Z]+%>/','',$template);
+       }
+
+       // returns true if there is a template with the given shortname
+       // (static)
+       function exists($name) {
+               $r = sql_query('select * FROM '.sql_table('template_desc').' WHERE tdname="'.addslashes($name).'"');
+               return (sql_num_rows($r) != 0);
+       }
+
+       // returns true if there is a template with the given ID
+       // (static)
+       function existsID($id) {
+               $r = sql_query('select * FROM '.sql_table('template_desc').' WHERE tdnumber='.intval($id));
+               return (sql_num_rows($r) != 0);
+       }
+
+       // (static)
+       function getNameFromId($id) {
+               return quickQuery('SELECT tdname as result FROM '.sql_table('template_desc').' WHERE tdnumber=' . intval($id));
+       }
+
+       // (static)
+       function getDesc($id) {
+               $query = 'SELECT tddesc FROM '.sql_table('template_desc').' WHERE tdnumber='. intval($id);
+               $res = sql_query($query);
+               $obj = sql_fetch_object($res);
+               return $obj->tddesc;
+       }
+
+
+
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/backup.php b/utf8/nucleus/libs/backup.php
new file mode 100755 (executable)
index 0000000..50fd091
--- /dev/null
@@ -0,0 +1,546 @@
+<?php\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+/**\r
+ * Scripts to create/restore a backup of the Nucleus database\r
+ *\r
+ * Based on code in phpBB (http://phpBB.sourceforge.net)\r
+ *\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ * $NucleusJP: backup.php,v 1.8.2.1 2007/08/08 05:23:31 kimitake Exp $\r
+ */\r
+\r
+\r
+class Backup\r
+{ \r
+\r
+       /**\r
+        * Constructor\r
+        */\r
+       function Backup()\r
+       {\r
+               // do nothing\r
+       }\r
+       \r
+       \r
+       /**\r
+         * This function creates an sql dump of the database and sends it to\r
+         * the user as a file (can be gzipped if they want)\r
+         *\r
+         * @requires\r
+         *             no output may have preceded (new headers are sent)\r
+         * @param gzip\r
+         *             1 = compress backup file, 0 = no compression (default)\r
+         */\r
+       function do_backup($gzip = 0) {\r
+               global $manager;\r
+               \r
+               // tables of which backup is needed\r
+               $tables = array(\r
+                                               sql_table('actionlog'),\r
+                                               sql_table('ban'),\r
+                                               sql_table('blog'),\r
+                                               sql_table('comment'),\r
+                                               sql_table('config'),\r
+                                               sql_table('item'),\r
+                                               sql_table('karma'),\r
+                                               sql_table('member'),\r
+                                               sql_table('skin'),\r
+                                               sql_table('skin_desc'),\r
+                                               sql_table('team'),\r
+                                               sql_table('template'),\r
+                                               sql_table('template_desc'),\r
+                                               sql_table('plugin'),\r
+                                               sql_table('plugin_event'),\r
+                                               sql_table('plugin_option'),\r
+                                               sql_table('plugin_option_desc'),\r
+                                               sql_table('category'),\r
+                                               sql_table('activation'),\r
+                                               sql_table('tickets'),\r
+                                 );\r
+               \r
+               // add tables that plugins want to backup to the list\r
+               // catch all output generated by plugins\r
+               ob_start();\r
+               $res = sql_query('SELECT pfile FROM '.sql_table('plugin'));\r
+               while ($plugName = sql_fetch_object($res)) {\r
+                       $plug =& $manager->getPlugin($plugName->pfile);\r
+                       if ($plug) $tables = array_merge($tables, (array) $plug->getTableList());\r
+               }\r
+               ob_end_clean();\r
+               \r
+               // remove duplicates\r
+               $tables = array_unique($tables);\r
+               \r
+               // make sure browsers don't cache the backup\r
+               header("Pragma: no-cache");\r
+               \r
+               // don't allow gzip compression when extension is not loaded\r
+               if (($gzip != 0) && !extension_loaded("zlib")) {\r
+                       $gzip = 0;\r
+               }\r
+               \r
+               if ($gzip) {\r
+                       // use an output buffer\r
+                       @ob_start();\r
+                       @ob_implicit_flush(0);\r
+               \r
+               // set filename\r
+               $filename = 'nucleus_db_backup_'.strftime("%Y-%m-%d-%H-%M-%S", time()).".sql.gz";\r
+               } else {\r
+               $filename = 'nucleus_db_backup_'.strftime("%Y-%m-%d-%H-%M-%S", time()).".sql";\r
+               }\r
+               \r
+               \r
+               // send headers that tell the browser a file is coming\r
+               header("Content-Type: text/x-delimtext; name=\"$filename\"");\r
+               header("Content-disposition: attachment; filename=$filename");\r
+               \r
+               // dump header\r
+               echo "#\n";\r
+               echo "# " . _BACKUP_BACKUPFILE_TITLE . " \n";\r
+               echo "# " . _ADMINPAGEFOOT_OFFICIALURL . "\n";\r
+               echo "#\n";\r
+               echo "# " . _BACKUP_BACKUPFILE_BACKUPDATE .  gmdate("d-m-Y H:i:s", time()) . " GMT\n";\r
+               global $nucleus;\r
+               echo "# " . _BACKUP_BACKUPFILE_NUCLEUSVERSION . $nucleus['version'] . "\n";\r
+               echo "#\n";\r
+               echo "# " . _BACKUP_WARNING_NUCLEUSVERSION . "\n";\r
+               echo "#\n";\r
+               \r
+               // dump all tables\r
+               reset($tables);\r
+               array_walk($tables, array(&$this, '_backup_dump_table'));\r
+               \r
+               if($gzip) {\r
+                       $Size = ob_get_length();\r
+                       $Crc = crc32(ob_get_contents());\r
+                       $contents = gzcompress(ob_get_contents());\r
+                       ob_end_clean();\r
+                       echo "\x1f\x8b\x08\x00\x00\x00\x00\x00".substr($contents, 0, strlen($contents) - 4).$this->gzip_PrintFourChars($Crc).$this->gzip_PrintFourChars($Size);\r
+               }\r
+               \r
+               exit;\r
+       \r
+       }\r
+       \r
+       \r
+       /**\r
+         * Creates a dump for a single table\r
+         * ($tablename and $key are filled in by array_walk)\r
+         */\r
+       function _backup_dump_table($tablename, $key) {\r
+       \r
+               echo "#\n";\r
+               echo "# " . _BACKUP_BACKUPFILE_TABLE_NAME . $tablename . "\n";\r
+               echo "#\n";\r
+       \r
+               // dump table structure\r
+               $this->_backup_dump_structure($tablename);\r
+       \r
+               // dump table contents\r
+               $this->_backup_dump_contents($tablename);\r
+       }\r
+\r
+       /**\r
+         * Creates a dump of the table structure for one table\r
+         */\r
+       function _backup_dump_structure($tablename) {\r
+       \r
+               // add command to drop table on restore\r
+               echo "DROP TABLE IF EXISTS $tablename;\n";\r
+               $result = sql_query("SHOW CREATE TABLE $tablename");\r
+               $create = sql_fetch_assoc($result);\r
+               echo $create['Create Table'];\r
+               echo ";\n\n";\r
+       }\r
+\r
+       /**\r
+         * Creates a dump of the table structure for one table\r
+         */\r
+/* replaced by code above in 3.5\r
+       function _backup_dump_structure($tablename) {\r
+       \r
+               // add command to drop table on restore\r
+               echo "DROP TABLE IF EXISTS $tablename;\n";\r
+               echo "CREATE TABLE $tablename(\n";\r
+       \r
+               //\r
+               // Ok lets grab the fields...\r
+               //\r
+               $result = mysql_query("SHOW FIELDS FROM $tablename");\r
+               $row = mysql_fetch_array($result);\r
+               while ($row) {\r
+       \r
+                       echo '  `' . $row['Field'] . '` ' . $row['Type'];\r
+       \r
+                       if(isset($row['Default']))\r
+                               echo ' DEFAULT \'' . $row['Default'] . '\'';\r
+       \r
+                       if($row['Null'] != "YES")\r
+                               echo ' NOT NULL';\r
+       \r
+                       if($row['Extra'] != "")\r
+                               echo ' ' . $row['Extra'];\r
+       \r
+                       $row = mysql_fetch_array($result);\r
+       \r
+                       // add comma's except for last one\r
+                       if ($row)\r
+                               echo ",\n";\r
+               }\r
+               \r
+               //\r
+               // Get any Indexed fields from the database...\r
+               //\r
+               $result = mysql_query("SHOW KEYS FROM $tablename");\r
+               while($row = mysql_fetch_array($result)) {\r
+                       $kname = $row['Key_name'];\r
+       \r
+                       if(($kname != 'PRIMARY') && ($row['Non_unique'] == 0))\r
+                               $kname = "UNIQUE|$kname";\r
+                       if(($kname != 'PRIMARY') && ($row['Index_type'] == 'FULLTEXT'))\r
+                               $kname = "FULLTEXT|$kname";\r
+       \r
+                       if(!is_array($index[$kname]))\r
+                               $index[$kname] = array();\r
+       \r
+                       $index[$kname][] = $row['Column_name'] . ( ($row['Sub_part']) ? ' (' . $row['Sub_part'] . ')' : '');\r
+               }\r
+\r
+               while(list($x, $columns) = @each($index)) {\r
+                       echo ", \n";\r
+       \r
+                       if($x == 'PRIMARY')\r
+                               echo '  PRIMARY KEY (`' . implode($columns, '`, `') . '`)';\r
+                       elseif (substr($x,0,6) == 'UNIQUE')\r
+                               echo '  UNIQUE KEY ' . substr($x,7) . ' (`' . implode($columns, '`, `') . '`)';\r
+                       elseif (substr($x,0,8) == 'FULLTEXT')\r
+                               echo '  FULLTEXT KEY ' . substr($x,9) . ' (`' . implode($columns, '`, `') . '`)';\r
+                       elseif (($x == 'ibody') || ($x == 'cbody'))                     // karma 2004-05-30 quick and dirty fix. fulltext keys were not in SQL correctly.\r
+                               echo '  FULLTEXT KEY ' . substr($x,9) . ' (`' . implode($columns, '`, `') . '`)';\r
+                       else\r
+                               echo "  KEY $x (`" . implode($columns, '`, `') . '`)';\r
+               }\r
+       \r
+               echo "\n);\n\n";\r
+       }\r
+*/\r
+\r
+       /**\r
+        * Returns the field named for the given table in the \r
+        * following format:\r
+        *\r
+        * (column1, column2, ..., columnn)\r
+        */\r
+       function _backup_get_field_names($result, $num_fields) {\r
+       \r
+       /*      if (function_exists('mysqli_fetch_fields') ) {\r
+                       \r
+                       $fields = mysqli_fetch_fields($result);\r
+                       for ($j = 0; $j < $num_fields; $j++)\r
+                               $fields[$j] = $fields[$j]->name;\r
+       \r
+               } else {*/\r
+       \r
+                       $fields = array();\r
+                       for ($j = 0; $j < $num_fields; $j++) {\r
+                               $fields[] = sql_field_name($result, $j);\r
+                       }\r
+       \r
+       /*      }*/\r
+               \r
+               return '(`' . implode('`, `', $fields) . '`)';  \r
+       }\r
+\r
+       /**\r
+         * Creates a dump of the table content for one table     \r
+         */\r
+       function _backup_dump_contents($tablename) {\r
+               //\r
+               // Grab the data from the table.\r
+               //\r
+               $result = sql_query("SELECT * FROM $tablename");\r
+       \r
+               if(sql_num_rows($result) > 0)\r
+                       echo "\n#\n# " . sprintf(_BACKUP_BACKUPFILE_TABLEDATAFOR, $tablename) . "\n#\n";\r
+                       \r
+               $num_fields = sql_num_fields($result);\r
+               \r
+               //\r
+               // Compose fieldname list\r
+               //\r
+               $tablename_list = $this->_backup_get_field_names($result, $num_fields);\r
+                       \r
+               //\r
+               // Loop through the resulting rows and build the sql statement.\r
+               //\r
+               while ($row = sql_fetch_array($result))\r
+               {\r
+                       // Start building the SQL statement.\r
+       \r
+                       echo "INSERT INTO `".$tablename."` $tablename_list VALUES(";\r
+       \r
+                       // Loop through the rows and fill in data for each column\r
+                       for ($j = 0; $j < $num_fields; $j++) {\r
+                               if(!isset($row[$j])) {\r
+                                       // no data for column\r
+                                       echo ' NULL';\r
+                               } elseif ($row[$j] != '') {\r
+                                       // data\r
+                                       echo " '" . addslashes($row[$j]) . "'";\r
+                               } else {\r
+                                       // empty column (!= no data!)\r
+                                       echo "''";\r
+                               }\r
+       \r
+                               // only add comma when not last column\r
+                               if ($j != ($num_fields - 1))\r
+                                       echo ",";\r
+                       }\r
+       \r
+                       echo ");\n";\r
+       \r
+               }\r
+       \r
+       \r
+               echo "\n";\r
+       \r
+       }\r
+\r
+       /**\r
+        * copied from phpBB\r
+        */             \r
+       function gzip_PrintFourChars($Val)\r
+       {\r
+               for ($i = 0; $i < 4; $i ++)\r
+               {\r
+                       $return .= chr($Val % 256);\r
+                       $Val = floor($Val / 256);\r
+               }\r
+               return $return;\r
+       }\r
+\r
+       /**\r
+        * Restores a database backup\r
+        */     \r
+       function do_restore() {\r
+       \r
+               $uploadInfo = postFileInfo('backup_file');\r
+       \r
+               // first of all: get uploaded file:\r
+               if (empty($uploadInfo['name']))\r
+                       return _BACKUP_RESTOR_NOFILEUPLOADED;\r
+               if (!is_uploaded_file($uploadInfo['tmp_name']))\r
+                       return _BACKUP_RESTOR_NOFILEUPLOADED;\r
+       \r
+               $backup_file_name = $uploadInfo['name'];\r
+               $backup_file_tmpname = $uploadInfo['tmp_name'];\r
+               $backup_file_type = $uploadInfo['type'];\r
+       \r
+               if (!file_exists($backup_file_tmpname))\r
+                       return _BACKUP_RESTOR_UPLOAD_ERROR;\r
+       \r
+               if (!preg_match("/^(text\/[a-zA-Z]+)|(application\/(x\-)?gzip(\-compressed)?)|(application\/octet-stream)$/is", $backup_file_type) )\r
+                       return _BACKUP_RESTOR_UPLOAD_NOCORRECTTYPE;\r
+       \r
+       \r
+               if (preg_match("/\.gz/is",$backup_file_name))\r
+                       $gzip = 1;\r
+               else\r
+                       $gzip = 0;\r
+       \r
+               if (!extension_loaded("zlib") && $gzip)\r
+                       return _BACKUP_RESTOR_UPLOAD_NOZLIB;\r
+       \r
+               // get sql query according to gzip setting (either decompress, or not)\r
+               if($gzip)\r
+               {\r
+                       // decompress and read\r
+                       $gz_ptr = gzopen($backup_file_tmpname, 'rb');\r
+                       $sql_query = "";\r
+                       while( !gzeof($gz_ptr) )\r
+                               $sql_query .= gzgets($gz_ptr, 100000);\r
+               } else {\r
+                       // just read\r
+                       $fsize = filesize($backup_file_tmpname);\r
+                       if ($fsize <= 0)\r
+                               $sql_query = '';\r
+                       else\r
+                               $sql_query = fread(fopen($backup_file_tmpname, 'r'), $fsize);\r
+               }\r
+       \r
+               // time to execute the query\r
+               $this->_execute_queries($sql_query);\r
+       }\r
+\r
+       /**\r
+        * Executes a SQL query\r
+        */     \r
+       function _execute_queries($sql_query) {\r
+               if (!$sql_query) return;\r
+       \r
+               // Strip out sql comments...\r
+               $sql_query = $this->remove_remarks($sql_query);\r
+               $pieces = $this->split_sql_file($sql_query);\r
+       \r
+               $sql_count = count($pieces);\r
+               for($i = 0; $i < $sql_count; $i++)\r
+               {\r
+                       $sql = trim($pieces[$i]);\r
+       \r
+                       if(!empty($sql) and $sql[0] != "#")\r
+                       {\r
+                               // DEBUG\r
+       //                      debug("Executing: " . htmlspecialchars($sql) . "\n");\r
+       \r
+                               $result = sql_query($sql);\r
+                               if (!$result) debug(_BACKUP_RESTOR_SQL_ERROR . sql_error());\r
+       \r
+                       }\r
+               }\r
+       \r
+       }\r
+\r
+       /**\r
+        * remove_remarks will strip the sql comment lines\r
+        * out of an uploaded sql file\r
+        */     \r
+       function remove_remarks($sql)\r
+       {\r
+               $lines = explode("\n", $sql);\r
+       \r
+               // try to keep mem. use down\r
+               $sql = "";\r
+       \r
+               $linecount = count($lines);\r
+               $output = "";\r
+       \r
+               for ($i = 0; $i < $linecount; $i++)\r
+               {\r
+                       if (($i != ($linecount - 1)) || (strlen($lines[$i]) > 0))\r
+                       {\r
+                               if ($lines[$i][0] != "#")\r
+                               {\r
+                                       $output .= $lines[$i] . "\n";\r
+                               }\r
+                               else\r
+                               {\r
+                                       $output .= "\n";\r
+                               }\r
+                               // Trading a bit of speed for lower mem. use here.\r
+                               $lines[$i] = "";\r
+                       }\r
+               }\r
+       \r
+               return $output;\r
+       \r
+       }\r
+\r
+       /**\r
+        * split_sql_file will split an uploaded sql file\r
+        * into single sql statements.\r
+        *       \r
+        * Note: expects trim() to have already been run on $sql.        \r
+        * taken from phpBB\r
+        */      \r
+       function split_sql_file($sql)\r
+       {\r
+               // Split up our string into "possible" SQL statements.\r
+               $tokens = explode( ";", $sql);\r
+       \r
+               // try to save mem.\r
+               $sql = "";\r
+               $output = array();\r
+       \r
+               // we don't actually care about the matches preg gives us.\r
+               $matches = array();\r
+       \r
+               // this is faster than calling count($tokens) every time thru the loop.\r
+               $token_count = count($tokens);\r
+               for ($i = 0; $i < $token_count; $i++)\r
+               {\r
+                       // Don't wanna add an empty string as the last thing in the array.\r
+                       if (($i != ($token_count - 1)) || (strlen($tokens[$i] > 0)))\r
+                       {\r
+       \r
+                               // even number of quotes means a complete SQL statement\r
+                               if ($this->_evenNumberOfQuotes($tokens[$i]))\r
+                               {\r
+                                       $output[] = $tokens[$i];\r
+                                       $tokens[$i] = "";       // save memory.\r
+                               }\r
+                               else\r
+                               {\r
+                                       // incomplete sql statement. keep adding tokens until we have a complete one.\r
+                                       // $temp will hold what we have so far.\r
+                                       $temp = $tokens[$i] .  ";";\r
+                                       $tokens[$i] = "";       // save memory..\r
+       \r
+                                       // Do we have a complete statement yet?\r
+                                       $complete_stmt = false;\r
+       \r
+                                       for ($j = $i + 1; (!$complete_stmt && ($j < $token_count)); $j++)\r
+                                       {\r
+                                               // odd number of quotes means a completed statement\r
+                                               // (in combination with the odd number we had already)\r
+                                               if (!$this->_evenNumberOfQuotes($tokens[$j]))\r
+                                               {\r
+                                                       $output[] = $temp . $tokens[$j];\r
+       \r
+                                                       // save memory.\r
+                                                       $tokens[$j] = "";\r
+                                                       $temp = "";\r
+       \r
+                                                       // exit the loop.\r
+                                                       $complete_stmt = true;\r
+                                                       // make sure the outer loop continues at the right point.\r
+                                                       $i = $j;\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       // even number of unescaped quotes. We still don't have a complete statement.\r
+                                                       // (1 odd and 1 even always make an odd)\r
+                                                       $temp .= $tokens[$j] .  ";";\r
+                                                       // save memory.\r
+                                                       $tokens[$j] = "";\r
+                                               }\r
+       \r
+                                       } // for..\r
+                               } // else\r
+                       }\r
+               }\r
+       \r
+               return $output;\r
+       }\r
+\r
+       /**\r
+        * sub function of split_sql_file\r
+        *       \r
+        * taken from phpBB\r
+        */      \r
+       function _evenNumberOfQuotes($text) {\r
+                       // This is the total number of single quotes in the token.\r
+                       $total_quotes = preg_match_all("/'/", $text, $matches);\r
+                       // Counts single quotes that are preceded by an odd number of backslashes,\r
+                       // which means they're escaped quotes.\r
+                       $escaped_quotes = preg_match_all("/(?<!\\\\)(\\\\\\\\)*\\\\'/", $text, $matches);\r
+       \r
+                       $unescaped_quotes = $total_quotes - $escaped_quotes;\r
+       //              debug($total_quotes . "-" . $escaped_quotes . "-" . $unescaped_quotes);\r
+                       return (($unescaped_quotes % 2) == 0);\r
+       }\r
+\r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/entity.php b/utf8/nucleus/libs/entity.php
new file mode 100644 (file)
index 0000000..3411d7b
--- /dev/null
@@ -0,0 +1,186 @@
+<?php
+
+class entity {
+
+       function named_to_numeric ($string) {
+               $string = preg_replace('/(&[0-9A-Za-z]+)(;?\=?|([^A-Za-z0-9\;\:\.\-\_]))/e', "entity::_named('\\1', '\\2') . '\\3'", $string);
+               return $string; 
+       }
+       
+       function normalize_numeric ($string) {
+               global $_entities;
+               $string = preg_replace('/&#([0-9]+)(;)?/e', "'&#x'.dechex('\\1').';'", $string);
+               $string = preg_replace('/&#[Xx](0)*([0-9A-Fa-f]+)(;?|([^A-Za-z0-9\;\:\.\-\_]))/e', "'&#x' . strtoupper('\\2') . ';\\4'", $string);
+               $string = strtr($string, $_entities['cp1251']);
+               return $string;
+       }
+       function numeric_to_utf8 ($string) {
+               $string = preg_replace('/&#([0-9]+)(;)?/e', "'&#x'.dechex('\\1').';'", $string);
+               $string = preg_replace('/&#[Xx](0)*([0-9A-Fa-f]+)(;?|([^A-Za-z0-9\;\:\.\-\_]))/e', "'&#x' . strtoupper('\\2') . ';\\4'", $string);
+               $string = preg_replace('/&#x([0-9A-Fa-f]+);/e', "entity::_hex_to_utf8('\\1')", $string);                
+               return $string;         
+       }
+
+       function numeric_to_named ($string) {
+               global $_entities;
+               $string = preg_replace('/&#[Xx]([0-9A-Fa-f]+)/e', "'&#'.hexdec('\\1')", $string);
+               $string = strtr($string, array_flip($_entities['named']));
+               return $string; 
+       }
+       
+       function specialchars ($string, $type = 'xml') {
+               $apos = $type == 'xml' ? '&apos;' : '&#39;';
+               $specialchars = array (
+                       '&quot;'        => '&quot;',            '&amp;'         => '&amp;',             
+                       '&apos;'        => $apos,                       '&lt;'          => '&lt;',              
+                       '&gt;'          => '&gt;',                      '"'                     => '&quot;',
+                       '&'                     => '&amp;',                     "'"                     => $apos,
+                       '<'                     => '&lt;',                      '>'                     => '&gt;'
+               );
+       
+               $string = preg_replace('/&(#?[Xx]?[0-9A-Za-z]+);/', "[[[ENTITY:\\1]]]", $string);               
+               $string = strtr($string, $specialchars);
+               $string = preg_replace('/\[\[\[ENTITY\:([^\]]+)\]\]\]/', "&\\1;", $string);             
+               return $string;
+       }
+       
+
+       function _hex_to_utf8($s)
+       {
+               $c = hexdec($s);
+       
+               if ($c < 0x80) {
+                       $str = chr($c);
+               }
+               else if ($c < 0x800) {
+                       $str = chr(0xC0 | $c>>6) . chr(0x80 | $c & 0x3F);
+               }
+               else if ($c < 0x10000) {
+                       $str = chr(0xE0 | $c>>12) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F);
+               }
+               else if ($c < 0x200000) {
+                       $str = chr(0xF0 | $c>>18) . chr(0x80 | $c>>12 & 0x3F) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F);
+               }
+                               
+               return $str;
+       }               
+
+       function _named($entity, $extra) {
+               global $_entities;
+               
+               if ($extra == '=') return $entity . '=';
+               
+               $length = strlen($entity);
+
+               while ($length > 0) {
+                       $check = substr($entity, 0, $length);
+                       if (isset($_entities['named'][$check])) return $_entities['named'][$check] . ';' . substr($entity, $length);
+                       $length--;
+               }
+               
+               return $entity . ($extra == ';' ? ';' : '');
+       }
+}
+
+
+$_entities['cp1251'] = array (
+       '&#x80;'                => '&#x20AC;',  '&#x82;'                => '&#x201A;',  '&#x83;'                => '&#x192;',   
+       '&#x84;'                => '&#x201E;',  '&#x85;'                => '&#x2026;',  '&#x86;'                => '&#x2020;',  
+       '&#x87;'                => '&#x2021;',  '&#x88;'                => '&#x2C6;',   '&#x89;'                => '&#x2030;',  
+       '&#x8A;'                => '&#x160;',   '&#x8B;'                => '&#x2039;',  '&#x8C;'                => '&#x152;',   
+       '&#x8E;'                => '&#x17D;',   '&#x91;'                => '&#x2018;',  '&#x92;'                => '&#x2019;',  
+       '&#x93;'                => '&#x201C;',  '&#x94;'                => '&#x201D;',  '&#x95;'                => '&#x2022;',  
+       '&#x96;'                => '&#x2013;',  '&#x97;'                => '&#x2014;',  '&#x98;'                => '&#x2DC;',   
+       '&#x99;'                => '&#x2122;',  '&#x9A;'                => '&#x161;',   '&#x9B;'                => '&#x203A;',  
+       '&#x9C;'                => '&#x153;',   '&#x9E;'                => '&#x17E;',   '&#x9F;'                => '&#x178;',   
+);
+       
+$_entities['named'] = array (
+       '&nbsp'                 => '&#160',             '&iexcl'                => '&#161',             '&cent'                 => '&#162',     
+       '&pound'                => '&#163',             '&curren'               => '&#164',             '&yen'                  => '&#165',     
+       '&brvbar'               => '&#166',     '&sect'                 => '&#167',             '&uml'                  => '&#168',     
+       '&copy'                 => '&#169',             '&ordf'                 => '&#170',             '&laquo'                => '&#171',     
+       '&not'                  => '&#172',             '&shy'                  => '&#173',             '&reg'                  => '&#174',     
+       '&macr'                 => '&#175',             '&deg'                  => '&#176',             '&plusmn'               => '&#177',     
+       '&sup2'                 => '&#178',             '&sup3'                 => '&#179',     '&acute'                => '&#180',     
+       '&micro'                => '&#181',     '&para'                 => '&#182',             '&middot'               => '&#183',     
+       '&cedil'                => '&#184',     '&sup1'                 => '&#185',             '&ordm'                 => '&#186',     
+       '&raquo'                => '&#187',             '&frac14'               => '&#188',             '&frac12'               => '&#189',     
+       '&frac34'               => '&#190',             '&iquest'               => '&#191',             '&Agrave'               => '&#192',     
+       '&Aacute'               => '&#193',             '&Acirc'                => '&#194',             '&Atilde'               => '&#195',     
+       '&Auml'                 => '&#196',             '&Aring'                => '&#197',             '&AElig'                => '&#198',     
+       '&Ccedil'               => '&#199',     '&Egrave'               => '&#200',             '&Eacute'               => '&#201',     
+       '&Ecirc'                => '&#202',             '&Euml'                 => '&#203',             '&Igrave'               => '&#204',     
+       '&Iacute'               => '&#205',             '&Icirc'                => '&#206',             '&Iuml'                 => '&#207',     
+       '&ETH'                  => '&#208',             '&Ntilde'               => '&#209',             '&Ograve'               => '&#210',     
+       '&Oacute'               => '&#211',             '&Ocirc'                => '&#212',             '&Otilde'               => '&#213',     
+       '&Ouml'                 => '&#214',             '&times'                => '&#215',             '&Oslash'               => '&#216',     
+       '&Ugrave'               => '&#217',             '&Uacute'               => '&#218',             '&Ucirc'                => '&#219',     
+       '&Uuml'                 => '&#220',             '&Yacute'               => '&#221',             '&THORN'                => '&#222',     
+       '&szlig'                => '&#223',             '&agrave'               => '&#224',             '&aacute'               => '&#225',     
+       '&acirc'                => '&#226',             '&atilde'               => '&#227',             '&auml'                 => '&#228',     
+       '&aring'                => '&#229',             '&aelig'                => '&#230',             '&ccedil'               => '&#231',     
+       '&egrave'               => '&#232',             '&eacute'               => '&#233',             '&ecirc'                => '&#234',     
+       '&euml'                 => '&#235',             '&igrave'               => '&#236',             '&iacute'               => '&#237',     
+       '&icirc'                => '&#238',             '&iuml'                 => '&#239',             '&eth'                  => '&#240',     
+       '&ntilde'               => '&#241',             '&ograve'               => '&#242',             '&oacute'               => '&#243',     
+       '&ocirc'                => '&#244',             '&otilde'               => '&#245',             '&ouml'                 => '&#246',     
+       '&divide'               => '&#247',             '&oslash'               => '&#248',             '&ugrave'               => '&#249',     
+       '&uacute'               => '&#250',             '&ucirc'                => '&#251',             '&uuml'                 => '&#252',     
+       '&yacute'               => '&#253',             '&thorn'                => '&#254',             '&yuml'                 => '&#255',     
+       '&OElig'                => '&#338',             '&oelig'                => '&#229',             '&Scaron'               => '&#352',     
+       '&scaron'               => '&#353',             '&Yuml'                 => '&#376',             '&circ'                 => '&#710',     
+       '&tilde'                => '&#732',     '&esnp'                 => '&#8194',    '&emsp'                 => '&#8195',    
+       '&thinsp'               => '&#8201',    '&zwnj'                 => '&#8204',    '&zwj'                  => '&#8205',    
+       '&lrm'                  => '&#8206',    '&rlm'                  => '&#8207',    '&ndash'                => '&#8211',    
+       '&mdash'                => '&#8212',    '&lsquo'                => '&#8216',    '&rsquo'                => '&#8217',    
+       '&sbquo'                => '&#8218',    '&ldquo'                => '&#8220',    '&rdquo'                => '&#8221',    
+       '&bdquo'                => '&#8222',    '&dagger'               => '&#8224',    '&Dagger'               => '&#8225',    
+       '&permil'               => '&#8240',    '&lsaquo'               => '&#8249',    '&rsaquo'               => '&#8250',
+       '&euro'                 => '&#8364',    '&fnof'                 => '&#402',             '&Alpha'                => '&#913',     
+       '&Beta'                 => '&#914',             '&Gamma'                => '&#915',             '&Delta'                => '&#916',     
+       '&Epsilon'              => '&#917',             '&Zeta'                 => '&#918',             '&Eta'                  => '&#919',     
+       '&Theta'                => '&#920',             '&Iota'                 => '&#921',             '&Kappa'                => '&#922',     
+       '&Lambda'               => '&#923',             '&Mu'                   => '&#924',             '&Nu'                   => '&#925',     
+       '&Xi'                   => '&#926',             '&Omicron'              => '&#927',             '&Pi'                   => '&#928',     
+       '&Rho'                  => '&#929',             '&Sigma'                => '&#931',             '&Tau'                  => '&#932',     
+       '&Upsilon'              => '&#933',     '&Phi'                  => '&#934',             '&Chi'                  => '&#935',     
+       '&Psi'                  => '&#936',             '&Omega'                => '&#937',             '&alpha'                => '&#945',     
+       '&beta'                 => '&#946',             '&gamma'                => '&#947',             '&delta'                => '&#948',     
+       '&epsilon'              => '&#949',             '&zeta'                 => '&#950',             '&eta'                  => '&#951',     
+       '&theta'                => '&#952',             '&iota'                 => '&#953',             '&kappa'                => '&#954',     
+       '&lambda'               => '&#955',             '&mu'                   => '&#956',             '&nu'                   => '&#957',     
+       '&xi'                   => '&#958',             '&omicron'              => '&#959',             '&pi'                   => '&#960',     
+       '&rho'                  => '&#961',             '&sigmaf'               => '&#962',             '&sigma'                => '&#963',     
+       '&tau'                  => '&#964',             '&upsilon'              => '&#965',     '&phi'                  => '&#966',     
+       '&chi'                  => '&#967',             '&psi'                  => '&#968',             '&omega'                => '&#969',     
+       '&thetasym'             => '&#977',             '&upsih'                => '&#978',             '&piv'                  => '&#982',     
+       '&bull'                 => '&#8226',    '&hellip'               => '&#8230',    '&prime'                => '&#8242',    
+       '&Prime'                => '&#8243',    '&oline'                => '&#8254',    '&frasl'                => '&#8260',    
+       '&weierp'               => '&#8472',    '&image'                => '&#8465',    '&real'                 => '&#8476',    
+       '&trade'                => '&#8482',    '&alefsym'              => '&#8501',    '&larr'                 => '&#8592',    
+       '&uarr'                 => '&#8593',    '&rarr'                 => '&#8594',    '&darr'                 => '&#8595',    
+       '&harr'                 => '&#8596',    '&crarr'                => '&#8629',    '&lArr'                 => '&#8656',    
+       '&uArr'                 => '&#8657',    '&rArr'                 => '&#8658',    '&dArr'                 => '&#8659',    
+       '&hArr'                 => '&#8660',    '&forall'               => '&#8704',    '&part'                 => '&#8706',    
+       '&exist'                => '&#8707',    '&empty'                => '&#8709',    '&nabla'                => '&#8711',    
+       '&isin'                 => '&#8712',    '&notin'                => '&#8713',    '&ni'                   => '&#8715',    
+       '&prod'                 => '&#8719',    '&sum'                  => '&#8721',    '&minus'                => '&#8722',    
+       '&lowast'               => '&#8727',    '&radic'                => '&#8730',    '&prop'                 => '&#8733',    
+       '&infin'                => '&#8734',    '&ang'                  => '&#8736',    '&and'                  => '&#8743',    
+       '&or'                   => '&#8744',    '&cap'                  => '&#8745',    '&cup'                  => '&#8746',    
+       '&int'                  => '&#8747',    '&there4'               => '&#8756',    '&sim'                  => '&#8764',    
+       '&cong'                 => '&#8773',    '&asymp'                => '&#8776',    '&ne'                   => '&#8800',    
+       '&equiv'                => '&#8801',    '&le'                   => '&#8804',    '&ge'                   => '&#8805',    
+       '&sub'                  => '&#8834',    '&sup'                  => '&#8835',    '&nsub'                 => '&#8836',    
+       '&sube'                 => '&#8838',    '&supe'                 => '&#8839',    '&oplus'                => '&#8853',    
+       '&otimes'               => '&#8855',    '&perp'                 => '&#8869',    '&sdot'                 => '&#8901',    
+       '&lceil'                => '&#8968',    '&rceil'                => '&#8969',    '&lfloor'               => '&#8970',    
+       '&rfloor'               => '&#8971',    '&lang'                 => '&#9001',    '&rang'                 => '&#9002',    
+       '&loz'                  => '&#9674',    '&spades'               => '&#9824',    '&clubs'                => '&#9827',    
+       '&hearts'               => '&#9829',    '&diams'                => '&#9830',    
+);
+
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/globalfunctions.php b/utf8/nucleus/libs/globalfunctions.php
new file mode 100755 (executable)
index 0000000..d78a923
--- /dev/null
@@ -0,0 +1,2213 @@
+<?php\r
+\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+/**\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ * $NucleusJP: globalfunctions.php,v 1.23.2.7 2008/02/05 08:30:08 kimitake Exp $\r
+ */\r
+\r
+// needed if we include globalfunctions from install.php\r
+global $nucleus, $CONF, $DIR_LIBS, $DIR_LANG, $manager, $member;\r
+\r
+$nucleus['version'] = 'v3.51';\r
+$nucleus['codename'] = '';\r
+\r
+checkVars(array('nucleus', 'CONF', 'DIR_LIBS', 'MYSQL_HOST', 'MYSQL_USER', 'MYSQL_PASSWORD', 'MYSQL_DATABASE', 'DIR_LANG', 'DIR_PLUGINS', 'HTTP_GET_VARS', 'HTTP_POST_VARS', 'HTTP_COOKIE_VARS', 'HTTP_ENV_VARS', 'HTTP_SESSION_VARS', 'HTTP_POST_FILES', 'HTTP_SERVER_VARS', 'GLOBALS', 'argv', 'argc', '_GET', '_POST', '_COOKIE', '_ENV', '_SESSION', '_SERVER', '_FILES'));\r
+\r
+$CONF['debug'] = 0;\r
+if ($CONF['debug']) {\r
+    error_reporting(E_ALL); // report all errors!\r
+} else {\r
+    ini_set('display_errors','0');\r
+    error_reporting(E_ERROR | E_WARNING | E_PARSE);\r
+}\r
+\r
+/*\r
+    Indicates when Nucleus should display startup errors. Set to 1 if you want\r
+    the error enabled (default), false otherwise\r
+\r
+    alertOnHeadersSent\r
+        Displays an error when visiting a public Nucleus page and headers have\r
+        been sent out to early. This usually indicates an error in either a\r
+        configuration file or a language file, and could cause Nucleus to\r
+        malfunction\r
+    alertOnSecurityRisk\r
+        Displays an error only when visiting the admin area, and when one or\r
+        more of the installation files (install.php, install.sql, upgrades/\r
+        directory) are still on the server.\r
+*/\r
+\r
+$CONF['alertOnHeadersSent']  = 1;\r
+$CONF['alertOnSecurityRisk'] = 1;\r
+/*$CONF['ItemURL']           = $CONF['Self'];\r
+$CONF['ArchiveURL']          = $CONF['Self'];\r
+$CONF['ArchiveListURL']      = $CONF['Self'];\r
+$CONF['MemberURL']           = $CONF['Self'];\r
+$CONF['SearchURL']           = $CONF['Self'];\r
+$CONF['BlogURL']             = $CONF['Self'];\r
+$CONF['CategoryURL']         = $CONF['Self'];\r
+\r
+// switch URLMode back to normal when $CONF['Self'] ends in .php\r
+// this avoids urls like index.php/item/13/index.php/item/15\r
+if (!isset($CONF['URLMode']) || (($CONF['URLMode'] == 'pathinfo') && (substr($CONF['Self'], strlen($CONF['Self']) - 4) == '.php'))) {\r
+    $CONF['URLMode'] = 'normal';\r
+}*/\r
+\r
+if (getNucleusPatchLevel() > 0) {\r
+    $nucleus['version'] .= '/' . getNucleusPatchLevel();\r
+}\r
+\r
+// Avoid notices\r
+if (!isset($CONF['installscript'])) {\r
+    $CONF['installscript'] = 0;\r
+}\r
+\r
+// we will use postVar, getVar, ... methods instead of HTTP_GET_VARS or _GET\r
+if ($CONF['installscript'] != 1) { // vars were already included in install.php\r
+    if (phpversion() >= '4.1.0') {\r
+        include_once($DIR_LIBS . 'vars4.1.0.php');\r
+    } else {\r
+        include_once($DIR_LIBS . 'vars4.0.6.php');\r
+    }\r
+}\r
+\r
+// sanitize option\r
+$bLoggingSanitizedResult=0;\r
+$bSanitizeAndContinue=0;\r
+\r
+$orgRequestURI = serverVar('REQUEST_URI');\r
+sanitizeParams();\r
+\r
+// get all variables that can come from the request and put them in the global scope\r
+$blogid       = requestVar('blogid');\r
+$itemid       = intRequestVar('itemid');\r
+$catid        = intRequestVar('catid');\r
+$skinid       = requestVar('skinid');\r
+$memberid     = requestVar('memberid');\r
+$archivelist  = requestVar('archivelist');\r
+$imagepopup   = requestVar('imagepopup');\r
+$archive      = requestVar('archive');\r
+$query        = requestVar('query');\r
+$highlight    = requestVar('highlight');\r
+$amount       = requestVar('amount');\r
+$action       = requestVar('action');\r
+$nextaction   = requestVar('nextaction');\r
+$maxresults   = requestVar('maxresults');\r
+$startpos     = intRequestVar('startpos');\r
+$errormessage = '';\r
+$error        = '';\r
+$special      = requestVar('special');\r
+$virtualpath  = ((getVar('virtualpath') != null) ? getVar('virtualpath') : serverVar('PATH_INFO'));\r
+\r
+if (!headers_sent() ) {\r
+    header('Generator: Nucleus CMS ' . $nucleus['version']);\r
+}\r
+\r
+// include core classes that are needed for login & plugin handling\r
+// added for 3.5 sql_* wrapper\r
+global $MYSQL_HANDLER;\r
+if (!isset($MYSQL_HANDLER))\r
+    $MYSQL_HANDLER = array('mysql','');\r
+if ($MYSQL_HANDLER[0] == '')\r
+    $MYSQL_HANDLER[0] = 'mysql';\r
+include_once($DIR_LIBS . 'sql/'.$MYSQL_HANDLER[0].'.php');\r
+// end new for 3.5 sql_* wrapper\r
+include_once($DIR_LIBS . 'mysql.php');\r
+include($DIR_LIBS . 'MEMBER.php');\r
+include($DIR_LIBS . 'ACTIONLOG.php');\r
+include($DIR_LIBS . 'MANAGER.php');\r
+include($DIR_LIBS . 'PLUGIN.php');\r
+\r
+$manager =& MANAGER::instance();\r
+\r
+// make sure there's no unnecessary escaping:\r
+//set_magic_quotes_runtime(0);\r
+if (version_compare(PHP_VERSION, '5.3.0', '<')) {\r
+    ini_set('magic_quotes_runtime', '0');\r
+}\r
+\r
+// Avoid notices\r
+if (!isset($CONF['UsingAdminArea'])) {\r
+    $CONF['UsingAdminArea'] = 0;\r
+}\r
+\r
+// only needed when updating logs\r
+if ($CONF['UsingAdminArea']) {\r
+    include($DIR_LIBS . 'xmlrpc.inc.php');  // XML-RPC client classes\r
+    include_once($DIR_LIBS . 'ADMIN.php');\r
+}\r
+\r
+// connect to database\r
+sql_connect();\r
+$SQLCount = 0;\r
+\r
+// logs sanitized result if need\r
+if ($orgRequestURI!==serverVar('REQUEST_URI')) {\r
+    $msg = "Sanitized [" . serverVar('REMOTE_ADDR') . "] ";\r
+    $msg .= $orgRequestURI . " -> " . serverVar('REQUEST_URI');\r
+    if ($bLoggingSanitizedResult) {\r
+        addToLog(WARNING, $msg);\r
+    }\r
+    if (!$bSanitizeAndContinue) {\r
+        die("");\r
+    }\r
+}\r
+\r
+// makes sure database connection gets closed on script termination\r
+register_shutdown_function('sql_disconnect');\r
+\r
+// read config\r
+getConfig();\r
+\r
+// Properly set $CONF['Self'] and others if it's not set... usually when we are access from admin menu\r
+if (!isset($CONF['Self'])) {\r
+    $CONF['Self'] = $CONF['IndexURL'];\r
+    // strip trailing /\r
+    if ($CONF['Self'][strlen($CONF['Self']) -1] == "/") {\r
+        $CONF['Self'] = substr($CONF['Self'], 0, strlen($CONF['Self']) -1);\r
+    }\r
+\r
+/*     $CONF['ItemURL']        = $CONF['Self'];\r
+    $CONF['ArchiveURL']     = $CONF['Self'];\r
+    $CONF['ArchiveListURL'] = $CONF['Self'];\r
+    $CONF['MemberURL']      = $CONF['Self'];\r
+    $CONF['SearchURL']      = $CONF['Self'];\r
+    $CONF['BlogURL']        = $CONF['Self'];\r
+    $CONF['CategoryURL']    = $CONF['Self'];*/\r
+}\r
+\r
+$CONF['ItemURL'] = $CONF['Self'];\r
+$CONF['ArchiveURL'] = $CONF['Self'];\r
+$CONF['ArchiveListURL'] = $CONF['Self'];\r
+$CONF['MemberURL'] = $CONF['Self'];\r
+$CONF['SearchURL'] = $CONF['Self'];\r
+$CONF['BlogURL'] = $CONF['Self'];\r
+$CONF['CategoryURL'] = $CONF['Self'];\r
+\r
+// switch URLMode back to normal when $CONF['Self'] ends in .php\r
+// this avoids urls like index.php/item/13/index.php/item/15\r
+if (!isset($CONF['URLMode']) || (($CONF['URLMode'] == 'pathinfo') && (substr($CONF['Self'], strlen($CONF['Self']) - 4) == '.php'))) {\r
+    $CONF['URLMode'] = 'normal';\r
+}\r
+\r
+// automatically use simpler toolbar for mozilla\r
+if (($CONF['DisableJsTools'] == 0) && strstr(serverVar('HTTP_USER_AGENT'), 'Mozilla/5.0') && strstr(serverVar('HTTP_USER_AGENT'), 'Gecko') ) {\r
+    $CONF['DisableJsTools'] = 2;\r
+}\r
+\r
+// login if cookies set\r
+$member = new MEMBER();\r
+\r
+// secure cookie key settings (either 'none', 0, 8, 16, 24, or 32)\r
+if (!isset($CONF['secureCookieKey'])) $CONF['secureCookieKey']=24;\r
+switch($CONF['secureCookieKey']){\r
+case 8:\r
+    $CONF['secureCookieKeyIP']=preg_replace('/\.[0-9]+\.[0-9]+\.[0-9]+$/','',serverVar('REMOTE_ADDR'));\r
+    break;\r
+case 16:\r
+    $CONF['secureCookieKeyIP']=preg_replace('/\.[0-9]+\.[0-9]+$/','',serverVar('REMOTE_ADDR'));\r
+    break;\r
+case 24:\r
+    $CONF['secureCookieKeyIP']=preg_replace('/\.[0-9]+$/','',serverVar('REMOTE_ADDR'));\r
+    break;\r
+case 32:\r
+    $CONF['secureCookieKeyIP']=serverVar('REMOTE_ADDR');\r
+    break;\r
+default:\r
+    $CONF['secureCookieKeyIP']='';\r
+}\r
+\r
+// login/logout when required or renew cookies\r
+if ($action == 'login') {\r
+    // Form Authentication\r
+    $login = postVar('login');\r
+    $pw = postVar('password');\r
+    $shared = intPostVar('shared'); // shared computer or not\r
+\r
+    $pw=substr($pw,0,40); // avoid md5 collision by using a long key\r
+\r
+    if ($member->login($login, $pw) ) {\r
+\r
+        $member->newCookieKey();\r
+        $member->setCookies($shared);\r
+\r
+        if ($CONF['secureCookieKey']!=='none') {\r
+            // secure cookie key\r
+            $member->setCookieKey(md5($member->getCookieKey().$CONF['secureCookieKeyIP']));\r
+            $member->write();\r
+        }\r
+\r
+        // allows direct access to parts of the admin area after logging in\r
+        if ($nextaction) {\r
+            $action = $nextaction;\r
+        }\r
+\r
+        $manager->notify('LoginSuccess', array('member' => &$member, 'username' => $login) );\r
+        $errormessage = '';\r
+        ACTIONLOG::add(INFO, "Login successful for $login (sharedpc=$shared)");\r
+    } else {\r
+        // errormessage for [%errordiv%]\r
+        $errormessage = 'Login failed for ' . $login;\r
+\r
+        $manager->notify('LoginFailed', array('username' => $login) );\r
+        ACTIONLOG::add(INFO, $errormessage);\r
+    }\r
+/*\r
+\r
+Backed out for now: See http://forum.nucleuscms.org/viewtopic.php?t=3684 for details\r
+\r
+} elseif (serverVar('PHP_AUTH_USER') && serverVar('PHP_AUTH_PW')) {\r
+    // HTTP Authentication\r
+    $login  = serverVar('PHP_AUTH_USER');\r
+    $pw     = serverVar('PHP_AUTH_PW');\r
+\r
+    if ($member->login($login, $pw) ) {\r
+        $manager->notify('LoginSuccess',array('member' => &$member));\r
+        ACTIONLOG::add(INFO, "HTTP authentication successful for $login");\r
+    } else {\r
+        $manager->notify('LoginFailed',array('username' => $login));\r
+        ACTIONLOG::add(INFO, 'HTTP authentication failed for ' . $login);\r
+\r
+        //Since bad credentials, generate an apropriate error page\r
+        header("WWW-Authenticate: Basic realm=\"Nucleus CMS {$nucleus['version']}\"");\r
+        header('HTTP/1.0 401 Unauthorized');\r
+        echo 'Invalid username or password';\r
+        exit;\r
+    }\r
+*/\r
+\r
+} elseif (($action == 'logout') && (!headers_sent() ) && cookieVar($CONF['CookiePrefix'] . 'user') ) {\r
+    // remove cookies on logout\r
+    setcookie($CONF['CookiePrefix'] . 'user', '', (time() - 2592000), $CONF['CookiePath'], $CONF['CookieDomain'], $CONF['CookieSecure']);\r
+    setcookie($CONF['CookiePrefix'] . 'loginkey', '', (time() - 2592000), $CONF['CookiePath'], $CONF['CookieDomain'], $CONF['CookieSecure']);\r
+    $manager->notify('Logout', array('username' => cookieVar($CONF['CookiePrefix'] . 'user') ) );\r
+} elseif (cookieVar($CONF['CookiePrefix'] . 'user') ) {\r
+    // Cookie Authentication\r
+    $ck=cookieVar($CONF['CookiePrefix'] . 'loginkey');\r
+    // secure cookie key\r
+    $ck=substr($ck,0,32); // avoid md5 collision by using a long key\r
+    if ($CONF['secureCookieKey']!=='none') $ck=md5($ck.$CONF['secureCookieKeyIP']);\r
+    $res = $member->cookielogin(cookieVar($CONF['CookiePrefix'] . 'user'), $ck );\r
+    unset($ck);\r
+\r
+    // renew cookies when not on a shared computer\r
+    if ($res && (cookieVar($CONF['CookiePrefix'] . 'sharedpc') != 1) && (!headers_sent() ) ) {\r
+        $member->setCookieKey(cookieVar($CONF['CookiePrefix'] . 'loginkey'));\r
+        $member->setCookies();\r
+    }\r
+}\r
+\r
+// login completed\r
+$manager->notify('PostAuthentication', array('loggedIn' => $member->isLoggedIn() ) );\r
+ticketForPlugin();\r
+\r
+// first, let's see if the site is disabled or not. always allow admin area access.\r
+if ($CONF['DisableSite'] && !$member->isAdmin() && !$CONF['UsingAdminArea']) {\r
+    redirect($CONF['DisableSiteURL']);\r
+    exit;\r
+}\r
+\r
+// load other classes\r
+include($DIR_LIBS . 'PARSER.php');\r
+include($DIR_LIBS . 'SKIN.php');\r
+include($DIR_LIBS . 'TEMPLATE.php');\r
+include($DIR_LIBS . 'BLOG.php');\r
+include($DIR_LIBS . 'BODYACTIONS.php');\r
+include($DIR_LIBS . 'COMMENTS.php');\r
+include($DIR_LIBS . 'COMMENT.php');\r
+//include($DIR_LIBS . 'ITEM.php');\r
+include($DIR_LIBS . 'NOTIFICATION.php');\r
+include($DIR_LIBS . 'BAN.php');\r
+include($DIR_LIBS . 'PAGEFACTORY.php');\r
+include($DIR_LIBS . 'SEARCH.php');\r
+include($DIR_LIBS . 'entity.php');\r
+\r
+\r
+// set lastVisit cookie (if allowed)\r
+if (!headers_sent() ) {\r
+    if ($CONF['LastVisit']) {\r
+        setcookie($CONF['CookiePrefix'] . 'lastVisit', time(), time() + 2592000, $CONF['CookiePath'], $CONF['CookieDomain'], $CONF['CookieSecure']);\r
+    } else {\r
+        setcookie($CONF['CookiePrefix'] . 'lastVisit', '', (time() - 2592000), $CONF['CookiePath'], $CONF['CookieDomain'], $CONF['CookieSecure']);\r
+    }\r
+}\r
+\r
+// read language file, only after user has been initialized\r
+$language = getLanguageName();\r
+//include($DIR_LANG . ereg_replace( '[\\|/]', '', $language) . '.php');\r
+include($DIR_LANG . preg_replace( '@\\|/@', '', $language) . '.php');\r
+\r
+// check if valid charset\r
+if (!encoding_check(false, false, _CHARSET)) {\r
+    foreach(array($_GET, $_POST) as $input) {\r
+        array_walk($input, 'encoding_check');\r
+    }\r
+}\r
+\r
+/*\r
+    Backed out for now: See http://forum.nucleuscms.org/viewtopic.php?t=3684 for details\r
+\r
+// To remove after v2.5 is released and language files have been updated.\r
+// Including this makes sure that language files for v2.5beta can still be used for v2.5final\r
+// without having weird _SETTINGS_EXTAUTH string showing up in the admin area.\r
+if (!defined('_MEMBERS_BYPASS'))\r
+{\r
+    define('_SETTINGS_EXTAUTH',         'Enable External Authentication');\r
+    define('_WARNING_EXTAUTH',          'Warning: Enable only if needed.');\r
+    define('_MEMBERS_BYPASS',           'Use External Authentication');\r
+}\r
+\r
+*/\r
+\r
+// make sure the archivetype skinvar keeps working when _ARCHIVETYPE_XXX not defined\r
+if (!defined('_ARCHIVETYPE_MONTH') ) {\r
+    define('_ARCHIVETYPE_DAY', 'day');\r
+    define('_ARCHIVETYPE_MONTH', 'month');\r
+    define('_ARCHIVETYPE_YEAR', 'year');\r
+}\r
+\r
+// decode path_info\r
+if ($CONF['URLMode'] == 'pathinfo') {\r
+    // initialize keywords if this hasn't been done before\r
+    if (!isset($CONF['ItemKey']) || $CONF['ItemKey'] == '') {\r
+        $CONF['ItemKey'] = 'item';\r
+    }\r
+\r
+    if (!isset($CONF['ArchiveKey']) || $CONF['ArchiveKey'] == '') {\r
+        $CONF['ArchiveKey'] = 'archive';\r
+    }\r
+\r
+    if (!isset($CONF['ArchivesKey']) || $CONF['ArchivesKey'] == '') {\r
+        $CONF['ArchivesKey'] = 'archives';\r
+    }\r
+\r
+    if (!isset($CONF['MemberKey']) || $CONF['MemberKey'] == '') {\r
+        $CONF['MemberKey'] = 'member';\r
+    }\r
+\r
+    if (!isset($CONF['BlogKey']) || $CONF['BlogKey'] == '') {\r
+        $CONF['BlogKey'] = 'blog';\r
+    }\r
+\r
+    if (!isset($CONF['CategoryKey']) || $CONF['CategoryKey'] == '') {\r
+        $CONF['CategoryKey'] = 'category';\r
+    }\r
+\r
+    if (!isset($CONF['SpecialskinKey']) || $CONF['SpecialskinKey'] == '') {\r
+        $CONF['SpecialskinKey'] = 'special';\r
+    }\r
+\r
+    $parsed = false;\r
+    $manager->notify(\r
+        'ParseURL',\r
+        array(\r
+            'type' => basename(serverVar('SCRIPT_NAME') ), // e.g. item, blog, ...\r
+            'info' => $virtualpath,\r
+            'complete' => &$parsed\r
+        )\r
+    );\r
+\r
+    if (!$parsed) {\r
+        // default implementation\r
+        $data = explode("/", $virtualpath );\r
+        for ($i = 0; $i < sizeof($data); $i++) {\r
+            switch ($data[$i]) {\r
+                case $CONF['ItemKey']: // item/1 (blogid)\r
+                    $i++;\r
+\r
+                    if ($i < sizeof($data) ) {\r
+                        $itemid = intval($data[$i]);\r
+                    }\r
+                    break;\r
+\r
+                case $CONF['ArchivesKey']: // archives/1 (blogid)\r
+                    $i++;\r
+\r
+                    if ($i < sizeof($data) ) {\r
+                        $archivelist = intval($data[$i]);\r
+                    }\r
+                    break;\r
+\r
+                case $CONF['ArchiveKey']: // two possibilities: archive/yyyy-mm or archive/1/yyyy-mm (with blogid)\r
+                    if ((($i + 1) < sizeof($data) ) && (!strstr($data[$i + 1], '-') ) ) {\r
+                        $blogid = intval($data[++$i]);\r
+                    }\r
+\r
+                    $i++;\r
+\r
+                    if ($i < sizeof($data) ) {\r
+                        $archive = $data[$i];\r
+                    }\r
+                    break;\r
+\r
+                case 'blogid': // blogid/1\r
+                case $CONF['BlogKey']: // blog/1\r
+                    $i++;\r
+\r
+                    if ($i < sizeof($data) ) {\r
+                        $blogid = intval($data[$i]);\r
+                    }\r
+                    break;\r
+\r
+                case $CONF['CategoryKey']: // category/1 (catid)\r
+                case 'catid':\r
+                    $i++;\r
+\r
+                    if ($i < sizeof($data) ) {\r
+                        $catid = intval($data[$i]);\r
+                    }\r
+                    break;\r
+\r
+                case $CONF['MemberKey']:\r
+                    $i++;\r
+\r
+                    if ($i < sizeof($data) ) {\r
+                        $memberid = intval($data[$i]);\r
+                    }\r
+                    break;\r
+\r
+                case $CONF['SpecialskinKey']:\r
+                    $i++;\r
+\r
+                    if ($i < sizeof($data) ) {\r
+                        $_REQUEST['special'] = $data[$i];\r
+                    }\r
+                    break;\r
+\r
+                default:\r
+                    // skip...\r
+            }\r
+        }\r
+    }\r
+}\r
+\r
+function intPostVar($name) {\r
+    return intval(postVar($name) );\r
+}\r
+\r
+function intGetVar($name) {\r
+    return intval(getVar($name) );\r
+}\r
+\r
+function intRequestVar($name) {\r
+    return intval(requestVar($name) );\r
+}\r
+\r
+function intCookieVar($name) {\r
+    return intval(cookieVar($name) );\r
+}\r
+\r
+/**\r
+  * returns the currently used version (100 = 1.00, 101 = 1.01, etc...)\r
+  */\r
+function getNucleusVersion() {\r
+    return 351;\r
+}\r
+\r
+/**\r
+ * power users can install patches in between nucleus releases. These patches\r
+ * usually add new functionality in the plugin API and allow those to\r
+ * be tested without having to install CVS.\r
+ */\r
+function getNucleusPatchLevel() {\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * returns the latest version available for download from nucleuscms.org \r
+ * or false if unable to attain data\r
+ * format will be major.minor/patachlevel\r
+ * e.g. 3.41 or 3.41/02\r
+ */\r
+function getLatestVersion() {\r
+    if (!function_exists('curl_init')) return false;\r
+    $crl = curl_init();\r
+    $timeout = 5;\r
+    curl_setopt ($crl, CURLOPT_URL,'http://nucleuscms.org/version_check.php');\r
+    curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);\r
+    curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);\r
+    $ret = curl_exec($crl);\r
+    curl_close($crl);\r
+    return $ret;\r
+\r
+}\r
+\r
+/**\r
+  * Connects to mysql server\r
+  */\r
+/* moved to $DIR_LIBS/sql/*.php handler files\r
+function sql_connect() {\r
+    global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN;\r
+\r
+    $MYSQL_CONN = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD) or startUpError('<p>Could not connect to MySQL database.</p>', 'Connect Error');\r
+    mysql_select_db($MYSQL_DATABASE) or startUpError('<p>Could not select database: ' . mysql_error() . '</p>', 'Connect Error');\r
+\r
+    return $MYSQL_CONN;\r
+}*/\r
+\r
+/**\r
+ * returns a prefixed nucleus table name\r
+ */\r
+function sql_table($name) {\r
+    global $MYSQL_PREFIX;\r
+\r
+    if ($MYSQL_PREFIX) {\r
+        return $MYSQL_PREFIX . 'nucleus_' . $name;\r
+    } else {\r
+        return 'nucleus_' . $name;\r
+    }\r
+}\r
+\r
+function sendContentType($contenttype, $pagetype = '', $charset = _CHARSET) {\r
+    global $manager, $CONF;\r
+\r
+    if (!headers_sent() ) {\r
+        // if content type is application/xhtml+xml, only send it to browsers\r
+        // that can handle it (IE6 cannot). Otherwise, send text/html\r
+\r
+        // v2.5: For admin area pages, keep sending text/html (unless it's a debug version)\r
+        //       application/xhtml+xml still causes too much problems with the javascript implementations\r
+\r
+        // v3.3: ($CONF['UsingAdminArea'] && !$CONF['debug']) gets removed,\r
+        //       application/xhtml+xml seems to be working, so we're going to use it if we can.\r
+        //\r
+        // Note: reverted the following function in JP version\r
+        //\r
+    /*\r
+        // v3.3 code\r
+        if (\r
+                ($contenttype == 'application/xhtml+xml')\r
+            &&  (!stristr(serverVar('HTTP_ACCEPT'), 'application/xhtml+xml') )\r
+            ) {\r
+            $contenttype = 'text/html';\r
+        }\r
+    */\r
+        // v3.2x code\r
+        if (\r
+                ($contenttype == 'application/xhtml+xml')\r
+            &&  (($CONF['UsingAdminArea'] && !$CONF['debug']) || !stristr(serverVar('HTTP_ACCEPT'),'application/xhtml+xml'))\r
+            )\r
+        {\r
+            $contenttype = 'text/html';\r
+        }\r
+\r
+        $manager->notify(\r
+            'PreSendContentType',\r
+            array(\r
+                'contentType' => &$contenttype,\r
+                'charset' => &$charset,\r
+                'pageType' => $pagetype\r
+            )\r
+        );\r
+\r
+        // strip strange characters\r
+        $contenttype = preg_replace('|[^a-z0-9-+./]|i', '', $contenttype);\r
+        $charset = preg_replace('|[^a-z0-9-_]|i', '', $charset);\r
+\r
+        if ($charset != '') {\r
+            header('Content-Type: ' . $contenttype . '; charset=' . $charset);\r
+        } else {\r
+            header('Content-Type: ' . $contenttype);\r
+        }\r
+\r
+        // check if valid charset\r
+        if (!encoding_check(false,false,$charset)) {\r
+            foreach(array($_GET, $_POST) as $input) {\r
+                array_walk($input, 'encoding_check');\r
+            }\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * Errors before the database connection has been made - moved to\r
+ */\r
+/* moved to $DIR_LIBS/sql/*.php handler files\r
+function startUpError($msg, $title) {\r
+    if (!defined('_CHARSET')) define('_CHARSET', 'iso-8859-1');\r
+    header('Content-Type: text/html; charset=' . _CHARSET);\r
+    ?>\r
+    <html <?php echo _HTML_XML_NAME_SPACE_AND_LANG_CODE; ?>>\r
+        <head><meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET?>" />\r
+        <title><?php echo htmlspecialchars($title)?></title></head>\r
+        <body>\r
+            <h1><?php echo htmlspecialchars($title)?></h1>\r
+            <?php echo $msg?>\r
+        </body>\r
+    </html>\r
+    <?php   exit;\r
+}*/\r
+\r
+/**\r
+  * disconnects from SQL server\r
+  */\r
+/* moved to $DIR_LIBS/sql/*.php handler files\r
+function sql_disconnect() {\r
+    @mysql_close();\r
+}*/\r
+\r
+/**\r
+  * executes an SQL query\r
+  */\r
+/* moved to $DIR_LIBS/sql/*.php handler files\r
+function sql_query($query) {\r
+    global $SQLCount;\r
+    $SQLCount++;\r
+    $res = mysql_query($query) or print("mySQL error with query $query: " . mysql_error() . '<p />');\r
+    return $res;\r
+}*/\r
+\r
+\r
+/**\r
+ * Highlights a specific query in a given HTML text (not within HTML tags) and returns it\r
+ *\r
+ * @param $text\r
+ *             text to be highlighted\r
+ * @param $expression\r
+ *             regular expression to be matched (can be an array of expressions as well)\r
+ * @param $highlight\r
+ *             highlight to be used (use \\0 to indicate the matched expression)\r
+ *\r
+ */\r
+function highlight($text, $expression, $highlight) {\r
+    if (!$highlight || !$expression) {\r
+        return $text;\r
+    }\r
+\r
+    if (is_array($expression) && (count($expression) == 0) ) {\r
+        return $text;\r
+    }\r
+\r
+    // add a tag in front (is needed for preg_match_all to work correct)\r
+    $text = '<!--h-->' . $text;\r
+\r
+    // split the HTML up so we have HTML tags\r
+    // $matches[0][i] = HTML + text\r
+    // $matches[1][i] = HTML\r
+    // $matches[2][i] = text\r
+    preg_match_all('/(<[^>]+>)([^<>]*)/', $text, $matches);\r
+\r
+    // throw it all together again while applying the highlight to the text pieces\r
+    $result = '';\r
+    for ($i = 0; $i < sizeof($matches[2]); $i++) {\r
+        if ($i != 0) {\r
+            $result .= $matches[1][$i];\r
+        }\r
+\r
+        if (is_array($expression) ) {\r
+            foreach ($expression as $regex) {\r
+                if ($regex) {\r
+                    $matches[2][$i] = @eregi_replace($regex, $highlight, $matches[2][$i]);\r
+                }\r
+            }\r
+\r
+            $result .= $matches[2][$i];\r
+        } else {\r
+            $result .= @eregi_replace($expression, $highlight, $matches[2][$i]);\r
+        }\r
+    }\r
+\r
+    return $result;\r
+}\r
+\r
+/**\r
+ * Parses a query into an array of expressions that can be passed on to the highlight method\r
+ */\r
+function parseHighlight($query) {\r
+    // TODO: add more intelligent splitting logic\r
+\r
+    // get rid of quotes\r
+    $query = preg_replace('/\'|"/', '', $query);\r
+\r
+    if (!$query) {\r
+        return array();\r
+    }\r
+\r
+    $aHighlight = explode(' ', $query);\r
+\r
+    for ($i = 0; $i < count($aHighlight); $i++) {\r
+        $aHighlight[$i] = trim($aHighlight[$i]);\r
+\r
+//             if (strlen($aHighlight[$i]) < 3) {\r
+//                     unset($aHighlight[$i]);\r
+//             }\r
+    }\r
+\r
+    if (count($aHighlight) == 1) {\r
+        return $aHighlight[0];\r
+    } else {\r
+        return $aHighlight;\r
+    }\r
+}\r
+\r
+/**\r
+  * Checks if email address is valid\r
+  */\r
+function isValidMailAddress($address) {\r
+    if (preg_match('/^[a-zA-Z+0-9\._-]+@[a-zA-Z0-9\._-]+\.[A-Za-z]{2,5}$/', $address)) {\r
+        return 1;\r
+    } else {\r
+        return 0;\r
+    }\r
+}\r
+\r
+\r
+// some helper functions\r
+function getBlogIDFromName($name) {\r
+    return quickQuery('SELECT bnumber as result FROM ' . sql_table('blog') . ' WHERE bshortname="' . addslashes($name) . '"');\r
+}\r
+\r
+function getBlogNameFromID($id) {\r
+    return quickQuery('SELECT bname as result FROM ' . sql_table('blog') . ' WHERE bnumber=' . intval($id) );\r
+}\r
+\r
+function getBlogIDFromItemID($itemid) {\r
+    return quickQuery('SELECT iblog as result FROM ' . sql_table('item') . ' WHERE inumber=' . intval($itemid) );\r
+}\r
+\r
+function getBlogIDFromCommentID($commentid) {\r
+    return quickQuery('SELECT cblog as result FROM ' . sql_table('comment') . ' WHERE cnumber=' . intval($commentid) );\r
+}\r
+\r
+function getBlogIDFromCatID($catid) {\r
+    return quickQuery('SELECT cblog as result FROM ' . sql_table('category') . ' WHERE catid=' . intval($catid) );\r
+}\r
+\r
+function getCatIDFromName($name) {\r
+    return quickQuery('SELECT catid as result FROM ' . sql_table('category') . ' WHERE cname="' . addslashes($name) . '"');\r
+}\r
+\r
+function quickQuery($q) {\r
+    $res = sql_query($q);\r
+    $obj = sql_fetch_object($res);\r
+    return isset($obj->result) ? $obj->result : false;\r
+}\r
+\r
+function getPluginNameFromPid($pid) {\r
+    $res = sql_query('SELECT pfile FROM ' . sql_table('plugin') . ' WHERE pid=' . intval($pid) );\r
+    $obj = sql_fetch_object($res);\r
+    return isset($obj->pfile) ? $obj->pfile : false;\r
+}\r
+\r
+function selector() {\r
+    global $itemid, $blogid, $memberid, $query, $amount, $archivelist, $maxresults;\r
+    global $archive, $skinid, $blog, $memberinfo, $CONF, $member;\r
+    global $imagepopup, $catid, $special;\r
+    global $manager;\r
+\r
+    $actionNames = array('addcomment', 'sendmessage', 'createaccount', 'forgotpassword', 'votepositive', 'votenegative', 'plugin');\r
+    $action = requestVar('action');\r
+\r
+    if (in_array($action, $actionNames) ) {\r
+        global $DIR_LIBS, $errormessage;\r
+        include_once($DIR_LIBS . 'ACTION.php');\r
+        $a = new ACTION();\r
+        $errorInfo = $a->doAction($action);\r
+\r
+        if ($errorInfo) {\r
+            $errormessage = $errorInfo['message'];\r
+        }\r
+    }\r
+\r
+    // show error when headers already sent out\r
+    if (headers_sent() && $CONF['alertOnHeadersSent']) {\r
+\r
+        // try to get line number/filename (extra headers_sent params only exists in PHP 4.3+)\r
+        if (function_exists('version_compare') && version_compare('4.3.0', phpversion(), '<=') ) {\r
+            headers_sent($hsFile, $hsLine);\r
+            $extraInfo = sprintf(_GFUNCTIONS_HEADERSALREADYSENT_FILE,$hsFile,$hsLine);\r
+        } else {\r
+            $extraInfo = '';\r
+        }\r
+\r
+        startUpError(\r
+            sprintf(_GFUNCTIONS_HEADERSALREADYSENT_TXT,$extraInfo),\r
+            _GFUNCTIONS_HEADERSALREADYSENT_TITLE\r
+        );\r
+        exit;\r
+    }\r
+\r
+    // make is so ?archivelist without blogname or blogid shows the archivelist\r
+    // for the default weblog\r
+    if (serverVar('QUERY_STRING') == 'archivelist') {\r
+        $archivelist = $CONF['DefaultBlog'];\r
+    }\r
+\r
+    // now decide which type of skin we need\r
+    if ($itemid) {\r
+        // itemid given -> only show that item\r
+        $type = 'item';\r
+\r
+        if (!$manager->existsItem($itemid,0,0) ) {\r
+            doError(_ERROR_NOSUCHITEM);\r
+        }\r
+\r
+        global $itemidprev, $itemidnext, $catid, $itemtitlenext, $itemtitleprev;\r
+\r
+        // 1. get timestamp, blogid and catid for item\r
+        $query = 'SELECT itime, iblog, icat FROM ' . sql_table('item') . ' WHERE inumber=' . intval($itemid);\r
+        $res = sql_query($query);\r
+        $obj = sql_fetch_object($res);\r
+\r
+        // if a different blog id has been set through the request or selectBlog(),\r
+        // deny access\r
+//             if ($blogid && (intval($blogid) != $obj->iblog) ) {\r
+//                     doError(_ERROR_NOSUCHITEM);\r
+//             }\r
+        if ($blogid && (intval($blogid) != $obj->iblog) ) {\r
+            if (!headers_sent()) {\r
+                $b =& $manager->getBlog($obj->iblog);\r
+                $CONF['ItemURL'] = $b->getURL();\r
+                if ($CONF['URLMode'] == 'pathinfo' and substr($CONF['ItemURL'],-1) == '/')\r
+                    $CONF['ItemURL'] = substr($CONF['ItemURL'], 0, -1);\r
+                $correctURL = createItemLink($itemid, '');\r
+                redirect($correctURL);\r
+                exit;\r
+            } else {\r
+                doError(_ERROR_NOSUCHITEM);\r
+            }\r
+        }\r
+\r
+        // if a category has been selected which doesn't match the item, ignore the\r
+        // category. #85\r
+        if (($catid != 0) && ($catid != $obj->icat) ) {\r
+            $catid = 0;\r
+        }\r
+\r
+        $blogid = $obj->iblog;\r
+        $timestamp = strtotime($obj->itime);\r
+\r
+        $b =& $manager->getBlog($blogid);\r
+\r
+        if ($b->isValidCategory($catid) ) {\r
+            $catextra = ' and icat=' . $catid;\r
+        } else {\r
+            $catextra = '';\r
+        }\r
+\r
+        // get previous itemid and title\r
+        $query = 'SELECT inumber, ititle FROM ' . sql_table('item') . ' WHERE itime<' . mysqldate($timestamp) . ' and idraft=0 and iblog=' . $blogid . $catextra . ' ORDER BY itime DESC LIMIT 1';\r
+        $res = sql_query($query);\r
+\r
+        $obj = sql_fetch_object($res);\r
+\r
+        if ($obj) {\r
+            $itemidprev = $obj->inumber;\r
+            $itemtitleprev = $obj->ititle;\r
+        }\r
+\r
+        // get next itemid and title\r
+        $query = 'SELECT inumber, ititle FROM ' . sql_table('item') . ' WHERE itime>' . mysqldate($timestamp) . ' and itime <= ' . mysqldate($b->getCorrectTime()) . ' and idraft=0 and iblog=' . $blogid . $catextra . ' ORDER BY itime ASC LIMIT 1';\r
+        $res = sql_query($query);\r
+\r
+        $obj = sql_fetch_object($res);\r
+\r
+        if ($obj) {\r
+            $itemidnext = $obj->inumber;\r
+            $itemtitlenext = $obj->ititle;\r
+        }\r
+\r
+    } elseif ($archive) {\r
+        // show archive\r
+        $type = 'archive';\r
+\r
+        // get next and prev month links ...\r
+        global $archivenext, $archiveprev, $archivetype, $archivenextexists, $archiveprevexists;\r
+\r
+        // sql queries for the timestamp of the first and the last published item\r
+        $query = "SELECT UNIX_TIMESTAMP(itime) as result FROM ".sql_table('item')." WHERE idraft=0 AND iblog=".(int)($blogid ? $blogid : $CONF['DefaultBlog'])." ORDER BY itime ASC";\r
+        $first_timestamp=quickQuery ($query);\r
+        $query = "SELECT UNIX_TIMESTAMP(itime) as result FROM ".sql_table('item')." WHERE idraft=0 AND iblog=".(int)($blogid ? $blogid : $CONF['DefaultBlog'])." ORDER BY itime DESC";\r
+        $last_timestamp=quickQuery ($query);\r
+\r
+        sscanf($archive, '%d-%d-%d', $y, $m, $d);\r
+\r
+        if ($d != 0) {\r
+            $archivetype = _ARCHIVETYPE_DAY;\r
+            $t = mktime(0, 0, 0, $m, $d, $y);\r
+            // one day has 24 * 60 * 60 = 86400 seconds\r
+            $archiveprev = strftime('%Y-%m-%d', $t - 86400 );\r
+            // check for published items\r
+            if ($t > $first_timestamp) {\r
+                $archiveprevexists = true;\r
+            }\r
+            else {\r
+                $archiveprevexists = false;\r
+            }\r
+\r
+            // one day later\r
+            $t += 86400;\r
+            $archivenext = strftime('%Y-%m-%d', $t);\r
+            if ($t < $last_timestamp) {\r
+                $archivenextexists = true;\r
+            }\r
+            else {\r
+                $archivenextexists = false;\r
+            }\r
+\r
+        } elseif ($m == 0) {\r
+            $archivetype = _ARCHIVETYPE_YEAR;\r
+            $t = mktime(0, 0, 0, 12, 31, $y - 1);\r
+            // one day before is in the previous year\r
+            $archiveprev = strftime('%Y', $t);\r
+            if ($t > $first_timestamp) {\r
+                $archiveprevexists = true;\r
+            }\r
+            else {\r
+                $archiveprevexists = false;\r
+            }\r
+\r
+            // timestamp for the next year\r
+            $t = mktime(0, 0, 0, 1, 1, $y + 1);\r
+            $archivenext = strftime('%Y', $t);\r
+            if ($t < $last_timestamp) {\r
+                $archivenextexists = true;\r
+            }\r
+            else {\r
+                $archivenextexists = false;\r
+            }\r
+        } else {\r
+            $archivetype = _ARCHIVETYPE_MONTH;\r
+            $t = mktime(0, 0, 0, $m, 1, $y);\r
+            // one day before is in the previous month\r
+            $archiveprev = strftime('%Y-%m', $t - 86400);\r
+            if ($t > $first_timestamp) {\r
+                $archiveprevexists = true;\r
+            }\r
+            else {\r
+                $archiveprevexists = false;\r
+            }\r
+\r
+            // timestamp for the next month\r
+            $t = mktime(0, 0, 0, $m+1, 1, $y);\r
+            $archivenext = strftime('%Y-%m', $t);\r
+            if ($t < $last_timestamp) {\r
+                $archivenextexists = true;\r
+            }\r
+            else {\r
+                $archivenextexists = false;\r
+            }\r
+        }\r
+\r
+    } elseif ($archivelist) {\r
+        $type = 'archivelist';\r
+\r
+        if (is_numeric($archivelist)) {\r
+            $blogid = intVal($archivelist);\r
+        } else {\r
+            $blogid = getBlogIDFromName($archivelist);\r
+        }\r
+\r
+        if (!$blogid) {\r
+            doError(_ERROR_NOSUCHBLOG);\r
+        }\r
+\r
+    } elseif ($query) {\r
+        global $startpos;\r
+        $type = 'search';\r
+        $query = stripslashes($query);\r
+        if(preg_match("/^(\xA1{2}|\xe3\x80{2}|\x20)+$/", $query)){\r
+                    $type = 'index';\r
+        }\r
+//             $order = (_CHARSET == 'EUC-JP') ? 'EUC-JP, UTF-8,' : 'UTF-8, EUC-JP,';\r
+//             $query = mb_convert_encoding($query, _CHARSET, $order . ' JIS, SJIS, ASCII');\r
+        switch(strtolower(_CHARSET)){\r
+            case 'utf-8':\r
+                $order = 'ASCII, UTF-8, EUC-JP, JIS, SJIS, EUC-CN, ISO-8859-1';\r
+                break;\r
+            case 'gb2312':\r
+                $order = 'ASCII, EUC-CN, EUC-JP, UTF-8, JIS, SJIS, ISO-8859-1';\r
+                break;\r
+            case 'shift_jis':\r
+                // Note that shift_jis is only supported for output.\r
+                // Using shift_jis in DB is prohibited.\r
+                $order = 'ASCII, SJIS, EUC-JP, UTF-8, JIS, EUC-CN, ISO-8859-1';\r
+                break;\r
+            default:\r
+                // euc-jp,iso-8859-x,windows-125x\r
+                $order = 'ASCII, EUC-JP, UTF-8, JIS, SJIS, EUC-CN, ISO-8859-1';\r
+                break;\r
+        }\r
+        $query = mb_convert_encoding($query, _CHARSET, $order);\r
+        if (is_numeric($blogid)) {\r
+            $blogid = intVal($blogid);\r
+        } else {\r
+            $blogid = getBlogIDFromName($blogid);\r
+        }\r
+\r
+        if (!$blogid) {\r
+            doError(_ERROR_NOSUCHBLOG);\r
+        }\r
+\r
+    } elseif ($memberid) {\r
+        $type = 'member';\r
+\r
+        if (!MEMBER::existsID($memberid) ) {\r
+            doError(_ERROR_NOSUCHMEMBER);\r
+        }\r
+\r
+        $memberinfo = $manager->getMember($memberid);\r
+\r
+    } elseif ($imagepopup) {\r
+        // media object (images etc.)\r
+        $type = 'imagepopup';\r
+\r
+        // TODO: check if media-object exists\r
+        // TODO: set some vars?\r
+    } else {\r
+        // show regular index page\r
+        global $startpos;\r
+        $type = 'index';\r
+    }\r
+\r
+    // any type of skin with catid\r
+    if ($catid && !$blogid) {\r
+        $blogid = getBlogIDFromCatID($catid);\r
+    }\r
+\r
+    // decide which blog should be displayed\r
+    if (!$blogid) {\r
+        $blogid = $CONF['DefaultBlog'];\r
+    }\r
+\r
+    $b =& $manager->getBlog($blogid);\r
+    $blog = $b; // references can't be placed in global variables?\r
+\r
+    if (!$blog->isValid) {\r
+        doError(_ERROR_NOSUCHBLOG);\r
+    }\r
+\r
+    // set catid if necessary\r
+    if ($catid) {\r
+        // check if the category is valid\r
+        if (!$blog->isValidCategory($catid)) {\r
+            doError(_ERROR_NOSUCHCATEGORY);\r
+        } else {\r
+            $blog->setSelectedCategory($catid);\r
+        }\r
+    }\r
+\r
+    // decide which skin should be used\r
+    if ($skinid != '' && ($skinid == 0) ) {\r
+        selectSkin($skinid);\r
+    }\r
+\r
+    if (!$skinid) {\r
+        $skinid = $blog->getDefaultSkin();\r
+    }\r
+\r
+    //$special = requestVar('special'); //get at top of file as global\r
+    if (!empty($special) && isValidShortName($special)) {\r
+        $type = strtolower($special);\r
+    }\r
+\r
+    $skin = new SKIN($skinid);\r
+\r
+    if (!$skin->isValid) {\r
+        doError(_ERROR_NOSUCHSKIN);\r
+    }\r
+\r
+    // parse the skin\r
+    $skin->parse($type);\r
+\r
+    // check to see we should throw JustPosted event\r
+    $blog->checkJustPosted();\r
+}\r
+\r
+/**\r
+  * Show error skin with given message. An optional skin-object to use can be given\r
+  */\r
+function doError($msg, $skin = '') {\r
+    global $errormessage, $CONF, $skinid, $blogid, $manager;\r
+\r
+    if ($skin == '') {\r
+\r
+        if (SKIN::existsID($skinid) ) {\r
+            $skin = new SKIN($skinid);\r
+        } elseif ($manager->existsBlogID($blogid) ) {\r
+            $blog =& $manager->getBlog($blogid);\r
+            $skin = new SKIN($blog->getDefaultSkin() );\r
+        } elseif ($CONF['DefaultBlog']) {\r
+            $blog =& $manager->getBlog($CONF['DefaultBlog']);\r
+            $skin = new SKIN($blog->getDefaultSkin() );\r
+        } else {\r
+            // this statement should actually never be executed\r
+            $skin = new SKIN($CONF['BaseSkin']);\r
+        }\r
+\r
+    }\r
+\r
+    $skinid = $skin->id;\r
+    $errormessage = $msg;\r
+    $skin->parse('error');\r
+    exit;\r
+}\r
+\r
+function getConfig() {\r
+    global $CONF;\r
+\r
+    $query = 'SELECT * FROM ' . sql_table('config');\r
+    $res = sql_query($query);\r
+\r
+    while ($obj = sql_fetch_object($res) ) {\r
+        $CONF[$obj->name] = $obj->value;\r
+    }\r
+}\r
+\r
+// some checks for names of blogs, categories, templates, members, ...\r
+function isValidShortName($name) {\r
+    return eregi('^[a-z0-9]+$', $name);\r
+}\r
+\r
+function isValidDisplayName($name) {\r
+    return eregi('^[a-z0-9]+[a-z0-9 ]*[a-z0-9]+$', $name);\r
+}\r
+\r
+function isValidCategoryName($name) {\r
+    return 1;\r
+}\r
+\r
+function isValidTemplateName($name) {\r
+    return eregi('^[a-z0-9/]+$', $name);\r
+}\r
+\r
+function isValidSkinName($name) {\r
+    return eregi('^[a-z0-9/]+$', $name);\r
+}\r
+\r
+// add and remove linebreaks\r
+function addBreaks($var) {\r
+    return nl2br($var);\r
+}\r
+\r
+function removeBreaks($var) {\r
+    return preg_replace("/<br \/>([\r\n])/", "$1", $var);\r
+}\r
+\r
+// shortens a text string to maxlength ($toadd) is what needs to be added\r
+// at the end (end length is <= $maxlength)\r
+function shorten($text, $maxlength, $toadd) {\r
+    // 1. remove entities...\r
+//     $trans = get_html_translation_table(HTML_ENTITIES);\r
+    $trans = get_html_translation_table(HTML_SPECIALCHARS); // for Japanese\r
+    $trans = array_flip($trans);\r
+    $text  = strtr($text, $trans);\r
+\r
+    // 2. the actual shortening\r
+    if (strlen($text) > $maxlength) {\r
+//             $text = substr($text, 0, $maxlength - strlen($toadd) ) . $toadd;\r
+        $text = mb_strimwidth($text, 0, $maxlength, $toadd, _CHARSET); // for Japanese\r
+    }\r
+\r
+    return $text;\r
+}\r
+\r
+/**\r
+  * Converts a unix timestamp to a mysql DATETIME format, and places\r
+  * quotes around it.\r
+  */\r
+function mysqldate($timestamp) {\r
+    return '"' . date('Y-m-d H:i:s', $timestamp) . '"';\r
+}\r
+\r
+/**\r
+  * functions for use in index.php\r
+  */\r
+function selectBlog($shortname) {\r
+    global $blogid, $archivelist;\r
+    $blogid = getBlogIDFromName($shortname);\r
+\r
+    // also force archivelist variable, if it is set\r
+    if ($archivelist) {\r
+        $archivelist = $blogid;\r
+    }\r
+}\r
+\r
+function selectSkin($skinname) {\r
+    global $skinid;\r
+    $skinid = SKIN::getIdFromName($skinname);\r
+}\r
+\r
+/**\r
+ * Can take either a category ID or a category name (be aware that\r
+ * multiple categories can have the same name)\r
+ */\r
+function selectCategory($cat) {\r
+    global $catid;\r
+    if (is_numeric($cat) ) {\r
+        $catid = intval($cat);\r
+    } else {\r
+        $catid = getCatIDFromName($cat);\r
+    }\r
+}\r
+\r
+function selectItem($id) {\r
+    global $itemid;\r
+    $itemid = intval($id);\r
+}\r
+\r
+// force the use of a language file (warning: can cause warnings)\r
+function selectLanguage($language) {\r
+    global $DIR_LANG;\r
+//    include($DIR_LANG . ereg_replace( '[\\|/]', '', $language) . '.php');\r
+    include($DIR_LANG . preg_replace( '@\\|/@', '', $language) . '.php');\r
+}\r
+\r
+function parseFile($filename, $includeMode = 'normal', $includePrefix = '') {\r
+    $handler = new ACTIONS('fileparser');\r
+    $parser = new PARSER(SKIN::getAllowedActionsForType('fileparser'), $handler);\r
+    $handler->parser =& $parser;\r
+\r
+    // set IncludeMode properties of parser\r
+    PARSER::setProperty('IncludeMode', $includeMode);\r
+    PARSER::setProperty('IncludePrefix', $includePrefix);\r
+\r
+    if (!file_exists($filename) ) {\r
+        doError(_GFUNCTIONS_PARSEFILE_FILEMISSING);\r
+    }\r
+\r
+    $fsize = filesize($filename);\r
+\r
+    if ($fsize <= 0) {\r
+        return;\r
+    }\r
+\r
+    // read file\r
+    $fd = fopen ($filename, 'r');\r
+    $contents = fread ($fd, $fsize);\r
+    fclose ($fd);\r
+\r
+    // parse file contents\r
+    $parser->parse($contents);\r
+}\r
+\r
+/**\r
+  * Outputs a debug message\r
+  */\r
+function debug($msg) {\r
+    echo '<p><b>' . $msg . "</b></p>\n";\r
+}\r
+\r
+// shortcut\r
+function addToLog($level, $msg) {\r
+    ACTIONLOG::add($level, $msg);\r
+}\r
+\r
+// shows a link to help file\r
+function help($id) {\r
+    echo helpHtml($id);\r
+}\r
+\r
+function helpHtml($id) {\r
+    global $CONF;\r
+    return helplink($id) . '<img src="' . $CONF['AdminURL'] . 'documentation/icon-help.gif" width="15" height="15" alt="' . _HELP_TT . '" title="' . _HELP_TT . '" /></a>';\r
+}\r
+\r
+function helplink($id) {\r
+    global $CONF;\r
+    return '<a href="' . $CONF['AdminURL'] . 'documentation/help.html#'. $id . '" onclick="if (event &amp;&amp; event.preventDefault) event.preventDefault(); return help(this.href);">';\r
+}\r
+\r
+function getMailFooter() {\r
+    $message = "\n\n-----------------------------";\r
+    $message .=  "\n   Powered by Nucleus CMS";\r
+    $message .=  "\n(http://www.nucleuscms.org/)";\r
+    return $message;\r
+}\r
+\r
+/**\r
+  * Returns the name of the language to use\r
+  * preference priority: member - site\r
+  * defaults to english when no good language found\r
+  *\r
+  * checks if file exists, etc...\r
+  */\r
+function getLanguageName() {\r
+    global $CONF, $member;\r
+\r
+    if ($member && $member->isLoggedIn() ) {\r
+        // try to use members language\r
+        $memlang = $member->getLanguage();\r
+\r
+        if (($memlang != '') && (checkLanguage($memlang) ) ) {\r
+            return $memlang;\r
+        }\r
+    }\r
+\r
+    // use default language\r
+    if (checkLanguage($CONF['Language']) ) {\r
+        return $CONF['Language'];\r
+    } else {\r
+        return 'english';\r
+    }\r
+}\r
+\r
+/**\r
+  * Includes a PHP file. This method can be called while parsing templates and skins\r
+  */\r
+function includephp($filename) {\r
+    // make predefined variables global, so most simple scripts can be used here\r
+\r
+    // apache (names taken from PHP doc)\r
+    global $GATEWAY_INTERFACE, $SERVER_NAME, $SERVER_SOFTWARE, $SERVER_PROTOCOL;\r
+    global $REQUEST_METHOD, $QUERY_STRING, $DOCUMENT_ROOT, $HTTP_ACCEPT;\r
+    global $HTTP_ACCEPT_CHARSET, $HTTP_ACCEPT_ENCODING, $HTTP_ACCEPT_LANGUAGE;\r
+    global $HTTP_CONNECTION, $HTTP_HOST, $HTTP_REFERER, $HTTP_USER_AGENT;\r
+    global $REMOTE_ADDR, $REMOTE_PORT, $SCRIPT_FILENAME, $SERVER_ADMIN;\r
+    global $SERVER_PORT, $SERVER_SIGNATURE, $PATH_TRANSLATED, $SCRIPT_NAME;\r
+    global $REQUEST_URI;\r
+\r
+    // php (taken from PHP doc)\r
+    global $argv, $argc, $PHP_SELF, $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS;\r
+    global $HTTP_POST_FILES, $HTTP_ENV_VARS, $HTTP_SERVER_VARS, $HTTP_SESSION_VARS;\r
+\r
+    // other\r
+    global $PATH_INFO, $HTTPS, $HTTP_RAW_POST_DATA, $HTTP_X_FORWARDED_FOR;\r
+\r
+    if (@file_exists($filename) ) {\r
+        include($filename);\r
+    }\r
+}\r
+\r
+/**\r
+  * Checks if a certain language/plugin exists\r
+  */\r
+function checkLanguage($lang) {\r
+    global $DIR_LANG ;\r
+//    return file_exists($DIR_LANG . ereg_replace( '[\\|/]', '', $lang) . '.php');\r
+    return file_exists($DIR_LANG . preg_replace( '@\\|/@', '', $lang) . '.php');\r
+}\r
+\r
+function checkPlugin($plug) {\r
+    global $DIR_PLUGINS;\r
+    return file_exists($DIR_PLUGINS . ereg_replace( '[\\|/]', '', $plug) . '.php');\r
+//    return file_exists($DIR_PLUGINS . preg_replace( '@\\|/@', '', $plug) . '.php');\r
+}\r
+\r
+/**\r
+  * Centralisation of the functions that generate links\r
+  */\r
+function createItemLink($itemid, $extra = '') {\r
+    return createLink('item', array('itemid' => $itemid, 'extra' => $extra) );\r
+}\r
+\r
+function createMemberLink($memberid, $extra = '') {\r
+    return createLink('member', array('memberid' => $memberid, 'extra' => $extra) );\r
+}\r
+\r
+function createCategoryLink($catid, $extra = '') {\r
+    return createLink('category', array('catid' => $catid, 'extra' => $extra) );\r
+}\r
+\r
+function createArchiveListLink($blogid = '', $extra = '') {\r
+    return createLink('archivelist', array('blogid' => $blogid, 'extra' => $extra) );\r
+}\r
+\r
+function createArchiveLink($blogid, $archive, $extra = '') {\r
+    return createLink('archive', array('blogid' => $blogid, 'archive' => $archive, 'extra' => $extra) );\r
+}\r
+\r
+function createBlogidLink($blogid, $params = '') {\r
+    return createLink('blog', array('blogid' => $blogid, 'extra' => $params) );\r
+}\r
+\r
+function createLink($type, $params) {\r
+    global $manager, $CONF;\r
+\r
+    $generatedURL = '';\r
+    $usePathInfo = ($CONF['URLMode'] == 'pathinfo');\r
+\r
+    // ask plugins first\r
+    $created = false;\r
+\r
+    if ($usePathInfo) {\r
+        $manager->notify(\r
+            'GenerateURL',\r
+            array(\r
+                'type' => $type,\r
+                'params' => $params,\r
+                'completed' => &$created,\r
+                'url' => &$url\r
+            )\r
+        );\r
+    }\r
+\r
+    // if a plugin created the URL, return it\r
+    if ($created) {\r
+        return $url;\r
+    }\r
+\r
+    // default implementation\r
+    switch ($type) {\r
+        case 'item':\r
+            if ($usePathInfo) {\r
+                $url = $CONF['ItemURL'] . '/' . $CONF['ItemKey'] . '/' . $params['itemid'];\r
+            } else {\r
+                $url = $CONF['ItemURL'] . '?itemid=' . $params['itemid'];\r
+            }\r
+            break;\r
+\r
+        case 'member':\r
+            if ($usePathInfo) {\r
+                $url = $CONF['MemberURL'] . '/' . $CONF['MemberKey'] . '/' . $params['memberid'];\r
+            } else {\r
+                $url = $CONF['MemberURL'] . '?memberid=' . $params['memberid'];\r
+            }\r
+            break;\r
+\r
+        case 'category':\r
+            if ($usePathInfo) {\r
+                $url = $CONF['CategoryURL'] . '/' . $CONF['CategoryKey'] . '/' . $params['catid'];\r
+            } else {\r
+                $url = $CONF['CategoryURL'] . '?catid=' . $params['catid'];\r
+            }\r
+            break;\r
+\r
+        case 'archivelist':\r
+            if (!$params['blogid']) {\r
+                $params['blogid'] = $CONF['DefaultBlog'];\r
+            }\r
+\r
+            if ($usePathInfo) {\r
+                $url = $CONF['ArchiveListURL'] . '/' . $CONF['ArchivesKey'] . '/' . $params['blogid'];\r
+            } else {\r
+                $url = $CONF['ArchiveListURL'] . '?archivelist=' . $params['blogid'];\r
+            }\r
+            break;\r
+\r
+        case 'archive':\r
+            if ($usePathInfo) {\r
+                $url = $CONF['ArchiveURL'] . '/' . $CONF['ArchiveKey'] . '/'.$params['blogid'].'/' . $params['archive'];\r
+            } else {\r
+                $url = $CONF['ArchiveURL'] . '?blogid='.$params['blogid'].'&amp;archive=' . $params['archive'];\r
+            }\r
+            break;\r
+\r
+        case 'blog':\r
+            if ($usePathInfo) {\r
+                $url = $CONF['BlogURL'] . '/' . $CONF['BlogKey'] . '/' . $params['blogid'];\r
+            } else {\r
+                $url = $CONF['BlogURL'] . '?blogid=' . $params['blogid'];\r
+            }\r
+            break;\r
+    }\r
+\r
+    return addLinkParams($url, (isset($params['extra'])? $params['extra'] : null));\r
+}\r
+\r
+function createBlogLink($url, $params) {\r
+    global $CONF;\r
+    if ($CONF['URLMode'] == 'normal') {\r
+        if (strpos($url, '?') === FALSE && is_array($params)) {\r
+            $fParam = reset($params);\r
+            $fKey   = key($params);\r
+            array_shift($params);\r
+            $url .= '?' . $fKey . '=' . $fParam;\r
+        }\r
+    } elseif ($CONF['URLMode'] == 'pathinfo' && substr($url, -1) == '/') {\r
+        $url = substr($url, 0, -1);\r
+    }\r
+    return addLinkParams($url, $params);\r
+}\r
+\r
+function addLinkParams($link, $params) {\r
+    global $CONF;\r
+\r
+    if (is_array($params) ) {\r
+\r
+        if ($CONF['URLMode'] == 'pathinfo') {\r
+\r
+            foreach ($params as $param => $value) {\r
+                $link .= '/' . $param . '/' . urlencode($value);\r
+            }\r
+\r
+        } else {\r
+\r
+            foreach ($params as $param => $value) {\r
+                $link .= '&amp;' . $param . '=' . urlencode($value);\r
+            }\r
+\r
+        }\r
+    }\r
+\r
+    return $link;\r
+}\r
+\r
+/**\r
+ * @param $querystr\r
+ *             querystring to alter (e.g. foo=1&bar=2&x=y)\r
+ * @param $param\r
+ *             name of parameter to change (e.g. 'foo')\r
+ * @param $value\r
+ *             New value for that parameter (e.g. 3)\r
+ * @result\r
+ *             altered query string (for the examples above: foo=3&bar=2&x=y)\r
+ */\r
+function alterQueryStr($querystr, $param, $value) {\r
+    $vars = explode('&', $querystr);\r
+    $set  = false;\r
+\r
+    for ($i = 0; $i < count($vars); $i++) {\r
+        $v = explode('=', $vars[$i]);\r
+\r
+        if ($v[0] == $param) {\r
+            $v[1] = $value;\r
+            $vars[$i] = implode('=', $v);\r
+            $set = true;\r
+            break;\r
+        }\r
+    }\r
+\r
+    if (!$set) {\r
+        $vars[] = $param . '=' . $value;\r
+    }\r
+\r
+    return ltrim(implode('&', $vars), '&');\r
+}\r
+\r
+// passes one variable as hidden input field (multiple fields for arrays)\r
+// @see passRequestVars in varsx.x.x.php\r
+function passVar($key, $value) {\r
+    // array ?\r
+    if (is_array($value) ) {\r
+        for ($i = 0; $i < sizeof($value); $i++) {\r
+            passVar($key . '[' . $i . ']', $value[$i]);\r
+        }\r
+\r
+        return;\r
+    }\r
+\r
+    // other values: do stripslashes if needed\r
+    ?><input type="hidden" name="<?php echo htmlspecialchars($key)?>" value="<?php echo htmlspecialchars(undoMagic($value) )?>" /><?php\r
+}\r
+\r
+/*\r
+    Date format functions (to be used from [%date(..)%] skinvars\r
+*/\r
+function formatDate($format, $timestamp, $defaultFormat, &$blog) {\r
+    // apply blog offset (#42)\r
+    $boffset = $blog ? $blog->getTimeOffset() * 3600 : 0;\r
+    $offset = date('Z', $timestamp) + $boffset;\r
+\r
+    switch ($format) {\r
+        case 'rfc822':\r
+            if ($offset >= 0) {\r
+                $tz = '+';\r
+            } else {\r
+                $tz = '-';\r
+                $offset = -$offset;\r
+            }\r
+\r
+            $tz .= sprintf("%02d%02d", floor($offset / 3600), round(($offset % 3600) / 60) );\r
+            return date('D, j M Y H:i:s ', $timestamp) . $tz;\r
+\r
+        case 'rfc822GMT':\r
+            $timestamp -= $offset;\r
+            return date('D, j M Y H:i:s ', $timestamp) . 'GMT';\r
+\r
+        case 'utc':\r
+            $timestamp -= $offset;\r
+            return date('Y-m-d\TH:i:s\Z', $timestamp);\r
+\r
+        case 'iso8601':\r
+            if ($offset >= 0) {\r
+                $tz = '+';\r
+            } else {\r
+                $tz = '-';\r
+                $offset = -$offset;\r
+            }\r
+\r
+            $tz .= sprintf("%02d:%02d", floor($offset / 3600), round(($offset % 3600) / 60) );\r
+            return date('Y-m-d\TH:i:s', $timestamp) . $tz;\r
+\r
+        default :\r
+            return strftime($format ? $format : $defaultFormat, $timestamp);\r
+    }\r
+}\r
+\r
+function encoding_check($val, $key, $encoding=false, $exclude=false) {\r
+    /*\r
+      When 3rd argument is set, return if checked already.\r
+      When 4th argument is set, set the excluded key(s).\r
+    */\r
+    static $search=false, $checked=array(), $excludes=array();\r
+    if ($exclude!==false) {\r
+        if (is_array($exclude)) {\r
+            foreach($exclude as $v) $excludes[$v]=true;\r
+        } else $excludes[$exclude]=true;\r
+        return;\r
+    }\r
+    if ($encoding!==false) {\r
+        switch($encoding=strtolower($encoding)){\r
+            case 'utf-8':\r
+                $search='/([\x00-\x7F]+'.\r
+                    '|[\xC2-\xDF][\x80-\xBF]'.\r
+                    '|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]'.\r
+                    '|[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]'.\r
+                    '|[\xF8-\xFB][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF]'.\r
+                    '|[\xFC-\xFD][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF])/';\r
+                    break;\r
+            case 'euc-jp':\r
+                $search='/([\x00-\x7F]+'.\r
+                    '|[\x8E][\xA0-\xDF]'.\r
+                    '|[\x8F]?[\xA1-\xFE][\xA1-\xFE])/';\r
+                break;\r
+            case 'gb2312':\r
+                $search='/([\x00-\x7F]+'.\r
+                    '|[\xA1-\xF7][\xA1-\xFE])/';\r
+                break;\r
+            case 'shift_jis':\r
+                // Note that shift_jis is only supported for output.\r
+                // Using shift_jis in DB is prohibited.\r
+                $search='/([\x00-\x7F\xA1-\xDF]+'.\r
+                    '|[\x81-\x9F\xE0-\xFC][\x40-\xFC])/';\r
+                break;\r
+            default:\r
+                $search=false;\r
+                if (preg_match('/^iso\-8859\-[0-9]{1,2}$/',$encoding)) break;\r
+                if (preg_match('/^windows\-125[0-8]$/',$encoding)) break;\r
+                startUpError('<p>Unknown or non-supported encoding.</p>', 'Encoding Error');\r
+                exit;\r
+        }\r
+        if (isset($checked[$encoding])) return true; // Already checked.\r
+        $checked[$encoding]=true;\r
+    }\r
+    if ($key===false) return false; // Not yet checked.\r
+    if ($search===false) return true; // non-multibyte encoding\r
+    if (isset($excludes[$key])) return true; // This key isn't checked.\r
+    if (is_array($val)) {\r
+        array_walk($val, 'encoding_check');\r
+    } else {\r
+        $result=preg_replace($search,'',$val);\r
+        if (strlen($result)!=0) {\r
+            startUpError('<p>Invalid input.</p>', 'Input Error');\r
+            exit;\r
+        }\r
+    }\r
+    $result=preg_replace($search,'',$key);\r
+    if (strlen($result)!=0) {\r
+        startUpError('<p>Invalid input.</p>', 'Input Error');\r
+        exit;\r
+    }\r
+    return true;\r
+}\r
+\r
+function checkVars($aVars) {\r
+    global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, $HTTP_ENV_VARS, $HTTP_POST_FILES, $HTTP_SESSION_VARS;\r
+\r
+    foreach ($aVars as $varName) {\r
+\r
+        if (phpversion() >= '4.1.0') {\r
+\r
+            if (   isset($_GET[$varName])\r
+                || isset($_POST[$varName])\r
+                || isset($_COOKIE[$varName])\r
+                || isset($_ENV[$varName])\r
+                || isset($_SESSION[$varName])\r
+                || isset($_FILES[$varName])\r
+            ) {\r
+                die('Sorry. An error occurred.');\r
+            }\r
+\r
+        } else {\r
+\r
+            if (   isset($HTTP_GET_VARS[$varName])\r
+                || isset($HTTP_POST_VARS[$varName])\r
+                || isset($HTTP_COOKIE_VARS[$varName])\r
+                || isset($HTTP_ENV_VARS[$varName])\r
+                || isset($HTTP_SESSION_VARS[$varName])\r
+                || isset($HTTP_POST_FILES[$varName])\r
+            ) {\r
+                die('Sorry. An error occurred.');\r
+            }\r
+\r
+        }\r
+    }\r
+}\r
+\r
+\r
+/**\r
+ * Sanitize parameters such as $_GET and $_SERVER['REQUEST_URI'] etc.\r
+ * to avoid XSS\r
+ */\r
+function sanitizeParams()\r
+{\r
+    global $HTTP_SERVER_VARS;\r
+\r
+    $array = array();\r
+    $str = '';\r
+    $frontParam = '';\r
+\r
+    // REQUEST_URI of $HTTP_SERVER_VARS\r
+    $str =& $HTTP_SERVER_VARS["REQUEST_URI"];\r
+    serverStringToArray($str, $array, $frontParam);\r
+    sanitizeArray($array);\r
+    arrayToServerString($array, $frontParam, $str);\r
+\r
+    // QUERY_STRING of $HTTP_SERVER_VARS\r
+    $str =& $HTTP_SERVER_VARS["QUERY_STRING"];\r
+    serverStringToArray($str, $array, $frontParam);\r
+    sanitizeArray($array);\r
+    arrayToServerString($array, $frontParam, $str);\r
+\r
+    if (phpversion() >= '4.1.0') {\r
+        // REQUEST_URI of $_SERVER\r
+        $str =& $_SERVER["REQUEST_URI"];\r
+        serverStringToArray($str, $array, $frontParam);\r
+        sanitizeArray($array);\r
+        arrayToServerString($array, $frontParam, $str);\r
+\r
+        // QUERY_STRING of $_SERVER\r
+        $str =& $_SERVER["QUERY_STRING"];\r
+        serverStringToArray($str, $array, $frontParam);\r
+        sanitizeArray($array);\r
+        arrayToServerString($array, $frontParam, $str);\r
+    }\r
+\r
+    // $_GET\r
+    convArrayForSanitizing($_GET, $array);\r
+    sanitizeArray($array);\r
+    revertArrayForSanitizing($array, $_GET);\r
+\r
+    // $_REQUEST (only GET param)\r
+    convArrayForSanitizing($_REQUEST, $array);\r
+    sanitizeArray($array);\r
+    revertArrayForSanitizing($array, $_REQUEST);\r
+}\r
+\r
+/**\r
+ * Check ticket when not checked in plugin's admin page\r
+ * to avoid CSRF.\r
+ * Also avoid the access to plugin/index.php by guest user.\r
+ */\r
+function ticketForPlugin(){\r
+    global $CONF,$DIR_PLUGINS,$member,$ticketforplugin;\r
+\r
+    /* initialize */\r
+    $ticketforplugin=array();\r
+    $ticketforplugin['ticket']=false;\r
+\r
+    /* Check if using plugin's php file. */\r
+    if ($p_translated=serverVar('PATH_TRANSLATED')) {\r
+        if (!file_exists($p_translated)) $p_translated='';\r
+    }\r
+    if (!$p_translated) {\r
+        $p_translated=serverVar('SCRIPT_FILENAME');\r
+        if (!file_exists($p_translated)) {\r
+            header("HTTP/1.0 404 Not Found");\r
+            exit('');\r
+        }\r
+    }\r
+    $p_translated=str_replace('\\','/',$p_translated);\r
+    $d_plugins=str_replace('\\','/',$DIR_PLUGINS);\r
+    if (strpos($p_translated,$d_plugins)!==0) return;// This isn't plugin php file.\r
+\r
+    /* Solve the plugin php file or admin directory */\r
+    $phppath=substr($p_translated,strlen($d_plugins));\r
+    $phppath=preg_replace('!^/!','',$phppath);// Remove the first "/" if exists.\r
+    $path=preg_replace('/^NP_(.*)\.php$/','$1',$phppath); // Remove the first "NP_" and the last ".php" if exists.\r
+    $path=preg_replace('!^([^/]*)/(.*)$!','$1',$path); // Remove the "/" and beyond.\r
+\r
+    /* Solve the plugin name. */\r
+    $plugins=array();\r
+    $query='SELECT pfile FROM '.sql_table('plugin');\r
+    $res=sql_query($query);\r
+    while($row=sql_fetch_row($res)) {\r
+        $name=substr($row[0],3);\r
+        $plugins[strtolower($name)]=$name;\r
+    }\r
+    sql_free_result($res);\r
+    if ($plugins[$path]) $plugin_name=$plugins[$path];\r
+    else if (in_array($path,$plugins)) $plugin_name=$path;\r
+    else {\r
+        header("HTTP/1.0 404 Not Found");\r
+        exit('');\r
+    }\r
+\r
+    /* Return if not index.php */\r
+    if ( $phppath!=strtolower($plugin_name).'/'\r
+        && $phppath!=strtolower($plugin_name).'/index.php' ) return;\r
+\r
+    /* Exit if not logged in. */\r
+    if ( !$member->isLoggedIn() ) exit(_GFUNCTIONS_YOU_AERNT_LOGGEDIN);\r
+\r
+    global $manager,$DIR_LIBS,$DIR_LANG,$HTTP_GET_VARS,$HTTP_POST_VARS;\r
+\r
+    /* Check if this feature is needed (ie, if "$manager->checkTicket()" is not included in the script). */\r
+    if (!($p_translated=serverVar('PATH_TRANSLATED'))) $p_translated=serverVar('SCRIPT_FILENAME');\r
+    if ($file=@file($p_translated)) {\r
+        $prevline='';\r
+        foreach($file as $line) {\r
+            if (preg_match('/[\$]manager([\s]*)[\-]>([\s]*)checkTicket([\s]*)[\(]/i',$prevline.$line)) return;\r
+            $prevline=$line;\r
+        }\r
+    }\r
+\r
+    /* Show a form if not valid ticket */\r
+    if ( ( strstr(serverVar('REQUEST_URI'),'?') || serverVar('QUERY_STRING')\r
+            || strtoupper(serverVar('REQUEST_METHOD'))=='POST' )\r
+                && (!$manager->checkTicket()) ){\r
+\r
+        if (!class_exists('PluginAdmin')) {\r
+            $language = getLanguageName();\r
+//            include($DIR_LANG . ereg_replace( '[\\|/]', '', $language) . '.php');\r
+            include($DIR_LANG . preg_replace( '@\\|/@', '', $language) . '.php');\r
+            include($DIR_LIBS . 'PLUGINADMIN.php');\r
+        }\r
+        if (!(function_exists('mb_strimwidth') || extension_loaded('mbstring'))) {\r
+            if (file_exists($DIR_LIBS.'mb_emulator/mb-emulator.php')) {\r
+                global $mbemu_internals;\r
+                include_once($DIR_LIBS.'mb_emulator/mb-emulator.php');\r
+            }\r
+        }\r
+        $oPluginAdmin = new PluginAdmin($plugin_name);\r
+        $oPluginAdmin->start();\r
+        echo '<p>' . _ERROR_BADTICKET . "</p>\n";\r
+\r
+        /* Show the form to confirm action */\r
+        // PHP 4.0.x support\r
+        $get=  (isset($_GET))  ? $_GET  : $HTTP_GET_VARS;\r
+        $post= (isset($_POST)) ? $_POST : $HTTP_POST_VARS;\r
+        // Resolve URI and QUERY_STRING\r
+        if ($uri=serverVar('REQUEST_URI')) {\r
+            list($uri,$qstring)=explode('?',$uri);\r
+        } else {\r
+            if ( !($uri=serverVar('PHP_SELF')) ) $uri=serverVar('SCRIPT_NAME');\r
+            $qstring=serverVar('QUERY_STRING');\r
+        }\r
+        if ($qstring) $qstring='?'.$qstring;\r
+        echo '<p>'._SETTINGS_UPDATE.' : '._QMENU_PLUGINS.' <span style="color:red;">'.\r
+            htmlspecialchars($plugin_name)."</span> ?</p>\n";\r
+        switch(strtoupper(serverVar('REQUEST_METHOD'))){\r
+        case 'POST':\r
+            echo '<form method="POST" action="'.htmlspecialchars($uri.$qstring).'">';\r
+            $manager->addTicketHidden();\r
+            _addInputTags($post);\r
+            break;\r
+        case 'GET':\r
+            echo '<form method="GET" action="'.htmlspecialchars($uri).'">';\r
+            $manager->addTicketHidden();\r
+            _addInputTags($get);\r
+        default:\r
+            break;\r
+        }\r
+        echo '<input type="submit" value="'._YES.'" />&nbsp;&nbsp;&nbsp;&nbsp;';\r
+        echo '<input type="button" value="'._NO.'" onclick="history.back(); return false;" />';\r
+        echo "</form>\n";\r
+\r
+        $oPluginAdmin->end();\r
+        exit;\r
+    }\r
+\r
+    /* Create new ticket */\r
+    $ticket=$manager->addTicketToUrl('');\r
+    $ticketforplugin['ticket']=substr($ticket,strpos($ticket,'ticket=')+7);\r
+}\r
+function _addInputTags(&$keys,$prefix=''){\r
+    foreach($keys as $key=>$value){\r
+        if ($prefix) $key=$prefix.'['.$key.']';\r
+        if (is_array($value)) _addInputTags($value,$key);\r
+        else {\r
+            if (get_magic_quotes_gpc()) $value=stripslashes($value);\r
+            if ($key=='ticket') continue;\r
+            echo '<input type="hidden" name="'.htmlspecialchars($key).\r
+                '" value="'.htmlspecialchars($value).'" />'."\n";\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * Convert the server string such as $_SERVER['REQUEST_URI']\r
+ * to arry like arry['blogid']=1 and array['page']=2 etc.\r
+ */\r
+function serverStringToArray($str, &$array, &$frontParam)\r
+{\r
+    // init param\r
+    $array = array();\r
+    $fronParam = "";\r
+\r
+    // split front param, e.g. /index.php, and others, e.g. blogid=1&page=2\r
+    if (strstr($str, "?")){\r
+        list($frontParam, $args) = preg_split("/\?/", $str, 2);\r
+    }\r
+    else {\r
+        $args = $str;\r
+        $frontParam = "";\r
+    }\r
+\r
+    // If there is no args like blogid=1&page=2, return\r
+    if (!strstr($str, "=") && !strlen($frontParam)) {\r
+        $frontParam = $str;\r
+        return;\r
+    }\r
+\r
+    $array = explode("&", $args);\r
+}\r
+\r
+/**\r
+ * Convert array like array['blogid'] to server string\r
+ * such as $_SERVER['REQUEST_URI']\r
+ */\r
+function arrayToServerString($array, $frontParam, &$str)\r
+{\r
+    if (strstr($str, "?")) {\r
+        $str = $frontParam . "?";\r
+    } else {\r
+        $str = $frontParam;\r
+    }\r
+    if (count($array)) {\r
+        $str .= implode("&", $array);\r
+    }\r
+}\r
+\r
+/**\r
+ * Sanitize array parameters.\r
+ * This function checks both key and value.\r
+ * - check key if it inclues " (double quote),  remove from array\r
+ * - check value if it includes \ (escape sequece), remove remaining string\r
+ */\r
+function sanitizeArray(&$array)\r
+{\r
+    $excludeListForSanitization = array('query');\r
+//     $excludeListForSanitization = array();\r
+\r
+    foreach ($array as $k => $v) {\r
+\r
+        // split to key and value\r
+        list($key, $val) = preg_split("/=/", $v, 2);\r
+        if (!isset($val)) {\r
+            continue;\r
+        }\r
+\r
+        // when magic quotes is on, need to use stripslashes,\r
+        // and then addslashes\r
+        if (get_magic_quotes_gpc()) {\r
+            $val = stripslashes($val);\r
+        }\r
+        $val = addslashes($val);\r
+\r
+        // if $key is included in exclude list, skip this param\r
+        if (!in_array($key, $excludeListForSanitization)) {\r
+\r
+            // check value\r
+            if (strpos($val, '\\')) {\r
+                list($val, $tmp) = explode('\\', $val);\r
+            }\r
+\r
+            // remove control code etc.\r
+            $val = strtr($val, "\0\r\n<>'\"", "       ");\r
+\r
+            // check key\r
+            if (preg_match('/\"/i', $key)) {\r
+                unset($array[$k]);\r
+                continue;\r
+            }\r
+\r
+            // set sanitized info\r
+            $array[$k] = sprintf("%s=%s", $key, $val);\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * Convert array for sanitizeArray function\r
+ */\r
+function convArrayForSanitizing($src, &$array)\r
+{\r
+    $array = array();\r
+    foreach ($src as $key => $val) {\r
+        if (key_exists($key, $_GET)) {\r
+            array_push($array, sprintf("%s=%s", $key, $val));\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * Revert array after sanitizeArray function\r
+ */\r
+function revertArrayForSanitizing($array, &$dst)\r
+{\r
+    foreach ($array as $v) {\r
+        list($key, $val) = preg_split("/=/", $v, 2);\r
+        $dst[$key] = $val;\r
+    }\r
+}\r
+\r
+/**\r
+ * Stops processing the request and redirects to the given URL.\r
+ * - no actual contents should have been sent to the output yet\r
+ * - the URL will be stripped of illegal or dangerous characters\r
+ */\r
+function redirect($url) {\r
+    $url = preg_replace('|[^a-z0-9-~+_.?#=&;,/:@%*]|i', '', $url);\r
+    header('Location: ' . $url);\r
+    exit;\r
+}\r
+\r
+/**\r
+ * Strip HTML tags from a string\r
+ * This function is a bit more intelligent than a regular call to strip_tags(),\r
+ * because it also deletes the contents of certain tags and cleans up any\r
+ * unneeded whitespace.\r
+ */\r
+function stringStripTags ($string) {\r
+    $string = preg_replace("/<del[^>]*>.+<\/del[^>]*>/isU", '', $string);\r
+    $string = preg_replace("/<script[^>]*>.+<\/script[^>]*>/isU", '', $string);\r
+    $string = preg_replace("/<style[^>]*>.+<\/style[^>]*>/isU", '', $string);\r
+    $string = str_replace('>', '> ', $string);\r
+    $string = str_replace('<', ' <', $string);\r
+    $string = strip_tags($string);\r
+    $string = preg_replace("/\s+/", " ", $string);\r
+    $string = trim($string);\r
+    return $string;\r
+}\r
+\r
+/**\r
+ * Make a string containing HTML safe for use in a HTML attribute\r
+ * Tags are stripped and entities are normalized\r
+ */\r
+function stringToAttribute ($string) {\r
+    $string = stringStripTags($string);\r
+    $string = entity::named_to_numeric($string);\r
+    $string = entity::normalize_numeric($string);\r
+\r
+    if (strtoupper(_CHARSET) == 'UTF-8') {\r
+        $string = entity::numeric_to_utf8($string);\r
+    }\r
+\r
+    $string = entity::specialchars($string, 'html');\r
+    $string = entity::numeric_to_named($string);\r
+    return $string;\r
+}\r
+\r
+/**\r
+ * Make a string containing HTML safe for use in a XML document\r
+ * Tags are stripped, entities are normalized and named entities are\r
+ * converted to numeric entities.\r
+ */\r
+function stringToXML ($string) {\r
+    $string = stringStripTags($string);\r
+    $string = entity::named_to_numeric($string);\r
+    $string = entity::normalize_numeric($string);\r
+\r
+    if (strtoupper(_CHARSET) == 'UTF-8') {\r
+        $string = entity::numeric_to_utf8($string);\r
+    }\r
+\r
+    $string = entity::specialchars($string, 'xml');\r
+    return $string;\r
+}\r
+\r
+// START: functions from the end of file BLOG.php\r
+// used for mail notification (html -> text)\r
+function toAscii($html) {\r
+    // strip off most tags\r
+    $html = strip_tags($html,'<a>');\r
+    $to_replace = "/<a[^>]*href=[\"\']([^\"^']*)[\"\'][^>]*>([^<]*)<\/a>/i";\r
+    _links_init();\r
+    $ascii = preg_replace_callback ($to_replace, '_links_add', $html);\r
+    $ascii .= "\n\n" . _links_list();\r
+    return strip_tags($ascii);\r
+}\r
+\r
+function _links_init() {\r
+   global $tmp_links;\r
+   $tmp_links = array();\r
+}\r
+\r
+function _links_add($match) {\r
+   global $tmp_links;\r
+   array_push($tmp_links, $match[1]);\r
+   return $match[2] . ' [' . sizeof($tmp_links) .']';\r
+}\r
+\r
+function _links_list() {\r
+   global $tmp_links;\r
+   $output = '';\r
+   $i = 1;\r
+   foreach ($tmp_links as $current) {\r
+      $output .= "[$i] $current\n";\r
+      $i++;\r
+   }\r
+   return $output;\r
+}\r
+// END: functions from the end of file BLOG.php\r
+\r
+// START: functions from the end of file ADMIN.php\r
+/**\r
+ * @todo document this\r
+ */\r
+function encode_desc(&$data)\r
+{\r
+//     _$to_entities = get_html_translation_table(HTML_ENTITIES);\r
+    $to_entities = get_html_translation_table(HTML_SPECIALCHARS); // for Japanese\r
+    $from_entities = array_flip($to_entities);\r
+    $data = str_replace('<br />', '\n', $data); //hack\r
+    $data = strtr($data,$from_entities);\r
+    $data = strtr($data,$to_entities);\r
+    $data = str_replace('\n', '<br />', $data); //hack\r
+    return $data;\r
+}\r
+\r
+/**\r
+ * Returns the Javascript code for a bookmarklet that works on most modern browsers\r
+ *\r
+ * @param blogid\r
+ */\r
+function getBookmarklet($blogid) {\r
+    global $CONF;\r
+\r
+    // normal\r
+    $document = 'document';\r
+    $bookmarkletline = "javascript:Q='';x=".$document.";y=window;if(x.selection){Q=x.selection.createRange().text;}else if(y.getSelection){Q=y.getSelection();}else if(x.getSelection){Q=x.getSelection();}wingm=window.open('";\r
+    $bookmarkletline .= $CONF['AdminURL'] . "bookmarklet.php?blogid=$blogid";\r
+    $bookmarkletline .="&logtext='+escape(Q)+'&loglink='+escape(x.location.href)+'&loglinktitle='+escape(x.title),'nucleusbm','toolbar=no,scrollbars=no,width=710,height=550,left=10,top=10,status=no,resizable=yes');wingm.focus();";\r
+\r
+    return $bookmarkletline;\r
+}\r
+// END: functions from the end of file ADMIN.php\r
+\r
+/**\r
+ * Returns a variable or null if not set\r
+ *\r
+ * @param mixed Variable\r
+ * @return mixed Variable\r
+ */\r
+function ifset(&$var) {\r
+    if (isset($var)) {\r
+        return $var;\r
+    }\r
+\r
+    return null;\r
+}\r
+\r
+/**\r
+ * Returns number of subscriber to an event\r
+ *\r
+ * @param event\r
+ * @return number of subscriber(s)\r
+ */\r
+function numberOfEventSubscriber($event) {\r
+    $query = 'SELECT COUNT(*) as count FROM ' . sql_table('plugin_event') . ' WHERE event=\'' . $event . '\'';\r
+    $res = sql_query($query);\r
+    $obj = sql_fetch_object($res);\r
+    return $obj->count;\r
+}\r
+\r
+function selectSpecialSkinType($id) {\r
+    global $special;\r
+    $special = strtolower($id);\r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/include/admin-add.template b/utf8/nucleus/libs/include/admin-add.template
new file mode 100755 (executable)
index 0000000..7374af7
--- /dev/null
@@ -0,0 +1,143 @@
+<h2><%text(_ADD_ADDTO)%> '<%bloglink%>'</h2>\r
+\r
+<%init%>\r
+<script type="text/javascript" src="javascript/numbercheck.js"></script>\r
+<%ifautosave()%><script type="text/javascript" src="javascript/xmlhttprequest.js"></script><%endif%>\r
+\r
+<form id="addform" method="post" action="index.php" >\r
+\r
+<div>\r
+\r
+<input type="hidden" name="action" value="additem" />\r
+<input name="blogid" value="<%blogid%>" type="hidden" />\r
+<input type="hidden" name="draftid" value="0" />\r
+<%ticket%>\r
+\r
+<table>\r
+       <tr>\r
+               <th colspan="2"><%text(_ADD_CREATENEW)%></th>\r
+       </tr>\r
+       <%ifautosave()%><tr>\r
+               <td><%text(_AUTOSAVEDRAFT)%></td>\r
+               <td><span id="info"><%text(_AUTOSAVEDRAFT_NOTYETSAVED)%></span></td>\r
+       </tr><%endif%>\r
+       <tr>\r
+               <td><%text(_ADD_TITLE)%></td>\r
+               <td><input \r
+                       <%jsinput(title)%>\r
+                       tabindex="10"\r
+                       size="60" \r
+                       maxlength="160" \r
+                       value="<%contents(title)%>"\r
+                       /></td>\r
+       </tr><tr>\r
+               <td>\r
+                       <%text(_ADD_BODY)%> <%helplink(additem)%>\r
+               </td>\r
+               <td>\r
+                       <%jsbuttonbar(media+preview)%>\r
+                       <textarea\r
+                               <%jsinput(body)%>\r
+                               tabindex="20"\r
+                               cols="60"\r
+                               rows="20"><%contents(body)%></textarea>\r
+               </td>\r
+       </tr><tr id="edit" style="display:none;">\r
+               <td><%text(_ADD_PREVIEW)%></td>\r
+               <td><b><span id="prevtitle">&#160;</span></b><br />\r
+                       <span id="prevbody">&#160;</span><br />\r
+                       <span id="prevmore">&#160;</span><br />\r
+               </td>\r
+       </tr><tr>\r
+       \r
+<%ifblogsetting(bcomments)%>\r
+               <td><%text(_ADD_DISABLE_COMMENTS)%></td>\r
+               <td>\r
+                       <input name="closed" type="radio" tabindex="30" value="1" id="closed_yes" /><label for="closed_yes"><%text(_YES)%></label>\r
+                       <input name="closed" type="radio" tabindex="30" value="0" checked="checked" id="closed_no" /><label for="closed_no"><%text(_NO)%></label>\r
+               </td>\r
+       </tr><tr>\r
+<%endif%>\r
+\r
+\r
+               <td><%text(_ADD_CATEGORY)%></td>\r
+               <td><%categories(40)%></td>\r
+       </tr><tr>\r
+               <td><%text(_SUBMIT)%></td>\r
+               <td>\r
+                       <input tabindex="60" type="submit" value="<%text(_ADD_ADDITEM)%>" \r
+                               onclick="return checkSubmit();" />\r
+\r
+                       <br /><br />\r
+\r
+                       <input name="actiontype" value="addnow" type="radio" checked='checked' id="act_now" tabindex="61" /><label for="act_now"><%text(_ADD_ADDNOW)%></label>\r
+                       <br />\r
+                       <input name="actiontype" value="addfuture" type="radio" id="act_future" tabindex="61" /><label for="act_future" ><%text(_ADD_ADDLATER)%></label> <%helplink(future)%>\r
+                       <div class="indent">\r
+                               <%text(_ADD_PLACE_ON)%>\r
+                               <input id="inputyear" name="year" tabindex="63" size="4" value="<%currenttime(year)%>" onchange="document.forms[0].act_future.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_YEAR)%>\r
+                               <input id="inputmonth" name="month" tabindex="64" size="2" value="<%currenttime(mon)%>" onchange="document.forms[0].act_future.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_MONTH)%>\r
+                               <input id="inputday" name="day" tabindex="65" size="2" value="<%currenttime(mday)%>" onchange="document.forms[0].act_future.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_DAY)%>\r
+                                \r
+                               <input id="inputhour" name="hour" tabindex="66" size="2" value="<%currenttime(hours)%>" onchange="document.forms[0].act_future.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_HOUR)%>\r
+                               <input id="inputminutes" name="minutes" tabindex="67" size="2" value="<%currenttime(minutes)%>" onchange="document.forms[0].act_future.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_MINUTE)%>\r
+                               <br /><%text(_ITEM_ADDEDITTEMPLATE_FORMAT)%>(yyyy)<%text(_ITEM_ADDEDITTEMPLATE_YEAR)%>(mm)<%text(_ITEM_ADDEDITTEMPLATE_MONTH)%>(dd)<%text(_ITEM_ADDEDITTEMPLATE_DAY)%> (hh)<%text(_ITEM_ADDEDITTEMPLATE_HOUR)%>(mm)<%text(_ITEM_ADDEDITTEMPLATE_MINUTE)%>\r
+                               \r
+                               <%ifblogsetting(ballowpast,0)%>\r
+                                       <br />\r
+                                       <%text(_ADD_NOPASTDATES)%>\r
+                               <%endif%>\r
+                       </div>\r
+                       <input name="actiontype" tabindex="61" value="adddraft" type="radio" id="act_draft" /><label for="act_draft"><%text(_ADD_ADDDRAFT)%></label> <%helplink(draft)%>\r
+               </td>\r
+       </tr><tr>\r
+               <td><%text(_ADD_PLUGIN_EXTRAS)%></td>\r
+               <td>\r
+                       <%pluginextras%>\r
+               </td>\r
+       </tr>\r
+                       <%itemoptions%> \r
+    <tr>\r
+       <th colspan="2"><%text(_ADD_MORE)%></th>\r
+       </tr><tr>\r
+               <td><%text(_ADD_MORE)%>\r
+                       <br /><%helplink(extended)%>\r
+               </td>\r
+               <td>\r
+                       <%jsbuttonbar(media+preview)%>          \r
+                       <textarea \r
+                               <%jsinput(more)%>                       \r
+                               tabindex="70"\r
+                               cols="60"\r
+                               rows="20"\r
+                               ><%contents(more)%></textarea>\r
+               </td>\r
+       </tr><tr>\r
+               <td><%text(_SUBMIT)%></td>\r
+               <td>\r
+                       <input tabindex="60" type="submit" value="<%text(_ADD_ADDITEM)%>" \r
+                               onclick="return checkSubmit();" />\r
+                       <%ifautosave()%>\r
+                       <input tabindex="80" type="button" name="autosavenow" value="<%text(_AUTOSAVEDRAFT_NOW)%>"\r
+                               onclick="autoSaveDraft();" />\r
+                       <%endif%>\r
+               </td>\r
+       </tr>\r
+</table>\r
+\r
+</div>\r
+</form>\r
+<%ifautosave()%>\r
+<script type="text/javascript">\r
+       var xmlhttprequest = new Array();\r
+       xmlhttprequest[0] = createHTTPHandler(); // AutoDraft handler\r
+       xmlhttprequest[1] = createHTTPHandler(); // UpdateTicket handler\r
+       var seconds = now(); // Last AutoDraft time\r
+       var checks = 0; // Number of checks since last AutoDraft\r
+       var addform = document.getElementById('addform'); // The form id\r
+       var goal = document.getElementById('info'); // The html div id where 'Last saved: date time' must come\r
+       var goalurl = '../action.php'; // The PHP file where the content must be posted to\r
+       var lastsavedtext = '<%text(_AUTOSAVEDRAFT_LASTSAVED)%>'; // The language variable for 'Last saved'\r
+       var formtype = 'add'; // Add or edit form\r
+</script>      \r
+<%endif%>\r
diff --git a/utf8/nucleus/libs/include/admin-edit.template b/utf8/nucleus/libs/include/admin-edit.template
new file mode 100755 (executable)
index 0000000..f6b6e58
--- /dev/null
@@ -0,0 +1,168 @@
+<h2><%text(_EDIT_ITEM)%></h2>\r
+\r
+<%init%>\r
+<script type="text/javascript" src="javascript/numbercheck.js"></script>\r
+<%ifautosave()%><script type="text/javascript" src="javascript/xmlhttprequest.js"></script><%endif%>\r
+\r
+<form id="editform" method="post" action="index.php">\r
+<div>\r
+\r
+<input type="hidden" name="action" value="itemupdate" />\r
+<input name="itemid" value="<%contents(itemid)%>" type="hidden" />\r
+<input type="hidden" name="draftid" value="0" />\r
+<%ticket%>\r
+\r
+<table><tr>\r
+       <th colspan="2"><%text(_EDIT_ITEM)%></th>\r
+</tr>\r
+<%ifautosave()%><tr>\r
+       <td><%text(_AUTOSAVEDRAFT)%></td>\r
+       <td><span id="info"><%text(_AUTOSAVEDRAFT_NOTYETSAVED)%></span></td>\r
+</tr><%endif%>\r
+<tr>\r
+       <td><%text(_EDIT_ORIG_AUTHOR)%></td>\r
+       <td><%contents(author)%></td>\r
+</tr><tr>\r
+       <td><%text(_ADD_TITLE)%></td>\r
+       <td><input \r
+                       <%jsinput(title)%>\r
+                       tabindex="10" \r
+                       size="60" \r
+                       maxlength="160" \r
+                       value="<%contents(title)%>" />\r
+       </td>\r
+</tr><tr>\r
+       <td>\r
+               <%text(_ADD_BODY)%>\r
+       </td>\r
+       <td>\r
+               <%jsbuttonbar(media+preview)%>  \r
+               <textarea \r
+                       <%jsinput(body)%>\r
+                       tabindex="20"\r
+                       cols="60"\r
+                       rows="20"><%contents(body)%></textarea>\r
+       </td>\r
+</tr><tr id="edit" style="display:none;">\r
+       <td><%text(_ADD_PREVIEW)%></td>\r
+       <td><b><span id="prevtitle">&#160;</span></b><br />\r
+               <span id="prevbody">&#160;</span><br />\r
+               <span id="prevmore">&#160;</span><br />\r
+       </td>\r
+</tr><tr>\r
+\r
+<%ifblogsetting(bcomments)%>\r
+               <td>\r
+                       <%text(_ADD_DISABLE_COMMENTS)%>\r
+               </td>\r
+               <td> \r
+                       <input type="radio" name="closed" value="1" <%checkedonval(1,closed)%> tabindex="30" id="closed_yes" /><label for="closed_yes"><%text(_YES)%></label>\r
+                       <input type="radio" name="closed" value="0" <%checkedonval(0,closed)%> tabindex="30" id="closed_no" /><label for="closed_no"><%text(_NO)%></label>\r
+                       <br />\r
+                       <small><%text(_EDIT_COMMENTSNOTE)%></small>     \r
+               </td>\r
+       </tr><tr>                               \r
+<%endif%>\r
+\r
+       <td><%text(_ADD_CATEGORY)%></td>\r
+       <td><%categories(40)%></td>\r
+</tr><tr>\r
+       <td><%text(_EDIT_SUBMIT)%></td>\r
+       <td>\r
+\r
+               <input type="submit" tabindex="60" value="<%text(_EDIT_SUBMIT)%>" onclick="return checkSubmit();" />\r
+\r
+<%ifitemproperty(draft)%>\r
+               <br /><br />\r
+               <input name="actiontype" value="addnow" type="radio" id="act_now" /><label for="act_now" tabindex="61"><%text(_ADD_ADDNOW)%></label>\r
+               <br />\r
+               <input name="actiontype" value="addfuture" type="radio" id="act_future" tabindex="61" /><label for="act_future"><%text(_ADD_ADDLATER)%></label> <%helplink(future)%>\r
+               <div class="indent">\r
+                       <%text(_ADD_PLACE_ON)%>\r
+                       <input id="inputyear" name="year" tabindex="71" size="4" value="<%currenttime(year)%>" onchange="document.forms[0].act_future.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_YEAR)%>\r
+                       <input id="inputmonth" name="month" tabindex="72" size="2" value="<%currenttime(mon)%>" onchange="document.forms[0].act_future.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_MONTH)%>\r
+                       <input id="inputday" name="day" tabindex="73" size="2" value="<%currenttime(mday)%>" onchange="document.forms[0].act_future.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_DAY)%>\r
+                       \r
+                       <input id="inputhour" name="hour" tabindex="74" size="2" value="<%currenttime(hours)%>" onchange="document.forms[0].act_future.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_HOUR)%>\r
+                       <input id="inputminutes" name="minutes" tabindex="75" size="2" value="<%currenttime(minutes)%>" onchange="document.forms[0].act_future.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_MINUTE)%>\r
+                               <br /><%text(_ITEM_ADDEDITTEMPLATE_FORMAT)%>(yyyy)<%text(_ITEM_ADDEDITTEMPLATE_YEAR)%>(mm)<%text(_ITEM_ADDEDITTEMPLATE_MONTH)%>(dd)<%text(_ITEM_ADDEDITTEMPLATE_DAY)%> (hh)<%text(_ITEM_ADDEDITTEMPLATE_HOUR)%>(mm)<%text(_ITEM_ADDEDITTEMPLATE_MINUTE)%>\r
+                       <%ifblogsetting(ballowpast,0)%>\r
+                               <br />\r
+                               <%text(_ADD_NOPASTDATES)%>\r
+                       <%endif%>\r
+               </div>\r
+               <input name="actiontype" value="adddraft" type="radio" checked='checked' id="act_draft" tabindex="61" /><label for="act_draft"><%text(_EDIT_BACKTODRAFTS)%></label> <%helplink(draft)%>\r
+               <br />\r
+               <input name="actiontype" value="delete" type="radio" id="act_delete" tabindex="61" /><label for="act_delete"><%text(_BMLET_DELETE)%></label>\r
+<%endif%>\r
+\r
+<%ifitemproperty(draft,0)%>\r
+       <br /><br />\r
+       <input name="actiontype" value="edit" type="radio" checked="checked" id="act_edit" tabindex="61" /><label for="act_edit"><%text(_BMLET_EDIT)%></label>\r
+       <%ifblogsetting(ballowpast)%>\r
+               <br />\r
+               <input name="actiontype" value="changedate" type="radio" id="act_changedate" tabindex="70" /><label for="act_changedate"><%text(_ADD_CHANGEDATE)%></label> <%helplink(changedate)%>\r
+                       <div class="indent">\r
+                               <input id="inputyear" name="year" tabindex="71" size="4" value="<%itemtime(year)%>" onchange="document.forms[0].act_changedate.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_YEAR)%>\r
+                               <input id="inputmonth" name="month" tabindex="72" size="2" value="<%itemtime(mon)%>" onchange="document.forms[0].act_changedate.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_MONTH)%>\r
+                               <input id="inputday" name="day" tabindex="73" size="2" value="<%itemtime(mday)%>" onchange="document.forms[0].act_changedate.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_DAY)%>\r
+                                \r
+                               <input id="inputhour" name="hour" tabindex="74" size="2" value="<%itemtime(hours)%>" onchange="document.forms[0].act_changedate.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_HOUR)%>\r
+                               <input id="inputminutes" name="minutes" tabindex="75" size="2" value="<%itemtime(minutes)%>" onchange="document.forms[0].act_changedate.checked=true;" /><%text(_ITEM_ADDEDITTEMPLATE_MINUTE)%>\r
+                               <br /><%text(_ITEM_ADDEDITTEMPLATE_FORMAT)%>(yyyy)<%text(_ITEM_ADDEDITTEMPLATE_YEAR)%>(mm)<%text(_ITEM_ADDEDITTEMPLATE_MONTH)%>(dd)<%text(_ITEM_ADDEDITTEMPLATE_DAY)%> (hh)<%text(_ITEM_ADDEDITTEMPLATE_HOUR)%>(mm)<%text(_ITEM_ADDEDITTEMPLATE_MINUTE)%>\r
+                       </div>\r
+       <%endif%>       \r
+       <input name="actiontype" value="backtodrafts" type="radio" id="act_backtodrafts" tabindex="71" /><label for="act_backtodrafts"><%text(_BMLET_BACKTODRAFTS)%></label> <%helplink(draft)%>\r
+       <br />\r
+       <input name="actiontype" value="delete" type="radio" id="act_delete" tabindex="61" /><label for="act_delete"><%text(_BMLET_DELETE)%></label>\r
+<%endif%>\r
+\r
+       </td>\r
+</tr><tr>\r
+       <td><%text(_ADD_PLUGIN_EXTRAS)%></td>\r
+       <td>\r
+               <%pluginextras%>\r
+       </td>   \r
+</tr>\r
+                       <%itemoptions%> \r
+<tr>\r
+       <th colspan="2"><%text(_ADD_MORE)%></th>\r
+</tr>\r
+<tr>\r
+       <td><%text(_ADD_MORE)%>\r
+               <br /><%helplink(extended)%>\r
+       </td>\r
+       <td>\r
+               <%jsbuttonbar(media+preview)%>\r
+               <textarea \r
+                       <%jsinput(more)%>\r
+                       tabindex="90" \r
+                       cols="60" \r
+                       rows="20"><%contents(more)%></textarea>\r
+       </td>\r
+</tr><tr>\r
+               <td><%text(_SUBMIT)%></td>\r
+               <td>\r
+                       <input tabindex="60" type="submit" value="<%text(_EDIT_SUBMIT)%>" \r
+                               onclick="return checkSubmit();" />\r
+                       <%ifautosave()%><input tabindex="80" type="button" name="autosavenow" value="<%text(_AUTOSAVEDRAFT_NOW)%>"\r
+                               onclick="autoSaveDraft();" /><%endif%>\r
+               </td>\r
+       \r
+</tr></table>\r
+\r
+</div>\r
+</form>\r
+\r
+<%ifautosave()%><script type="text/javascript">\r
+       var xmlhttprequest = new Array();\r
+       xmlhttprequest[0] = createHTTPHandler(); // AutoDraft handler\r
+       xmlhttprequest[1] = createHTTPHandler(); // UpdateTicket handler\r
+       var seconds = now(); // Last AutoDraft time\r
+       var checks = 0; // Number of checks since last AutoDraft\r
+       var addform = document.getElementById('editform'); // The form id\r
+       var goal = document.getElementById('info'); // The html div id where 'Last saved: date time' must come\r
+       var goalurl = '../action.php'; // The PHP file where the content must be posted to\r
+       var lastsavedtext = '<%text(_AUTOSAVEDRAFT_LASTSAVED)%>'; // The language variable for 'Last saved'\r
+       var formtype = 'edit'; // Add or edit form\r
+</script><%endif%>\r
diff --git a/utf8/nucleus/libs/include/bookmarklet-add.template b/utf8/nucleus/libs/include/bookmarklet-add.template
new file mode 100755 (executable)
index 0000000..70db23a
--- /dev/null
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="<%text(_CHARSET)%>"?>\r
+<!-- %xmldeclaration% -->\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+       <html <%text(_HTML_XML_NAME_SPACE_AND_LANG_CODE)%>>\r
+       <head>\r
+               <meta http-equiv="Content-Type" content="text/html; charset=<%text(_CHARSET)%>" />\r
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+               $Id$\r
+       -->\r
+               <title><%text(_ADD_ADDTO)%> '<%blogname%>'</title>\r
+               <link rel="stylesheet" type="text/css" href="styles/bookmarklet.css" />\r
+               <link rel="stylesheet" type="text/css" href="styles/addedit.css" />\r
+               <link rel="stylesheet" type="text/css" href="styles/jquery-ui/ui.all.css" />\r
+               <meta http-equiv="Content-Script-Type" content="text/javascript" />\r
+               <script type="text/javascript" src="javascript/bookmarklet.js"></script>\r
+               <script type="text/javascript" src="javascript/edit.js"></script>\r
+               <script type="text/javascript" src="javascript/numbercheck.js"></script>\r
+               <%ifautosave()%><script type="text/javascript" src="javascript/xmlhttprequest.js"></script><%endif%>\r
+               <script type="text/javascript" src="http://www.google.com/jsapi"></script>\r
+               <%init%>\r
+               <%extrahead%>\r
+               <script type="text/javascript">\r
+               //<![CDATA[\r
+                       google.load("jquery", "1");\r
+                       google.load("jqueryui", "1");\r
+                       google.setOnLoadCallback(function() {\r
+                               $(function(){\r
+//                                     var IE = '\v'=='v';\r
+                                       updAllPreviews();\r
+//                                     $("table tr td:first-child").css("width", "14%");\r
+//                                     if (!IE)\r
+//                                             $("#body textarea, #more textarea").resizable({ containment: 'parent' });\r
+                                       $("#tabs").tabs();\r
+                                       $(".addFuture").change(function() {\r
+                                               $("#act_future").attr('checked', 'checked');\r
+                                       });\r
+                                       $("#showPreview").click(function() {updAllPreviews();});\r
+                                       $("#goSubmit").click(function() {checkSubmit();});\r
+                                       $("#canselButton").click(function() {window.close();});\r
+                                       $("#saveDraft").click(function() {\r
+                                               $(".autosavestatus").text('(' + lastsavedtext + ' ' + formattedDate() + ')');\r
+                                               autoSaveDraft();\r
+                                       });\r
+//                                     $("#options tr td:nth-child(2)").css("width", "80% !important");\r
+//                                     $("#options tr th").css({\r
+//                                             width: "25%",\r
+//                                             whiteSpace: "normal"\r
+//                                     });\r
+                               });\r
+                       });\r
+               //]]>\r
+               </script>\r
+       </head>\r
+       <body>\r
+               <h1><%text(_ADD_ADDTO)%> '<%bloglink%>'</h1>\r
+               <form id="addform" method="post" action="bookmarklet.php" >\r
+                       <div id="tabs">\r
+                               <ul>\r
+                                       <li><a href="#body" tabindex="300"><%text(_BMLET_BODY)%> &gt;&gt;</a></li>\r
+                                       <li><a href="#more" tabindex="310"><%text(_BMLET_MORE)%> &gt;&gt;</a></li>\r
+                                       <li><a href="#options" tabindex="320"><%text(_BMLET_OPTIONS)%> &gt;&gt;</a></li>\r
+                                       <li><a href="#preview" id="showPreview" name="showPreview" tabindex="330"><%text(_BMLET_PREVIEW)%> &gt;&gt;</a></li>\r
+                               </ul>\r
+                               <input name="action" type="hidden" value="additem" />\r
+                               <input name="blogid" type="hidden" value="<%blogid%>" />\r
+                               <input type="hidden" name="draftid" value="0" />\r
+                               <%ticket%>\r
+                               <div id="body" class="contentblock">\r
+                                       <table summary="item body">\r
+                                               <tr>\r
+                                                       <td style="width:20%"><%text(_ADD_TITLE)%></td>\r
+                                                       <td><input <%jsinput(title)%> type="text" size="60" maxlength="160" value="<%contents(title)%>" tabindex="10" /></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td><%text(_ADD_BODY)%> <%helplink(additem)%></td>\r
+                                                       <td>\r
+                                                               <%jsbuttonbar(media)%>\r
+                                                               <textarea <%jsinput(body)%> cols="60" rows="20" tabindex="20"><%contents(body)%></textarea>\r
+                                                       </td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td><%text(_ADD_CATEGORY)%></td>\r
+                                                       <td><%categories(30)%></td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </div>\r
+                               <div id="more" class="contentblock">\r
+                                       <table summary="item more">\r
+                                               <tr>\r
+                                                       <td style="width:20%"><%text(_ADD_MORE)%> <%helplink(extended)%></td>\r
+                                                       <td>\r
+                                                               <%jsbuttonbar(media)%>\r
+                                                               <textarea <%jsinput(more)%> cols="60" rows="22" tabindex="40"><%contents(more)%></textarea>\r
+                                                       </td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </div>\r
+                               <div id="options" class="contentblock">\r
+                                       <table summary="item options">\r
+                                               <%ifblogsetting(bcomments)%><tr>\r
+                                                       <td style="width:20%"><%text(_ADD_DISABLE_COMMENTS)%></td>\r
+                                                       <td>\r
+                                                               <input type='radio' name='closed' value='1' id="closed_yes" tabindex="50" /><label for="closed_yes"><%text(_YES)%></label>\r
+                                                               <input type='radio' name='closed' value='0' checked='checked' id="closed_no" tabindex="50" /><label for="closed_no"><%text(_NO)%></label>\r
+                                                       </td>\r
+                                               </tr><%endif%>\r
+                                               <tr>\r
+                                                       <td style="width:20%"><%text(_ADD_DRAFTNFUTURE)%></td>\r
+                                                       <td>\r
+                                                               <ul class="nobullets">\r
+                                                                       <li><input name="actiontype" value="addnow" type="radio" checked='checked' id="act_now" tabindex="60" /><label for="act_now"><%text(_ADD_ADDNOW)%></label></li>\r
+                                                                       <li><input name="actiontype" value="addfuture" type="radio" id="act_future" tabindex="60" /><label for="act_future"><%text(_ADD_ADDLATER)%></label> <%helplink(future)%></li>\r
+                                                                       <li>\r
+                                                                               <div class="indent">\r
+                                                                                       <%text(_ADD_PLACE_ON)%>\r
+                                                                                       <input class="addFuture" id="inputyear" name="year" size="4" value="<%currenttime(year)%>" tabindex="70" /><%text(_ITEM_ADDEDITTEMPLATE_YEAR)%>\r
+                                                                                       <input class="addFuture" id="inputmonth" name="month" size="2" value="<%currenttime(mon)%>" tabindex="80" /><%text(_ITEM_ADDEDITTEMPLATE_MONTH)%>\r
+                                                                                       <input class="addFuture" id="inputday" name="day" size="2" value="<%currenttime(mday)%>" tabindex="90" /><%text(_ITEM_ADDEDITTEMPLATE_DAY)%>\r
+                                                                                       <input class="addFuture" id="inputhour" name="hour" size="2" value="<%currenttime(hours)%>" tabindex="100" /><%text(_ITEM_ADDEDITTEMPLATE_HOUR)%>\r
+                                                                                       <input class="addFuture" id="inputminutes" name="minutes" size="2" value="<%currenttime(minutes)%>" tabindex="110" /><%text(_ITEM_ADDEDITTEMPLATE_MINUTE)%>\r
+                                                                                       <br /><%text(_ITEM_ADDEDITTEMPLATE_FORMAT)%>(yyyy)<%text(_ITEM_ADDEDITTEMPLATE_YEAR)%>(mm)<%text(_ITEM_ADDEDITTEMPLATE_MONTH)%>(dd)<%text(_ITEM_ADDEDITTEMPLATE_DAY)%> (hh)<%text(_ITEM_ADDEDITTEMPLATE_HOUR)%>(mm)<%text(_ITEM_ADDEDITTEMPLATE_MINUTE)%>\r
+                                                                                       <%ifblogsetting(ballowpast,0)%><br /><%text(_ADD_NOPASTDATES)%><%endif%>\r
+                                                                               </div>\r
+                                                                       </li>\r
+                                                                       <li>\r
+                                                                               <input name="actiontype" value="adddraft" type="radio" id="act_draft" tabindex="60" /><label for="act_draft"><%text(_ADD_ADDDRAFT)%></label> <%helplink(draft)%>\r
+                                                                       </li>\r
+                                                                       <!-- li><input id="dosendping" name="dosendping" value="1" type="checkbox" checked="checked" tabindex="120" /><label for="dosendping"><%text(_UPDATEDPING_GOSENDPING)%></label></li -->\r
+                                                               </ul>\r
+                                                       </td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td><%text(_ADD_PLUGIN_EXTRAS)%></td>\r
+                                                       <td><%pluginextras%></td>\r
+                                               </tr>\r
+                                               <%itemoptions%>\r
+                                       </table>\r
+                               </div>\r
+                               <div id="preview" class="contentblock">\r
+                                       <!-- h2><%text(_ADD_PREVIEW)%></h2 -->\r
+                                       <strong><span id="prevtitle">&#160;</span></strong>\r
+                                       <br />\r
+                                       <span id="prevbody">&#160;</span>\r
+                                       <br />\r
+                                       <span id="prevmore">&#160;</span>\r
+                               </div>\r
+                       </div>\r
+                       <div class="submitbuttons">\r
+                               <input id="goSubmit" type="submit" value="<%text(_BMLET_EDIT)%>" tabindex="200" />\r
+                               <%ifautosave()%><input id="saveDraft" type="button" name="autosavenow" value="<%text(_AUTOSAVEDRAFT_NOW)%>" tabindex="400" /><%endif%>\r
+                               <input id="canselButton" type="button" value="<%text(_BMLET_CANCEL)%>" tabindex="410" />\r
+                               <%ifautosave()%><span class="autosavestatus">(<%text(_AUTOSAVEDRAFT)%>&nbsp;:&nbsp;<span class="lastsavedtime"><%text(_AUTOSAVEDRAFT_NOTYETSAVED)%>)</span></span><%endif%>\r
+                       </div>\r
+               </form>\r
+               <%ifautosave()%><script type="text/javascript">\r
+                       var xmlhttprequest = new Array();\r
+                       xmlhttprequest[0] = createHTTPHandler(); // AutoDraft handler\r
+                       xmlhttprequest[1] = createHTTPHandler(); // UpdateTicket handler\r
+                       var seconds = now(); // Last AutoDraft time\r
+                       var checks = 0; // Number of checks since last AutoDraft\r
+                       var addform = document.getElementById('addform'); // The form id\r
+                       var goal = document.getElementById('info'); // The html div id where 'Last saved: date time' must come\r
+                       var goalurl = '../action.php'; // The PHP file where the content must be posted to\r
+                       var lastsavedtext = '<%text(_AUTOSAVEDRAFT_LASTSAVED)%>'; // The language variable for 'Last saved'\r
+                       var formtype = 'add'; // Add or edit form\r
+               </script><%endif%>\r
+       </body>\r
+</html>\r
diff --git a/utf8/nucleus/libs/include/bookmarklet-edit.template b/utf8/nucleus/libs/include/bookmarklet-edit.template
new file mode 100755 (executable)
index 0000000..0dec337
--- /dev/null
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="<%text(_CHARSET)%>"?>\r
+<!-- %xmldeclaration% -->\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+       <html <%text(_HTML_XML_NAME_SPACE_AND_LANG_CODE)%>>\r
+       <head>\r
+               <meta http-equiv="Content-Type" content="text/html; charset=<%text(_CHARSET)%>" />\r
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+               $Id$\r
+       -->\r
+               <title><%text(_EDIT_ITEM)%></title>\r
+               <link rel="stylesheet" type="text/css" href="styles/bookmarklet.css" />\r
+               <link rel="stylesheet" type="text/css" href="styles/addedit.css" />\r
+               <link rel="stylesheet" type="text/css" href="styles/jquery-ui/ui.all.css" />\r
+               <meta http-equiv="Content-Script-Type" content="text/javascript" />\r
+               <script type="text/javascript" src="javascript/bookmarklet.js"></script>\r
+               <script type="text/javascript" src="javascript/edit.js"></script>\r
+               <script type="text/javascript" src="javascript/numbercheck.js"></script>\r
+               <%ifautosave()%><script type="text/javascript" src="javascript/xmlhttprequest.js"></script><%endif%>\r
+               <script type="text/javascript" src="http://www.google.com/jsapi"></script>\r
+               <%init%>\r
+               <%extrahead%>\r
+               <script type="text/javascript">\r
+               //<![CDATA[\r
+                       google.load("jquery", "1");\r
+                       google.load("jqueryui", "1");\r
+                       google.setOnLoadCallback(function() {\r
+                               $(function(){\r
+//                                     var IE = '\v'=='v';\r
+                                       updAllPreviews();\r
+//                                     $("table tr td:first-child").css("width", "14%");\r
+//                                     if (!IE)\r
+//                                             $("#body textarea, #more textarea").resizable({ containment: 'parent' });\r
+                                       $("#tabs").tabs();\r
+                                       $(".chgDate").change(function() {\r
+                                               $("#act_changedate").attr('checked', 'checked');\r
+                                       });\r
+                                       $("#showPreview").click(function() {updAllPreviews();});\r
+                                       $("#goSubmit").click(function() {checkSubmit();});\r
+                                       $("#canselButton").click(function() {window.close();});\r
+                                       $("#saveDraft").click(function() {\r
+                                               $(".autosavestatus").text('(' + lastsavedtext + ' ' + formattedDate() + ')');\r
+                                               autoSaveDraft();\r
+                                       });\r
+//                                     $("#options tr td:nth-child(2)").css("width", "80% !important");\r
+//                                     $("#options tr th").css({\r
+//                                             width: "25%",\r
+//                                             whiteSpace: "normal"\r
+//                                     });\r
+                               });\r
+                       });\r
+               //]]>\r
+               </script>\r
+       </head>\r
+       <body>\r
+               <h1><%text(_EDIT_ITEM)%> (<%contents(itemid)%>)</h1>\r
+               <form id="editform" method="post" action="bookmarklet.php" >\r
+                       <div id="tabs">\r
+                               <ul>\r
+                                       <li><a href="#body" tabindex="300"><%text(_BMLET_BODY)%> &gt;&gt;</a></li>\r
+                                       <li><a href="#more" tabindex="310"><%text(_BMLET_MORE)%> &gt;&gt;</a></li>\r
+                                       <li><a href="#options" tabindex="320"><%text(_BMLET_OPTIONS)%> &gt;&gt;</a></li>\r
+                                       <li><a href="#preview" id="showPreview" name="showPreview" tabindex="330"><%text(_BMLET_PREVIEW)%> &gt;&gt;</a></li>\r
+                               </ul>\r
+                               <input name="action" type="hidden" value="edititem" />\r
+                               <input name="itemid" type="hidden" value="<%contents(itemid)%>" />\r
+                               <input type="hidden" name="draftid" value="0" />\r
+                               <%ticket%>\r
+                               <div id="body" class="contentblock">\r
+                                       <table summary="item body">\r
+                                               <tr>\r
+                                                       <td style="width:20%"><%text(_ADD_TITLE)%></td>\r
+                                                       <td><input <%jsinput(title)%> type="text" size="60" maxlength="160" value="<%contents(title)%>" tabindex="10" /></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td><%text(_ADD_BODY)%> <%helplink(additem)%></td>\r
+                                                       <td>\r
+                                                               <%jsbuttonbar(media)%>\r
+                                                               <textarea <%jsinput(body)%> cols="60" rows="20" tabindex="20"><%contents(body)%></textarea>\r
+                                                       </td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td><%text(_ADD_CATEGORY)%></td>\r
+                                                       <td><%categories(30)%></td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </div>\r
+                               <div id="more" class="contentblock">\r
+                                       <table summary="item more">\r
+                                               <tr>\r
+                                                       <td style="width:20%"><%text(_ADD_MORE)%> <%helplink(extended)%></td>\r
+                                                       <td>\r
+                                                               <%jsbuttonbar(media)%>\r
+                                                               <textarea <%jsinput(more)%> cols="60" rows="22" tabindex="40"><%contents(more)%></textarea>\r
+                                                       </td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </div>\r
+                               <div id="options" class="contentblock">\r
+                                       <table summary="item options">\r
+                                               <%ifblogsetting(bcomments)%><tr>\r
+                                                       <td style="width:20%"><%text(_ADD_DISABLE_COMMENTS)%></td>\r
+                                                       <td>\r
+                                                           <input type="radio" name="closed" value="1" id="closed_yes" <%checkedonval(1,closed)%> tabindex="50" /><label for="closed_yes"><%text(_YES)%></label>\r
+                                                           <input type="radio" name="closed" value="0" id="closed_no" <%checkedonval(0,closed)%> tabindex="50" /><label for="closed_no"><%text(_NO)%></label>\r
+                                                       </td>\r
+                                               </tr><%endif%>\r
+                                               <!-- The only actiontypes are 'edit', 'changedate' (no draft items can be edited) and 'delete' -->\r
+                                               <tr>\r
+                                                       <td style="width:20%"><%text(_EDIT_SUBMIT)%></td>\r
+                                                       <td>\r
+                                                               <ul class="nobullets">\r
+                                                                       <li><input name="actiontype" value="edit" type="radio" checked="checked" id="act_edit" tabindex="60" /><label for="act_edit"><%text(_BMLET_EDIT)%></label></li>\r
+                                                                       <li><input name="actiontype" value="delete" type="radio" id="act_delete" tabindex="60" /><label for="act_delete"><%text(_BMLET_DELETE)%></label></li>\r
+                                                                       <%ifblogsetting(ballowpast)%><li>\r
+                                                                               <input name="actiontype" value="changedate" type="radio" id="act_changedate" tabindex="60" /><label for="act_changedate"><%text(_BMLET_CHANGEDATE)%></label> <%helplink(changedate)%>\r
+                                                                               <div class="indent">\r
+                                                                                       <input class="chgDate" id="inputyear" name="year" size="4" value="<%itemtime(year)%>" tabindex="70" /><%text(_ITEM_ADDEDITTEMPLATE_YEAR)%>\r
+                                                                                       <input class="chgDate" id="inputmonth" name="month" size="2" value="<%itemtime(mon)%>" tabindex="80" /><%text(_ITEM_ADDEDITTEMPLATE_MONTH)%>\r
+                                                                                       <input class="chgDate" id="inputday" name="day" size="2" value="<%itemtime(mday)%>" tabindex="90" /><%text(_ITEM_ADDEDITTEMPLATE_DAY)%>\r
+                                                                                       <input class="chgDate" id="inputhour" name="hour" size="2" value="<%itemtime(hours)%>" tabindex="100" /><%text(_ITEM_ADDEDITTEMPLATE_HOUR)%>\r
+                                                                                       <input class="chgDate" id="inputminutes" name="minutes" size="2" value="<%itemtime(minutes)%>" tabindex="110" /><%text(_ITEM_ADDEDITTEMPLATE_MINUTE)%>\r
+                                                                                       <br /><%text(_ITEM_ADDEDITTEMPLATE_FORMAT)%>(yyyy)<%text(_ITEM_ADDEDITTEMPLATE_YEAR)%>(mm)<%text(_ITEM_ADDEDITTEMPLATE_MONTH)%>(dd)<%text(_ITEM_ADDEDITTEMPLATE_DAY)%> (hh)<%text(_ITEM_ADDEDITTEMPLATE_HOUR)%>(mm)<%text(_ITEM_ADDEDITTEMPLATE_MINUTE)%>\r
+                                                                               </div>\r
+                                                                       </li><%endif%>\r
+                                                                       <li>\r
+                                                                               <input name="actiontype" value="backtodrafts" type="radio" id="act_backtodrafts" tabindex="60" /><label for="act_backtodrafts"><%text(_BMLET_BACKTODRAFTS)%></label> <%helplink(draft)%>\r
+                                                                       </li>\r
+                                                                       <!-- li><input id="dosendping" name="dosendping" value="1" type="checkbox" tabindex="120" /><label for="dosendping"><%text(_UPDATEDPING_GOSENDPING)%></label></li -->\r
+                                                               </ul>\r
+                                                       </td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td><%text(_ADD_PLUGIN_EXTRAS)%></td>\r
+                                                       <td><%pluginextras%></td>\r
+                                               </tr>\r
+                                               <%itemoptions%>\r
+                                       </table>\r
+                               </div>\r
+                               <div id="preview" class="contentblock">\r
+                                       <!-- h2><%text(_ADD_PREVIEW)%></h2 -->\r
+                                       <strong><span id="prevtitle">&#160;</span></strong>\r
+                                       <br />\r
+                                       <span id="prevbody">&#160;</span>\r
+                                       <br />\r
+                                       <span id="prevmore">&#160;</span>\r
+                               </div>\r
+                       </div>\r
+                       <div class="submitbuttons">\r
+                               <input id="goSubmit" type="submit" value="<%text(_BMLET_EDIT)%>" tabindex="200" />\r
+                               <%ifautosave()%><input id="saveDraft" type="button" name="autosavenow" value="<%text(_AUTOSAVEDRAFT_NOW)%>" tabindex="400" /><%endif%>\r
+                               <input id="canselButton" type="button" value="<%text(_BMLET_CANCEL)%>" tabindex="410" />\r
+                               <%ifautosave()%><span class="autosavestatus">(<%text(_AUTOSAVEDRAFT)%>&nbsp;:&nbsp;<span class="lastsavedtime"><%text(_AUTOSAVEDRAFT_NOTYETSAVED)%>)</span></span><%endif%>\r
+                       </div>\r
+               </form>\r
+               <%ifautosave()%><script type="text/javascript">\r
+                       var xmlhttprequest = new Array();\r
+                       xmlhttprequest[0] = createHTTPHandler(); // AutoDraft handler\r
+                       xmlhttprequest[1] = createHTTPHandler(); // UpdateTicket handler\r
+                       var seconds = now(); // Last AutoDraft time\r
+                       var checks = 0; // Number of checks since last AutoDraft\r
+                       var addform = document.getElementById('editform'); // The form id\r
+                       var goal = document.getElementById('info'); // The html div id where 'Last saved: date time' must come\r
+                       var goalurl = '../action.php'; // The PHP file where the content must be posted to\r
+                       var lastsavedtext = '<%text(_AUTOSAVEDRAFT_LASTSAVED)%>'; // The language variable for 'Last saved'\r
+                       var formtype = 'edit'; // Add or edit form\r
+               </script><%endif%>\r
+       </body>\r
+</html>\r
diff --git a/utf8/nucleus/libs/include/index.html b/utf8/nucleus/libs/include/index.html
new file mode 100755 (executable)
index 0000000..bbdf3f9
--- /dev/null
@@ -0,0 +1,13 @@
+<!DOCTYPE html
+PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/include/readme.ja.txt b/utf8/nucleus/libs/include/readme.ja.txt
new file mode 100644 (file)
index 0000000..79faeae
--- /dev/null
@@ -0,0 +1,7 @@
+README for the libs/include directory
+-------------------------------------
+
+このディレクトリのファイルは管理エリア内で使用します。
+本来、これらのファイルはユーザーによって編集されることを意図していません。
+これらのファイルに関するドキュメントもサポートもありませんが、自己責任において
+どうしても改造したいというのなら止めはしません。
diff --git a/utf8/nucleus/libs/include/readme.txt b/utf8/nucleus/libs/include/readme.txt
new file mode 100755 (executable)
index 0000000..2853180
--- /dev/null
@@ -0,0 +1,7 @@
+README for the libs/include directory\r
+-------------------------------------\r
+\r
+This directory contains templates used by the admin-area. \r
+They're not really intended to be edited by the people using Nucleus (i.e. there's \r
+no documentation and little support). But if you really can't stop yourself,\r
+go ahead :)
\ No newline at end of file
diff --git a/utf8/nucleus/libs/index.html b/utf8/nucleus/libs/index.html
new file mode 100755 (executable)
index 0000000..3974d80
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/mb_emulator/convert.table b/utf8/nucleus/libs/mb_emulator/convert.table
new file mode 100755 (executable)
index 0000000..b1e0e17
--- /dev/null
@@ -0,0 +1,208 @@
+<?php
+$mbemu_internals['sjistoeuc_byte1'] = array(
+129 => 161 ,130 => 163 ,131 => 165 ,132 => 167 ,133 => 169 ,134 => 171 ,
+135 => 173 ,136 => 175 ,137 => 177 ,138 => 179 ,139 => 181 ,140 => 183 ,
+141 => 185 ,142 => 187 ,143 => 189 ,144 => 191 ,145 => 193 ,146 => 195 ,
+147 => 197 ,148 => 199 ,149 => 201 ,150 => 203 ,151 => 205 ,152 => 207 ,
+153 => 209 ,154 => 211 ,155 => 213 ,156 => 215 ,157 => 217 ,158 => 219 ,
+159 => 221 ,224 => 223 ,225 => 225 ,226 => 227 ,227 => 229 ,228 => 231 ,
+229 => 233 ,230 => 235 ,231 => 237 ,232 => 239 ,233 => 241 ,234 => 243 ,
+235 => 245 ,236 => 247 ,237 => 249 ,238 => 251 ,239 => 253 ,240 => 255 );
+
+$mbemu_internals['sjistoeuc_byte2'] = array(
+0 => array(
+64 => 161 ,65 => 162 ,66 => 163 ,67 => 164 ,68 => 165 ,69 => 166 ,
+70 => 167 ,71 => 168 ,72 => 169 ,73 => 170 ,74 => 171 ,75 => 172 ,
+76 => 173 ,77 => 174 ,78 => 175 ,79 => 176 ,80 => 177 ,81 => 178 ,
+82 => 179 ,83 => 180 ,84 => 181 ,85 => 182 ,86 => 183 ,87 => 184 ,
+88 => 185 ,89 => 186 ,90 => 187 ,91 => 188 ,92 => 189 ,93 => 190 ,
+94 => 191 ,95 => 192 ,96 => 193 ,97 => 194 ,98 => 195 ,99 => 196 ,
+100 => 197 ,101 => 198 ,102 => 199 ,103 => 200 ,104 => 201 ,105 => 202 ,
+106 => 203 ,107 => 204 ,108 => 205 ,109 => 206 ,110 => 207 ,111 => 208 ,
+112 => 209 ,113 => 210 ,114 => 211 ,115 => 212 ,116 => 213 ,117 => 214 ,
+118 => 215 ,119 => 216 ,120 => 217 ,121 => 218 ,122 => 219 ,123 => 220 ,
+124 => 221 ,125 => 222 ,126 => 223 ,128 => 224 ,129 => 225 ,130 => 226 ,
+131 => 227 ,132 => 228 ,133 => 229 ,134 => 230 ,135 => 231 ,136 => 232 ,
+137 => 233 ,138 => 234 ,139 => 235 ,140 => 236 ,141 => 237 ,142 => 238 ,
+143 => 239 ,144 => 240 ,145 => 241 ,146 => 242 ,147 => 243 ,148 => 244 ,
+149 => 245 ,150 => 246 ,151 => 247 ,152 => 248 ,153 => 249 ,154 => 250 ,
+155 => 251 ,156 => 252 ,157 => 253 ,158 => 254 ),
+1 => array(
+159 => 161 ,160 => 162 ,
+161 => 163 ,162 => 164 ,163 => 165 ,164 => 166 ,165 => 167 ,166 => 168 ,
+167 => 169 ,168 => 170 ,169 => 171 ,170 => 172 ,171 => 173 ,172 => 174 ,
+173 => 175 ,174 => 176 ,175 => 177 ,176 => 178 ,177 => 179 ,178 => 180 ,
+179 => 181 ,180 => 182 ,181 => 183 ,182 => 184 ,183 => 185 ,184 => 186 ,
+185 => 187 ,186 => 188 ,187 => 189 ,188 => 190 ,189 => 191 ,190 => 192 ,
+191 => 193 ,192 => 194 ,193 => 195 ,194 => 196 ,195 => 197 ,196 => 198 ,
+197 => 199 ,198 => 200 ,199 => 201 ,200 => 202 ,201 => 203 ,202 => 204 ,
+203 => 205 ,204 => 206 ,205 => 207 ,206 => 208 ,207 => 209 ,208 => 210 ,
+209 => 211 ,210 => 212 ,211 => 213 ,212 => 214 ,213 => 215 ,214 => 216 ,
+215 => 217 ,216 => 218 ,217 => 219 ,218 => 220 ,219 => 221 ,220 => 222 ,
+221 => 223 ,222 => 224 ,223 => 225 ,224 => 226 ,225 => 227 ,226 => 228 ,
+227 => 229 ,228 => 230 ,229 => 231 ,230 => 232 ,231 => 233 ,232 => 234 ,
+233 => 235 ,234 => 236 ,235 => 237 ,236 => 238 ,237 => 239 ,238 => 240 ,
+239 => 241 ,240 => 242 ,241 => 243 ,242 => 244 ,243 => 245 ,244 => 246 ,
+245 => 247 ,246 => 248 ,247 => 249 ,248 => 250 ,249 => 251 ,250 => 252 ,
+251 => 253 ,252 => 254 ));
+
+$mbemu_internals['sjistoeuc_byte1_shift'] = array (
+64 => 0 ,65 => 0 ,66 => 0 ,67 => 0 ,68 => 0 ,69 => 0 ,
+70 => 0 ,71 => 0 ,72 => 0 ,73 => 0 ,74 => 0 ,75 => 0 ,
+76 => 0 ,77 => 0 ,78 => 0 ,79 => 0 ,80 => 0 ,81 => 0 ,
+82 => 0 ,83 => 0 ,84 => 0 ,85 => 0 ,86 => 0 ,87 => 0 ,
+88 => 0 ,89 => 0 ,90 => 0 ,91 => 0 ,92 => 0 ,93 => 0 ,
+94 => 0 ,95 => 0 ,96 => 0 ,97 => 0 ,98 => 0 ,99 => 0 ,
+100 => 0 ,101 => 0 ,102 => 0 ,103 => 0 ,104 => 0 ,105 => 0 ,
+106 => 0 ,107 => 0 ,108 => 0 ,109 => 0 ,110 => 0 ,111 => 0 ,
+112 => 0 ,113 => 0 ,114 => 0 ,115 => 0 ,116 => 0 ,117 => 0 ,
+118 => 0 ,119 => 0 ,120 => 0 ,121 => 0 ,122 => 0 ,123 => 0 ,
+124 => 0 ,125 => 0 ,126 => 0 ,128 => 0 ,129 => 0 ,130 => 0 ,
+131 => 0 ,132 => 0 ,133 => 0 ,134 => 0 ,135 => 0 ,136 => 0 ,
+137 => 0 ,138 => 0 ,139 => 0 ,140 => 0 ,141 => 0 ,142 => 0 ,
+143 => 0 ,144 => 0 ,145 => 0 ,146 => 0 ,147 => 0 ,148 => 0 ,
+149 => 0 ,150 => 0 ,151 => 0 ,152 => 0 ,153 => 0 ,154 => 0 ,
+155 => 0 ,156 => 0 ,157 => 0 ,158 => 0 ,159 => 1 ,160 => 1 ,
+161 => 1 ,162 => 1 ,163 => 1 ,164 => 1 ,165 => 1 ,166 => 1 ,
+167 => 1 ,168 => 1 ,169 => 1 ,170 => 1 ,171 => 1 ,172 => 1 ,
+173 => 1 ,174 => 1 ,175 => 1 ,176 => 1 ,177 => 1 ,178 => 1 ,
+179 => 1 ,180 => 1 ,181 => 1 ,182 => 1 ,183 => 1 ,184 => 1 ,
+185 => 1 ,186 => 1 ,187 => 1 ,188 => 1 ,189 => 1 ,190 => 1 ,
+191 => 1 ,192 => 1 ,193 => 1 ,194 => 1 ,195 => 1 ,196 => 1 ,
+197 => 1 ,198 => 1 ,199 => 1 ,200 => 1 ,201 => 1 ,202 => 1 ,
+203 => 1 ,204 => 1 ,205 => 1 ,206 => 1 ,207 => 1 ,208 => 1 ,
+209 => 1 ,210 => 1 ,211 => 1 ,212 => 1 ,213 => 1 ,214 => 1 ,
+215 => 1 ,216 => 1 ,217 => 1 ,218 => 1 ,219 => 1 ,220 => 1 ,
+221 => 1 ,222 => 1 ,223 => 1 ,224 => 1 ,225 => 1 ,226 => 1 ,
+227 => 1 ,228 => 1 ,229 => 1 ,230 => 1 ,231 => 1 ,232 => 1 ,
+233 => 1 ,234 => 1 ,235 => 1 ,236 => 1 ,237 => 1 ,238 => 1 ,
+239 => 1 ,240 => 1 ,241 => 1 ,242 => 1 ,243 => 1 ,244 => 1 ,
+245 => 1 ,246 => 1 ,247 => 1 ,248 => 1 ,249 => 1 ,250 => 1 ,
+251 => 1 ,252 => 1 );
+
+$mbemu_internals['euctosjis_byte1'] = array(
+161 => 129, 162 => 129, 163 => 130, 164 => 130, 165 => 131, 
+166 => 131, 167 => 132, 168 => 132, 169 => 133, 170 => 133, 
+171 => 134, 172 => 134, 173 => 135, 174 => 135, 175 => 136, 
+176 => 136, 177 => 137, 178 => 137, 179 => 138, 180 => 138, 
+181 => 139, 182 => 139, 183 => 140, 184 => 140, 185 => 141, 
+186 => 141, 187 => 142, 188 => 142, 189 => 143, 190 => 143, 
+191 => 144, 192 => 144, 193 => 145, 194 => 145, 195 => 146, 
+196 => 146, 197 => 147, 198 => 147, 199 => 148, 200 => 148, 
+201 => 149, 202 => 149, 203 => 150, 204 => 150, 205 => 151, 
+206 => 151, 207 => 152, 208 => 152, 209 => 153, 210 => 153, 
+211 => 154, 212 => 154, 213 => 155, 214 => 155, 215 => 156, 
+216 => 156, 217 => 157, 218 => 157, 219 => 158, 220 => 158, 
+221 => 159, 222 => 159, 223 => 224, 224 => 224, 225 => 225, 
+226 => 225, 227 => 226, 228 => 226, 229 => 227, 230 => 227, 
+231 => 228, 232 => 228, 233 => 229, 234 => 229, 235 => 230, 
+236 => 230, 237 => 231, 238 => 231, 239 => 232, 240 => 232, 
+241 => 233, 242 => 233, 243 => 234, 244 => 234, 245 => 235, 
+246 => 235, 247 => 236, 248 => 236, 249 => 237, 250 => 237, 
+251 => 238, 252 => 238, 253 => 239, 254 => 239, 255 => 240);
+
+$mbemu_internals['euctosjis_byte2'] = array(
+0 => array(
+161 => 64, 162 => 65, 163 => 66, 164 => 67, 165 => 68, 
+166 => 69, 167 => 70, 168 => 71, 169 => 72, 170 => 73, 
+171 => 74, 172 => 75, 173 => 76, 174 => 77, 175 => 78, 
+176 => 79, 177 => 80, 178 => 81, 179 => 82, 180 => 83, 
+181 => 84, 182 => 85, 183 => 86, 184 => 87, 185 => 88, 
+186 => 89, 187 => 90, 188 => 91, 189 => 92, 190 => 93, 
+191 => 94, 192 => 95, 193 => 96, 194 => 97, 195 => 98, 
+196 => 99, 197 => 100, 198 => 101, 199 => 102, 200 => 103, 
+201 => 104, 202 => 105, 203 => 106, 204 => 107, 205 => 108, 
+206 => 109, 207 => 110, 208 => 111, 209 => 112, 210 => 113, 
+211 => 114, 212 => 115, 213 => 116, 214 => 117, 215 => 118, 
+216 => 119, 217 => 120, 218 => 121, 219 => 122, 220 => 123, 
+221 => 124, 222 => 125, 223 => 126, 224 => 128, 225 => 129, 
+226 => 130, 227 => 131, 228 => 132, 229 => 133, 230 => 134, 
+231 => 135, 232 => 136, 233 => 137, 234 => 138, 235 => 139, 
+236 => 140, 237 => 141, 238 => 142, 239 => 143, 240 => 144, 
+241 => 145, 242 => 146, 243 => 147, 244 => 148, 245 => 149, 
+246 => 150, 247 => 151, 248 => 152, 249 => 153, 250 => 154, 
+251 => 155, 252 => 156, 253 => 157, 254 => 158),
+1 => array(
+161 => 159, 162 => 160, 163 => 161, 164 => 162, 165 => 163, 
+166 => 164, 167 => 165, 168 => 166, 169 => 167, 170 => 168, 
+171 => 169, 172 => 170, 173 => 171, 174 => 172, 175 => 173, 
+176 => 174, 177 => 175, 178 => 176, 179 => 177, 180 => 178, 
+181 => 179, 182 => 180, 183 => 181, 184 => 182, 185 => 183, 
+186 => 184, 187 => 185, 188 => 186, 189 => 187, 190 => 188, 
+191 => 189, 192 => 190, 193 => 191, 194 => 192, 195 => 193, 
+196 => 194, 197 => 195, 198 => 196, 199 => 197, 200 => 198, 
+201 => 199, 202 => 200, 203 => 201, 204 => 202, 205 => 203, 
+206 => 204, 207 => 205, 208 => 206, 209 => 207, 210 => 208, 
+211 => 209, 212 => 210, 213 => 211, 214 => 212, 215 => 213, 
+216 => 214, 217 => 215, 218 => 216, 219 => 217, 220 => 218, 
+221 => 219, 222 => 220, 223 => 221, 224 => 222, 225 => 223, 
+226 => 224, 227 => 225, 228 => 226, 229 => 227, 230 => 228, 
+231 => 229, 232 => 230, 233 => 231, 234 => 232, 235 => 233, 
+236 => 234, 237 => 235, 238 => 236, 239 => 237, 240 => 238, 
+241 => 239, 242 => 240, 243 => 241, 244 => 242, 245 => 243, 
+246 => 244, 247 => 245, 248 => 246, 249 => 247, 250 => 248, 
+251 => 249, 252 => 250, 253 => 251, 254 => 252));
+
+$mbemu_internals['alphanumeric_convert'] = array (
+0x20 => "\xa1\xa1",0x21 => "\xa1\xaa",0x23 => "\xa1\xf4",0x24 => 
+"\xa1\xf0",0x25 => "\xa1\xf3",
+0x26 => "\xa1\xf5",0x28 => "\xa1\xca",0x29 => "\xa1\xcb",0x2a => "\xa1\xf6",
+0x2b => "\xa1\xdc",0x2c => "\xa1\xa4",0x2d => "\xa1\xdd",0x2e => "\xa1\xa5",
+0x2f => "\xa1\xbf",0x30 => "\xa3\xb0",0x31 => "\xa3\xb1",0x32 => "\xa3\xb2",
+0x33 => "\xa3\xb3",0x34 => "\xa3\xb4",0x35 => "\xa3\xb5",0x36 => "\xa3\xb6",
+0x37 => "\xa3\xb7",0x38 => "\xa3\xb8",0x39 => "\xa3\xb9",0x3a => "\xa1\xa7",
+0x3b => "\xa1\xa8",0x3c => "\xa1\xe3",0x3d => "\xa1\xe1",0x3e => "\xa1\xe4",
+0x3f => "\xa1\xa9",0x40 => "\xa1\xf7",0x41 => "\xa3\xc1",0x42 => "\xa3\xc2",
+0x43 => "\xa3\xc3",0x44 => "\xa3\xc4",0x45 => "\xa3\xc5",0x46 => "\xa3\xc6",
+0x47 => "\xa3\xc7",0x48 => "\xa3\xc8",0x49 => "\xa3\xc9",0x4a => "\xa3\xca",
+0x4b => "\xa3\xcb",0x4c => "\xa3\xcc",0x4d => "\xa3\xcd",0x4e => "\xa3\xce",
+0x4f => "\xa3\xcf",0x50 => "\xa3\xd0",0x51 => "\xa3\xd1",0x52 => "\xa3\xd2",
+0x53 => "\xa3\xd3",0x54 => "\xa3\xd4",0x55 => "\xa3\xd5",0x56 => "\xa3\xd6",
+0x57 => "\xa3\xd7",0x58 => "\xa3\xd8",0x59 => "\xa3\xd9",0x5a => "\xa3\xda",
+0x5b => "\xa1\xce",0x5d => "\xa1\xcf",0x5e => "\xa1\xb0",0x5f => "\xa1\xb2",
+0x61 => "\xa3\xe1",0x62 => "\xa3\xe2",0x63 => "\xa3\xe3",0x64 => "\xa3\xe4",
+0x65 => "\xa3\xe5",0x66 => "\xa3\xe6",0x67 => "\xa3\xe7",0x68 => "\xa3\xe8",
+0x69 => "\xa3\xe9",0x6a => "\xa3\xea",0x6b => "\xa3\xeb",0x6c => "\xa3\xec",
+0x6d => "\xa3\xed",0x6e => "\xa3\xee",0x6f => "\xa3\xef",0x70 => "\xa3\xf0",
+0x71 => "\xa3\xf1",0x72 => "\xa3\xf2",0x73 => "\xa3\xf3",0x74 => "\xa3\xf4",
+0x75 => "\xa3\xf5",0x76 => "\xa3\xf6",0x77 => "\xa3\xf7",0x78 => "\xa3\xf8",
+0x79 => "\xa3\xf9",0x7a => "\xa3\xfa",0x7b => "\xa1\xd0",0x7c => "\xa1\xc3",
+0x7d => "\xa1\xd1");
+
+$mbemu_internals['kana_zenhan_convert'] = array (
+0xa1 => "\xa7",0xa2 => "\xb1",0xa3 => "\xa8",0xa4 => "\xb2",
+0xa5 => "\xa9",0xa6 => "\xb3",0xa7 => "\xaa",0xa8 => "\xb4",
+0xa9 => "\xab",0xaa => "\xb5",0xab => "\xb6",0xac => "\xb6\x8e\xde",
+0xad => "\xb7",0xae => "\xb7\x8e\xde",0xaf => "\xb8",
+0xb0 => "\xb8\x8e\xde",0xb1 => "\xb9",0xb2 => "\xb9\x8e\xde",
+0xb3 => "\xba",0xb4 => "\xba\x8e\xde",0xb5 => "\xbb",
+0xb6 => "\xbb\x8e\xde",0xb7 => "\xbc",0xb8 => "\xbc\x8e\xde",
+0xb9 => "\xbd",0xba => "\xbd\x8e\xde",0xbb => "\xbe",
+0xbc => "\xbe\x8e\xde",0xbd => "\xbf",0xbe => "\xbf\x8e\xde",
+0xbf => "\xc0",0xc0 => "\xc0\x8e\xde",0xc1 => "\xc1",
+0xc2 => "\xc1\x8e\xde",0xc3 => "\xaf",0xc4 => "\xc2",
+0xc5 => "\xc2\x8e\xde",0xc6 => "\xc3",0xc7 => "\xc3\x8e\xde",
+0xc8 => "\xc4",0xc9 => "\xc4\x8e\xde",0xca => "\xc5",
+0xcb => "\xc6",0xcc => "\xc7",0xcd => "\xc8",0xce => "\xc9",
+0xcf => "\xca",0xd0 => "\xca\x8e\xde",0xd1 => "\xca\x8e\xdf",
+0xd2 => "\xcb",0xd3 => "\xcb\x8e\xde",0xd4 => "\xcb\x8e\xdf",
+0xd5 => "\xcc",0xd6 => "\xcc\x8e\xde",0xd7 => "\xcc\x8e\xdf",
+0xd8 => "\xcd",0xd9 => "\xcd\x8e\xde",0xda => "\xcd\x8e\xdf",0xdb => "\xce",
+0xdc => "\xce\x8e\xde",0xdd => "\xce\x8e\xdf",0xde => "\xcf",0xdf => "\xd0",
+0xe0 => "\xd1",0xe1 => "\xd2",0xe2 => "\xd3",0xe3 => "\xac",0xe4 => "\xd4",
+0xe5 => "\xad",0xe6 => "\xd5",0xe7 => "\xae",0xe8 => "\xd6",0xe9 => "\xd7",
+0xea => "\xd8",0xeb => "\xd9",0xec => "\xda",0xed => "\xdb",0xef => "\xdc",
+0xee => "\xdc",0xf0 => "\xb2",0xf1 => "\xb4",0xf2 => "\xa6",0xf3 => "\xdd",
+0xf4 => "\xb3\x8e\xde");
+
+$mbemu_internals['special_zenhan_convert'] = array(
+0xa2 => "\xa4",0xa3 => "\xa1",0xa6 => "\xa5",0xab => "\xde",
+0xac => "\xdf",0xbc => "\xb0",0xd6 => "\xa2",0xd7 => "\xa3");
+
+
+
+
+
+
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/mb_emulator/history.html b/utf8/nucleus/libs/mb_emulator/history.html
new file mode 100755 (executable)
index 0000000..eb0c7f8
--- /dev/null
@@ -0,0 +1,1031 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+
+  <meta http-equiv="CONTENT-TYPE" content="text/html; charset=shift_jis">
+  <title>\95Ï\8dX\97\9a\97ð</title>
+
+
+  <meta name="GENERATOR" content="OpenOffice.org 1.1.3 (Win32)">
+
+  <meta name="CREATED" content="20050130;2310982">
+
+  <meta name="CHANGED" content="20050130;2372139">
+
+</head>
+
+
+<body style="direction: ltr;" lang="ja-JP">
+
+<h2>\95Ï\8dX\97\9a\97ð</h2>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">mbstring\83G\83~\83\85\83\8c\81[\83^ for Japanese Ver.0.84</span></font>\81i<font face="Times New Roman, serif"><span lang="en-US">2006/1/23</span></font>\81j</h3>
+
+<ul>
+
+  <li>\83V\83t\83gJIS\82Å\94¼\8ap\83J\83\93\83}\82Ì\8f\88\97\9d\82ª\82¨\82©\82µ\82©\82Á\82½\82Ì\82ð\8fC\90³\82µ\82Ü\82µ\82½</li>
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">mbstring\83G\83~\83\85\83\8c\81[\83^ for Japanese Ver.0.83</span></font>\81i<font face="Times New Roman, serif"><span lang="en-US">2005/12/15</span></font>\81j</h3>
+
+<ul>
+
+  <li>mb_send_mail\82Åmb_language\82ªja\82¾\82Á\82½\82Æ\82«\82É\91Î\89\9e\82µ\82Ü\82µ\82½</li>
+  <li>mb_send_mail\82Å\93ú\96{\8cê\8f\88\97\9d\82Ì\8dÅ\8cã\82Ébreak\82ª\82È\82©\82Á\82½\82Ì\82Å\89Á\82¦\82Ü\82µ\82½</li>
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">mbstring\83G\83~\83\85\83\8c\81[\83^ for Japanese Ver.0.82</span></font>\81i<font face="Times New Roman, serif"><span lang="en-US">2005/11/28</span></font>\81j</h3>
+
+<ul>
+
+  <li>mb_language\82Å\83p\83\89\83\81\81[\83^\82ª\82È\82©\82Á\82½\8fê\8d\87\82Éwarning\82ª\8fo\82Ä\82µ\82Ü\82¤\82Ì\82ð\8fC\90³\82µ\82Ü\82µ\82½</li>
+  <li>mb_send_mail\93à\95\94\82Å_is_encoded\82ð\8cÄ\82Ñ\8fo\82µ\82Ä\82¢\82é\82Ì\82ð_check_encoding\82ð\8cÄ\82Ô\82æ\82¤\82É\8fC\90³\82µ\82Ü\82µ\82½</li>
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">mbstring\83G\83~\83\85\83\8c\81[\83^ for Japanese Ver.0.81</span></font>\81i<font face="Times New Roman, serif"><span lang="en-US">2005/10/09</span></font>\81j</h3>
+
+<ul>
+
+  <li>$jis_match\82ª\96¢\92è\8b`\82¾\82Á\82½\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½</li>
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">mbstring\83G\83~\83\85\83\8c\81[\83^ for Japanese Ver.0.8</span></font>\81i<font face="Times New Roman, serif"><span lang="en-US">2005/8/23</span></font>\81j</h3>
+
+<ul>
+
+  <li>\96¼\8fÌ\82ðmbstring\83G\83~\83\85\83\8c\81[\83^ for Japanese\82É\95Ï\8dX\82µ\82Ü\82µ\82½</li>
+  <li>
+mb_substitute_character\83T\83|\81[\83g\82µ\82Ü\82µ\82½
+  </li>
+
+  <li>
+mb_convert_case\83T\83|\81[\83g\82µ\82Ü\82µ\82½
+  </li>
+
+  <li>
+mb_get_info\83T\83|\81[\83g\82µ\82Ü\82µ\82½
+  </li>
+
+  <li>
+mb_strtolower\83T\83|\81[\83g\82µ\82Ü\82µ\82½
+  </li>
+
+  <li>
+mb_strtoupper\83T\83|\81[\83g\82µ\82Ü\82µ\82½</li>
+  <li>MB_CASE_UPPER\81CMB_CASE_LOWER\81CMB_CASE_CASE\82ð\92è\8b`\82µ\82Ü\82µ\82½</li>
+
+  <li>\83O\83\8d\81[\83o\83\8b\95Ï\90\94\82ð$mbemu_internals\82É\8fW\96ñ\82µ\82Ü\82µ\82½</li>
+
+  <li>\83G\83\93\83R\81[\83f\83B\83\93\83O\82ÉSHIFT_JIS\81CISO-8859-1\82ð\92Ç\89Á\82µ\82Ü\82µ\82½</li>
+
+  <li>\95Ï\8a·\83e\81[\83u\83\8b\82ð\95K\97v\8e\9e\82É\93Ç\82Ý\8d\9e\82Þ\82æ\82¤\82É\8fC\90³\82µ\82Ü\82µ\82½</li>
+  <li>
+               mb_convert_kana\82Ì\83G\83\93\83R\81[\83f\83B\83\93\83O\82ª\8ew\92è\82³\82ê\82Ä\82¢\82È\82¢\82Æ\82«\81Cinternal_encoding\82Ì\92l\82ð\8eg\82¤\82æ\82¤\82É\8fC\90³\82µ\82Ü\82µ\82½</li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">Ver.0.37</span></font>\81i<font face="Times New Roman, serif"><span lang="en-US">2005/1/30</span></font>\81j</h3>
+
+<ul>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">JIS</span></font>\82Ì\83}\83b\83`\83\93\83O\82Ì\83o\83O\82ð\8dÄ\82Ñ\8fC\90³\82µ\82Ü\82µ\82½\81B
+    </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">Ver.0.36</span></font>\81i<font face="Times New Roman, serif"><span lang="en-US">2004/11/13</span></font>\81j</h3>
+
+<ul>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">JIS</span></font>\82Ì\83}\83b\83`\83\93\83O\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">Ver.0.35</span></font>\81i<font face="Times New Roman, serif"><span lang="en-US">2004/9/26</span></font>\81j</h3>
+
+<ul>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">mb_send_mail</span></font>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ
+\82½\81B </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">Ver.0.341</span></font>\81i<font face="Times New Roman, serif"><span lang="en-US">2004/9/16</span></font>\81j</h3>
+
+<ul>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">mb_convert_kana</span></font>\82Ì\83o\83O\82ð\8fC\90³\82µ
+\82Ü\82µ\82½\81B </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">Ver.0.34</span></font>\81i<font face="Times New Roman, serif"><span lang="en-US">2004/9/15</span></font>\81j</h3>
+
+<ul>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">mb_convert_kana</span></font>\82Ì\83o\83O\82ð\8fC\90³\82µ
+\82Ü\82µ\82½\81B </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">Ver.0.33</span></font>\81i<font face="Times New Roman, serif"><span lang="en-US">2004/8/27</span></font>\81j</h3>
+
+<ul>
+
+  <li>
+    <p style="margin-bottom: 0cm;"><font face="Times New Roman, serif"><span lang="en-US">mb_encode_numericentity,
+mb_decode_numericentity</span></font>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B </p>
+
+  </li>
+
+  <li>
+    <p style="margin-bottom: 0cm;"><font face="Times New Roman, serif"><span lang="en-US">mb_convert_encoding</span></font>\82Å<font face="Times New Roman, serif"><span lang="en-US">UTF-16</span></font>\82©
+\82ç\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B </p>
+
+  </li>
+
+  <li>
+    <p style="margin-bottom: 0cm;">\83V\83t\83g<font face="Times New Roman, serif"><span lang="en-US">JIS</span></font>\82Ì
+\8f\88\97\9d\82ð<font face="Times New Roman, serif"><span lang="en-US">SJIS-WIN</span></font>\8cÝ\8a·\82É\82µ\82Ü\82µ\82½\81B<font face="Times New Roman, serif"><span lang="en-US"><br>
+
+mbstring</span></font>\96{\89Æ\82Æ\82Í\88Ù\82È\82è\81C<font face="Times New Roman, serif"><span lang="en-US">SJIS</span></font>\82Æ<font face="Times New Roman, serif"><span lang="en-US">SJIS-WIN</span></font>\82Ì
+\93®\8dì\82Í\93¯\82\82Å\82·\81B </p>
+
+  </li>
+
+  <li>
+    <p style="margin-bottom: 0cm;"><font face="Times New Roman, serif"><span lang="en-US">mb_strcut</span></font>\82Ì
+\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B </p>
+
+  </li>
+
+  <li>
+    <p>\95Ï\8dX\97\9a\97ð\82ð<font face="Times New Roman, serif"><span lang="en-US">HTML</span></font>\82É\95Ï\82¦\82Ü\82µ\82½\81B </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">Ver.0.32(2004/8/19)</span></font></h3>
+
+<ul>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">mb_http_input, mb_http_output,
+mb_output_handler </span></font>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½<font face="Times New Roman, serif"><span lang="en-US"><br>
+
+    </span></font>\82½\82¾\82µ\81C<font face="Times New Roman, serif"><span lang="en-US">mb_http_input</span></font>\82É\8aÖ\82µ\82Ä\82Í\95\8e\9a\83R\81[
+\83h\95Ï\8a·\82ð\8ds\82í\82È\82¢\82½\82ß\81C\8fí\82É<font face="Times New Roman, serif"><span lang="en-US">FALSE</span></font>\82ð\95Ô\82µ\82Ü\82·\81B </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">Ver.0.31(2004/8/16)</span></font></h3>
+
+<ul>
+
+  <li>
+    <p style="margin-bottom: 0cm;"><font face="Times New Roman, serif"><span lang="en-US">mb_decode_mimeheader</span></font>\82Ì
+\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½ </p>
+
+  </li>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">mb_convert_variables</span></font>\82Ì\8f\89
+\8aú\90Ý\92è\83`\83F\83b\83N\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½ </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">Ver.0.3(2004/8/8)</span></font></h3>
+
+<ul>
+
+  <li>
+    <p style="margin-bottom: 0cm;">\83o\83O\82Â\82Ô\82µ<font face="Times New Roman, serif"><span lang="en-US"><br>
+
+    </span></font>\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B </p>
+
+  </li>
+
+  <li>
+    <p style="margin-bottom: 0cm;">\83o\83O\82Â\82Ô\82µ<font face="Times New Roman, serif"><span lang="en-US"><br>
+
+mb_strcut</span></font>\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½ </p>
+
+  </li>
+
+  <li>
+    <p style="margin-bottom: 0cm;"><font face="Times New Roman, serif"><span lang="en-US">mb_encode_mimeheader,
+mb_decode_mimeheader</span></font>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B </p>
+
+  </li>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">mb_convert_variables</span></font>\82Å\94z
+\97ñ\82©\82ç\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B<font face="Times New Roman, serif"><span lang="en-US"><br>
+
+    </span></font>\82±\82ê\82É\94º\82¢<font face="Times New Roman, serif"><span lang="en-US">mb_convert_variables</span></font>\82ð<font face="Times New Roman, serif"><span lang="en-US">2</span></font>\83p
+\83^\81[\83\93\82É\82µ\81C\8f\89\8aú\90Ý\92è\82Å\95Ï\8dX\82Å\82«\82é\82æ\82¤\82É\82µ\82Ü\82µ\82½\81B<font face="Times New Roman, serif"><span lang="en-US"><br>
+
+    </span></font>\8f\89\8aú\90Ý\92è\83t\83@\83C\83\8b\82Ì<font face="Times New Roman, serif"><span lang="en-US">convert-variables-arrayonly</span></font>\82ª<font face="Times New Roman, serif"><span lang="en-US">no</span></font>\82Ì
+\8fê\8d\87\81i\83f\83t\83H\83\8b\83g\81j\81C\82±\82ê\82Ü\82Å\82Æ\93¯\82\82æ\82¤\82É\94z\97ñ\82Å\82È\82­\82Ä\82à\95Ï\8a·\82µ\82Ü\82·\81B\82Ü\82½\81C\8dÅ\8f\89\82Ì\97v\91f\82ª\94z\97ñ\82Ì\8fê\8d\87\81C\82»\82ê\82¾\82¯\82ð\95Ï\8a·\82µ\82Ü\82·\81B\82½\82¾\82µ\81C\82±\82¿\82ç\82Ì\8fê\8d\87\81C\8cÄ\82Ñ
+\8fo\82µ\8e\9e\82É\88ø\90\94\82É<font face="Times New Roman, serif"><span lang="en-US">&amp;</span></font>\82ð\95t\82¯\82Ä\96¾\8e¦\93I\82É\8eQ\8fÆ\93n\82µ\82É
+\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B<font face="Times New Roman, serif"><span lang="en-US"><br>
+
+convert-variables-arrayonly</span></font>\82ª<font face="Times New Roman, serif"><span lang="en-US">no</span></font>\82Å
+\82È\82¢\8fê\8d\87\81C\95Ï\8a·\82·\82é\88ø\90\94\82Í\94z\97ñ\82¾\82¯\82É\82È\82è\82Ü\82·\81B\82»\82Ì\91ã\82í\82è\81C<font face="Times New Roman, serif"><span lang="en-US">&amp;</span></font>\82Í\95s\97v\82Å\82·\81B </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">Ver.0.25(2004/7/7)</span></font></h3>
+
+<ul>
+
+  <li>
+    <p>\83o\83O\82Â\82Ô\82µ<font face="Times New Roman, serif"><span lang="en-US"><br>
+
+    </span></font>\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">ver.0.24(2004/6/8)</span></font></h3>
+
+<ul>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">mb_strpos, mb_substr_count,
+mb_preferred_mime_name</span></font>\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">ver.0.23(2004/5/19)</span></font></h3>
+
+<ul>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">mb_convert_encoding</span></font>\82Å<font face="Times New Roman, serif"><span lang="en-US">UTF-16</span></font>\82Ö
+\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B<font face="Times New Roman, serif"><span lang="en-US"><br>
+
+    <br>
+
+usage:<br>
+
+$str = mb_convert_encoding($str, 'UTF-16', 'EUC-JP, UTF-8');<br>
+
+    <br>
+
+    </span></font>\95Ô\82·\82Ì\82Í<font face="Times New Roman, serif"><span lang="en-US">BOM</span></font>\82È\82µ\82Ì\83r\83b\83O\81E\83G\83\93\83f\83B\83A\83\93\82É\82È\82è\82Ü\82·\81B
+    </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">ver.0.22(2004/5/11)</span></font></h3>
+
+<ul>
+
+  <li>
+    <p style="margin-bottom: 0cm;">\83o\83O\82Â\82Ô\82µ </p>
+
+  </li>
+
+  <li>
+    <p style="margin-bottom: 0cm;"><font face="Times New Roman, serif"><span lang="en-US">mb_convert_variables</span></font>\82ð
+\8eb\92è\83T\83|\81[\83g </p>
+
+  </li>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">mb_strwidth</span></font>\82ð\83T\83|\81[\83g </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">ver.0.21(2004/4/28)</span></font></h3>
+
+<ul>
+
+  <li>
+    <p style="margin-bottom: 0cm;">\8f\89\8aú\90Ý\92è\82ð<font face="Times New Roman, serif"><span lang="en-US">mb-emulator.ini</span></font>\82©
+\82ç\93Ç\82Þ\82æ\82¤\82É\95Ï\8dX </p>
+
+  </li>
+
+  <li>
+    <p style="margin-bottom: 0cm;"><font face="Times New Roman, serif"><span lang="en-US">EUC</span></font>\82Æ<font face="Times New Roman, serif"><span lang="en-US">UTF-8</span></font>\8aÔ
+\82ð\92¼\90Ú\95Ï\8a·\82·\82é\82æ\82¤\82É\95Ï\8dX </p>
+
+  </li>
+
+  <li>
+    <p>\83o\83O\82Â\82Ô\82µ </p>
+
+  </li>
+
+</ul>
+
+<h3><font face="Times New Roman, serif"><span lang="en-US">ver.0.2(2004/4/27)</span></font></h3>
+
+<ul>
+
+  <li>
+    <p><font face="Times New Roman, serif"><span lang="en-US">jcode</span></font>\82ð\8eg\82í\82È\82¢\8c`\82Å\93Æ\97§\82µ\82Ü\82µ\82½\81B<font face="Times New Roman, serif"><span lang="en-US">12</span></font>\8aÖ
+\90\94\83T\83|\81[\83g<font face="Times New Roman, serif"><span lang="en-US"><br>
+
+mb_language, mb_internal_encoding, mb_convert_encoding,
+mb_convert_kana, mb_send_mail, mb_strimwidth, mb_detect_encoding,
+mb_detect_order, mb_strlen, mb_substr, mb_strcut, mb_strrpos </span></font>
+    </p>
+
+  </li>
+
+</ul>
+
+<h2>\8aÖ\90\94\83T\83|\81[\83g\8fó\8bµ\81i<font face="Times New Roman, serif"><span lang="en-US">2004/8/19</span></font>\81j</h2>
+
+<table cellpadding="2" cellspacing="2">
+
+  <tbody>
+
+    <tr>
+
+      <td width="150">
+      <p><font face="Times New Roman, serif"><span lang="en-US"><b>mbstring</b></span></font><b>\8aÖ
+\90\94\96¼</b></p>
+
+      </td>
+
+      <td width="300">
+      <p><b>\8d¡\8cã\82Ì\83T\83|\81[\83g\97\\92è</b></p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_convert_case</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\89Â\94\\82¾\82¯\82Ç\8c\8b\8d\\91å\95Ï\82»\82¤\81B\82 \82Ü\82è\8eg\82¢\82»\82¤\82É\82È\82¢\8bC\82ª\82·\82é\81B\82à\82µ\83j\81[\83Y\82ª\82 \82ê\82Î</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_convert_encoding</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_convert_kana</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_convert_variables</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_decode_mimeheader</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_decode_numericentity</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_detect_encoding</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_detect_order</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_encode_mimeheader</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_encode_numericentity</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_ereg_match</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_ereg_replace</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_ereg_search_getpos</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_ereg_search_getregs</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_ereg_search_init</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_ereg_search_pos</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_ereg_search_regs</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_ereg_search_setpos</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_ereg_search</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_ereg</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_eregi_replace</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_eregi</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_get_info</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_http_input</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý\81i\8fí\82É<font face="Times New Roman, serif"><span lang="en-US">FALSE</span></font>\82ð\95Ô\82·\81j</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_http_output</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_internal_encoding</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_language</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý\81i\82½\82¾\82µ\8ew\92è\82µ\82Ä\82à\89½\82à\95Ï\82í\82ç\82È\82¢\81j</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_output_handler</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_parse_str</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_preferred_mime_name</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_regex_encoding</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_regex_set_options</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_send_mail</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_split</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\95s\89Â\94\</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_strcut</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_strimwidth</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_strlen</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_strpos</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_strrpos</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_strtolower</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\89Â\94\\82¾\82¯\82Ç\91å\95Ï\82»\82¤</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_strtoupper</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\89Â\94\\82¾\82¯\82Ç\91å\95Ï\82»\82¤</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_strwidth</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_substitute_character</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\93ï\82µ\82»\82¤</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_substr_count</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+    <tr>
+
+      <td>
+      <p><font face="Times New Roman, serif"><span lang="en-US">mb_substr</span></font></p>
+
+      </td>
+
+      <td>
+      <p>\83T\83|\81[\83g\8dÏ\82Ý</p>
+
+      </td>
+
+    </tr>
+
+  </tbody>
+</table>
+
+<p><br>
+
+<br>
+
+</p>
+
+</body>
+</html>
diff --git a/utf8/nucleus/libs/mb_emulator/history.txt b/utf8/nucleus/libs/mb_emulator/history.txt
new file mode 100755 (executable)
index 0000000..47f0dd8
--- /dev/null
@@ -0,0 +1,40 @@
+Ver.0.3(2004/8/8)
+\81E\83o\83O\82Â\82Ô\82µ
+\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B
+\81E\83o\83O\82Â\82Ô\82µ
+mb_strcut\82Ì\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½
+\81Emb_encode_mimeheader, mb_decode_mimeheader\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B
+\81Emb_convert_variables\82Å\94z\97ñ\82©\82ç\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B
+\82±\82ê\82É\94º\82¢mb_convert_variables\82ð2\83p\83^\81[\83\93\82É\82µ\81C\8f\89\8aú\90Ý\92è\82Å\95Ï\8dX\82Å\82«\82é\82æ\82¤\82É\82µ\82Ü\82µ\82½\81B
+\8f\89\8aú\90Ý\92è\83t\83@\83C\83\8b\82Ìconvert-variables-arrayonly\82ªno\82Ì\8fê\8d\87\81i\83f\83t\83H\83\8b\83g\81j\81C\82±\82ê\82Ü\82Å\82Æ\93¯\82\82æ\82¤\82É\94z\97ñ\82Å\82È\82­\82Ä\82à\95Ï\8a·\82µ\82Ü\82·\81B\82Ü\82½\81C\8dÅ\8f\89\82Ì\97v\91f\82ª\94z\97ñ\82Ì\8fê\8d\87\81C\82»\82ê\82¾\82¯\82ð\95Ï\8a·\82µ\82Ü\82·\81B\82½\82¾\82µ\81C\82±\82¿\82ç\82Ì\8fê\8d\87\81C\8cÄ\82Ñ\8fo\82µ\8e\9e\82É\88ø\90\94\82É&\82ð\95t\82¯\82Ä\96¾\8e¦\93I\82É\8eQ\8fÆ\93n\82µ\82É\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B
+convert-variables-arrayonly\82ªno\82Å\82È\82¢\8fê\8d\87\81C\95Ï\8a·\82·\82é\88ø\90\94\82Í\94z\97ñ\82¾\82¯\82É\82È\82è\82Ü\82·\81B\82»\82Ì\91ã\82í\82è\81C&\82Í\95s\97v\82Å\82·\81B
+
+Ver.0.25(2004/7/7)
+\81E\83o\83O\82Â\82Ô\82µ
+\93ü\82ê\8eq\82Ì\83t\83@\83\93\83N\83V\83\87\83\93\82Å\93ñ\8fd\90é\8c¾\82É\82È\82Á\82Ä\82µ\82Ü\82¤\8fê\8d\87\82ª\82 \82é\82Ì\82Å\8aO\95\94\82É\8fo\82µ\82Ü\82µ\82½\81B
+
+ver.0.24(2004/6/8)
+\81Emb_strpos, mb_substr_count, mb_preferred_mime_name\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B
+
+ver.0.23(2004/5/19)
+\81Emb_convert_encoding\82ÅUTF-16\82Ö\82Ì\95Ï\8a·\82ð\83T\83|\81[\83g\82µ\82Ü\82µ\82½\81B
+
+usage:
+$str = mb_convert_encoding($str, 'UTF-16', 'EUC-JP, UTF-8');
+
+\95Ô\82·\82Ì\82ÍBOM\82È\82µ\82Ì\83r\83b\83O\81E\83G\83\93\83f\83B\83A\83\93\82É\82È\82è\82Ü\82·\81B
+
+ver.0.22(2004/5/11)
+\81E\83o\83O\82Â\82Ô\82µ
+\81Emb_convert_variables\82ð\8eb\92è\83T\83|\81[\83g
+\81Emb_strwidth\82ð\83T\83|\81[\83
+
+ver.0.21(2004/4/28)
+\81E\8f\89\8aú\90Ý\92è\82ðmb-emulator.ini\82©\82ç\93Ç\82Þ\82æ\82¤\82É\95Ï\8dX
+\81EEUC\82ÆUTF-8\8aÔ\82ð\92¼\90Ú\95Ï\8a·\82·\82é\82æ\82¤\82É\95Ï\8dX
+\81E\83o\83O\82Â\82Ô\82µ
+
+ver.0.2(2004/4/27)
+jcode\82ð\8eg\82í\82È\82¢\8c`\82Å\93Æ\97§\82µ\82Ü\82µ\82½\81B12\8aÖ\90\94\83T\83|\81[\83g
+mb_language, mb_internal_encoding, mb_convert_encoding, mb_convert_kana, mb_send_mail, mb_strimwidth, mb_detect_encoding, mb_detect_order, mb_strlen, mb_substr, mb_strcut, mb_strrpos
+
diff --git a/utf8/nucleus/libs/mb_emulator/lower.table b/utf8/nucleus/libs/mb_emulator/lower.table
new file mode 100644 (file)
index 0000000..57e44ce
--- /dev/null
@@ -0,0 +1,615 @@
+<?php
+$mbemu_internals['lowerarray'] = array (
+0x00C0 => 0x00E0,
+0x00C1 => 0x00E1,
+0x00C2 => 0x00E2,
+0x00C3 => 0x00E3,
+0x00C4 => 0x00E4,
+0x00C5 => 0x00E5,
+0x00C6 => 0x00E6,
+0x00C7 => 0x00E7,
+0x00C8 => 0x00E8,
+0x00C9 => 0x00E9,
+0x00CA => 0x00EA,
+0x00CB => 0x00EB,
+0x00CC => 0x00EC,
+0x00CD => 0x00ED,
+0x00CE => 0x00EE,
+0x00CF => 0x00EF,
+0x00D0 => 0x00F0,
+0x00D1 => 0x00F1,
+0x00D2 => 0x00F2,
+0x00D3 => 0x00F3,
+0x00D4 => 0x00F4,
+0x00D5 => 0x00F5,
+0x00D6 => 0x00F6,
+0x00D8 => 0x00F8,
+0x00D9 => 0x00F9,
+0x00DA => 0x00FA,
+0x00DB => 0x00FB,
+0x00DC => 0x00FC,
+0x00DD => 0x00FD,
+0x00DE => 0x00FE, 
+0x0100 => 0x0101,
+0x0102 => 0x0103,
+0x0104 => 0x0105,
+0x0106 => 0x0107,
+0x0108 => 0x0109,
+0x010A => 0x010B,
+0x010C => 0x010D,
+0x010E => 0x010F,
+0x0110 => 0x0111,
+0x0112 => 0x0113,
+0x0114 => 0x0115,
+0x0116 => 0x0117,
+0x0118 => 0x0119,
+0x011A => 0x011B,
+0x011C => 0x011D,
+0x011E => 0x011F,
+0x0120 => 0x0121,
+0x0122 => 0x0123,
+0x0124 => 0x0125,
+0x0126 => 0x0127,
+0x0128 => 0x0129,
+0x012A => 0x012B,
+0x012C => 0x012D,
+0x012E => 0x012F,
+0x0130 => 0x0069,
+0x0132 => 0x0133,
+0x0134 => 0x0135,
+0x0136 => 0x0137,
+0x0139 => 0x013A,
+0x013B => 0x013C,
+0x013D => 0x013E,
+0x013F => 0x0140,
+0x0141 => 0x0142,
+0x0143 => 0x0144,
+0x0145 => 0x0146,
+0x0147 => 0x0148,
+0x014A => 0x014B,
+0x014C => 0x014D,
+0x014E => 0x014F,
+0x0150 => 0x0151,
+0x0152 => 0x0153,
+0x0154 => 0x0155,
+0x0156 => 0x0157,
+0x0158 => 0x0159,
+0x015A => 0x015B,
+0x015C => 0x015D,
+0x015E => 0x015F,
+0x0160 => 0x0161,
+0x0162 => 0x0163,
+0x0164 => 0x0165,
+0x0166 => 0x0167,
+0x0168 => 0x0169,
+0x016A => 0x016B,
+0x016C => 0x016D,
+0x016E => 0x016F,
+0x0170 => 0x0171,
+0x0172 => 0x0173,
+0x0174 => 0x0175,
+0x0176 => 0x0177,
+0x0178 => 0x00FF,
+0x0179 => 0x017A,
+0x017B => 0x017C,
+0x017D => 0x017E,
+0x0181 => 0x0253,
+0x0182 => 0x0183,
+0x0184 => 0x0185,
+0x0186 => 0x0254,
+0x0187 => 0x0188,
+0x0189 => 0x0256,
+0x018A => 0x0257,
+0x018B => 0x018C,
+0x018E => 0x01DD,
+0x018F => 0x0259,
+0x0190 => 0x025B,
+0x0191 => 0x0192,
+0x0193 => 0x0260,
+0x0194 => 0x0263,
+0x0196 => 0x0269,
+0x0197 => 0x0268,
+0x0198 => 0x0199,
+0x019C => 0x026F,
+0x019D => 0x0272,
+0x019F => 0x0275,
+0x01A0 => 0x01A1,
+0x01A2 => 0x01A3,
+0x01A4 => 0x01A5,
+0x01A6 => 0x0280,
+0x01A7 => 0x01A8,
+0x01A9 => 0x0283,
+0x01AC => 0x01AD,
+0x01AE => 0x0288,
+0x01AF => 0x01B0,
+0x01B1 => 0x028A,
+0x01B2 => 0x028B,
+0x01B3 => 0x01B4,
+0x01B5 => 0x01B6,
+0x01B7 => 0x0292,
+0x01B8 => 0x01B9,
+0x01BC => 0x01BD,
+0x01C4 => 0x01C6,
+0x01C7 => 0x01C9,
+0x01CA => 0x01CC,
+0x01CD => 0x01CE,
+0x01CF => 0x01D0,
+0x01D1 => 0x01D2,
+0x01D3 => 0x01D4,
+0x01D5 => 0x01D6,
+0x01D7 => 0x01D8,
+0x01D9 => 0x01DA,
+0x01DB => 0x01DC,
+0x01DE => 0x01DF,
+0x01E0 => 0x01E1,
+0x01E2 => 0x01E3,
+0x01E4 => 0x01E5,
+0x01E6 => 0x01E7,
+0x01E8 => 0x01E9,
+0x01EA => 0x01EB,
+0x01EC => 0x01ED,
+0x01EE => 0x01EF,
+0x01F1 => 0x01F3,
+0x01F4 => 0x01F5,
+0x01F6 => 0x0195,
+0x01F7 => 0x01BF,
+0x01F8 => 0x01F9,
+0x01FA => 0x01FB,
+0x01FC => 0x01FD,
+0x01FE => 0x01FF,
+0x0200 => 0x0201,
+0x0202 => 0x0203,
+0x0204 => 0x0205,
+0x0206 => 0x0207,
+0x0208 => 0x0209,
+0x020A => 0x020B,
+0x020C => 0x020D,
+0x020E => 0x020F,
+0x0210 => 0x0211,
+0x0212 => 0x0213,
+0x0214 => 0x0215,
+0x0216 => 0x0217,
+0x0218 => 0x0219,
+0x021A => 0x021B,
+0x021C => 0x021D,
+0x021E => 0x021F,
+0x0220 => 0x019E,
+0x0222 => 0x0223,
+0x0224 => 0x0225,
+0x0226 => 0x0227,
+0x0228 => 0x0229,
+0x022A => 0x022B,
+0x022C => 0x022D,
+0x022E => 0x022F,
+0x0230 => 0x0231,
+0x0232 => 0x0233,
+0x0386 => 0x03AC,
+0x0388 => 0x03AD,
+0x0389 => 0x03AE,
+0x038A => 0x03AF,
+0x038C => 0x03CC,
+0x038E => 0x03CD,
+0x038F => 0x03CE,
+0x0391 => 0x03B1,
+0x0392 => 0x03B2,
+0x0393 => 0x03B3,
+0x0394 => 0x03B4,
+0x0395 => 0x03B5,
+0x0396 => 0x03B6,
+0x0397 => 0x03B7,
+0x0398 => 0x03B8,
+0x0399 => 0x03B9,
+0x039A => 0x03BA,
+0x039B => 0x03BB,
+0x039C => 0x03BC,
+0x039D => 0x03BD,
+0x039E => 0x03BE,
+0x039F => 0x03BF,
+0x03A0 => 0x03C0,
+0x03A1 => 0x03C1,
+0x03A3 => 0x03C3,
+0x03A4 => 0x03C4,
+0x03A5 => 0x03C5,
+0x03A6 => 0x03C6,
+0x03A7 => 0x03C7,
+0x03A8 => 0x03C8,
+0x03A9 => 0x03C9,
+0x03AA => 0x03CA,
+0x03AB => 0x03CB,
+0x03D8 => 0x03D9,
+0x03DA => 0x03DB,
+0x03DC => 0x03DD,
+0x03DE => 0x03DF,
+0x03E0 => 0x03E1,
+0x03E2 => 0x03E3,
+0x03E4 => 0x03E5,
+0x03E6 => 0x03E7,
+0x03E8 => 0x03E9,
+0x03EA => 0x03EB,
+0x03EC => 0x03ED,
+0x03EE => 0x03EF,
+0x03F4 => 0x03B8,
+0x0400 => 0x0450,
+0x0401 => 0x0451,
+0x0402 => 0x0452,
+0x0403 => 0x0453,
+0x0404 => 0x0454,
+0x0405 => 0x0455,
+0x0406 => 0x0456,
+0x0407 => 0x0457,
+0x0408 => 0x0458,
+0x0409 => 0x0459,
+0x040A => 0x045A,
+0x040B => 0x045B,
+0x040C => 0x045C,
+0x040D => 0x045D,
+0x040E => 0x045E,
+0x040F => 0x045F,
+0x0410 => 0x0430,
+0x0411 => 0x0431,
+0x0412 => 0x0432,
+0x0413 => 0x0433,
+0x0414 => 0x0434,
+0x0415 => 0x0435,
+0x0416 => 0x0436,
+0x0417 => 0x0437,
+0x0418 => 0x0438,
+0x0419 => 0x0439,
+0x041A => 0x043A,
+0x041B => 0x043B,
+0x041C => 0x043C,
+0x041D => 0x043D,
+0x041E => 0x043E,
+0x041F => 0x043F,
+0x0420 => 0x0440,
+0x0421 => 0x0441,
+0x0422 => 0x0442,
+0x0423 => 0x0443,
+0x0424 => 0x0444,
+0x0425 => 0x0445,
+0x0426 => 0x0446,
+0x0427 => 0x0447,
+0x0428 => 0x0448,
+0x0429 => 0x0449,
+0x042A => 0x044A,
+0x042B => 0x044B,
+0x042C => 0x044C,
+0x042D => 0x044D,
+0x042E => 0x044E,
+0x042F => 0x044F,
+0x0460 => 0x0461,
+0x0462 => 0x0463,
+0x0464 => 0x0465,
+0x0466 => 0x0467,
+0x0468 => 0x0469,
+0x046A => 0x046B,
+0x046C => 0x046D,
+0x046E => 0x046F,
+0x0470 => 0x0471,
+0x0472 => 0x0473,
+0x0474 => 0x0475,
+0x0476 => 0x0477,
+0x0478 => 0x0479,
+0x047A => 0x047B,
+0x047C => 0x047D,
+0x047E => 0x047F,
+0x0480 => 0x0481,
+0x048A => 0x048B,
+0x048C => 0x048D,
+0x048E => 0x048F,
+0x0490 => 0x0491,
+0x0492 => 0x0493,
+0x0494 => 0x0495,
+0x0496 => 0x0497,
+0x0498 => 0x0499,
+0x049A => 0x049B,
+0x049C => 0x049D,
+0x049E => 0x049F,
+0x04A0 => 0x04A1,
+0x04A2 => 0x04A3,
+0x04A4 => 0x04A5,
+0x04A6 => 0x04A7,
+0x04A8 => 0x04A9,
+0x04AA => 0x04AB,
+0x04AC => 0x04AD,
+0x04AE => 0x04AF,
+0x04B0 => 0x04B1,
+0x04B2 => 0x04B3,
+0x04B4 => 0x04B5,
+0x04B6 => 0x04B7,
+0x04B8 => 0x04B9,
+0x04BA => 0x04BB,
+0x04BC => 0x04BD,
+0x04BE => 0x04BF,
+0x04C1 => 0x04C2,
+0x04C3 => 0x04C4,
+0x04C5 => 0x04C6,
+0x04C7 => 0x04C8,
+0x04C9 => 0x04CA,
+0x04CB => 0x04CC,
+0x04CD => 0x04CE,
+0x04D0 => 0x04D1,
+0x04D2 => 0x04D3,
+0x04D4 => 0x04D5,
+0x04D6 => 0x04D7,
+0x04D8 => 0x04D9,
+0x04DA => 0x04DB,
+0x04DC => 0x04DD,
+0x04DE => 0x04DF,
+0x04E0 => 0x04E1,
+0x04E2 => 0x04E3,
+0x04E4 => 0x04E5,
+0x04E6 => 0x04E7,
+0x04E8 => 0x04E9,
+0x04EA => 0x04EB,
+0x04EC => 0x04ED,
+0x04EE => 0x04EF,
+0x04F0 => 0x04F1,
+0x04F2 => 0x04F3,
+0x04F4 => 0x04F5,
+0x04F8 => 0x04F9,
+0x0500 => 0x0501,
+0x0502 => 0x0503,
+0x0504 => 0x0505,
+0x0506 => 0x0507,
+0x0508 => 0x0509,
+0x050A => 0x050B,
+0x050C => 0x050D,
+0x050E => 0x050F,
+0x0531 => 0x0561,
+0x0532 => 0x0562,
+0x0533 => 0x0563,
+0x0534 => 0x0564,
+0x0535 => 0x0565,
+0x0536 => 0x0566,
+0x0537 => 0x0567,
+0x0538 => 0x0568,
+0x0539 => 0x0569,
+0x053A => 0x056A,
+0x053B => 0x056B,
+0x053C => 0x056C,
+0x053D => 0x056D,
+0x053E => 0x056E,
+0x053F => 0x056F,
+0x0540 => 0x0570,
+0x0541 => 0x0571,
+0x0542 => 0x0572,
+0x0543 => 0x0573,
+0x0544 => 0x0574,
+0x0545 => 0x0575,
+0x0546 => 0x0576,
+0x0547 => 0x0577,
+0x0548 => 0x0578,
+0x0549 => 0x0579,
+0x054A => 0x057A,
+0x054B => 0x057B,
+0x054C => 0x057C,
+0x054D => 0x057D,
+0x054E => 0x057E,
+0x054F => 0x057F,
+0x0550 => 0x0580,
+0x0551 => 0x0581,
+0x0552 => 0x0582,
+0x0553 => 0x0583,
+0x0554 => 0x0584,
+0x0555 => 0x0585,
+0x0556 => 0x0586,
+0x1E00 => 0x1E01,
+0x1E02 => 0x1E03,
+0x1E04 => 0x1E05,
+0x1E06 => 0x1E07,
+0x1E08 => 0x1E09,
+0x1E0A => 0x1E0B,
+0x1E0C => 0x1E0D,
+0x1E0E => 0x1E0F,
+0x1E10 => 0x1E11,
+0x1E12 => 0x1E13,
+0x1E14 => 0x1E15,
+0x1E16 => 0x1E17,
+0x1E18 => 0x1E19,
+0x1E1A => 0x1E1B,
+0x1E1C => 0x1E1D,
+0x1E1E => 0x1E1F,
+0x1E20 => 0x1E21,
+0x1E22 => 0x1E23,
+0x1E24 => 0x1E25,
+0x1E26 => 0x1E27,
+0x1E28 => 0x1E29,
+0x1E2A => 0x1E2B,
+0x1E2C => 0x1E2D,
+0x1E2E => 0x1E2F,
+0x1E30 => 0x1E31,
+0x1E32 => 0x1E33,
+0x1E34 => 0x1E35,
+0x1E36 => 0x1E37,
+0x1E38 => 0x1E39,
+0x1E3A => 0x1E3B,
+0x1E3C => 0x1E3D,
+0x1E3E => 0x1E3F,
+0x1E40 => 0x1E41,
+0x1E42 => 0x1E43,
+0x1E44 => 0x1E45,
+0x1E46 => 0x1E47,
+0x1E48 => 0x1E49,
+0x1E4A => 0x1E4B,
+0x1E4C => 0x1E4D,
+0x1E4E => 0x1E4F,
+0x1E50 => 0x1E51,
+0x1E52 => 0x1E53,
+0x1E54 => 0x1E55,
+0x1E56 => 0x1E57,
+0x1E58 => 0x1E59,
+0x1E5A => 0x1E5B,
+0x1E5C => 0x1E5D,
+0x1E5E => 0x1E5F,
+0x1E60 => 0x1E61,
+0x1E62 => 0x1E63,
+0x1E64 => 0x1E65,
+0x1E66 => 0x1E67,
+0x1E68 => 0x1E69,
+0x1E6A => 0x1E6B,
+0x1E6C => 0x1E6D,
+0x1E6E => 0x1E6F,
+0x1E70 => 0x1E71,
+0x1E72 => 0x1E73,
+0x1E74 => 0x1E75,
+0x1E76 => 0x1E77,
+0x1E78 => 0x1E79,
+0x1E7A => 0x1E7B,
+0x1E7C => 0x1E7D,
+0x1E7E => 0x1E7F,
+0x1E80 => 0x1E81,
+0x1E82 => 0x1E83,
+0x1E84 => 0x1E85,
+0x1E86 => 0x1E87,
+0x1E88 => 0x1E89,
+0x1E8A => 0x1E8B,
+0x1E8C => 0x1E8D,
+0x1E8E => 0x1E8F,
+0x1E90 => 0x1E91,
+0x1E92 => 0x1E93,
+0x1E94 => 0x1E95,
+0x1EA0 => 0x1EA1,
+0x1EA2 => 0x1EA3,
+0x1EA4 => 0x1EA5,
+0x1EA6 => 0x1EA7,
+0x1EA8 => 0x1EA9,
+0x1EAA => 0x1EAB,
+0x1EAC => 0x1EAD,
+0x1EAE => 0x1EAF,
+0x1EB0 => 0x1EB1,
+0x1EB2 => 0x1EB3,
+0x1EB4 => 0x1EB5,
+0x1EB6 => 0x1EB7,
+0x1EB8 => 0x1EB9,
+0x1EBA => 0x1EBB,
+0x1EBC => 0x1EBD,
+0x1EBE => 0x1EBF,
+0x1EC0 => 0x1EC1,
+0x1EC2 => 0x1EC3,
+0x1EC4 => 0x1EC5,
+0x1EC6 => 0x1EC7,
+0x1EC8 => 0x1EC9,
+0x1ECA => 0x1ECB,
+0x1ECC => 0x1ECD,
+0x1ECE => 0x1ECF,
+0x1ED0 => 0x1ED1,
+0x1ED2 => 0x1ED3,
+0x1ED4 => 0x1ED5,
+0x1ED6 => 0x1ED7,
+0x1ED8 => 0x1ED9,
+0x1EDA => 0x1EDB,
+0x1EDC => 0x1EDD,
+0x1EDE => 0x1EDF,
+0x1EE0 => 0x1EE1,
+0x1EE2 => 0x1EE3,
+0x1EE4 => 0x1EE5,
+0x1EE6 => 0x1EE7,
+0x1EE8 => 0x1EE9,
+0x1EEA => 0x1EEB,
+0x1EEC => 0x1EED,
+0x1EEE => 0x1EEF,
+0x1EF0 => 0x1EF1,
+0x1EF2 => 0x1EF3,
+0x1EF4 => 0x1EF5,
+0x1EF6 => 0x1EF7,
+0x1EF8 => 0x1EF9,
+0x1F08 => 0x1F00,
+0x1F09 => 0x1F01,
+0x1F0A => 0x1F02,
+0x1F0B => 0x1F03,
+0x1F0C => 0x1F04,
+0x1F0D => 0x1F05,
+0x1F0E => 0x1F06,
+0x1F0F => 0x1F07,
+0x1F18 => 0x1F10,
+0x1F19 => 0x1F11,
+0x1F1A => 0x1F12,
+0x1F1B => 0x1F13,
+0x1F1C => 0x1F14,
+0x1F1D => 0x1F15,
+0x1F28 => 0x1F20,
+0x1F29 => 0x1F21,
+0x1F2A => 0x1F22,
+0x1F2B => 0x1F23,
+0x1F2C => 0x1F24,
+0x1F2D => 0x1F25,
+0x1F2E => 0x1F26,
+0x1F2F => 0x1F27,
+0x1F38 => 0x1F30,
+0x1F39 => 0x1F31,
+0x1F3A => 0x1F32,
+0x1F3B => 0x1F33,
+0x1F3C => 0x1F34,
+0x1F3D => 0x1F35,
+0x1F3E => 0x1F36,
+0x1F3F => 0x1F37,
+0x1F48 => 0x1F40,
+0x1F49 => 0x1F41,
+0x1F4A => 0x1F42,
+0x1F4B => 0x1F43,
+0x1F4C => 0x1F44,
+0x1F4D => 0x1F45,
+0x1F59 => 0x1F51,
+0x1F5B => 0x1F53,
+0x1F5D => 0x1F55,
+0x1F5F => 0x1F57,
+0x1F68 => 0x1F60,
+0x1F69 => 0x1F61,
+0x1F6A => 0x1F62,
+0x1F6B => 0x1F63,
+0x1F6C => 0x1F64,
+0x1F6D => 0x1F65,
+0x1F6E => 0x1F66,
+0x1F6F => 0x1F67,
+0x1FB8 => 0x1FB0,
+0x1FB9 => 0x1FB1,
+0x1FBA => 0x1F70,
+0x1FBB => 0x1F71,
+0x1FC8 => 0x1F72,
+0x1FC9 => 0x1F73,
+0x1FCA => 0x1F74,
+0x1FCB => 0x1F75,
+0x1FD8 => 0x1FD0,
+0x1FD9 => 0x1FD1,
+0x1FDA => 0x1F76,
+0x1FDB => 0x1F77,
+0x1FE8 => 0x1FE0,
+0x1FE9 => 0x1FE1,
+0x1FEA => 0x1F7A,
+0x1FEB => 0x1F7B,
+0x1FEC => 0x1FE5,
+0x1FF8 => 0x1F78,
+0x1FF9 => 0x1F79,
+0x1FFA => 0x1F7C,
+0x1FFB => 0x1F7D,
+0x2126 => 0x03C9,
+0x212A => 0x006B,
+0x212B => 0x00E5,
+0xFF21 => 0xFF41,
+0xFF22 => 0xFF42,
+0xFF23 => 0xFF43,
+0xFF24 => 0xFF44,
+0xFF25 => 0xFF45,
+0xFF26 => 0xFF46,
+0xFF27 => 0xFF47,
+0xFF28 => 0xFF48,
+0xFF29 => 0xFF49,
+0xFF2A => 0xFF4A,
+0xFF2B => 0xFF4B,
+0xFF2C => 0xFF4C,
+0xFF2D => 0xFF4D,
+0xFF2E => 0xFF4E,
+0xFF2F => 0xFF4F,
+0xFF30 => 0xFF50,
+0xFF31 => 0xFF51,
+0xFF32 => 0xFF52,
+0xFF33 => 0xFF53,
+0xFF34 => 0xFF54,
+0xFF35 => 0xFF55,
+0xFF36 => 0xFF56,
+0xFF37 => 0xFF57,
+0xFF38 => 0xFF58,
+0xFF39 => 0xFF59,
+0xFF3A => 0xFF5A);
+?>
diff --git a/utf8/nucleus/libs/mb_emulator/mb-emulator.ini b/utf8/nucleus/libs/mb_emulator/mb-emulator.ini
new file mode 100755 (executable)
index 0000000..48420d7
--- /dev/null
@@ -0,0 +1,6 @@
+language=ja
+internal_encoding=UTF-8
+detect_order=ASCII, JIS, UTF-8, EUC-JP, SJIS
+convert_variables_arrayonly=no
+http_output=pass
+substitute_character=none
diff --git a/utf8/nucleus/libs/mb_emulator/mb-emulator.php b/utf8/nucleus/libs/mb_emulator/mb-emulator.php
new file mode 100755 (executable)
index 0000000..9490571
--- /dev/null
@@ -0,0 +1,1678 @@
+<?php
+/* mbstring emulator for Japanese by Andy
+ * email : webmaster@matsubarafamily.com
+ *
+ * license based on GPL(GNU General Public License)
+ *
+ * Ver.0.84 (2006/1/20)
+ */
+
+
+define('MB_CASE_UPPER', 0);
+define('MB_CASE_LOWER', 1);
+define('MB_CASE_TITLE', 2);
+
+include dirname(__FILE__).'/convert.table';
+// include dirname(__FILE__).'/sjistouni.table';
+// include dirname(__FILE__).'/unitosjis.table';
+
+
+$mbemu_internals['ini_file'] = parse_ini_file(dirname(__FILE__).'/mb-emulator.ini');
+
+$mbemu_internals['language'] = $mbemu_internals['ini_file']['language'];
+$mbemu_internals['internal_encoding'] = $mbemu_internals['ini_file']['internal_encoding'];
+$mbemu_internals['lang_array'] = array (
+       'Japanese', 'ja','jp', 'English', 'en', 'uni'
+       );
+
+$mbemu_internals['encoding'] = array (
+       'AUTO' => 0xFF,
+       'ASCII' => 0,
+       'EUC-JP' => 1,
+       'EUC' => 1,
+       'SJIS' => 2,
+       'SHIFT-JIS' => 2,
+       'SHIFT_JIS' => 2,
+       'SJIS-WIN' => 2,
+       'JIS' => 3,
+       'ISO-2022-JP' => 3,
+       'UTF-8' => 4,
+       'UTF8' => 4,
+       'UTF-16'=>5,
+       'ISO-8859-1' => 6
+       );
+
+
+function mb_detect_order($encoding_list = '')
+{
+       global $mbemu_internals;
+       
+       if ($encoding_list) {
+               if (is_string($encoding_list)) {
+                       $encoding_list = strtoupper($encoding_list);
+                       $encoding_list = split(', *', $encoding_list);
+               }
+               foreach($encoding_list as $encode)
+                       if (!array_key_exists($encode, $mbemu_internals['encoding'])) return FALSE;
+               $mbemu_internals['detect_order'] = $encoding_list;
+               return TRUE;
+       }
+       return $mbemu_internals['detect_order'];
+}
+
+if (!(mb_detect_order($mbemu_internals['ini_file']['detect_order'])))
+       $mbemu_internals['detect_order'] = array ("ASCII", "JIS", "UTF-8", "EUC-JP", "SJIS");
+
+$mbemu_internals['substitute_character'] = $mbemu_internals['ini_file']['substitute_character'];
+
+$mbemu_internals['regex'] = array(
+       0 => "[\x01-\x7F]", // for ASCII
+       1 => "[\xA1-\xFE]([\xA1-\xFE])|[\x01-\x7F]|\x8E([\xA0-\xDF])", // for EUC-JP
+       2 => "[\x81-\x9F\xE0-\xFC]([\x40-\xFC])|[\x01-\x7F]|[\xA0-\xDF]", // for Shift_JIS
+       3 => "(?:^|\x1B\(\x42)([\x01-\x1A,\x1C-\x7F]*)|(?:\x1B\\$\x42([\x01-\x1A,\x1C-\x7F]*))|(?:\x1B\(I([\x01-\x1A,\x1C-\x7F]*))", // for JIS
+       4 => "[\x01-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]", // for UTF-8
+       5 => "..", // for UTF-16
+       6 => "." // for ISO-8859-1
+       );
+
+
+
+function mb_language($language='')
+{
+  global $mbemu_internals;
+
+  if ($language =='') {
+    if ($mbemu_internals['language'] == '') return FALSE;
+    else return $mbemu_internals['language'];
+  } else {
+       foreach ($mbemu_internals['lang_array'] as $element) {
+               if ($element == $language) {
+                       $mbemu_internals['language'] = $language;
+                       return TRUE;
+               }
+       }
+       return FALSE;
+  }
+}
+
+
+function mb_internal_encoding($encoding = '')
+{
+       global $mbemu_internals;
+
+  if ($encoding =='') {
+    if ($mbemu_internals['internal_encoding'] == '') return FALSE;
+    else return $mbemu_internals['internal_encoding'];
+  } else {
+               $mbemu_internals['internal_encoding'] = $encoding;
+               return TRUE;
+  }
+}
+
+function mb_get_info($type = 'all')
+{
+       switch(strtolower($type)) {
+               case 'all' :
+                       $a['internal_encoding'] = mb_internal_encoding();
+                       $a['http_output'] = mb_http_output();
+                       $a['http_input'] = 'pass';
+                       $a['func_overload'] = 'pass';
+                       return $a;
+               case 'internal_encoding' :
+                       return mb_internal_encoding();
+               case 'http_output' :
+                       return mb_http_output();
+               case 'http_input' :
+                       return 'pass';
+               case 'func_overloard' :
+                       return 'pass';
+       }
+}
+
+function mb_substitute_character($subchar='')
+{
+       global $mbemu_internals;
+       
+       if (!$subchar) return $mbemu_internals['substitute_character'];
+       if (is_int($subchar)) {
+               $mbemu_internals['substitute_character'] = $subchar;
+       } else {
+               $subchar = strtolower($subchar);
+               switch ($subchar) {
+                       case 'none' :
+                       case 'long' :
+                               $mbemu_internals['substitute_character'] = $subchar;
+               }
+       }
+}
+
+
+function mb_convert_encoding( $str, $to_encoding, $from_encoding = '')
+{
+       global $mbemu_internals;
+
+       $to_encoding = strtoupper($to_encoding);
+       $from_encoding = mb_detect_encoding($str, $from_encoding);
+       
+       switch ($mbemu_internals['encoding'][$from_encoding]) {
+               case 1: //euc-jp
+                       switch($mbemu_internals['encoding'][$to_encoding]) {
+                               case 2: //sjis
+                                       return _euctosjis($str);
+                               case 3: //jis
+                                       $str = _euctosjis($str);
+                                       return _sjistojis($str);
+                               case 4: //utf8
+                                       return _euctoutf8($str);
+                               case 5: //utf16
+                                       $str = _euctoutf8($str);
+                                       return _utf8toutf16($str);
+                               default:
+                                       return $str;
+                       }
+               case 2: //sjis
+                       switch($mbemu_internals['encoding'][$to_encoding]) {
+                               case 1: //euc-jp
+                                       return _sjistoeuc($str);
+                               case 3: //jis
+                                       return _sjistojis($str);
+                               case 4: //utf8
+                                       return _sjistoutf8($str);
+                               case 5: //utf16
+                                       $str = _sjistoutf8($str);
+                                       return _utf8toutf16($str);
+                               default:
+                                       return $str;
+                       }
+               case 3: //jis
+                       switch($mbemu_internals['encoding'][$to_encoding]) {
+                               case 1: //euc-jp
+                                       $str = _jistosjis($str);
+                                       return _sjistoeuc($str);
+                               case 2: //sjis
+                                       return _jistosjis($str);
+                               case 4: //utf8
+                                       $str = _jistosjis($str);
+                                       return _sjistoutf8($str);
+                               case 5: //utf16
+                                       $str = _jistosjis($str);
+                                       $str = _sjistoutf8($str);
+                                       return _utf8toutf16($str);
+                               default:
+                                       return $str;
+                       }
+               case 4: //utf8
+                       switch($mbemu_internals['encoding'][$to_encoding]) {
+                               case 1: //euc-jp
+                                       return _utf8toeuc($str);
+                               case 2: //sjis
+                                       return _utf8tosjis($str);
+                               case 3: //jis
+                                       $str = _utf8tosjis($str);
+                                       return _sjistojis($str);
+                               case 5: //utf16
+                                       return _utf8toutf16($str);
+                               default:
+                                       return $str;
+                       }
+               case 5: //utf16
+                       $str = _utf16toutf8($str);
+                       switch($mbemu_internals['encoding'][$to_encoding]) {
+                               case 1: //euc-jp
+                                       return _utf8toeuc($str);
+                               case 2: //sjis
+                                       return _utf8tosjis($str);
+                               case 3: //jis
+                                       $str = _utf8tosjis($str);
+                                       return _sjistojis($str);
+                               case 4: //utf8
+                                       return $str;
+                               default:
+                                       return _utf8toutf16($str);
+                       }
+               default:
+                       return $str;
+       }
+}
+
+
+
+function _sjistoeuc(&$str)
+{
+       global $mbemu_internals;
+       
+       $max = preg_match_all('/'.$mbemu_internals['regex'][2].'/', $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       $str_EUC = '';
+       for ($i = 0; $i < $max; ++$i) {
+               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·
+               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87
+                       $shift = $mbemu_internals['sjistoeuc_byte1_shift'][$num2];
+                       $str_EUC .= chr($mbemu_internals['sjistoeuc_byte1'][$num] + $shift)
+                                          .chr($mbemu_internals['sjistoeuc_byte2'][$shift][$num2]);
+               } elseif ($num <= 0x7F) {//\89p\90\94\8e\9a
+                       $str_EUC .= chr($num);
+               } else { //\94¼\8ap\83J\83i
+                       $str_EUC .= chr(0x8E).chr($num);
+               }
+       }
+       return $str_EUC;
+}
+
+
+function _euctosjis(&$str)
+{
+       global $mbemu_internals;
+       $max = preg_match_all('/'.$mbemu_internals['regex'][1].'/', $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       $str_SJIS = '';
+       for ($i = 0; $i < $max; ++$i) {
+               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·
+               if ($num2 = ord($allchars[1][$i])) { // \8a¿\8e\9a\82Ì\8fê\8d\87
+                       $str_SJIS .= chr($mbemu_internals['euctosjis_byte1'][$num]);
+                       if ($num & 1)
+                               $str_SJIS .= chr($mbemu_internals['euctosjis_byte2'][0][$num2]);
+                       else
+                               $str_SJIS .= chr($mbemu_internals['euctosjis_byte2'][1][$num2]);
+               } elseif ($num3 = ord($allchars[2][$i])) {//\94¼\8ap\83J\83i
+                       $str_SJIS .= chr($num3);
+               } else { //\89p\90\94\8e\9a
+                       $str_SJIS .= chr($num);
+               }
+       }
+       return $str_SJIS;
+}
+
+function _sjistojis(&$str)
+{
+       global $mbemu_internals;
+       
+       $max = preg_match_all('/'.$mbemu_internals['regex'][2].'/', $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       $str_JIS = '';
+       $mode = 0; // \89p\90\94
+       for ($i = 0; $i < $max; ++$i) {
+               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·
+               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87
+                       if ($mode != 1) {
+                               $mode = 1;
+                               $str_JIS .= chr(0x1b).'$B';
+                       }
+                       $shift = $mbemu_internals['sjistoeuc_byte1_shift'][$num2];
+                       $str_JIS .= chr(($mbemu_internals['sjistoeuc_byte1'][$num] + $shift) & 0x7F)
+                                          .chr($mbemu_internals['sjistoeuc_byte2'][$shift][$num2] & 0x7F);
+               } elseif ($num > 0x80) {//\94¼\8ap\83J\83i
+                       if ($mode != 2) {
+                               $mode = 2;
+                               $str_JIS .= chr(0x1B).'(I';
+                       }
+                       $str_JIS .= chr($num & 0x7F);
+               } else {//\94¼\8ap\89p\90\94
+                       if ($mode != 0) {
+                               $mode = 0;
+                               $str_JIS .= chr(0x1B).'(B';
+                       }
+                       $str_JIS .= chr($num);
+               }
+       }
+       if ($mode != 0) {
+               $str_JIS .= chr(0x1B).'(B';
+       }
+       return $str_JIS;
+}
+
+function _sub_jtosj($match)
+{
+       global $mbemu_internals;
+       $num = ord($match[0]);
+       $num2 = ord($match[1]);
+       $s = chr($mbemu_internals['euctosjis_byte1'][$num | 0x80]);
+       if ($num & 1) {
+               $s .= chr($mbemu_internals['euctosjis_byte2'][0][$num2 | 0x80]);
+       } else {
+               $s .= chr($mbemu_internals['euctosjis_byte2'][1][$num2 | 0x80]);
+       }
+       return $s;
+}
+
+function _jistosjis(&$str)
+{
+       global $mbemu_internals;
+       
+       $max = preg_match_all('/'.$mbemu_internals['regex'][3].'/', $str, $allchunks, PREG_SET_ORDER);  // \95\8e\9a\8eí\82²\82Æ\82Ì\94z\97ñ\82É\95ª\89ð
+       $st = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if (ord($allchunks[$i][1])) { //\89p\90\94\82É\83}\83b\83`
+                       $st .= $allchunks[$i][1];
+               } elseif (ord($allchunks[$i][2])) { //\8a¿\8e\9a\82É\83}\83b\83`
+                       $tmp = substr($allchunks[$i][0], 3, strlen($allchunks[$i][0]));
+                       $st .= preg_replace_callback("/.(.)/","_sub_jtosj", $tmp);
+               } elseif (ord($allchunks[$i][3])) { //\94¼\8ap\83J\83i\82É\83}\83b\83`
+                       $st .= preg_replace("/./e","chr(ord['$1'] | 0x80);",$allchunks[$i][3]);
+               }
+       }
+       return $st;
+}
+
+
+function _ucs2utf8($uni)
+{
+       if ($uni <= 0x7f)
+               return chr($uni);
+       elseif ($uni <= 0x7ff) {
+               $y = ($uni >> 6) & 0x1f;
+               $x = $uni & 0x3f;
+               return chr(0xc0 | $y).chr(0x80 | $x);
+       } else {
+               $z = ($uni >> 12) & 0x0f;
+               $y = ($uni >> 6) & 0x3f;
+               $x = $uni & 0x3f;
+               return chr(0xe0 | $z).chr(0x80 | $y).chr(0x80 | $x);
+       }
+}
+
+function _sjistoutf8(&$str)
+{
+       global $mbemu_internals;
+       include_once(dirname(__FILE__).'/sjistouni.table');
+       $st = '';
+       $max = preg_match_all('/'.$mbemu_internals['regex'][2].'/', $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       for ($i = 0; $i < $max; ++$i) {
+               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·
+               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87
+                       $ucs2 = $mbemu_internals['sjistoucs2'][($num << 8) | $num2];
+                       $st .= _ucs2utf8($ucs2);
+               } elseif ($num > 0x80) {//\94¼\8ap\83J\83i
+                       $st .= _ucs2utf8(0xfec0 + $num);
+               } else {//\94¼\8ap\89p\90\94
+                       $st .= chr($num);
+               }
+       }
+       return $st;
+}
+
+function _utf8ucs2($st)
+{
+       $num = ord($st);
+       if (!($num & 0x80)) //1byte
+               return $num;
+       elseif (($num & 0xe0) == 0xc0) {//2bytes
+               $num2 = ord(substr($st, 1,1));
+               return (($num & 0x1f) << 6) | ($num2 & 0x3f);
+       } else  { //3bytes
+               $num2 = ord(substr($st, 1,1));
+               $num3 = ord(substr($st, 2,1));
+               return (($num & 0x0f) << 12) | (($num2 & 0x3f) << 6) | ($num3 & 0x3f);
+       }
+}
+
+function _utf8tosjis(&$str)
+{
+       global $mbemu_internals;
+       include_once(dirname(__FILE__).'/unitosjis.table');
+       $st = '';
+       $max = preg_match_all('/'.$mbemu_internals['regex'][4].'/', $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       for ($i = 0; $i < $max; ++$i) {
+               $num = _utf8ucs2($allchars[0][$i]); //ucs2\82Ì\92l\82ð\8eæ\82è\8fo\82·
+               if ($num < 0x80)
+                       $st .= chr($num);
+               elseif ((0xff61 <= $num) && ($num <= 0xff9f))
+                       $st .= chr($num - 0xfec0);
+               else {
+                       $sjis = $mbemu_internals['ucs2tosjis'][$num];
+                       $st .= chr($sjis >> 8) . chr($sjis & 0xff);
+               }
+       }
+       return $st;
+}
+
+function _euctoutf8(&$str)
+{
+       global $mbemu_internals;
+       include_once(dirname(__FILE__).'/sjistouni.table');
+       $st = '';
+       $max = preg_match_all('/'.$mbemu_internals['regex'][1].'/', $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       for ($i = 0; $i < $max; ++$i) {
+               $num = ord($allchars[0][$i]);  // \8ae\95\8e\9a\82Ì1\83o\83C\83g\96Ú\82ð\90\94\92l\82Æ\82µ\82Ä\8eæ\82è\8fo\82·
+               if ($num2 = ord($allchars[1][$i])) { // 2\83o\83C\83g\96Ú\82ª\82 \82é\8fê\8d\87
+                       if ($num & 1)
+                               $sjis = ($mbemu_internals['euctosjis_byte1'][$num] << 8) | $mbemu_internals['euctosjis_byte2'][0][$num2];
+                       else
+                               $sjis = ($mbemu_internals['euctosjis_byte1'][$num] << 8) | $mbemu_internals['euctosjis_byte2'][1][$num2];
+                       $st .= _ucs2utf8($mbemu_internals['sjistoucs2'][$sjis]);
+               } elseif ($num3 = ord($allchars[2][$i])) {
+                       $st .= _ucs2utf8(0xfec0 + $num3);
+               } else {//\94¼\8ap\89p\90\94
+                       $st .= chr($num);
+               }
+       }
+       return $st;
+}
+
+function _utf8toeuc(&$str)
+{
+       global $mbemu_internals;
+       include_once(dirname(__FILE__).'/unitosjis.table');
+       $st = '';
+       $max = preg_match_all('/'.$mbemu_internals['regex'][4].'/', $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       for ($i = 0; $i < $max; ++$i) {
+               $num = _utf8ucs2($allchars[0][$i]); //ucs2\82Ì\92l\82ð\8eæ\82è\8fo\82·
+               if ($num < 0x80)
+                       $st .= chr($num);
+               elseif ((0xff61 <= $num) && ($num <= 0xff9f)) //\94¼\8ap\83J\83i
+                       $st .= chr(0x8e) . chr($num - 0xfec0);
+               else {
+                       $sjis = $mbemu_internals['ucs2tosjis'][$num];
+                       $upper = $sjis >> 8;
+                       $lower = $sjis & 0xff;
+                       $shift = $mbemu_internals['sjistoeuc_byte1_shift'][$lower];
+                       $st .= chr($mbemu_internals['sjistoeuc_byte1'][$upper] + $shift)
+                                  .chr($mbemu_internals['sjistoeuc_byte2'][$shift][$lower]);
+               }
+       }
+       return $st;
+}
+
+function _utf8toutf16(&$str)
+{
+       global $mbemu_internals;
+       $st = '';
+       $max = preg_match_all('/'.$mbemu_internals['regex'][4].'/', $str, $allchars);  // \95\8e\9a\82Ì\94z\97ñ\82É\95ª\89ð
+       for ($i = 0; $i < $max; ++$i) {
+               $num = _utf8ucs2($allchars[0][$i]); //ucs2\82Ì\92l\82ð\8eæ\82è\8fo\82·
+               $st .= chr(($num >> 8) & 0xff).chr($num & 0xff);
+       }
+       return $st;
+}
+
+function _utf16toutf8(&$str)
+{
+       global $mbemu_internals;
+       $st = '';
+       $ar = unpack("n*", $str);
+       foreach($ar as $char) {
+               $st .= _ucs2utf8($char);
+       }
+       return $st;
+}
+
+       
+function sub_zenhan_EUC(&$str, $match) {
+       global $mbemu_internals;
+
+       $match = $match . "|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\91S\8ap\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(array_search($chars[1][$i], $mbemu_internals['alphanumeric_convert']));
+               //      $str .= chr($num & 0x7F);
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function sub_hanzen_EUC(&$str, $match) {
+       global $mbemu_internals;
+
+       $match = $match . "|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\94¼\8ap\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= $mbemu_internals['alphanumeric_convert'][$num];
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function alpha_zenhan_EUC(&$str) {
+       sub_zenhan_EUC($str, "(\xA3[\xC1-\xFA])");
+}
+
+function alpha_hanzen_EUC(&$str) {
+       sub_hanzen_EUC($str, "([\x41-\x5A,\x61-\x7A])");
+}
+
+
+function num_zenhan_EUC(&$str) {
+       sub_zenhan_EUC($str, "(\xA3[\xB0-\xB9])");
+}
+
+function num_hanzen_EUC(&$str) {
+       sub_hanzen_EUC($str, "([\x30-\x39])");
+}
+
+function alphanum_zenhan_EUC(&$str) {
+       sub_zenhan_EUC($str, "(\xa1[\xa4,\xa5,\xa7-\xaa,\xb0,\xb2,\xbf,\xc3,\xca,\xcb,\xce-\xd1,\xdc,\xdd,\xe1,\xe3,\xe4,\xf0,\xf3-\xf7]|\xA3[\xC1-\xFA]|\xA3[\xB0-\xB9])");
+}
+
+function alphanum_hanzen_EUC(&$str) {
+       sub_hanzen_EUC($str, "([\\\x21,\\\x23-\\\x26,\\\x28-\\\x5B,\\\x5D-\\\x7D])");
+}
+
+
+function space_zenhan_EUC(&$str) {
+       sub_zenhan_EUC($str, "(\xA1\xA1)");
+}
+
+function space_hanzen_EUC(&$str) {
+       sub_hanzen_EUC($str, "(\x20)");
+}
+
+function katakana_zenhan_EUC(&$str) {
+       global $mbemu_internals;
+
+       $match = "\xa5([\xa1-\xf4])|\xa1([\xa2,\xa3,\xa6,\xab,\xac,\xbc,\xd6,\xd7])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\83J\83i\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0x8e) . $mbemu_internals['kana_zenhan_convert'][$num];
+               elseif ($num = ord($chars[2][$i])) //\94¼\8ap\95Ï\8a·\89Â\94\\82È\93Á\8eê\95\8e\9a\82É\83}\83b\83`\82µ\82½\8fê\8d\87
+                       $str .= chr(0x8e) . $mbemu_internals['special_zenhan_convert'][$num];
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function hiragana_zenhan_EUC(&$str) {
+       global $mbemu_internals;
+
+       $match = "\xa4([\xa1-\xf4])|\xa1([\xa2,\xa3,\xa6,\xab,\xac,\xbc,\xd6,\xd7])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\82©\82È\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0x8e) . $mbemu_internals['kana_zenhan_convert'][$num];
+               elseif ($num = ord($chars[2][$i])) //\94¼\8ap\95Ï\8a·\89Â\94\\82È\93Á\8eê\95\8e\9a\82É\83}\83b\83`\82µ\82½\8fê\8d\87
+                       $str .= chr(0x8e) . $mbemu_internals['special_zenhan_convert'][$num];
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function katakana_hanzen1_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82·\82é\95û
+       global $mbemu_internals;
+
+       $match = "\x8e((?:[\xb3,\xb6-\xc4,\xca-\xce]\x8e\xde)|(?:[\xca-\xce]\x8e\xdf))|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";
+               //\91÷\93_\82â\94¼\91÷\93_\82Í\88ê\8f\8f\82É\83}\83b\83`\83\93\83O
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($chars[1][$i]) //\91÷\89¹\81C\94¼\91÷\89¹\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0xa5).chr(array_search($chars[1][$i], $mbemu_internals['kana_zenhan_convert']));
+               elseif ($chars[2][$i]) //\82»\82Ì\91¼\82Ì\94¼\8ap\83J\83i\82É\83}\83b\83`
+                       if ($num = array_search($chars[2][$i], $mbemu_internals['kana_zenhan_convert']))
+                               $str .= chr(0xa5).chr($num);
+                       else
+                               $str .= chr(0xa1).chr(array_search($chars[2][$i], $mbemu_internals['special_zenhan_convert']));
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function hiragana_hanzen1_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82·\82é\95û
+       global $mbemu_internals;
+
+       $match = "\x8e((?:[\xb6-\xc4,\xca-\xce]\x8e\xde)|(?:[\xca-\xce]\x8e\xdf))|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";
+               //\91÷\93_\82â\94¼\91÷\93_\82Í\88ê\8f\8f\82É\83}\83b\83`\83\93\83O
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($chars[1][$i]) //\91÷\89¹\81C\94¼\91÷\89¹\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0xa4).chr(array_search($chars[1][$i], $mbemu_internals['kana_zenhan_convert']));
+               elseif ($chars[2][$i]) //\82»\82Ì\91¼\82Ì\94¼\8ap\83J\83i\82É\83}\83b\83`
+                       if ($num = array_search($chars[2][$i], $mbemu_internals['kana_zenhan_convert']))
+                               $str .= chr(0xa4).chr($num);
+                       else
+                               $str .= chr(0xa1).chr(array_search($chars[2][$i], $mbemu_internals['special_zenhan_convert']));
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function katakana_hanzen2_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82µ\82È\82¢\95û
+       global $mbemu_internals;
+
+       $match = "[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($chars[1][$i]) //\94¼\8ap\83J\83i\82É\83}\83b\83`
+                       if ($num = array_search($chars[1][$i], $mbemu_internals['kana_zenhan_convert']))
+                               $str .= chr(0xa5).chr($num);
+                       else
+                               $str .= chr(0xa1).chr(array_search($chars[1][$i], $mbemu_internals['special_zenhan_convert']));
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function hiragana_hanzen2_EUC(&$str) { //\91÷\93_\82Ì\93\9d\8d\87\82ð\82µ\82È\82¢\95û
+       global $mbemu_internals;
+
+       $match = "[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e([\xa1-\xdf])";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($chars[1][$i]) //\94¼\8ap\83J\83i\82É\83}\83b\83`
+                       if ($num = array_search($chars[1][$i], $mbemu_internals['kana_zenhan_convert']))
+                               $str .= chr(0xa4).chr($num);
+                       else
+                               $str .= chr(0xa1).chr(array_search($chars[1][$i], $mbemu_internals['special_zenhan_convert']));
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function katakana_hiragana_EUC(&$str) {
+
+       $match = "\xa5([\xa1-\xf3])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\83J\83i\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0xa4) . chr($num);
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function hiragana_katakana_EUC(&$str) {
+
+       $match = "\xa4([\xa1-\xf4])|[\xa1-\xfe][\xa1-\xfe]|[\x01-\x7f]|\x8e[\xa0-\xdf]";
+       $max = preg_match_all("/$match/", $str, $chars);
+       $str = '';
+       for ($i = 0; $i < $max; ++$i) {
+               if ($num = ord($chars[1][$i])) //\83J\83i\82É\83}\83b\83`\83\93\83O\82µ\82½\8fê\8d\87
+                       $str .= chr(0xa5) . chr($num);
+               else
+                       $str .= $chars[0][$i];
+       }
+}
+
+function mb_convert_kana( $str, $option='KV', $encoding = '')
+{
+       if (!$encoding) $encoding = mb_internal_encoding();
+       $str = mb_convert_encoding($str, 'EUC-JP', $encoding);
+
+       if (strstr($option, "r")) alpha_zenhan_EUC($str);
+       if (strstr($option, "R")) alpha_hanzen_EUC($str);
+       if (strstr($option, "n")) num_zenhan_EUC($str);
+       if (strstr($option, "N")) num_hanzen_EUC($str);
+       if (strstr($option, "a")) alphanum_zenhan_EUC($str);
+       if (strstr($option, "A")) alphanum_hanzen_EUC($str);
+       if (strstr($option, "s")) space_zenhan_EUC($str);
+       if (strstr($option, "S")) space_hanzen_EUC($str);
+       if (strstr($option, "k")) katakana_zenhan_EUC($str);
+       if (strstr($option, "K")) {
+               if (strstr($option, "V"))
+                       katakana_hanzen1_EUC($str);
+               else
+                       katakana_hanzen2_EUC($str);
+       }
+       if (strstr($option, "H")) {
+               if (strstr($option, "V"))
+                       hiragana_hanzen1_EUC($str);
+               else
+                       hiragana_hanzen2_EUC($str);
+       }
+       if (strstr($option, "h")) hiragana_zenhan_EUC($str);
+       if (strstr($option, "c")) katakana_hiragana_EUC($str);
+       if (strstr($option, "C")) hiragana_katakana_EUC($str);
+
+       $str = mb_convert_encoding($str, $encoding, 'EUC-JP');
+       return $str;
+}
+
+// if mb_language is uni this function send mail using UTF-8/Base64
+// if English or en this function send mail using ISO-8859-1/quoted printable
+// if Japanese this function send mail using ISO-2022-JP
+function mb_send_mail($to, $subject, $message , $additional_headers='', $additional_parameter='')
+{
+       switch (mb_language()) {
+               case 'jp' :
+               case 'ja' :
+               case 'Japanese' :
+                       if (!_check_encoding($subject, 3)) //if not JIS encoded
+                               $subject =mb_encode_mimeheader($subject);
+                       else {
+                               $tmp = mb_internal_encoding();
+                               mb_internal_encoding('iso-2022-jp');
+                               $subject =mb_encode_mimeheader($subject);
+                               mb_internal_encoding($tmp);
+                       }
+                       if (!_check_encoding($message, 3))
+                               $message = mb_convert_encoding($message, "iso-2022-jp", mb_internal_encoding());
+                       $additional_headers .= 
+                       "\r\nMime-Version: 1.0\r\nContent-Type: text/plain; charset=ISO-2022-JP\r\nContent-Transfer-Encoding: 7bit";
+                       mail($to, $subject, $message, $additional_headers, $additional_parameter);
+                       break;
+               case 'en' :
+               case 'English' :
+                       $subject =mb_encode_mimeheader($subject, mb_internal_encoding(), 'Q');
+                       $message = _sub_encode_base64($message, mb_internal_encoding(), 76 , "\r\n");
+                       $additional_headers .= 
+                       "\r\nMime-Version: 1.0\r\nContent-Type: text/plain; charset=".
+                       mb_preferred_mime_name(mb_internal_encoding()).
+                       "\r\nContent-Transfer-Encoding: BASE64";
+                       mail($to, $subject, $message, $additional_headers, $additional_parameter); 
+                       break;
+               case 'uni' :
+                       $subject =mb_encode_mimeheader($subject, mb_internal_encoding(), 'B');
+                       $message = _sub_encode_base64($message, mb_internal_encoding(), 76 , "\r\n");
+                       $additional_headers .= 
+                       "\r\nMime-Version: 1.0\r\nContent-Type: text/plain; charset=".
+                       mb_preferred_mime_name(mb_internal_encoding()).
+                       "\r\nContent-Transfer-Encoding: BASE64";
+                       mail($to, $subject, $message, $additional_headers, $additional_parameter); 
+                       break;
+       }
+       
+}
+
+
+
+function _check_encoding($str, $encoding_number)
+{
+       global $mbemu_internals;
+       return (preg_match('/^('.$mbemu_internals['regex'][$encoding_number].')+$/', $str) == 1);
+}
+
+function mb_detect_encoding( $str , $encoding_list = '')
+{
+       global $mbemu_internals;
+
+       if ($encoding_list == '') 
+                       $encoding_list = mb_detect_order();
+       if (!is_array($encoding_list)) {
+               $encoding_list = strtoupper($encoding_list);
+               if ($encoding_list == 'AUTO') {
+                       $encoding_list = mb_detect_order();
+               } else {
+                       $encoding_list = split(', *', $encoding_list);
+               }
+       }
+       foreach($encoding_list as $encode) {
+               if (_check_encoding($str, $mbemu_internals['encoding'][$encode]))
+                       return $encode;
+       }
+       return $encode;
+}
+
+function mb_strlen ( $str , $encoding='')
+{
+       global $mbemu_internals;
+
+       $encoding = mb_detect_encoding($str, $encoding);
+
+       switch ($e = $mbemu_internals['encoding'][$encoding]) {
+               case 1 : //euc-jp
+               case 2 : //shift-jis
+               case 4 : //utf-8
+                       return preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $str, $arr);
+               case 5 : //utf-16
+                       return strlen($str) >> 1;
+               case 0 : //ascii
+               case 6 : //iso8859-1
+                       return strlen($str);
+               case 3 : //jis
+                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');
+                       return preg_match_all('/'.$mbemu_internals['regex'][2].'/', $str, $arr);
+       }
+}
+
+function mb_strwidth( $str, $encoding='')
+{
+       global $mbemu_internals;
+
+       $encoding = mb_detect_encoding($str, $encoding);
+       switch ($e = $mbemu_internals['encoding'][$encoding]) {
+               case 4 : //utf-8
+                       $max = $len = preg_match_all('/'.$mbemu_internals['regex'][4].'/', $str, $arr);
+                       for ($i=0; $i < $max; ++$i) {
+                               $ucs2 = _utf8ucs2($arr[0][$i]);
+                               if (((0x2000 <= $ucs2) && ($ucs2 <= 0xff60)) || (0xffa0 <= $ucs2))
+                                       ++$len;
+                       }
+                       return $len;
+               case 1 : //euc-jp
+               case 2 : //shift-jis
+                       $max = $len = preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $str, $arr);
+                       for ($i=0; $i < $max; ++$i)
+                               if ($arr[1][$i]) ++$len;
+                       return $len;
+               case 5 : //utf-16
+                       $max = $len = preg_match_all('/'.$mbemu_internals['regex'][5].'/', $str, $arr);
+                       for ($i=0; $i < $max; ++$i) {
+                               $ucs2 = (ord($arr[0][$i]) << 8) | ord(substr($arr[0][$i],1,1));
+                               if (((0x2000 <= $ucs2) && ($ucs2 <= 0xff60)) || (0xffa0 <= $ucs2))
+                                       ++$len;
+                       }
+                       return $len;
+               case 0 : //ascii
+               case 6 : //iso8859-1
+                       return strlen($str);
+               case 3 : //jis
+                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');
+                       $max = $len = preg_match_all('/'.$mbemu_internals['regex'][2].'/', $str, $arr);
+                       for ($i=0; $i < $max; ++$i)
+                               if ($arr[1][$i]) ++$len;
+                       return $len;
+       }
+}
+
+function mb_strimwidth( $str, $start, $width, $trimmarker , $encoding = '')
+{
+       global $mbemu_internals;
+
+       $encoding = mb_detect_encoding($str, $encoding);
+       $str = mb_substr($str, $start, 'notnumber', $encoding);
+       if (($len = mb_strwidth($str,$encoding)) <= $width)
+               return $str;
+       $trimwidth = mb_strwidth($trimmarker,$encoding);
+       $width -= $trimwidth;
+       if ($width <= 0) return $trimmarker;
+       
+       switch ($e = $mbemu_internals['encoding'][$encoding]) {
+               case 0 : //ascii
+               case 6 : //iso8859-1
+                       return substr($str, 0, $width).$trimmarker;
+               case 4 : //utf-8
+                       preg_match_all('/'.$mbemu_internals['regex'][4].'/', $str, $arr);
+                       $i = 0;
+                       while(TRUE) {
+                               $ucs2 = _utf8ucs2($arr[0][$i]);
+                               if (((0x2000 <= $ucs2) && ($ucs2 <= 0xff60)) || (0xffa0 <= $ucs2))
+                                       $width -= 2;
+                               else
+                                       --$width;
+                               if ($width<0) break;
+                               ++$i;
+                       }
+                       $arr[0] = array_slice($arr[0], 0, $i);
+                       return implode("", $arr[0]).$trimmarker;
+               case 5 : //utf-16
+                       $arr = unpack("n*", $str);
+                       $i = 0;
+                       foreach($arr as $ucs2) {
+                               if (((0x2000 <= $ucs2) && ($ucs2 <= 0xff60)) || (0xffa0 <= $ucs2))
+                                       $width -= 2;
+                               else
+                                       --$width;
+                               if ($width<0) break;
+                               ++$i;
+                       }
+                       $arr[0] = array_slice($arr[0], 0, $i);
+                       return implode("", $arr[0]).$trimmarker;
+               case 1 : //euc-jp
+               case 2 : //shift-jis
+                       preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $str, $arr);
+                       $i = 0;
+                       while(TRUE) {
+                               if ($arr[1][$i])
+                                       $width -= 2;
+                               else
+                                       --$width;
+                               if ($width<0) break;
+                               ++$i;
+                       }
+                       $arr[0] = array_slice($arr[0], 0, $i);
+                       return implode("", $arr[0]).$trimmarker;
+               case 3 : //jis
+                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');
+                       $trimmarker = mb_convert_encoding($trimmarker, 'SJIS', 'JIS');
+                       preg_match_all('/'.$mbemu_internals['regex'][2].'/', $str, $arr);
+                       $i = 0;
+                       while(TRUE) {
+                               if ($arr[1][$i])
+                                       $width -= 2;
+                               else
+                                       --$width;
+                               if ($width<0) break;
+                               ++$i;
+                       }
+                       $arr[0] = array_slice($arr[0], 0, $i);
+                       return mb_convert_encoding(implode("", $arr[0]).$trimmarker,'JIS','SJIS');
+       }
+}
+
+
+function mb_substr ( $str, $start , $length='notnumber' , $encoding='')
+{
+       global $mbemu_internals;
+
+       $encoding = mb_detect_encoding($str, $encoding);
+
+       switch ($e = $mbemu_internals['encoding'][$encoding]) {
+               case 0 : //ascii
+               case 1 : //euc-jp
+               case 2 : //shift-jis
+               case 4 : //utf-8
+               case 5 : //utf-16
+               case 6 : //iso-8859-1
+                       preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $str, $arr);
+                       break;
+               case 3 : //jis
+                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');
+                       preg_match_all('/'.$mbemu_internals['regex'][2].'/', $str, $arr);
+       }
+       if (is_int($length))
+               $arr[0] = array_slice($arr[0], $start, $length);
+       else
+               $arr[0] = array_slice($arr[0], $start);
+       $str = implode("", $arr[0]);
+       if ($mbemu_internals['encoding'][$encoding] == 3)
+               $str = mb_convert_encoding($str, 'JIS', 'SJIS');
+       return $str;
+}
+
+function _sub_strcut($arr, $start, $length) {
+       $max = count($arr[0]);
+       $s = ''; $counter = 0;
+       for ($i = 0; $i < $max; ++$i) {
+               $counter += strlen($arr[0][$i]);
+               if ($counter > $start) {
+                       if ($length == 0) {
+                               for ($j = $i; $j < $max; ++$j)
+                                       $s .= $arr[0][$j];
+                               return $s;
+                       }
+                       for ($j = $i, $len = 0; $j < $max; ++$j) {
+                               $len += strlen($arr[0][$j]);
+                               if ($len <= $length)
+                                       $s .= $arr[0][$j];
+                       }
+                       return $s;
+               }
+       }
+       return $s;
+}
+
+
+function mb_strcut ( $str, $start , $length=0 , $encoding = '')
+{
+       global $mbemu_internals;
+       
+       $encoding = mb_detect_encoding($str, $encoding);
+
+       switch ($e = $mbemu_internals['encoding'][$encoding]) {
+               case 0 : //ascii
+               case 1 : //euc-jp
+               case 2 : //shift-jis
+               case 4 : //utf-8
+               case 5 : //utf-16
+               case 6 : //iso-8859-1
+                       preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $str, $arr);
+                       return _sub_strcut($arr, $start, $length);
+               case 3 : //jis
+                       $str = mb_convert_encoding($str, 'SJIS', 'JIS');
+                       preg_match_all('/'.$mbemu_internals['regex'][2].'/', $str, $arr);
+                       $sub = _sub_strcut($arr, $start, $length);
+                       return mb_convert_encoding($sub, 'JIS', 'SJIS');
+       }
+}
+
+function _sub_strrpos($ar_haystack, $ar_needle)
+{
+       $max_h = count($ar_haystack) - 1;
+       $max_n = count($ar_needle) - 1;
+       for ($i = $max_h; $i >= $max_n; --$i) {
+               if ($ar_haystack[$i] == $ar_needle[$max_n]) {
+                       $match = TRUE;
+                       for ($j = 1; $j <= $max_n; ++$j)
+                               if ($ar_haystack[$i-$j] != $ar_needle[$max_n-$j]) {
+                                       $match = FALSE;
+                                       break;
+                               }
+                       if ($match) return $i - $max_n;
+               }
+       }
+       return FALSE;
+}
+
+function mb_strrpos ( $haystack, $needle , $encoding = '')
+{
+       
+       global $mbemu_internals;
+       
+       $encoding = mb_detect_encoding($haystack, $encoding);
+
+       switch ($e = $mbemu_internals['encoding'][$encoding]) {
+               case 0 : //ascii
+               case 1 : //euc-jp
+               case 2 : //shift-jis
+               case 4 : //utf-8
+               case 5 : //utf-16
+               case 6 : //iso-8859-1
+                       preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $haystack, $ar_h);
+                       preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $needle, $ar_n);
+                       return _sub_strrpos($ar_h[0], $ar_n[0]);
+               case 3 : //jis
+                       $haystack = mb_convert_encoding($haystack, 'SJIS', 'JIS');
+                       $needle = mb_convert_encoding($needle, 'SJIS', 'JIS');
+                       preg_match_all('/'.$mbemu_internals['regex'][2].'/', $haystack, $ar_h);
+                       preg_match_all('/'.$mbemu_internals['regex'][2].'/', $needle, $ar_n);
+                       return _sub_strrpos($ar_h[0], $ar_n[0]);
+       }
+}
+
+function _sub_strpos($ar_haystack, $ar_needle, $offset)
+{
+       $max_n = count($ar_needle) - 1;
+       $max_h = count($ar_haystack) - count($ar_needle);
+       for ($i = $offset; $i <= $max_h; ++$i) {
+               for ($j = 0; $j <= $max_n; ++$j) {
+                       $match = TRUE;
+                       if ($ar_haystack[$i+$j] != $ar_needle[$j]) {
+                               $match = FALSE;
+                               break;
+                       }
+               }
+               if ($match) return $i;
+       }
+       return FALSE;
+}
+
+function mb_strpos ( $haystack, $needle , $offset = 0, $encoding = '')
+{
+       
+       global $mbemu_internals;
+       
+       $encoding = mb_detect_encoding($haystack, $encoding);
+
+       switch ($e = $mbemu_internals['encoding'][$encoding]) {
+               case 0 : //ascii
+               case 1 : //euc-jp
+               case 2 : //shift-jis
+               case 4 : //utf-8
+               case 5 : //utf-16
+               case 6 : //iso-8859-1
+                       preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $haystack, $ar_h);
+                       preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $needle, $ar_n);
+                       return _sub_strpos($ar_h[0], $ar_n[0], $offset);
+               case 3 : //jis
+                       $haystack = mb_convert_encoding($haystack, 'SJIS', 'JIS');
+                       $needle = mb_convert_encoding($needle, 'SJIS', 'JIS');
+                       preg_match_all('/'.$mbemu_internals['regex'][2].'/', $haystack, $ar_h);
+                       preg_match_all('/'.$mbemu_internals['regex'][2].'/', $needle, $ar_n);
+                       return _sub_strpos($ar_h[0], $ar_n[0], $offset);
+       }
+}
+
+function _sub_substr_count($ar_haystack, $ar_needle)
+{
+       $matches = 0;
+       $max_n = count($ar_needle) - 1;
+       $max_h = count($ar_haystack) - count($ar_needle);
+       for ($i = 0; $i <= $max_h; ++$i) {
+               for ($j = 0; $j <= $max_n; ++$j) {
+                       $match = TRUE;
+                       if ($ar_haystack[$i+$j] != $ar_needle[$j]) {
+                               $match = FALSE;
+                               break;
+                       }
+               }
+               if ($match) ++$matches;
+       }
+       return $matches;
+}
+
+function mb_substr_count($haystack, $needle , $encoding = '')
+{
+       
+       global $mbemu_internals;
+       
+       $encoding = mb_detect_encoding($haystack, $encoding);
+
+       switch ($e = $mbemu_internals['encoding'][$encoding]) {
+               case 0 : //ascii
+               case 1 : //euc-jp
+               case 2 : //shift-jis
+               case 4 : //utf-8
+               case 5 : //utf-16
+               case 6 : //iso-8859-1
+                       preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $haystack, $ar_h);
+                       preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $needle, $ar_n);
+                       return _sub_substr_count($ar_h[0], $ar_n[0]);
+               case 3 : //jis
+                       $haystack = mb_convert_encoding($haystack, 'SJIS', 'JIS');
+                       $needle = mb_convert_encoding($needle, 'SJIS', 'JIS');
+                       preg_match_all('/'.$mbemu_internals['regex'][2].'/', $haystack, $ar_h);
+                       preg_match_all('/'.$mbemu_internals['regex'][2].'/', $needle, $ar_n);
+                       return _sub_substr_count($ar_h[0], $ar_n[0]);
+       }
+}
+
+
+/******************
+mb_convert_variables
+*******************/
+if (!$mbemu_internals['ini_file']['convert_variables_arrayonly']) {
+       function mb_convert_variables($to_encoding, $from_encoding, $s1, $s2='',$s3='',$s4='',$s5='',$s6='',$s7='', $s8='',$s9='', $s10='')
+       {
+               if (is_array($s1)) {
+                       $st = '';
+                       foreach($s1 as $s) $st .= $s;
+                       if (!($encode = mb_detect_encoding($st, $from_encoding)))
+                               return FALSE;
+                       reset($s1);
+                       while (list ($key, $val) = each ($s1)) {
+                               $s1[$key] = mb_convert_encoding($val, $to_encoding, $encode);
+                       }
+                       return $encode;
+               }
+           $st = $s1.$s2.$s3.$s4.$s5.$s6.$s7.$s8.$s9.$s10;
+           if (!($encode = mb_detect_encoding($st, $from_encoding)))
+               return FALSE;
+           $s1 = mb_convert_encoding($s1, $to_encoding, $encode);
+           $s2 = mb_convert_encoding($s2, $to_encoding, $encode);
+           $s3 = mb_convert_encoding($s3, $to_encoding, $encode);
+           $s4 = mb_convert_encoding($s4, $to_encoding, $encode);
+           $s5 = mb_convert_encoding($s5, $to_encoding, $encode);
+           $s6 = mb_convert_encoding($s6, $to_encoding, $encode);
+           $s7 = mb_convert_encoding($s7, $to_encoding, $encode);
+           $s8 = mb_convert_encoding($s8, $to_encoding, $encode);
+           $s9 = mb_convert_encoding($s9, $to_encoding, $encode);
+           $s10 = mb_convert_encoding($s10, $to_encoding, $encode);
+           return $encode;
+       }
+} else {
+       function mb_convert_variables($to_encoding, $from_encoding, &$arr)
+       {
+               $st = '';
+               foreach($arr as $s) $st .= $s;
+               if (!($encode = mb_detect_encoding($st, $from_encoding)))
+                       return FALSE;
+               reset($arr);
+               while (list ($key, $val) = each ($arr)) {
+                       $arr[$key] = mb_convert_encoding($val, $to_encoding, $encode);
+               }
+               return $encode;
+       }
+}
+
+function mb_preferred_mime_name ($encoding)
+{
+       global $mbemu_internals;
+       
+       $encoding = strtoupper($encoding);
+       
+       switch ($mbemu_internals['encoding'][$encoding]) {
+               case 0 : //ascii
+                       return 'US-ASCII';
+               case 1 : //euc-jp
+                       return 'EUC-JP';
+               case 2 : //shift-jis
+                       return 'Shift_JIS';
+               case 3 : //jis
+                       return 'ISO-2022-JP';
+               case 4 : //utf-8
+                       return 'UTF-8';
+               case 5 : 
+                       return 'UTF-16';
+               case 6 :
+                       return 'ISO-8859-1';
+       }
+}
+
+function mb_decode_mimeheader($str)
+{
+       $lines = preg_split("/(\r\n|\r|\n)( *)/", $str);
+       $s = '';
+       foreach ($lines as $line) {
+               if ($line != "") {
+                       $line = preg_replace("/<[\w\-+\.]+\@[\w\-+\.]+>/","", $line); //\83\81\81[\83\8b\81E\83A\83h\83\8c\83X\95\94\82ð\8fÁ\82·
+                       $matches = preg_split("/=\?([^?]+)\?(B|Q)\?([^?]+)\?=/", $line, -1, PREG_SPLIT_DELIM_CAPTURE);
+                       for ($i = 0; $i < count($matches)-1; $i+=4) {
+                               if (!preg_match("/^[ \t\r\n]*$/", $matches[$i]))
+                                       $s .= $matches[$i];
+                               if ($matches[$i+2] == 'B')
+                                       $s .= mb_convert_encoding(base64_decode($matches[$i+3]), 
+                                                                                       mb_internal_encoding(), $matches[$i+1]);
+                               else
+                                       $s .= mb_convert_encoding(quoted_printable_decode($matches[$i+3]), 
+                                                                                       mb_internal_encoding(), $matches[$i+1]);
+                       }
+                       if (!preg_match("/^[ \t\r\n]*$/", $matches[$i]))
+                                       $s .= $matches[$i];
+               }
+       }
+       return $s;
+}
+
+function _sub_qponechar($str, &$len)
+{
+       $all = unpack("C*", $str);
+       $s = ''; $len = 0;
+       foreach($all as $char) {
+               if (((ord('A') <= $char) && ($char <= ord('Z'))) ||
+                       ((ord('a') <= $char) && ($char <= ord('z')))) {
+                       $s .= chr($char);
+                       ++$len;
+               } else {
+                       $s .= '='.sprintf("%2X",$char);
+                       $len += 3;
+               }
+       }
+       return $s;
+}
+
+function _sub_quoted_printable_encode($str, $encoding, $maxline, $linefeed)
+{
+       global $mbemu_internals;
+       switch ($e = $mbemu_internals['encoding'][$encoding]) {
+               case 0 : //ascii
+               case 1 : //euc-jp
+               case 2 : //shift-jis
+               case 4 : //utf-8
+                       $max = preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $str, $allchars);
+                       break;
+               case 3 : //jis
+                       $max = preg_match_all('/'.$mbemu_internals['regex'][3].'/', $str, $allchunks, PREG_SET_ORDER);  // \95\8e\9a\8eí\82²\82Æ\82Ì\94z\97ñ\82É\95ª\89ð
+                       $st = ''; // quoted printable\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ
+                       $len = $maxline;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94
+                       $needterminate = FALSE; //\8dÅ\8cã\82É\83G\83X\83P\81[\83v\83V\81[\83P\83\93\83X\82ª\95K\97v\82©\82Ç\82¤\82©
+                       for ($i = 0; $i < $max; ++$i) {
+                               if (ord($allchunks[$i][1])) { //\89p\90\94\82É\83}\83b\83`
+                                       if ($needterminate) {
+                                               $st .= '=1B=28B';
+                                               $len -= 7;
+                                       }
+                                       $tmparr = unpack("C*", $allchunks[$i][1]);
+                                       foreach ($tmparr as $char) {
+                                               $tmp = _sub_qponechar(chr($char), $l);
+                                               if ($len < $l) {
+                                                       $st .= $linefeed;
+                                                       $len = $maxline;
+                                               }
+                                               $st .= $tmp;
+                                               $len -= $l;
+                                       } 
+                                       $needterminate = FALSE;
+                               } elseif (ord($allchunks[$i][2])) { //\8a¿\8e\9a\82É\83}\83b\83`
+                                       $maxchars = preg_match_all("/../",substr($allchunks[$i][0], 3),$allchars);
+                                       $tmp = _sub_qponechar($allchars[0][0], $l);
+                                       if ($len < 14 + $l) {
+                                               if ($needterminate)
+                                                       $st .= '=1B=28B';
+                                               $st .= $linefeed;
+                                               $len = $maxline;
+                                       }
+                                       $st .= '=1B=24B';
+                                       $len -= 7;
+                                       for ($j = 0; $j < $maxchars; ++$j) {
+                                               $tmp = _sub_qponechar($allchars[0][$j], $l);
+                                               if ($len < $l + 7) {
+                                                       $st .= '=1B=28B'.$linefeed.'=1B=24B';
+                                                       $len = $maxline-7;
+                                               }
+                                               $st .= $tmp;
+                                               $len -= $l;
+                                       }
+                                       $needterminate = TRUE;
+                                       
+                               } elseif (ord($allchunks[$i][3])) { //\94¼\8ap\83J\83i\82É\83}\83b\83`
+                                       $max = preg_match_all("/./",$allchunks[$i][3],$allchars);
+                                       $tmp = _sub_qponechar($allchars[0][0], $l);
+                                       if ($len < 14 + $l) {
+                                               if ($needterminate)
+                                                       $st .= '=1B=28B';
+                                               $st .= $linefeed;
+                                               $len = $maxline;
+                                       }
+                                       $st .= '=1B=28I';
+                                       $len -= 7;
+                                       for ($j == 0; $j < $max; ++$j) {
+                                               $tmp = _sub_qponechar($allchars[0][$j], $l);
+                                               if ($len < $l + 7) {
+                                                       $st .= '=1B=28B'.$linefeed.'=1B=28I';
+                                                       $len = $maxline-7;
+                                               }
+                                               $st .= $tmp;
+                                               $len -= $l;
+                                       }
+                                       $needterminate = TRUE;
+                               }
+                       }
+                       if ($needterminate) $st .= '=1B=28B';
+                       $st .= $linefeed;
+                       return $st;
+       }
+       $st = ''; // quoted printable\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ
+       $len = $maxline;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94
+       for ($i = 0; $i < $max; ++$i) {
+               $tmp = _sub_qponechar($allchars[0][$i], $l);
+               if ($l > $len) {
+                       $st .= $linefeed;
+                       $len = $maxline;
+               }
+               $st .= $tmp;
+               $len -= $l;
+       }
+       $st .= $linefeed;
+       return $st;
+}
+
+function _sub_encode_base64($str, $encoding, $maxline , $linefeed)
+{
+       global $mbemu_internals;
+       switch ($e = $mbemu_internals['encoding'][$encoding]) {
+               case 0 : //ascii
+               case 6 : //iso-8859-1
+                       return chunk_split( base64_encode($str) , $maxline, $linefeed);
+               case 1 : //euc-jp
+               case 2 : //shift-jis
+               case 4 : //utf-8
+               case 5 : //utf-16
+                       $max = preg_match_all('/'.$mbemu_internals['regex'][$e].'/', $str, $allchars);
+                       break;
+               case 3 : //jis
+                       $max = preg_match_all('/'.$mbemu_internals['regex'][3].'/', $str, $allchunks);  // \95\8e\9a\8eí\82²\82Æ\82Ì\94z\97ñ\82É\95ª\89ð
+                       $st = ''; // BASE64\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ
+                       $maxbytes = floor($maxline * 3 / 4);  //1\8ds\82É\95Ï\8a·\89Â\94\\82È\83o\83C\83g\90\94
+                       $len = $maxbytes;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94
+                       $line = '';  //1\8ds\95ª\82Ì\95Ï\8a·\91O\82Ì\95\8e\9a\97ñ
+                       $needterminate = FALSE; //\8dÅ\8cã\82É\83G\83X\83P\81[\83v\83V\81[\83P\83\93\83X\82ª\95K\97v\82©\82Ç\82¤\82©
+                       for ($i = 0; $i < $max; ++$i) {
+                               if (ord($allchunks[1][$i])) { //\89p\90\94\82É\83}\83b\83`
+                                       if ($needterminate) {
+                                               $line .= chr(0x1B).'(B';
+                                               $len -= 3;
+                                       }
+                                       $tmpstr = $allchunks[1][$i];  //\92Ç\89Á\82·\82é\95\8e\9a\97ñ
+                                       $l = strlen($tmpstr);  //\92Ç\89Á\82·\82é\95\8e\9a\97ñ\82Ì\92·\82³
+                                       while ($l > $len) {
+                                               $line .= substr($tmpstr, 0, $len);
+                                               $st .= base64_encode($line).$linefeed;
+                                               $l -= $len;
+                                               $tmpstr = substr($tmpstr, $len);
+                                               $len = $maxbytes;
+                                               $line = '';
+                                       } 
+                                       $line .= $tmpstr;
+                                       $len -= $l;
+                                       $needterminate = FALSE;
+                               } elseif (ord($allchunks[2][$i])) { //\8a¿\8e\9a\82É\83}\83b\83`
+                                       $tmpstr = substr($allchunks[0][$i], 3);
+                                       if ($len < 8) { //\95\8e\9a\82ð\92Ç\89Á\82·\82é\82Ì\82É\8dÅ\92á8\83o\83C\83g\95K\97v\82È\82Ì\82Å
+                                               if ($needterminate)
+                                                       $line .= chr(0x1B).'(B';
+                                               $st .= base64_encode($line).$linefeed;
+                                               $len = $maxbytes;
+                                               $line = '';
+                                       }
+                                       $l = strlen($tmpstr);
+                                       $line .= chr(0x1B).'$B';
+                                       $len -= 3; 
+                                       while ($l > $len-3) {
+                                               $add = floor(($len-3) / 2) * 2;
+                                               if ($add == 0) break;
+                                               $line .= substr($tmpstr, 0, $add).chr(0x1B).'(B';
+                                               $st .= base64_encode($line).$linefeed;
+                                               $l -= $add;
+                                               $tmpstr = substr($tmpstr, $add);
+                                               $len = $maxbytes-3;
+                                               $line = chr(0x1B).'$B';
+                                       } 
+                                       $line .= $tmpstr;
+                                       $len -= $l;
+                                       $needterminate = TRUE;
+                                       
+                               } elseif (ord($allchunks[3][$i])) { //\94¼\8ap\83J\83i\82É\83}\83b\83`
+                                       $tmpstr = $allchunks[3][$i];
+                                       if ($len < 7) { //\95\8e\9a\82ð\92Ç\89Á\82·\82é\82Ì\82É\8dÅ\92á7\83o\83C\83g\95K\97v\82È\82Ì\82Å
+                                               if ($needterminate)
+                                                       $line .= chr(0x1B).'(B';
+                                               $st .= base64_encode($line).$linefeed;
+                                               $len = $maxbytes;
+                                               $line = '';
+                                       }
+                                       $l = strlen($tmpstr);
+                                       $line .= chr(0x1B).'(I';
+                                       $len -= 3; 
+                                       while ($l > $len-3) {
+                                               $line .= substr($tmpstr, 0, $len-3).chr(0x1B).'(B';
+                                               $st .= base64_encode($line).$linefeed;
+                                               $l -= $len;
+                                               $tmpstr = substr($tmpstr, $len-3);
+                                               $len = $maxbytes-3;
+                                               $line = chr(0x1B).'(I';
+                                       } 
+                                       $line .= $tmpstr;
+                                       $len -= $l;
+                                       $needterminate = TRUE;
+                               }
+                       }
+                       if ($needterminate) $line .= chr(0x1B).'(B';
+                       $st .= base64_encode($line).$linefeed;
+                       return $st;
+       }
+       $st = ''; // BASE64\95Ï\8a·\8cã\82Ì\95\8e\9a\97ñ
+       $maxbytes = floor($maxline * 3 / 4);  //1\8ds\82É\95Ï\8a·\89Â\94\\82È\83o\83C\83g\90\94
+       $len = $maxbytes;  // \82»\82Ì\8ds\82É\92Ç\89Á\89Â\94\\82È\83o\83C\83g\90\94
+       $line = '';  //1\8ds\95ª\82Ì\95Ï\8a·\91O\82Ì\95\8e\9a\97ñ
+       for ($i = 0; $i < $max; ++$i) {
+               $l = strlen($allchars[0][$i]);
+               if ($l > $len) {
+                       $st .= base64_encode($line).$linefeed;
+                       $len = $maxbytes;
+                       $line = '';
+               }
+               $line .= $allchars[0][$i];
+               $len -= $l;
+       }
+       $st .= base64_encode($line).$linefeed;
+       return $st;
+}
+
+function mb_encode_mimeheader( $str, $encoding = "ISO-2022-JP", $transfer_encoding = "B", $linefeed = "\r\n")
+{
+       global $mbemu_internals;
+       if ($transfer_encoding == "b") $transfer_encoding = "B";
+       if ($transfer_encoding <> "B") $transfer_encoding = "Q";
+       $encoding = strtoupper($encoding);
+       
+       $head = '=?' . mb_preferred_mime_name ($encoding) . '?'.$transfer_encoding.'?';
+       $str = mb_convert_encoding($str, $encoding, mb_internal_encoding());
+       $length = 76 - strlen($head) - 4;
+       if ($transfer_encoding == "B") {
+        $str = _sub_encode_base64( $str , $encoding, $length, $linefeed);
+       } else {
+               $str = _sub_quoted_printable_encode($str, $encoding, $length, $linefeed);
+       }
+       $ar = explode($linefeed, $str);
+       $s = '';
+       foreach ($ar as $element) {
+               if ($element <> '')
+                       $s .= $head . $element . '?=' .$linefeed;
+       }
+       return $s;
+}
+
+function mb_http_input($type = '')
+{
+       return FALSE;
+}
+
+function mb_http_output($encoding = '')
+{
+       global $mbemu_internals;
+       
+       if ($encoding == '') return $mbemu_internals['ini_file']['http_output'];
+       if (strtolower($encoding) == 'pass') {
+               $mbemu_internals['ini_file']['http_output'] = 'pass';
+               return TRUE;
+       }
+       $mbemu_internals['ini_file']['http_output'] = mb_preferred_mime_name($encoding);
+       return TRUE;
+}
+
+
+function mb_output_handler ( $buffer, $status='')
+{
+       global $mbemu_internals;
+       if ($mbemu_internals['ini_file']['http_output'] == 'pass')
+               return $buffer;
+       return mb_convert_encoding($buffer, $mbemu_internals['ini_file']['http_output'], mb_internal_encoding());
+}
+
+
+function mb_encode_numericentity($str, $convmap, $encoding="")
+{
+       if (!$encoding) $encoding = mb_internal_encoding();
+       $str = mb_convert_encoding($str, "utf-16", $encoding);
+       $ar = unpack("n*", $str);
+       $s = "";
+       foreach($ar as $char) {
+               $max = count($convmap);
+               for ($i = 0; $i < $max; $i += 4) {
+                       if (($convmap[$i] <= $char) && ($char <= $convmap[$i+1])) {
+                               $char += $convmap[$i+2];
+                               $char &= $convmap[$i+3];
+                               $s .= sprintf("&#%u;", $char);
+                               break;
+                       }
+               }
+               if ($i >= $max) $s .= pack("n*", $char);
+       }
+       return $s;
+}
+
+function mb_decode_numericentity ($str, $convmap, $encoding="")
+{
+       if (!$encoding) $encoding = mb_internal_encoding();
+       $ar = preg_split('/(&#[0-9]+;)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
+       $s = '';
+       $max = count($convmap);
+       foreach($ar as $chunk) {
+               if (preg_match('/&#([0-9]+);/', $chunk, $match)) {
+                       for ($i = 0; $i < $max; $i += 4) {
+                               $num = $match[1] - $convmap[$i+2];
+                               if (($convmap[$i] <= $num) && ($num <= $convmap[$i+1])) {
+                                       $ucs2 = pack('n*', $num);
+                                       $s .= mb_convert_encoding($ucs2, $encoding, 'UTF-16');
+                                       break;
+                               }
+                       }
+                       if ($i >= $max) $s .= $chunk;
+               } else {
+                       $s .= $chunk;
+               }
+       }
+       return $s;
+}
+
+function mb_strtoupper($str, $encoding='')
+{
+       global $mbemu_internals;
+
+       include_once(dirname(__FILE__).'/upper.table');
+       $encoding = mb_detect_encoding($str, $encoding);
+       $str = mb_convert_encoding($str, 'UTF-8', $encoding);
+
+       $max = preg_match_all('/'.$mbemu_internals['regex'][4].'/', $str, $allchars);  // make array of chars
+       $newst = '';
+       for ($i = 0; $i < $max; ++$i) {
+               $val = _utf8ucs2($allchars[0][$i]); //get ucs2 value
+               if ((0x61 <= $val) && ($val <= 0x7a)) {
+                       $val -= 0x20;
+                       $newst .= _ucs2utf8($val);
+               } elseif ($upper = $mbemu_internals['upperarray'][$val]) {
+                       $newst .= _ucs2utf8($upper);
+               } else {
+                       $newst .= $allchars[0][$i];
+               }
+       }
+       return mb_convert_encoding($newst, $encoding, 'UTF-8');
+}
+
+function mb_strtolower($str, $encoding='')
+{
+       global $mbemu_internals;
+
+       include_once(dirname(__FILE__).'/lower.table');
+       $encoding = mb_detect_encoding($str, $encoding);
+       $str = mb_convert_encoding($str, 'UTF-8', $encoding);
+
+       $max = preg_match_all('/'.$mbemu_internals['regex'][4].'/', $str, $allchars);  // make array of chars
+       $newst = '';
+       for ($i = 0; $i < $max; ++$i) {
+               $val = _utf8ucs2($allchars[0][$i]); //get ucs2 value
+               if ((0x41 <= $val) && ($val <= 0x5a)) {
+                       $val += 0x20;
+                       $newst .= _ucs2utf8($val);
+               } elseif ($lower = $mbemu_internals['lowerarray'][$val]) {
+                       $newst .= _ucs2utf8($lower);
+               } else {
+                       $newst .= $allchars[0][$i];
+               }
+       }
+       return mb_convert_encoding($newst, $encoding, 'UTF-8');
+}
+
+function mb_convert_case($str, $case, $encoding='')
+{
+       global $mbemu_internals;
+       
+       switch($case) {
+               case MB_CASE_UPPER :
+                       return mb_strtoupper($str, $encoding);
+               case MB_CASE_LOWER :
+                       return mb_strtolower($str, $encoding);
+               case MB_CASE_TITLE :
+                       include_once(dirname(__FILE__).'/upper.table');
+                       include_once(dirname(__FILE__).'/lower.table');
+                       $encoding = mb_detect_encoding($str, $encoding);
+                       $str = mb_convert_encoding($str, 'UTF-8', $encoding);
+
+                       $max = preg_match_all('/'.$mbemu_internals['regex'][4].'/', $str, $allchars);  // make array of chars
+                       $newst = '';
+                       $isalpha = FALSE;
+                       for ($i = 0; $i < $max; ++$i) {
+                               $val = _utf8ucs2($allchars[0][$i]); //get ucs2 value
+                               if ((0x41 <= $val) && ($val <= 0x5a)) {
+                                       if ($isalpha) {
+                                               $val += 0x20; // to lower;
+                                       } else {
+                                               $isalpha = TRUE;
+                                       }
+                                       $newst .= _ucs2utf8($val);
+                               } elseif ((0x61 <= $val) && ($val <= 0x7a)){
+                                       if (!$isalpha) {
+                                               $val -= 0x20; // to upper
+                                               $isalpha = TRUE;
+                                       }
+                                       $newst .= _ucs2utf8($val);
+                               } elseif ($upper = $mbemu_internals['upperarray'][$val]) { // this char is lower
+                                       if ($isalpha) {
+                                               $newst .= _ucs2utf8($val);
+                                       } else {
+                                               $isalpha = TRUE;
+                                               $newst .= _ucs2utf8($upper);
+                                       }
+                               } elseif ($lower = $mbemu_internals['lowerarray'][$val]) { // this char is upper
+                                       if ($isalpha) {
+                                               $newst .= _ucs2utf8($lower);
+                                       } else {
+                                               $isalpha = TRUE;
+                                               $newst .= _ucs2utf8($val);
+                                       }
+                               } else {
+                                       $isalpha = FALSE;
+                                       $newst .= $allchars[0][$i];
+                               }
+                       }
+                       return mb_convert_encoding($newst, $encoding, 'UTF-8');
+       }
+}
+
+
+function _print_str($str) {
+       $all = unpack("C*", $str);
+       $s = '';
+       foreach($all as $char) {
+               $s .= sprintf(" %2X",$char);
+       }
+       print $s."\n";
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/mb_emulator/sjistouni.table b/utf8/nucleus/libs/mb_emulator/sjistouni.table
new file mode 100755 (executable)
index 0000000..149ff6a
--- /dev/null
@@ -0,0 +1,9608 @@
+<?php
+$mbemu_internals['sjistoucs2'] = array (
+0x8140=>0x3000,
+0x8141=>0x3001,
+0x8142=>0x3002,
+0x8143=>0xFF0C,
+0x8144=>0xFF0E,
+0x8145=>0x30FB,
+0x8146=>0xFF1A,
+0x8147=>0xFF1B,
+0x8148=>0xFF1F,
+0x8149=>0xFF01,
+0x814A=>0x309B,
+0x814B=>0x309C,
+0x814C=>0x00B4,
+0x814D=>0xFF40,
+0x814E=>0x00A8,
+0x814F=>0xFF3E,
+0x8150=>0xFFE3,
+0x8151=>0xFF3F,
+0x8152=>0x30FD,
+0x8153=>0x30FE,
+0x8154=>0x309D,
+0x8155=>0x309E,
+0x8156=>0x3003,
+0x8157=>0x4EDD,
+0x8158=>0x3005,
+0x8159=>0x3006,
+0x815A=>0x3007,
+0x815B=>0x30FC,
+0x815C=>0x2015,
+0x815D=>0x2010,
+0x815E=>0xFF0F,
+0x815F=>0xFF3C,
+0x8160=>0xFF5E,
+0x8161=>0x2225,
+0x8162=>0xFF5C,
+0x8163=>0x2026,
+0x8164=>0x2025,
+0x8165=>0x2018,
+0x8166=>0x2019,
+0x8167=>0x201C,
+0x8168=>0x201D,
+0x8169=>0xFF08,
+0x816A=>0xFF09,
+0x816B=>0x3014,
+0x816C=>0x3015,
+0x816D=>0xFF3B,
+0x816E=>0xFF3D,
+0x816F=>0xFF5B,
+0x8170=>0xFF5D,
+0x8171=>0x3008,
+0x8172=>0x3009,
+0x8173=>0x300A,
+0x8174=>0x300B,
+0x8175=>0x300C,
+0x8176=>0x300D,
+0x8177=>0x300E,
+0x8178=>0x300F,
+0x8179=>0x3010,
+0x817A=>0x3011,
+0x817B=>0xFF0B,
+0x817C=>0xFF0D,
+0x817D=>0x00B1,
+0x817E=>0x00D7,
+0x8180=>0x00F7,
+0x8181=>0xFF1D,
+0x8182=>0x2260,
+0x8183=>0xFF1C,
+0x8184=>0xFF1E,
+0x8185=>0x2266,
+0x8186=>0x2267,
+0x8187=>0x221E,
+0x8188=>0x2234,
+0x8189=>0x2642,
+0x818A=>0x2640,
+0x818B=>0x00B0,
+0x818C=>0x2032,
+0x818D=>0x2033,
+0x818E=>0x2103,
+0x818F=>0xFFE5,
+0x8190=>0xFF04,
+0x8191=>0xFFE0,
+0x8192=>0xFFE1,
+0x8193=>0xFF05,
+0x8194=>0xFF03,
+0x8195=>0xFF06,
+0x8196=>0xFF0A,
+0x8197=>0xFF20,
+0x8198=>0x00A7,
+0x8199=>0x2606,
+0x819A=>0x2605,
+0x819B=>0x25CB,
+0x819C=>0x25CF,
+0x819D=>0x25CE,
+0x819E=>0x25C7,
+0x819F=>0x25C6,
+0x81A0=>0x25A1,
+0x81A1=>0x25A0,
+0x81A2=>0x25B3,
+0x81A3=>0x25B2,
+0x81A4=>0x25BD,
+0x81A5=>0x25BC,
+0x81A6=>0x203B,
+0x81A7=>0x3012,
+0x81A8=>0x2192,
+0x81A9=>0x2190,
+0x81AA=>0x2191,
+0x81AB=>0x2193,
+0x81AC=>0x3013,
+0x81B8=>0x2208,
+0x81B9=>0x220B,
+0x81BA=>0x2286,
+0x81BB=>0x2287,
+0x81BC=>0x2282,
+0x81BD=>0x2283,
+0x81BE=>0x222A,
+0x81BF=>0x2229,
+0x81C8=>0x2227,
+0x81C9=>0x2228,
+0x81CA=>0xFFE2,
+0x81CB=>0x21D2,
+0x81CC=>0x21D4,
+0x81CD=>0x2200,
+0x81CE=>0x2203,
+0x81DA=>0x2220,
+0x81DB=>0x22A5,
+0x81DC=>0x2312,
+0x81DD=>0x2202,
+0x81DE=>0x2207,
+0x81DF=>0x2261,
+0x81E0=>0x2252,
+0x81E1=>0x226A,
+0x81E2=>0x226B,
+0x81E3=>0x221A,
+0x81E4=>0x223D,
+0x81E5=>0x221D,
+0x81E6=>0x2235,
+0x81E7=>0x222B,
+0x81E8=>0x222C,
+0x81F0=>0x212B,
+0x81F1=>0x2030,
+0x81F2=>0x266F,
+0x81F3=>0x266D,
+0x81F4=>0x266A,
+0x81F5=>0x2020,
+0x81F6=>0x2021,
+0x81F7=>0x00B6,
+0x81FC=>0x25EF,
+0x824F=>0xFF10,
+0x8250=>0xFF11,
+0x8251=>0xFF12,
+0x8252=>0xFF13,
+0x8253=>0xFF14,
+0x8254=>0xFF15,
+0x8255=>0xFF16,
+0x8256=>0xFF17,
+0x8257=>0xFF18,
+0x8258=>0xFF19,
+0x8260=>0xFF21,
+0x8261=>0xFF22,
+0x8262=>0xFF23,
+0x8263=>0xFF24,
+0x8264=>0xFF25,
+0x8265=>0xFF26,
+0x8266=>0xFF27,
+0x8267=>0xFF28,
+0x8268=>0xFF29,
+0x8269=>0xFF2A,
+0x826A=>0xFF2B,
+0x826B=>0xFF2C,
+0x826C=>0xFF2D,
+0x826D=>0xFF2E,
+0x826E=>0xFF2F,
+0x826F=>0xFF30,
+0x8270=>0xFF31,
+0x8271=>0xFF32,
+0x8272=>0xFF33,
+0x8273=>0xFF34,
+0x8274=>0xFF35,
+0x8275=>0xFF36,
+0x8276=>0xFF37,
+0x8277=>0xFF38,
+0x8278=>0xFF39,
+0x8279=>0xFF3A,
+0x8281=>0xFF41,
+0x8282=>0xFF42,
+0x8283=>0xFF43,
+0x8284=>0xFF44,
+0x8285=>0xFF45,
+0x8286=>0xFF46,
+0x8287=>0xFF47,
+0x8288=>0xFF48,
+0x8289=>0xFF49,
+0x828A=>0xFF4A,
+0x828B=>0xFF4B,
+0x828C=>0xFF4C,
+0x828D=>0xFF4D,
+0x828E=>0xFF4E,
+0x828F=>0xFF4F,
+0x8290=>0xFF50,
+0x8291=>0xFF51,
+0x8292=>0xFF52,
+0x8293=>0xFF53,
+0x8294=>0xFF54,
+0x8295=>0xFF55,
+0x8296=>0xFF56,
+0x8297=>0xFF57,
+0x8298=>0xFF58,
+0x8299=>0xFF59,
+0x829A=>0xFF5A,
+0x829F=>0x3041,
+0x82A0=>0x3042,
+0x82A1=>0x3043,
+0x82A2=>0x3044,
+0x82A3=>0x3045,
+0x82A4=>0x3046,
+0x82A5=>0x3047,
+0x82A6=>0x3048,
+0x82A7=>0x3049,
+0x82A8=>0x304A,
+0x82A9=>0x304B,
+0x82AA=>0x304C,
+0x82AB=>0x304D,
+0x82AC=>0x304E,
+0x82AD=>0x304F,
+0x82AE=>0x3050,
+0x82AF=>0x3051,
+0x82B0=>0x3052,
+0x82B1=>0x3053,
+0x82B2=>0x3054,
+0x82B3=>0x3055,
+0x82B4=>0x3056,
+0x82B5=>0x3057,
+0x82B6=>0x3058,
+0x82B7=>0x3059,
+0x82B8=>0x305A,
+0x82B9=>0x305B,
+0x82BA=>0x305C,
+0x82BB=>0x305D,
+0x82BC=>0x305E,
+0x82BD=>0x305F,
+0x82BE=>0x3060,
+0x82BF=>0x3061,
+0x82C0=>0x3062,
+0x82C1=>0x3063,
+0x82C2=>0x3064,
+0x82C3=>0x3065,
+0x82C4=>0x3066,
+0x82C5=>0x3067,
+0x82C6=>0x3068,
+0x82C7=>0x3069,
+0x82C8=>0x306A,
+0x82C9=>0x306B,
+0x82CA=>0x306C,
+0x82CB=>0x306D,
+0x82CC=>0x306E,
+0x82CD=>0x306F,
+0x82CE=>0x3070,
+0x82CF=>0x3071,
+0x82D0=>0x3072,
+0x82D1=>0x3073,
+0x82D2=>0x3074,
+0x82D3=>0x3075,
+0x82D4=>0x3076,
+0x82D5=>0x3077,
+0x82D6=>0x3078,
+0x82D7=>0x3079,
+0x82D8=>0x307A,
+0x82D9=>0x307B,
+0x82DA=>0x307C,
+0x82DB=>0x307D,
+0x82DC=>0x307E,
+0x82DD=>0x307F,
+0x82DE=>0x3080,
+0x82DF=>0x3081,
+0x82E0=>0x3082,
+0x82E1=>0x3083,
+0x82E2=>0x3084,
+0x82E3=>0x3085,
+0x82E4=>0x3086,
+0x82E5=>0x3087,
+0x82E6=>0x3088,
+0x82E7=>0x3089,
+0x82E8=>0x308A,
+0x82E9=>0x308B,
+0x82EA=>0x308C,
+0x82EB=>0x308D,
+0x82EC=>0x308E,
+0x82ED=>0x308F,
+0x82EE=>0x3090,
+0x82EF=>0x3091,
+0x82F0=>0x3092,
+0x82F1=>0x3093,
+0x8340=>0x30A1,
+0x8341=>0x30A2,
+0x8342=>0x30A3,
+0x8343=>0x30A4,
+0x8344=>0x30A5,
+0x8345=>0x30A6,
+0x8346=>0x30A7,
+0x8347=>0x30A8,
+0x8348=>0x30A9,
+0x8349=>0x30AA,
+0x834A=>0x30AB,
+0x834B=>0x30AC,
+0x834C=>0x30AD,
+0x834D=>0x30AE,
+0x834E=>0x30AF,
+0x834F=>0x30B0,
+0x8350=>0x30B1,
+0x8351=>0x30B2,
+0x8352=>0x30B3,
+0x8353=>0x30B4,
+0x8354=>0x30B5,
+0x8355=>0x30B6,
+0x8356=>0x30B7,
+0x8357=>0x30B8,
+0x8358=>0x30B9,
+0x8359=>0x30BA,
+0x835A=>0x30BB,
+0x835B=>0x30BC,
+0x835C=>0x30BD,
+0x835D=>0x30BE,
+0x835E=>0x30BF,
+0x835F=>0x30C0,
+0x8360=>0x30C1,
+0x8361=>0x30C2,
+0x8362=>0x30C3,
+0x8363=>0x30C4,
+0x8364=>0x30C5,
+0x8365=>0x30C6,
+0x8366=>0x30C7,
+0x8367=>0x30C8,
+0x8368=>0x30C9,
+0x8369=>0x30CA,
+0x836A=>0x30CB,
+0x836B=>0x30CC,
+0x836C=>0x30CD,
+0x836D=>0x30CE,
+0x836E=>0x30CF,
+0x836F=>0x30D0,
+0x8370=>0x30D1,
+0x8371=>0x30D2,
+0x8372=>0x30D3,
+0x8373=>0x30D4,
+0x8374=>0x30D5,
+0x8375=>0x30D6,
+0x8376=>0x30D7,
+0x8377=>0x30D8,
+0x8378=>0x30D9,
+0x8379=>0x30DA,
+0x837A=>0x30DB,
+0x837B=>0x30DC,
+0x837C=>0x30DD,
+0x837D=>0x30DE,
+0x837E=>0x30DF,
+0x8380=>0x30E0,
+0x8381=>0x30E1,
+0x8382=>0x30E2,
+0x8383=>0x30E3,
+0x8384=>0x30E4,
+0x8385=>0x30E5,
+0x8386=>0x30E6,
+0x8387=>0x30E7,
+0x8388=>0x30E8,
+0x8389=>0x30E9,
+0x838A=>0x30EA,
+0x838B=>0x30EB,
+0x838C=>0x30EC,
+0x838D=>0x30ED,
+0x838E=>0x30EE,
+0x838F=>0x30EF,
+0x8390=>0x30F0,
+0x8391=>0x30F1,
+0x8392=>0x30F2,
+0x8393=>0x30F3,
+0x8394=>0x30F4,
+0x8395=>0x30F5,
+0x8396=>0x30F6,
+0x839F=>0x0391,
+0x83A0=>0x0392,
+0x83A1=>0x0393,
+0x83A2=>0x0394,
+0x83A3=>0x0395,
+0x83A4=>0x0396,
+0x83A5=>0x0397,
+0x83A6=>0x0398,
+0x83A7=>0x0399,
+0x83A8=>0x039A,
+0x83A9=>0x039B,
+0x83AA=>0x039C,
+0x83AB=>0x039D,
+0x83AC=>0x039E,
+0x83AD=>0x039F,
+0x83AE=>0x03A0,
+0x83AF=>0x03A1,
+0x83B0=>0x03A3,
+0x83B1=>0x03A4,
+0x83B2=>0x03A5,
+0x83B3=>0x03A6,
+0x83B4=>0x03A7,
+0x83B5=>0x03A8,
+0x83B6=>0x03A9,
+0x83BF=>0x03B1,
+0x83C0=>0x03B2,
+0x83C1=>0x03B3,
+0x83C2=>0x03B4,
+0x83C3=>0x03B5,
+0x83C4=>0x03B6,
+0x83C5=>0x03B7,
+0x83C6=>0x03B8,
+0x83C7=>0x03B9,
+0x83C8=>0x03BA,
+0x83C9=>0x03BB,
+0x83CA=>0x03BC,
+0x83CB=>0x03BD,
+0x83CC=>0x03BE,
+0x83CD=>0x03BF,
+0x83CE=>0x03C0,
+0x83CF=>0x03C1,
+0x83D0=>0x03C3,
+0x83D1=>0x03C4,
+0x83D2=>0x03C5,
+0x83D3=>0x03C6,
+0x83D4=>0x03C7,
+0x83D5=>0x03C8,
+0x83D6=>0x03C9,
+0x8440=>0x0410,
+0x8441=>0x0411,
+0x8442=>0x0412,
+0x8443=>0x0413,
+0x8444=>0x0414,
+0x8445=>0x0415,
+0x8446=>0x0401,
+0x8447=>0x0416,
+0x8448=>0x0417,
+0x8449=>0x0418,
+0x844A=>0x0419,
+0x844B=>0x041A,
+0x844C=>0x041B,
+0x844D=>0x041C,
+0x844E=>0x041D,
+0x844F=>0x041E,
+0x8450=>0x041F,
+0x8451=>0x0420,
+0x8452=>0x0421,
+0x8453=>0x0422,
+0x8454=>0x0423,
+0x8455=>0x0424,
+0x8456=>0x0425,
+0x8457=>0x0426,
+0x8458=>0x0427,
+0x8459=>0x0428,
+0x845A=>0x0429,
+0x845B=>0x042A,
+0x845C=>0x042B,
+0x845D=>0x042C,
+0x845E=>0x042D,
+0x845F=>0x042E,
+0x8460=>0x042F,
+0x8470=>0x0430,
+0x8471=>0x0431,
+0x8472=>0x0432,
+0x8473=>0x0433,
+0x8474=>0x0434,
+0x8475=>0x0435,
+0x8476=>0x0451,
+0x8477=>0x0436,
+0x8478=>0x0437,
+0x8479=>0x0438,
+0x847A=>0x0439,
+0x847B=>0x043A,
+0x847C=>0x043B,
+0x847D=>0x043C,
+0x847E=>0x043D,
+0x8480=>0x043E,
+0x8481=>0x043F,
+0x8482=>0x0440,
+0x8483=>0x0441,
+0x8484=>0x0442,
+0x8485=>0x0443,
+0x8486=>0x0444,
+0x8487=>0x0445,
+0x8488=>0x0446,
+0x8489=>0x0447,
+0x848A=>0x0448,
+0x848B=>0x0449,
+0x848C=>0x044A,
+0x848D=>0x044B,
+0x848E=>0x044C,
+0x848F=>0x044D,
+0x8490=>0x044E,
+0x8491=>0x044F,
+0x849F=>0x2500,
+0x84A0=>0x2502,
+0x84A1=>0x250C,
+0x84A2=>0x2510,
+0x84A3=>0x2518,
+0x84A4=>0x2514,
+0x84A5=>0x251C,
+0x84A6=>0x252C,
+0x84A7=>0x2524,
+0x84A8=>0x2534,
+0x84A9=>0x253C,
+0x84AA=>0x2501,
+0x84AB=>0x2503,
+0x84AC=>0x250F,
+0x84AD=>0x2513,
+0x84AE=>0x251B,
+0x84AF=>0x2517,
+0x84B0=>0x2523,
+0x84B1=>0x2533,
+0x84B2=>0x252B,
+0x84B3=>0x253B,
+0x84B4=>0x254B,
+0x84B5=>0x2520,
+0x84B6=>0x252F,
+0x84B7=>0x2528,
+0x84B8=>0x2537,
+0x84B9=>0x253F,
+0x84BA=>0x251D,
+0x84BB=>0x2530,
+0x84BC=>0x2525,
+0x84BD=>0x2538,
+0x84BE=>0x2542,
+0x8740=>0x2460,
+0x8741=>0x2461,
+0x8742=>0x2462,
+0x8743=>0x2463,
+0x8744=>0x2464,
+0x8745=>0x2465,
+0x8746=>0x2466,
+0x8747=>0x2467,
+0x8748=>0x2468,
+0x8749=>0x2469,
+0x874A=>0x246A,
+0x874B=>0x246B,
+0x874C=>0x246C,
+0x874D=>0x246D,
+0x874E=>0x246E,
+0x874F=>0x246F,
+0x8750=>0x2470,
+0x8751=>0x2471,
+0x8752=>0x2472,
+0x8753=>0x2473,
+0x8754=>0x2160,
+0x8755=>0x2161,
+0x8756=>0x2162,
+0x8757=>0x2163,
+0x8758=>0x2164,
+0x8759=>0x2165,
+0x875A=>0x2166,
+0x875B=>0x2167,
+0x875C=>0x2168,
+0x875D=>0x2169,
+0x875F=>0x3349,
+0x8760=>0x3314,
+0x8761=>0x3322,
+0x8762=>0x334D,
+0x8763=>0x3318,
+0x8764=>0x3327,
+0x8765=>0x3303,
+0x8766=>0x3336,
+0x8767=>0x3351,
+0x8768=>0x3357,
+0x8769=>0x330D,
+0x876A=>0x3326,
+0x876B=>0x3323,
+0x876C=>0x332B,
+0x876D=>0x334A,
+0x876E=>0x333B,
+0x876F=>0x339C,
+0x8770=>0x339D,
+0x8771=>0x339E,
+0x8772=>0x338E,
+0x8773=>0x338F,
+0x8774=>0x33C4,
+0x8775=>0x33A1,
+0x877E=>0x337B,
+0x8780=>0x301D,
+0x8781=>0x301F,
+0x8782=>0x2116,
+0x8783=>0x33CD,
+0x8784=>0x2121,
+0x8785=>0x32A4,
+0x8786=>0x32A5,
+0x8787=>0x32A6,
+0x8788=>0x32A7,
+0x8789=>0x32A8,
+0x878A=>0x3231,
+0x878B=>0x3232,
+0x878C=>0x3239,
+0x878D=>0x337E,
+0x878E=>0x337D,
+0x878F=>0x337C,
+0x8790=>0x2252,
+0x8791=>0x2261,
+0x8792=>0x222B,
+0x8793=>0x222E,
+0x8794=>0x2211,
+0x8795=>0x221A,
+0x8796=>0x22A5,
+0x8797=>0x2220,
+0x8798=>0x221F,
+0x8799=>0x22BF,
+0x879A=>0x2235,
+0x879B=>0x2229,
+0x879C=>0x222A,
+0x889F=>0x4E9C,
+0x88A0=>0x5516,
+0x88A1=>0x5A03,
+0x88A2=>0x963F,
+0x88A3=>0x54C0,
+0x88A4=>0x611B,
+0x88A5=>0x6328,
+0x88A6=>0x59F6,
+0x88A7=>0x9022,
+0x88A8=>0x8475,
+0x88A9=>0x831C,
+0x88AA=>0x7A50,
+0x88AB=>0x60AA,
+0x88AC=>0x63E1,
+0x88AD=>0x6E25,
+0x88AE=>0x65ED,
+0x88AF=>0x8466,
+0x88B0=>0x82A6,
+0x88B1=>0x9BF5,
+0x88B2=>0x6893,
+0x88B3=>0x5727,
+0x88B4=>0x65A1,
+0x88B5=>0x6271,
+0x88B6=>0x5B9B,
+0x88B7=>0x59D0,
+0x88B8=>0x867B,
+0x88B9=>0x98F4,
+0x88BA=>0x7D62,
+0x88BB=>0x7DBE,
+0x88BC=>0x9B8E,
+0x88BD=>0x6216,
+0x88BE=>0x7C9F,
+0x88BF=>0x88B7,
+0x88C0=>0x5B89,
+0x88C1=>0x5EB5,
+0x88C2=>0x6309,
+0x88C3=>0x6697,
+0x88C4=>0x6848,
+0x88C5=>0x95C7,
+0x88C6=>0x978D,
+0x88C7=>0x674F,
+0x88C8=>0x4EE5,
+0x88C9=>0x4F0A,
+0x88CA=>0x4F4D,
+0x88CB=>0x4F9D,
+0x88CC=>0x5049,
+0x88CD=>0x56F2,
+0x88CE=>0x5937,
+0x88CF=>0x59D4,
+0x88D0=>0x5A01,
+0x88D1=>0x5C09,
+0x88D2=>0x60DF,
+0x88D3=>0x610F,
+0x88D4=>0x6170,
+0x88D5=>0x6613,
+0x88D6=>0x6905,
+0x88D7=>0x70BA,
+0x88D8=>0x754F,
+0x88D9=>0x7570,
+0x88DA=>0x79FB,
+0x88DB=>0x7DAD,
+0x88DC=>0x7DEF,
+0x88DD=>0x80C3,
+0x88DE=>0x840E,
+0x88DF=>0x8863,
+0x88E0=>0x8B02,
+0x88E1=>0x9055,
+0x88E2=>0x907A,
+0x88E3=>0x533B,
+0x88E4=>0x4E95,
+0x88E5=>0x4EA5,
+0x88E6=>0x57DF,
+0x88E7=>0x80B2,
+0x88E8=>0x90C1,
+0x88E9=>0x78EF,
+0x88EA=>0x4E00,
+0x88EB=>0x58F1,
+0x88EC=>0x6EA2,
+0x88ED=>0x9038,
+0x88EE=>0x7A32,
+0x88EF=>0x8328,
+0x88F0=>0x828B,
+0x88F1=>0x9C2F,
+0x88F2=>0x5141,
+0x88F3=>0x5370,
+0x88F4=>0x54BD,
+0x88F5=>0x54E1,
+0x88F6=>0x56E0,
+0x88F7=>0x59FB,
+0x88F8=>0x5F15,
+0x88F9=>0x98F2,
+0x88FA=>0x6DEB,
+0x88FB=>0x80E4,
+0x88FC=>0x852D,
+0x8940=>0x9662,
+0x8941=>0x9670,
+0x8942=>0x96A0,
+0x8943=>0x97FB,
+0x8944=>0x540B,
+0x8945=>0x53F3,
+0x8946=>0x5B87,
+0x8947=>0x70CF,
+0x8948=>0x7FBD,
+0x8949=>0x8FC2,
+0x894A=>0x96E8,
+0x894B=>0x536F,
+0x894C=>0x9D5C,
+0x894D=>0x7ABA,
+0x894E=>0x4E11,
+0x894F=>0x7893,
+0x8950=>0x81FC,
+0x8951=>0x6E26,
+0x8952=>0x5618,
+0x8953=>0x5504,
+0x8954=>0x6B1D,
+0x8955=>0x851A,
+0x8956=>0x9C3B,
+0x8957=>0x59E5,
+0x8958=>0x53A9,
+0x8959=>0x6D66,
+0x895A=>0x74DC,
+0x895B=>0x958F,
+0x895C=>0x5642,
+0x895D=>0x4E91,
+0x895E=>0x904B,
+0x895F=>0x96F2,
+0x8960=>0x834F,
+0x8961=>0x990C,
+0x8962=>0x53E1,
+0x8963=>0x55B6,
+0x8964=>0x5B30,
+0x8965=>0x5F71,
+0x8966=>0x6620,
+0x8967=>0x66F3,
+0x8968=>0x6804,
+0x8969=>0x6C38,
+0x896A=>0x6CF3,
+0x896B=>0x6D29,
+0x896C=>0x745B,
+0x896D=>0x76C8,
+0x896E=>0x7A4E,
+0x896F=>0x9834,
+0x8970=>0x82F1,
+0x8971=>0x885B,
+0x8972=>0x8A60,
+0x8973=>0x92ED,
+0x8974=>0x6DB2,
+0x8975=>0x75AB,
+0x8976=>0x76CA,
+0x8977=>0x99C5,
+0x8978=>0x60A6,
+0x8979=>0x8B01,
+0x897A=>0x8D8A,
+0x897B=>0x95B2,
+0x897C=>0x698E,
+0x897D=>0x53AD,
+0x897E=>0x5186,
+0x8980=>0x5712,
+0x8981=>0x5830,
+0x8982=>0x5944,
+0x8983=>0x5BB4,
+0x8984=>0x5EF6,
+0x8985=>0x6028,
+0x8986=>0x63A9,
+0x8987=>0x63F4,
+0x8988=>0x6CBF,
+0x8989=>0x6F14,
+0x898A=>0x708E,
+0x898B=>0x7114,
+0x898C=>0x7159,
+0x898D=>0x71D5,
+0x898E=>0x733F,
+0x898F=>0x7E01,
+0x8990=>0x8276,
+0x8991=>0x82D1,
+0x8992=>0x8597,
+0x8993=>0x9060,
+0x8994=>0x925B,
+0x8995=>0x9D1B,
+0x8996=>0x5869,
+0x8997=>0x65BC,
+0x8998=>0x6C5A,
+0x8999=>0x7525,
+0x899A=>0x51F9,
+0x899B=>0x592E,
+0x899C=>0x5965,
+0x899D=>0x5F80,
+0x899E=>0x5FDC,
+0x899F=>0x62BC,
+0x89A0=>0x65FA,
+0x89A1=>0x6A2A,
+0x89A2=>0x6B27,
+0x89A3=>0x6BB4,
+0x89A4=>0x738B,
+0x89A5=>0x7FC1,
+0x89A6=>0x8956,
+0x89A7=>0x9D2C,
+0x89A8=>0x9D0E,
+0x89A9=>0x9EC4,
+0x89AA=>0x5CA1,
+0x89AB=>0x6C96,
+0x89AC=>0x837B,
+0x89AD=>0x5104,
+0x89AE=>0x5C4B,
+0x89AF=>0x61B6,
+0x89B0=>0x81C6,
+0x89B1=>0x6876,
+0x89B2=>0x7261,
+0x89B3=>0x4E59,
+0x89B4=>0x4FFA,
+0x89B5=>0x5378,
+0x89B6=>0x6069,
+0x89B7=>0x6E29,
+0x89B8=>0x7A4F,
+0x89B9=>0x97F3,
+0x89BA=>0x4E0B,
+0x89BB=>0x5316,
+0x89BC=>0x4EEE,
+0x89BD=>0x4F55,
+0x89BE=>0x4F3D,
+0x89BF=>0x4FA1,
+0x89C0=>0x4F73,
+0x89C1=>0x52A0,
+0x89C2=>0x53EF,
+0x89C3=>0x5609,
+0x89C4=>0x590F,
+0x89C5=>0x5AC1,
+0x89C6=>0x5BB6,
+0x89C7=>0x5BE1,
+0x89C8=>0x79D1,
+0x89C9=>0x6687,
+0x89CA=>0x679C,
+0x89CB=>0x67B6,
+0x89CC=>0x6B4C,
+0x89CD=>0x6CB3,
+0x89CE=>0x706B,
+0x89CF=>0x73C2,
+0x89D0=>0x798D,
+0x89D1=>0x79BE,
+0x89D2=>0x7A3C,
+0x89D3=>0x7B87,
+0x89D4=>0x82B1,
+0x89D5=>0x82DB,
+0x89D6=>0x8304,
+0x89D7=>0x8377,
+0x89D8=>0x83EF,
+0x89D9=>0x83D3,
+0x89DA=>0x8766,
+0x89DB=>0x8AB2,
+0x89DC=>0x5629,
+0x89DD=>0x8CA8,
+0x89DE=>0x8FE6,
+0x89DF=>0x904E,
+0x89E0=>0x971E,
+0x89E1=>0x868A,
+0x89E2=>0x4FC4,
+0x89E3=>0x5CE8,
+0x89E4=>0x6211,
+0x89E5=>0x7259,
+0x89E6=>0x753B,
+0x89E7=>0x81E5,
+0x89E8=>0x82BD,
+0x89E9=>0x86FE,
+0x89EA=>0x8CC0,
+0x89EB=>0x96C5,
+0x89EC=>0x9913,
+0x89ED=>0x99D5,
+0x89EE=>0x4ECB,
+0x89EF=>0x4F1A,
+0x89F0=>0x89E3,
+0x89F1=>0x56DE,
+0x89F2=>0x584A,
+0x89F3=>0x58CA,
+0x89F4=>0x5EFB,
+0x89F5=>0x5FEB,
+0x89F6=>0x602A,
+0x89F7=>0x6094,
+0x89F8=>0x6062,
+0x89F9=>0x61D0,
+0x89FA=>0x6212,
+0x89FB=>0x62D0,
+0x89FC=>0x6539,
+0x8A40=>0x9B41,
+0x8A41=>0x6666,
+0x8A42=>0x68B0,
+0x8A43=>0x6D77,
+0x8A44=>0x7070,
+0x8A45=>0x754C,
+0x8A46=>0x7686,
+0x8A47=>0x7D75,
+0x8A48=>0x82A5,
+0x8A49=>0x87F9,
+0x8A4A=>0x958B,
+0x8A4B=>0x968E,
+0x8A4C=>0x8C9D,
+0x8A4D=>0x51F1,
+0x8A4E=>0x52BE,
+0x8A4F=>0x5916,
+0x8A50=>0x54B3,
+0x8A51=>0x5BB3,
+0x8A52=>0x5D16,
+0x8A53=>0x6168,
+0x8A54=>0x6982,
+0x8A55=>0x6DAF,
+0x8A56=>0x788D,
+0x8A57=>0x84CB,
+0x8A58=>0x8857,
+0x8A59=>0x8A72,
+0x8A5A=>0x93A7,
+0x8A5B=>0x9AB8,
+0x8A5C=>0x6D6C,
+0x8A5D=>0x99A8,
+0x8A5E=>0x86D9,
+0x8A5F=>0x57A3,
+0x8A60=>0x67FF,
+0x8A61=>0x86CE,
+0x8A62=>0x920E,
+0x8A63=>0x5283,
+0x8A64=>0x5687,
+0x8A65=>0x5404,
+0x8A66=>0x5ED3,
+0x8A67=>0x62E1,
+0x8A68=>0x64B9,
+0x8A69=>0x683C,
+0x8A6A=>0x6838,
+0x8A6B=>0x6BBB,
+0x8A6C=>0x7372,
+0x8A6D=>0x78BA,
+0x8A6E=>0x7A6B,
+0x8A6F=>0x899A,
+0x8A70=>0x89D2,
+0x8A71=>0x8D6B,
+0x8A72=>0x8F03,
+0x8A73=>0x90ED,
+0x8A74=>0x95A3,
+0x8A75=>0x9694,
+0x8A76=>0x9769,
+0x8A77=>0x5B66,
+0x8A78=>0x5CB3,
+0x8A79=>0x697D,
+0x8A7A=>0x984D,
+0x8A7B=>0x984E,
+0x8A7C=>0x639B,
+0x8A7D=>0x7B20,
+0x8A7E=>0x6A2B,
+0x8A80=>0x6A7F,
+0x8A81=>0x68B6,
+0x8A82=>0x9C0D,
+0x8A83=>0x6F5F,
+0x8A84=>0x5272,
+0x8A85=>0x559D,
+0x8A86=>0x6070,
+0x8A87=>0x62EC,
+0x8A88=>0x6D3B,
+0x8A89=>0x6E07,
+0x8A8A=>0x6ED1,
+0x8A8B=>0x845B,
+0x8A8C=>0x8910,
+0x8A8D=>0x8F44,
+0x8A8E=>0x4E14,
+0x8A8F=>0x9C39,
+0x8A90=>0x53F6,
+0x8A91=>0x691B,
+0x8A92=>0x6A3A,
+0x8A93=>0x9784,
+0x8A94=>0x682A,
+0x8A95=>0x515C,
+0x8A96=>0x7AC3,
+0x8A97=>0x84B2,
+0x8A98=>0x91DC,
+0x8A99=>0x938C,
+0x8A9A=>0x565B,
+0x8A9B=>0x9D28,
+0x8A9C=>0x6822,
+0x8A9D=>0x8305,
+0x8A9E=>0x8431,
+0x8A9F=>0x7CA5,
+0x8AA0=>0x5208,
+0x8AA1=>0x82C5,
+0x8AA2=>0x74E6,
+0x8AA3=>0x4E7E,
+0x8AA4=>0x4F83,
+0x8AA5=>0x51A0,
+0x8AA6=>0x5BD2,
+0x8AA7=>0x520A,
+0x8AA8=>0x52D8,
+0x8AA9=>0x52E7,
+0x8AAA=>0x5DFB,
+0x8AAB=>0x559A,
+0x8AAC=>0x582A,
+0x8AAD=>0x59E6,
+0x8AAE=>0x5B8C,
+0x8AAF=>0x5B98,
+0x8AB0=>0x5BDB,
+0x8AB1=>0x5E72,
+0x8AB2=>0x5E79,
+0x8AB3=>0x60A3,
+0x8AB4=>0x611F,
+0x8AB5=>0x6163,
+0x8AB6=>0x61BE,
+0x8AB7=>0x63DB,
+0x8AB8=>0x6562,
+0x8AB9=>0x67D1,
+0x8ABA=>0x6853,
+0x8ABB=>0x68FA,
+0x8ABC=>0x6B3E,
+0x8ABD=>0x6B53,
+0x8ABE=>0x6C57,
+0x8ABF=>0x6F22,
+0x8AC0=>0x6F97,
+0x8AC1=>0x6F45,
+0x8AC2=>0x74B0,
+0x8AC3=>0x7518,
+0x8AC4=>0x76E3,
+0x8AC5=>0x770B,
+0x8AC6=>0x7AFF,
+0x8AC7=>0x7BA1,
+0x8AC8=>0x7C21,
+0x8AC9=>0x7DE9,
+0x8ACA=>0x7F36,
+0x8ACB=>0x7FF0,
+0x8ACC=>0x809D,
+0x8ACD=>0x8266,
+0x8ACE=>0x839E,
+0x8ACF=>0x89B3,
+0x8AD0=>0x8ACC,
+0x8AD1=>0x8CAB,
+0x8AD2=>0x9084,
+0x8AD3=>0x9451,
+0x8AD4=>0x9593,
+0x8AD5=>0x9591,
+0x8AD6=>0x95A2,
+0x8AD7=>0x9665,
+0x8AD8=>0x97D3,
+0x8AD9=>0x9928,
+0x8ADA=>0x8218,
+0x8ADB=>0x4E38,
+0x8ADC=>0x542B,
+0x8ADD=>0x5CB8,
+0x8ADE=>0x5DCC,
+0x8ADF=>0x73A9,
+0x8AE0=>0x764C,
+0x8AE1=>0x773C,
+0x8AE2=>0x5CA9,
+0x8AE3=>0x7FEB,
+0x8AE4=>0x8D0B,
+0x8AE5=>0x96C1,
+0x8AE6=>0x9811,
+0x8AE7=>0x9854,
+0x8AE8=>0x9858,
+0x8AE9=>0x4F01,
+0x8AEA=>0x4F0E,
+0x8AEB=>0x5371,
+0x8AEC=>0x559C,
+0x8AED=>0x5668,
+0x8AEE=>0x57FA,
+0x8AEF=>0x5947,
+0x8AF0=>0x5B09,
+0x8AF1=>0x5BC4,
+0x8AF2=>0x5C90,
+0x8AF3=>0x5E0C,
+0x8AF4=>0x5E7E,
+0x8AF5=>0x5FCC,
+0x8AF6=>0x63EE,
+0x8AF7=>0x673A,
+0x8AF8=>0x65D7,
+0x8AF9=>0x65E2,
+0x8AFA=>0x671F,
+0x8AFB=>0x68CB,
+0x8AFC=>0x68C4,
+0x8B40=>0x6A5F,
+0x8B41=>0x5E30,
+0x8B42=>0x6BC5,
+0x8B43=>0x6C17,
+0x8B44=>0x6C7D,
+0x8B45=>0x757F,
+0x8B46=>0x7948,
+0x8B47=>0x5B63,
+0x8B48=>0x7A00,
+0x8B49=>0x7D00,
+0x8B4A=>0x5FBD,
+0x8B4B=>0x898F,
+0x8B4C=>0x8A18,
+0x8B4D=>0x8CB4,
+0x8B4E=>0x8D77,
+0x8B4F=>0x8ECC,
+0x8B50=>0x8F1D,
+0x8B51=>0x98E2,
+0x8B52=>0x9A0E,
+0x8B53=>0x9B3C,
+0x8B54=>0x4E80,
+0x8B55=>0x507D,
+0x8B56=>0x5100,
+0x8B57=>0x5993,
+0x8B58=>0x5B9C,
+0x8B59=>0x622F,
+0x8B5A=>0x6280,
+0x8B5B=>0x64EC,
+0x8B5C=>0x6B3A,
+0x8B5D=>0x72A0,
+0x8B5E=>0x7591,
+0x8B5F=>0x7947,
+0x8B60=>0x7FA9,
+0x8B61=>0x87FB,
+0x8B62=>0x8ABC,
+0x8B63=>0x8B70,
+0x8B64=>0x63AC,
+0x8B65=>0x83CA,
+0x8B66=>0x97A0,
+0x8B67=>0x5409,
+0x8B68=>0x5403,
+0x8B69=>0x55AB,
+0x8B6A=>0x6854,
+0x8B6B=>0x6A58,
+0x8B6C=>0x8A70,
+0x8B6D=>0x7827,
+0x8B6E=>0x6775,
+0x8B6F=>0x9ECD,
+0x8B70=>0x5374,
+0x8B71=>0x5BA2,
+0x8B72=>0x811A,
+0x8B73=>0x8650,
+0x8B74=>0x9006,
+0x8B75=>0x4E18,
+0x8B76=>0x4E45,
+0x8B77=>0x4EC7,
+0x8B78=>0x4F11,
+0x8B79=>0x53CA,
+0x8B7A=>0x5438,
+0x8B7B=>0x5BAE,
+0x8B7C=>0x5F13,
+0x8B7D=>0x6025,
+0x8B7E=>0x6551,
+0x8B80=>0x673D,
+0x8B81=>0x6C42,
+0x8B82=>0x6C72,
+0x8B83=>0x6CE3,
+0x8B84=>0x7078,
+0x8B85=>0x7403,
+0x8B86=>0x7A76,
+0x8B87=>0x7AAE,
+0x8B88=>0x7B08,
+0x8B89=>0x7D1A,
+0x8B8A=>0x7CFE,
+0x8B8B=>0x7D66,
+0x8B8C=>0x65E7,
+0x8B8D=>0x725B,
+0x8B8E=>0x53BB,
+0x8B8F=>0x5C45,
+0x8B90=>0x5DE8,
+0x8B91=>0x62D2,
+0x8B92=>0x62E0,
+0x8B93=>0x6319,
+0x8B94=>0x6E20,
+0x8B95=>0x865A,
+0x8B96=>0x8A31,
+0x8B97=>0x8DDD,
+0x8B98=>0x92F8,
+0x8B99=>0x6F01,
+0x8B9A=>0x79A6,
+0x8B9B=>0x9B5A,
+0x8B9C=>0x4EA8,
+0x8B9D=>0x4EAB,
+0x8B9E=>0x4EAC,
+0x8B9F=>0x4F9B,
+0x8BA0=>0x4FA0,
+0x8BA1=>0x50D1,
+0x8BA2=>0x5147,
+0x8BA3=>0x7AF6,
+0x8BA4=>0x5171,
+0x8BA5=>0x51F6,
+0x8BA6=>0x5354,
+0x8BA7=>0x5321,
+0x8BA8=>0x537F,
+0x8BA9=>0x53EB,
+0x8BAA=>0x55AC,
+0x8BAB=>0x5883,
+0x8BAC=>0x5CE1,
+0x8BAD=>0x5F37,
+0x8BAE=>0x5F4A,
+0x8BAF=>0x602F,
+0x8BB0=>0x6050,
+0x8BB1=>0x606D,
+0x8BB2=>0x631F,
+0x8BB3=>0x6559,
+0x8BB4=>0x6A4B,
+0x8BB5=>0x6CC1,
+0x8BB6=>0x72C2,
+0x8BB7=>0x72ED,
+0x8BB8=>0x77EF,
+0x8BB9=>0x80F8,
+0x8BBA=>0x8105,
+0x8BBB=>0x8208,
+0x8BBC=>0x854E,
+0x8BBD=>0x90F7,
+0x8BBE=>0x93E1,
+0x8BBF=>0x97FF,
+0x8BC0=>0x9957,
+0x8BC1=>0x9A5A,
+0x8BC2=>0x4EF0,
+0x8BC3=>0x51DD,
+0x8BC4=>0x5C2D,
+0x8BC5=>0x6681,
+0x8BC6=>0x696D,
+0x8BC7=>0x5C40,
+0x8BC8=>0x66F2,
+0x8BC9=>0x6975,
+0x8BCA=>0x7389,
+0x8BCB=>0x6850,
+0x8BCC=>0x7C81,
+0x8BCD=>0x50C5,
+0x8BCE=>0x52E4,
+0x8BCF=>0x5747,
+0x8BD0=>0x5DFE,
+0x8BD1=>0x9326,
+0x8BD2=>0x65A4,
+0x8BD3=>0x6B23,
+0x8BD4=>0x6B3D,
+0x8BD5=>0x7434,
+0x8BD6=>0x7981,
+0x8BD7=>0x79BD,
+0x8BD8=>0x7B4B,
+0x8BD9=>0x7DCA,
+0x8BDA=>0x82B9,
+0x8BDB=>0x83CC,
+0x8BDC=>0x887F,
+0x8BDD=>0x895F,
+0x8BDE=>0x8B39,
+0x8BDF=>0x8FD1,
+0x8BE0=>0x91D1,
+0x8BE1=>0x541F,
+0x8BE2=>0x9280,
+0x8BE3=>0x4E5D,
+0x8BE4=>0x5036,
+0x8BE5=>0x53E5,
+0x8BE6=>0x533A,
+0x8BE7=>0x72D7,
+0x8BE8=>0x7396,
+0x8BE9=>0x77E9,
+0x8BEA=>0x82E6,
+0x8BEB=>0x8EAF,
+0x8BEC=>0x99C6,
+0x8BED=>0x99C8,
+0x8BEE=>0x99D2,
+0x8BEF=>0x5177,
+0x8BF0=>0x611A,
+0x8BF1=>0x865E,
+0x8BF2=>0x55B0,
+0x8BF3=>0x7A7A,
+0x8BF4=>0x5076,
+0x8BF5=>0x5BD3,
+0x8BF6=>0x9047,
+0x8BF7=>0x9685,
+0x8BF8=>0x4E32,
+0x8BF9=>0x6ADB,
+0x8BFA=>0x91E7,
+0x8BFB=>0x5C51,
+0x8BFC=>0x5C48,
+0x8C40=>0x6398,
+0x8C41=>0x7A9F,
+0x8C42=>0x6C93,
+0x8C43=>0x9774,
+0x8C44=>0x8F61,
+0x8C45=>0x7AAA,
+0x8C46=>0x718A,
+0x8C47=>0x9688,
+0x8C48=>0x7C82,
+0x8C49=>0x6817,
+0x8C4A=>0x7E70,
+0x8C4B=>0x6851,
+0x8C4C=>0x936C,
+0x8C4D=>0x52F2,
+0x8C4E=>0x541B,
+0x8C4F=>0x85AB,
+0x8C50=>0x8A13,
+0x8C51=>0x7FA4,
+0x8C52=>0x8ECD,
+0x8C53=>0x90E1,
+0x8C54=>0x5366,
+0x8C55=>0x8888,
+0x8C56=>0x7941,
+0x8C57=>0x4FC2,
+0x8C58=>0x50BE,
+0x8C59=>0x5211,
+0x8C5A=>0x5144,
+0x8C5B=>0x5553,
+0x8C5C=>0x572D,
+0x8C5D=>0x73EA,
+0x8C5E=>0x578B,
+0x8C5F=>0x5951,
+0x8C60=>0x5F62,
+0x8C61=>0x5F84,
+0x8C62=>0x6075,
+0x8C63=>0x6176,
+0x8C64=>0x6167,
+0x8C65=>0x61A9,
+0x8C66=>0x63B2,
+0x8C67=>0x643A,
+0x8C68=>0x656C,
+0x8C69=>0x666F,
+0x8C6A=>0x6842,
+0x8C6B=>0x6E13,
+0x8C6C=>0x7566,
+0x8C6D=>0x7A3D,
+0x8C6E=>0x7CFB,
+0x8C6F=>0x7D4C,
+0x8C70=>0x7D99,
+0x8C71=>0x7E4B,
+0x8C72=>0x7F6B,
+0x8C73=>0x830E,
+0x8C74=>0x834A,
+0x8C75=>0x86CD,
+0x8C76=>0x8A08,
+0x8C77=>0x8A63,
+0x8C78=>0x8B66,
+0x8C79=>0x8EFD,
+0x8C7A=>0x981A,
+0x8C7B=>0x9D8F,
+0x8C7C=>0x82B8,
+0x8C7D=>0x8FCE,
+0x8C7E=>0x9BE8,
+0x8C80=>0x5287,
+0x8C81=>0x621F,
+0x8C82=>0x6483,
+0x8C83=>0x6FC0,
+0x8C84=>0x9699,
+0x8C85=>0x6841,
+0x8C86=>0x5091,
+0x8C87=>0x6B20,
+0x8C88=>0x6C7A,
+0x8C89=>0x6F54,
+0x8C8A=>0x7A74,
+0x8C8B=>0x7D50,
+0x8C8C=>0x8840,
+0x8C8D=>0x8A23,
+0x8C8E=>0x6708,
+0x8C8F=>0x4EF6,
+0x8C90=>0x5039,
+0x8C91=>0x5026,
+0x8C92=>0x5065,
+0x8C93=>0x517C,
+0x8C94=>0x5238,
+0x8C95=>0x5263,
+0x8C96=>0x55A7,
+0x8C97=>0x570F,
+0x8C98=>0x5805,
+0x8C99=>0x5ACC,
+0x8C9A=>0x5EFA,
+0x8C9B=>0x61B2,
+0x8C9C=>0x61F8,
+0x8C9D=>0x62F3,
+0x8C9E=>0x6372,
+0x8C9F=>0x691C,
+0x8CA0=>0x6A29,
+0x8CA1=>0x727D,
+0x8CA2=>0x72AC,
+0x8CA3=>0x732E,
+0x8CA4=>0x7814,
+0x8CA5=>0x786F,
+0x8CA6=>0x7D79,
+0x8CA7=>0x770C,
+0x8CA8=>0x80A9,
+0x8CA9=>0x898B,
+0x8CAA=>0x8B19,
+0x8CAB=>0x8CE2,
+0x8CAC=>0x8ED2,
+0x8CAD=>0x9063,
+0x8CAE=>0x9375,
+0x8CAF=>0x967A,
+0x8CB0=>0x9855,
+0x8CB1=>0x9A13,
+0x8CB2=>0x9E78,
+0x8CB3=>0x5143,
+0x8CB4=>0x539F,
+0x8CB5=>0x53B3,
+0x8CB6=>0x5E7B,
+0x8CB7=>0x5F26,
+0x8CB8=>0x6E1B,
+0x8CB9=>0x6E90,
+0x8CBA=>0x7384,
+0x8CBB=>0x73FE,
+0x8CBC=>0x7D43,
+0x8CBD=>0x8237,
+0x8CBE=>0x8A00,
+0x8CBF=>0x8AFA,
+0x8CC0=>0x9650,
+0x8CC1=>0x4E4E,
+0x8CC2=>0x500B,
+0x8CC3=>0x53E4,
+0x8CC4=>0x547C,
+0x8CC5=>0x56FA,
+0x8CC6=>0x59D1,
+0x8CC7=>0x5B64,
+0x8CC8=>0x5DF1,
+0x8CC9=>0x5EAB,
+0x8CCA=>0x5F27,
+0x8CCB=>0x6238,
+0x8CCC=>0x6545,
+0x8CCD=>0x67AF,
+0x8CCE=>0x6E56,
+0x8CCF=>0x72D0,
+0x8CD0=>0x7CCA,
+0x8CD1=>0x88B4,
+0x8CD2=>0x80A1,
+0x8CD3=>0x80E1,
+0x8CD4=>0x83F0,
+0x8CD5=>0x864E,
+0x8CD6=>0x8A87,
+0x8CD7=>0x8DE8,
+0x8CD8=>0x9237,
+0x8CD9=>0x96C7,
+0x8CDA=>0x9867,
+0x8CDB=>0x9F13,
+0x8CDC=>0x4E94,
+0x8CDD=>0x4E92,
+0x8CDE=>0x4F0D,
+0x8CDF=>0x5348,
+0x8CE0=>0x5449,
+0x8CE1=>0x543E,
+0x8CE2=>0x5A2F,
+0x8CE3=>0x5F8C,
+0x8CE4=>0x5FA1,
+0x8CE5=>0x609F,
+0x8CE6=>0x68A7,
+0x8CE7=>0x6A8E,
+0x8CE8=>0x745A,
+0x8CE9=>0x7881,
+0x8CEA=>0x8A9E,
+0x8CEB=>0x8AA4,
+0x8CEC=>0x8B77,
+0x8CED=>0x9190,
+0x8CEE=>0x4E5E,
+0x8CEF=>0x9BC9,
+0x8CF0=>0x4EA4,
+0x8CF1=>0x4F7C,
+0x8CF2=>0x4FAF,
+0x8CF3=>0x5019,
+0x8CF4=>0x5016,
+0x8CF5=>0x5149,
+0x8CF6=>0x516C,
+0x8CF7=>0x529F,
+0x8CF8=>0x52B9,
+0x8CF9=>0x52FE,
+0x8CFA=>0x539A,
+0x8CFB=>0x53E3,
+0x8CFC=>0x5411,
+0x8D40=>0x540E,
+0x8D41=>0x5589,
+0x8D42=>0x5751,
+0x8D43=>0x57A2,
+0x8D44=>0x597D,
+0x8D45=>0x5B54,
+0x8D46=>0x5B5D,
+0x8D47=>0x5B8F,
+0x8D48=>0x5DE5,
+0x8D49=>0x5DE7,
+0x8D4A=>0x5DF7,
+0x8D4B=>0x5E78,
+0x8D4C=>0x5E83,
+0x8D4D=>0x5E9A,
+0x8D4E=>0x5EB7,
+0x8D4F=>0x5F18,
+0x8D50=>0x6052,
+0x8D51=>0x614C,
+0x8D52=>0x6297,
+0x8D53=>0x62D8,
+0x8D54=>0x63A7,
+0x8D55=>0x653B,
+0x8D56=>0x6602,
+0x8D57=>0x6643,
+0x8D58=>0x66F4,
+0x8D59=>0x676D,
+0x8D5A=>0x6821,
+0x8D5B=>0x6897,
+0x8D5C=>0x69CB,
+0x8D5D=>0x6C5F,
+0x8D5E=>0x6D2A,
+0x8D5F=>0x6D69,
+0x8D60=>0x6E2F,
+0x8D61=>0x6E9D,
+0x8D62=>0x7532,
+0x8D63=>0x7687,
+0x8D64=>0x786C,
+0x8D65=>0x7A3F,
+0x8D66=>0x7CE0,
+0x8D67=>0x7D05,
+0x8D68=>0x7D18,
+0x8D69=>0x7D5E,
+0x8D6A=>0x7DB1,
+0x8D6B=>0x8015,
+0x8D6C=>0x8003,
+0x8D6D=>0x80AF,
+0x8D6E=>0x80B1,
+0x8D6F=>0x8154,
+0x8D70=>0x818F,
+0x8D71=>0x822A,
+0x8D72=>0x8352,
+0x8D73=>0x884C,
+0x8D74=>0x8861,
+0x8D75=>0x8B1B,
+0x8D76=>0x8CA2,
+0x8D77=>0x8CFC,
+0x8D78=>0x90CA,
+0x8D79=>0x9175,
+0x8D7A=>0x9271,
+0x8D7B=>0x783F,
+0x8D7C=>0x92FC,
+0x8D7D=>0x95A4,
+0x8D7E=>0x964D,
+0x8D80=>0x9805,
+0x8D81=>0x9999,
+0x8D82=>0x9AD8,
+0x8D83=>0x9D3B,
+0x8D84=>0x525B,
+0x8D85=>0x52AB,
+0x8D86=>0x53F7,
+0x8D87=>0x5408,
+0x8D88=>0x58D5,
+0x8D89=>0x62F7,
+0x8D8A=>0x6FE0,
+0x8D8B=>0x8C6A,
+0x8D8C=>0x8F5F,
+0x8D8D=>0x9EB9,
+0x8D8E=>0x514B,
+0x8D8F=>0x523B,
+0x8D90=>0x544A,
+0x8D91=>0x56FD,
+0x8D92=>0x7A40,
+0x8D93=>0x9177,
+0x8D94=>0x9D60,
+0x8D95=>0x9ED2,
+0x8D96=>0x7344,
+0x8D97=>0x6F09,
+0x8D98=>0x8170,
+0x8D99=>0x7511,
+0x8D9A=>0x5FFD,
+0x8D9B=>0x60DA,
+0x8D9C=>0x9AA8,
+0x8D9D=>0x72DB,
+0x8D9E=>0x8FBC,
+0x8D9F=>0x6B64,
+0x8DA0=>0x9803,
+0x8DA1=>0x4ECA,
+0x8DA2=>0x56F0,
+0x8DA3=>0x5764,
+0x8DA4=>0x58BE,
+0x8DA5=>0x5A5A,
+0x8DA6=>0x6068,
+0x8DA7=>0x61C7,
+0x8DA8=>0x660F,
+0x8DA9=>0x6606,
+0x8DAA=>0x6839,
+0x8DAB=>0x68B1,
+0x8DAC=>0x6DF7,
+0x8DAD=>0x75D5,
+0x8DAE=>0x7D3A,
+0x8DAF=>0x826E,
+0x8DB0=>0x9B42,
+0x8DB1=>0x4E9B,
+0x8DB2=>0x4F50,
+0x8DB3=>0x53C9,
+0x8DB4=>0x5506,
+0x8DB5=>0x5D6F,
+0x8DB6=>0x5DE6,
+0x8DB7=>0x5DEE,
+0x8DB8=>0x67FB,
+0x8DB9=>0x6C99,
+0x8DBA=>0x7473,
+0x8DBB=>0x7802,
+0x8DBC=>0x8A50,
+0x8DBD=>0x9396,
+0x8DBE=>0x88DF,
+0x8DBF=>0x5750,
+0x8DC0=>0x5EA7,
+0x8DC1=>0x632B,
+0x8DC2=>0x50B5,
+0x8DC3=>0x50AC,
+0x8DC4=>0x518D,
+0x8DC5=>0x6700,
+0x8DC6=>0x54C9,
+0x8DC7=>0x585E,
+0x8DC8=>0x59BB,
+0x8DC9=>0x5BB0,
+0x8DCA=>0x5F69,
+0x8DCB=>0x624D,
+0x8DCC=>0x63A1,
+0x8DCD=>0x683D,
+0x8DCE=>0x6B73,
+0x8DCF=>0x6E08,
+0x8DD0=>0x707D,
+0x8DD1=>0x91C7,
+0x8DD2=>0x7280,
+0x8DD3=>0x7815,
+0x8DD4=>0x7826,
+0x8DD5=>0x796D,
+0x8DD6=>0x658E,
+0x8DD7=>0x7D30,
+0x8DD8=>0x83DC,
+0x8DD9=>0x88C1,
+0x8DDA=>0x8F09,
+0x8DDB=>0x969B,
+0x8DDC=>0x5264,
+0x8DDD=>0x5728,
+0x8DDE=>0x6750,
+0x8DDF=>0x7F6A,
+0x8DE0=>0x8CA1,
+0x8DE1=>0x51B4,
+0x8DE2=>0x5742,
+0x8DE3=>0x962A,
+0x8DE4=>0x583A,
+0x8DE5=>0x698A,
+0x8DE6=>0x80B4,
+0x8DE7=>0x54B2,
+0x8DE8=>0x5D0E,
+0x8DE9=>0x57FC,
+0x8DEA=>0x7895,
+0x8DEB=>0x9DFA,
+0x8DEC=>0x4F5C,
+0x8DED=>0x524A,
+0x8DEE=>0x548B,
+0x8DEF=>0x643E,
+0x8DF0=>0x6628,
+0x8DF1=>0x6714,
+0x8DF2=>0x67F5,
+0x8DF3=>0x7A84,
+0x8DF4=>0x7B56,
+0x8DF5=>0x7D22,
+0x8DF6=>0x932F,
+0x8DF7=>0x685C,
+0x8DF8=>0x9BAD,
+0x8DF9=>0x7B39,
+0x8DFA=>0x5319,
+0x8DFB=>0x518A,
+0x8DFC=>0x5237,
+0x8E40=>0x5BDF,
+0x8E41=>0x62F6,
+0x8E42=>0x64AE,
+0x8E43=>0x64E6,
+0x8E44=>0x672D,
+0x8E45=>0x6BBA,
+0x8E46=>0x85A9,
+0x8E47=>0x96D1,
+0x8E48=>0x7690,
+0x8E49=>0x9BD6,
+0x8E4A=>0x634C,
+0x8E4B=>0x9306,
+0x8E4C=>0x9BAB,
+0x8E4D=>0x76BF,
+0x8E4E=>0x6652,
+0x8E4F=>0x4E09,
+0x8E50=>0x5098,
+0x8E51=>0x53C2,
+0x8E52=>0x5C71,
+0x8E53=>0x60E8,
+0x8E54=>0x6492,
+0x8E55=>0x6563,
+0x8E56=>0x685F,
+0x8E57=>0x71E6,
+0x8E58=>0x73CA,
+0x8E59=>0x7523,
+0x8E5A=>0x7B97,
+0x8E5B=>0x7E82,
+0x8E5C=>0x8695,
+0x8E5D=>0x8B83,
+0x8E5E=>0x8CDB,
+0x8E5F=>0x9178,
+0x8E60=>0x9910,
+0x8E61=>0x65AC,
+0x8E62=>0x66AB,
+0x8E63=>0x6B8B,
+0x8E64=>0x4ED5,
+0x8E65=>0x4ED4,
+0x8E66=>0x4F3A,
+0x8E67=>0x4F7F,
+0x8E68=>0x523A,
+0x8E69=>0x53F8,
+0x8E6A=>0x53F2,
+0x8E6B=>0x55E3,
+0x8E6C=>0x56DB,
+0x8E6D=>0x58EB,
+0x8E6E=>0x59CB,
+0x8E6F=>0x59C9,
+0x8E70=>0x59FF,
+0x8E71=>0x5B50,
+0x8E72=>0x5C4D,
+0x8E73=>0x5E02,
+0x8E74=>0x5E2B,
+0x8E75=>0x5FD7,
+0x8E76=>0x601D,
+0x8E77=>0x6307,
+0x8E78=>0x652F,
+0x8E79=>0x5B5C,
+0x8E7A=>0x65AF,
+0x8E7B=>0x65BD,
+0x8E7C=>0x65E8,
+0x8E7D=>0x679D,
+0x8E7E=>0x6B62,
+0x8E80=>0x6B7B,
+0x8E81=>0x6C0F,
+0x8E82=>0x7345,
+0x8E83=>0x7949,
+0x8E84=>0x79C1,
+0x8E85=>0x7CF8,
+0x8E86=>0x7D19,
+0x8E87=>0x7D2B,
+0x8E88=>0x80A2,
+0x8E89=>0x8102,
+0x8E8A=>0x81F3,
+0x8E8B=>0x8996,
+0x8E8C=>0x8A5E,
+0x8E8D=>0x8A69,
+0x8E8E=>0x8A66,
+0x8E8F=>0x8A8C,
+0x8E90=>0x8AEE,
+0x8E91=>0x8CC7,
+0x8E92=>0x8CDC,
+0x8E93=>0x96CC,
+0x8E94=>0x98FC,
+0x8E95=>0x6B6F,
+0x8E96=>0x4E8B,
+0x8E97=>0x4F3C,
+0x8E98=>0x4F8D,
+0x8E99=>0x5150,
+0x8E9A=>0x5B57,
+0x8E9B=>0x5BFA,
+0x8E9C=>0x6148,
+0x8E9D=>0x6301,
+0x8E9E=>0x6642,
+0x8E9F=>0x6B21,
+0x8EA0=>0x6ECB,
+0x8EA1=>0x6CBB,
+0x8EA2=>0x723E,
+0x8EA3=>0x74BD,
+0x8EA4=>0x75D4,
+0x8EA5=>0x78C1,
+0x8EA6=>0x793A,
+0x8EA7=>0x800C,
+0x8EA8=>0x8033,
+0x8EA9=>0x81EA,
+0x8EAA=>0x8494,
+0x8EAB=>0x8F9E,
+0x8EAC=>0x6C50,
+0x8EAD=>0x9E7F,
+0x8EAE=>0x5F0F,
+0x8EAF=>0x8B58,
+0x8EB0=>0x9D2B,
+0x8EB1=>0x7AFA,
+0x8EB2=>0x8EF8,
+0x8EB3=>0x5B8D,
+0x8EB4=>0x96EB,
+0x8EB5=>0x4E03,
+0x8EB6=>0x53F1,
+0x8EB7=>0x57F7,
+0x8EB8=>0x5931,
+0x8EB9=>0x5AC9,
+0x8EBA=>0x5BA4,
+0x8EBB=>0x6089,
+0x8EBC=>0x6E7F,
+0x8EBD=>0x6F06,
+0x8EBE=>0x75BE,
+0x8EBF=>0x8CEA,
+0x8EC0=>0x5B9F,
+0x8EC1=>0x8500,
+0x8EC2=>0x7BE0,
+0x8EC3=>0x5072,
+0x8EC4=>0x67F4,
+0x8EC5=>0x829D,
+0x8EC6=>0x5C61,
+0x8EC7=>0x854A,
+0x8EC8=>0x7E1E,
+0x8EC9=>0x820E,
+0x8ECA=>0x5199,
+0x8ECB=>0x5C04,
+0x8ECC=>0x6368,
+0x8ECD=>0x8D66,
+0x8ECE=>0x659C,
+0x8ECF=>0x716E,
+0x8ED0=>0x793E,
+0x8ED1=>0x7D17,
+0x8ED2=>0x8005,
+0x8ED3=>0x8B1D,
+0x8ED4=>0x8ECA,
+0x8ED5=>0x906E,
+0x8ED6=>0x86C7,
+0x8ED7=>0x90AA,
+0x8ED8=>0x501F,
+0x8ED9=>0x52FA,
+0x8EDA=>0x5C3A,
+0x8EDB=>0x6753,
+0x8EDC=>0x707C,
+0x8EDD=>0x7235,
+0x8EDE=>0x914C,
+0x8EDF=>0x91C8,
+0x8EE0=>0x932B,
+0x8EE1=>0x82E5,
+0x8EE2=>0x5BC2,
+0x8EE3=>0x5F31,
+0x8EE4=>0x60F9,
+0x8EE5=>0x4E3B,
+0x8EE6=>0x53D6,
+0x8EE7=>0x5B88,
+0x8EE8=>0x624B,
+0x8EE9=>0x6731,
+0x8EEA=>0x6B8A,
+0x8EEB=>0x72E9,
+0x8EEC=>0x73E0,
+0x8EED=>0x7A2E,
+0x8EEE=>0x816B,
+0x8EEF=>0x8DA3,
+0x8EF0=>0x9152,
+0x8EF1=>0x9996,
+0x8EF2=>0x5112,
+0x8EF3=>0x53D7,
+0x8EF4=>0x546A,
+0x8EF5=>0x5BFF,
+0x8EF6=>0x6388,
+0x8EF7=>0x6A39,
+0x8EF8=>0x7DAC,
+0x8EF9=>0x9700,
+0x8EFA=>0x56DA,
+0x8EFB=>0x53CE,
+0x8EFC=>0x5468,
+0x8F40=>0x5B97,
+0x8F41=>0x5C31,
+0x8F42=>0x5DDE,
+0x8F43=>0x4FEE,
+0x8F44=>0x6101,
+0x8F45=>0x62FE,
+0x8F46=>0x6D32,
+0x8F47=>0x79C0,
+0x8F48=>0x79CB,
+0x8F49=>0x7D42,
+0x8F4A=>0x7E4D,
+0x8F4B=>0x7FD2,
+0x8F4C=>0x81ED,
+0x8F4D=>0x821F,
+0x8F4E=>0x8490,
+0x8F4F=>0x8846,
+0x8F50=>0x8972,
+0x8F51=>0x8B90,
+0x8F52=>0x8E74,
+0x8F53=>0x8F2F,
+0x8F54=>0x9031,
+0x8F55=>0x914B,
+0x8F56=>0x916C,
+0x8F57=>0x96C6,
+0x8F58=>0x919C,
+0x8F59=>0x4EC0,
+0x8F5A=>0x4F4F,
+0x8F5B=>0x5145,
+0x8F5C=>0x5341,
+0x8F5D=>0x5F93,
+0x8F5E=>0x620E,
+0x8F5F=>0x67D4,
+0x8F60=>0x6C41,
+0x8F61=>0x6E0B,
+0x8F62=>0x7363,
+0x8F63=>0x7E26,
+0x8F64=>0x91CD,
+0x8F65=>0x9283,
+0x8F66=>0x53D4,
+0x8F67=>0x5919,
+0x8F68=>0x5BBF,
+0x8F69=>0x6DD1,
+0x8F6A=>0x795D,
+0x8F6B=>0x7E2E,
+0x8F6C=>0x7C9B,
+0x8F6D=>0x587E,
+0x8F6E=>0x719F,
+0x8F6F=>0x51FA,
+0x8F70=>0x8853,
+0x8F71=>0x8FF0,
+0x8F72=>0x4FCA,
+0x8F73=>0x5CFB,
+0x8F74=>0x6625,
+0x8F75=>0x77AC,
+0x8F76=>0x7AE3,
+0x8F77=>0x821C,
+0x8F78=>0x99FF,
+0x8F79=>0x51C6,
+0x8F7A=>0x5FAA,
+0x8F7B=>0x65EC,
+0x8F7C=>0x696F,
+0x8F7D=>0x6B89,
+0x8F7E=>0x6DF3,
+0x8F80=>0x6E96,
+0x8F81=>0x6F64,
+0x8F82=>0x76FE,
+0x8F83=>0x7D14,
+0x8F84=>0x5DE1,
+0x8F85=>0x9075,
+0x8F86=>0x9187,
+0x8F87=>0x9806,
+0x8F88=>0x51E6,
+0x8F89=>0x521D,
+0x8F8A=>0x6240,
+0x8F8B=>0x6691,
+0x8F8C=>0x66D9,
+0x8F8D=>0x6E1A,
+0x8F8E=>0x5EB6,
+0x8F8F=>0x7DD2,
+0x8F90=>0x7F72,
+0x8F91=>0x66F8,
+0x8F92=>0x85AF,
+0x8F93=>0x85F7,
+0x8F94=>0x8AF8,
+0x8F95=>0x52A9,
+0x8F96=>0x53D9,
+0x8F97=>0x5973,
+0x8F98=>0x5E8F,
+0x8F99=>0x5F90,
+0x8F9A=>0x6055,
+0x8F9B=>0x92E4,
+0x8F9C=>0x9664,
+0x8F9D=>0x50B7,
+0x8F9E=>0x511F,
+0x8F9F=>0x52DD,
+0x8FA0=>0x5320,
+0x8FA1=>0x5347,
+0x8FA2=>0x53EC,
+0x8FA3=>0x54E8,
+0x8FA4=>0x5546,
+0x8FA5=>0x5531,
+0x8FA6=>0x5617,
+0x8FA7=>0x5968,
+0x8FA8=>0x59BE,
+0x8FA9=>0x5A3C,
+0x8FAA=>0x5BB5,
+0x8FAB=>0x5C06,
+0x8FAC=>0x5C0F,
+0x8FAD=>0x5C11,
+0x8FAE=>0x5C1A,
+0x8FAF=>0x5E84,
+0x8FB0=>0x5E8A,
+0x8FB1=>0x5EE0,
+0x8FB2=>0x5F70,
+0x8FB3=>0x627F,
+0x8FB4=>0x6284,
+0x8FB5=>0x62DB,
+0x8FB6=>0x638C,
+0x8FB7=>0x6377,
+0x8FB8=>0x6607,
+0x8FB9=>0x660C,
+0x8FBA=>0x662D,
+0x8FBB=>0x6676,
+0x8FBC=>0x677E,
+0x8FBD=>0x68A2,
+0x8FBE=>0x6A1F,
+0x8FBF=>0x6A35,
+0x8FC0=>0x6CBC,
+0x8FC1=>0x6D88,
+0x8FC2=>0x6E09,
+0x8FC3=>0x6E58,
+0x8FC4=>0x713C,
+0x8FC5=>0x7126,
+0x8FC6=>0x7167,
+0x8FC7=>0x75C7,
+0x8FC8=>0x7701,
+0x8FC9=>0x785D,
+0x8FCA=>0x7901,
+0x8FCB=>0x7965,
+0x8FCC=>0x79F0,
+0x8FCD=>0x7AE0,
+0x8FCE=>0x7B11,
+0x8FCF=>0x7CA7,
+0x8FD0=>0x7D39,
+0x8FD1=>0x8096,
+0x8FD2=>0x83D6,
+0x8FD3=>0x848B,
+0x8FD4=>0x8549,
+0x8FD5=>0x885D,
+0x8FD6=>0x88F3,
+0x8FD7=>0x8A1F,
+0x8FD8=>0x8A3C,
+0x8FD9=>0x8A54,
+0x8FDA=>0x8A73,
+0x8FDB=>0x8C61,
+0x8FDC=>0x8CDE,
+0x8FDD=>0x91A4,
+0x8FDE=>0x9266,
+0x8FDF=>0x937E,
+0x8FE0=>0x9418,
+0x8FE1=>0x969C,
+0x8FE2=>0x9798,
+0x8FE3=>0x4E0A,
+0x8FE4=>0x4E08,
+0x8FE5=>0x4E1E,
+0x8FE6=>0x4E57,
+0x8FE7=>0x5197,
+0x8FE8=>0x5270,
+0x8FE9=>0x57CE,
+0x8FEA=>0x5834,
+0x8FEB=>0x58CC,
+0x8FEC=>0x5B22,
+0x8FED=>0x5E38,
+0x8FEE=>0x60C5,
+0x8FEF=>0x64FE,
+0x8FF0=>0x6761,
+0x8FF1=>0x6756,
+0x8FF2=>0x6D44,
+0x8FF3=>0x72B6,
+0x8FF4=>0x7573,
+0x8FF5=>0x7A63,
+0x8FF6=>0x84B8,
+0x8FF7=>0x8B72,
+0x8FF8=>0x91B8,
+0x8FF9=>0x9320,
+0x8FFA=>0x5631,
+0x8FFB=>0x57F4,
+0x8FFC=>0x98FE,
+0x9040=>0x62ED,
+0x9041=>0x690D,
+0x9042=>0x6B96,
+0x9043=>0x71ED,
+0x9044=>0x7E54,
+0x9045=>0x8077,
+0x9046=>0x8272,
+0x9047=>0x89E6,
+0x9048=>0x98DF,
+0x9049=>0x8755,
+0x904A=>0x8FB1,
+0x904B=>0x5C3B,
+0x904C=>0x4F38,
+0x904D=>0x4FE1,
+0x904E=>0x4FB5,
+0x904F=>0x5507,
+0x9050=>0x5A20,
+0x9051=>0x5BDD,
+0x9052=>0x5BE9,
+0x9053=>0x5FC3,
+0x9054=>0x614E,
+0x9055=>0x632F,
+0x9056=>0x65B0,
+0x9057=>0x664B,
+0x9058=>0x68EE,
+0x9059=>0x699B,
+0x905A=>0x6D78,
+0x905B=>0x6DF1,
+0x905C=>0x7533,
+0x905D=>0x75B9,
+0x905E=>0x771F,
+0x905F=>0x795E,
+0x9060=>0x79E6,
+0x9061=>0x7D33,
+0x9062=>0x81E3,
+0x9063=>0x82AF,
+0x9064=>0x85AA,
+0x9065=>0x89AA,
+0x9066=>0x8A3A,
+0x9067=>0x8EAB,
+0x9068=>0x8F9B,
+0x9069=>0x9032,
+0x906A=>0x91DD,
+0x906B=>0x9707,
+0x906C=>0x4EBA,
+0x906D=>0x4EC1,
+0x906E=>0x5203,
+0x906F=>0x5875,
+0x9070=>0x58EC,
+0x9071=>0x5C0B,
+0x9072=>0x751A,
+0x9073=>0x5C3D,
+0x9074=>0x814E,
+0x9075=>0x8A0A,
+0x9076=>0x8FC5,
+0x9077=>0x9663,
+0x9078=>0x976D,
+0x9079=>0x7B25,
+0x907A=>0x8ACF,
+0x907B=>0x9808,
+0x907C=>0x9162,
+0x907D=>0x56F3,
+0x907E=>0x53A8,
+0x9080=>0x9017,
+0x9081=>0x5439,
+0x9082=>0x5782,
+0x9083=>0x5E25,
+0x9084=>0x63A8,
+0x9085=>0x6C34,
+0x9086=>0x708A,
+0x9087=>0x7761,
+0x9088=>0x7C8B,
+0x9089=>0x7FE0,
+0x908A=>0x8870,
+0x908B=>0x9042,
+0x908C=>0x9154,
+0x908D=>0x9310,
+0x908E=>0x9318,
+0x908F=>0x968F,
+0x9090=>0x745E,
+0x9091=>0x9AC4,
+0x9092=>0x5D07,
+0x9093=>0x5D69,
+0x9094=>0x6570,
+0x9095=>0x67A2,
+0x9096=>0x8DA8,
+0x9097=>0x96DB,
+0x9098=>0x636E,
+0x9099=>0x6749,
+0x909A=>0x6919,
+0x909B=>0x83C5,
+0x909C=>0x9817,
+0x909D=>0x96C0,
+0x909E=>0x88FE,
+0x909F=>0x6F84,
+0x90A0=>0x647A,
+0x90A1=>0x5BF8,
+0x90A2=>0x4E16,
+0x90A3=>0x702C,
+0x90A4=>0x755D,
+0x90A5=>0x662F,
+0x90A6=>0x51C4,
+0x90A7=>0x5236,
+0x90A8=>0x52E2,
+0x90A9=>0x59D3,
+0x90AA=>0x5F81,
+0x90AB=>0x6027,
+0x90AC=>0x6210,
+0x90AD=>0x653F,
+0x90AE=>0x6574,
+0x90AF=>0x661F,
+0x90B0=>0x6674,
+0x90B1=>0x68F2,
+0x90B2=>0x6816,
+0x90B3=>0x6B63,
+0x90B4=>0x6E05,
+0x90B5=>0x7272,
+0x90B6=>0x751F,
+0x90B7=>0x76DB,
+0x90B8=>0x7CBE,
+0x90B9=>0x8056,
+0x90BA=>0x58F0,
+0x90BB=>0x88FD,
+0x90BC=>0x897F,
+0x90BD=>0x8AA0,
+0x90BE=>0x8A93,
+0x90BF=>0x8ACB,
+0x90C0=>0x901D,
+0x90C1=>0x9192,
+0x90C2=>0x9752,
+0x90C3=>0x9759,
+0x90C4=>0x6589,
+0x90C5=>0x7A0E,
+0x90C6=>0x8106,
+0x90C7=>0x96BB,
+0x90C8=>0x5E2D,
+0x90C9=>0x60DC,
+0x90CA=>0x621A,
+0x90CB=>0x65A5,
+0x90CC=>0x6614,
+0x90CD=>0x6790,
+0x90CE=>0x77F3,
+0x90CF=>0x7A4D,
+0x90D0=>0x7C4D,
+0x90D1=>0x7E3E,
+0x90D2=>0x810A,
+0x90D3=>0x8CAC,
+0x90D4=>0x8D64,
+0x90D5=>0x8DE1,
+0x90D6=>0x8E5F,
+0x90D7=>0x78A9,
+0x90D8=>0x5207,
+0x90D9=>0x62D9,
+0x90DA=>0x63A5,
+0x90DB=>0x6442,
+0x90DC=>0x6298,
+0x90DD=>0x8A2D,
+0x90DE=>0x7A83,
+0x90DF=>0x7BC0,
+0x90E0=>0x8AAC,
+0x90E1=>0x96EA,
+0x90E2=>0x7D76,
+0x90E3=>0x820C,
+0x90E4=>0x8749,
+0x90E5=>0x4ED9,
+0x90E6=>0x5148,
+0x90E7=>0x5343,
+0x90E8=>0x5360,
+0x90E9=>0x5BA3,
+0x90EA=>0x5C02,
+0x90EB=>0x5C16,
+0x90EC=>0x5DDD,
+0x90ED=>0x6226,
+0x90EE=>0x6247,
+0x90EF=>0x64B0,
+0x90F0=>0x6813,
+0x90F1=>0x6834,
+0x90F2=>0x6CC9,
+0x90F3=>0x6D45,
+0x90F4=>0x6D17,
+0x90F5=>0x67D3,
+0x90F6=>0x6F5C,
+0x90F7=>0x714E,
+0x90F8=>0x717D,
+0x90F9=>0x65CB,
+0x90FA=>0x7A7F,
+0x90FB=>0x7BAD,
+0x90FC=>0x7DDA,
+0x9140=>0x7E4A,
+0x9141=>0x7FA8,
+0x9142=>0x817A,
+0x9143=>0x821B,
+0x9144=>0x8239,
+0x9145=>0x85A6,
+0x9146=>0x8A6E,
+0x9147=>0x8CCE,
+0x9148=>0x8DF5,
+0x9149=>0x9078,
+0x914A=>0x9077,
+0x914B=>0x92AD,
+0x914C=>0x9291,
+0x914D=>0x9583,
+0x914E=>0x9BAE,
+0x914F=>0x524D,
+0x9150=>0x5584,
+0x9151=>0x6F38,
+0x9152=>0x7136,
+0x9153=>0x5168,
+0x9154=>0x7985,
+0x9155=>0x7E55,
+0x9156=>0x81B3,
+0x9157=>0x7CCE,
+0x9158=>0x564C,
+0x9159=>0x5851,
+0x915A=>0x5CA8,
+0x915B=>0x63AA,
+0x915C=>0x66FE,
+0x915D=>0x66FD,
+0x915E=>0x695A,
+0x915F=>0x72D9,
+0x9160=>0x758F,
+0x9161=>0x758E,
+0x9162=>0x790E,
+0x9163=>0x7956,
+0x9164=>0x79DF,
+0x9165=>0x7C97,
+0x9166=>0x7D20,
+0x9167=>0x7D44,
+0x9168=>0x8607,
+0x9169=>0x8A34,
+0x916A=>0x963B,
+0x916B=>0x9061,
+0x916C=>0x9F20,
+0x916D=>0x50E7,
+0x916E=>0x5275,
+0x916F=>0x53CC,
+0x9170=>0x53E2,
+0x9171=>0x5009,
+0x9172=>0x55AA,
+0x9173=>0x58EE,
+0x9174=>0x594F,
+0x9175=>0x723D,
+0x9176=>0x5B8B,
+0x9177=>0x5C64,
+0x9178=>0x531D,
+0x9179=>0x60E3,
+0x917A=>0x60F3,
+0x917B=>0x635C,
+0x917C=>0x6383,
+0x917D=>0x633F,
+0x917E=>0x63BB,
+0x9180=>0x64CD,
+0x9181=>0x65E9,
+0x9182=>0x66F9,
+0x9183=>0x5DE3,
+0x9184=>0x69CD,
+0x9185=>0x69FD,
+0x9186=>0x6F15,
+0x9187=>0x71E5,
+0x9188=>0x4E89,
+0x9189=>0x75E9,
+0x918A=>0x76F8,
+0x918B=>0x7A93,
+0x918C=>0x7CDF,
+0x918D=>0x7DCF,
+0x918E=>0x7D9C,
+0x918F=>0x8061,
+0x9190=>0x8349,
+0x9191=>0x8358,
+0x9192=>0x846C,
+0x9193=>0x84BC,
+0x9194=>0x85FB,
+0x9195=>0x88C5,
+0x9196=>0x8D70,
+0x9197=>0x9001,
+0x9198=>0x906D,
+0x9199=>0x9397,
+0x919A=>0x971C,
+0x919B=>0x9A12,
+0x919C=>0x50CF,
+0x919D=>0x5897,
+0x919E=>0x618E,
+0x919F=>0x81D3,
+0x91A0=>0x8535,
+0x91A1=>0x8D08,
+0x91A2=>0x9020,
+0x91A3=>0x4FC3,
+0x91A4=>0x5074,
+0x91A5=>0x5247,
+0x91A6=>0x5373,
+0x91A7=>0x606F,
+0x91A8=>0x6349,
+0x91A9=>0x675F,
+0x91AA=>0x6E2C,
+0x91AB=>0x8DB3,
+0x91AC=>0x901F,
+0x91AD=>0x4FD7,
+0x91AE=>0x5C5E,
+0x91AF=>0x8CCA,
+0x91B0=>0x65CF,
+0x91B1=>0x7D9A,
+0x91B2=>0x5352,
+0x91B3=>0x8896,
+0x91B4=>0x5176,
+0x91B5=>0x63C3,
+0x91B6=>0x5B58,
+0x91B7=>0x5B6B,
+0x91B8=>0x5C0A,
+0x91B9=>0x640D,
+0x91BA=>0x6751,
+0x91BB=>0x905C,
+0x91BC=>0x4ED6,
+0x91BD=>0x591A,
+0x91BE=>0x592A,
+0x91BF=>0x6C70,
+0x91C0=>0x8A51,
+0x91C1=>0x553E,
+0x91C2=>0x5815,
+0x91C3=>0x59A5,
+0x91C4=>0x60F0,
+0x91C5=>0x6253,
+0x91C6=>0x67C1,
+0x91C7=>0x8235,
+0x91C8=>0x6955,
+0x91C9=>0x9640,
+0x91CA=>0x99C4,
+0x91CB=>0x9A28,
+0x91CC=>0x4F53,
+0x91CD=>0x5806,
+0x91CE=>0x5BFE,
+0x91CF=>0x8010,
+0x91D0=>0x5CB1,
+0x91D1=>0x5E2F,
+0x91D2=>0x5F85,
+0x91D3=>0x6020,
+0x91D4=>0x614B,
+0x91D5=>0x6234,
+0x91D6=>0x66FF,
+0x91D7=>0x6CF0,
+0x91D8=>0x6EDE,
+0x91D9=>0x80CE,
+0x91DA=>0x817F,
+0x91DB=>0x82D4,
+0x91DC=>0x888B,
+0x91DD=>0x8CB8,
+0x91DE=>0x9000,
+0x91DF=>0x902E,
+0x91E0=>0x968A,
+0x91E1=>0x9EDB,
+0x91E2=>0x9BDB,
+0x91E3=>0x4EE3,
+0x91E4=>0x53F0,
+0x91E5=>0x5927,
+0x91E6=>0x7B2C,
+0x91E7=>0x918D,
+0x91E8=>0x984C,
+0x91E9=>0x9DF9,
+0x91EA=>0x6EDD,
+0x91EB=>0x7027,
+0x91EC=>0x5353,
+0x91ED=>0x5544,
+0x91EE=>0x5B85,
+0x91EF=>0x6258,
+0x91F0=>0x629E,
+0x91F1=>0x62D3,
+0x91F2=>0x6CA2,
+0x91F3=>0x6FEF,
+0x91F4=>0x7422,
+0x91F5=>0x8A17,
+0x91F6=>0x9438,
+0x91F7=>0x6FC1,
+0x91F8=>0x8AFE,
+0x91F9=>0x8338,
+0x91FA=>0x51E7,
+0x91FB=>0x86F8,
+0x91FC=>0x53EA,
+0x9240=>0x53E9,
+0x9241=>0x4F46,
+0x9242=>0x9054,
+0x9243=>0x8FB0,
+0x9244=>0x596A,
+0x9245=>0x8131,
+0x9246=>0x5DFD,
+0x9247=>0x7AEA,
+0x9248=>0x8FBF,
+0x9249=>0x68DA,
+0x924A=>0x8C37,
+0x924B=>0x72F8,
+0x924C=>0x9C48,
+0x924D=>0x6A3D,
+0x924E=>0x8AB0,
+0x924F=>0x4E39,
+0x9250=>0x5358,
+0x9251=>0x5606,
+0x9252=>0x5766,
+0x9253=>0x62C5,
+0x9254=>0x63A2,
+0x9255=>0x65E6,
+0x9256=>0x6B4E,
+0x9257=>0x6DE1,
+0x9258=>0x6E5B,
+0x9259=>0x70AD,
+0x925A=>0x77ED,
+0x925B=>0x7AEF,
+0x925C=>0x7BAA,
+0x925D=>0x7DBB,
+0x925E=>0x803D,
+0x925F=>0x80C6,
+0x9260=>0x86CB,
+0x9261=>0x8A95,
+0x9262=>0x935B,
+0x9263=>0x56E3,
+0x9264=>0x58C7,
+0x9265=>0x5F3E,
+0x9266=>0x65AD,
+0x9267=>0x6696,
+0x9268=>0x6A80,
+0x9269=>0x6BB5,
+0x926A=>0x7537,
+0x926B=>0x8AC7,
+0x926C=>0x5024,
+0x926D=>0x77E5,
+0x926E=>0x5730,
+0x926F=>0x5F1B,
+0x9270=>0x6065,
+0x9271=>0x667A,
+0x9272=>0x6C60,
+0x9273=>0x75F4,
+0x9274=>0x7A1A,
+0x9275=>0x7F6E,
+0x9276=>0x81F4,
+0x9277=>0x8718,
+0x9278=>0x9045,
+0x9279=>0x99B3,
+0x927A=>0x7BC9,
+0x927B=>0x755C,
+0x927C=>0x7AF9,
+0x927D=>0x7B51,
+0x927E=>0x84C4,
+0x9280=>0x9010,
+0x9281=>0x79E9,
+0x9282=>0x7A92,
+0x9283=>0x8336,
+0x9284=>0x5AE1,
+0x9285=>0x7740,
+0x9286=>0x4E2D,
+0x9287=>0x4EF2,
+0x9288=>0x5B99,
+0x9289=>0x5FE0,
+0x928A=>0x62BD,
+0x928B=>0x663C,
+0x928C=>0x67F1,
+0x928D=>0x6CE8,
+0x928E=>0x866B,
+0x928F=>0x8877,
+0x9290=>0x8A3B,
+0x9291=>0x914E,
+0x9292=>0x92F3,
+0x9293=>0x99D0,
+0x9294=>0x6A17,
+0x9295=>0x7026,
+0x9296=>0x732A,
+0x9297=>0x82E7,
+0x9298=>0x8457,
+0x9299=>0x8CAF,
+0x929A=>0x4E01,
+0x929B=>0x5146,
+0x929C=>0x51CB,
+0x929D=>0x558B,
+0x929E=>0x5BF5,
+0x929F=>0x5E16,
+0x92A0=>0x5E33,
+0x92A1=>0x5E81,
+0x92A2=>0x5F14,
+0x92A3=>0x5F35,
+0x92A4=>0x5F6B,
+0x92A5=>0x5FB4,
+0x92A6=>0x61F2,
+0x92A7=>0x6311,
+0x92A8=>0x66A2,
+0x92A9=>0x671D,
+0x92AA=>0x6F6E,
+0x92AB=>0x7252,
+0x92AC=>0x753A,
+0x92AD=>0x773A,
+0x92AE=>0x8074,
+0x92AF=>0x8139,
+0x92B0=>0x8178,
+0x92B1=>0x8776,
+0x92B2=>0x8ABF,
+0x92B3=>0x8ADC,
+0x92B4=>0x8D85,
+0x92B5=>0x8DF3,
+0x92B6=>0x929A,
+0x92B7=>0x9577,
+0x92B8=>0x9802,
+0x92B9=>0x9CE5,
+0x92BA=>0x52C5,
+0x92BB=>0x6357,
+0x92BC=>0x76F4,
+0x92BD=>0x6715,
+0x92BE=>0x6C88,
+0x92BF=>0x73CD,
+0x92C0=>0x8CC3,
+0x92C1=>0x93AE,
+0x92C2=>0x9673,
+0x92C3=>0x6D25,
+0x92C4=>0x589C,
+0x92C5=>0x690E,
+0x92C6=>0x69CC,
+0x92C7=>0x8FFD,
+0x92C8=>0x939A,
+0x92C9=>0x75DB,
+0x92CA=>0x901A,
+0x92CB=>0x585A,
+0x92CC=>0x6802,
+0x92CD=>0x63B4,
+0x92CE=>0x69FB,
+0x92CF=>0x4F43,
+0x92D0=>0x6F2C,
+0x92D1=>0x67D8,
+0x92D2=>0x8FBB,
+0x92D3=>0x8526,
+0x92D4=>0x7DB4,
+0x92D5=>0x9354,
+0x92D6=>0x693F,
+0x92D7=>0x6F70,
+0x92D8=>0x576A,
+0x92D9=>0x58F7,
+0x92DA=>0x5B2C,
+0x92DB=>0x7D2C,
+0x92DC=>0x722A,
+0x92DD=>0x540A,
+0x92DE=>0x91E3,
+0x92DF=>0x9DB4,
+0x92E0=>0x4EAD,
+0x92E1=>0x4F4E,
+0x92E2=>0x505C,
+0x92E3=>0x5075,
+0x92E4=>0x5243,
+0x92E5=>0x8C9E,
+0x92E6=>0x5448,
+0x92E7=>0x5824,
+0x92E8=>0x5B9A,
+0x92E9=>0x5E1D,
+0x92EA=>0x5E95,
+0x92EB=>0x5EAD,
+0x92EC=>0x5EF7,
+0x92ED=>0x5F1F,
+0x92EE=>0x608C,
+0x92EF=>0x62B5,
+0x92F0=>0x633A,
+0x92F1=>0x63D0,
+0x92F2=>0x68AF,
+0x92F3=>0x6C40,
+0x92F4=>0x7887,
+0x92F5=>0x798E,
+0x92F6=>0x7A0B,
+0x92F7=>0x7DE0,
+0x92F8=>0x8247,
+0x92F9=>0x8A02,
+0x92FA=>0x8AE6,
+0x92FB=>0x8E44,
+0x92FC=>0x9013,
+0x9340=>0x90B8,
+0x9341=>0x912D,
+0x9342=>0x91D8,
+0x9343=>0x9F0E,
+0x9344=>0x6CE5,
+0x9345=>0x6458,
+0x9346=>0x64E2,
+0x9347=>0x6575,
+0x9348=>0x6EF4,
+0x9349=>0x7684,
+0x934A=>0x7B1B,
+0x934B=>0x9069,
+0x934C=>0x93D1,
+0x934D=>0x6EBA,
+0x934E=>0x54F2,
+0x934F=>0x5FB9,
+0x9350=>0x64A4,
+0x9351=>0x8F4D,
+0x9352=>0x8FED,
+0x9353=>0x9244,
+0x9354=>0x5178,
+0x9355=>0x586B,
+0x9356=>0x5929,
+0x9357=>0x5C55,
+0x9358=>0x5E97,
+0x9359=>0x6DFB,
+0x935A=>0x7E8F,
+0x935B=>0x751C,
+0x935C=>0x8CBC,
+0x935D=>0x8EE2,
+0x935E=>0x985B,
+0x935F=>0x70B9,
+0x9360=>0x4F1D,
+0x9361=>0x6BBF,
+0x9362=>0x6FB1,
+0x9363=>0x7530,
+0x9364=>0x96FB,
+0x9365=>0x514E,
+0x9366=>0x5410,
+0x9367=>0x5835,
+0x9368=>0x5857,
+0x9369=>0x59AC,
+0x936A=>0x5C60,
+0x936B=>0x5F92,
+0x936C=>0x6597,
+0x936D=>0x675C,
+0x936E=>0x6E21,
+0x936F=>0x767B,
+0x9370=>0x83DF,
+0x9371=>0x8CED,
+0x9372=>0x9014,
+0x9373=>0x90FD,
+0x9374=>0x934D,
+0x9375=>0x7825,
+0x9376=>0x783A,
+0x9377=>0x52AA,
+0x9378=>0x5EA6,
+0x9379=>0x571F,
+0x937A=>0x5974,
+0x937B=>0x6012,
+0x937C=>0x5012,
+0x937D=>0x515A,
+0x937E=>0x51AC,
+0x9380=>0x51CD,
+0x9381=>0x5200,
+0x9382=>0x5510,
+0x9383=>0x5854,
+0x9384=>0x5858,
+0x9385=>0x5957,
+0x9386=>0x5B95,
+0x9387=>0x5CF6,
+0x9388=>0x5D8B,
+0x9389=>0x60BC,
+0x938A=>0x6295,
+0x938B=>0x642D,
+0x938C=>0x6771,
+0x938D=>0x6843,
+0x938E=>0x68BC,
+0x938F=>0x68DF,
+0x9390=>0x76D7,
+0x9391=>0x6DD8,
+0x9392=>0x6E6F,
+0x9393=>0x6D9B,
+0x9394=>0x706F,
+0x9395=>0x71C8,
+0x9396=>0x5F53,
+0x9397=>0x75D8,
+0x9398=>0x7977,
+0x9399=>0x7B49,
+0x939A=>0x7B54,
+0x939B=>0x7B52,
+0x939C=>0x7CD6,
+0x939D=>0x7D71,
+0x939E=>0x5230,
+0x939F=>0x8463,
+0x93A0=>0x8569,
+0x93A1=>0x85E4,
+0x93A2=>0x8A0E,
+0x93A3=>0x8B04,
+0x93A4=>0x8C46,
+0x93A5=>0x8E0F,
+0x93A6=>0x9003,
+0x93A7=>0x900F,
+0x93A8=>0x9419,
+0x93A9=>0x9676,
+0x93AA=>0x982D,
+0x93AB=>0x9A30,
+0x93AC=>0x95D8,
+0x93AD=>0x50CD,
+0x93AE=>0x52D5,
+0x93AF=>0x540C,
+0x93B0=>0x5802,
+0x93B1=>0x5C0E,
+0x93B2=>0x61A7,
+0x93B3=>0x649E,
+0x93B4=>0x6D1E,
+0x93B5=>0x77B3,
+0x93B6=>0x7AE5,
+0x93B7=>0x80F4,
+0x93B8=>0x8404,
+0x93B9=>0x9053,
+0x93BA=>0x9285,
+0x93BB=>0x5CE0,
+0x93BC=>0x9D07,
+0x93BD=>0x533F,
+0x93BE=>0x5F97,
+0x93BF=>0x5FB3,
+0x93C0=>0x6D9C,
+0x93C1=>0x7279,
+0x93C2=>0x7763,
+0x93C3=>0x79BF,
+0x93C4=>0x7BE4,
+0x93C5=>0x6BD2,
+0x93C6=>0x72EC,
+0x93C7=>0x8AAD,
+0x93C8=>0x6803,
+0x93C9=>0x6A61,
+0x93CA=>0x51F8,
+0x93CB=>0x7A81,
+0x93CC=>0x6934,
+0x93CD=>0x5C4A,
+0x93CE=>0x9CF6,
+0x93CF=>0x82EB,
+0x93D0=>0x5BC5,
+0x93D1=>0x9149,
+0x93D2=>0x701E,
+0x93D3=>0x5678,
+0x93D4=>0x5C6F,
+0x93D5=>0x60C7,
+0x93D6=>0x6566,
+0x93D7=>0x6C8C,
+0x93D8=>0x8C5A,
+0x93D9=>0x9041,
+0x93DA=>0x9813,
+0x93DB=>0x5451,
+0x93DC=>0x66C7,
+0x93DD=>0x920D,
+0x93DE=>0x5948,
+0x93DF=>0x90A3,
+0x93E0=>0x5185,
+0x93E1=>0x4E4D,
+0x93E2=>0x51EA,
+0x93E3=>0x8599,
+0x93E4=>0x8B0E,
+0x93E5=>0x7058,
+0x93E6=>0x637A,
+0x93E7=>0x934B,
+0x93E8=>0x6962,
+0x93E9=>0x99B4,
+0x93EA=>0x7E04,
+0x93EB=>0x7577,
+0x93EC=>0x5357,
+0x93ED=>0x6960,
+0x93EE=>0x8EDF,
+0x93EF=>0x96E3,
+0x93F0=>0x6C5D,
+0x93F1=>0x4E8C,
+0x93F2=>0x5C3C,
+0x93F3=>0x5F10,
+0x93F4=>0x8FE9,
+0x93F5=>0x5302,
+0x93F6=>0x8CD1,
+0x93F7=>0x8089,
+0x93F8=>0x8679,
+0x93F9=>0x5EFF,
+0x93FA=>0x65E5,
+0x93FB=>0x4E73,
+0x93FC=>0x5165,
+0x9440=>0x5982,
+0x9441=>0x5C3F,
+0x9442=>0x97EE,
+0x9443=>0x4EFB,
+0x9444=>0x598A,
+0x9445=>0x5FCD,
+0x9446=>0x8A8D,
+0x9447=>0x6FE1,
+0x9448=>0x79B0,
+0x9449=>0x7962,
+0x944A=>0x5BE7,
+0x944B=>0x8471,
+0x944C=>0x732B,
+0x944D=>0x71B1,
+0x944E=>0x5E74,
+0x944F=>0x5FF5,
+0x9450=>0x637B,
+0x9451=>0x649A,
+0x9452=>0x71C3,
+0x9453=>0x7C98,
+0x9454=>0x4E43,
+0x9455=>0x5EFC,
+0x9456=>0x4E4B,
+0x9457=>0x57DC,
+0x9458=>0x56A2,
+0x9459=>0x60A9,
+0x945A=>0x6FC3,
+0x945B=>0x7D0D,
+0x945C=>0x80FD,
+0x945D=>0x8133,
+0x945E=>0x81BF,
+0x945F=>0x8FB2,
+0x9460=>0x8997,
+0x9461=>0x86A4,
+0x9462=>0x5DF4,
+0x9463=>0x628A,
+0x9464=>0x64AD,
+0x9465=>0x8987,
+0x9466=>0x6777,
+0x9467=>0x6CE2,
+0x9468=>0x6D3E,
+0x9469=>0x7436,
+0x946A=>0x7834,
+0x946B=>0x5A46,
+0x946C=>0x7F75,
+0x946D=>0x82AD,
+0x946E=>0x99AC,
+0x946F=>0x4FF3,
+0x9470=>0x5EC3,
+0x9471=>0x62DD,
+0x9472=>0x6392,
+0x9473=>0x6557,
+0x9474=>0x676F,
+0x9475=>0x76C3,
+0x9476=>0x724C,
+0x9477=>0x80CC,
+0x9478=>0x80BA,
+0x9479=>0x8F29,
+0x947A=>0x914D,
+0x947B=>0x500D,
+0x947C=>0x57F9,
+0x947D=>0x5A92,
+0x947E=>0x6885,
+0x9480=>0x6973,
+0x9481=>0x7164,
+0x9482=>0x72FD,
+0x9483=>0x8CB7,
+0x9484=>0x58F2,
+0x9485=>0x8CE0,
+0x9486=>0x966A,
+0x9487=>0x9019,
+0x9488=>0x877F,
+0x9489=>0x79E4,
+0x948A=>0x77E7,
+0x948B=>0x8429,
+0x948C=>0x4F2F,
+0x948D=>0x5265,
+0x948E=>0x535A,
+0x948F=>0x62CD,
+0x9490=>0x67CF,
+0x9491=>0x6CCA,
+0x9492=>0x767D,
+0x9493=>0x7B94,
+0x9494=>0x7C95,
+0x9495=>0x8236,
+0x9496=>0x8584,
+0x9497=>0x8FEB,
+0x9498=>0x66DD,
+0x9499=>0x6F20,
+0x949A=>0x7206,
+0x949B=>0x7E1B,
+0x949C=>0x83AB,
+0x949D=>0x99C1,
+0x949E=>0x9EA6,
+0x949F=>0x51FD,
+0x94A0=>0x7BB1,
+0x94A1=>0x7872,
+0x94A2=>0x7BB8,
+0x94A3=>0x8087,
+0x94A4=>0x7B48,
+0x94A5=>0x6AE8,
+0x94A6=>0x5E61,
+0x94A7=>0x808C,
+0x94A8=>0x7551,
+0x94A9=>0x7560,
+0x94AA=>0x516B,
+0x94AB=>0x9262,
+0x94AC=>0x6E8C,
+0x94AD=>0x767A,
+0x94AE=>0x9197,
+0x94AF=>0x9AEA,
+0x94B0=>0x4F10,
+0x94B1=>0x7F70,
+0x94B2=>0x629C,
+0x94B3=>0x7B4F,
+0x94B4=>0x95A5,
+0x94B5=>0x9CE9,
+0x94B6=>0x567A,
+0x94B7=>0x5859,
+0x94B8=>0x86E4,
+0x94B9=>0x96BC,
+0x94BA=>0x4F34,
+0x94BB=>0x5224,
+0x94BC=>0x534A,
+0x94BD=>0x53CD,
+0x94BE=>0x53DB,
+0x94BF=>0x5E06,
+0x94C0=>0x642C,
+0x94C1=>0x6591,
+0x94C2=>0x677F,
+0x94C3=>0x6C3E,
+0x94C4=>0x6C4E,
+0x94C5=>0x7248,
+0x94C6=>0x72AF,
+0x94C7=>0x73ED,
+0x94C8=>0x7554,
+0x94C9=>0x7E41,
+0x94CA=>0x822C,
+0x94CB=>0x85E9,
+0x94CC=>0x8CA9,
+0x94CD=>0x7BC4,
+0x94CE=>0x91C6,
+0x94CF=>0x7169,
+0x94D0=>0x9812,
+0x94D1=>0x98EF,
+0x94D2=>0x633D,
+0x94D3=>0x6669,
+0x94D4=>0x756A,
+0x94D5=>0x76E4,
+0x94D6=>0x78D0,
+0x94D7=>0x8543,
+0x94D8=>0x86EE,
+0x94D9=>0x532A,
+0x94DA=>0x5351,
+0x94DB=>0x5426,
+0x94DC=>0x5983,
+0x94DD=>0x5E87,
+0x94DE=>0x5F7C,
+0x94DF=>0x60B2,
+0x94E0=>0x6249,
+0x94E1=>0x6279,
+0x94E2=>0x62AB,
+0x94E3=>0x6590,
+0x94E4=>0x6BD4,
+0x94E5=>0x6CCC,
+0x94E6=>0x75B2,
+0x94E7=>0x76AE,
+0x94E8=>0x7891,
+0x94E9=>0x79D8,
+0x94EA=>0x7DCB,
+0x94EB=>0x7F77,
+0x94EC=>0x80A5,
+0x94ED=>0x88AB,
+0x94EE=>0x8AB9,
+0x94EF=>0x8CBB,
+0x94F0=>0x907F,
+0x94F1=>0x975E,
+0x94F2=>0x98DB,
+0x94F3=>0x6A0B,
+0x94F4=>0x7C38,
+0x94F5=>0x5099,
+0x94F6=>0x5C3E,
+0x94F7=>0x5FAE,
+0x94F8=>0x6787,
+0x94F9=>0x6BD8,
+0x94FA=>0x7435,
+0x94FB=>0x7709,
+0x94FC=>0x7F8E,
+0x9540=>0x9F3B,
+0x9541=>0x67CA,
+0x9542=>0x7A17,
+0x9543=>0x5339,
+0x9544=>0x758B,
+0x9545=>0x9AED,
+0x9546=>0x5F66,
+0x9547=>0x819D,
+0x9548=>0x83F1,
+0x9549=>0x8098,
+0x954A=>0x5F3C,
+0x954B=>0x5FC5,
+0x954C=>0x7562,
+0x954D=>0x7B46,
+0x954E=>0x903C,
+0x954F=>0x6867,
+0x9550=>0x59EB,
+0x9551=>0x5A9B,
+0x9552=>0x7D10,
+0x9553=>0x767E,
+0x9554=>0x8B2C,
+0x9555=>0x4FF5,
+0x9556=>0x5F6A,
+0x9557=>0x6A19,
+0x9558=>0x6C37,
+0x9559=>0x6F02,
+0x955A=>0x74E2,
+0x955B=>0x7968,
+0x955C=>0x8868,
+0x955D=>0x8A55,
+0x955E=>0x8C79,
+0x955F=>0x5EDF,
+0x9560=>0x63CF,
+0x9561=>0x75C5,
+0x9562=>0x79D2,
+0x9563=>0x82D7,
+0x9564=>0x9328,
+0x9565=>0x92F2,
+0x9566=>0x849C,
+0x9567=>0x86ED,
+0x9568=>0x9C2D,
+0x9569=>0x54C1,
+0x956A=>0x5F6C,
+0x956B=>0x658C,
+0x956C=>0x6D5C,
+0x956D=>0x7015,
+0x956E=>0x8CA7,
+0x956F=>0x8CD3,
+0x9570=>0x983B,
+0x9571=>0x654F,
+0x9572=>0x74F6,
+0x9573=>0x4E0D,
+0x9574=>0x4ED8,
+0x9575=>0x57E0,
+0x9576=>0x592B,
+0x9577=>0x5A66,
+0x9578=>0x5BCC,
+0x9579=>0x51A8,
+0x957A=>0x5E03,
+0x957B=>0x5E9C,
+0x957C=>0x6016,
+0x957D=>0x6276,
+0x957E=>0x6577,
+0x9580=>0x65A7,
+0x9581=>0x666E,
+0x9582=>0x6D6E,
+0x9583=>0x7236,
+0x9584=>0x7B26,
+0x9585=>0x8150,
+0x9586=>0x819A,
+0x9587=>0x8299,
+0x9588=>0x8B5C,
+0x9589=>0x8CA0,
+0x958A=>0x8CE6,
+0x958B=>0x8D74,
+0x958C=>0x961C,
+0x958D=>0x9644,
+0x958E=>0x4FAE,
+0x958F=>0x64AB,
+0x9590=>0x6B66,
+0x9591=>0x821E,
+0x9592=>0x8461,
+0x9593=>0x856A,
+0x9594=>0x90E8,
+0x9595=>0x5C01,
+0x9596=>0x6953,
+0x9597=>0x98A8,
+0x9598=>0x847A,
+0x9599=>0x8557,
+0x959A=>0x4F0F,
+0x959B=>0x526F,
+0x959C=>0x5FA9,
+0x959D=>0x5E45,
+0x959E=>0x670D,
+0x959F=>0x798F,
+0x95A0=>0x8179,
+0x95A1=>0x8907,
+0x95A2=>0x8986,
+0x95A3=>0x6DF5,
+0x95A4=>0x5F17,
+0x95A5=>0x6255,
+0x95A6=>0x6CB8,
+0x95A7=>0x4ECF,
+0x95A8=>0x7269,
+0x95A9=>0x9B92,
+0x95AA=>0x5206,
+0x95AB=>0x543B,
+0x95AC=>0x5674,
+0x95AD=>0x58B3,
+0x95AE=>0x61A4,
+0x95AF=>0x626E,
+0x95B0=>0x711A,
+0x95B1=>0x596E,
+0x95B2=>0x7C89,
+0x95B3=>0x7CDE,
+0x95B4=>0x7D1B,
+0x95B5=>0x96F0,
+0x95B6=>0x6587,
+0x95B7=>0x805E,
+0x95B8=>0x4E19,
+0x95B9=>0x4F75,
+0x95BA=>0x5175,
+0x95BB=>0x5840,
+0x95BC=>0x5E63,
+0x95BD=>0x5E73,
+0x95BE=>0x5F0A,
+0x95BF=>0x67C4,
+0x95C0=>0x4E26,
+0x95C1=>0x853D,
+0x95C2=>0x9589,
+0x95C3=>0x965B,
+0x95C4=>0x7C73,
+0x95C5=>0x9801,
+0x95C6=>0x50FB,
+0x95C7=>0x58C1,
+0x95C8=>0x7656,
+0x95C9=>0x78A7,
+0x95CA=>0x5225,
+0x95CB=>0x77A5,
+0x95CC=>0x8511,
+0x95CD=>0x7B86,
+0x95CE=>0x504F,
+0x95CF=>0x5909,
+0x95D0=>0x7247,
+0x95D1=>0x7BC7,
+0x95D2=>0x7DE8,
+0x95D3=>0x8FBA,
+0x95D4=>0x8FD4,
+0x95D5=>0x904D,
+0x95D6=>0x4FBF,
+0x95D7=>0x52C9,
+0x95D8=>0x5A29,
+0x95D9=>0x5F01,
+0x95DA=>0x97AD,
+0x95DB=>0x4FDD,
+0x95DC=>0x8217,
+0x95DD=>0x92EA,
+0x95DE=>0x5703,
+0x95DF=>0x6355,
+0x95E0=>0x6B69,
+0x95E1=>0x752B,
+0x95E2=>0x88DC,
+0x95E3=>0x8F14,
+0x95E4=>0x7A42,
+0x95E5=>0x52DF,
+0x95E6=>0x5893,
+0x95E7=>0x6155,
+0x95E8=>0x620A,
+0x95E9=>0x66AE,
+0x95EA=>0x6BCD,
+0x95EB=>0x7C3F,
+0x95EC=>0x83E9,
+0x95ED=>0x5023,
+0x95EE=>0x4FF8,
+0x95EF=>0x5305,
+0x95F0=>0x5446,
+0x95F1=>0x5831,
+0x95F2=>0x5949,
+0x95F3=>0x5B9D,
+0x95F4=>0x5CF0,
+0x95F5=>0x5CEF,
+0x95F6=>0x5D29,
+0x95F7=>0x5E96,
+0x95F8=>0x62B1,
+0x95F9=>0x6367,
+0x95FA=>0x653E,
+0x95FB=>0x65B9,
+0x95FC=>0x670B,
+0x9640=>0x6CD5,
+0x9641=>0x6CE1,
+0x9642=>0x70F9,
+0x9643=>0x7832,
+0x9644=>0x7E2B,
+0x9645=>0x80DE,
+0x9646=>0x82B3,
+0x9647=>0x840C,
+0x9648=>0x84EC,
+0x9649=>0x8702,
+0x964A=>0x8912,
+0x964B=>0x8A2A,
+0x964C=>0x8C4A,
+0x964D=>0x90A6,
+0x964E=>0x92D2,
+0x964F=>0x98FD,
+0x9650=>0x9CF3,
+0x9651=>0x9D6C,
+0x9652=>0x4E4F,
+0x9653=>0x4EA1,
+0x9654=>0x508D,
+0x9655=>0x5256,
+0x9656=>0x574A,
+0x9657=>0x59A8,
+0x9658=>0x5E3D,
+0x9659=>0x5FD8,
+0x965A=>0x5FD9,
+0x965B=>0x623F,
+0x965C=>0x66B4,
+0x965D=>0x671B,
+0x965E=>0x67D0,
+0x965F=>0x68D2,
+0x9660=>0x5192,
+0x9661=>0x7D21,
+0x9662=>0x80AA,
+0x9663=>0x81A8,
+0x9664=>0x8B00,
+0x9665=>0x8C8C,
+0x9666=>0x8CBF,
+0x9667=>0x927E,
+0x9668=>0x9632,
+0x9669=>0x5420,
+0x966A=>0x982C,
+0x966B=>0x5317,
+0x966C=>0x50D5,
+0x966D=>0x535C,
+0x966E=>0x58A8,
+0x966F=>0x64B2,
+0x9670=>0x6734,
+0x9671=>0x7267,
+0x9672=>0x7766,
+0x9673=>0x7A46,
+0x9674=>0x91E6,
+0x9675=>0x52C3,
+0x9676=>0x6CA1,
+0x9677=>0x6B86,
+0x9678=>0x5800,
+0x9679=>0x5E4C,
+0x967A=>0x5954,
+0x967B=>0x672C,
+0x967C=>0x7FFB,
+0x967D=>0x51E1,
+0x967E=>0x76C6,
+0x9680=>0x6469,
+0x9681=>0x78E8,
+0x9682=>0x9B54,
+0x9683=>0x9EBB,
+0x9684=>0x57CB,
+0x9685=>0x59B9,
+0x9686=>0x6627,
+0x9687=>0x679A,
+0x9688=>0x6BCE,
+0x9689=>0x54E9,
+0x968A=>0x69D9,
+0x968B=>0x5E55,
+0x968C=>0x819C,
+0x968D=>0x6795,
+0x968E=>0x9BAA,
+0x968F=>0x67FE,
+0x9690=>0x9C52,
+0x9691=>0x685D,
+0x9692=>0x4EA6,
+0x9693=>0x4FE3,
+0x9694=>0x53C8,
+0x9695=>0x62B9,
+0x9696=>0x672B,
+0x9697=>0x6CAB,
+0x9698=>0x8FC4,
+0x9699=>0x4FAD,
+0x969A=>0x7E6D,
+0x969B=>0x9EBF,
+0x969C=>0x4E07,
+0x969D=>0x6162,
+0x969E=>0x6E80,
+0x969F=>0x6F2B,
+0x96A0=>0x8513,
+0x96A1=>0x5473,
+0x96A2=>0x672A,
+0x96A3=>0x9B45,
+0x96A4=>0x5DF3,
+0x96A5=>0x7B95,
+0x96A6=>0x5CAC,
+0x96A7=>0x5BC6,
+0x96A8=>0x871C,
+0x96A9=>0x6E4A,
+0x96AA=>0x84D1,
+0x96AB=>0x7A14,
+0x96AC=>0x8108,
+0x96AD=>0x5999,
+0x96AE=>0x7C8D,
+0x96AF=>0x6C11,
+0x96B0=>0x7720,
+0x96B1=>0x52D9,
+0x96B2=>0x5922,
+0x96B3=>0x7121,
+0x96B4=>0x725F,
+0x96B5=>0x77DB,
+0x96B6=>0x9727,
+0x96B7=>0x9D61,
+0x96B8=>0x690B,
+0x96B9=>0x5A7F,
+0x96BA=>0x5A18,
+0x96BB=>0x51A5,
+0x96BC=>0x540D,
+0x96BD=>0x547D,
+0x96BE=>0x660E,
+0x96BF=>0x76DF,
+0x96C0=>0x8FF7,
+0x96C1=>0x9298,
+0x96C2=>0x9CF4,
+0x96C3=>0x59EA,
+0x96C4=>0x725D,
+0x96C5=>0x6EC5,
+0x96C6=>0x514D,
+0x96C7=>0x68C9,
+0x96C8=>0x7DBF,
+0x96C9=>0x7DEC,
+0x96CA=>0x9762,
+0x96CB=>0x9EBA,
+0x96CC=>0x6478,
+0x96CD=>0x6A21,
+0x96CE=>0x8302,
+0x96CF=>0x5984,
+0x96D0=>0x5B5F,
+0x96D1=>0x6BDB,
+0x96D2=>0x731B,
+0x96D3=>0x76F2,
+0x96D4=>0x7DB2,
+0x96D5=>0x8017,
+0x96D6=>0x8499,
+0x96D7=>0x5132,
+0x96D8=>0x6728,
+0x96D9=>0x9ED9,
+0x96DA=>0x76EE,
+0x96DB=>0x6762,
+0x96DC=>0x52FF,
+0x96DD=>0x9905,
+0x96DE=>0x5C24,
+0x96DF=>0x623B,
+0x96E0=>0x7C7E,
+0x96E1=>0x8CB0,
+0x96E2=>0x554F,
+0x96E3=>0x60B6,
+0x96E4=>0x7D0B,
+0x96E5=>0x9580,
+0x96E6=>0x5301,
+0x96E7=>0x4E5F,
+0x96E8=>0x51B6,
+0x96E9=>0x591C,
+0x96EA=>0x723A,
+0x96EB=>0x8036,
+0x96EC=>0x91CE,
+0x96ED=>0x5F25,
+0x96EE=>0x77E2,
+0x96EF=>0x5384,
+0x96F0=>0x5F79,
+0x96F1=>0x7D04,
+0x96F2=>0x85AC,
+0x96F3=>0x8A33,
+0x96F4=>0x8E8D,
+0x96F5=>0x9756,
+0x96F6=>0x67F3,
+0x96F7=>0x85AE,
+0x96F8=>0x9453,
+0x96F9=>0x6109,
+0x96FA=>0x6108,
+0x96FB=>0x6CB9,
+0x96FC=>0x7652,
+0x9740=>0x8AED,
+0x9741=>0x8F38,
+0x9742=>0x552F,
+0x9743=>0x4F51,
+0x9744=>0x512A,
+0x9745=>0x52C7,
+0x9746=>0x53CB,
+0x9747=>0x5BA5,
+0x9748=>0x5E7D,
+0x9749=>0x60A0,
+0x974A=>0x6182,
+0x974B=>0x63D6,
+0x974C=>0x6709,
+0x974D=>0x67DA,
+0x974E=>0x6E67,
+0x974F=>0x6D8C,
+0x9750=>0x7336,
+0x9751=>0x7337,
+0x9752=>0x7531,
+0x9753=>0x7950,
+0x9754=>0x88D5,
+0x9755=>0x8A98,
+0x9756=>0x904A,
+0x9757=>0x9091,
+0x9758=>0x90F5,
+0x9759=>0x96C4,
+0x975A=>0x878D,
+0x975B=>0x5915,
+0x975C=>0x4E88,
+0x975D=>0x4F59,
+0x975E=>0x4E0E,
+0x975F=>0x8A89,
+0x9760=>0x8F3F,
+0x9761=>0x9810,
+0x9762=>0x50AD,
+0x9763=>0x5E7C,
+0x9764=>0x5996,
+0x9765=>0x5BB9,
+0x9766=>0x5EB8,
+0x9767=>0x63DA,
+0x9768=>0x63FA,
+0x9769=>0x64C1,
+0x976A=>0x66DC,
+0x976B=>0x694A,
+0x976C=>0x69D8,
+0x976D=>0x6D0B,
+0x976E=>0x6EB6,
+0x976F=>0x7194,
+0x9770=>0x7528,
+0x9771=>0x7AAF,
+0x9772=>0x7F8A,
+0x9773=>0x8000,
+0x9774=>0x8449,
+0x9775=>0x84C9,
+0x9776=>0x8981,
+0x9777=>0x8B21,
+0x9778=>0x8E0A,
+0x9779=>0x9065,
+0x977A=>0x967D,
+0x977B=>0x990A,
+0x977C=>0x617E,
+0x977D=>0x6291,
+0x977E=>0x6B32,
+0x9780=>0x6C83,
+0x9781=>0x6D74,
+0x9782=>0x7FCC,
+0x9783=>0x7FFC,
+0x9784=>0x6DC0,
+0x9785=>0x7F85,
+0x9786=>0x87BA,
+0x9787=>0x88F8,
+0x9788=>0x6765,
+0x9789=>0x83B1,
+0x978A=>0x983C,
+0x978B=>0x96F7,
+0x978C=>0x6D1B,
+0x978D=>0x7D61,
+0x978E=>0x843D,
+0x978F=>0x916A,
+0x9790=>0x4E71,
+0x9791=>0x5375,
+0x9792=>0x5D50,
+0x9793=>0x6B04,
+0x9794=>0x6FEB,
+0x9795=>0x85CD,
+0x9796=>0x862D,
+0x9797=>0x89A7,
+0x9798=>0x5229,
+0x9799=>0x540F,
+0x979A=>0x5C65,
+0x979B=>0x674E,
+0x979C=>0x68A8,
+0x979D=>0x7406,
+0x979E=>0x7483,
+0x979F=>0x75E2,
+0x97A0=>0x88CF,
+0x97A1=>0x88E1,
+0x97A2=>0x91CC,
+0x97A3=>0x96E2,
+0x97A4=>0x9678,
+0x97A5=>0x5F8B,
+0x97A6=>0x7387,
+0x97A7=>0x7ACB,
+0x97A8=>0x844E,
+0x97A9=>0x63A0,
+0x97AA=>0x7565,
+0x97AB=>0x5289,
+0x97AC=>0x6D41,
+0x97AD=>0x6E9C,
+0x97AE=>0x7409,
+0x97AF=>0x7559,
+0x97B0=>0x786B,
+0x97B1=>0x7C92,
+0x97B2=>0x9686,
+0x97B3=>0x7ADC,
+0x97B4=>0x9F8D,
+0x97B5=>0x4FB6,
+0x97B6=>0x616E,
+0x97B7=>0x65C5,
+0x97B8=>0x865C,
+0x97B9=>0x4E86,
+0x97BA=>0x4EAE,
+0x97BB=>0x50DA,
+0x97BC=>0x4E21,
+0x97BD=>0x51CC,
+0x97BE=>0x5BEE,
+0x97BF=>0x6599,
+0x97C0=>0x6881,
+0x97C1=>0x6DBC,
+0x97C2=>0x731F,
+0x97C3=>0x7642,
+0x97C4=>0x77AD,
+0x97C5=>0x7A1C,
+0x97C6=>0x7CE7,
+0x97C7=>0x826F,
+0x97C8=>0x8AD2,
+0x97C9=>0x907C,
+0x97CA=>0x91CF,
+0x97CB=>0x9675,
+0x97CC=>0x9818,
+0x97CD=>0x529B,
+0x97CE=>0x7DD1,
+0x97CF=>0x502B,
+0x97D0=>0x5398,
+0x97D1=>0x6797,
+0x97D2=>0x6DCB,
+0x97D3=>0x71D0,
+0x97D4=>0x7433,
+0x97D5=>0x81E8,
+0x97D6=>0x8F2A,
+0x97D7=>0x96A3,
+0x97D8=>0x9C57,
+0x97D9=>0x9E9F,
+0x97DA=>0x7460,
+0x97DB=>0x5841,
+0x97DC=>0x6D99,
+0x97DD=>0x7D2F,
+0x97DE=>0x985E,
+0x97DF=>0x4EE4,
+0x97E0=>0x4F36,
+0x97E1=>0x4F8B,
+0x97E2=>0x51B7,
+0x97E3=>0x52B1,
+0x97E4=>0x5DBA,
+0x97E5=>0x601C,
+0x97E6=>0x73B2,
+0x97E7=>0x793C,
+0x97E8=>0x82D3,
+0x97E9=>0x9234,
+0x97EA=>0x96B7,
+0x97EB=>0x96F6,
+0x97EC=>0x970A,
+0x97ED=>0x9E97,
+0x97EE=>0x9F62,
+0x97EF=>0x66A6,
+0x97F0=>0x6B74,
+0x97F1=>0x5217,
+0x97F2=>0x52A3,
+0x97F3=>0x70C8,
+0x97F4=>0x88C2,
+0x97F5=>0x5EC9,
+0x97F6=>0x604B,
+0x97F7=>0x6190,
+0x97F8=>0x6F23,
+0x97F9=>0x7149,
+0x97FA=>0x7C3E,
+0x97FB=>0x7DF4,
+0x97FC=>0x806F,
+0x9840=>0x84EE,
+0x9841=>0x9023,
+0x9842=>0x932C,
+0x9843=>0x5442,
+0x9844=>0x9B6F,
+0x9845=>0x6AD3,
+0x9846=>0x7089,
+0x9847=>0x8CC2,
+0x9848=>0x8DEF,
+0x9849=>0x9732,
+0x984A=>0x52B4,
+0x984B=>0x5A41,
+0x984C=>0x5ECA,
+0x984D=>0x5F04,
+0x984E=>0x6717,
+0x984F=>0x697C,
+0x9850=>0x6994,
+0x9851=>0x6D6A,
+0x9852=>0x6F0F,
+0x9853=>0x7262,
+0x9854=>0x72FC,
+0x9855=>0x7BED,
+0x9856=>0x8001,
+0x9857=>0x807E,
+0x9858=>0x874B,
+0x9859=>0x90CE,
+0x985A=>0x516D,
+0x985B=>0x9E93,
+0x985C=>0x7984,
+0x985D=>0x808B,
+0x985E=>0x9332,
+0x985F=>0x8AD6,
+0x9860=>0x502D,
+0x9861=>0x548C,
+0x9862=>0x8A71,
+0x9863=>0x6B6A,
+0x9864=>0x8CC4,
+0x9865=>0x8107,
+0x9866=>0x60D1,
+0x9867=>0x67A0,
+0x9868=>0x9DF2,
+0x9869=>0x4E99,
+0x986A=>0x4E98,
+0x986B=>0x9C10,
+0x986C=>0x8A6B,
+0x986D=>0x85C1,
+0x986E=>0x8568,
+0x986F=>0x6900,
+0x9870=>0x6E7E,
+0x9871=>0x7897,
+0x9872=>0x8155,
+0x989F=>0x5F0C,
+0x98A0=>0x4E10,
+0x98A1=>0x4E15,
+0x98A2=>0x4E2A,
+0x98A3=>0x4E31,
+0x98A4=>0x4E36,
+0x98A5=>0x4E3C,
+0x98A6=>0x4E3F,
+0x98A7=>0x4E42,
+0x98A8=>0x4E56,
+0x98A9=>0x4E58,
+0x98AA=>0x4E82,
+0x98AB=>0x4E85,
+0x98AC=>0x8C6B,
+0x98AD=>0x4E8A,
+0x98AE=>0x8212,
+0x98AF=>0x5F0D,
+0x98B0=>0x4E8E,
+0x98B1=>0x4E9E,
+0x98B2=>0x4E9F,
+0x98B3=>0x4EA0,
+0x98B4=>0x4EA2,
+0x98B5=>0x4EB0,
+0x98B6=>0x4EB3,
+0x98B7=>0x4EB6,
+0x98B8=>0x4ECE,
+0x98B9=>0x4ECD,
+0x98BA=>0x4EC4,
+0x98BB=>0x4EC6,
+0x98BC=>0x4EC2,
+0x98BD=>0x4ED7,
+0x98BE=>0x4EDE,
+0x98BF=>0x4EED,
+0x98C0=>0x4EDF,
+0x98C1=>0x4EF7,
+0x98C2=>0x4F09,
+0x98C3=>0x4F5A,
+0x98C4=>0x4F30,
+0x98C5=>0x4F5B,
+0x98C6=>0x4F5D,
+0x98C7=>0x4F57,
+0x98C8=>0x4F47,
+0x98C9=>0x4F76,
+0x98CA=>0x4F88,
+0x98CB=>0x4F8F,
+0x98CC=>0x4F98,
+0x98CD=>0x4F7B,
+0x98CE=>0x4F69,
+0x98CF=>0x4F70,
+0x98D0=>0x4F91,
+0x98D1=>0x4F6F,
+0x98D2=>0x4F86,
+0x98D3=>0x4F96,
+0x98D4=>0x5118,
+0x98D5=>0x4FD4,
+0x98D6=>0x4FDF,
+0x98D7=>0x4FCE,
+0x98D8=>0x4FD8,
+0x98D9=>0x4FDB,
+0x98DA=>0x4FD1,
+0x98DB=>0x4FDA,
+0x98DC=>0x4FD0,
+0x98DD=>0x4FE4,
+0x98DE=>0x4FE5,
+0x98DF=>0x501A,
+0x98E0=>0x5028,
+0x98E1=>0x5014,
+0x98E2=>0x502A,
+0x98E3=>0x5025,
+0x98E4=>0x5005,
+0x98E5=>0x4F1C,
+0x98E6=>0x4FF6,
+0x98E7=>0x5021,
+0x98E8=>0x5029,
+0x98E9=>0x502C,
+0x98EA=>0x4FFE,
+0x98EB=>0x4FEF,
+0x98EC=>0x5011,
+0x98ED=>0x5006,
+0x98EE=>0x5043,
+0x98EF=>0x5047,
+0x98F0=>0x6703,
+0x98F1=>0x5055,
+0x98F2=>0x5050,
+0x98F3=>0x5048,
+0x98F4=>0x505A,
+0x98F5=>0x5056,
+0x98F6=>0x506C,
+0x98F7=>0x5078,
+0x98F8=>0x5080,
+0x98F9=>0x509A,
+0x98FA=>0x5085,
+0x98FB=>0x50B4,
+0x98FC=>0x50B2,
+0x9940=>0x50C9,
+0x9941=>0x50CA,
+0x9942=>0x50B3,
+0x9943=>0x50C2,
+0x9944=>0x50D6,
+0x9945=>0x50DE,
+0x9946=>0x50E5,
+0x9947=>0x50ED,
+0x9948=>0x50E3,
+0x9949=>0x50EE,
+0x994A=>0x50F9,
+0x994B=>0x50F5,
+0x994C=>0x5109,
+0x994D=>0x5101,
+0x994E=>0x5102,
+0x994F=>0x5116,
+0x9950=>0x5115,
+0x9951=>0x5114,
+0x9952=>0x511A,
+0x9953=>0x5121,
+0x9954=>0x513A,
+0x9955=>0x5137,
+0x9956=>0x513C,
+0x9957=>0x513B,
+0x9958=>0x513F,
+0x9959=>0x5140,
+0x995A=>0x5152,
+0x995B=>0x514C,
+0x995C=>0x5154,
+0x995D=>0x5162,
+0x995E=>0x7AF8,
+0x995F=>0x5169,
+0x9960=>0x516A,
+0x9961=>0x516E,
+0x9962=>0x5180,
+0x9963=>0x5182,
+0x9964=>0x56D8,
+0x9965=>0x518C,
+0x9966=>0x5189,
+0x9967=>0x518F,
+0x9968=>0x5191,
+0x9969=>0x5193,
+0x996A=>0x5195,
+0x996B=>0x5196,
+0x996C=>0x51A4,
+0x996D=>0x51A6,
+0x996E=>0x51A2,
+0x996F=>0x51A9,
+0x9970=>0x51AA,
+0x9971=>0x51AB,
+0x9972=>0x51B3,
+0x9973=>0x51B1,
+0x9974=>0x51B2,
+0x9975=>0x51B0,
+0x9976=>0x51B5,
+0x9977=>0x51BD,
+0x9978=>0x51C5,
+0x9979=>0x51C9,
+0x997A=>0x51DB,
+0x997B=>0x51E0,
+0x997C=>0x8655,
+0x997D=>0x51E9,
+0x997E=>0x51ED,
+0x9980=>0x51F0,
+0x9981=>0x51F5,
+0x9982=>0x51FE,
+0x9983=>0x5204,
+0x9984=>0x520B,
+0x9985=>0x5214,
+0x9986=>0x520E,
+0x9987=>0x5227,
+0x9988=>0x522A,
+0x9989=>0x522E,
+0x998A=>0x5233,
+0x998B=>0x5239,
+0x998C=>0x524F,
+0x998D=>0x5244,
+0x998E=>0x524B,
+0x998F=>0x524C,
+0x9990=>0x525E,
+0x9991=>0x5254,
+0x9992=>0x526A,
+0x9993=>0x5274,
+0x9994=>0x5269,
+0x9995=>0x5273,
+0x9996=>0x527F,
+0x9997=>0x527D,
+0x9998=>0x528D,
+0x9999=>0x5294,
+0x999A=>0x5292,
+0x999B=>0x5271,
+0x999C=>0x5288,
+0x999D=>0x5291,
+0x999E=>0x8FA8,
+0x999F=>0x8FA7,
+0x99A0=>0x52AC,
+0x99A1=>0x52AD,
+0x99A2=>0x52BC,
+0x99A3=>0x52B5,
+0x99A4=>0x52C1,
+0x99A5=>0x52CD,
+0x99A6=>0x52D7,
+0x99A7=>0x52DE,
+0x99A8=>0x52E3,
+0x99A9=>0x52E6,
+0x99AA=>0x98ED,
+0x99AB=>0x52E0,
+0x99AC=>0x52F3,
+0x99AD=>0x52F5,
+0x99AE=>0x52F8,
+0x99AF=>0x52F9,
+0x99B0=>0x5306,
+0x99B1=>0x5308,
+0x99B2=>0x7538,
+0x99B3=>0x530D,
+0x99B4=>0x5310,
+0x99B5=>0x530F,
+0x99B6=>0x5315,
+0x99B7=>0x531A,
+0x99B8=>0x5323,
+0x99B9=>0x532F,
+0x99BA=>0x5331,
+0x99BB=>0x5333,
+0x99BC=>0x5338,
+0x99BD=>0x5340,
+0x99BE=>0x5346,
+0x99BF=>0x5345,
+0x99C0=>0x4E17,
+0x99C1=>0x5349,
+0x99C2=>0x534D,
+0x99C3=>0x51D6,
+0x99C4=>0x535E,
+0x99C5=>0x5369,
+0x99C6=>0x536E,
+0x99C7=>0x5918,
+0x99C8=>0x537B,
+0x99C9=>0x5377,
+0x99CA=>0x5382,
+0x99CB=>0x5396,
+0x99CC=>0x53A0,
+0x99CD=>0x53A6,
+0x99CE=>0x53A5,
+0x99CF=>0x53AE,
+0x99D0=>0x53B0,
+0x99D1=>0x53B6,
+0x99D2=>0x53C3,
+0x99D3=>0x7C12,
+0x99D4=>0x96D9,
+0x99D5=>0x53DF,
+0x99D6=>0x66FC,
+0x99D7=>0x71EE,
+0x99D8=>0x53EE,
+0x99D9=>0x53E8,
+0x99DA=>0x53ED,
+0x99DB=>0x53FA,
+0x99DC=>0x5401,
+0x99DD=>0x543D,
+0x99DE=>0x5440,
+0x99DF=>0x542C,
+0x99E0=>0x542D,
+0x99E1=>0x543C,
+0x99E2=>0x542E,
+0x99E3=>0x5436,
+0x99E4=>0x5429,
+0x99E5=>0x541D,
+0x99E6=>0x544E,
+0x99E7=>0x548F,
+0x99E8=>0x5475,
+0x99E9=>0x548E,
+0x99EA=>0x545F,
+0x99EB=>0x5471,
+0x99EC=>0x5477,
+0x99ED=>0x5470,
+0x99EE=>0x5492,
+0x99EF=>0x547B,
+0x99F0=>0x5480,
+0x99F1=>0x5476,
+0x99F2=>0x5484,
+0x99F3=>0x5490,
+0x99F4=>0x5486,
+0x99F5=>0x54C7,
+0x99F6=>0x54A2,
+0x99F7=>0x54B8,
+0x99F8=>0x54A5,
+0x99F9=>0x54AC,
+0x99FA=>0x54C4,
+0x99FB=>0x54C8,
+0x99FC=>0x54A8,
+0x9A40=>0x54AB,
+0x9A41=>0x54C2,
+0x9A42=>0x54A4,
+0x9A43=>0x54BE,
+0x9A44=>0x54BC,
+0x9A45=>0x54D8,
+0x9A46=>0x54E5,
+0x9A47=>0x54E6,
+0x9A48=>0x550F,
+0x9A49=>0x5514,
+0x9A4A=>0x54FD,
+0x9A4B=>0x54EE,
+0x9A4C=>0x54ED,
+0x9A4D=>0x54FA,
+0x9A4E=>0x54E2,
+0x9A4F=>0x5539,
+0x9A50=>0x5540,
+0x9A51=>0x5563,
+0x9A52=>0x554C,
+0x9A53=>0x552E,
+0x9A54=>0x555C,
+0x9A55=>0x5545,
+0x9A56=>0x5556,
+0x9A57=>0x5557,
+0x9A58=>0x5538,
+0x9A59=>0x5533,
+0x9A5A=>0x555D,
+0x9A5B=>0x5599,
+0x9A5C=>0x5580,
+0x9A5D=>0x54AF,
+0x9A5E=>0x558A,
+0x9A5F=>0x559F,
+0x9A60=>0x557B,
+0x9A61=>0x557E,
+0x9A62=>0x5598,
+0x9A63=>0x559E,
+0x9A64=>0x55AE,
+0x9A65=>0x557C,
+0x9A66=>0x5583,
+0x9A67=>0x55A9,
+0x9A68=>0x5587,
+0x9A69=>0x55A8,
+0x9A6A=>0x55DA,
+0x9A6B=>0x55C5,
+0x9A6C=>0x55DF,
+0x9A6D=>0x55C4,
+0x9A6E=>0x55DC,
+0x9A6F=>0x55E4,
+0x9A70=>0x55D4,
+0x9A71=>0x5614,
+0x9A72=>0x55F7,
+0x9A73=>0x5616,
+0x9A74=>0x55FE,
+0x9A75=>0x55FD,
+0x9A76=>0x561B,
+0x9A77=>0x55F9,
+0x9A78=>0x564E,
+0x9A79=>0x5650,
+0x9A7A=>0x71DF,
+0x9A7B=>0x5634,
+0x9A7C=>0x5636,
+0x9A7D=>0x5632,
+0x9A7E=>0x5638,
+0x9A80=>0x566B,
+0x9A81=>0x5664,
+0x9A82=>0x562F,
+0x9A83=>0x566C,
+0x9A84=>0x566A,
+0x9A85=>0x5686,
+0x9A86=>0x5680,
+0x9A87=>0x568A,
+0x9A88=>0x56A0,
+0x9A89=>0x5694,
+0x9A8A=>0x568F,
+0x9A8B=>0x56A5,
+0x9A8C=>0x56AE,
+0x9A8D=>0x56B6,
+0x9A8E=>0x56B4,
+0x9A8F=>0x56C2,
+0x9A90=>0x56BC,
+0x9A91=>0x56C1,
+0x9A92=>0x56C3,
+0x9A93=>0x56C0,
+0x9A94=>0x56C8,
+0x9A95=>0x56CE,
+0x9A96=>0x56D1,
+0x9A97=>0x56D3,
+0x9A98=>0x56D7,
+0x9A99=>0x56EE,
+0x9A9A=>0x56F9,
+0x9A9B=>0x5700,
+0x9A9C=>0x56FF,
+0x9A9D=>0x5704,
+0x9A9E=>0x5709,
+0x9A9F=>0x5708,
+0x9AA0=>0x570B,
+0x9AA1=>0x570D,
+0x9AA2=>0x5713,
+0x9AA3=>0x5718,
+0x9AA4=>0x5716,
+0x9AA5=>0x55C7,
+0x9AA6=>0x571C,
+0x9AA7=>0x5726,
+0x9AA8=>0x5737,
+0x9AA9=>0x5738,
+0x9AAA=>0x574E,
+0x9AAB=>0x573B,
+0x9AAC=>0x5740,
+0x9AAD=>0x574F,
+0x9AAE=>0x5769,
+0x9AAF=>0x57C0,
+0x9AB0=>0x5788,
+0x9AB1=>0x5761,
+0x9AB2=>0x577F,
+0x9AB3=>0x5789,
+0x9AB4=>0x5793,
+0x9AB5=>0x57A0,
+0x9AB6=>0x57B3,
+0x9AB7=>0x57A4,
+0x9AB8=>0x57AA,
+0x9AB9=>0x57B0,
+0x9ABA=>0x57C3,
+0x9ABB=>0x57C6,
+0x9ABC=>0x57D4,
+0x9ABD=>0x57D2,
+0x9ABE=>0x57D3,
+0x9ABF=>0x580A,
+0x9AC0=>0x57D6,
+0x9AC1=>0x57E3,
+0x9AC2=>0x580B,
+0x9AC3=>0x5819,
+0x9AC4=>0x581D,
+0x9AC5=>0x5872,
+0x9AC6=>0x5821,
+0x9AC7=>0x5862,
+0x9AC8=>0x584B,
+0x9AC9=>0x5870,
+0x9ACA=>0x6BC0,
+0x9ACB=>0x5852,
+0x9ACC=>0x583D,
+0x9ACD=>0x5879,
+0x9ACE=>0x5885,
+0x9ACF=>0x58B9,
+0x9AD0=>0x589F,
+0x9AD1=>0x58AB,
+0x9AD2=>0x58BA,
+0x9AD3=>0x58DE,
+0x9AD4=>0x58BB,
+0x9AD5=>0x58B8,
+0x9AD6=>0x58AE,
+0x9AD7=>0x58C5,
+0x9AD8=>0x58D3,
+0x9AD9=>0x58D1,
+0x9ADA=>0x58D7,
+0x9ADB=>0x58D9,
+0x9ADC=>0x58D8,
+0x9ADD=>0x58E5,
+0x9ADE=>0x58DC,
+0x9ADF=>0x58E4,
+0x9AE0=>0x58DF,
+0x9AE1=>0x58EF,
+0x9AE2=>0x58FA,
+0x9AE3=>0x58F9,
+0x9AE4=>0x58FB,
+0x9AE5=>0x58FC,
+0x9AE6=>0x58FD,
+0x9AE7=>0x5902,
+0x9AE8=>0x590A,
+0x9AE9=>0x5910,
+0x9AEA=>0x591B,
+0x9AEB=>0x68A6,
+0x9AEC=>0x5925,
+0x9AED=>0x592C,
+0x9AEE=>0x592D,
+0x9AEF=>0x5932,
+0x9AF0=>0x5938,
+0x9AF1=>0x593E,
+0x9AF2=>0x7AD2,
+0x9AF3=>0x5955,
+0x9AF4=>0x5950,
+0x9AF5=>0x594E,
+0x9AF6=>0x595A,
+0x9AF7=>0x5958,
+0x9AF8=>0x5962,
+0x9AF9=>0x5960,
+0x9AFA=>0x5967,
+0x9AFB=>0x596C,
+0x9AFC=>0x5969,
+0x9B40=>0x5978,
+0x9B41=>0x5981,
+0x9B42=>0x599D,
+0x9B43=>0x4F5E,
+0x9B44=>0x4FAB,
+0x9B45=>0x59A3,
+0x9B46=>0x59B2,
+0x9B47=>0x59C6,
+0x9B48=>0x59E8,
+0x9B49=>0x59DC,
+0x9B4A=>0x598D,
+0x9B4B=>0x59D9,
+0x9B4C=>0x59DA,
+0x9B4D=>0x5A25,
+0x9B4E=>0x5A1F,
+0x9B4F=>0x5A11,
+0x9B50=>0x5A1C,
+0x9B51=>0x5A09,
+0x9B52=>0x5A1A,
+0x9B53=>0x5A40,
+0x9B54=>0x5A6C,
+0x9B55=>0x5A49,
+0x9B56=>0x5A35,
+0x9B57=>0x5A36,
+0x9B58=>0x5A62,
+0x9B59=>0x5A6A,
+0x9B5A=>0x5A9A,
+0x9B5B=>0x5ABC,
+0x9B5C=>0x5ABE,
+0x9B5D=>0x5ACB,
+0x9B5E=>0x5AC2,
+0x9B5F=>0x5ABD,
+0x9B60=>0x5AE3,
+0x9B61=>0x5AD7,
+0x9B62=>0x5AE6,
+0x9B63=>0x5AE9,
+0x9B64=>0x5AD6,
+0x9B65=>0x5AFA,
+0x9B66=>0x5AFB,
+0x9B67=>0x5B0C,
+0x9B68=>0x5B0B,
+0x9B69=>0x5B16,
+0x9B6A=>0x5B32,
+0x9B6B=>0x5AD0,
+0x9B6C=>0x5B2A,
+0x9B6D=>0x5B36,
+0x9B6E=>0x5B3E,
+0x9B6F=>0x5B43,
+0x9B70=>0x5B45,
+0x9B71=>0x5B40,
+0x9B72=>0x5B51,
+0x9B73=>0x5B55,
+0x9B74=>0x5B5A,
+0x9B75=>0x5B5B,
+0x9B76=>0x5B65,
+0x9B77=>0x5B69,
+0x9B78=>0x5B70,
+0x9B79=>0x5B73,
+0x9B7A=>0x5B75,
+0x9B7B=>0x5B78,
+0x9B7C=>0x6588,
+0x9B7D=>0x5B7A,
+0x9B7E=>0x5B80,
+0x9B80=>0x5B83,
+0x9B81=>0x5BA6,
+0x9B82=>0x5BB8,
+0x9B83=>0x5BC3,
+0x9B84=>0x5BC7,
+0x9B85=>0x5BC9,
+0x9B86=>0x5BD4,
+0x9B87=>0x5BD0,
+0x9B88=>0x5BE4,
+0x9B89=>0x5BE6,
+0x9B8A=>0x5BE2,
+0x9B8B=>0x5BDE,
+0x9B8C=>0x5BE5,
+0x9B8D=>0x5BEB,
+0x9B8E=>0x5BF0,
+0x9B8F=>0x5BF6,
+0x9B90=>0x5BF3,
+0x9B91=>0x5C05,
+0x9B92=>0x5C07,
+0x9B93=>0x5C08,
+0x9B94=>0x5C0D,
+0x9B95=>0x5C13,
+0x9B96=>0x5C20,
+0x9B97=>0x5C22,
+0x9B98=>0x5C28,
+0x9B99=>0x5C38,
+0x9B9A=>0x5C39,
+0x9B9B=>0x5C41,
+0x9B9C=>0x5C46,
+0x9B9D=>0x5C4E,
+0x9B9E=>0x5C53,
+0x9B9F=>0x5C50,
+0x9BA0=>0x5C4F,
+0x9BA1=>0x5B71,
+0x9BA2=>0x5C6C,
+0x9BA3=>0x5C6E,
+0x9BA4=>0x4E62,
+0x9BA5=>0x5C76,
+0x9BA6=>0x5C79,
+0x9BA7=>0x5C8C,
+0x9BA8=>0x5C91,
+0x9BA9=>0x5C94,
+0x9BAA=>0x599B,
+0x9BAB=>0x5CAB,
+0x9BAC=>0x5CBB,
+0x9BAD=>0x5CB6,
+0x9BAE=>0x5CBC,
+0x9BAF=>0x5CB7,
+0x9BB0=>0x5CC5,
+0x9BB1=>0x5CBE,
+0x9BB2=>0x5CC7,
+0x9BB3=>0x5CD9,
+0x9BB4=>0x5CE9,
+0x9BB5=>0x5CFD,
+0x9BB6=>0x5CFA,
+0x9BB7=>0x5CED,
+0x9BB8=>0x5D8C,
+0x9BB9=>0x5CEA,
+0x9BBA=>0x5D0B,
+0x9BBB=>0x5D15,
+0x9BBC=>0x5D17,
+0x9BBD=>0x5D5C,
+0x9BBE=>0x5D1F,
+0x9BBF=>0x5D1B,
+0x9BC0=>0x5D11,
+0x9BC1=>0x5D14,
+0x9BC2=>0x5D22,
+0x9BC3=>0x5D1A,
+0x9BC4=>0x5D19,
+0x9BC5=>0x5D18,
+0x9BC6=>0x5D4C,
+0x9BC7=>0x5D52,
+0x9BC8=>0x5D4E,
+0x9BC9=>0x5D4B,
+0x9BCA=>0x5D6C,
+0x9BCB=>0x5D73,
+0x9BCC=>0x5D76,
+0x9BCD=>0x5D87,
+0x9BCE=>0x5D84,
+0x9BCF=>0x5D82,
+0x9BD0=>0x5DA2,
+0x9BD1=>0x5D9D,
+0x9BD2=>0x5DAC,
+0x9BD3=>0x5DAE,
+0x9BD4=>0x5DBD,
+0x9BD5=>0x5D90,
+0x9BD6=>0x5DB7,
+0x9BD7=>0x5DBC,
+0x9BD8=>0x5DC9,
+0x9BD9=>0x5DCD,
+0x9BDA=>0x5DD3,
+0x9BDB=>0x5DD2,
+0x9BDC=>0x5DD6,
+0x9BDD=>0x5DDB,
+0x9BDE=>0x5DEB,
+0x9BDF=>0x5DF2,
+0x9BE0=>0x5DF5,
+0x9BE1=>0x5E0B,
+0x9BE2=>0x5E1A,
+0x9BE3=>0x5E19,
+0x9BE4=>0x5E11,
+0x9BE5=>0x5E1B,
+0x9BE6=>0x5E36,
+0x9BE7=>0x5E37,
+0x9BE8=>0x5E44,
+0x9BE9=>0x5E43,
+0x9BEA=>0x5E40,
+0x9BEB=>0x5E4E,
+0x9BEC=>0x5E57,
+0x9BED=>0x5E54,
+0x9BEE=>0x5E5F,
+0x9BEF=>0x5E62,
+0x9BF0=>0x5E64,
+0x9BF1=>0x5E47,
+0x9BF2=>0x5E75,
+0x9BF3=>0x5E76,
+0x9BF4=>0x5E7A,
+0x9BF5=>0x9EBC,
+0x9BF6=>0x5E7F,
+0x9BF7=>0x5EA0,
+0x9BF8=>0x5EC1,
+0x9BF9=>0x5EC2,
+0x9BFA=>0x5EC8,
+0x9BFB=>0x5ED0,
+0x9BFC=>0x5ECF,
+0x9C40=>0x5ED6,
+0x9C41=>0x5EE3,
+0x9C42=>0x5EDD,
+0x9C43=>0x5EDA,
+0x9C44=>0x5EDB,
+0x9C45=>0x5EE2,
+0x9C46=>0x5EE1,
+0x9C47=>0x5EE8,
+0x9C48=>0x5EE9,
+0x9C49=>0x5EEC,
+0x9C4A=>0x5EF1,
+0x9C4B=>0x5EF3,
+0x9C4C=>0x5EF0,
+0x9C4D=>0x5EF4,
+0x9C4E=>0x5EF8,
+0x9C4F=>0x5EFE,
+0x9C50=>0x5F03,
+0x9C51=>0x5F09,
+0x9C52=>0x5F5D,
+0x9C53=>0x5F5C,
+0x9C54=>0x5F0B,
+0x9C55=>0x5F11,
+0x9C56=>0x5F16,
+0x9C57=>0x5F29,
+0x9C58=>0x5F2D,
+0x9C59=>0x5F38,
+0x9C5A=>0x5F41,
+0x9C5B=>0x5F48,
+0x9C5C=>0x5F4C,
+0x9C5D=>0x5F4E,
+0x9C5E=>0x5F2F,
+0x9C5F=>0x5F51,
+0x9C60=>0x5F56,
+0x9C61=>0x5F57,
+0x9C62=>0x5F59,
+0x9C63=>0x5F61,
+0x9C64=>0x5F6D,
+0x9C65=>0x5F73,
+0x9C66=>0x5F77,
+0x9C67=>0x5F83,
+0x9C68=>0x5F82,
+0x9C69=>0x5F7F,
+0x9C6A=>0x5F8A,
+0x9C6B=>0x5F88,
+0x9C6C=>0x5F91,
+0x9C6D=>0x5F87,
+0x9C6E=>0x5F9E,
+0x9C6F=>0x5F99,
+0x9C70=>0x5F98,
+0x9C71=>0x5FA0,
+0x9C72=>0x5FA8,
+0x9C73=>0x5FAD,
+0x9C74=>0x5FBC,
+0x9C75=>0x5FD6,
+0x9C76=>0x5FFB,
+0x9C77=>0x5FE4,
+0x9C78=>0x5FF8,
+0x9C79=>0x5FF1,
+0x9C7A=>0x5FDD,
+0x9C7B=>0x60B3,
+0x9C7C=>0x5FFF,
+0x9C7D=>0x6021,
+0x9C7E=>0x6060,
+0x9C80=>0x6019,
+0x9C81=>0x6010,
+0x9C82=>0x6029,
+0x9C83=>0x600E,
+0x9C84=>0x6031,
+0x9C85=>0x601B,
+0x9C86=>0x6015,
+0x9C87=>0x602B,
+0x9C88=>0x6026,
+0x9C89=>0x600F,
+0x9C8A=>0x603A,
+0x9C8B=>0x605A,
+0x9C8C=>0x6041,
+0x9C8D=>0x606A,
+0x9C8E=>0x6077,
+0x9C8F=>0x605F,
+0x9C90=>0x604A,
+0x9C91=>0x6046,
+0x9C92=>0x604D,
+0x9C93=>0x6063,
+0x9C94=>0x6043,
+0x9C95=>0x6064,
+0x9C96=>0x6042,
+0x9C97=>0x606C,
+0x9C98=>0x606B,
+0x9C99=>0x6059,
+0x9C9A=>0x6081,
+0x9C9B=>0x608D,
+0x9C9C=>0x60E7,
+0x9C9D=>0x6083,
+0x9C9E=>0x609A,
+0x9C9F=>0x6084,
+0x9CA0=>0x609B,
+0x9CA1=>0x6096,
+0x9CA2=>0x6097,
+0x9CA3=>0x6092,
+0x9CA4=>0x60A7,
+0x9CA5=>0x608B,
+0x9CA6=>0x60E1,
+0x9CA7=>0x60B8,
+0x9CA8=>0x60E0,
+0x9CA9=>0x60D3,
+0x9CAA=>0x60B4,
+0x9CAB=>0x5FF0,
+0x9CAC=>0x60BD,
+0x9CAD=>0x60C6,
+0x9CAE=>0x60B5,
+0x9CAF=>0x60D8,
+0x9CB0=>0x614D,
+0x9CB1=>0x6115,
+0x9CB2=>0x6106,
+0x9CB3=>0x60F6,
+0x9CB4=>0x60F7,
+0x9CB5=>0x6100,
+0x9CB6=>0x60F4,
+0x9CB7=>0x60FA,
+0x9CB8=>0x6103,
+0x9CB9=>0x6121,
+0x9CBA=>0x60FB,
+0x9CBB=>0x60F1,
+0x9CBC=>0x610D,
+0x9CBD=>0x610E,
+0x9CBE=>0x6147,
+0x9CBF=>0x613E,
+0x9CC0=>0x6128,
+0x9CC1=>0x6127,
+0x9CC2=>0x614A,
+0x9CC3=>0x613F,
+0x9CC4=>0x613C,
+0x9CC5=>0x612C,
+0x9CC6=>0x6134,
+0x9CC7=>0x613D,
+0x9CC8=>0x6142,
+0x9CC9=>0x6144,
+0x9CCA=>0x6173,
+0x9CCB=>0x6177,
+0x9CCC=>0x6158,
+0x9CCD=>0x6159,
+0x9CCE=>0x615A,
+0x9CCF=>0x616B,
+0x9CD0=>0x6174,
+0x9CD1=>0x616F,
+0x9CD2=>0x6165,
+0x9CD3=>0x6171,
+0x9CD4=>0x615F,
+0x9CD5=>0x615D,
+0x9CD6=>0x6153,
+0x9CD7=>0x6175,
+0x9CD8=>0x6199,
+0x9CD9=>0x6196,
+0x9CDA=>0x6187,
+0x9CDB=>0x61AC,
+0x9CDC=>0x6194,
+0x9CDD=>0x619A,
+0x9CDE=>0x618A,
+0x9CDF=>0x6191,
+0x9CE0=>0x61AB,
+0x9CE1=>0x61AE,
+0x9CE2=>0x61CC,
+0x9CE3=>0x61CA,
+0x9CE4=>0x61C9,
+0x9CE5=>0x61F7,
+0x9CE6=>0x61C8,
+0x9CE7=>0x61C3,
+0x9CE8=>0x61C6,
+0x9CE9=>0x61BA,
+0x9CEA=>0x61CB,
+0x9CEB=>0x7F79,
+0x9CEC=>0x61CD,
+0x9CED=>0x61E6,
+0x9CEE=>0x61E3,
+0x9CEF=>0x61F6,
+0x9CF0=>0x61FA,
+0x9CF1=>0x61F4,
+0x9CF2=>0x61FF,
+0x9CF3=>0x61FD,
+0x9CF4=>0x61FC,
+0x9CF5=>0x61FE,
+0x9CF6=>0x6200,
+0x9CF7=>0x6208,
+0x9CF8=>0x6209,
+0x9CF9=>0x620D,
+0x9CFA=>0x620C,
+0x9CFB=>0x6214,
+0x9CFC=>0x621B,
+0x9D40=>0x621E,
+0x9D41=>0x6221,
+0x9D42=>0x622A,
+0x9D43=>0x622E,
+0x9D44=>0x6230,
+0x9D45=>0x6232,
+0x9D46=>0x6233,
+0x9D47=>0x6241,
+0x9D48=>0x624E,
+0x9D49=>0x625E,
+0x9D4A=>0x6263,
+0x9D4B=>0x625B,
+0x9D4C=>0x6260,
+0x9D4D=>0x6268,
+0x9D4E=>0x627C,
+0x9D4F=>0x6282,
+0x9D50=>0x6289,
+0x9D51=>0x627E,
+0x9D52=>0x6292,
+0x9D53=>0x6293,
+0x9D54=>0x6296,
+0x9D55=>0x62D4,
+0x9D56=>0x6283,
+0x9D57=>0x6294,
+0x9D58=>0x62D7,
+0x9D59=>0x62D1,
+0x9D5A=>0x62BB,
+0x9D5B=>0x62CF,
+0x9D5C=>0x62FF,
+0x9D5D=>0x62C6,
+0x9D5E=>0x64D4,
+0x9D5F=>0x62C8,
+0x9D60=>0x62DC,
+0x9D61=>0x62CC,
+0x9D62=>0x62CA,
+0x9D63=>0x62C2,
+0x9D64=>0x62C7,
+0x9D65=>0x629B,
+0x9D66=>0x62C9,
+0x9D67=>0x630C,
+0x9D68=>0x62EE,
+0x9D69=>0x62F1,
+0x9D6A=>0x6327,
+0x9D6B=>0x6302,
+0x9D6C=>0x6308,
+0x9D6D=>0x62EF,
+0x9D6E=>0x62F5,
+0x9D6F=>0x6350,
+0x9D70=>0x633E,
+0x9D71=>0x634D,
+0x9D72=>0x641C,
+0x9D73=>0x634F,
+0x9D74=>0x6396,
+0x9D75=>0x638E,
+0x9D76=>0x6380,
+0x9D77=>0x63AB,
+0x9D78=>0x6376,
+0x9D79=>0x63A3,
+0x9D7A=>0x638F,
+0x9D7B=>0x6389,
+0x9D7C=>0x639F,
+0x9D7D=>0x63B5,
+0x9D7E=>0x636B,
+0x9D80=>0x6369,
+0x9D81=>0x63BE,
+0x9D82=>0x63E9,
+0x9D83=>0x63C0,
+0x9D84=>0x63C6,
+0x9D85=>0x63E3,
+0x9D86=>0x63C9,
+0x9D87=>0x63D2,
+0x9D88=>0x63F6,
+0x9D89=>0x63C4,
+0x9D8A=>0x6416,
+0x9D8B=>0x6434,
+0x9D8C=>0x6406,
+0x9D8D=>0x6413,
+0x9D8E=>0x6426,
+0x9D8F=>0x6436,
+0x9D90=>0x651D,
+0x9D91=>0x6417,
+0x9D92=>0x6428,
+0x9D93=>0x640F,
+0x9D94=>0x6467,
+0x9D95=>0x646F,
+0x9D96=>0x6476,
+0x9D97=>0x644E,
+0x9D98=>0x652A,
+0x9D99=>0x6495,
+0x9D9A=>0x6493,
+0x9D9B=>0x64A5,
+0x9D9C=>0x64A9,
+0x9D9D=>0x6488,
+0x9D9E=>0x64BC,
+0x9D9F=>0x64DA,
+0x9DA0=>0x64D2,
+0x9DA1=>0x64C5,
+0x9DA2=>0x64C7,
+0x9DA3=>0x64BB,
+0x9DA4=>0x64D8,
+0x9DA5=>0x64C2,
+0x9DA6=>0x64F1,
+0x9DA7=>0x64E7,
+0x9DA8=>0x8209,
+0x9DA9=>0x64E0,
+0x9DAA=>0x64E1,
+0x9DAB=>0x62AC,
+0x9DAC=>0x64E3,
+0x9DAD=>0x64EF,
+0x9DAE=>0x652C,
+0x9DAF=>0x64F6,
+0x9DB0=>0x64F4,
+0x9DB1=>0x64F2,
+0x9DB2=>0x64FA,
+0x9DB3=>0x6500,
+0x9DB4=>0x64FD,
+0x9DB5=>0x6518,
+0x9DB6=>0x651C,
+0x9DB7=>0x6505,
+0x9DB8=>0x6524,
+0x9DB9=>0x6523,
+0x9DBA=>0x652B,
+0x9DBB=>0x6534,
+0x9DBC=>0x6535,
+0x9DBD=>0x6537,
+0x9DBE=>0x6536,
+0x9DBF=>0x6538,
+0x9DC0=>0x754B,
+0x9DC1=>0x6548,
+0x9DC2=>0x6556,
+0x9DC3=>0x6555,
+0x9DC4=>0x654D,
+0x9DC5=>0x6558,
+0x9DC6=>0x655E,
+0x9DC7=>0x655D,
+0x9DC8=>0x6572,
+0x9DC9=>0x6578,
+0x9DCA=>0x6582,
+0x9DCB=>0x6583,
+0x9DCC=>0x8B8A,
+0x9DCD=>0x659B,
+0x9DCE=>0x659F,
+0x9DCF=>0x65AB,
+0x9DD0=>0x65B7,
+0x9DD1=>0x65C3,
+0x9DD2=>0x65C6,
+0x9DD3=>0x65C1,
+0x9DD4=>0x65C4,
+0x9DD5=>0x65CC,
+0x9DD6=>0x65D2,
+0x9DD7=>0x65DB,
+0x9DD8=>0x65D9,
+0x9DD9=>0x65E0,
+0x9DDA=>0x65E1,
+0x9DDB=>0x65F1,
+0x9DDC=>0x6772,
+0x9DDD=>0x660A,
+0x9DDE=>0x6603,
+0x9DDF=>0x65FB,
+0x9DE0=>0x6773,
+0x9DE1=>0x6635,
+0x9DE2=>0x6636,
+0x9DE3=>0x6634,
+0x9DE4=>0x661C,
+0x9DE5=>0x664F,
+0x9DE6=>0x6644,
+0x9DE7=>0x6649,
+0x9DE8=>0x6641,
+0x9DE9=>0x665E,
+0x9DEA=>0x665D,
+0x9DEB=>0x6664,
+0x9DEC=>0x6667,
+0x9DED=>0x6668,
+0x9DEE=>0x665F,
+0x9DEF=>0x6662,
+0x9DF0=>0x6670,
+0x9DF1=>0x6683,
+0x9DF2=>0x6688,
+0x9DF3=>0x668E,
+0x9DF4=>0x6689,
+0x9DF5=>0x6684,
+0x9DF6=>0x6698,
+0x9DF7=>0x669D,
+0x9DF8=>0x66C1,
+0x9DF9=>0x66B9,
+0x9DFA=>0x66C9,
+0x9DFB=>0x66BE,
+0x9DFC=>0x66BC,
+0x9E40=>0x66C4,
+0x9E41=>0x66B8,
+0x9E42=>0x66D6,
+0x9E43=>0x66DA,
+0x9E44=>0x66E0,
+0x9E45=>0x663F,
+0x9E46=>0x66E6,
+0x9E47=>0x66E9,
+0x9E48=>0x66F0,
+0x9E49=>0x66F5,
+0x9E4A=>0x66F7,
+0x9E4B=>0x670F,
+0x9E4C=>0x6716,
+0x9E4D=>0x671E,
+0x9E4E=>0x6726,
+0x9E4F=>0x6727,
+0x9E50=>0x9738,
+0x9E51=>0x672E,
+0x9E52=>0x673F,
+0x9E53=>0x6736,
+0x9E54=>0x6741,
+0x9E55=>0x6738,
+0x9E56=>0x6737,
+0x9E57=>0x6746,
+0x9E58=>0x675E,
+0x9E59=>0x6760,
+0x9E5A=>0x6759,
+0x9E5B=>0x6763,
+0x9E5C=>0x6764,
+0x9E5D=>0x6789,
+0x9E5E=>0x6770,
+0x9E5F=>0x67A9,
+0x9E60=>0x677C,
+0x9E61=>0x676A,
+0x9E62=>0x678C,
+0x9E63=>0x678B,
+0x9E64=>0x67A6,
+0x9E65=>0x67A1,
+0x9E66=>0x6785,
+0x9E67=>0x67B7,
+0x9E68=>0x67EF,
+0x9E69=>0x67B4,
+0x9E6A=>0x67EC,
+0x9E6B=>0x67B3,
+0x9E6C=>0x67E9,
+0x9E6D=>0x67B8,
+0x9E6E=>0x67E4,
+0x9E6F=>0x67DE,
+0x9E70=>0x67DD,
+0x9E71=>0x67E2,
+0x9E72=>0x67EE,
+0x9E73=>0x67B9,
+0x9E74=>0x67CE,
+0x9E75=>0x67C6,
+0x9E76=>0x67E7,
+0x9E77=>0x6A9C,
+0x9E78=>0x681E,
+0x9E79=>0x6846,
+0x9E7A=>0x6829,
+0x9E7B=>0x6840,
+0x9E7C=>0x684D,
+0x9E7D=>0x6832,
+0x9E7E=>0x684E,
+0x9E80=>0x68B3,
+0x9E81=>0x682B,
+0x9E82=>0x6859,
+0x9E83=>0x6863,
+0x9E84=>0x6877,
+0x9E85=>0x687F,
+0x9E86=>0x689F,
+0x9E87=>0x688F,
+0x9E88=>0x68AD,
+0x9E89=>0x6894,
+0x9E8A=>0x689D,
+0x9E8B=>0x689B,
+0x9E8C=>0x6883,
+0x9E8D=>0x6AAE,
+0x9E8E=>0x68B9,
+0x9E8F=>0x6874,
+0x9E90=>0x68B5,
+0x9E91=>0x68A0,
+0x9E92=>0x68BA,
+0x9E93=>0x690F,
+0x9E94=>0x688D,
+0x9E95=>0x687E,
+0x9E96=>0x6901,
+0x9E97=>0x68CA,
+0x9E98=>0x6908,
+0x9E99=>0x68D8,
+0x9E9A=>0x6922,
+0x9E9B=>0x6926,
+0x9E9C=>0x68E1,
+0x9E9D=>0x690C,
+0x9E9E=>0x68CD,
+0x9E9F=>0x68D4,
+0x9EA0=>0x68E7,
+0x9EA1=>0x68D5,
+0x9EA2=>0x6936,
+0x9EA3=>0x6912,
+0x9EA4=>0x6904,
+0x9EA5=>0x68D7,
+0x9EA6=>0x68E3,
+0x9EA7=>0x6925,
+0x9EA8=>0x68F9,
+0x9EA9=>0x68E0,
+0x9EAA=>0x68EF,
+0x9EAB=>0x6928,
+0x9EAC=>0x692A,
+0x9EAD=>0x691A,
+0x9EAE=>0x6923,
+0x9EAF=>0x6921,
+0x9EB0=>0x68C6,
+0x9EB1=>0x6979,
+0x9EB2=>0x6977,
+0x9EB3=>0x695C,
+0x9EB4=>0x6978,
+0x9EB5=>0x696B,
+0x9EB6=>0x6954,
+0x9EB7=>0x697E,
+0x9EB8=>0x696E,
+0x9EB9=>0x6939,
+0x9EBA=>0x6974,
+0x9EBB=>0x693D,
+0x9EBC=>0x6959,
+0x9EBD=>0x6930,
+0x9EBE=>0x6961,
+0x9EBF=>0x695E,
+0x9EC0=>0x695D,
+0x9EC1=>0x6981,
+0x9EC2=>0x696A,
+0x9EC3=>0x69B2,
+0x9EC4=>0x69AE,
+0x9EC5=>0x69D0,
+0x9EC6=>0x69BF,
+0x9EC7=>0x69C1,
+0x9EC8=>0x69D3,
+0x9EC9=>0x69BE,
+0x9ECA=>0x69CE,
+0x9ECB=>0x5BE8,
+0x9ECC=>0x69CA,
+0x9ECD=>0x69DD,
+0x9ECE=>0x69BB,
+0x9ECF=>0x69C3,
+0x9ED0=>0x69A7,
+0x9ED1=>0x6A2E,
+0x9ED2=>0x6991,
+0x9ED3=>0x69A0,
+0x9ED4=>0x699C,
+0x9ED5=>0x6995,
+0x9ED6=>0x69B4,
+0x9ED7=>0x69DE,
+0x9ED8=>0x69E8,
+0x9ED9=>0x6A02,
+0x9EDA=>0x6A1B,
+0x9EDB=>0x69FF,
+0x9EDC=>0x6B0A,
+0x9EDD=>0x69F9,
+0x9EDE=>0x69F2,
+0x9EDF=>0x69E7,
+0x9EE0=>0x6A05,
+0x9EE1=>0x69B1,
+0x9EE2=>0x6A1E,
+0x9EE3=>0x69ED,
+0x9EE4=>0x6A14,
+0x9EE5=>0x69EB,
+0x9EE6=>0x6A0A,
+0x9EE7=>0x6A12,
+0x9EE8=>0x6AC1,
+0x9EE9=>0x6A23,
+0x9EEA=>0x6A13,
+0x9EEB=>0x6A44,
+0x9EEC=>0x6A0C,
+0x9EED=>0x6A72,
+0x9EEE=>0x6A36,
+0x9EEF=>0x6A78,
+0x9EF0=>0x6A47,
+0x9EF1=>0x6A62,
+0x9EF2=>0x6A59,
+0x9EF3=>0x6A66,
+0x9EF4=>0x6A48,
+0x9EF5=>0x6A38,
+0x9EF6=>0x6A22,
+0x9EF7=>0x6A90,
+0x9EF8=>0x6A8D,
+0x9EF9=>0x6AA0,
+0x9EFA=>0x6A84,
+0x9EFB=>0x6AA2,
+0x9EFC=>0x6AA3,
+0x9F40=>0x6A97,
+0x9F41=>0x8617,
+0x9F42=>0x6ABB,
+0x9F43=>0x6AC3,
+0x9F44=>0x6AC2,
+0x9F45=>0x6AB8,
+0x9F46=>0x6AB3,
+0x9F47=>0x6AAC,
+0x9F48=>0x6ADE,
+0x9F49=>0x6AD1,
+0x9F4A=>0x6ADF,
+0x9F4B=>0x6AAA,
+0x9F4C=>0x6ADA,
+0x9F4D=>0x6AEA,
+0x9F4E=>0x6AFB,
+0x9F4F=>0x6B05,
+0x9F50=>0x8616,
+0x9F51=>0x6AFA,
+0x9F52=>0x6B12,
+0x9F53=>0x6B16,
+0x9F54=>0x9B31,
+0x9F55=>0x6B1F,
+0x9F56=>0x6B38,
+0x9F57=>0x6B37,
+0x9F58=>0x76DC,
+0x9F59=>0x6B39,
+0x9F5A=>0x98EE,
+0x9F5B=>0x6B47,
+0x9F5C=>0x6B43,
+0x9F5D=>0x6B49,
+0x9F5E=>0x6B50,
+0x9F5F=>0x6B59,
+0x9F60=>0x6B54,
+0x9F61=>0x6B5B,
+0x9F62=>0x6B5F,
+0x9F63=>0x6B61,
+0x9F64=>0x6B78,
+0x9F65=>0x6B79,
+0x9F66=>0x6B7F,
+0x9F67=>0x6B80,
+0x9F68=>0x6B84,
+0x9F69=>0x6B83,
+0x9F6A=>0x6B8D,
+0x9F6B=>0x6B98,
+0x9F6C=>0x6B95,
+0x9F6D=>0x6B9E,
+0x9F6E=>0x6BA4,
+0x9F6F=>0x6BAA,
+0x9F70=>0x6BAB,
+0x9F71=>0x6BAF,
+0x9F72=>0x6BB2,
+0x9F73=>0x6BB1,
+0x9F74=>0x6BB3,
+0x9F75=>0x6BB7,
+0x9F76=>0x6BBC,
+0x9F77=>0x6BC6,
+0x9F78=>0x6BCB,
+0x9F79=>0x6BD3,
+0x9F7A=>0x6BDF,
+0x9F7B=>0x6BEC,
+0x9F7C=>0x6BEB,
+0x9F7D=>0x6BF3,
+0x9F7E=>0x6BEF,
+0x9F80=>0x9EBE,
+0x9F81=>0x6C08,
+0x9F82=>0x6C13,
+0x9F83=>0x6C14,
+0x9F84=>0x6C1B,
+0x9F85=>0x6C24,
+0x9F86=>0x6C23,
+0x9F87=>0x6C5E,
+0x9F88=>0x6C55,
+0x9F89=>0x6C62,
+0x9F8A=>0x6C6A,
+0x9F8B=>0x6C82,
+0x9F8C=>0x6C8D,
+0x9F8D=>0x6C9A,
+0x9F8E=>0x6C81,
+0x9F8F=>0x6C9B,
+0x9F90=>0x6C7E,
+0x9F91=>0x6C68,
+0x9F92=>0x6C73,
+0x9F93=>0x6C92,
+0x9F94=>0x6C90,
+0x9F95=>0x6CC4,
+0x9F96=>0x6CF1,
+0x9F97=>0x6CD3,
+0x9F98=>0x6CBD,
+0x9F99=>0x6CD7,
+0x9F9A=>0x6CC5,
+0x9F9B=>0x6CDD,
+0x9F9C=>0x6CAE,
+0x9F9D=>0x6CB1,
+0x9F9E=>0x6CBE,
+0x9F9F=>0x6CBA,
+0x9FA0=>0x6CDB,
+0x9FA1=>0x6CEF,
+0x9FA2=>0x6CD9,
+0x9FA3=>0x6CEA,
+0x9FA4=>0x6D1F,
+0x9FA5=>0x884D,
+0x9FA6=>0x6D36,
+0x9FA7=>0x6D2B,
+0x9FA8=>0x6D3D,
+0x9FA9=>0x6D38,
+0x9FAA=>0x6D19,
+0x9FAB=>0x6D35,
+0x9FAC=>0x6D33,
+0x9FAD=>0x6D12,
+0x9FAE=>0x6D0C,
+0x9FAF=>0x6D63,
+0x9FB0=>0x6D93,
+0x9FB1=>0x6D64,
+0x9FB2=>0x6D5A,
+0x9FB3=>0x6D79,
+0x9FB4=>0x6D59,
+0x9FB5=>0x6D8E,
+0x9FB6=>0x6D95,
+0x9FB7=>0x6FE4,
+0x9FB8=>0x6D85,
+0x9FB9=>0x6DF9,
+0x9FBA=>0x6E15,
+0x9FBB=>0x6E0A,
+0x9FBC=>0x6DB5,
+0x9FBD=>0x6DC7,
+0x9FBE=>0x6DE6,
+0x9FBF=>0x6DB8,
+0x9FC0=>0x6DC6,
+0x9FC1=>0x6DEC,
+0x9FC2=>0x6DDE,
+0x9FC3=>0x6DCC,
+0x9FC4=>0x6DE8,
+0x9FC5=>0x6DD2,
+0x9FC6=>0x6DC5,
+0x9FC7=>0x6DFA,
+0x9FC8=>0x6DD9,
+0x9FC9=>0x6DE4,
+0x9FCA=>0x6DD5,
+0x9FCB=>0x6DEA,
+0x9FCC=>0x6DEE,
+0x9FCD=>0x6E2D,
+0x9FCE=>0x6E6E,
+0x9FCF=>0x6E2E,
+0x9FD0=>0x6E19,
+0x9FD1=>0x6E72,
+0x9FD2=>0x6E5F,
+0x9FD3=>0x6E3E,
+0x9FD4=>0x6E23,
+0x9FD5=>0x6E6B,
+0x9FD6=>0x6E2B,
+0x9FD7=>0x6E76,
+0x9FD8=>0x6E4D,
+0x9FD9=>0x6E1F,
+0x9FDA=>0x6E43,
+0x9FDB=>0x6E3A,
+0x9FDC=>0x6E4E,
+0x9FDD=>0x6E24,
+0x9FDE=>0x6EFF,
+0x9FDF=>0x6E1D,
+0x9FE0=>0x6E38,
+0x9FE1=>0x6E82,
+0x9FE2=>0x6EAA,
+0x9FE3=>0x6E98,
+0x9FE4=>0x6EC9,
+0x9FE5=>0x6EB7,
+0x9FE6=>0x6ED3,
+0x9FE7=>0x6EBD,
+0x9FE8=>0x6EAF,
+0x9FE9=>0x6EC4,
+0x9FEA=>0x6EB2,
+0x9FEB=>0x6ED4,
+0x9FEC=>0x6ED5,
+0x9FED=>0x6E8F,
+0x9FEE=>0x6EA5,
+0x9FEF=>0x6EC2,
+0x9FF0=>0x6E9F,
+0x9FF1=>0x6F41,
+0x9FF2=>0x6F11,
+0x9FF3=>0x704C,
+0x9FF4=>0x6EEC,
+0x9FF5=>0x6EF8,
+0x9FF6=>0x6EFE,
+0x9FF7=>0x6F3F,
+0x9FF8=>0x6EF2,
+0x9FF9=>0x6F31,
+0x9FFA=>0x6EEF,
+0x9FFB=>0x6F32,
+0x9FFC=>0x6ECC,
+0xE040=>0x6F3E,
+0xE041=>0x6F13,
+0xE042=>0x6EF7,
+0xE043=>0x6F86,
+0xE044=>0x6F7A,
+0xE045=>0x6F78,
+0xE046=>0x6F81,
+0xE047=>0x6F80,
+0xE048=>0x6F6F,
+0xE049=>0x6F5B,
+0xE04A=>0x6FF3,
+0xE04B=>0x6F6D,
+0xE04C=>0x6F82,
+0xE04D=>0x6F7C,
+0xE04E=>0x6F58,
+0xE04F=>0x6F8E,
+0xE050=>0x6F91,
+0xE051=>0x6FC2,
+0xE052=>0x6F66,
+0xE053=>0x6FB3,
+0xE054=>0x6FA3,
+0xE055=>0x6FA1,
+0xE056=>0x6FA4,
+0xE057=>0x6FB9,
+0xE058=>0x6FC6,
+0xE059=>0x6FAA,
+0xE05A=>0x6FDF,
+0xE05B=>0x6FD5,
+0xE05C=>0x6FEC,
+0xE05D=>0x6FD4,
+0xE05E=>0x6FD8,
+0xE05F=>0x6FF1,
+0xE060=>0x6FEE,
+0xE061=>0x6FDB,
+0xE062=>0x7009,
+0xE063=>0x700B,
+0xE064=>0x6FFA,
+0xE065=>0x7011,
+0xE066=>0x7001,
+0xE067=>0x700F,
+0xE068=>0x6FFE,
+0xE069=>0x701B,
+0xE06A=>0x701A,
+0xE06B=>0x6F74,
+0xE06C=>0x701D,
+0xE06D=>0x7018,
+0xE06E=>0x701F,
+0xE06F=>0x7030,
+0xE070=>0x703E,
+0xE071=>0x7032,
+0xE072=>0x7051,
+0xE073=>0x7063,
+0xE074=>0x7099,
+0xE075=>0x7092,
+0xE076=>0x70AF,
+0xE077=>0x70F1,
+0xE078=>0x70AC,
+0xE079=>0x70B8,
+0xE07A=>0x70B3,
+0xE07B=>0x70AE,
+0xE07C=>0x70DF,
+0xE07D=>0x70CB,
+0xE07E=>0x70DD,
+0xE080=>0x70D9,
+0xE081=>0x7109,
+0xE082=>0x70FD,
+0xE083=>0x711C,
+0xE084=>0x7119,
+0xE085=>0x7165,
+0xE086=>0x7155,
+0xE087=>0x7188,
+0xE088=>0x7166,
+0xE089=>0x7162,
+0xE08A=>0x714C,
+0xE08B=>0x7156,
+0xE08C=>0x716C,
+0xE08D=>0x718F,
+0xE08E=>0x71FB,
+0xE08F=>0x7184,
+0xE090=>0x7195,
+0xE091=>0x71A8,
+0xE092=>0x71AC,
+0xE093=>0x71D7,
+0xE094=>0x71B9,
+0xE095=>0x71BE,
+0xE096=>0x71D2,
+0xE097=>0x71C9,
+0xE098=>0x71D4,
+0xE099=>0x71CE,
+0xE09A=>0x71E0,
+0xE09B=>0x71EC,
+0xE09C=>0x71E7,
+0xE09D=>0x71F5,
+0xE09E=>0x71FC,
+0xE09F=>0x71F9,
+0xE0A0=>0x71FF,
+0xE0A1=>0x720D,
+0xE0A2=>0x7210,
+0xE0A3=>0x721B,
+0xE0A4=>0x7228,
+0xE0A5=>0x722D,
+0xE0A6=>0x722C,
+0xE0A7=>0x7230,
+0xE0A8=>0x7232,
+0xE0A9=>0x723B,
+0xE0AA=>0x723C,
+0xE0AB=>0x723F,
+0xE0AC=>0x7240,
+0xE0AD=>0x7246,
+0xE0AE=>0x724B,
+0xE0AF=>0x7258,
+0xE0B0=>0x7274,
+0xE0B1=>0x727E,
+0xE0B2=>0x7282,
+0xE0B3=>0x7281,
+0xE0B4=>0x7287,
+0xE0B5=>0x7292,
+0xE0B6=>0x7296,
+0xE0B7=>0x72A2,
+0xE0B8=>0x72A7,
+0xE0B9=>0x72B9,
+0xE0BA=>0x72B2,
+0xE0BB=>0x72C3,
+0xE0BC=>0x72C6,
+0xE0BD=>0x72C4,
+0xE0BE=>0x72CE,
+0xE0BF=>0x72D2,
+0xE0C0=>0x72E2,
+0xE0C1=>0x72E0,
+0xE0C2=>0x72E1,
+0xE0C3=>0x72F9,
+0xE0C4=>0x72F7,
+0xE0C5=>0x500F,
+0xE0C6=>0x7317,
+0xE0C7=>0x730A,
+0xE0C8=>0x731C,
+0xE0C9=>0x7316,
+0xE0CA=>0x731D,
+0xE0CB=>0x7334,
+0xE0CC=>0x732F,
+0xE0CD=>0x7329,
+0xE0CE=>0x7325,
+0xE0CF=>0x733E,
+0xE0D0=>0x734E,
+0xE0D1=>0x734F,
+0xE0D2=>0x9ED8,
+0xE0D3=>0x7357,
+0xE0D4=>0x736A,
+0xE0D5=>0x7368,
+0xE0D6=>0x7370,
+0xE0D7=>0x7378,
+0xE0D8=>0x7375,
+0xE0D9=>0x737B,
+0xE0DA=>0x737A,
+0xE0DB=>0x73C8,
+0xE0DC=>0x73B3,
+0xE0DD=>0x73CE,
+0xE0DE=>0x73BB,
+0xE0DF=>0x73C0,
+0xE0E0=>0x73E5,
+0xE0E1=>0x73EE,
+0xE0E2=>0x73DE,
+0xE0E3=>0x74A2,
+0xE0E4=>0x7405,
+0xE0E5=>0x746F,
+0xE0E6=>0x7425,
+0xE0E7=>0x73F8,
+0xE0E8=>0x7432,
+0xE0E9=>0x743A,
+0xE0EA=>0x7455,
+0xE0EB=>0x743F,
+0xE0EC=>0x745F,
+0xE0ED=>0x7459,
+0xE0EE=>0x7441,
+0xE0EF=>0x745C,
+0xE0F0=>0x7469,
+0xE0F1=>0x7470,
+0xE0F2=>0x7463,
+0xE0F3=>0x746A,
+0xE0F4=>0x7476,
+0xE0F5=>0x747E,
+0xE0F6=>0x748B,
+0xE0F7=>0x749E,
+0xE0F8=>0x74A7,
+0xE0F9=>0x74CA,
+0xE0FA=>0x74CF,
+0xE0FB=>0x74D4,
+0xE0FC=>0x73F1,
+0xE140=>0x74E0,
+0xE141=>0x74E3,
+0xE142=>0x74E7,
+0xE143=>0x74E9,
+0xE144=>0x74EE,
+0xE145=>0x74F2,
+0xE146=>0x74F0,
+0xE147=>0x74F1,
+0xE148=>0x74F8,
+0xE149=>0x74F7,
+0xE14A=>0x7504,
+0xE14B=>0x7503,
+0xE14C=>0x7505,
+0xE14D=>0x750C,
+0xE14E=>0x750E,
+0xE14F=>0x750D,
+0xE150=>0x7515,
+0xE151=>0x7513,
+0xE152=>0x751E,
+0xE153=>0x7526,
+0xE154=>0x752C,
+0xE155=>0x753C,
+0xE156=>0x7544,
+0xE157=>0x754D,
+0xE158=>0x754A,
+0xE159=>0x7549,
+0xE15A=>0x755B,
+0xE15B=>0x7546,
+0xE15C=>0x755A,
+0xE15D=>0x7569,
+0xE15E=>0x7564,
+0xE15F=>0x7567,
+0xE160=>0x756B,
+0xE161=>0x756D,
+0xE162=>0x7578,
+0xE163=>0x7576,
+0xE164=>0x7586,
+0xE165=>0x7587,
+0xE166=>0x7574,
+0xE167=>0x758A,
+0xE168=>0x7589,
+0xE169=>0x7582,
+0xE16A=>0x7594,
+0xE16B=>0x759A,
+0xE16C=>0x759D,
+0xE16D=>0x75A5,
+0xE16E=>0x75A3,
+0xE16F=>0x75C2,
+0xE170=>0x75B3,
+0xE171=>0x75C3,
+0xE172=>0x75B5,
+0xE173=>0x75BD,
+0xE174=>0x75B8,
+0xE175=>0x75BC,
+0xE176=>0x75B1,
+0xE177=>0x75CD,
+0xE178=>0x75CA,
+0xE179=>0x75D2,
+0xE17A=>0x75D9,
+0xE17B=>0x75E3,
+0xE17C=>0x75DE,
+0xE17D=>0x75FE,
+0xE17E=>0x75FF,
+0xE180=>0x75FC,
+0xE181=>0x7601,
+0xE182=>0x75F0,
+0xE183=>0x75FA,
+0xE184=>0x75F2,
+0xE185=>0x75F3,
+0xE186=>0x760B,
+0xE187=>0x760D,
+0xE188=>0x7609,
+0xE189=>0x761F,
+0xE18A=>0x7627,
+0xE18B=>0x7620,
+0xE18C=>0x7621,
+0xE18D=>0x7622,
+0xE18E=>0x7624,
+0xE18F=>0x7634,
+0xE190=>0x7630,
+0xE191=>0x763B,
+0xE192=>0x7647,
+0xE193=>0x7648,
+0xE194=>0x7646,
+0xE195=>0x765C,
+0xE196=>0x7658,
+0xE197=>0x7661,
+0xE198=>0x7662,
+0xE199=>0x7668,
+0xE19A=>0x7669,
+0xE19B=>0x766A,
+0xE19C=>0x7667,
+0xE19D=>0x766C,
+0xE19E=>0x7670,
+0xE19F=>0x7672,
+0xE1A0=>0x7676,
+0xE1A1=>0x7678,
+0xE1A2=>0x767C,
+0xE1A3=>0x7680,
+0xE1A4=>0x7683,
+0xE1A5=>0x7688,
+0xE1A6=>0x768B,
+0xE1A7=>0x768E,
+0xE1A8=>0x7696,
+0xE1A9=>0x7693,
+0xE1AA=>0x7699,
+0xE1AB=>0x769A,
+0xE1AC=>0x76B0,
+0xE1AD=>0x76B4,
+0xE1AE=>0x76B8,
+0xE1AF=>0x76B9,
+0xE1B0=>0x76BA,
+0xE1B1=>0x76C2,
+0xE1B2=>0x76CD,
+0xE1B3=>0x76D6,
+0xE1B4=>0x76D2,
+0xE1B5=>0x76DE,
+0xE1B6=>0x76E1,
+0xE1B7=>0x76E5,
+0xE1B8=>0x76E7,
+0xE1B9=>0x76EA,
+0xE1BA=>0x862F,
+0xE1BB=>0x76FB,
+0xE1BC=>0x7708,
+0xE1BD=>0x7707,
+0xE1BE=>0x7704,
+0xE1BF=>0x7729,
+0xE1C0=>0x7724,
+0xE1C1=>0x771E,
+0xE1C2=>0x7725,
+0xE1C3=>0x7726,
+0xE1C4=>0x771B,
+0xE1C5=>0x7737,
+0xE1C6=>0x7738,
+0xE1C7=>0x7747,
+0xE1C8=>0x775A,
+0xE1C9=>0x7768,
+0xE1CA=>0x776B,
+0xE1CB=>0x775B,
+0xE1CC=>0x7765,
+0xE1CD=>0x777F,
+0xE1CE=>0x777E,
+0xE1CF=>0x7779,
+0xE1D0=>0x778E,
+0xE1D1=>0x778B,
+0xE1D2=>0x7791,
+0xE1D3=>0x77A0,
+0xE1D4=>0x779E,
+0xE1D5=>0x77B0,
+0xE1D6=>0x77B6,
+0xE1D7=>0x77B9,
+0xE1D8=>0x77BF,
+0xE1D9=>0x77BC,
+0xE1DA=>0x77BD,
+0xE1DB=>0x77BB,
+0xE1DC=>0x77C7,
+0xE1DD=>0x77CD,
+0xE1DE=>0x77D7,
+0xE1DF=>0x77DA,
+0xE1E0=>0x77DC,
+0xE1E1=>0x77E3,
+0xE1E2=>0x77EE,
+0xE1E3=>0x77FC,
+0xE1E4=>0x780C,
+0xE1E5=>0x7812,
+0xE1E6=>0x7926,
+0xE1E7=>0x7820,
+0xE1E8=>0x792A,
+0xE1E9=>0x7845,
+0xE1EA=>0x788E,
+0xE1EB=>0x7874,
+0xE1EC=>0x7886,
+0xE1ED=>0x787C,
+0xE1EE=>0x789A,
+0xE1EF=>0x788C,
+0xE1F0=>0x78A3,
+0xE1F1=>0x78B5,
+0xE1F2=>0x78AA,
+0xE1F3=>0x78AF,
+0xE1F4=>0x78D1,
+0xE1F5=>0x78C6,
+0xE1F6=>0x78CB,
+0xE1F7=>0x78D4,
+0xE1F8=>0x78BE,
+0xE1F9=>0x78BC,
+0xE1FA=>0x78C5,
+0xE1FB=>0x78CA,
+0xE1FC=>0x78EC,
+0xE240=>0x78E7,
+0xE241=>0x78DA,
+0xE242=>0x78FD,
+0xE243=>0x78F4,
+0xE244=>0x7907,
+0xE245=>0x7912,
+0xE246=>0x7911,
+0xE247=>0x7919,
+0xE248=>0x792C,
+0xE249=>0x792B,
+0xE24A=>0x7940,
+0xE24B=>0x7960,
+0xE24C=>0x7957,
+0xE24D=>0x795F,
+0xE24E=>0x795A,
+0xE24F=>0x7955,
+0xE250=>0x7953,
+0xE251=>0x797A,
+0xE252=>0x797F,
+0xE253=>0x798A,
+0xE254=>0x799D,
+0xE255=>0x79A7,
+0xE256=>0x9F4B,
+0xE257=>0x79AA,
+0xE258=>0x79AE,
+0xE259=>0x79B3,
+0xE25A=>0x79B9,
+0xE25B=>0x79BA,
+0xE25C=>0x79C9,
+0xE25D=>0x79D5,
+0xE25E=>0x79E7,
+0xE25F=>0x79EC,
+0xE260=>0x79E1,
+0xE261=>0x79E3,
+0xE262=>0x7A08,
+0xE263=>0x7A0D,
+0xE264=>0x7A18,
+0xE265=>0x7A19,
+0xE266=>0x7A20,
+0xE267=>0x7A1F,
+0xE268=>0x7980,
+0xE269=>0x7A31,
+0xE26A=>0x7A3B,
+0xE26B=>0x7A3E,
+0xE26C=>0x7A37,
+0xE26D=>0x7A43,
+0xE26E=>0x7A57,
+0xE26F=>0x7A49,
+0xE270=>0x7A61,
+0xE271=>0x7A62,
+0xE272=>0x7A69,
+0xE273=>0x9F9D,
+0xE274=>0x7A70,
+0xE275=>0x7A79,
+0xE276=>0x7A7D,
+0xE277=>0x7A88,
+0xE278=>0x7A97,
+0xE279=>0x7A95,
+0xE27A=>0x7A98,
+0xE27B=>0x7A96,
+0xE27C=>0x7AA9,
+0xE27D=>0x7AC8,
+0xE27E=>0x7AB0,
+0xE280=>0x7AB6,
+0xE281=>0x7AC5,
+0xE282=>0x7AC4,
+0xE283=>0x7ABF,
+0xE284=>0x9083,
+0xE285=>0x7AC7,
+0xE286=>0x7ACA,
+0xE287=>0x7ACD,
+0xE288=>0x7ACF,
+0xE289=>0x7AD5,
+0xE28A=>0x7AD3,
+0xE28B=>0x7AD9,
+0xE28C=>0x7ADA,
+0xE28D=>0x7ADD,
+0xE28E=>0x7AE1,
+0xE28F=>0x7AE2,
+0xE290=>0x7AE6,
+0xE291=>0x7AED,
+0xE292=>0x7AF0,
+0xE293=>0x7B02,
+0xE294=>0x7B0F,
+0xE295=>0x7B0A,
+0xE296=>0x7B06,
+0xE297=>0x7B33,
+0xE298=>0x7B18,
+0xE299=>0x7B19,
+0xE29A=>0x7B1E,
+0xE29B=>0x7B35,
+0xE29C=>0x7B28,
+0xE29D=>0x7B36,
+0xE29E=>0x7B50,
+0xE29F=>0x7B7A,
+0xE2A0=>0x7B04,
+0xE2A1=>0x7B4D,
+0xE2A2=>0x7B0B,
+0xE2A3=>0x7B4C,
+0xE2A4=>0x7B45,
+0xE2A5=>0x7B75,
+0xE2A6=>0x7B65,
+0xE2A7=>0x7B74,
+0xE2A8=>0x7B67,
+0xE2A9=>0x7B70,
+0xE2AA=>0x7B71,
+0xE2AB=>0x7B6C,
+0xE2AC=>0x7B6E,
+0xE2AD=>0x7B9D,
+0xE2AE=>0x7B98,
+0xE2AF=>0x7B9F,
+0xE2B0=>0x7B8D,
+0xE2B1=>0x7B9C,
+0xE2B2=>0x7B9A,
+0xE2B3=>0x7B8B,
+0xE2B4=>0x7B92,
+0xE2B5=>0x7B8F,
+0xE2B6=>0x7B5D,
+0xE2B7=>0x7B99,
+0xE2B8=>0x7BCB,
+0xE2B9=>0x7BC1,
+0xE2BA=>0x7BCC,
+0xE2BB=>0x7BCF,
+0xE2BC=>0x7BB4,
+0xE2BD=>0x7BC6,
+0xE2BE=>0x7BDD,
+0xE2BF=>0x7BE9,
+0xE2C0=>0x7C11,
+0xE2C1=>0x7C14,
+0xE2C2=>0x7BE6,
+0xE2C3=>0x7BE5,
+0xE2C4=>0x7C60,
+0xE2C5=>0x7C00,
+0xE2C6=>0x7C07,
+0xE2C7=>0x7C13,
+0xE2C8=>0x7BF3,
+0xE2C9=>0x7BF7,
+0xE2CA=>0x7C17,
+0xE2CB=>0x7C0D,
+0xE2CC=>0x7BF6,
+0xE2CD=>0x7C23,
+0xE2CE=>0x7C27,
+0xE2CF=>0x7C2A,
+0xE2D0=>0x7C1F,
+0xE2D1=>0x7C37,
+0xE2D2=>0x7C2B,
+0xE2D3=>0x7C3D,
+0xE2D4=>0x7C4C,
+0xE2D5=>0x7C43,
+0xE2D6=>0x7C54,
+0xE2D7=>0x7C4F,
+0xE2D8=>0x7C40,
+0xE2D9=>0x7C50,
+0xE2DA=>0x7C58,
+0xE2DB=>0x7C5F,
+0xE2DC=>0x7C64,
+0xE2DD=>0x7C56,
+0xE2DE=>0x7C65,
+0xE2DF=>0x7C6C,
+0xE2E0=>0x7C75,
+0xE2E1=>0x7C83,
+0xE2E2=>0x7C90,
+0xE2E3=>0x7CA4,
+0xE2E4=>0x7CAD,
+0xE2E5=>0x7CA2,
+0xE2E6=>0x7CAB,
+0xE2E7=>0x7CA1,
+0xE2E8=>0x7CA8,
+0xE2E9=>0x7CB3,
+0xE2EA=>0x7CB2,
+0xE2EB=>0x7CB1,
+0xE2EC=>0x7CAE,
+0xE2ED=>0x7CB9,
+0xE2EE=>0x7CBD,
+0xE2EF=>0x7CC0,
+0xE2F0=>0x7CC5,
+0xE2F1=>0x7CC2,
+0xE2F2=>0x7CD8,
+0xE2F3=>0x7CD2,
+0xE2F4=>0x7CDC,
+0xE2F5=>0x7CE2,
+0xE2F6=>0x9B3B,
+0xE2F7=>0x7CEF,
+0xE2F8=>0x7CF2,
+0xE2F9=>0x7CF4,
+0xE2FA=>0x7CF6,
+0xE2FB=>0x7CFA,
+0xE2FC=>0x7D06,
+0xE340=>0x7D02,
+0xE341=>0x7D1C,
+0xE342=>0x7D15,
+0xE343=>0x7D0A,
+0xE344=>0x7D45,
+0xE345=>0x7D4B,
+0xE346=>0x7D2E,
+0xE347=>0x7D32,
+0xE348=>0x7D3F,
+0xE349=>0x7D35,
+0xE34A=>0x7D46,
+0xE34B=>0x7D73,
+0xE34C=>0x7D56,
+0xE34D=>0x7D4E,
+0xE34E=>0x7D72,
+0xE34F=>0x7D68,
+0xE350=>0x7D6E,
+0xE351=>0x7D4F,
+0xE352=>0x7D63,
+0xE353=>0x7D93,
+0xE354=>0x7D89,
+0xE355=>0x7D5B,
+0xE356=>0x7D8F,
+0xE357=>0x7D7D,
+0xE358=>0x7D9B,
+0xE359=>0x7DBA,
+0xE35A=>0x7DAE,
+0xE35B=>0x7DA3,
+0xE35C=>0x7DB5,
+0xE35D=>0x7DC7,
+0xE35E=>0x7DBD,
+0xE35F=>0x7DAB,
+0xE360=>0x7E3D,
+0xE361=>0x7DA2,
+0xE362=>0x7DAF,
+0xE363=>0x7DDC,
+0xE364=>0x7DB8,
+0xE365=>0x7D9F,
+0xE366=>0x7DB0,
+0xE367=>0x7DD8,
+0xE368=>0x7DDD,
+0xE369=>0x7DE4,
+0xE36A=>0x7DDE,
+0xE36B=>0x7DFB,
+0xE36C=>0x7DF2,
+0xE36D=>0x7DE1,
+0xE36E=>0x7E05,
+0xE36F=>0x7E0A,
+0xE370=>0x7E23,
+0xE371=>0x7E21,
+0xE372=>0x7E12,
+0xE373=>0x7E31,
+0xE374=>0x7E1F,
+0xE375=>0x7E09,
+0xE376=>0x7E0B,
+0xE377=>0x7E22,
+0xE378=>0x7E46,
+0xE379=>0x7E66,
+0xE37A=>0x7E3B,
+0xE37B=>0x7E35,
+0xE37C=>0x7E39,
+0xE37D=>0x7E43,
+0xE37E=>0x7E37,
+0xE380=>0x7E32,
+0xE381=>0x7E3A,
+0xE382=>0x7E67,
+0xE383=>0x7E5D,
+0xE384=>0x7E56,
+0xE385=>0x7E5E,
+0xE386=>0x7E59,
+0xE387=>0x7E5A,
+0xE388=>0x7E79,
+0xE389=>0x7E6A,
+0xE38A=>0x7E69,
+0xE38B=>0x7E7C,
+0xE38C=>0x7E7B,
+0xE38D=>0x7E83,
+0xE38E=>0x7DD5,
+0xE38F=>0x7E7D,
+0xE390=>0x8FAE,
+0xE391=>0x7E7F,
+0xE392=>0x7E88,
+0xE393=>0x7E89,
+0xE394=>0x7E8C,
+0xE395=>0x7E92,
+0xE396=>0x7E90,
+0xE397=>0x7E93,
+0xE398=>0x7E94,
+0xE399=>0x7E96,
+0xE39A=>0x7E8E,
+0xE39B=>0x7E9B,
+0xE39C=>0x7E9C,
+0xE39D=>0x7F38,
+0xE39E=>0x7F3A,
+0xE39F=>0x7F45,
+0xE3A0=>0x7F4C,
+0xE3A1=>0x7F4D,
+0xE3A2=>0x7F4E,
+0xE3A3=>0x7F50,
+0xE3A4=>0x7F51,
+0xE3A5=>0x7F55,
+0xE3A6=>0x7F54,
+0xE3A7=>0x7F58,
+0xE3A8=>0x7F5F,
+0xE3A9=>0x7F60,
+0xE3AA=>0x7F68,
+0xE3AB=>0x7F69,
+0xE3AC=>0x7F67,
+0xE3AD=>0x7F78,
+0xE3AE=>0x7F82,
+0xE3AF=>0x7F86,
+0xE3B0=>0x7F83,
+0xE3B1=>0x7F88,
+0xE3B2=>0x7F87,
+0xE3B3=>0x7F8C,
+0xE3B4=>0x7F94,
+0xE3B5=>0x7F9E,
+0xE3B6=>0x7F9D,
+0xE3B7=>0x7F9A,
+0xE3B8=>0x7FA3,
+0xE3B9=>0x7FAF,
+0xE3BA=>0x7FB2,
+0xE3BB=>0x7FB9,
+0xE3BC=>0x7FAE,
+0xE3BD=>0x7FB6,
+0xE3BE=>0x7FB8,
+0xE3BF=>0x8B71,
+0xE3C0=>0x7FC5,
+0xE3C1=>0x7FC6,
+0xE3C2=>0x7FCA,
+0xE3C3=>0x7FD5,
+0xE3C4=>0x7FD4,
+0xE3C5=>0x7FE1,
+0xE3C6=>0x7FE6,
+0xE3C7=>0x7FE9,
+0xE3C8=>0x7FF3,
+0xE3C9=>0x7FF9,
+0xE3CA=>0x98DC,
+0xE3CB=>0x8006,
+0xE3CC=>0x8004,
+0xE3CD=>0x800B,
+0xE3CE=>0x8012,
+0xE3CF=>0x8018,
+0xE3D0=>0x8019,
+0xE3D1=>0x801C,
+0xE3D2=>0x8021,
+0xE3D3=>0x8028,
+0xE3D4=>0x803F,
+0xE3D5=>0x803B,
+0xE3D6=>0x804A,
+0xE3D7=>0x8046,
+0xE3D8=>0x8052,
+0xE3D9=>0x8058,
+0xE3DA=>0x805A,
+0xE3DB=>0x805F,
+0xE3DC=>0x8062,
+0xE3DD=>0x8068,
+0xE3DE=>0x8073,
+0xE3DF=>0x8072,
+0xE3E0=>0x8070,
+0xE3E1=>0x8076,
+0xE3E2=>0x8079,
+0xE3E3=>0x807D,
+0xE3E4=>0x807F,
+0xE3E5=>0x8084,
+0xE3E6=>0x8086,
+0xE3E7=>0x8085,
+0xE3E8=>0x809B,
+0xE3E9=>0x8093,
+0xE3EA=>0x809A,
+0xE3EB=>0x80AD,
+0xE3EC=>0x5190,
+0xE3ED=>0x80AC,
+0xE3EE=>0x80DB,
+0xE3EF=>0x80E5,
+0xE3F0=>0x80D9,
+0xE3F1=>0x80DD,
+0xE3F2=>0x80C4,
+0xE3F3=>0x80DA,
+0xE3F4=>0x80D6,
+0xE3F5=>0x8109,
+0xE3F6=>0x80EF,
+0xE3F7=>0x80F1,
+0xE3F8=>0x811B,
+0xE3F9=>0x8129,
+0xE3FA=>0x8123,
+0xE3FB=>0x812F,
+0xE3FC=>0x814B,
+0xE440=>0x968B,
+0xE441=>0x8146,
+0xE442=>0x813E,
+0xE443=>0x8153,
+0xE444=>0x8151,
+0xE445=>0x80FC,
+0xE446=>0x8171,
+0xE447=>0x816E,
+0xE448=>0x8165,
+0xE449=>0x8166,
+0xE44A=>0x8174,
+0xE44B=>0x8183,
+0xE44C=>0x8188,
+0xE44D=>0x818A,
+0xE44E=>0x8180,
+0xE44F=>0x8182,
+0xE450=>0x81A0,
+0xE451=>0x8195,
+0xE452=>0x81A4,
+0xE453=>0x81A3,
+0xE454=>0x815F,
+0xE455=>0x8193,
+0xE456=>0x81A9,
+0xE457=>0x81B0,
+0xE458=>0x81B5,
+0xE459=>0x81BE,
+0xE45A=>0x81B8,
+0xE45B=>0x81BD,
+0xE45C=>0x81C0,
+0xE45D=>0x81C2,
+0xE45E=>0x81BA,
+0xE45F=>0x81C9,
+0xE460=>0x81CD,
+0xE461=>0x81D1,
+0xE462=>0x81D9,
+0xE463=>0x81D8,
+0xE464=>0x81C8,
+0xE465=>0x81DA,
+0xE466=>0x81DF,
+0xE467=>0x81E0,
+0xE468=>0x81E7,
+0xE469=>0x81FA,
+0xE46A=>0x81FB,
+0xE46B=>0x81FE,
+0xE46C=>0x8201,
+0xE46D=>0x8202,
+0xE46E=>0x8205,
+0xE46F=>0x8207,
+0xE470=>0x820A,
+0xE471=>0x820D,
+0xE472=>0x8210,
+0xE473=>0x8216,
+0xE474=>0x8229,
+0xE475=>0x822B,
+0xE476=>0x8238,
+0xE477=>0x8233,
+0xE478=>0x8240,
+0xE479=>0x8259,
+0xE47A=>0x8258,
+0xE47B=>0x825D,
+0xE47C=>0x825A,
+0xE47D=>0x825F,
+0xE47E=>0x8264,
+0xE480=>0x8262,
+0xE481=>0x8268,
+0xE482=>0x826A,
+0xE483=>0x826B,
+0xE484=>0x822E,
+0xE485=>0x8271,
+0xE486=>0x8277,
+0xE487=>0x8278,
+0xE488=>0x827E,
+0xE489=>0x828D,
+0xE48A=>0x8292,
+0xE48B=>0x82AB,
+0xE48C=>0x829F,
+0xE48D=>0x82BB,
+0xE48E=>0x82AC,
+0xE48F=>0x82E1,
+0xE490=>0x82E3,
+0xE491=>0x82DF,
+0xE492=>0x82D2,
+0xE493=>0x82F4,
+0xE494=>0x82F3,
+0xE495=>0x82FA,
+0xE496=>0x8393,
+0xE497=>0x8303,
+0xE498=>0x82FB,
+0xE499=>0x82F9,
+0xE49A=>0x82DE,
+0xE49B=>0x8306,
+0xE49C=>0x82DC,
+0xE49D=>0x8309,
+0xE49E=>0x82D9,
+0xE49F=>0x8335,
+0xE4A0=>0x8334,
+0xE4A1=>0x8316,
+0xE4A2=>0x8332,
+0xE4A3=>0x8331,
+0xE4A4=>0x8340,
+0xE4A5=>0x8339,
+0xE4A6=>0x8350,
+0xE4A7=>0x8345,
+0xE4A8=>0x832F,
+0xE4A9=>0x832B,
+0xE4AA=>0x8317,
+0xE4AB=>0x8318,
+0xE4AC=>0x8385,
+0xE4AD=>0x839A,
+0xE4AE=>0x83AA,
+0xE4AF=>0x839F,
+0xE4B0=>0x83A2,
+0xE4B1=>0x8396,
+0xE4B2=>0x8323,
+0xE4B3=>0x838E,
+0xE4B4=>0x8387,
+0xE4B5=>0x838A,
+0xE4B6=>0x837C,
+0xE4B7=>0x83B5,
+0xE4B8=>0x8373,
+0xE4B9=>0x8375,
+0xE4BA=>0x83A0,
+0xE4BB=>0x8389,
+0xE4BC=>0x83A8,
+0xE4BD=>0x83F4,
+0xE4BE=>0x8413,
+0xE4BF=>0x83EB,
+0xE4C0=>0x83CE,
+0xE4C1=>0x83FD,
+0xE4C2=>0x8403,
+0xE4C3=>0x83D8,
+0xE4C4=>0x840B,
+0xE4C5=>0x83C1,
+0xE4C6=>0x83F7,
+0xE4C7=>0x8407,
+0xE4C8=>0x83E0,
+0xE4C9=>0x83F2,
+0xE4CA=>0x840D,
+0xE4CB=>0x8422,
+0xE4CC=>0x8420,
+0xE4CD=>0x83BD,
+0xE4CE=>0x8438,
+0xE4CF=>0x8506,
+0xE4D0=>0x83FB,
+0xE4D1=>0x846D,
+0xE4D2=>0x842A,
+0xE4D3=>0x843C,
+0xE4D4=>0x855A,
+0xE4D5=>0x8484,
+0xE4D6=>0x8477,
+0xE4D7=>0x846B,
+0xE4D8=>0x84AD,
+0xE4D9=>0x846E,
+0xE4DA=>0x8482,
+0xE4DB=>0x8469,
+0xE4DC=>0x8446,
+0xE4DD=>0x842C,
+0xE4DE=>0x846F,
+0xE4DF=>0x8479,
+0xE4E0=>0x8435,
+0xE4E1=>0x84CA,
+0xE4E2=>0x8462,
+0xE4E3=>0x84B9,
+0xE4E4=>0x84BF,
+0xE4E5=>0x849F,
+0xE4E6=>0x84D9,
+0xE4E7=>0x84CD,
+0xE4E8=>0x84BB,
+0xE4E9=>0x84DA,
+0xE4EA=>0x84D0,
+0xE4EB=>0x84C1,
+0xE4EC=>0x84C6,
+0xE4ED=>0x84D6,
+0xE4EE=>0x84A1,
+0xE4EF=>0x8521,
+0xE4F0=>0x84FF,
+0xE4F1=>0x84F4,
+0xE4F2=>0x8517,
+0xE4F3=>0x8518,
+0xE4F4=>0x852C,
+0xE4F5=>0x851F,
+0xE4F6=>0x8515,
+0xE4F7=>0x8514,
+0xE4F8=>0x84FC,
+0xE4F9=>0x8540,
+0xE4FA=>0x8563,
+0xE4FB=>0x8558,
+0xE4FC=>0x8548,
+0xE540=>0x8541,
+0xE541=>0x8602,
+0xE542=>0x854B,
+0xE543=>0x8555,
+0xE544=>0x8580,
+0xE545=>0x85A4,
+0xE546=>0x8588,
+0xE547=>0x8591,
+0xE548=>0x858A,
+0xE549=>0x85A8,
+0xE54A=>0x856D,
+0xE54B=>0x8594,
+0xE54C=>0x859B,
+0xE54D=>0x85EA,
+0xE54E=>0x8587,
+0xE54F=>0x859C,
+0xE550=>0x8577,
+0xE551=>0x857E,
+0xE552=>0x8590,
+0xE553=>0x85C9,
+0xE554=>0x85BA,
+0xE555=>0x85CF,
+0xE556=>0x85B9,
+0xE557=>0x85D0,
+0xE558=>0x85D5,
+0xE559=>0x85DD,
+0xE55A=>0x85E5,
+0xE55B=>0x85DC,
+0xE55C=>0x85F9,
+0xE55D=>0x860A,
+0xE55E=>0x8613,
+0xE55F=>0x860B,
+0xE560=>0x85FE,
+0xE561=>0x85FA,
+0xE562=>0x8606,
+0xE563=>0x8622,
+0xE564=>0x861A,
+0xE565=>0x8630,
+0xE566=>0x863F,
+0xE567=>0x864D,
+0xE568=>0x4E55,
+0xE569=>0x8654,
+0xE56A=>0x865F,
+0xE56B=>0x8667,
+0xE56C=>0x8671,
+0xE56D=>0x8693,
+0xE56E=>0x86A3,
+0xE56F=>0x86A9,
+0xE570=>0x86AA,
+0xE571=>0x868B,
+0xE572=>0x868C,
+0xE573=>0x86B6,
+0xE574=>0x86AF,
+0xE575=>0x86C4,
+0xE576=>0x86C6,
+0xE577=>0x86B0,
+0xE578=>0x86C9,
+0xE579=>0x8823,
+0xE57A=>0x86AB,
+0xE57B=>0x86D4,
+0xE57C=>0x86DE,
+0xE57D=>0x86E9,
+0xE57E=>0x86EC,
+0xE580=>0x86DF,
+0xE581=>0x86DB,
+0xE582=>0x86EF,
+0xE583=>0x8712,
+0xE584=>0x8706,
+0xE585=>0x8708,
+0xE586=>0x8700,
+0xE587=>0x8703,
+0xE588=>0x86FB,
+0xE589=>0x8711,
+0xE58A=>0x8709,
+0xE58B=>0x870D,
+0xE58C=>0x86F9,
+0xE58D=>0x870A,
+0xE58E=>0x8734,
+0xE58F=>0x873F,
+0xE590=>0x8737,
+0xE591=>0x873B,
+0xE592=>0x8725,
+0xE593=>0x8729,
+0xE594=>0x871A,
+0xE595=>0x8760,
+0xE596=>0x875F,
+0xE597=>0x8778,
+0xE598=>0x874C,
+0xE599=>0x874E,
+0xE59A=>0x8774,
+0xE59B=>0x8757,
+0xE59C=>0x8768,
+0xE59D=>0x876E,
+0xE59E=>0x8759,
+0xE59F=>0x8753,
+0xE5A0=>0x8763,
+0xE5A1=>0x876A,
+0xE5A2=>0x8805,
+0xE5A3=>0x87A2,
+0xE5A4=>0x879F,
+0xE5A5=>0x8782,
+0xE5A6=>0x87AF,
+0xE5A7=>0x87CB,
+0xE5A8=>0x87BD,
+0xE5A9=>0x87C0,
+0xE5AA=>0x87D0,
+0xE5AB=>0x96D6,
+0xE5AC=>0x87AB,
+0xE5AD=>0x87C4,
+0xE5AE=>0x87B3,
+0xE5AF=>0x87C7,
+0xE5B0=>0x87C6,
+0xE5B1=>0x87BB,
+0xE5B2=>0x87EF,
+0xE5B3=>0x87F2,
+0xE5B4=>0x87E0,
+0xE5B5=>0x880F,
+0xE5B6=>0x880D,
+0xE5B7=>0x87FE,
+0xE5B8=>0x87F6,
+0xE5B9=>0x87F7,
+0xE5BA=>0x880E,
+0xE5BB=>0x87D2,
+0xE5BC=>0x8811,
+0xE5BD=>0x8816,
+0xE5BE=>0x8815,
+0xE5BF=>0x8822,
+0xE5C0=>0x8821,
+0xE5C1=>0x8831,
+0xE5C2=>0x8836,
+0xE5C3=>0x8839,
+0xE5C4=>0x8827,
+0xE5C5=>0x883B,
+0xE5C6=>0x8844,
+0xE5C7=>0x8842,
+0xE5C8=>0x8852,
+0xE5C9=>0x8859,
+0xE5CA=>0x885E,
+0xE5CB=>0x8862,
+0xE5CC=>0x886B,
+0xE5CD=>0x8881,
+0xE5CE=>0x887E,
+0xE5CF=>0x889E,
+0xE5D0=>0x8875,
+0xE5D1=>0x887D,
+0xE5D2=>0x88B5,
+0xE5D3=>0x8872,
+0xE5D4=>0x8882,
+0xE5D5=>0x8897,
+0xE5D6=>0x8892,
+0xE5D7=>0x88AE,
+0xE5D8=>0x8899,
+0xE5D9=>0x88A2,
+0xE5DA=>0x888D,
+0xE5DB=>0x88A4,
+0xE5DC=>0x88B0,
+0xE5DD=>0x88BF,
+0xE5DE=>0x88B1,
+0xE5DF=>0x88C3,
+0xE5E0=>0x88C4,
+0xE5E1=>0x88D4,
+0xE5E2=>0x88D8,
+0xE5E3=>0x88D9,
+0xE5E4=>0x88DD,
+0xE5E5=>0x88F9,
+0xE5E6=>0x8902,
+0xE5E7=>0x88FC,
+0xE5E8=>0x88F4,
+0xE5E9=>0x88E8,
+0xE5EA=>0x88F2,
+0xE5EB=>0x8904,
+0xE5EC=>0x890C,
+0xE5ED=>0x890A,
+0xE5EE=>0x8913,
+0xE5EF=>0x8943,
+0xE5F0=>0x891E,
+0xE5F1=>0x8925,
+0xE5F2=>0x892A,
+0xE5F3=>0x892B,
+0xE5F4=>0x8941,
+0xE5F5=>0x8944,
+0xE5F6=>0x893B,
+0xE5F7=>0x8936,
+0xE5F8=>0x8938,
+0xE5F9=>0x894C,
+0xE5FA=>0x891D,
+0xE5FB=>0x8960,
+0xE5FC=>0x895E,
+0xE640=>0x8966,
+0xE641=>0x8964,
+0xE642=>0x896D,
+0xE643=>0x896A,
+0xE644=>0x896F,
+0xE645=>0x8974,
+0xE646=>0x8977,
+0xE647=>0x897E,
+0xE648=>0x8983,
+0xE649=>0x8988,
+0xE64A=>0x898A,
+0xE64B=>0x8993,
+0xE64C=>0x8998,
+0xE64D=>0x89A1,
+0xE64E=>0x89A9,
+0xE64F=>0x89A6,
+0xE650=>0x89AC,
+0xE651=>0x89AF,
+0xE652=>0x89B2,
+0xE653=>0x89BA,
+0xE654=>0x89BD,
+0xE655=>0x89BF,
+0xE656=>0x89C0,
+0xE657=>0x89DA,
+0xE658=>0x89DC,
+0xE659=>0x89DD,
+0xE65A=>0x89E7,
+0xE65B=>0x89F4,
+0xE65C=>0x89F8,
+0xE65D=>0x8A03,
+0xE65E=>0x8A16,
+0xE65F=>0x8A10,
+0xE660=>0x8A0C,
+0xE661=>0x8A1B,
+0xE662=>0x8A1D,
+0xE663=>0x8A25,
+0xE664=>0x8A36,
+0xE665=>0x8A41,
+0xE666=>0x8A5B,
+0xE667=>0x8A52,
+0xE668=>0x8A46,
+0xE669=>0x8A48,
+0xE66A=>0x8A7C,
+0xE66B=>0x8A6D,
+0xE66C=>0x8A6C,
+0xE66D=>0x8A62,
+0xE66E=>0x8A85,
+0xE66F=>0x8A82,
+0xE670=>0x8A84,
+0xE671=>0x8AA8,
+0xE672=>0x8AA1,
+0xE673=>0x8A91,
+0xE674=>0x8AA5,
+0xE675=>0x8AA6,
+0xE676=>0x8A9A,
+0xE677=>0x8AA3,
+0xE678=>0x8AC4,
+0xE679=>0x8ACD,
+0xE67A=>0x8AC2,
+0xE67B=>0x8ADA,
+0xE67C=>0x8AEB,
+0xE67D=>0x8AF3,
+0xE67E=>0x8AE7,
+0xE680=>0x8AE4,
+0xE681=>0x8AF1,
+0xE682=>0x8B14,
+0xE683=>0x8AE0,
+0xE684=>0x8AE2,
+0xE685=>0x8AF7,
+0xE686=>0x8ADE,
+0xE687=>0x8ADB,
+0xE688=>0x8B0C,
+0xE689=>0x8B07,
+0xE68A=>0x8B1A,
+0xE68B=>0x8AE1,
+0xE68C=>0x8B16,
+0xE68D=>0x8B10,
+0xE68E=>0x8B17,
+0xE68F=>0x8B20,
+0xE690=>0x8B33,
+0xE691=>0x97AB,
+0xE692=>0x8B26,
+0xE693=>0x8B2B,
+0xE694=>0x8B3E,
+0xE695=>0x8B28,
+0xE696=>0x8B41,
+0xE697=>0x8B4C,
+0xE698=>0x8B4F,
+0xE699=>0x8B4E,
+0xE69A=>0x8B49,
+0xE69B=>0x8B56,
+0xE69C=>0x8B5B,
+0xE69D=>0x8B5A,
+0xE69E=>0x8B6B,
+0xE69F=>0x8B5F,
+0xE6A0=>0x8B6C,
+0xE6A1=>0x8B6F,
+0xE6A2=>0x8B74,
+0xE6A3=>0x8B7D,
+0xE6A4=>0x8B80,
+0xE6A5=>0x8B8C,
+0xE6A6=>0x8B8E,
+0xE6A7=>0x8B92,
+0xE6A8=>0x8B93,
+0xE6A9=>0x8B96,
+0xE6AA=>0x8B99,
+0xE6AB=>0x8B9A,
+0xE6AC=>0x8C3A,
+0xE6AD=>0x8C41,
+0xE6AE=>0x8C3F,
+0xE6AF=>0x8C48,
+0xE6B0=>0x8C4C,
+0xE6B1=>0x8C4E,
+0xE6B2=>0x8C50,
+0xE6B3=>0x8C55,
+0xE6B4=>0x8C62,
+0xE6B5=>0x8C6C,
+0xE6B6=>0x8C78,
+0xE6B7=>0x8C7A,
+0xE6B8=>0x8C82,
+0xE6B9=>0x8C89,
+0xE6BA=>0x8C85,
+0xE6BB=>0x8C8A,
+0xE6BC=>0x8C8D,
+0xE6BD=>0x8C8E,
+0xE6BE=>0x8C94,
+0xE6BF=>0x8C7C,
+0xE6C0=>0x8C98,
+0xE6C1=>0x621D,
+0xE6C2=>0x8CAD,
+0xE6C3=>0x8CAA,
+0xE6C4=>0x8CBD,
+0xE6C5=>0x8CB2,
+0xE6C6=>0x8CB3,
+0xE6C7=>0x8CAE,
+0xE6C8=>0x8CB6,
+0xE6C9=>0x8CC8,
+0xE6CA=>0x8CC1,
+0xE6CB=>0x8CE4,
+0xE6CC=>0x8CE3,
+0xE6CD=>0x8CDA,
+0xE6CE=>0x8CFD,
+0xE6CF=>0x8CFA,
+0xE6D0=>0x8CFB,
+0xE6D1=>0x8D04,
+0xE6D2=>0x8D05,
+0xE6D3=>0x8D0A,
+0xE6D4=>0x8D07,
+0xE6D5=>0x8D0F,
+0xE6D6=>0x8D0D,
+0xE6D7=>0x8D10,
+0xE6D8=>0x9F4E,
+0xE6D9=>0x8D13,
+0xE6DA=>0x8CCD,
+0xE6DB=>0x8D14,
+0xE6DC=>0x8D16,
+0xE6DD=>0x8D67,
+0xE6DE=>0x8D6D,
+0xE6DF=>0x8D71,
+0xE6E0=>0x8D73,
+0xE6E1=>0x8D81,
+0xE6E2=>0x8D99,
+0xE6E3=>0x8DC2,
+0xE6E4=>0x8DBE,
+0xE6E5=>0x8DBA,
+0xE6E6=>0x8DCF,
+0xE6E7=>0x8DDA,
+0xE6E8=>0x8DD6,
+0xE6E9=>0x8DCC,
+0xE6EA=>0x8DDB,
+0xE6EB=>0x8DCB,
+0xE6EC=>0x8DEA,
+0xE6ED=>0x8DEB,
+0xE6EE=>0x8DDF,
+0xE6EF=>0x8DE3,
+0xE6F0=>0x8DFC,
+0xE6F1=>0x8E08,
+0xE6F2=>0x8E09,
+0xE6F3=>0x8DFF,
+0xE6F4=>0x8E1D,
+0xE6F5=>0x8E1E,
+0xE6F6=>0x8E10,
+0xE6F7=>0x8E1F,
+0xE6F8=>0x8E42,
+0xE6F9=>0x8E35,
+0xE6FA=>0x8E30,
+0xE6FB=>0x8E34,
+0xE6FC=>0x8E4A,
+0xE740=>0x8E47,
+0xE741=>0x8E49,
+0xE742=>0x8E4C,
+0xE743=>0x8E50,
+0xE744=>0x8E48,
+0xE745=>0x8E59,
+0xE746=>0x8E64,
+0xE747=>0x8E60,
+0xE748=>0x8E2A,
+0xE749=>0x8E63,
+0xE74A=>0x8E55,
+0xE74B=>0x8E76,
+0xE74C=>0x8E72,
+0xE74D=>0x8E7C,
+0xE74E=>0x8E81,
+0xE74F=>0x8E87,
+0xE750=>0x8E85,
+0xE751=>0x8E84,
+0xE752=>0x8E8B,
+0xE753=>0x8E8A,
+0xE754=>0x8E93,
+0xE755=>0x8E91,
+0xE756=>0x8E94,
+0xE757=>0x8E99,
+0xE758=>0x8EAA,
+0xE759=>0x8EA1,
+0xE75A=>0x8EAC,
+0xE75B=>0x8EB0,
+0xE75C=>0x8EC6,
+0xE75D=>0x8EB1,
+0xE75E=>0x8EBE,
+0xE75F=>0x8EC5,
+0xE760=>0x8EC8,
+0xE761=>0x8ECB,
+0xE762=>0x8EDB,
+0xE763=>0x8EE3,
+0xE764=>0x8EFC,
+0xE765=>0x8EFB,
+0xE766=>0x8EEB,
+0xE767=>0x8EFE,
+0xE768=>0x8F0A,
+0xE769=>0x8F05,
+0xE76A=>0x8F15,
+0xE76B=>0x8F12,
+0xE76C=>0x8F19,
+0xE76D=>0x8F13,
+0xE76E=>0x8F1C,
+0xE76F=>0x8F1F,
+0xE770=>0x8F1B,
+0xE771=>0x8F0C,
+0xE772=>0x8F26,
+0xE773=>0x8F33,
+0xE774=>0x8F3B,
+0xE775=>0x8F39,
+0xE776=>0x8F45,
+0xE777=>0x8F42,
+0xE778=>0x8F3E,
+0xE779=>0x8F4C,
+0xE77A=>0x8F49,
+0xE77B=>0x8F46,
+0xE77C=>0x8F4E,
+0xE77D=>0x8F57,
+0xE77E=>0x8F5C,
+0xE780=>0x8F62,
+0xE781=>0x8F63,
+0xE782=>0x8F64,
+0xE783=>0x8F9C,
+0xE784=>0x8F9F,
+0xE785=>0x8FA3,
+0xE786=>0x8FAD,
+0xE787=>0x8FAF,
+0xE788=>0x8FB7,
+0xE789=>0x8FDA,
+0xE78A=>0x8FE5,
+0xE78B=>0x8FE2,
+0xE78C=>0x8FEA,
+0xE78D=>0x8FEF,
+0xE78E=>0x9087,
+0xE78F=>0x8FF4,
+0xE790=>0x9005,
+0xE791=>0x8FF9,
+0xE792=>0x8FFA,
+0xE793=>0x9011,
+0xE794=>0x9015,
+0xE795=>0x9021,
+0xE796=>0x900D,
+0xE797=>0x901E,
+0xE798=>0x9016,
+0xE799=>0x900B,
+0xE79A=>0x9027,
+0xE79B=>0x9036,
+0xE79C=>0x9035,
+0xE79D=>0x9039,
+0xE79E=>0x8FF8,
+0xE79F=>0x904F,
+0xE7A0=>0x9050,
+0xE7A1=>0x9051,
+0xE7A2=>0x9052,
+0xE7A3=>0x900E,
+0xE7A4=>0x9049,
+0xE7A5=>0x903E,
+0xE7A6=>0x9056,
+0xE7A7=>0x9058,
+0xE7A8=>0x905E,
+0xE7A9=>0x9068,
+0xE7AA=>0x906F,
+0xE7AB=>0x9076,
+0xE7AC=>0x96A8,
+0xE7AD=>0x9072,
+0xE7AE=>0x9082,
+0xE7AF=>0x907D,
+0xE7B0=>0x9081,
+0xE7B1=>0x9080,
+0xE7B2=>0x908A,
+0xE7B3=>0x9089,
+0xE7B4=>0x908F,
+0xE7B5=>0x90A8,
+0xE7B6=>0x90AF,
+0xE7B7=>0x90B1,
+0xE7B8=>0x90B5,
+0xE7B9=>0x90E2,
+0xE7BA=>0x90E4,
+0xE7BB=>0x6248,
+0xE7BC=>0x90DB,
+0xE7BD=>0x9102,
+0xE7BE=>0x9112,
+0xE7BF=>0x9119,
+0xE7C0=>0x9132,
+0xE7C1=>0x9130,
+0xE7C2=>0x914A,
+0xE7C3=>0x9156,
+0xE7C4=>0x9158,
+0xE7C5=>0x9163,
+0xE7C6=>0x9165,
+0xE7C7=>0x9169,
+0xE7C8=>0x9173,
+0xE7C9=>0x9172,
+0xE7CA=>0x918B,
+0xE7CB=>0x9189,
+0xE7CC=>0x9182,
+0xE7CD=>0x91A2,
+0xE7CE=>0x91AB,
+0xE7CF=>0x91AF,
+0xE7D0=>0x91AA,
+0xE7D1=>0x91B5,
+0xE7D2=>0x91B4,
+0xE7D3=>0x91BA,
+0xE7D4=>0x91C0,
+0xE7D5=>0x91C1,
+0xE7D6=>0x91C9,
+0xE7D7=>0x91CB,
+0xE7D8=>0x91D0,
+0xE7D9=>0x91D6,
+0xE7DA=>0x91DF,
+0xE7DB=>0x91E1,
+0xE7DC=>0x91DB,
+0xE7DD=>0x91FC,
+0xE7DE=>0x91F5,
+0xE7DF=>0x91F6,
+0xE7E0=>0x921E,
+0xE7E1=>0x91FF,
+0xE7E2=>0x9214,
+0xE7E3=>0x922C,
+0xE7E4=>0x9215,
+0xE7E5=>0x9211,
+0xE7E6=>0x925E,
+0xE7E7=>0x9257,
+0xE7E8=>0x9245,
+0xE7E9=>0x9249,
+0xE7EA=>0x9264,
+0xE7EB=>0x9248,
+0xE7EC=>0x9295,
+0xE7ED=>0x923F,
+0xE7EE=>0x924B,
+0xE7EF=>0x9250,
+0xE7F0=>0x929C,
+0xE7F1=>0x9296,
+0xE7F2=>0x9293,
+0xE7F3=>0x929B,
+0xE7F4=>0x925A,
+0xE7F5=>0x92CF,
+0xE7F6=>0x92B9,
+0xE7F7=>0x92B7,
+0xE7F8=>0x92E9,
+0xE7F9=>0x930F,
+0xE7FA=>0x92FA,
+0xE7FB=>0x9344,
+0xE7FC=>0x932E,
+0xE840=>0x9319,
+0xE841=>0x9322,
+0xE842=>0x931A,
+0xE843=>0x9323,
+0xE844=>0x933A,
+0xE845=>0x9335,
+0xE846=>0x933B,
+0xE847=>0x935C,
+0xE848=>0x9360,
+0xE849=>0x937C,
+0xE84A=>0x936E,
+0xE84B=>0x9356,
+0xE84C=>0x93B0,
+0xE84D=>0x93AC,
+0xE84E=>0x93AD,
+0xE84F=>0x9394,
+0xE850=>0x93B9,
+0xE851=>0x93D6,
+0xE852=>0x93D7,
+0xE853=>0x93E8,
+0xE854=>0x93E5,
+0xE855=>0x93D8,
+0xE856=>0x93C3,
+0xE857=>0x93DD,
+0xE858=>0x93D0,
+0xE859=>0x93C8,
+0xE85A=>0x93E4,
+0xE85B=>0x941A,
+0xE85C=>0x9414,
+0xE85D=>0x9413,
+0xE85E=>0x9403,
+0xE85F=>0x9407,
+0xE860=>0x9410,
+0xE861=>0x9436,
+0xE862=>0x942B,
+0xE863=>0x9435,
+0xE864=>0x9421,
+0xE865=>0x943A,
+0xE866=>0x9441,
+0xE867=>0x9452,
+0xE868=>0x9444,
+0xE869=>0x945B,
+0xE86A=>0x9460,
+0xE86B=>0x9462,
+0xE86C=>0x945E,
+0xE86D=>0x946A,
+0xE86E=>0x9229,
+0xE86F=>0x9470,
+0xE870=>0x9475,
+0xE871=>0x9477,
+0xE872=>0x947D,
+0xE873=>0x945A,
+0xE874=>0x947C,
+0xE875=>0x947E,
+0xE876=>0x9481,
+0xE877=>0x947F,
+0xE878=>0x9582,
+0xE879=>0x9587,
+0xE87A=>0x958A,
+0xE87B=>0x9594,
+0xE87C=>0x9596,
+0xE87D=>0x9598,
+0xE87E=>0x9599,
+0xE880=>0x95A0,
+0xE881=>0x95A8,
+0xE882=>0x95A7,
+0xE883=>0x95AD,
+0xE884=>0x95BC,
+0xE885=>0x95BB,
+0xE886=>0x95B9,
+0xE887=>0x95BE,
+0xE888=>0x95CA,
+0xE889=>0x6FF6,
+0xE88A=>0x95C3,
+0xE88B=>0x95CD,
+0xE88C=>0x95CC,
+0xE88D=>0x95D5,
+0xE88E=>0x95D4,
+0xE88F=>0x95D6,
+0xE890=>0x95DC,
+0xE891=>0x95E1,
+0xE892=>0x95E5,
+0xE893=>0x95E2,
+0xE894=>0x9621,
+0xE895=>0x9628,
+0xE896=>0x962E,
+0xE897=>0x962F,
+0xE898=>0x9642,
+0xE899=>0x964C,
+0xE89A=>0x964F,
+0xE89B=>0x964B,
+0xE89C=>0x9677,
+0xE89D=>0x965C,
+0xE89E=>0x965E,
+0xE89F=>0x965D,
+0xE8A0=>0x965F,
+0xE8A1=>0x9666,
+0xE8A2=>0x9672,
+0xE8A3=>0x966C,
+0xE8A4=>0x968D,
+0xE8A5=>0x9698,
+0xE8A6=>0x9695,
+0xE8A7=>0x9697,
+0xE8A8=>0x96AA,
+0xE8A9=>0x96A7,
+0xE8AA=>0x96B1,
+0xE8AB=>0x96B2,
+0xE8AC=>0x96B0,
+0xE8AD=>0x96B4,
+0xE8AE=>0x96B6,
+0xE8AF=>0x96B8,
+0xE8B0=>0x96B9,
+0xE8B1=>0x96CE,
+0xE8B2=>0x96CB,
+0xE8B3=>0x96C9,
+0xE8B4=>0x96CD,
+0xE8B5=>0x894D,
+0xE8B6=>0x96DC,
+0xE8B7=>0x970D,
+0xE8B8=>0x96D5,
+0xE8B9=>0x96F9,
+0xE8BA=>0x9704,
+0xE8BB=>0x9706,
+0xE8BC=>0x9708,
+0xE8BD=>0x9713,
+0xE8BE=>0x970E,
+0xE8BF=>0x9711,
+0xE8C0=>0x970F,
+0xE8C1=>0x9716,
+0xE8C2=>0x9719,
+0xE8C3=>0x9724,
+0xE8C4=>0x972A,
+0xE8C5=>0x9730,
+0xE8C6=>0x9739,
+0xE8C7=>0x973D,
+0xE8C8=>0x973E,
+0xE8C9=>0x9744,
+0xE8CA=>0x9746,
+0xE8CB=>0x9748,
+0xE8CC=>0x9742,
+0xE8CD=>0x9749,
+0xE8CE=>0x975C,
+0xE8CF=>0x9760,
+0xE8D0=>0x9764,
+0xE8D1=>0x9766,
+0xE8D2=>0x9768,
+0xE8D3=>0x52D2,
+0xE8D4=>0x976B,
+0xE8D5=>0x9771,
+0xE8D6=>0x9779,
+0xE8D7=>0x9785,
+0xE8D8=>0x977C,
+0xE8D9=>0x9781,
+0xE8DA=>0x977A,
+0xE8DB=>0x9786,
+0xE8DC=>0x978B,
+0xE8DD=>0x978F,
+0xE8DE=>0x9790,
+0xE8DF=>0x979C,
+0xE8E0=>0x97A8,
+0xE8E1=>0x97A6,
+0xE8E2=>0x97A3,
+0xE8E3=>0x97B3,
+0xE8E4=>0x97B4,
+0xE8E5=>0x97C3,
+0xE8E6=>0x97C6,
+0xE8E7=>0x97C8,
+0xE8E8=>0x97CB,
+0xE8E9=>0x97DC,
+0xE8EA=>0x97ED,
+0xE8EB=>0x9F4F,
+0xE8EC=>0x97F2,
+0xE8ED=>0x7ADF,
+0xE8EE=>0x97F6,
+0xE8EF=>0x97F5,
+0xE8F0=>0x980F,
+0xE8F1=>0x980C,
+0xE8F2=>0x9838,
+0xE8F3=>0x9824,
+0xE8F4=>0x9821,
+0xE8F5=>0x9837,
+0xE8F6=>0x983D,
+0xE8F7=>0x9846,
+0xE8F8=>0x984F,
+0xE8F9=>0x984B,
+0xE8FA=>0x986B,
+0xE8FB=>0x986F,
+0xE8FC=>0x9870,
+0xE940=>0x9871,
+0xE941=>0x9874,
+0xE942=>0x9873,
+0xE943=>0x98AA,
+0xE944=>0x98AF,
+0xE945=>0x98B1,
+0xE946=>0x98B6,
+0xE947=>0x98C4,
+0xE948=>0x98C3,
+0xE949=>0x98C6,
+0xE94A=>0x98E9,
+0xE94B=>0x98EB,
+0xE94C=>0x9903,
+0xE94D=>0x9909,
+0xE94E=>0x9912,
+0xE94F=>0x9914,
+0xE950=>0x9918,
+0xE951=>0x9921,
+0xE952=>0x991D,
+0xE953=>0x991E,
+0xE954=>0x9924,
+0xE955=>0x9920,
+0xE956=>0x992C,
+0xE957=>0x992E,
+0xE958=>0x993D,
+0xE959=>0x993E,
+0xE95A=>0x9942,
+0xE95B=>0x9949,
+0xE95C=>0x9945,
+0xE95D=>0x9950,
+0xE95E=>0x994B,
+0xE95F=>0x9951,
+0xE960=>0x9952,
+0xE961=>0x994C,
+0xE962=>0x9955,
+0xE963=>0x9997,
+0xE964=>0x9998,
+0xE965=>0x99A5,
+0xE966=>0x99AD,
+0xE967=>0x99AE,
+0xE968=>0x99BC,
+0xE969=>0x99DF,
+0xE96A=>0x99DB,
+0xE96B=>0x99DD,
+0xE96C=>0x99D8,
+0xE96D=>0x99D1,
+0xE96E=>0x99ED,
+0xE96F=>0x99EE,
+0xE970=>0x99F1,
+0xE971=>0x99F2,
+0xE972=>0x99FB,
+0xE973=>0x99F8,
+0xE974=>0x9A01,
+0xE975=>0x9A0F,
+0xE976=>0x9A05,
+0xE977=>0x99E2,
+0xE978=>0x9A19,
+0xE979=>0x9A2B,
+0xE97A=>0x9A37,
+0xE97B=>0x9A45,
+0xE97C=>0x9A42,
+0xE97D=>0x9A40,
+0xE97E=>0x9A43,
+0xE980=>0x9A3E,
+0xE981=>0x9A55,
+0xE982=>0x9A4D,
+0xE983=>0x9A5B,
+0xE984=>0x9A57,
+0xE985=>0x9A5F,
+0xE986=>0x9A62,
+0xE987=>0x9A65,
+0xE988=>0x9A64,
+0xE989=>0x9A69,
+0xE98A=>0x9A6B,
+0xE98B=>0x9A6A,
+0xE98C=>0x9AAD,
+0xE98D=>0x9AB0,
+0xE98E=>0x9ABC,
+0xE98F=>0x9AC0,
+0xE990=>0x9ACF,
+0xE991=>0x9AD1,
+0xE992=>0x9AD3,
+0xE993=>0x9AD4,
+0xE994=>0x9ADE,
+0xE995=>0x9ADF,
+0xE996=>0x9AE2,
+0xE997=>0x9AE3,
+0xE998=>0x9AE6,
+0xE999=>0x9AEF,
+0xE99A=>0x9AEB,
+0xE99B=>0x9AEE,
+0xE99C=>0x9AF4,
+0xE99D=>0x9AF1,
+0xE99E=>0x9AF7,
+0xE99F=>0x9AFB,
+0xE9A0=>0x9B06,
+0xE9A1=>0x9B18,
+0xE9A2=>0x9B1A,
+0xE9A3=>0x9B1F,
+0xE9A4=>0x9B22,
+0xE9A5=>0x9B23,
+0xE9A6=>0x9B25,
+0xE9A7=>0x9B27,
+0xE9A8=>0x9B28,
+0xE9A9=>0x9B29,
+0xE9AA=>0x9B2A,
+0xE9AB=>0x9B2E,
+0xE9AC=>0x9B2F,
+0xE9AD=>0x9B32,
+0xE9AE=>0x9B44,
+0xE9AF=>0x9B43,
+0xE9B0=>0x9B4F,
+0xE9B1=>0x9B4D,
+0xE9B2=>0x9B4E,
+0xE9B3=>0x9B51,
+0xE9B4=>0x9B58,
+0xE9B5=>0x9B74,
+0xE9B6=>0x9B93,
+0xE9B7=>0x9B83,
+0xE9B8=>0x9B91,
+0xE9B9=>0x9B96,
+0xE9BA=>0x9B97,
+0xE9BB=>0x9B9F,
+0xE9BC=>0x9BA0,
+0xE9BD=>0x9BA8,
+0xE9BE=>0x9BB4,
+0xE9BF=>0x9BC0,
+0xE9C0=>0x9BCA,
+0xE9C1=>0x9BB9,
+0xE9C2=>0x9BC6,
+0xE9C3=>0x9BCF,
+0xE9C4=>0x9BD1,
+0xE9C5=>0x9BD2,
+0xE9C6=>0x9BE3,
+0xE9C7=>0x9BE2,
+0xE9C8=>0x9BE4,
+0xE9C9=>0x9BD4,
+0xE9CA=>0x9BE1,
+0xE9CB=>0x9C3A,
+0xE9CC=>0x9BF2,
+0xE9CD=>0x9BF1,
+0xE9CE=>0x9BF0,
+0xE9CF=>0x9C15,
+0xE9D0=>0x9C14,
+0xE9D1=>0x9C09,
+0xE9D2=>0x9C13,
+0xE9D3=>0x9C0C,
+0xE9D4=>0x9C06,
+0xE9D5=>0x9C08,
+0xE9D6=>0x9C12,
+0xE9D7=>0x9C0A,
+0xE9D8=>0x9C04,
+0xE9D9=>0x9C2E,
+0xE9DA=>0x9C1B,
+0xE9DB=>0x9C25,
+0xE9DC=>0x9C24,
+0xE9DD=>0x9C21,
+0xE9DE=>0x9C30,
+0xE9DF=>0x9C47,
+0xE9E0=>0x9C32,
+0xE9E1=>0x9C46,
+0xE9E2=>0x9C3E,
+0xE9E3=>0x9C5A,
+0xE9E4=>0x9C60,
+0xE9E5=>0x9C67,
+0xE9E6=>0x9C76,
+0xE9E7=>0x9C78,
+0xE9E8=>0x9CE7,
+0xE9E9=>0x9CEC,
+0xE9EA=>0x9CF0,
+0xE9EB=>0x9D09,
+0xE9EC=>0x9D08,
+0xE9ED=>0x9CEB,
+0xE9EE=>0x9D03,
+0xE9EF=>0x9D06,
+0xE9F0=>0x9D2A,
+0xE9F1=>0x9D26,
+0xE9F2=>0x9DAF,
+0xE9F3=>0x9D23,
+0xE9F4=>0x9D1F,
+0xE9F5=>0x9D44,
+0xE9F6=>0x9D15,
+0xE9F7=>0x9D12,
+0xE9F8=>0x9D41,
+0xE9F9=>0x9D3F,
+0xE9FA=>0x9D3E,
+0xE9FB=>0x9D46,
+0xE9FC=>0x9D48,
+0xEA40=>0x9D5D,
+0xEA41=>0x9D5E,
+0xEA42=>0x9D64,
+0xEA43=>0x9D51,
+0xEA44=>0x9D50,
+0xEA45=>0x9D59,
+0xEA46=>0x9D72,
+0xEA47=>0x9D89,
+0xEA48=>0x9D87,
+0xEA49=>0x9DAB,
+0xEA4A=>0x9D6F,
+0xEA4B=>0x9D7A,
+0xEA4C=>0x9D9A,
+0xEA4D=>0x9DA4,
+0xEA4E=>0x9DA9,
+0xEA4F=>0x9DB2,
+0xEA50=>0x9DC4,
+0xEA51=>0x9DC1,
+0xEA52=>0x9DBB,
+0xEA53=>0x9DB8,
+0xEA54=>0x9DBA,
+0xEA55=>0x9DC6,
+0xEA56=>0x9DCF,
+0xEA57=>0x9DC2,
+0xEA58=>0x9DD9,
+0xEA59=>0x9DD3,
+0xEA5A=>0x9DF8,
+0xEA5B=>0x9DE6,
+0xEA5C=>0x9DED,
+0xEA5D=>0x9DEF,
+0xEA5E=>0x9DFD,
+0xEA5F=>0x9E1A,
+0xEA60=>0x9E1B,
+0xEA61=>0x9E1E,
+0xEA62=>0x9E75,
+0xEA63=>0x9E79,
+0xEA64=>0x9E7D,
+0xEA65=>0x9E81,
+0xEA66=>0x9E88,
+0xEA67=>0x9E8B,
+0xEA68=>0x9E8C,
+0xEA69=>0x9E92,
+0xEA6A=>0x9E95,
+0xEA6B=>0x9E91,
+0xEA6C=>0x9E9D,
+0xEA6D=>0x9EA5,
+0xEA6E=>0x9EA9,
+0xEA6F=>0x9EB8,
+0xEA70=>0x9EAA,
+0xEA71=>0x9EAD,
+0xEA72=>0x9761,
+0xEA73=>0x9ECC,
+0xEA74=>0x9ECE,
+0xEA75=>0x9ECF,
+0xEA76=>0x9ED0,
+0xEA77=>0x9ED4,
+0xEA78=>0x9EDC,
+0xEA79=>0x9EDE,
+0xEA7A=>0x9EDD,
+0xEA7B=>0x9EE0,
+0xEA7C=>0x9EE5,
+0xEA7D=>0x9EE8,
+0xEA7E=>0x9EEF,
+0xEA80=>0x9EF4,
+0xEA81=>0x9EF6,
+0xEA82=>0x9EF7,
+0xEA83=>0x9EF9,
+0xEA84=>0x9EFB,
+0xEA85=>0x9EFC,
+0xEA86=>0x9EFD,
+0xEA87=>0x9F07,
+0xEA88=>0x9F08,
+0xEA89=>0x76B7,
+0xEA8A=>0x9F15,
+0xEA8B=>0x9F21,
+0xEA8C=>0x9F2C,
+0xEA8D=>0x9F3E,
+0xEA8E=>0x9F4A,
+0xEA8F=>0x9F52,
+0xEA90=>0x9F54,
+0xEA91=>0x9F63,
+0xEA92=>0x9F5F,
+0xEA93=>0x9F60,
+0xEA94=>0x9F61,
+0xEA95=>0x9F66,
+0xEA96=>0x9F67,
+0xEA97=>0x9F6C,
+0xEA98=>0x9F6A,
+0xEA99=>0x9F77,
+0xEA9A=>0x9F72,
+0xEA9B=>0x9F76,
+0xEA9C=>0x9F95,
+0xEA9D=>0x9F9C,
+0xEA9E=>0x9FA0,
+0xEA9F=>0x582F,
+0xEAA0=>0x69C7,
+0xEAA1=>0x9059,
+0xEAA2=>0x7464,
+0xEAA3=>0x51DC,
+0xEAA4=>0x7199,
+0xED40=>0x7E8A,
+0xED41=>0x891C,
+0xED42=>0x9348,
+0xED43=>0x9288,
+0xED44=>0x84DC,
+0xED45=>0x4FC9,
+0xED46=>0x70BB,
+0xED47=>0x6631,
+0xED48=>0x68C8,
+0xED49=>0x92F9,
+0xED4A=>0x66FB,
+0xED4B=>0x5F45,
+0xED4C=>0x4E28,
+0xED4D=>0x4EE1,
+0xED4E=>0x4EFC,
+0xED4F=>0x4F00,
+0xED50=>0x4F03,
+0xED51=>0x4F39,
+0xED52=>0x4F56,
+0xED53=>0x4F92,
+0xED54=>0x4F8A,
+0xED55=>0x4F9A,
+0xED56=>0x4F94,
+0xED57=>0x4FCD,
+0xED58=>0x5040,
+0xED59=>0x5022,
+0xED5A=>0x4FFF,
+0xED5B=>0x501E,
+0xED5C=>0x5046,
+0xED5D=>0x5070,
+0xED5E=>0x5042,
+0xED5F=>0x5094,
+0xED60=>0x50F4,
+0xED61=>0x50D8,
+0xED62=>0x514A,
+0xED63=>0x5164,
+0xED64=>0x519D,
+0xED65=>0x51BE,
+0xED66=>0x51EC,
+0xED67=>0x5215,
+0xED68=>0x529C,
+0xED69=>0x52A6,
+0xED6A=>0x52C0,
+0xED6B=>0x52DB,
+0xED6C=>0x5300,
+0xED6D=>0x5307,
+0xED6E=>0x5324,
+0xED6F=>0x5372,
+0xED70=>0x5393,
+0xED71=>0x53B2,
+0xED72=>0x53DD,
+0xED73=>0xFA0E,
+0xED74=>0x549C,
+0xED75=>0x548A,
+0xED76=>0x54A9,
+0xED77=>0x54FF,
+0xED78=>0x5586,
+0xED79=>0x5759,
+0xED7A=>0x5765,
+0xED7B=>0x57AC,
+0xED7C=>0x57C8,
+0xED7D=>0x57C7,
+0xED7E=>0xFA0F,
+0xED80=>0xFA10,
+0xED81=>0x589E,
+0xED82=>0x58B2,
+0xED83=>0x590B,
+0xED84=>0x5953,
+0xED85=>0x595B,
+0xED86=>0x595D,
+0xED87=>0x5963,
+0xED88=>0x59A4,
+0xED89=>0x59BA,
+0xED8A=>0x5B56,
+0xED8B=>0x5BC0,
+0xED8C=>0x752F,
+0xED8D=>0x5BD8,
+0xED8E=>0x5BEC,
+0xED8F=>0x5C1E,
+0xED90=>0x5CA6,
+0xED91=>0x5CBA,
+0xED92=>0x5CF5,
+0xED93=>0x5D27,
+0xED94=>0x5D53,
+0xED95=>0xFA11,
+0xED96=>0x5D42,
+0xED97=>0x5D6D,
+0xED98=>0x5DB8,
+0xED99=>0x5DB9,
+0xED9A=>0x5DD0,
+0xED9B=>0x5F21,
+0xED9C=>0x5F34,
+0xED9D=>0x5F67,
+0xED9E=>0x5FB7,
+0xED9F=>0x5FDE,
+0xEDA0=>0x605D,
+0xEDA1=>0x6085,
+0xEDA2=>0x608A,
+0xEDA3=>0x60DE,
+0xEDA4=>0x60D5,
+0xEDA5=>0x6120,
+0xEDA6=>0x60F2,
+0xEDA7=>0x6111,
+0xEDA8=>0x6137,
+0xEDA9=>0x6130,
+0xEDAA=>0x6198,
+0xEDAB=>0x6213,
+0xEDAC=>0x62A6,
+0xEDAD=>0x63F5,
+0xEDAE=>0x6460,
+0xEDAF=>0x649D,
+0xEDB0=>0x64CE,
+0xEDB1=>0x654E,
+0xEDB2=>0x6600,
+0xEDB3=>0x6615,
+0xEDB4=>0x663B,
+0xEDB5=>0x6609,
+0xEDB6=>0x662E,
+0xEDB7=>0x661E,
+0xEDB8=>0x6624,
+0xEDB9=>0x6665,
+0xEDBA=>0x6657,
+0xEDBB=>0x6659,
+0xEDBC=>0xFA12,
+0xEDBD=>0x6673,
+0xEDBE=>0x6699,
+0xEDBF=>0x66A0,
+0xEDC0=>0x66B2,
+0xEDC1=>0x66BF,
+0xEDC2=>0x66FA,
+0xEDC3=>0x670E,
+0xEDC4=>0xF929,
+0xEDC5=>0x6766,
+0xEDC6=>0x67BB,
+0xEDC7=>0x6852,
+0xEDC8=>0x67C0,
+0xEDC9=>0x6801,
+0xEDCA=>0x6844,
+0xEDCB=>0x68CF,
+0xEDCC=>0xFA13,
+0xEDCD=>0x6968,
+0xEDCE=>0xFA14,
+0xEDCF=>0x6998,
+0xEDD0=>0x69E2,
+0xEDD1=>0x6A30,
+0xEDD2=>0x6A6B,
+0xEDD3=>0x6A46,
+0xEDD4=>0x6A73,
+0xEDD5=>0x6A7E,
+0xEDD6=>0x6AE2,
+0xEDD7=>0x6AE4,
+0xEDD8=>0x6BD6,
+0xEDD9=>0x6C3F,
+0xEDDA=>0x6C5C,
+0xEDDB=>0x6C86,
+0xEDDC=>0x6C6F,
+0xEDDD=>0x6CDA,
+0xEDDE=>0x6D04,
+0xEDDF=>0x6D87,
+0xEDE0=>0x6D6F,
+0xEDE1=>0x6D96,
+0xEDE2=>0x6DAC,
+0xEDE3=>0x6DCF,
+0xEDE4=>0x6DF8,
+0xEDE5=>0x6DF2,
+0xEDE6=>0x6DFC,
+0xEDE7=>0x6E39,
+0xEDE8=>0x6E5C,
+0xEDE9=>0x6E27,
+0xEDEA=>0x6E3C,
+0xEDEB=>0x6EBF,
+0xEDEC=>0x6F88,
+0xEDED=>0x6FB5,
+0xEDEE=>0x6FF5,
+0xEDEF=>0x7005,
+0xEDF0=>0x7007,
+0xEDF1=>0x7028,
+0xEDF2=>0x7085,
+0xEDF3=>0x70AB,
+0xEDF4=>0x710F,
+0xEDF5=>0x7104,
+0xEDF6=>0x715C,
+0xEDF7=>0x7146,
+0xEDF8=>0x7147,
+0xEDF9=>0xFA15,
+0xEDFA=>0x71C1,
+0xEDFB=>0x71FE,
+0xEDFC=>0x72B1,
+0xEE40=>0x72BE,
+0xEE41=>0x7324,
+0xEE42=>0xFA16,
+0xEE43=>0x7377,
+0xEE44=>0x73BD,
+0xEE45=>0x73C9,
+0xEE46=>0x73D6,
+0xEE47=>0x73E3,
+0xEE48=>0x73D2,
+0xEE49=>0x7407,
+0xEE4A=>0x73F5,
+0xEE4B=>0x7426,
+0xEE4C=>0x742A,
+0xEE4D=>0x7429,
+0xEE4E=>0x742E,
+0xEE4F=>0x7462,
+0xEE50=>0x7489,
+0xEE51=>0x749F,
+0xEE52=>0x7501,
+0xEE53=>0x756F,
+0xEE54=>0x7682,
+0xEE55=>0x769C,
+0xEE56=>0x769E,
+0xEE57=>0x769B,
+0xEE58=>0x76A6,
+0xEE59=>0xFA17,
+0xEE5A=>0x7746,
+0xEE5B=>0x52AF,
+0xEE5C=>0x7821,
+0xEE5D=>0x784E,
+0xEE5E=>0x7864,
+0xEE5F=>0x787A,
+0xEE60=>0x7930,
+0xEE61=>0xFA18,
+0xEE62=>0xFA19,
+0xEE63=>0xFA1A,
+0xEE64=>0x7994,
+0xEE65=>0xFA1B,
+0xEE66=>0x799B,
+0xEE67=>0x7AD1,
+0xEE68=>0x7AE7,
+0xEE69=>0xFA1C,
+0xEE6A=>0x7AEB,
+0xEE6B=>0x7B9E,
+0xEE6C=>0xFA1D,
+0xEE6D=>0x7D48,
+0xEE6E=>0x7D5C,
+0xEE6F=>0x7DB7,
+0xEE70=>0x7DA0,
+0xEE71=>0x7DD6,
+0xEE72=>0x7E52,
+0xEE73=>0x7F47,
+0xEE74=>0x7FA1,
+0xEE75=>0xFA1E,
+0xEE76=>0x8301,
+0xEE77=>0x8362,
+0xEE78=>0x837F,
+0xEE79=>0x83C7,
+0xEE7A=>0x83F6,
+0xEE7B=>0x8448,
+0xEE7C=>0x84B4,
+0xEE7D=>0x8553,
+0xEE7E=>0x8559,
+0xEE80=>0x856B,
+0xEE81=>0xFA1F,
+0xEE82=>0x85B0,
+0xEE83=>0xFA20,
+0xEE84=>0xFA21,
+0xEE85=>0x8807,
+0xEE86=>0x88F5,
+0xEE87=>0x8A12,
+0xEE88=>0x8A37,
+0xEE89=>0x8A79,
+0xEE8A=>0x8AA7,
+0xEE8B=>0x8ABE,
+0xEE8C=>0x8ADF,
+0xEE8D=>0xFA22,
+0xEE8E=>0x8AF6,
+0xEE8F=>0x8B53,
+0xEE90=>0x8B7F,
+0xEE91=>0x8CF0,
+0xEE92=>0x8CF4,
+0xEE93=>0x8D12,
+0xEE94=>0x8D76,
+0xEE95=>0xFA23,
+0xEE96=>0x8ECF,
+0xEE97=>0xFA24,
+0xEE98=>0xFA25,
+0xEE99=>0x9067,
+0xEE9A=>0x90DE,
+0xEE9B=>0xFA26,
+0xEE9C=>0x9115,
+0xEE9D=>0x9127,
+0xEE9E=>0x91DA,
+0xEE9F=>0x91D7,
+0xEEA0=>0x91DE,
+0xEEA1=>0x91ED,
+0xEEA2=>0x91EE,
+0xEEA3=>0x91E4,
+0xEEA4=>0x91E5,
+0xEEA5=>0x9206,
+0xEEA6=>0x9210,
+0xEEA7=>0x920A,
+0xEEA8=>0x923A,
+0xEEA9=>0x9240,
+0xEEAA=>0x923C,
+0xEEAB=>0x924E,
+0xEEAC=>0x9259,
+0xEEAD=>0x9251,
+0xEEAE=>0x9239,
+0xEEAF=>0x9267,
+0xEEB0=>0x92A7,
+0xEEB1=>0x9277,
+0xEEB2=>0x9278,
+0xEEB3=>0x92E7,
+0xEEB4=>0x92D7,
+0xEEB5=>0x92D9,
+0xEEB6=>0x92D0,
+0xEEB7=>0xFA27,
+0xEEB8=>0x92D5,
+0xEEB9=>0x92E0,
+0xEEBA=>0x92D3,
+0xEEBB=>0x9325,
+0xEEBC=>0x9321,
+0xEEBD=>0x92FB,
+0xEEBE=>0xFA28,
+0xEEBF=>0x931E,
+0xEEC0=>0x92FF,
+0xEEC1=>0x931D,
+0xEEC2=>0x9302,
+0xEEC3=>0x9370,
+0xEEC4=>0x9357,
+0xEEC5=>0x93A4,
+0xEEC6=>0x93C6,
+0xEEC7=>0x93DE,
+0xEEC8=>0x93F8,
+0xEEC9=>0x9431,
+0xEECA=>0x9445,
+0xEECB=>0x9448,
+0xEECC=>0x9592,
+0xEECD=>0xF9DC,
+0xEECE=>0xFA29,
+0xEECF=>0x969D,
+0xEED0=>0x96AF,
+0xEED1=>0x9733,
+0xEED2=>0x973B,
+0xEED3=>0x9743,
+0xEED4=>0x974D,
+0xEED5=>0x974F,
+0xEED6=>0x9751,
+0xEED7=>0x9755,
+0xEED8=>0x9857,
+0xEED9=>0x9865,
+0xEEDA=>0xFA2A,
+0xEEDB=>0xFA2B,
+0xEEDC=>0x9927,
+0xEEDD=>0xFA2C,
+0xEEDE=>0x999E,
+0xEEDF=>0x9A4E,
+0xEEE0=>0x9AD9,
+0xEEE1=>0x9ADC,
+0xEEE2=>0x9B75,
+0xEEE3=>0x9B72,
+0xEEE4=>0x9B8F,
+0xEEE5=>0x9BB1,
+0xEEE6=>0x9BBB,
+0xEEE7=>0x9C00,
+0xEEE8=>0x9D70,
+0xEEE9=>0x9D6B,
+0xEEEA=>0xFA2D,
+0xEEEB=>0x9E19,
+0xEEEC=>0x9ED1,
+0xEEEF=>0x2170,
+0xEEF0=>0x2171,
+0xEEF1=>0x2172,
+0xEEF2=>0x2173,
+0xEEF3=>0x2174,
+0xEEF4=>0x2175,
+0xEEF5=>0x2176,
+0xEEF6=>0x2177,
+0xEEF7=>0x2178,
+0xEEF8=>0x2179,
+0xEEF9=>0xFFE2,
+0xEEFA=>0xFFE4,
+0xEEFB=>0xFF07,
+0xEEFC=>0xFF02,
+0xF040=>0xE000,
+0xF041=>0xE001,
+0xF042=>0xE002,
+0xF043=>0xE003,
+0xF044=>0xE004,
+0xF045=>0xE005,
+0xF046=>0xE006,
+0xF047=>0xE007,
+0xF048=>0xE008,
+0xF049=>0xE009,
+0xF04A=>0xE00A,
+0xF04B=>0xE00B,
+0xF04C=>0xE00C,
+0xF04D=>0xE00D,
+0xF04E=>0xE00E,
+0xF04F=>0xE00F,
+0xF050=>0xE010,
+0xF051=>0xE011,
+0xF052=>0xE012,
+0xF053=>0xE013,
+0xF054=>0xE014,
+0xF055=>0xE015,
+0xF056=>0xE016,
+0xF057=>0xE017,
+0xF058=>0xE018,
+0xF059=>0xE019,
+0xF05A=>0xE01A,
+0xF05B=>0xE01B,
+0xF05C=>0xE01C,
+0xF05D=>0xE01D,
+0xF05E=>0xE01E,
+0xF05F=>0xE01F,
+0xF060=>0xE020,
+0xF061=>0xE021,
+0xF062=>0xE022,
+0xF063=>0xE023,
+0xF064=>0xE024,
+0xF065=>0xE025,
+0xF066=>0xE026,
+0xF067=>0xE027,
+0xF068=>0xE028,
+0xF069=>0xE029,
+0xF06A=>0xE02A,
+0xF06B=>0xE02B,
+0xF06C=>0xE02C,
+0xF06D=>0xE02D,
+0xF06E=>0xE02E,
+0xF06F=>0xE02F,
+0xF070=>0xE030,
+0xF071=>0xE031,
+0xF072=>0xE032,
+0xF073=>0xE033,
+0xF074=>0xE034,
+0xF075=>0xE035,
+0xF076=>0xE036,
+0xF077=>0xE037,
+0xF078=>0xE038,
+0xF079=>0xE039,
+0xF07A=>0xE03A,
+0xF07B=>0xE03B,
+0xF07C=>0xE03C,
+0xF07D=>0xE03D,
+0xF07E=>0xE03E,
+0xF080=>0xE03F,
+0xF081=>0xE040,
+0xF082=>0xE041,
+0xF083=>0xE042,
+0xF084=>0xE043,
+0xF085=>0xE044,
+0xF086=>0xE045,
+0xF087=>0xE046,
+0xF088=>0xE047,
+0xF089=>0xE048,
+0xF08A=>0xE049,
+0xF08B=>0xE04A,
+0xF08C=>0xE04B,
+0xF08D=>0xE04C,
+0xF08E=>0xE04D,
+0xF08F=>0xE04E,
+0xF090=>0xE04F,
+0xF091=>0xE050,
+0xF092=>0xE051,
+0xF093=>0xE052,
+0xF094=>0xE053,
+0xF095=>0xE054,
+0xF096=>0xE055,
+0xF097=>0xE056,
+0xF098=>0xE057,
+0xF099=>0xE058,
+0xF09A=>0xE059,
+0xF09B=>0xE05A,
+0xF09C=>0xE05B,
+0xF09D=>0xE05C,
+0xF09E=>0xE05D,
+0xF09F=>0xE05E,
+0xF0A0=>0xE05F,
+0xF0A1=>0xE060,
+0xF0A2=>0xE061,
+0xF0A3=>0xE062,
+0xF0A4=>0xE063,
+0xF0A5=>0xE064,
+0xF0A6=>0xE065,
+0xF0A7=>0xE066,
+0xF0A8=>0xE067,
+0xF0A9=>0xE068,
+0xF0AA=>0xE069,
+0xF0AB=>0xE06A,
+0xF0AC=>0xE06B,
+0xF0AD=>0xE06C,
+0xF0AE=>0xE06D,
+0xF0AF=>0xE06E,
+0xF0B0=>0xE06F,
+0xF0B1=>0xE070,
+0xF0B2=>0xE071,
+0xF0B3=>0xE072,
+0xF0B4=>0xE073,
+0xF0B5=>0xE074,
+0xF0B6=>0xE075,
+0xF0B7=>0xE076,
+0xF0B8=>0xE077,
+0xF0B9=>0xE078,
+0xF0BA=>0xE079,
+0xF0BB=>0xE07A,
+0xF0BC=>0xE07B,
+0xF0BD=>0xE07C,
+0xF0BE=>0xE07D,
+0xF0BF=>0xE07E,
+0xF0C0=>0xE07F,
+0xF0C1=>0xE080,
+0xF0C2=>0xE081,
+0xF0C3=>0xE082,
+0xF0C4=>0xE083,
+0xF0C5=>0xE084,
+0xF0C6=>0xE085,
+0xF0C7=>0xE086,
+0xF0C8=>0xE087,
+0xF0C9=>0xE088,
+0xF0CA=>0xE089,
+0xF0CB=>0xE08A,
+0xF0CC=>0xE08B,
+0xF0CD=>0xE08C,
+0xF0CE=>0xE08D,
+0xF0CF=>0xE08E,
+0xF0D0=>0xE08F,
+0xF0D1=>0xE090,
+0xF0D2=>0xE091,
+0xF0D3=>0xE092,
+0xF0D4=>0xE093,
+0xF0D5=>0xE094,
+0xF0D6=>0xE095,
+0xF0D7=>0xE096,
+0xF0D8=>0xE097,
+0xF0D9=>0xE098,
+0xF0DA=>0xE099,
+0xF0DB=>0xE09A,
+0xF0DC=>0xE09B,
+0xF0DD=>0xE09C,
+0xF0DE=>0xE09D,
+0xF0DF=>0xE09E,
+0xF0E0=>0xE09F,
+0xF0E1=>0xE0A0,
+0xF0E2=>0xE0A1,
+0xF0E3=>0xE0A2,
+0xF0E4=>0xE0A3,
+0xF0E5=>0xE0A4,
+0xF0E6=>0xE0A5,
+0xF0E7=>0xE0A6,
+0xF0E8=>0xE0A7,
+0xF0E9=>0xE0A8,
+0xF0EA=>0xE0A9,
+0xF0EB=>0xE0AA,
+0xF0EC=>0xE0AB,
+0xF0ED=>0xE0AC,
+0xF0EE=>0xE0AD,
+0xF0EF=>0xE0AE,
+0xF0F0=>0xE0AF,
+0xF0F1=>0xE0B0,
+0xF0F2=>0xE0B1,
+0xF0F3=>0xE0B2,
+0xF0F4=>0xE0B3,
+0xF0F5=>0xE0B4,
+0xF0F6=>0xE0B5,
+0xF0F7=>0xE0B6,
+0xF0F8=>0xE0B7,
+0xF0F9=>0xE0B8,
+0xF0FA=>0xE0B9,
+0xF0FB=>0xE0BA,
+0xF0FC=>0xE0BB,
+0xF140=>0xE0BC,
+0xF141=>0xE0BD,
+0xF142=>0xE0BE,
+0xF143=>0xE0BF,
+0xF144=>0xE0C0,
+0xF145=>0xE0C1,
+0xF146=>0xE0C2,
+0xF147=>0xE0C3,
+0xF148=>0xE0C4,
+0xF149=>0xE0C5,
+0xF14A=>0xE0C6,
+0xF14B=>0xE0C7,
+0xF14C=>0xE0C8,
+0xF14D=>0xE0C9,
+0xF14E=>0xE0CA,
+0xF14F=>0xE0CB,
+0xF150=>0xE0CC,
+0xF151=>0xE0CD,
+0xF152=>0xE0CE,
+0xF153=>0xE0CF,
+0xF154=>0xE0D0,
+0xF155=>0xE0D1,
+0xF156=>0xE0D2,
+0xF157=>0xE0D3,
+0xF158=>0xE0D4,
+0xF159=>0xE0D5,
+0xF15A=>0xE0D6,
+0xF15B=>0xE0D7,
+0xF15C=>0xE0D8,
+0xF15D=>0xE0D9,
+0xF15E=>0xE0DA,
+0xF15F=>0xE0DB,
+0xF160=>0xE0DC,
+0xF161=>0xE0DD,
+0xF162=>0xE0DE,
+0xF163=>0xE0DF,
+0xF164=>0xE0E0,
+0xF165=>0xE0E1,
+0xF166=>0xE0E2,
+0xF167=>0xE0E3,
+0xF168=>0xE0E4,
+0xF169=>0xE0E5,
+0xF16A=>0xE0E6,
+0xF16B=>0xE0E7,
+0xF16C=>0xE0E8,
+0xF16D=>0xE0E9,
+0xF16E=>0xE0EA,
+0xF16F=>0xE0EB,
+0xF170=>0xE0EC,
+0xF171=>0xE0ED,
+0xF172=>0xE0EE,
+0xF173=>0xE0EF,
+0xF174=>0xE0F0,
+0xF175=>0xE0F1,
+0xF176=>0xE0F2,
+0xF177=>0xE0F3,
+0xF178=>0xE0F4,
+0xF179=>0xE0F5,
+0xF17A=>0xE0F6,
+0xF17B=>0xE0F7,
+0xF17C=>0xE0F8,
+0xF17D=>0xE0F9,
+0xF17E=>0xE0FA,
+0xF180=>0xE0FB,
+0xF181=>0xE0FC,
+0xF182=>0xE0FD,
+0xF183=>0xE0FE,
+0xF184=>0xE0FF,
+0xF185=>0xE100,
+0xF186=>0xE101,
+0xF187=>0xE102,
+0xF188=>0xE103,
+0xF189=>0xE104,
+0xF18A=>0xE105,
+0xF18B=>0xE106,
+0xF18C=>0xE107,
+0xF18D=>0xE108,
+0xF18E=>0xE109,
+0xF18F=>0xE10A,
+0xF190=>0xE10B,
+0xF191=>0xE10C,
+0xF192=>0xE10D,
+0xF193=>0xE10E,
+0xF194=>0xE10F,
+0xF195=>0xE110,
+0xF196=>0xE111,
+0xF197=>0xE112,
+0xF198=>0xE113,
+0xF199=>0xE114,
+0xF19A=>0xE115,
+0xF19B=>0xE116,
+0xF19C=>0xE117,
+0xF19D=>0xE118,
+0xF19E=>0xE119,
+0xF19F=>0xE11A,
+0xF1A0=>0xE11B,
+0xF1A1=>0xE11C,
+0xF1A2=>0xE11D,
+0xF1A3=>0xE11E,
+0xF1A4=>0xE11F,
+0xF1A5=>0xE120,
+0xF1A6=>0xE121,
+0xF1A7=>0xE122,
+0xF1A8=>0xE123,
+0xF1A9=>0xE124,
+0xF1AA=>0xE125,
+0xF1AB=>0xE126,
+0xF1AC=>0xE127,
+0xF1AD=>0xE128,
+0xF1AE=>0xE129,
+0xF1AF=>0xE12A,
+0xF1B0=>0xE12B,
+0xF1B1=>0xE12C,
+0xF1B2=>0xE12D,
+0xF1B3=>0xE12E,
+0xF1B4=>0xE12F,
+0xF1B5=>0xE130,
+0xF1B6=>0xE131,
+0xF1B7=>0xE132,
+0xF1B8=>0xE133,
+0xF1B9=>0xE134,
+0xF1BA=>0xE135,
+0xF1BB=>0xE136,
+0xF1BC=>0xE137,
+0xF1BD=>0xE138,
+0xF1BE=>0xE139,
+0xF1BF=>0xE13A,
+0xF1C0=>0xE13B,
+0xF1C1=>0xE13C,
+0xF1C2=>0xE13D,
+0xF1C3=>0xE13E,
+0xF1C4=>0xE13F,
+0xF1C5=>0xE140,
+0xF1C6=>0xE141,
+0xF1C7=>0xE142,
+0xF1C8=>0xE143,
+0xF1C9=>0xE144,
+0xF1CA=>0xE145,
+0xF1CB=>0xE146,
+0xF1CC=>0xE147,
+0xF1CD=>0xE148,
+0xF1CE=>0xE149,
+0xF1CF=>0xE14A,
+0xF1D0=>0xE14B,
+0xF1D1=>0xE14C,
+0xF1D2=>0xE14D,
+0xF1D3=>0xE14E,
+0xF1D4=>0xE14F,
+0xF1D5=>0xE150,
+0xF1D6=>0xE151,
+0xF1D7=>0xE152,
+0xF1D8=>0xE153,
+0xF1D9=>0xE154,
+0xF1DA=>0xE155,
+0xF1DB=>0xE156,
+0xF1DC=>0xE157,
+0xF1DD=>0xE158,
+0xF1DE=>0xE159,
+0xF1DF=>0xE15A,
+0xF1E0=>0xE15B,
+0xF1E1=>0xE15C,
+0xF1E2=>0xE15D,
+0xF1E3=>0xE15E,
+0xF1E4=>0xE15F,
+0xF1E5=>0xE160,
+0xF1E6=>0xE161,
+0xF1E7=>0xE162,
+0xF1E8=>0xE163,
+0xF1E9=>0xE164,
+0xF1EA=>0xE165,
+0xF1EB=>0xE166,
+0xF1EC=>0xE167,
+0xF1ED=>0xE168,
+0xF1EE=>0xE169,
+0xF1EF=>0xE16A,
+0xF1F0=>0xE16B,
+0xF1F1=>0xE16C,
+0xF1F2=>0xE16D,
+0xF1F3=>0xE16E,
+0xF1F4=>0xE16F,
+0xF1F5=>0xE170,
+0xF1F6=>0xE171,
+0xF1F7=>0xE172,
+0xF1F8=>0xE173,
+0xF1F9=>0xE174,
+0xF1FA=>0xE175,
+0xF1FB=>0xE176,
+0xF1FC=>0xE177,
+0xF240=>0xE178,
+0xF241=>0xE179,
+0xF242=>0xE17A,
+0xF243=>0xE17B,
+0xF244=>0xE17C,
+0xF245=>0xE17D,
+0xF246=>0xE17E,
+0xF247=>0xE17F,
+0xF248=>0xE180,
+0xF249=>0xE181,
+0xF24A=>0xE182,
+0xF24B=>0xE183,
+0xF24C=>0xE184,
+0xF24D=>0xE185,
+0xF24E=>0xE186,
+0xF24F=>0xE187,
+0xF250=>0xE188,
+0xF251=>0xE189,
+0xF252=>0xE18A,
+0xF253=>0xE18B,
+0xF254=>0xE18C,
+0xF255=>0xE18D,
+0xF256=>0xE18E,
+0xF257=>0xE18F,
+0xF258=>0xE190,
+0xF259=>0xE191,
+0xF25A=>0xE192,
+0xF25B=>0xE193,
+0xF25C=>0xE194,
+0xF25D=>0xE195,
+0xF25E=>0xE196,
+0xF25F=>0xE197,
+0xF260=>0xE198,
+0xF261=>0xE199,
+0xF262=>0xE19A,
+0xF263=>0xE19B,
+0xF264=>0xE19C,
+0xF265=>0xE19D,
+0xF266=>0xE19E,
+0xF267=>0xE19F,
+0xF268=>0xE1A0,
+0xF269=>0xE1A1,
+0xF26A=>0xE1A2,
+0xF26B=>0xE1A3,
+0xF26C=>0xE1A4,
+0xF26D=>0xE1A5,
+0xF26E=>0xE1A6,
+0xF26F=>0xE1A7,
+0xF270=>0xE1A8,
+0xF271=>0xE1A9,
+0xF272=>0xE1AA,
+0xF273=>0xE1AB,
+0xF274=>0xE1AC,
+0xF275=>0xE1AD,
+0xF276=>0xE1AE,
+0xF277=>0xE1AF,
+0xF278=>0xE1B0,
+0xF279=>0xE1B1,
+0xF27A=>0xE1B2,
+0xF27B=>0xE1B3,
+0xF27C=>0xE1B4,
+0xF27D=>0xE1B5,
+0xF27E=>0xE1B6,
+0xF280=>0xE1B7,
+0xF281=>0xE1B8,
+0xF282=>0xE1B9,
+0xF283=>0xE1BA,
+0xF284=>0xE1BB,
+0xF285=>0xE1BC,
+0xF286=>0xE1BD,
+0xF287=>0xE1BE,
+0xF288=>0xE1BF,
+0xF289=>0xE1C0,
+0xF28A=>0xE1C1,
+0xF28B=>0xE1C2,
+0xF28C=>0xE1C3,
+0xF28D=>0xE1C4,
+0xF28E=>0xE1C5,
+0xF28F=>0xE1C6,
+0xF290=>0xE1C7,
+0xF291=>0xE1C8,
+0xF292=>0xE1C9,
+0xF293=>0xE1CA,
+0xF294=>0xE1CB,
+0xF295=>0xE1CC,
+0xF296=>0xE1CD,
+0xF297=>0xE1CE,
+0xF298=>0xE1CF,
+0xF299=>0xE1D0,
+0xF29A=>0xE1D1,
+0xF29B=>0xE1D2,
+0xF29C=>0xE1D3,
+0xF29D=>0xE1D4,
+0xF29E=>0xE1D5,
+0xF29F=>0xE1D6,
+0xF2A0=>0xE1D7,
+0xF2A1=>0xE1D8,
+0xF2A2=>0xE1D9,
+0xF2A3=>0xE1DA,
+0xF2A4=>0xE1DB,
+0xF2A5=>0xE1DC,
+0xF2A6=>0xE1DD,
+0xF2A7=>0xE1DE,
+0xF2A8=>0xE1DF,
+0xF2A9=>0xE1E0,
+0xF2AA=>0xE1E1,
+0xF2AB=>0xE1E2,
+0xF2AC=>0xE1E3,
+0xF2AD=>0xE1E4,
+0xF2AE=>0xE1E5,
+0xF2AF=>0xE1E6,
+0xF2B0=>0xE1E7,
+0xF2B1=>0xE1E8,
+0xF2B2=>0xE1E9,
+0xF2B3=>0xE1EA,
+0xF2B4=>0xE1EB,
+0xF2B5=>0xE1EC,
+0xF2B6=>0xE1ED,
+0xF2B7=>0xE1EE,
+0xF2B8=>0xE1EF,
+0xF2B9=>0xE1F0,
+0xF2BA=>0xE1F1,
+0xF2BB=>0xE1F2,
+0xF2BC=>0xE1F3,
+0xF2BD=>0xE1F4,
+0xF2BE=>0xE1F5,
+0xF2BF=>0xE1F6,
+0xF2C0=>0xE1F7,
+0xF2C1=>0xE1F8,
+0xF2C2=>0xE1F9,
+0xF2C3=>0xE1FA,
+0xF2C4=>0xE1FB,
+0xF2C5=>0xE1FC,
+0xF2C6=>0xE1FD,
+0xF2C7=>0xE1FE,
+0xF2C8=>0xE1FF,
+0xF2C9=>0xE200,
+0xF2CA=>0xE201,
+0xF2CB=>0xE202,
+0xF2CC=>0xE203,
+0xF2CD=>0xE204,
+0xF2CE=>0xE205,
+0xF2CF=>0xE206,
+0xF2D0=>0xE207,
+0xF2D1=>0xE208,
+0xF2D2=>0xE209,
+0xF2D3=>0xE20A,
+0xF2D4=>0xE20B,
+0xF2D5=>0xE20C,
+0xF2D6=>0xE20D,
+0xF2D7=>0xE20E,
+0xF2D8=>0xE20F,
+0xF2D9=>0xE210,
+0xF2DA=>0xE211,
+0xF2DB=>0xE212,
+0xF2DC=>0xE213,
+0xF2DD=>0xE214,
+0xF2DE=>0xE215,
+0xF2DF=>0xE216,
+0xF2E0=>0xE217,
+0xF2E1=>0xE218,
+0xF2E2=>0xE219,
+0xF2E3=>0xE21A,
+0xF2E4=>0xE21B,
+0xF2E5=>0xE21C,
+0xF2E6=>0xE21D,
+0xF2E7=>0xE21E,
+0xF2E8=>0xE21F,
+0xF2E9=>0xE220,
+0xF2EA=>0xE221,
+0xF2EB=>0xE222,
+0xF2EC=>0xE223,
+0xF2ED=>0xE224,
+0xF2EE=>0xE225,
+0xF2EF=>0xE226,
+0xF2F0=>0xE227,
+0xF2F1=>0xE228,
+0xF2F2=>0xE229,
+0xF2F3=>0xE22A,
+0xF2F4=>0xE22B,
+0xF2F5=>0xE22C,
+0xF2F6=>0xE22D,
+0xF2F7=>0xE22E,
+0xF2F8=>0xE22F,
+0xF2F9=>0xE230,
+0xF2FA=>0xE231,
+0xF2FB=>0xE232,
+0xF2FC=>0xE233,
+0xF340=>0xE234,
+0xF341=>0xE235,
+0xF342=>0xE236,
+0xF343=>0xE237,
+0xF344=>0xE238,
+0xF345=>0xE239,
+0xF346=>0xE23A,
+0xF347=>0xE23B,
+0xF348=>0xE23C,
+0xF349=>0xE23D,
+0xF34A=>0xE23E,
+0xF34B=>0xE23F,
+0xF34C=>0xE240,
+0xF34D=>0xE241,
+0xF34E=>0xE242,
+0xF34F=>0xE243,
+0xF350=>0xE244,
+0xF351=>0xE245,
+0xF352=>0xE246,
+0xF353=>0xE247,
+0xF354=>0xE248,
+0xF355=>0xE249,
+0xF356=>0xE24A,
+0xF357=>0xE24B,
+0xF358=>0xE24C,
+0xF359=>0xE24D,
+0xF35A=>0xE24E,
+0xF35B=>0xE24F,
+0xF35C=>0xE250,
+0xF35D=>0xE251,
+0xF35E=>0xE252,
+0xF35F=>0xE253,
+0xF360=>0xE254,
+0xF361=>0xE255,
+0xF362=>0xE256,
+0xF363=>0xE257,
+0xF364=>0xE258,
+0xF365=>0xE259,
+0xF366=>0xE25A,
+0xF367=>0xE25B,
+0xF368=>0xE25C,
+0xF369=>0xE25D,
+0xF36A=>0xE25E,
+0xF36B=>0xE25F,
+0xF36C=>0xE260,
+0xF36D=>0xE261,
+0xF36E=>0xE262,
+0xF36F=>0xE263,
+0xF370=>0xE264,
+0xF371=>0xE265,
+0xF372=>0xE266,
+0xF373=>0xE267,
+0xF374=>0xE268,
+0xF375=>0xE269,
+0xF376=>0xE26A,
+0xF377=>0xE26B,
+0xF378=>0xE26C,
+0xF379=>0xE26D,
+0xF37A=>0xE26E,
+0xF37B=>0xE26F,
+0xF37C=>0xE270,
+0xF37D=>0xE271,
+0xF37E=>0xE272,
+0xF380=>0xE273,
+0xF381=>0xE274,
+0xF382=>0xE275,
+0xF383=>0xE276,
+0xF384=>0xE277,
+0xF385=>0xE278,
+0xF386=>0xE279,
+0xF387=>0xE27A,
+0xF388=>0xE27B,
+0xF389=>0xE27C,
+0xF38A=>0xE27D,
+0xF38B=>0xE27E,
+0xF38C=>0xE27F,
+0xF38D=>0xE280,
+0xF38E=>0xE281,
+0xF38F=>0xE282,
+0xF390=>0xE283,
+0xF391=>0xE284,
+0xF392=>0xE285,
+0xF393=>0xE286,
+0xF394=>0xE287,
+0xF395=>0xE288,
+0xF396=>0xE289,
+0xF397=>0xE28A,
+0xF398=>0xE28B,
+0xF399=>0xE28C,
+0xF39A=>0xE28D,
+0xF39B=>0xE28E,
+0xF39C=>0xE28F,
+0xF39D=>0xE290,
+0xF39E=>0xE291,
+0xF39F=>0xE292,
+0xF3A0=>0xE293,
+0xF3A1=>0xE294,
+0xF3A2=>0xE295,
+0xF3A3=>0xE296,
+0xF3A4=>0xE297,
+0xF3A5=>0xE298,
+0xF3A6=>0xE299,
+0xF3A7=>0xE29A,
+0xF3A8=>0xE29B,
+0xF3A9=>0xE29C,
+0xF3AA=>0xE29D,
+0xF3AB=>0xE29E,
+0xF3AC=>0xE29F,
+0xF3AD=>0xE2A0,
+0xF3AE=>0xE2A1,
+0xF3AF=>0xE2A2,
+0xF3B0=>0xE2A3,
+0xF3B1=>0xE2A4,
+0xF3B2=>0xE2A5,
+0xF3B3=>0xE2A6,
+0xF3B4=>0xE2A7,
+0xF3B5=>0xE2A8,
+0xF3B6=>0xE2A9,
+0xF3B7=>0xE2AA,
+0xF3B8=>0xE2AB,
+0xF3B9=>0xE2AC,
+0xF3BA=>0xE2AD,
+0xF3BB=>0xE2AE,
+0xF3BC=>0xE2AF,
+0xF3BD=>0xE2B0,
+0xF3BE=>0xE2B1,
+0xF3BF=>0xE2B2,
+0xF3C0=>0xE2B3,
+0xF3C1=>0xE2B4,
+0xF3C2=>0xE2B5,
+0xF3C3=>0xE2B6,
+0xF3C4=>0xE2B7,
+0xF3C5=>0xE2B8,
+0xF3C6=>0xE2B9,
+0xF3C7=>0xE2BA,
+0xF3C8=>0xE2BB,
+0xF3C9=>0xE2BC,
+0xF3CA=>0xE2BD,
+0xF3CB=>0xE2BE,
+0xF3CC=>0xE2BF,
+0xF3CD=>0xE2C0,
+0xF3CE=>0xE2C1,
+0xF3CF=>0xE2C2,
+0xF3D0=>0xE2C3,
+0xF3D1=>0xE2C4,
+0xF3D2=>0xE2C5,
+0xF3D3=>0xE2C6,
+0xF3D4=>0xE2C7,
+0xF3D5=>0xE2C8,
+0xF3D6=>0xE2C9,
+0xF3D7=>0xE2CA,
+0xF3D8=>0xE2CB,
+0xF3D9=>0xE2CC,
+0xF3DA=>0xE2CD,
+0xF3DB=>0xE2CE,
+0xF3DC=>0xE2CF,
+0xF3DD=>0xE2D0,
+0xF3DE=>0xE2D1,
+0xF3DF=>0xE2D2,
+0xF3E0=>0xE2D3,
+0xF3E1=>0xE2D4,
+0xF3E2=>0xE2D5,
+0xF3E3=>0xE2D6,
+0xF3E4=>0xE2D7,
+0xF3E5=>0xE2D8,
+0xF3E6=>0xE2D9,
+0xF3E7=>0xE2DA,
+0xF3E8=>0xE2DB,
+0xF3E9=>0xE2DC,
+0xF3EA=>0xE2DD,
+0xF3EB=>0xE2DE,
+0xF3EC=>0xE2DF,
+0xF3ED=>0xE2E0,
+0xF3EE=>0xE2E1,
+0xF3EF=>0xE2E2,
+0xF3F0=>0xE2E3,
+0xF3F1=>0xE2E4,
+0xF3F2=>0xE2E5,
+0xF3F3=>0xE2E6,
+0xF3F4=>0xE2E7,
+0xF3F5=>0xE2E8,
+0xF3F6=>0xE2E9,
+0xF3F7=>0xE2EA,
+0xF3F8=>0xE2EB,
+0xF3F9=>0xE2EC,
+0xF3FA=>0xE2ED,
+0xF3FB=>0xE2EE,
+0xF3FC=>0xE2EF,
+0xF440=>0xE2F0,
+0xF441=>0xE2F1,
+0xF442=>0xE2F2,
+0xF443=>0xE2F3,
+0xF444=>0xE2F4,
+0xF445=>0xE2F5,
+0xF446=>0xE2F6,
+0xF447=>0xE2F7,
+0xF448=>0xE2F8,
+0xF449=>0xE2F9,
+0xF44A=>0xE2FA,
+0xF44B=>0xE2FB,
+0xF44C=>0xE2FC,
+0xF44D=>0xE2FD,
+0xF44E=>0xE2FE,
+0xF44F=>0xE2FF,
+0xF450=>0xE300,
+0xF451=>0xE301,
+0xF452=>0xE302,
+0xF453=>0xE303,
+0xF454=>0xE304,
+0xF455=>0xE305,
+0xF456=>0xE306,
+0xF457=>0xE307,
+0xF458=>0xE308,
+0xF459=>0xE309,
+0xF45A=>0xE30A,
+0xF45B=>0xE30B,
+0xF45C=>0xE30C,
+0xF45D=>0xE30D,
+0xF45E=>0xE30E,
+0xF45F=>0xE30F,
+0xF460=>0xE310,
+0xF461=>0xE311,
+0xF462=>0xE312,
+0xF463=>0xE313,
+0xF464=>0xE314,
+0xF465=>0xE315,
+0xF466=>0xE316,
+0xF467=>0xE317,
+0xF468=>0xE318,
+0xF469=>0xE319,
+0xF46A=>0xE31A,
+0xF46B=>0xE31B,
+0xF46C=>0xE31C,
+0xF46D=>0xE31D,
+0xF46E=>0xE31E,
+0xF46F=>0xE31F,
+0xF470=>0xE320,
+0xF471=>0xE321,
+0xF472=>0xE322,
+0xF473=>0xE323,
+0xF474=>0xE324,
+0xF475=>0xE325,
+0xF476=>0xE326,
+0xF477=>0xE327,
+0xF478=>0xE328,
+0xF479=>0xE329,
+0xF47A=>0xE32A,
+0xF47B=>0xE32B,
+0xF47C=>0xE32C,
+0xF47D=>0xE32D,
+0xF47E=>0xE32E,
+0xF480=>0xE32F,
+0xF481=>0xE330,
+0xF482=>0xE331,
+0xF483=>0xE332,
+0xF484=>0xE333,
+0xF485=>0xE334,
+0xF486=>0xE335,
+0xF487=>0xE336,
+0xF488=>0xE337,
+0xF489=>0xE338,
+0xF48A=>0xE339,
+0xF48B=>0xE33A,
+0xF48C=>0xE33B,
+0xF48D=>0xE33C,
+0xF48E=>0xE33D,
+0xF48F=>0xE33E,
+0xF490=>0xE33F,
+0xF491=>0xE340,
+0xF492=>0xE341,
+0xF493=>0xE342,
+0xF494=>0xE343,
+0xF495=>0xE344,
+0xF496=>0xE345,
+0xF497=>0xE346,
+0xF498=>0xE347,
+0xF499=>0xE348,
+0xF49A=>0xE349,
+0xF49B=>0xE34A,
+0xF49C=>0xE34B,
+0xF49D=>0xE34C,
+0xF49E=>0xE34D,
+0xF49F=>0xE34E,
+0xF4A0=>0xE34F,
+0xF4A1=>0xE350,
+0xF4A2=>0xE351,
+0xF4A3=>0xE352,
+0xF4A4=>0xE353,
+0xF4A5=>0xE354,
+0xF4A6=>0xE355,
+0xF4A7=>0xE356,
+0xF4A8=>0xE357,
+0xF4A9=>0xE358,
+0xF4AA=>0xE359,
+0xF4AB=>0xE35A,
+0xF4AC=>0xE35B,
+0xF4AD=>0xE35C,
+0xF4AE=>0xE35D,
+0xF4AF=>0xE35E,
+0xF4B0=>0xE35F,
+0xF4B1=>0xE360,
+0xF4B2=>0xE361,
+0xF4B3=>0xE362,
+0xF4B4=>0xE363,
+0xF4B5=>0xE364,
+0xF4B6=>0xE365,
+0xF4B7=>0xE366,
+0xF4B8=>0xE367,
+0xF4B9=>0xE368,
+0xF4BA=>0xE369,
+0xF4BB=>0xE36A,
+0xF4BC=>0xE36B,
+0xF4BD=>0xE36C,
+0xF4BE=>0xE36D,
+0xF4BF=>0xE36E,
+0xF4C0=>0xE36F,
+0xF4C1=>0xE370,
+0xF4C2=>0xE371,
+0xF4C3=>0xE372,
+0xF4C4=>0xE373,
+0xF4C5=>0xE374,
+0xF4C6=>0xE375,
+0xF4C7=>0xE376,
+0xF4C8=>0xE377,
+0xF4C9=>0xE378,
+0xF4CA=>0xE379,
+0xF4CB=>0xE37A,
+0xF4CC=>0xE37B,
+0xF4CD=>0xE37C,
+0xF4CE=>0xE37D,
+0xF4CF=>0xE37E,
+0xF4D0=>0xE37F,
+0xF4D1=>0xE380,
+0xF4D2=>0xE381,
+0xF4D3=>0xE382,
+0xF4D4=>0xE383,
+0xF4D5=>0xE384,
+0xF4D6=>0xE385,
+0xF4D7=>0xE386,
+0xF4D8=>0xE387,
+0xF4D9=>0xE388,
+0xF4DA=>0xE389,
+0xF4DB=>0xE38A,
+0xF4DC=>0xE38B,
+0xF4DD=>0xE38C,
+0xF4DE=>0xE38D,
+0xF4DF=>0xE38E,
+0xF4E0=>0xE38F,
+0xF4E1=>0xE390,
+0xF4E2=>0xE391,
+0xF4E3=>0xE392,
+0xF4E4=>0xE393,
+0xF4E5=>0xE394,
+0xF4E6=>0xE395,
+0xF4E7=>0xE396,
+0xF4E8=>0xE397,
+0xF4E9=>0xE398,
+0xF4EA=>0xE399,
+0xF4EB=>0xE39A,
+0xF4EC=>0xE39B,
+0xF4ED=>0xE39C,
+0xF4EE=>0xE39D,
+0xF4EF=>0xE39E,
+0xF4F0=>0xE39F,
+0xF4F1=>0xE3A0,
+0xF4F2=>0xE3A1,
+0xF4F3=>0xE3A2,
+0xF4F4=>0xE3A3,
+0xF4F5=>0xE3A4,
+0xF4F6=>0xE3A5,
+0xF4F7=>0xE3A6,
+0xF4F8=>0xE3A7,
+0xF4F9=>0xE3A8,
+0xF4FA=>0xE3A9,
+0xF4FB=>0xE3AA,
+0xF4FC=>0xE3AB,
+0xF540=>0xE3AC,
+0xF541=>0xE3AD,
+0xF542=>0xE3AE,
+0xF543=>0xE3AF,
+0xF544=>0xE3B0,
+0xF545=>0xE3B1,
+0xF546=>0xE3B2,
+0xF547=>0xE3B3,
+0xF548=>0xE3B4,
+0xF549=>0xE3B5,
+0xF54A=>0xE3B6,
+0xF54B=>0xE3B7,
+0xF54C=>0xE3B8,
+0xF54D=>0xE3B9,
+0xF54E=>0xE3BA,
+0xF54F=>0xE3BB,
+0xF550=>0xE3BC,
+0xF551=>0xE3BD,
+0xF552=>0xE3BE,
+0xF553=>0xE3BF,
+0xF554=>0xE3C0,
+0xF555=>0xE3C1,
+0xF556=>0xE3C2,
+0xF557=>0xE3C3,
+0xF558=>0xE3C4,
+0xF559=>0xE3C5,
+0xF55A=>0xE3C6,
+0xF55B=>0xE3C7,
+0xF55C=>0xE3C8,
+0xF55D=>0xE3C9,
+0xF55E=>0xE3CA,
+0xF55F=>0xE3CB,
+0xF560=>0xE3CC,
+0xF561=>0xE3CD,
+0xF562=>0xE3CE,
+0xF563=>0xE3CF,
+0xF564=>0xE3D0,
+0xF565=>0xE3D1,
+0xF566=>0xE3D2,
+0xF567=>0xE3D3,
+0xF568=>0xE3D4,
+0xF569=>0xE3D5,
+0xF56A=>0xE3D6,
+0xF56B=>0xE3D7,
+0xF56C=>0xE3D8,
+0xF56D=>0xE3D9,
+0xF56E=>0xE3DA,
+0xF56F=>0xE3DB,
+0xF570=>0xE3DC,
+0xF571=>0xE3DD,
+0xF572=>0xE3DE,
+0xF573=>0xE3DF,
+0xF574=>0xE3E0,
+0xF575=>0xE3E1,
+0xF576=>0xE3E2,
+0xF577=>0xE3E3,
+0xF578=>0xE3E4,
+0xF579=>0xE3E5,
+0xF57A=>0xE3E6,
+0xF57B=>0xE3E7,
+0xF57C=>0xE3E8,
+0xF57D=>0xE3E9,
+0xF57E=>0xE3EA,
+0xF580=>0xE3EB,
+0xF581=>0xE3EC,
+0xF582=>0xE3ED,
+0xF583=>0xE3EE,
+0xF584=>0xE3EF,
+0xF585=>0xE3F0,
+0xF586=>0xE3F1,
+0xF587=>0xE3F2,
+0xF588=>0xE3F3,
+0xF589=>0xE3F4,
+0xF58A=>0xE3F5,
+0xF58B=>0xE3F6,
+0xF58C=>0xE3F7,
+0xF58D=>0xE3F8,
+0xF58E=>0xE3F9,
+0xF58F=>0xE3FA,
+0xF590=>0xE3FB,
+0xF591=>0xE3FC,
+0xF592=>0xE3FD,
+0xF593=>0xE3FE,
+0xF594=>0xE3FF,
+0xF595=>0xE400,
+0xF596=>0xE401,
+0xF597=>0xE402,
+0xF598=>0xE403,
+0xF599=>0xE404,
+0xF59A=>0xE405,
+0xF59B=>0xE406,
+0xF59C=>0xE407,
+0xF59D=>0xE408,
+0xF59E=>0xE409,
+0xF59F=>0xE40A,
+0xF5A0=>0xE40B,
+0xF5A1=>0xE40C,
+0xF5A2=>0xE40D,
+0xF5A3=>0xE40E,
+0xF5A4=>0xE40F,
+0xF5A5=>0xE410,
+0xF5A6=>0xE411,
+0xF5A7=>0xE412,
+0xF5A8=>0xE413,
+0xF5A9=>0xE414,
+0xF5AA=>0xE415,
+0xF5AB=>0xE416,
+0xF5AC=>0xE417,
+0xF5AD=>0xE418,
+0xF5AE=>0xE419,
+0xF5AF=>0xE41A,
+0xF5B0=>0xE41B,
+0xF5B1=>0xE41C,
+0xF5B2=>0xE41D,
+0xF5B3=>0xE41E,
+0xF5B4=>0xE41F,
+0xF5B5=>0xE420,
+0xF5B6=>0xE421,
+0xF5B7=>0xE422,
+0xF5B8=>0xE423,
+0xF5B9=>0xE424,
+0xF5BA=>0xE425,
+0xF5BB=>0xE426,
+0xF5BC=>0xE427,
+0xF5BD=>0xE428,
+0xF5BE=>0xE429,
+0xF5BF=>0xE42A,
+0xF5C0=>0xE42B,
+0xF5C1=>0xE42C,
+0xF5C2=>0xE42D,
+0xF5C3=>0xE42E,
+0xF5C4=>0xE42F,
+0xF5C5=>0xE430,
+0xF5C6=>0xE431,
+0xF5C7=>0xE432,
+0xF5C8=>0xE433,
+0xF5C9=>0xE434,
+0xF5CA=>0xE435,
+0xF5CB=>0xE436,
+0xF5CC=>0xE437,
+0xF5CD=>0xE438,
+0xF5CE=>0xE439,
+0xF5CF=>0xE43A,
+0xF5D0=>0xE43B,
+0xF5D1=>0xE43C,
+0xF5D2=>0xE43D,
+0xF5D3=>0xE43E,
+0xF5D4=>0xE43F,
+0xF5D5=>0xE440,
+0xF5D6=>0xE441,
+0xF5D7=>0xE442,
+0xF5D8=>0xE443,
+0xF5D9=>0xE444,
+0xF5DA=>0xE445,
+0xF5DB=>0xE446,
+0xF5DC=>0xE447,
+0xF5DD=>0xE448,
+0xF5DE=>0xE449,
+0xF5DF=>0xE44A,
+0xF5E0=>0xE44B,
+0xF5E1=>0xE44C,
+0xF5E2=>0xE44D,
+0xF5E3=>0xE44E,
+0xF5E4=>0xE44F,
+0xF5E5=>0xE450,
+0xF5E6=>0xE451,
+0xF5E7=>0xE452,
+0xF5E8=>0xE453,
+0xF5E9=>0xE454,
+0xF5EA=>0xE455,
+0xF5EB=>0xE456,
+0xF5EC=>0xE457,
+0xF5ED=>0xE458,
+0xF5EE=>0xE459,
+0xF5EF=>0xE45A,
+0xF5F0=>0xE45B,
+0xF5F1=>0xE45C,
+0xF5F2=>0xE45D,
+0xF5F3=>0xE45E,
+0xF5F4=>0xE45F,
+0xF5F5=>0xE460,
+0xF5F6=>0xE461,
+0xF5F7=>0xE462,
+0xF5F8=>0xE463,
+0xF5F9=>0xE464,
+0xF5FA=>0xE465,
+0xF5FB=>0xE466,
+0xF5FC=>0xE467,
+0xF640=>0xE468,
+0xF641=>0xE469,
+0xF642=>0xE46A,
+0xF643=>0xE46B,
+0xF644=>0xE46C,
+0xF645=>0xE46D,
+0xF646=>0xE46E,
+0xF647=>0xE46F,
+0xF648=>0xE470,
+0xF649=>0xE471,
+0xF64A=>0xE472,
+0xF64B=>0xE473,
+0xF64C=>0xE474,
+0xF64D=>0xE475,
+0xF64E=>0xE476,
+0xF64F=>0xE477,
+0xF650=>0xE478,
+0xF651=>0xE479,
+0xF652=>0xE47A,
+0xF653=>0xE47B,
+0xF654=>0xE47C,
+0xF655=>0xE47D,
+0xF656=>0xE47E,
+0xF657=>0xE47F,
+0xF658=>0xE480,
+0xF659=>0xE481,
+0xF65A=>0xE482,
+0xF65B=>0xE483,
+0xF65C=>0xE484,
+0xF65D=>0xE485,
+0xF65E=>0xE486,
+0xF65F=>0xE487,
+0xF660=>0xE488,
+0xF661=>0xE489,
+0xF662=>0xE48A,
+0xF663=>0xE48B,
+0xF664=>0xE48C,
+0xF665=>0xE48D,
+0xF666=>0xE48E,
+0xF667=>0xE48F,
+0xF668=>0xE490,
+0xF669=>0xE491,
+0xF66A=>0xE492,
+0xF66B=>0xE493,
+0xF66C=>0xE494,
+0xF66D=>0xE495,
+0xF66E=>0xE496,
+0xF66F=>0xE497,
+0xF670=>0xE498,
+0xF671=>0xE499,
+0xF672=>0xE49A,
+0xF673=>0xE49B,
+0xF674=>0xE49C,
+0xF675=>0xE49D,
+0xF676=>0xE49E,
+0xF677=>0xE49F,
+0xF678=>0xE4A0,
+0xF679=>0xE4A1,
+0xF67A=>0xE4A2,
+0xF67B=>0xE4A3,
+0xF67C=>0xE4A4,
+0xF67D=>0xE4A5,
+0xF67E=>0xE4A6,
+0xF680=>0xE4A7,
+0xF681=>0xE4A8,
+0xF682=>0xE4A9,
+0xF683=>0xE4AA,
+0xF684=>0xE4AB,
+0xF685=>0xE4AC,
+0xF686=>0xE4AD,
+0xF687=>0xE4AE,
+0xF688=>0xE4AF,
+0xF689=>0xE4B0,
+0xF68A=>0xE4B1,
+0xF68B=>0xE4B2,
+0xF68C=>0xE4B3,
+0xF68D=>0xE4B4,
+0xF68E=>0xE4B5,
+0xF68F=>0xE4B6,
+0xF690=>0xE4B7,
+0xF691=>0xE4B8,
+0xF692=>0xE4B9,
+0xF693=>0xE4BA,
+0xF694=>0xE4BB,
+0xF695=>0xE4BC,
+0xF696=>0xE4BD,
+0xF697=>0xE4BE,
+0xF698=>0xE4BF,
+0xF699=>0xE4C0,
+0xF69A=>0xE4C1,
+0xF69B=>0xE4C2,
+0xF69C=>0xE4C3,
+0xF69D=>0xE4C4,
+0xF69E=>0xE4C5,
+0xF69F=>0xE4C6,
+0xF6A0=>0xE4C7,
+0xF6A1=>0xE4C8,
+0xF6A2=>0xE4C9,
+0xF6A3=>0xE4CA,
+0xF6A4=>0xE4CB,
+0xF6A5=>0xE4CC,
+0xF6A6=>0xE4CD,
+0xF6A7=>0xE4CE,
+0xF6A8=>0xE4CF,
+0xF6A9=>0xE4D0,
+0xF6AA=>0xE4D1,
+0xF6AB=>0xE4D2,
+0xF6AC=>0xE4D3,
+0xF6AD=>0xE4D4,
+0xF6AE=>0xE4D5,
+0xF6AF=>0xE4D6,
+0xF6B0=>0xE4D7,
+0xF6B1=>0xE4D8,
+0xF6B2=>0xE4D9,
+0xF6B3=>0xE4DA,
+0xF6B4=>0xE4DB,
+0xF6B5=>0xE4DC,
+0xF6B6=>0xE4DD,
+0xF6B7=>0xE4DE,
+0xF6B8=>0xE4DF,
+0xF6B9=>0xE4E0,
+0xF6BA=>0xE4E1,
+0xF6BB=>0xE4E2,
+0xF6BC=>0xE4E3,
+0xF6BD=>0xE4E4,
+0xF6BE=>0xE4E5,
+0xF6BF=>0xE4E6,
+0xF6C0=>0xE4E7,
+0xF6C1=>0xE4E8,
+0xF6C2=>0xE4E9,
+0xF6C3=>0xE4EA,
+0xF6C4=>0xE4EB,
+0xF6C5=>0xE4EC,
+0xF6C6=>0xE4ED,
+0xF6C7=>0xE4EE,
+0xF6C8=>0xE4EF,
+0xF6C9=>0xE4F0,
+0xF6CA=>0xE4F1,
+0xF6CB=>0xE4F2,
+0xF6CC=>0xE4F3,
+0xF6CD=>0xE4F4,
+0xF6CE=>0xE4F5,
+0xF6CF=>0xE4F6,
+0xF6D0=>0xE4F7,
+0xF6D1=>0xE4F8,
+0xF6D2=>0xE4F9,
+0xF6D3=>0xE4FA,
+0xF6D4=>0xE4FB,
+0xF6D5=>0xE4FC,
+0xF6D6=>0xE4FD,
+0xF6D7=>0xE4FE,
+0xF6D8=>0xE4FF,
+0xF6D9=>0xE500,
+0xF6DA=>0xE501,
+0xF6DB=>0xE502,
+0xF6DC=>0xE503,
+0xF6DD=>0xE504,
+0xF6DE=>0xE505,
+0xF6DF=>0xE506,
+0xF6E0=>0xE507,
+0xF6E1=>0xE508,
+0xF6E2=>0xE509,
+0xF6E3=>0xE50A,
+0xF6E4=>0xE50B,
+0xF6E5=>0xE50C,
+0xF6E6=>0xE50D,
+0xF6E7=>0xE50E,
+0xF6E8=>0xE50F,
+0xF6E9=>0xE510,
+0xF6EA=>0xE511,
+0xF6EB=>0xE512,
+0xF6EC=>0xE513,
+0xF6ED=>0xE514,
+0xF6EE=>0xE515,
+0xF6EF=>0xE516,
+0xF6F0=>0xE517,
+0xF6F1=>0xE518,
+0xF6F2=>0xE519,
+0xF6F3=>0xE51A,
+0xF6F4=>0xE51B,
+0xF6F5=>0xE51C,
+0xF6F6=>0xE51D,
+0xF6F7=>0xE51E,
+0xF6F8=>0xE51F,
+0xF6F9=>0xE520,
+0xF6FA=>0xE521,
+0xF6FB=>0xE522,
+0xF6FC=>0xE523,
+0xF740=>0xE524,
+0xF741=>0xE525,
+0xF742=>0xE526,
+0xF743=>0xE527,
+0xF744=>0xE528,
+0xF745=>0xE529,
+0xF746=>0xE52A,
+0xF747=>0xE52B,
+0xF748=>0xE52C,
+0xF749=>0xE52D,
+0xF74A=>0xE52E,
+0xF74B=>0xE52F,
+0xF74C=>0xE530,
+0xF74D=>0xE531,
+0xF74E=>0xE532,
+0xF74F=>0xE533,
+0xF750=>0xE534,
+0xF751=>0xE535,
+0xF752=>0xE536,
+0xF753=>0xE537,
+0xF754=>0xE538,
+0xF755=>0xE539,
+0xF756=>0xE53A,
+0xF757=>0xE53B,
+0xF758=>0xE53C,
+0xF759=>0xE53D,
+0xF75A=>0xE53E,
+0xF75B=>0xE53F,
+0xF75C=>0xE540,
+0xF75D=>0xE541,
+0xF75E=>0xE542,
+0xF75F=>0xE543,
+0xF760=>0xE544,
+0xF761=>0xE545,
+0xF762=>0xE546,
+0xF763=>0xE547,
+0xF764=>0xE548,
+0xF765=>0xE549,
+0xF766=>0xE54A,
+0xF767=>0xE54B,
+0xF768=>0xE54C,
+0xF769=>0xE54D,
+0xF76A=>0xE54E,
+0xF76B=>0xE54F,
+0xF76C=>0xE550,
+0xF76D=>0xE551,
+0xF76E=>0xE552,
+0xF76F=>0xE553,
+0xF770=>0xE554,
+0xF771=>0xE555,
+0xF772=>0xE556,
+0xF773=>0xE557,
+0xF774=>0xE558,
+0xF775=>0xE559,
+0xF776=>0xE55A,
+0xF777=>0xE55B,
+0xF778=>0xE55C,
+0xF779=>0xE55D,
+0xF77A=>0xE55E,
+0xF77B=>0xE55F,
+0xF77C=>0xE560,
+0xF77D=>0xE561,
+0xF77E=>0xE562,
+0xF780=>0xE563,
+0xF781=>0xE564,
+0xF782=>0xE565,
+0xF783=>0xE566,
+0xF784=>0xE567,
+0xF785=>0xE568,
+0xF786=>0xE569,
+0xF787=>0xE56A,
+0xF788=>0xE56B,
+0xF789=>0xE56C,
+0xF78A=>0xE56D,
+0xF78B=>0xE56E,
+0xF78C=>0xE56F,
+0xF78D=>0xE570,
+0xF78E=>0xE571,
+0xF78F=>0xE572,
+0xF790=>0xE573,
+0xF791=>0xE574,
+0xF792=>0xE575,
+0xF793=>0xE576,
+0xF794=>0xE577,
+0xF795=>0xE578,
+0xF796=>0xE579,
+0xF797=>0xE57A,
+0xF798=>0xE57B,
+0xF799=>0xE57C,
+0xF79A=>0xE57D,
+0xF79B=>0xE57E,
+0xF79C=>0xE57F,
+0xF79D=>0xE580,
+0xF79E=>0xE581,
+0xF79F=>0xE582,
+0xF7A0=>0xE583,
+0xF7A1=>0xE584,
+0xF7A2=>0xE585,
+0xF7A3=>0xE586,
+0xF7A4=>0xE587,
+0xF7A5=>0xE588,
+0xF7A6=>0xE589,
+0xF7A7=>0xE58A,
+0xF7A8=>0xE58B,
+0xF7A9=>0xE58C,
+0xF7AA=>0xE58D,
+0xF7AB=>0xE58E,
+0xF7AC=>0xE58F,
+0xF7AD=>0xE590,
+0xF7AE=>0xE591,
+0xF7AF=>0xE592,
+0xF7B0=>0xE593,
+0xF7B1=>0xE594,
+0xF7B2=>0xE595,
+0xF7B3=>0xE596,
+0xF7B4=>0xE597,
+0xF7B5=>0xE598,
+0xF7B6=>0xE599,
+0xF7B7=>0xE59A,
+0xF7B8=>0xE59B,
+0xF7B9=>0xE59C,
+0xF7BA=>0xE59D,
+0xF7BB=>0xE59E,
+0xF7BC=>0xE59F,
+0xF7BD=>0xE5A0,
+0xF7BE=>0xE5A1,
+0xF7BF=>0xE5A2,
+0xF7C0=>0xE5A3,
+0xF7C1=>0xE5A4,
+0xF7C2=>0xE5A5,
+0xF7C3=>0xE5A6,
+0xF7C4=>0xE5A7,
+0xF7C5=>0xE5A8,
+0xF7C6=>0xE5A9,
+0xF7C7=>0xE5AA,
+0xF7C8=>0xE5AB,
+0xF7C9=>0xE5AC,
+0xF7CA=>0xE5AD,
+0xF7CB=>0xE5AE,
+0xF7CC=>0xE5AF,
+0xF7CD=>0xE5B0,
+0xF7CE=>0xE5B1,
+0xF7CF=>0xE5B2,
+0xF7D0=>0xE5B3,
+0xF7D1=>0xE5B4,
+0xF7D2=>0xE5B5,
+0xF7D3=>0xE5B6,
+0xF7D4=>0xE5B7,
+0xF7D5=>0xE5B8,
+0xF7D6=>0xE5B9,
+0xF7D7=>0xE5BA,
+0xF7D8=>0xE5BB,
+0xF7D9=>0xE5BC,
+0xF7DA=>0xE5BD,
+0xF7DB=>0xE5BE,
+0xF7DC=>0xE5BF,
+0xF7DD=>0xE5C0,
+0xF7DE=>0xE5C1,
+0xF7DF=>0xE5C2,
+0xF7E0=>0xE5C3,
+0xF7E1=>0xE5C4,
+0xF7E2=>0xE5C5,
+0xF7E3=>0xE5C6,
+0xF7E4=>0xE5C7,
+0xF7E5=>0xE5C8,
+0xF7E6=>0xE5C9,
+0xF7E7=>0xE5CA,
+0xF7E8=>0xE5CB,
+0xF7E9=>0xE5CC,
+0xF7EA=>0xE5CD,
+0xF7EB=>0xE5CE,
+0xF7EC=>0xE5CF,
+0xF7ED=>0xE5D0,
+0xF7EE=>0xE5D1,
+0xF7EF=>0xE5D2,
+0xF7F0=>0xE5D3,
+0xF7F1=>0xE5D4,
+0xF7F2=>0xE5D5,
+0xF7F3=>0xE5D6,
+0xF7F4=>0xE5D7,
+0xF7F5=>0xE5D8,
+0xF7F6=>0xE5D9,
+0xF7F7=>0xE5DA,
+0xF7F8=>0xE5DB,
+0xF7F9=>0xE5DC,
+0xF7FA=>0xE5DD,
+0xF7FB=>0xE5DE,
+0xF7FC=>0xE5DF,
+0xF840=>0xE5E0,
+0xF841=>0xE5E1,
+0xF842=>0xE5E2,
+0xF843=>0xE5E3,
+0xF844=>0xE5E4,
+0xF845=>0xE5E5,
+0xF846=>0xE5E6,
+0xF847=>0xE5E7,
+0xF848=>0xE5E8,
+0xF849=>0xE5E9,
+0xF84A=>0xE5EA,
+0xF84B=>0xE5EB,
+0xF84C=>0xE5EC,
+0xF84D=>0xE5ED,
+0xF84E=>0xE5EE,
+0xF84F=>0xE5EF,
+0xF850=>0xE5F0,
+0xF851=>0xE5F1,
+0xF852=>0xE5F2,
+0xF853=>0xE5F3,
+0xF854=>0xE5F4,
+0xF855=>0xE5F5,
+0xF856=>0xE5F6,
+0xF857=>0xE5F7,
+0xF858=>0xE5F8,
+0xF859=>0xE5F9,
+0xF85A=>0xE5FA,
+0xF85B=>0xE5FB,
+0xF85C=>0xE5FC,
+0xF85D=>0xE5FD,
+0xF85E=>0xE5FE,
+0xF85F=>0xE5FF,
+0xF860=>0xE600,
+0xF861=>0xE601,
+0xF862=>0xE602,
+0xF863=>0xE603,
+0xF864=>0xE604,
+0xF865=>0xE605,
+0xF866=>0xE606,
+0xF867=>0xE607,
+0xF868=>0xE608,
+0xF869=>0xE609,
+0xF86A=>0xE60A,
+0xF86B=>0xE60B,
+0xF86C=>0xE60C,
+0xF86D=>0xE60D,
+0xF86E=>0xE60E,
+0xF86F=>0xE60F,
+0xF870=>0xE610,
+0xF871=>0xE611,
+0xF872=>0xE612,
+0xF873=>0xE613,
+0xF874=>0xE614,
+0xF875=>0xE615,
+0xF876=>0xE616,
+0xF877=>0xE617,
+0xF878=>0xE618,
+0xF879=>0xE619,
+0xF87A=>0xE61A,
+0xF87B=>0xE61B,
+0xF87C=>0xE61C,
+0xF87D=>0xE61D,
+0xF87E=>0xE61E,
+0xF880=>0xE61F,
+0xF881=>0xE620,
+0xF882=>0xE621,
+0xF883=>0xE622,
+0xF884=>0xE623,
+0xF885=>0xE624,
+0xF886=>0xE625,
+0xF887=>0xE626,
+0xF888=>0xE627,
+0xF889=>0xE628,
+0xF88A=>0xE629,
+0xF88B=>0xE62A,
+0xF88C=>0xE62B,
+0xF88D=>0xE62C,
+0xF88E=>0xE62D,
+0xF88F=>0xE62E,
+0xF890=>0xE62F,
+0xF891=>0xE630,
+0xF892=>0xE631,
+0xF893=>0xE632,
+0xF894=>0xE633,
+0xF895=>0xE634,
+0xF896=>0xE635,
+0xF897=>0xE636,
+0xF898=>0xE637,
+0xF899=>0xE638,
+0xF89A=>0xE639,
+0xF89B=>0xE63A,
+0xF89C=>0xE63B,
+0xF89D=>0xE63C,
+0xF89E=>0xE63D,
+0xF89F=>0xE63E,
+0xF8A0=>0xE63F,
+0xF8A1=>0xE640,
+0xF8A2=>0xE641,
+0xF8A3=>0xE642,
+0xF8A4=>0xE643,
+0xF8A5=>0xE644,
+0xF8A6=>0xE645,
+0xF8A7=>0xE646,
+0xF8A8=>0xE647,
+0xF8A9=>0xE648,
+0xF8AA=>0xE649,
+0xF8AB=>0xE64A,
+0xF8AC=>0xE64B,
+0xF8AD=>0xE64C,
+0xF8AE=>0xE64D,
+0xF8AF=>0xE64E,
+0xF8B0=>0xE64F,
+0xF8B1=>0xE650,
+0xF8B2=>0xE651,
+0xF8B3=>0xE652,
+0xF8B4=>0xE653,
+0xF8B5=>0xE654,
+0xF8B6=>0xE655,
+0xF8B7=>0xE656,
+0xF8B8=>0xE657,
+0xF8B9=>0xE658,
+0xF8BA=>0xE659,
+0xF8BB=>0xE65A,
+0xF8BC=>0xE65B,
+0xF8BD=>0xE65C,
+0xF8BE=>0xE65D,
+0xF8BF=>0xE65E,
+0xF8C0=>0xE65F,
+0xF8C1=>0xE660,
+0xF8C2=>0xE661,
+0xF8C3=>0xE662,
+0xF8C4=>0xE663,
+0xF8C5=>0xE664,
+0xF8C6=>0xE665,
+0xF8C7=>0xE666,
+0xF8C8=>0xE667,
+0xF8C9=>0xE668,
+0xF8CA=>0xE669,
+0xF8CB=>0xE66A,
+0xF8CC=>0xE66B,
+0xF8CD=>0xE66C,
+0xF8CE=>0xE66D,
+0xF8CF=>0xE66E,
+0xF8D0=>0xE66F,
+0xF8D1=>0xE670,
+0xF8D2=>0xE671,
+0xF8D3=>0xE672,
+0xF8D4=>0xE673,
+0xF8D5=>0xE674,
+0xF8D6=>0xE675,
+0xF8D7=>0xE676,
+0xF8D8=>0xE677,
+0xF8D9=>0xE678,
+0xF8DA=>0xE679,
+0xF8DB=>0xE67A,
+0xF8DC=>0xE67B,
+0xF8DD=>0xE67C,
+0xF8DE=>0xE67D,
+0xF8DF=>0xE67E,
+0xF8E0=>0xE67F,
+0xF8E1=>0xE680,
+0xF8E2=>0xE681,
+0xF8E3=>0xE682,
+0xF8E4=>0xE683,
+0xF8E5=>0xE684,
+0xF8E6=>0xE685,
+0xF8E7=>0xE686,
+0xF8E8=>0xE687,
+0xF8E9=>0xE688,
+0xF8EA=>0xE689,
+0xF8EB=>0xE68A,
+0xF8EC=>0xE68B,
+0xF8ED=>0xE68C,
+0xF8EE=>0xE68D,
+0xF8EF=>0xE68E,
+0xF8F0=>0xE68F,
+0xF8F1=>0xE690,
+0xF8F2=>0xE691,
+0xF8F3=>0xE692,
+0xF8F4=>0xE693,
+0xF8F5=>0xE694,
+0xF8F6=>0xE695,
+0xF8F7=>0xE696,
+0xF8F8=>0xE697,
+0xF8F9=>0xE698,
+0xF8FA=>0xE699,
+0xF8FB=>0xE69A,
+0xF8FC=>0xE69B,
+0xF940=>0xE69C,
+0xF941=>0xE69D,
+0xF942=>0xE69E,
+0xF943=>0xE69F,
+0xF944=>0xE6A0,
+0xF945=>0xE6A1,
+0xF946=>0xE6A2,
+0xF947=>0xE6A3,
+0xF948=>0xE6A4,
+0xF949=>0xE6A5,
+0xF94A=>0xE6A6,
+0xF94B=>0xE6A7,
+0xF94C=>0xE6A8,
+0xF94D=>0xE6A9,
+0xF94E=>0xE6AA,
+0xF94F=>0xE6AB,
+0xF950=>0xE6AC,
+0xF951=>0xE6AD,
+0xF952=>0xE6AE,
+0xF953=>0xE6AF,
+0xF954=>0xE6B0,
+0xF955=>0xE6B1,
+0xF956=>0xE6B2,
+0xF957=>0xE6B3,
+0xF958=>0xE6B4,
+0xF959=>0xE6B5,
+0xF95A=>0xE6B6,
+0xF95B=>0xE6B7,
+0xF95C=>0xE6B8,
+0xF95D=>0xE6B9,
+0xF95E=>0xE6BA,
+0xF95F=>0xE6BB,
+0xF960=>0xE6BC,
+0xF961=>0xE6BD,
+0xF962=>0xE6BE,
+0xF963=>0xE6BF,
+0xF964=>0xE6C0,
+0xF965=>0xE6C1,
+0xF966=>0xE6C2,
+0xF967=>0xE6C3,
+0xF968=>0xE6C4,
+0xF969=>0xE6C5,
+0xF96A=>0xE6C6,
+0xF96B=>0xE6C7,
+0xF96C=>0xE6C8,
+0xF96D=>0xE6C9,
+0xF96E=>0xE6CA,
+0xF96F=>0xE6CB,
+0xF970=>0xE6CC,
+0xF971=>0xE6CD,
+0xF972=>0xE6CE,
+0xF973=>0xE6CF,
+0xF974=>0xE6D0,
+0xF975=>0xE6D1,
+0xF976=>0xE6D2,
+0xF977=>0xE6D3,
+0xF978=>0xE6D4,
+0xF979=>0xE6D5,
+0xF97A=>0xE6D6,
+0xF97B=>0xE6D7,
+0xF97C=>0xE6D8,
+0xF97D=>0xE6D9,
+0xF97E=>0xE6DA,
+0xF980=>0xE6DB,
+0xF981=>0xE6DC,
+0xF982=>0xE6DD,
+0xF983=>0xE6DE,
+0xF984=>0xE6DF,
+0xF985=>0xE6E0,
+0xF986=>0xE6E1,
+0xF987=>0xE6E2,
+0xF988=>0xE6E3,
+0xF989=>0xE6E4,
+0xF98A=>0xE6E5,
+0xF98B=>0xE6E6,
+0xF98C=>0xE6E7,
+0xF98D=>0xE6E8,
+0xF98E=>0xE6E9,
+0xF98F=>0xE6EA,
+0xF990=>0xE6EB,
+0xF991=>0xE6EC,
+0xF992=>0xE6ED,
+0xF993=>0xE6EE,
+0xF994=>0xE6EF,
+0xF995=>0xE6F0,
+0xF996=>0xE6F1,
+0xF997=>0xE6F2,
+0xF998=>0xE6F3,
+0xF999=>0xE6F4,
+0xF99A=>0xE6F5,
+0xF99B=>0xE6F6,
+0xF99C=>0xE6F7,
+0xF99D=>0xE6F8,
+0xF99E=>0xE6F9,
+0xF99F=>0xE6FA,
+0xF9A0=>0xE6FB,
+0xF9A1=>0xE6FC,
+0xF9A2=>0xE6FD,
+0xF9A3=>0xE6FE,
+0xF9A4=>0xE6FF,
+0xF9A5=>0xE700,
+0xF9A6=>0xE701,
+0xF9A7=>0xE702,
+0xF9A8=>0xE703,
+0xF9A9=>0xE704,
+0xF9AA=>0xE705,
+0xF9AB=>0xE706,
+0xF9AC=>0xE707,
+0xF9AD=>0xE708,
+0xF9AE=>0xE709,
+0xF9AF=>0xE70A,
+0xF9B0=>0xE70B,
+0xF9B1=>0xE70C,
+0xF9B2=>0xE70D,
+0xF9B3=>0xE70E,
+0xF9B4=>0xE70F,
+0xF9B5=>0xE710,
+0xF9B6=>0xE711,
+0xF9B7=>0xE712,
+0xF9B8=>0xE713,
+0xF9B9=>0xE714,
+0xF9BA=>0xE715,
+0xF9BB=>0xE716,
+0xF9BC=>0xE717,
+0xF9BD=>0xE718,
+0xF9BE=>0xE719,
+0xF9BF=>0xE71A,
+0xF9C0=>0xE71B,
+0xF9C1=>0xE71C,
+0xF9C2=>0xE71D,
+0xF9C3=>0xE71E,
+0xF9C4=>0xE71F,
+0xF9C5=>0xE720,
+0xF9C6=>0xE721,
+0xF9C7=>0xE722,
+0xF9C8=>0xE723,
+0xF9C9=>0xE724,
+0xF9CA=>0xE725,
+0xF9CB=>0xE726,
+0xF9CC=>0xE727,
+0xF9CD=>0xE728,
+0xF9CE=>0xE729,
+0xF9CF=>0xE72A,
+0xF9D0=>0xE72B,
+0xF9D1=>0xE72C,
+0xF9D2=>0xE72D,
+0xF9D3=>0xE72E,
+0xF9D4=>0xE72F,
+0xF9D5=>0xE730,
+0xF9D6=>0xE731,
+0xF9D7=>0xE732,
+0xF9D8=>0xE733,
+0xF9D9=>0xE734,
+0xF9DA=>0xE735,
+0xF9DB=>0xE736,
+0xF9DC=>0xE737,
+0xF9DD=>0xE738,
+0xF9DE=>0xE739,
+0xF9DF=>0xE73A,
+0xF9E0=>0xE73B,
+0xF9E1=>0xE73C,
+0xF9E2=>0xE73D,
+0xF9E3=>0xE73E,
+0xF9E4=>0xE73F,
+0xF9E5=>0xE740,
+0xF9E6=>0xE741,
+0xF9E7=>0xE742,
+0xF9E8=>0xE743,
+0xF9E9=>0xE744,
+0xF9EA=>0xE745,
+0xF9EB=>0xE746,
+0xF9EC=>0xE747,
+0xF9ED=>0xE748,
+0xF9EE=>0xE749,
+0xF9EF=>0xE74A,
+0xF9F0=>0xE74B,
+0xF9F1=>0xE74C,
+0xF9F2=>0xE74D,
+0xF9F3=>0xE74E,
+0xF9F4=>0xE74F,
+0xF9F5=>0xE750,
+0xF9F6=>0xE751,
+0xF9F7=>0xE752,
+0xF9F8=>0xE753,
+0xF9F9=>0xE754,
+0xF9FA=>0xE755,
+0xF9FB=>0xE756,
+0xF9FC=>0xE757,
+0xFA40=>0x2170,
+0xFA41=>0x2171,
+0xFA42=>0x2172,
+0xFA43=>0x2173,
+0xFA44=>0x2174,
+0xFA45=>0x2175,
+0xFA46=>0x2176,
+0xFA47=>0x2177,
+0xFA48=>0x2178,
+0xFA49=>0x2179,
+0xFA4A=>0x2160,
+0xFA4B=>0x2161,
+0xFA4C=>0x2162,
+0xFA4D=>0x2163,
+0xFA4E=>0x2164,
+0xFA4F=>0x2165,
+0xFA50=>0x2166,
+0xFA51=>0x2167,
+0xFA52=>0x2168,
+0xFA53=>0x2169,
+0xFA54=>0xFFE2,
+0xFA55=>0xFFE4,
+0xFA56=>0xFF07,
+0xFA57=>0xFF02,
+0xFA58=>0x3231,
+0xFA59=>0x2116,
+0xFA5A=>0x2121,
+0xFA5B=>0x2235,
+0xFA5C=>0x7E8A,
+0xFA5D=>0x891C,
+0xFA5E=>0x9348,
+0xFA5F=>0x9288,
+0xFA60=>0x84DC,
+0xFA61=>0x4FC9,
+0xFA62=>0x70BB,
+0xFA63=>0x6631,
+0xFA64=>0x68C8,
+0xFA65=>0x92F9,
+0xFA66=>0x66FB,
+0xFA67=>0x5F45,
+0xFA68=>0x4E28,
+0xFA69=>0x4EE1,
+0xFA6A=>0x4EFC,
+0xFA6B=>0x4F00,
+0xFA6C=>0x4F03,
+0xFA6D=>0x4F39,
+0xFA6E=>0x4F56,
+0xFA6F=>0x4F92,
+0xFA70=>0x4F8A,
+0xFA71=>0x4F9A,
+0xFA72=>0x4F94,
+0xFA73=>0x4FCD,
+0xFA74=>0x5040,
+0xFA75=>0x5022,
+0xFA76=>0x4FFF,
+0xFA77=>0x501E,
+0xFA78=>0x5046,
+0xFA79=>0x5070,
+0xFA7A=>0x5042,
+0xFA7B=>0x5094,
+0xFA7C=>0x50F4,
+0xFA7D=>0x50D8,
+0xFA7E=>0x514A,
+0xFA80=>0x5164,
+0xFA81=>0x519D,
+0xFA82=>0x51BE,
+0xFA83=>0x51EC,
+0xFA84=>0x5215,
+0xFA85=>0x529C,
+0xFA86=>0x52A6,
+0xFA87=>0x52C0,
+0xFA88=>0x52DB,
+0xFA89=>0x5300,
+0xFA8A=>0x5307,
+0xFA8B=>0x5324,
+0xFA8C=>0x5372,
+0xFA8D=>0x5393,
+0xFA8E=>0x53B2,
+0xFA8F=>0x53DD,
+0xFA90=>0xFA0E,
+0xFA91=>0x549C,
+0xFA92=>0x548A,
+0xFA93=>0x54A9,
+0xFA94=>0x54FF,
+0xFA95=>0x5586,
+0xFA96=>0x5759,
+0xFA97=>0x5765,
+0xFA98=>0x57AC,
+0xFA99=>0x57C8,
+0xFA9A=>0x57C7,
+0xFA9B=>0xFA0F,
+0xFA9C=>0xFA10,
+0xFA9D=>0x589E,
+0xFA9E=>0x58B2,
+0xFA9F=>0x590B,
+0xFAA0=>0x5953,
+0xFAA1=>0x595B,
+0xFAA2=>0x595D,
+0xFAA3=>0x5963,
+0xFAA4=>0x59A4,
+0xFAA5=>0x59BA,
+0xFAA6=>0x5B56,
+0xFAA7=>0x5BC0,
+0xFAA8=>0x752F,
+0xFAA9=>0x5BD8,
+0xFAAA=>0x5BEC,
+0xFAAB=>0x5C1E,
+0xFAAC=>0x5CA6,
+0xFAAD=>0x5CBA,
+0xFAAE=>0x5CF5,
+0xFAAF=>0x5D27,
+0xFAB0=>0x5D53,
+0xFAB1=>0xFA11,
+0xFAB2=>0x5D42,
+0xFAB3=>0x5D6D,
+0xFAB4=>0x5DB8,
+0xFAB5=>0x5DB9,
+0xFAB6=>0x5DD0,
+0xFAB7=>0x5F21,
+0xFAB8=>0x5F34,
+0xFAB9=>0x5F67,
+0xFABA=>0x5FB7,
+0xFABB=>0x5FDE,
+0xFABC=>0x605D,
+0xFABD=>0x6085,
+0xFABE=>0x608A,
+0xFABF=>0x60DE,
+0xFAC0=>0x60D5,
+0xFAC1=>0x6120,
+0xFAC2=>0x60F2,
+0xFAC3=>0x6111,
+0xFAC4=>0x6137,
+0xFAC5=>0x6130,
+0xFAC6=>0x6198,
+0xFAC7=>0x6213,
+0xFAC8=>0x62A6,
+0xFAC9=>0x63F5,
+0xFACA=>0x6460,
+0xFACB=>0x649D,
+0xFACC=>0x64CE,
+0xFACD=>0x654E,
+0xFACE=>0x6600,
+0xFACF=>0x6615,
+0xFAD0=>0x663B,
+0xFAD1=>0x6609,
+0xFAD2=>0x662E,
+0xFAD3=>0x661E,
+0xFAD4=>0x6624,
+0xFAD5=>0x6665,
+0xFAD6=>0x6657,
+0xFAD7=>0x6659,
+0xFAD8=>0xFA12,
+0xFAD9=>0x6673,
+0xFADA=>0x6699,
+0xFADB=>0x66A0,
+0xFADC=>0x66B2,
+0xFADD=>0x66BF,
+0xFADE=>0x66FA,
+0xFADF=>0x670E,
+0xFAE0=>0xF929,
+0xFAE1=>0x6766,
+0xFAE2=>0x67BB,
+0xFAE3=>0x6852,
+0xFAE4=>0x67C0,
+0xFAE5=>0x6801,
+0xFAE6=>0x6844,
+0xFAE7=>0x68CF,
+0xFAE8=>0xFA13,
+0xFAE9=>0x6968,
+0xFAEA=>0xFA14,
+0xFAEB=>0x6998,
+0xFAEC=>0x69E2,
+0xFAED=>0x6A30,
+0xFAEE=>0x6A6B,
+0xFAEF=>0x6A46,
+0xFAF0=>0x6A73,
+0xFAF1=>0x6A7E,
+0xFAF2=>0x6AE2,
+0xFAF3=>0x6AE4,
+0xFAF4=>0x6BD6,
+0xFAF5=>0x6C3F,
+0xFAF6=>0x6C5C,
+0xFAF7=>0x6C86,
+0xFAF8=>0x6C6F,
+0xFAF9=>0x6CDA,
+0xFAFA=>0x6D04,
+0xFAFB=>0x6D87,
+0xFAFC=>0x6D6F,
+0xFB40=>0x6D96,
+0xFB41=>0x6DAC,
+0xFB42=>0x6DCF,
+0xFB43=>0x6DF8,
+0xFB44=>0x6DF2,
+0xFB45=>0x6DFC,
+0xFB46=>0x6E39,
+0xFB47=>0x6E5C,
+0xFB48=>0x6E27,
+0xFB49=>0x6E3C,
+0xFB4A=>0x6EBF,
+0xFB4B=>0x6F88,
+0xFB4C=>0x6FB5,
+0xFB4D=>0x6FF5,
+0xFB4E=>0x7005,
+0xFB4F=>0x7007,
+0xFB50=>0x7028,
+0xFB51=>0x7085,
+0xFB52=>0x70AB,
+0xFB53=>0x710F,
+0xFB54=>0x7104,
+0xFB55=>0x715C,
+0xFB56=>0x7146,
+0xFB57=>0x7147,
+0xFB58=>0xFA15,
+0xFB59=>0x71C1,
+0xFB5A=>0x71FE,
+0xFB5B=>0x72B1,
+0xFB5C=>0x72BE,
+0xFB5D=>0x7324,
+0xFB5E=>0xFA16,
+0xFB5F=>0x7377,
+0xFB60=>0x73BD,
+0xFB61=>0x73C9,
+0xFB62=>0x73D6,
+0xFB63=>0x73E3,
+0xFB64=>0x73D2,
+0xFB65=>0x7407,
+0xFB66=>0x73F5,
+0xFB67=>0x7426,
+0xFB68=>0x742A,
+0xFB69=>0x7429,
+0xFB6A=>0x742E,
+0xFB6B=>0x7462,
+0xFB6C=>0x7489,
+0xFB6D=>0x749F,
+0xFB6E=>0x7501,
+0xFB6F=>0x756F,
+0xFB70=>0x7682,
+0xFB71=>0x769C,
+0xFB72=>0x769E,
+0xFB73=>0x769B,
+0xFB74=>0x76A6,
+0xFB75=>0xFA17,
+0xFB76=>0x7746,
+0xFB77=>0x52AF,
+0xFB78=>0x7821,
+0xFB79=>0x784E,
+0xFB7A=>0x7864,
+0xFB7B=>0x787A,
+0xFB7C=>0x7930,
+0xFB7D=>0xFA18,
+0xFB7E=>0xFA19,
+0xFB80=>0xFA1A,
+0xFB81=>0x7994,
+0xFB82=>0xFA1B,
+0xFB83=>0x799B,
+0xFB84=>0x7AD1,
+0xFB85=>0x7AE7,
+0xFB86=>0xFA1C,
+0xFB87=>0x7AEB,
+0xFB88=>0x7B9E,
+0xFB89=>0xFA1D,
+0xFB8A=>0x7D48,
+0xFB8B=>0x7D5C,
+0xFB8C=>0x7DB7,
+0xFB8D=>0x7DA0,
+0xFB8E=>0x7DD6,
+0xFB8F=>0x7E52,
+0xFB90=>0x7F47,
+0xFB91=>0x7FA1,
+0xFB92=>0xFA1E,
+0xFB93=>0x8301,
+0xFB94=>0x8362,
+0xFB95=>0x837F,
+0xFB96=>0x83C7,
+0xFB97=>0x83F6,
+0xFB98=>0x8448,
+0xFB99=>0x84B4,
+0xFB9A=>0x8553,
+0xFB9B=>0x8559,
+0xFB9C=>0x856B,
+0xFB9D=>0xFA1F,
+0xFB9E=>0x85B0,
+0xFB9F=>0xFA20,
+0xFBA0=>0xFA21,
+0xFBA1=>0x8807,
+0xFBA2=>0x88F5,
+0xFBA3=>0x8A12,
+0xFBA4=>0x8A37,
+0xFBA5=>0x8A79,
+0xFBA6=>0x8AA7,
+0xFBA7=>0x8ABE,
+0xFBA8=>0x8ADF,
+0xFBA9=>0xFA22,
+0xFBAA=>0x8AF6,
+0xFBAB=>0x8B53,
+0xFBAC=>0x8B7F,
+0xFBAD=>0x8CF0,
+0xFBAE=>0x8CF4,
+0xFBAF=>0x8D12,
+0xFBB0=>0x8D76,
+0xFBB1=>0xFA23,
+0xFBB2=>0x8ECF,
+0xFBB3=>0xFA24,
+0xFBB4=>0xFA25,
+0xFBB5=>0x9067,
+0xFBB6=>0x90DE,
+0xFBB7=>0xFA26,
+0xFBB8=>0x9115,
+0xFBB9=>0x9127,
+0xFBBA=>0x91DA,
+0xFBBB=>0x91D7,
+0xFBBC=>0x91DE,
+0xFBBD=>0x91ED,
+0xFBBE=>0x91EE,
+0xFBBF=>0x91E4,
+0xFBC0=>0x91E5,
+0xFBC1=>0x9206,
+0xFBC2=>0x9210,
+0xFBC3=>0x920A,
+0xFBC4=>0x923A,
+0xFBC5=>0x9240,
+0xFBC6=>0x923C,
+0xFBC7=>0x924E,
+0xFBC8=>0x9259,
+0xFBC9=>0x9251,
+0xFBCA=>0x9239,
+0xFBCB=>0x9267,
+0xFBCC=>0x92A7,
+0xFBCD=>0x9277,
+0xFBCE=>0x9278,
+0xFBCF=>0x92E7,
+0xFBD0=>0x92D7,
+0xFBD1=>0x92D9,
+0xFBD2=>0x92D0,
+0xFBD3=>0xFA27,
+0xFBD4=>0x92D5,
+0xFBD5=>0x92E0,
+0xFBD6=>0x92D3,
+0xFBD7=>0x9325,
+0xFBD8=>0x9321,
+0xFBD9=>0x92FB,
+0xFBDA=>0xFA28,
+0xFBDB=>0x931E,
+0xFBDC=>0x92FF,
+0xFBDD=>0x931D,
+0xFBDE=>0x9302,
+0xFBDF=>0x9370,
+0xFBE0=>0x9357,
+0xFBE1=>0x93A4,
+0xFBE2=>0x93C6,
+0xFBE3=>0x93DE,
+0xFBE4=>0x93F8,
+0xFBE5=>0x9431,
+0xFBE6=>0x9445,
+0xFBE7=>0x9448,
+0xFBE8=>0x9592,
+0xFBE9=>0xF9DC,
+0xFBEA=>0xFA29,
+0xFBEB=>0x969D,
+0xFBEC=>0x96AF,
+0xFBED=>0x9733,
+0xFBEE=>0x973B,
+0xFBEF=>0x9743,
+0xFBF0=>0x974D,
+0xFBF1=>0x974F,
+0xFBF2=>0x9751,
+0xFBF3=>0x9755,
+0xFBF4=>0x9857,
+0xFBF5=>0x9865,
+0xFBF6=>0xFA2A,
+0xFBF7=>0xFA2B,
+0xFBF8=>0x9927,
+0xFBF9=>0xFA2C,
+0xFBFA=>0x999E,
+0xFBFB=>0x9A4E,
+0xFBFC=>0x9AD9,
+0xFC40=>0x9ADC,
+0xFC41=>0x9B75,
+0xFC42=>0x9B72,
+0xFC43=>0x9B8F,
+0xFC44=>0x9BB1,
+0xFC45=>0x9BBB,
+0xFC46=>0x9C00,
+0xFC47=>0x9D70,
+0xFC48=>0x9D6B,
+0xFC49=>0xFA2D,
+0xFC4A=>0x9E19,
+0xFC4B=>0x9ED1
+);
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/mb_emulator/unitosjis.table b/utf8/nucleus/libs/mb_emulator/unitosjis.table
new file mode 100755 (executable)
index 0000000..43b765b
--- /dev/null
@@ -0,0 +1,9607 @@
+<?php
+$mbemu_internals['ucs2tosjis'] = array(
+0x3000=>0x8140,
+0x3001=>0x8141,
+0x3002=>0x8142,
+0xFF0C=>0x8143,
+0xFF0E=>0x8144,
+0x30FB=>0x8145,
+0xFF1A=>0x8146,
+0xFF1B=>0x8147,
+0xFF1F=>0x8148,
+0xFF01=>0x8149,
+0x309B=>0x814A,
+0x309C=>0x814B,
+0x00B4=>0x814C,
+0xFF40=>0x814D,
+0x00A8=>0x814E,
+0xFF3E=>0x814F,
+0xFFE3=>0x8150,
+0xFF3F=>0x8151,
+0x30FD=>0x8152,
+0x30FE=>0x8153,
+0x309D=>0x8154,
+0x309E=>0x8155,
+0x3003=>0x8156,
+0x4EDD=>0x8157,
+0x3005=>0x8158,
+0x3006=>0x8159,
+0x3007=>0x815A,
+0x30FC=>0x815B,
+0x2015=>0x815C,
+0x2010=>0x815D,
+0xFF0F=>0x815E,
+0xFF3C=>0x815F,
+0xFF5E=>0x8160,
+0x2225=>0x8161,
+0xFF5C=>0x8162,
+0x2026=>0x8163,
+0x2025=>0x8164,
+0x2018=>0x8165,
+0x2019=>0x8166,
+0x201C=>0x8167,
+0x201D=>0x8168,
+0xFF08=>0x8169,
+0xFF09=>0x816A,
+0x3014=>0x816B,
+0x3015=>0x816C,
+0xFF3B=>0x816D,
+0xFF3D=>0x816E,
+0xFF5B=>0x816F,
+0xFF5D=>0x8170,
+0x3008=>0x8171,
+0x3009=>0x8172,
+0x300A=>0x8173,
+0x300B=>0x8174,
+0x300C=>0x8175,
+0x300D=>0x8176,
+0x300E=>0x8177,
+0x300F=>0x8178,
+0x3010=>0x8179,
+0x3011=>0x817A,
+0xFF0B=>0x817B,
+0xFF0D=>0x817C,
+0x00B1=>0x817D,
+0x00D7=>0x817E,
+0x00F7=>0x8180,
+0xFF1D=>0x8181,
+0x2260=>0x8182,
+0xFF1C=>0x8183,
+0xFF1E=>0x8184,
+0x2266=>0x8185,
+0x2267=>0x8186,
+0x221E=>0x8187,
+0x2234=>0x8188,
+0x2642=>0x8189,
+0x2640=>0x818A,
+0x00B0=>0x818B,
+0x2032=>0x818C,
+0x2033=>0x818D,
+0x2103=>0x818E,
+0xFFE5=>0x818F,
+0xFF04=>0x8190,
+0xFFE0=>0x8191,
+0xFFE1=>0x8192,
+0xFF05=>0x8193,
+0xFF03=>0x8194,
+0xFF06=>0x8195,
+0xFF0A=>0x8196,
+0xFF20=>0x8197,
+0x00A7=>0x8198,
+0x2606=>0x8199,
+0x2605=>0x819A,
+0x25CB=>0x819B,
+0x25CF=>0x819C,
+0x25CE=>0x819D,
+0x25C7=>0x819E,
+0x25C6=>0x819F,
+0x25A1=>0x81A0,
+0x25A0=>0x81A1,
+0x25B3=>0x81A2,
+0x25B2=>0x81A3,
+0x25BD=>0x81A4,
+0x25BC=>0x81A5,
+0x203B=>0x81A6,
+0x3012=>0x81A7,
+0x2192=>0x81A8,
+0x2190=>0x81A9,
+0x2191=>0x81AA,
+0x2193=>0x81AB,
+0x3013=>0x81AC,
+0x2208=>0x81B8,
+0x220B=>0x81B9,
+0x2286=>0x81BA,
+0x2287=>0x81BB,
+0x2282=>0x81BC,
+0x2283=>0x81BD,
+0x222A=>0x81BE,
+0x2229=>0x81BF,
+0x2227=>0x81C8,
+0x2228=>0x81C9,
+0xFFE2=>0x81CA,
+0x21D2=>0x81CB,
+0x21D4=>0x81CC,
+0x2200=>0x81CD,
+0x2203=>0x81CE,
+0x2220=>0x81DA,
+0x22A5=>0x81DB,
+0x2312=>0x81DC,
+0x2202=>0x81DD,
+0x2207=>0x81DE,
+0x2261=>0x81DF,
+0x2252=>0x81E0,
+0x226A=>0x81E1,
+0x226B=>0x81E2,
+0x221A=>0x81E3,
+0x223D=>0x81E4,
+0x221D=>0x81E5,
+0x2235=>0x81E6,
+0x222B=>0x81E7,
+0x222C=>0x81E8,
+0x212B=>0x81F0,
+0x2030=>0x81F1,
+0x266F=>0x81F2,
+0x266D=>0x81F3,
+0x266A=>0x81F4,
+0x2020=>0x81F5,
+0x2021=>0x81F6,
+0x00B6=>0x81F7,
+0x25EF=>0x81FC,
+0xFF10=>0x824F,
+0xFF11=>0x8250,
+0xFF12=>0x8251,
+0xFF13=>0x8252,
+0xFF14=>0x8253,
+0xFF15=>0x8254,
+0xFF16=>0x8255,
+0xFF17=>0x8256,
+0xFF18=>0x8257,
+0xFF19=>0x8258,
+0xFF21=>0x8260,
+0xFF22=>0x8261,
+0xFF23=>0x8262,
+0xFF24=>0x8263,
+0xFF25=>0x8264,
+0xFF26=>0x8265,
+0xFF27=>0x8266,
+0xFF28=>0x8267,
+0xFF29=>0x8268,
+0xFF2A=>0x8269,
+0xFF2B=>0x826A,
+0xFF2C=>0x826B,
+0xFF2D=>0x826C,
+0xFF2E=>0x826D,
+0xFF2F=>0x826E,
+0xFF30=>0x826F,
+0xFF31=>0x8270,
+0xFF32=>0x8271,
+0xFF33=>0x8272,
+0xFF34=>0x8273,
+0xFF35=>0x8274,
+0xFF36=>0x8275,
+0xFF37=>0x8276,
+0xFF38=>0x8277,
+0xFF39=>0x8278,
+0xFF3A=>0x8279,
+0xFF41=>0x8281,
+0xFF42=>0x8282,
+0xFF43=>0x8283,
+0xFF44=>0x8284,
+0xFF45=>0x8285,
+0xFF46=>0x8286,
+0xFF47=>0x8287,
+0xFF48=>0x8288,
+0xFF49=>0x8289,
+0xFF4A=>0x828A,
+0xFF4B=>0x828B,
+0xFF4C=>0x828C,
+0xFF4D=>0x828D,
+0xFF4E=>0x828E,
+0xFF4F=>0x828F,
+0xFF50=>0x8290,
+0xFF51=>0x8291,
+0xFF52=>0x8292,
+0xFF53=>0x8293,
+0xFF54=>0x8294,
+0xFF55=>0x8295,
+0xFF56=>0x8296,
+0xFF57=>0x8297,
+0xFF58=>0x8298,
+0xFF59=>0x8299,
+0xFF5A=>0x829A,
+0x3041=>0x829F,
+0x3042=>0x82A0,
+0x3043=>0x82A1,
+0x3044=>0x82A2,
+0x3045=>0x82A3,
+0x3046=>0x82A4,
+0x3047=>0x82A5,
+0x3048=>0x82A6,
+0x3049=>0x82A7,
+0x304A=>0x82A8,
+0x304B=>0x82A9,
+0x304C=>0x82AA,
+0x304D=>0x82AB,
+0x304E=>0x82AC,
+0x304F=>0x82AD,
+0x3050=>0x82AE,
+0x3051=>0x82AF,
+0x3052=>0x82B0,
+0x3053=>0x82B1,
+0x3054=>0x82B2,
+0x3055=>0x82B3,
+0x3056=>0x82B4,
+0x3057=>0x82B5,
+0x3058=>0x82B6,
+0x3059=>0x82B7,
+0x305A=>0x82B8,
+0x305B=>0x82B9,
+0x305C=>0x82BA,
+0x305D=>0x82BB,
+0x305E=>0x82BC,
+0x305F=>0x82BD,
+0x3060=>0x82BE,
+0x3061=>0x82BF,
+0x3062=>0x82C0,
+0x3063=>0x82C1,
+0x3064=>0x82C2,
+0x3065=>0x82C3,
+0x3066=>0x82C4,
+0x3067=>0x82C5,
+0x3068=>0x82C6,
+0x3069=>0x82C7,
+0x306A=>0x82C8,
+0x306B=>0x82C9,
+0x306C=>0x82CA,
+0x306D=>0x82CB,
+0x306E=>0x82CC,
+0x306F=>0x82CD,
+0x3070=>0x82CE,
+0x3071=>0x82CF,
+0x3072=>0x82D0,
+0x3073=>0x82D1,
+0x3074=>0x82D2,
+0x3075=>0x82D3,
+0x3076=>0x82D4,
+0x3077=>0x82D5,
+0x3078=>0x82D6,
+0x3079=>0x82D7,
+0x307A=>0x82D8,
+0x307B=>0x82D9,
+0x307C=>0x82DA,
+0x307D=>0x82DB,
+0x307E=>0x82DC,
+0x307F=>0x82DD,
+0x3080=>0x82DE,
+0x3081=>0x82DF,
+0x3082=>0x82E0,
+0x3083=>0x82E1,
+0x3084=>0x82E2,
+0x3085=>0x82E3,
+0x3086=>0x82E4,
+0x3087=>0x82E5,
+0x3088=>0x82E6,
+0x3089=>0x82E7,
+0x308A=>0x82E8,
+0x308B=>0x82E9,
+0x308C=>0x82EA,
+0x308D=>0x82EB,
+0x308E=>0x82EC,
+0x308F=>0x82ED,
+0x3090=>0x82EE,
+0x3091=>0x82EF,
+0x3092=>0x82F0,
+0x3093=>0x82F1,
+0x30A1=>0x8340,
+0x30A2=>0x8341,
+0x30A3=>0x8342,
+0x30A4=>0x8343,
+0x30A5=>0x8344,
+0x30A6=>0x8345,
+0x30A7=>0x8346,
+0x30A8=>0x8347,
+0x30A9=>0x8348,
+0x30AA=>0x8349,
+0x30AB=>0x834A,
+0x30AC=>0x834B,
+0x30AD=>0x834C,
+0x30AE=>0x834D,
+0x30AF=>0x834E,
+0x30B0=>0x834F,
+0x30B1=>0x8350,
+0x30B2=>0x8351,
+0x30B3=>0x8352,
+0x30B4=>0x8353,
+0x30B5=>0x8354,
+0x30B6=>0x8355,
+0x30B7=>0x8356,
+0x30B8=>0x8357,
+0x30B9=>0x8358,
+0x30BA=>0x8359,
+0x30BB=>0x835A,
+0x30BC=>0x835B,
+0x30BD=>0x835C,
+0x30BE=>0x835D,
+0x30BF=>0x835E,
+0x30C0=>0x835F,
+0x30C1=>0x8360,
+0x30C2=>0x8361,
+0x30C3=>0x8362,
+0x30C4=>0x8363,
+0x30C5=>0x8364,
+0x30C6=>0x8365,
+0x30C7=>0x8366,
+0x30C8=>0x8367,
+0x30C9=>0x8368,
+0x30CA=>0x8369,
+0x30CB=>0x836A,
+0x30CC=>0x836B,
+0x30CD=>0x836C,
+0x30CE=>0x836D,
+0x30CF=>0x836E,
+0x30D0=>0x836F,
+0x30D1=>0x8370,
+0x30D2=>0x8371,
+0x30D3=>0x8372,
+0x30D4=>0x8373,
+0x30D5=>0x8374,
+0x30D6=>0x8375,
+0x30D7=>0x8376,
+0x30D8=>0x8377,
+0x30D9=>0x8378,
+0x30DA=>0x8379,
+0x30DB=>0x837A,
+0x30DC=>0x837B,
+0x30DD=>0x837C,
+0x30DE=>0x837D,
+0x30DF=>0x837E,
+0x30E0=>0x8380,
+0x30E1=>0x8381,
+0x30E2=>0x8382,
+0x30E3=>0x8383,
+0x30E4=>0x8384,
+0x30E5=>0x8385,
+0x30E6=>0x8386,
+0x30E7=>0x8387,
+0x30E8=>0x8388,
+0x30E9=>0x8389,
+0x30EA=>0x838A,
+0x30EB=>0x838B,
+0x30EC=>0x838C,
+0x30ED=>0x838D,
+0x30EE=>0x838E,
+0x30EF=>0x838F,
+0x30F0=>0x8390,
+0x30F1=>0x8391,
+0x30F2=>0x8392,
+0x30F3=>0x8393,
+0x30F4=>0x8394,
+0x30F5=>0x8395,
+0x30F6=>0x8396,
+0x0391=>0x839F,
+0x0392=>0x83A0,
+0x0393=>0x83A1,
+0x0394=>0x83A2,
+0x0395=>0x83A3,
+0x0396=>0x83A4,
+0x0397=>0x83A5,
+0x0398=>0x83A6,
+0x0399=>0x83A7,
+0x039A=>0x83A8,
+0x039B=>0x83A9,
+0x039C=>0x83AA,
+0x039D=>0x83AB,
+0x039E=>0x83AC,
+0x039F=>0x83AD,
+0x03A0=>0x83AE,
+0x03A1=>0x83AF,
+0x03A3=>0x83B0,
+0x03A4=>0x83B1,
+0x03A5=>0x83B2,
+0x03A6=>0x83B3,
+0x03A7=>0x83B4,
+0x03A8=>0x83B5,
+0x03A9=>0x83B6,
+0x03B1=>0x83BF,
+0x03B2=>0x83C0,
+0x03B3=>0x83C1,
+0x03B4=>0x83C2,
+0x03B5=>0x83C3,
+0x03B6=>0x83C4,
+0x03B7=>0x83C5,
+0x03B8=>0x83C6,
+0x03B9=>0x83C7,
+0x03BA=>0x83C8,
+0x03BB=>0x83C9,
+0x03BC=>0x83CA,
+0x03BD=>0x83CB,
+0x03BE=>0x83CC,
+0x03BF=>0x83CD,
+0x03C0=>0x83CE,
+0x03C1=>0x83CF,
+0x03C3=>0x83D0,
+0x03C4=>0x83D1,
+0x03C5=>0x83D2,
+0x03C6=>0x83D3,
+0x03C7=>0x83D4,
+0x03C8=>0x83D5,
+0x03C9=>0x83D6,
+0x0410=>0x8440,
+0x0411=>0x8441,
+0x0412=>0x8442,
+0x0413=>0x8443,
+0x0414=>0x8444,
+0x0415=>0x8445,
+0x0401=>0x8446,
+0x0416=>0x8447,
+0x0417=>0x8448,
+0x0418=>0x8449,
+0x0419=>0x844A,
+0x041A=>0x844B,
+0x041B=>0x844C,
+0x041C=>0x844D,
+0x041D=>0x844E,
+0x041E=>0x844F,
+0x041F=>0x8450,
+0x0420=>0x8451,
+0x0421=>0x8452,
+0x0422=>0x8453,
+0x0423=>0x8454,
+0x0424=>0x8455,
+0x0425=>0x8456,
+0x0426=>0x8457,
+0x0427=>0x8458,
+0x0428=>0x8459,
+0x0429=>0x845A,
+0x042A=>0x845B,
+0x042B=>0x845C,
+0x042C=>0x845D,
+0x042D=>0x845E,
+0x042E=>0x845F,
+0x042F=>0x8460,
+0x0430=>0x8470,
+0x0431=>0x8471,
+0x0432=>0x8472,
+0x0433=>0x8473,
+0x0434=>0x8474,
+0x0435=>0x8475,
+0x0451=>0x8476,
+0x0436=>0x8477,
+0x0437=>0x8478,
+0x0438=>0x8479,
+0x0439=>0x847A,
+0x043A=>0x847B,
+0x043B=>0x847C,
+0x043C=>0x847D,
+0x043D=>0x847E,
+0x043E=>0x8480,
+0x043F=>0x8481,
+0x0440=>0x8482,
+0x0441=>0x8483,
+0x0442=>0x8484,
+0x0443=>0x8485,
+0x0444=>0x8486,
+0x0445=>0x8487,
+0x0446=>0x8488,
+0x0447=>0x8489,
+0x0448=>0x848A,
+0x0449=>0x848B,
+0x044A=>0x848C,
+0x044B=>0x848D,
+0x044C=>0x848E,
+0x044D=>0x848F,
+0x044E=>0x8490,
+0x044F=>0x8491,
+0x2500=>0x849F,
+0x2502=>0x84A0,
+0x250C=>0x84A1,
+0x2510=>0x84A2,
+0x2518=>0x84A3,
+0x2514=>0x84A4,
+0x251C=>0x84A5,
+0x252C=>0x84A6,
+0x2524=>0x84A7,
+0x2534=>0x84A8,
+0x253C=>0x84A9,
+0x2501=>0x84AA,
+0x2503=>0x84AB,
+0x250F=>0x84AC,
+0x2513=>0x84AD,
+0x251B=>0x84AE,
+0x2517=>0x84AF,
+0x2523=>0x84B0,
+0x2533=>0x84B1,
+0x252B=>0x84B2,
+0x253B=>0x84B3,
+0x254B=>0x84B4,
+0x2520=>0x84B5,
+0x252F=>0x84B6,
+0x2528=>0x84B7,
+0x2537=>0x84B8,
+0x253F=>0x84B9,
+0x251D=>0x84BA,
+0x2530=>0x84BB,
+0x2525=>0x84BC,
+0x2538=>0x84BD,
+0x2542=>0x84BE,
+0x2460=>0x8740,
+0x2461=>0x8741,
+0x2462=>0x8742,
+0x2463=>0x8743,
+0x2464=>0x8744,
+0x2465=>0x8745,
+0x2466=>0x8746,
+0x2467=>0x8747,
+0x2468=>0x8748,
+0x2469=>0x8749,
+0x246A=>0x874A,
+0x246B=>0x874B,
+0x246C=>0x874C,
+0x246D=>0x874D,
+0x246E=>0x874E,
+0x246F=>0x874F,
+0x2470=>0x8750,
+0x2471=>0x8751,
+0x2472=>0x8752,
+0x2473=>0x8753,
+0x2160=>0x8754,
+0x2161=>0x8755,
+0x2162=>0x8756,
+0x2163=>0x8757,
+0x2164=>0x8758,
+0x2165=>0x8759,
+0x2166=>0x875A,
+0x2167=>0x875B,
+0x2168=>0x875C,
+0x2169=>0x875D,
+0x3349=>0x875F,
+0x3314=>0x8760,
+0x3322=>0x8761,
+0x334D=>0x8762,
+0x3318=>0x8763,
+0x3327=>0x8764,
+0x3303=>0x8765,
+0x3336=>0x8766,
+0x3351=>0x8767,
+0x3357=>0x8768,
+0x330D=>0x8769,
+0x3326=>0x876A,
+0x3323=>0x876B,
+0x332B=>0x876C,
+0x334A=>0x876D,
+0x333B=>0x876E,
+0x339C=>0x876F,
+0x339D=>0x8770,
+0x339E=>0x8771,
+0x338E=>0x8772,
+0x338F=>0x8773,
+0x33C4=>0x8774,
+0x33A1=>0x8775,
+0x337B=>0x877E,
+0x301D=>0x8780,
+0x301F=>0x8781,
+0x2116=>0x8782,
+0x33CD=>0x8783,
+0x2121=>0x8784,
+0x32A4=>0x8785,
+0x32A5=>0x8786,
+0x32A6=>0x8787,
+0x32A7=>0x8788,
+0x32A8=>0x8789,
+0x3231=>0x878A,
+0x3232=>0x878B,
+0x3239=>0x878C,
+0x337E=>0x878D,
+0x337D=>0x878E,
+0x337C=>0x878F,
+0x2252=>0x8790,
+0x2261=>0x8791,
+0x222B=>0x8792,
+0x222E=>0x8793,
+0x2211=>0x8794,
+0x221A=>0x8795,
+0x22A5=>0x8796,
+0x2220=>0x8797,
+0x221F=>0x8798,
+0x22BF=>0x8799,
+0x2235=>0x879A,
+0x2229=>0x879B,
+0x222A=>0x879C,
+0x4E9C=>0x889F,
+0x5516=>0x88A0,
+0x5A03=>0x88A1,
+0x963F=>0x88A2,
+0x54C0=>0x88A3,
+0x611B=>0x88A4,
+0x6328=>0x88A5,
+0x59F6=>0x88A6,
+0x9022=>0x88A7,
+0x8475=>0x88A8,
+0x831C=>0x88A9,
+0x7A50=>0x88AA,
+0x60AA=>0x88AB,
+0x63E1=>0x88AC,
+0x6E25=>0x88AD,
+0x65ED=>0x88AE,
+0x8466=>0x88AF,
+0x82A6=>0x88B0,
+0x9BF5=>0x88B1,
+0x6893=>0x88B2,
+0x5727=>0x88B3,
+0x65A1=>0x88B4,
+0x6271=>0x88B5,
+0x5B9B=>0x88B6,
+0x59D0=>0x88B7,
+0x867B=>0x88B8,
+0x98F4=>0x88B9,
+0x7D62=>0x88BA,
+0x7DBE=>0x88BB,
+0x9B8E=>0x88BC,
+0x6216=>0x88BD,
+0x7C9F=>0x88BE,
+0x88B7=>0x88BF,
+0x5B89=>0x88C0,
+0x5EB5=>0x88C1,
+0x6309=>0x88C2,
+0x6697=>0x88C3,
+0x6848=>0x88C4,
+0x95C7=>0x88C5,
+0x978D=>0x88C6,
+0x674F=>0x88C7,
+0x4EE5=>0x88C8,
+0x4F0A=>0x88C9,
+0x4F4D=>0x88CA,
+0x4F9D=>0x88CB,
+0x5049=>0x88CC,
+0x56F2=>0x88CD,
+0x5937=>0x88CE,
+0x59D4=>0x88CF,
+0x5A01=>0x88D0,
+0x5C09=>0x88D1,
+0x60DF=>0x88D2,
+0x610F=>0x88D3,
+0x6170=>0x88D4,
+0x6613=>0x88D5,
+0x6905=>0x88D6,
+0x70BA=>0x88D7,
+0x754F=>0x88D8,
+0x7570=>0x88D9,
+0x79FB=>0x88DA,
+0x7DAD=>0x88DB,
+0x7DEF=>0x88DC,
+0x80C3=>0x88DD,
+0x840E=>0x88DE,
+0x8863=>0x88DF,
+0x8B02=>0x88E0,
+0x9055=>0x88E1,
+0x907A=>0x88E2,
+0x533B=>0x88E3,
+0x4E95=>0x88E4,
+0x4EA5=>0x88E5,
+0x57DF=>0x88E6,
+0x80B2=>0x88E7,
+0x90C1=>0x88E8,
+0x78EF=>0x88E9,
+0x4E00=>0x88EA,
+0x58F1=>0x88EB,
+0x6EA2=>0x88EC,
+0x9038=>0x88ED,
+0x7A32=>0x88EE,
+0x8328=>0x88EF,
+0x828B=>0x88F0,
+0x9C2F=>0x88F1,
+0x5141=>0x88F2,
+0x5370=>0x88F3,
+0x54BD=>0x88F4,
+0x54E1=>0x88F5,
+0x56E0=>0x88F6,
+0x59FB=>0x88F7,
+0x5F15=>0x88F8,
+0x98F2=>0x88F9,
+0x6DEB=>0x88FA,
+0x80E4=>0x88FB,
+0x852D=>0x88FC,
+0x9662=>0x8940,
+0x9670=>0x8941,
+0x96A0=>0x8942,
+0x97FB=>0x8943,
+0x540B=>0x8944,
+0x53F3=>0x8945,
+0x5B87=>0x8946,
+0x70CF=>0x8947,
+0x7FBD=>0x8948,
+0x8FC2=>0x8949,
+0x96E8=>0x894A,
+0x536F=>0x894B,
+0x9D5C=>0x894C,
+0x7ABA=>0x894D,
+0x4E11=>0x894E,
+0x7893=>0x894F,
+0x81FC=>0x8950,
+0x6E26=>0x8951,
+0x5618=>0x8952,
+0x5504=>0x8953,
+0x6B1D=>0x8954,
+0x851A=>0x8955,
+0x9C3B=>0x8956,
+0x59E5=>0x8957,
+0x53A9=>0x8958,
+0x6D66=>0x8959,
+0x74DC=>0x895A,
+0x958F=>0x895B,
+0x5642=>0x895C,
+0x4E91=>0x895D,
+0x904B=>0x895E,
+0x96F2=>0x895F,
+0x834F=>0x8960,
+0x990C=>0x8961,
+0x53E1=>0x8962,
+0x55B6=>0x8963,
+0x5B30=>0x8964,
+0x5F71=>0x8965,
+0x6620=>0x8966,
+0x66F3=>0x8967,
+0x6804=>0x8968,
+0x6C38=>0x8969,
+0x6CF3=>0x896A,
+0x6D29=>0x896B,
+0x745B=>0x896C,
+0x76C8=>0x896D,
+0x7A4E=>0x896E,
+0x9834=>0x896F,
+0x82F1=>0x8970,
+0x885B=>0x8971,
+0x8A60=>0x8972,
+0x92ED=>0x8973,
+0x6DB2=>0x8974,
+0x75AB=>0x8975,
+0x76CA=>0x8976,
+0x99C5=>0x8977,
+0x60A6=>0x8978,
+0x8B01=>0x8979,
+0x8D8A=>0x897A,
+0x95B2=>0x897B,
+0x698E=>0x897C,
+0x53AD=>0x897D,
+0x5186=>0x897E,
+0x5712=>0x8980,
+0x5830=>0x8981,
+0x5944=>0x8982,
+0x5BB4=>0x8983,
+0x5EF6=>0x8984,
+0x6028=>0x8985,
+0x63A9=>0x8986,
+0x63F4=>0x8987,
+0x6CBF=>0x8988,
+0x6F14=>0x8989,
+0x708E=>0x898A,
+0x7114=>0x898B,
+0x7159=>0x898C,
+0x71D5=>0x898D,
+0x733F=>0x898E,
+0x7E01=>0x898F,
+0x8276=>0x8990,
+0x82D1=>0x8991,
+0x8597=>0x8992,
+0x9060=>0x8993,
+0x925B=>0x8994,
+0x9D1B=>0x8995,
+0x5869=>0x8996,
+0x65BC=>0x8997,
+0x6C5A=>0x8998,
+0x7525=>0x8999,
+0x51F9=>0x899A,
+0x592E=>0x899B,
+0x5965=>0x899C,
+0x5F80=>0x899D,
+0x5FDC=>0x899E,
+0x62BC=>0x899F,
+0x65FA=>0x89A0,
+0x6A2A=>0x89A1,
+0x6B27=>0x89A2,
+0x6BB4=>0x89A3,
+0x738B=>0x89A4,
+0x7FC1=>0x89A5,
+0x8956=>0x89A6,
+0x9D2C=>0x89A7,
+0x9D0E=>0x89A8,
+0x9EC4=>0x89A9,
+0x5CA1=>0x89AA,
+0x6C96=>0x89AB,
+0x837B=>0x89AC,
+0x5104=>0x89AD,
+0x5C4B=>0x89AE,
+0x61B6=>0x89AF,
+0x81C6=>0x89B0,
+0x6876=>0x89B1,
+0x7261=>0x89B2,
+0x4E59=>0x89B3,
+0x4FFA=>0x89B4,
+0x5378=>0x89B5,
+0x6069=>0x89B6,
+0x6E29=>0x89B7,
+0x7A4F=>0x89B8,
+0x97F3=>0x89B9,
+0x4E0B=>0x89BA,
+0x5316=>0x89BB,
+0x4EEE=>0x89BC,
+0x4F55=>0x89BD,
+0x4F3D=>0x89BE,
+0x4FA1=>0x89BF,
+0x4F73=>0x89C0,
+0x52A0=>0x89C1,
+0x53EF=>0x89C2,
+0x5609=>0x89C3,
+0x590F=>0x89C4,
+0x5AC1=>0x89C5,
+0x5BB6=>0x89C6,
+0x5BE1=>0x89C7,
+0x79D1=>0x89C8,
+0x6687=>0x89C9,
+0x679C=>0x89CA,
+0x67B6=>0x89CB,
+0x6B4C=>0x89CC,
+0x6CB3=>0x89CD,
+0x706B=>0x89CE,
+0x73C2=>0x89CF,
+0x798D=>0x89D0,
+0x79BE=>0x89D1,
+0x7A3C=>0x89D2,
+0x7B87=>0x89D3,
+0x82B1=>0x89D4,
+0x82DB=>0x89D5,
+0x8304=>0x89D6,
+0x8377=>0x89D7,
+0x83EF=>0x89D8,
+0x83D3=>0x89D9,
+0x8766=>0x89DA,
+0x8AB2=>0x89DB,
+0x5629=>0x89DC,
+0x8CA8=>0x89DD,
+0x8FE6=>0x89DE,
+0x904E=>0x89DF,
+0x971E=>0x89E0,
+0x868A=>0x89E1,
+0x4FC4=>0x89E2,
+0x5CE8=>0x89E3,
+0x6211=>0x89E4,
+0x7259=>0x89E5,
+0x753B=>0x89E6,
+0x81E5=>0x89E7,
+0x82BD=>0x89E8,
+0x86FE=>0x89E9,
+0x8CC0=>0x89EA,
+0x96C5=>0x89EB,
+0x9913=>0x89EC,
+0x99D5=>0x89ED,
+0x4ECB=>0x89EE,
+0x4F1A=>0x89EF,
+0x89E3=>0x89F0,
+0x56DE=>0x89F1,
+0x584A=>0x89F2,
+0x58CA=>0x89F3,
+0x5EFB=>0x89F4,
+0x5FEB=>0x89F5,
+0x602A=>0x89F6,
+0x6094=>0x89F7,
+0x6062=>0x89F8,
+0x61D0=>0x89F9,
+0x6212=>0x89FA,
+0x62D0=>0x89FB,
+0x6539=>0x89FC,
+0x9B41=>0x8A40,
+0x6666=>0x8A41,
+0x68B0=>0x8A42,
+0x6D77=>0x8A43,
+0x7070=>0x8A44,
+0x754C=>0x8A45,
+0x7686=>0x8A46,
+0x7D75=>0x8A47,
+0x82A5=>0x8A48,
+0x87F9=>0x8A49,
+0x958B=>0x8A4A,
+0x968E=>0x8A4B,
+0x8C9D=>0x8A4C,
+0x51F1=>0x8A4D,
+0x52BE=>0x8A4E,
+0x5916=>0x8A4F,
+0x54B3=>0x8A50,
+0x5BB3=>0x8A51,
+0x5D16=>0x8A52,
+0x6168=>0x8A53,
+0x6982=>0x8A54,
+0x6DAF=>0x8A55,
+0x788D=>0x8A56,
+0x84CB=>0x8A57,
+0x8857=>0x8A58,
+0x8A72=>0x8A59,
+0x93A7=>0x8A5A,
+0x9AB8=>0x8A5B,
+0x6D6C=>0x8A5C,
+0x99A8=>0x8A5D,
+0x86D9=>0x8A5E,
+0x57A3=>0x8A5F,
+0x67FF=>0x8A60,
+0x86CE=>0x8A61,
+0x920E=>0x8A62,
+0x5283=>0x8A63,
+0x5687=>0x8A64,
+0x5404=>0x8A65,
+0x5ED3=>0x8A66,
+0x62E1=>0x8A67,
+0x64B9=>0x8A68,
+0x683C=>0x8A69,
+0x6838=>0x8A6A,
+0x6BBB=>0x8A6B,
+0x7372=>0x8A6C,
+0x78BA=>0x8A6D,
+0x7A6B=>0x8A6E,
+0x899A=>0x8A6F,
+0x89D2=>0x8A70,
+0x8D6B=>0x8A71,
+0x8F03=>0x8A72,
+0x90ED=>0x8A73,
+0x95A3=>0x8A74,
+0x9694=>0x8A75,
+0x9769=>0x8A76,
+0x5B66=>0x8A77,
+0x5CB3=>0x8A78,
+0x697D=>0x8A79,
+0x984D=>0x8A7A,
+0x984E=>0x8A7B,
+0x639B=>0x8A7C,
+0x7B20=>0x8A7D,
+0x6A2B=>0x8A7E,
+0x6A7F=>0x8A80,
+0x68B6=>0x8A81,
+0x9C0D=>0x8A82,
+0x6F5F=>0x8A83,
+0x5272=>0x8A84,
+0x559D=>0x8A85,
+0x6070=>0x8A86,
+0x62EC=>0x8A87,
+0x6D3B=>0x8A88,
+0x6E07=>0x8A89,
+0x6ED1=>0x8A8A,
+0x845B=>0x8A8B,
+0x8910=>0x8A8C,
+0x8F44=>0x8A8D,
+0x4E14=>0x8A8E,
+0x9C39=>0x8A8F,
+0x53F6=>0x8A90,
+0x691B=>0x8A91,
+0x6A3A=>0x8A92,
+0x9784=>0x8A93,
+0x682A=>0x8A94,
+0x515C=>0x8A95,
+0x7AC3=>0x8A96,
+0x84B2=>0x8A97,
+0x91DC=>0x8A98,
+0x938C=>0x8A99,
+0x565B=>0x8A9A,
+0x9D28=>0x8A9B,
+0x6822=>0x8A9C,
+0x8305=>0x8A9D,
+0x8431=>0x8A9E,
+0x7CA5=>0x8A9F,
+0x5208=>0x8AA0,
+0x82C5=>0x8AA1,
+0x74E6=>0x8AA2,
+0x4E7E=>0x8AA3,
+0x4F83=>0x8AA4,
+0x51A0=>0x8AA5,
+0x5BD2=>0x8AA6,
+0x520A=>0x8AA7,
+0x52D8=>0x8AA8,
+0x52E7=>0x8AA9,
+0x5DFB=>0x8AAA,
+0x559A=>0x8AAB,
+0x582A=>0x8AAC,
+0x59E6=>0x8AAD,
+0x5B8C=>0x8AAE,
+0x5B98=>0x8AAF,
+0x5BDB=>0x8AB0,
+0x5E72=>0x8AB1,
+0x5E79=>0x8AB2,
+0x60A3=>0x8AB3,
+0x611F=>0x8AB4,
+0x6163=>0x8AB5,
+0x61BE=>0x8AB6,
+0x63DB=>0x8AB7,
+0x6562=>0x8AB8,
+0x67D1=>0x8AB9,
+0x6853=>0x8ABA,
+0x68FA=>0x8ABB,
+0x6B3E=>0x8ABC,
+0x6B53=>0x8ABD,
+0x6C57=>0x8ABE,
+0x6F22=>0x8ABF,
+0x6F97=>0x8AC0,
+0x6F45=>0x8AC1,
+0x74B0=>0x8AC2,
+0x7518=>0x8AC3,
+0x76E3=>0x8AC4,
+0x770B=>0x8AC5,
+0x7AFF=>0x8AC6,
+0x7BA1=>0x8AC7,
+0x7C21=>0x8AC8,
+0x7DE9=>0x8AC9,
+0x7F36=>0x8ACA,
+0x7FF0=>0x8ACB,
+0x809D=>0x8ACC,
+0x8266=>0x8ACD,
+0x839E=>0x8ACE,
+0x89B3=>0x8ACF,
+0x8ACC=>0x8AD0,
+0x8CAB=>0x8AD1,
+0x9084=>0x8AD2,
+0x9451=>0x8AD3,
+0x9593=>0x8AD4,
+0x9591=>0x8AD5,
+0x95A2=>0x8AD6,
+0x9665=>0x8AD7,
+0x97D3=>0x8AD8,
+0x9928=>0x8AD9,
+0x8218=>0x8ADA,
+0x4E38=>0x8ADB,
+0x542B=>0x8ADC,
+0x5CB8=>0x8ADD,
+0x5DCC=>0x8ADE,
+0x73A9=>0x8ADF,
+0x764C=>0x8AE0,
+0x773C=>0x8AE1,
+0x5CA9=>0x8AE2,
+0x7FEB=>0x8AE3,
+0x8D0B=>0x8AE4,
+0x96C1=>0x8AE5,
+0x9811=>0x8AE6,
+0x9854=>0x8AE7,
+0x9858=>0x8AE8,
+0x4F01=>0x8AE9,
+0x4F0E=>0x8AEA,
+0x5371=>0x8AEB,
+0x559C=>0x8AEC,
+0x5668=>0x8AED,
+0x57FA=>0x8AEE,
+0x5947=>0x8AEF,
+0x5B09=>0x8AF0,
+0x5BC4=>0x8AF1,
+0x5C90=>0x8AF2,
+0x5E0C=>0x8AF3,
+0x5E7E=>0x8AF4,
+0x5FCC=>0x8AF5,
+0x63EE=>0x8AF6,
+0x673A=>0x8AF7,
+0x65D7=>0x8AF8,
+0x65E2=>0x8AF9,
+0x671F=>0x8AFA,
+0x68CB=>0x8AFB,
+0x68C4=>0x8AFC,
+0x6A5F=>0x8B40,
+0x5E30=>0x8B41,
+0x6BC5=>0x8B42,
+0x6C17=>0x8B43,
+0x6C7D=>0x8B44,
+0x757F=>0x8B45,
+0x7948=>0x8B46,
+0x5B63=>0x8B47,
+0x7A00=>0x8B48,
+0x7D00=>0x8B49,
+0x5FBD=>0x8B4A,
+0x898F=>0x8B4B,
+0x8A18=>0x8B4C,
+0x8CB4=>0x8B4D,
+0x8D77=>0x8B4E,
+0x8ECC=>0x8B4F,
+0x8F1D=>0x8B50,
+0x98E2=>0x8B51,
+0x9A0E=>0x8B52,
+0x9B3C=>0x8B53,
+0x4E80=>0x8B54,
+0x507D=>0x8B55,
+0x5100=>0x8B56,
+0x5993=>0x8B57,
+0x5B9C=>0x8B58,
+0x622F=>0x8B59,
+0x6280=>0x8B5A,
+0x64EC=>0x8B5B,
+0x6B3A=>0x8B5C,
+0x72A0=>0x8B5D,
+0x7591=>0x8B5E,
+0x7947=>0x8B5F,
+0x7FA9=>0x8B60,
+0x87FB=>0x8B61,
+0x8ABC=>0x8B62,
+0x8B70=>0x8B63,
+0x63AC=>0x8B64,
+0x83CA=>0x8B65,
+0x97A0=>0x8B66,
+0x5409=>0x8B67,
+0x5403=>0x8B68,
+0x55AB=>0x8B69,
+0x6854=>0x8B6A,
+0x6A58=>0x8B6B,
+0x8A70=>0x8B6C,
+0x7827=>0x8B6D,
+0x6775=>0x8B6E,
+0x9ECD=>0x8B6F,
+0x5374=>0x8B70,
+0x5BA2=>0x8B71,
+0x811A=>0x8B72,
+0x8650=>0x8B73,
+0x9006=>0x8B74,
+0x4E18=>0x8B75,
+0x4E45=>0x8B76,
+0x4EC7=>0x8B77,
+0x4F11=>0x8B78,
+0x53CA=>0x8B79,
+0x5438=>0x8B7A,
+0x5BAE=>0x8B7B,
+0x5F13=>0x8B7C,
+0x6025=>0x8B7D,
+0x6551=>0x8B7E,
+0x673D=>0x8B80,
+0x6C42=>0x8B81,
+0x6C72=>0x8B82,
+0x6CE3=>0x8B83,
+0x7078=>0x8B84,
+0x7403=>0x8B85,
+0x7A76=>0x8B86,
+0x7AAE=>0x8B87,
+0x7B08=>0x8B88,
+0x7D1A=>0x8B89,
+0x7CFE=>0x8B8A,
+0x7D66=>0x8B8B,
+0x65E7=>0x8B8C,
+0x725B=>0x8B8D,
+0x53BB=>0x8B8E,
+0x5C45=>0x8B8F,
+0x5DE8=>0x8B90,
+0x62D2=>0x8B91,
+0x62E0=>0x8B92,
+0x6319=>0x8B93,
+0x6E20=>0x8B94,
+0x865A=>0x8B95,
+0x8A31=>0x8B96,
+0x8DDD=>0x8B97,
+0x92F8=>0x8B98,
+0x6F01=>0x8B99,
+0x79A6=>0x8B9A,
+0x9B5A=>0x8B9B,
+0x4EA8=>0x8B9C,
+0x4EAB=>0x8B9D,
+0x4EAC=>0x8B9E,
+0x4F9B=>0x8B9F,
+0x4FA0=>0x8BA0,
+0x50D1=>0x8BA1,
+0x5147=>0x8BA2,
+0x7AF6=>0x8BA3,
+0x5171=>0x8BA4,
+0x51F6=>0x8BA5,
+0x5354=>0x8BA6,
+0x5321=>0x8BA7,
+0x537F=>0x8BA8,
+0x53EB=>0x8BA9,
+0x55AC=>0x8BAA,
+0x5883=>0x8BAB,
+0x5CE1=>0x8BAC,
+0x5F37=>0x8BAD,
+0x5F4A=>0x8BAE,
+0x602F=>0x8BAF,
+0x6050=>0x8BB0,
+0x606D=>0x8BB1,
+0x631F=>0x8BB2,
+0x6559=>0x8BB3,
+0x6A4B=>0x8BB4,
+0x6CC1=>0x8BB5,
+0x72C2=>0x8BB6,
+0x72ED=>0x8BB7,
+0x77EF=>0x8BB8,
+0x80F8=>0x8BB9,
+0x8105=>0x8BBA,
+0x8208=>0x8BBB,
+0x854E=>0x8BBC,
+0x90F7=>0x8BBD,
+0x93E1=>0x8BBE,
+0x97FF=>0x8BBF,
+0x9957=>0x8BC0,
+0x9A5A=>0x8BC1,
+0x4EF0=>0x8BC2,
+0x51DD=>0x8BC3,
+0x5C2D=>0x8BC4,
+0x6681=>0x8BC5,
+0x696D=>0x8BC6,
+0x5C40=>0x8BC7,
+0x66F2=>0x8BC8,
+0x6975=>0x8BC9,
+0x7389=>0x8BCA,
+0x6850=>0x8BCB,
+0x7C81=>0x8BCC,
+0x50C5=>0x8BCD,
+0x52E4=>0x8BCE,
+0x5747=>0x8BCF,
+0x5DFE=>0x8BD0,
+0x9326=>0x8BD1,
+0x65A4=>0x8BD2,
+0x6B23=>0x8BD3,
+0x6B3D=>0x8BD4,
+0x7434=>0x8BD5,
+0x7981=>0x8BD6,
+0x79BD=>0x8BD7,
+0x7B4B=>0x8BD8,
+0x7DCA=>0x8BD9,
+0x82B9=>0x8BDA,
+0x83CC=>0x8BDB,
+0x887F=>0x8BDC,
+0x895F=>0x8BDD,
+0x8B39=>0x8BDE,
+0x8FD1=>0x8BDF,
+0x91D1=>0x8BE0,
+0x541F=>0x8BE1,
+0x9280=>0x8BE2,
+0x4E5D=>0x8BE3,
+0x5036=>0x8BE4,
+0x53E5=>0x8BE5,
+0x533A=>0x8BE6,
+0x72D7=>0x8BE7,
+0x7396=>0x8BE8,
+0x77E9=>0x8BE9,
+0x82E6=>0x8BEA,
+0x8EAF=>0x8BEB,
+0x99C6=>0x8BEC,
+0x99C8=>0x8BED,
+0x99D2=>0x8BEE,
+0x5177=>0x8BEF,
+0x611A=>0x8BF0,
+0x865E=>0x8BF1,
+0x55B0=>0x8BF2,
+0x7A7A=>0x8BF3,
+0x5076=>0x8BF4,
+0x5BD3=>0x8BF5,
+0x9047=>0x8BF6,
+0x9685=>0x8BF7,
+0x4E32=>0x8BF8,
+0x6ADB=>0x8BF9,
+0x91E7=>0x8BFA,
+0x5C51=>0x8BFB,
+0x5C48=>0x8BFC,
+0x6398=>0x8C40,
+0x7A9F=>0x8C41,
+0x6C93=>0x8C42,
+0x9774=>0x8C43,
+0x8F61=>0x8C44,
+0x7AAA=>0x8C45,
+0x718A=>0x8C46,
+0x9688=>0x8C47,
+0x7C82=>0x8C48,
+0x6817=>0x8C49,
+0x7E70=>0x8C4A,
+0x6851=>0x8C4B,
+0x936C=>0x8C4C,
+0x52F2=>0x8C4D,
+0x541B=>0x8C4E,
+0x85AB=>0x8C4F,
+0x8A13=>0x8C50,
+0x7FA4=>0x8C51,
+0x8ECD=>0x8C52,
+0x90E1=>0x8C53,
+0x5366=>0x8C54,
+0x8888=>0x8C55,
+0x7941=>0x8C56,
+0x4FC2=>0x8C57,
+0x50BE=>0x8C58,
+0x5211=>0x8C59,
+0x5144=>0x8C5A,
+0x5553=>0x8C5B,
+0x572D=>0x8C5C,
+0x73EA=>0x8C5D,
+0x578B=>0x8C5E,
+0x5951=>0x8C5F,
+0x5F62=>0x8C60,
+0x5F84=>0x8C61,
+0x6075=>0x8C62,
+0x6176=>0x8C63,
+0x6167=>0x8C64,
+0x61A9=>0x8C65,
+0x63B2=>0x8C66,
+0x643A=>0x8C67,
+0x656C=>0x8C68,
+0x666F=>0x8C69,
+0x6842=>0x8C6A,
+0x6E13=>0x8C6B,
+0x7566=>0x8C6C,
+0x7A3D=>0x8C6D,
+0x7CFB=>0x8C6E,
+0x7D4C=>0x8C6F,
+0x7D99=>0x8C70,
+0x7E4B=>0x8C71,
+0x7F6B=>0x8C72,
+0x830E=>0x8C73,
+0x834A=>0x8C74,
+0x86CD=>0x8C75,
+0x8A08=>0x8C76,
+0x8A63=>0x8C77,
+0x8B66=>0x8C78,
+0x8EFD=>0x8C79,
+0x981A=>0x8C7A,
+0x9D8F=>0x8C7B,
+0x82B8=>0x8C7C,
+0x8FCE=>0x8C7D,
+0x9BE8=>0x8C7E,
+0x5287=>0x8C80,
+0x621F=>0x8C81,
+0x6483=>0x8C82,
+0x6FC0=>0x8C83,
+0x9699=>0x8C84,
+0x6841=>0x8C85,
+0x5091=>0x8C86,
+0x6B20=>0x8C87,
+0x6C7A=>0x8C88,
+0x6F54=>0x8C89,
+0x7A74=>0x8C8A,
+0x7D50=>0x8C8B,
+0x8840=>0x8C8C,
+0x8A23=>0x8C8D,
+0x6708=>0x8C8E,
+0x4EF6=>0x8C8F,
+0x5039=>0x8C90,
+0x5026=>0x8C91,
+0x5065=>0x8C92,
+0x517C=>0x8C93,
+0x5238=>0x8C94,
+0x5263=>0x8C95,
+0x55A7=>0x8C96,
+0x570F=>0x8C97,
+0x5805=>0x8C98,
+0x5ACC=>0x8C99,
+0x5EFA=>0x8C9A,
+0x61B2=>0x8C9B,
+0x61F8=>0x8C9C,
+0x62F3=>0x8C9D,
+0x6372=>0x8C9E,
+0x691C=>0x8C9F,
+0x6A29=>0x8CA0,
+0x727D=>0x8CA1,
+0x72AC=>0x8CA2,
+0x732E=>0x8CA3,
+0x7814=>0x8CA4,
+0x786F=>0x8CA5,
+0x7D79=>0x8CA6,
+0x770C=>0x8CA7,
+0x80A9=>0x8CA8,
+0x898B=>0x8CA9,
+0x8B19=>0x8CAA,
+0x8CE2=>0x8CAB,
+0x8ED2=>0x8CAC,
+0x9063=>0x8CAD,
+0x9375=>0x8CAE,
+0x967A=>0x8CAF,
+0x9855=>0x8CB0,
+0x9A13=>0x8CB1,
+0x9E78=>0x8CB2,
+0x5143=>0x8CB3,
+0x539F=>0x8CB4,
+0x53B3=>0x8CB5,
+0x5E7B=>0x8CB6,
+0x5F26=>0x8CB7,
+0x6E1B=>0x8CB8,
+0x6E90=>0x8CB9,
+0x7384=>0x8CBA,
+0x73FE=>0x8CBB,
+0x7D43=>0x8CBC,
+0x8237=>0x8CBD,
+0x8A00=>0x8CBE,
+0x8AFA=>0x8CBF,
+0x9650=>0x8CC0,
+0x4E4E=>0x8CC1,
+0x500B=>0x8CC2,
+0x53E4=>0x8CC3,
+0x547C=>0x8CC4,
+0x56FA=>0x8CC5,
+0x59D1=>0x8CC6,
+0x5B64=>0x8CC7,
+0x5DF1=>0x8CC8,
+0x5EAB=>0x8CC9,
+0x5F27=>0x8CCA,
+0x6238=>0x8CCB,
+0x6545=>0x8CCC,
+0x67AF=>0x8CCD,
+0x6E56=>0x8CCE,
+0x72D0=>0x8CCF,
+0x7CCA=>0x8CD0,
+0x88B4=>0x8CD1,
+0x80A1=>0x8CD2,
+0x80E1=>0x8CD3,
+0x83F0=>0x8CD4,
+0x864E=>0x8CD5,
+0x8A87=>0x8CD6,
+0x8DE8=>0x8CD7,
+0x9237=>0x8CD8,
+0x96C7=>0x8CD9,
+0x9867=>0x8CDA,
+0x9F13=>0x8CDB,
+0x4E94=>0x8CDC,
+0x4E92=>0x8CDD,
+0x4F0D=>0x8CDE,
+0x5348=>0x8CDF,
+0x5449=>0x8CE0,
+0x543E=>0x8CE1,
+0x5A2F=>0x8CE2,
+0x5F8C=>0x8CE3,
+0x5FA1=>0x8CE4,
+0x609F=>0x8CE5,
+0x68A7=>0x8CE6,
+0x6A8E=>0x8CE7,
+0x745A=>0x8CE8,
+0x7881=>0x8CE9,
+0x8A9E=>0x8CEA,
+0x8AA4=>0x8CEB,
+0x8B77=>0x8CEC,
+0x9190=>0x8CED,
+0x4E5E=>0x8CEE,
+0x9BC9=>0x8CEF,
+0x4EA4=>0x8CF0,
+0x4F7C=>0x8CF1,
+0x4FAF=>0x8CF2,
+0x5019=>0x8CF3,
+0x5016=>0x8CF4,
+0x5149=>0x8CF5,
+0x516C=>0x8CF6,
+0x529F=>0x8CF7,
+0x52B9=>0x8CF8,
+0x52FE=>0x8CF9,
+0x539A=>0x8CFA,
+0x53E3=>0x8CFB,
+0x5411=>0x8CFC,
+0x540E=>0x8D40,
+0x5589=>0x8D41,
+0x5751=>0x8D42,
+0x57A2=>0x8D43,
+0x597D=>0x8D44,
+0x5B54=>0x8D45,
+0x5B5D=>0x8D46,
+0x5B8F=>0x8D47,
+0x5DE5=>0x8D48,
+0x5DE7=>0x8D49,
+0x5DF7=>0x8D4A,
+0x5E78=>0x8D4B,
+0x5E83=>0x8D4C,
+0x5E9A=>0x8D4D,
+0x5EB7=>0x8D4E,
+0x5F18=>0x8D4F,
+0x6052=>0x8D50,
+0x614C=>0x8D51,
+0x6297=>0x8D52,
+0x62D8=>0x8D53,
+0x63A7=>0x8D54,
+0x653B=>0x8D55,
+0x6602=>0x8D56,
+0x6643=>0x8D57,
+0x66F4=>0x8D58,
+0x676D=>0x8D59,
+0x6821=>0x8D5A,
+0x6897=>0x8D5B,
+0x69CB=>0x8D5C,
+0x6C5F=>0x8D5D,
+0x6D2A=>0x8D5E,
+0x6D69=>0x8D5F,
+0x6E2F=>0x8D60,
+0x6E9D=>0x8D61,
+0x7532=>0x8D62,
+0x7687=>0x8D63,
+0x786C=>0x8D64,
+0x7A3F=>0x8D65,
+0x7CE0=>0x8D66,
+0x7D05=>0x8D67,
+0x7D18=>0x8D68,
+0x7D5E=>0x8D69,
+0x7DB1=>0x8D6A,
+0x8015=>0x8D6B,
+0x8003=>0x8D6C,
+0x80AF=>0x8D6D,
+0x80B1=>0x8D6E,
+0x8154=>0x8D6F,
+0x818F=>0x8D70,
+0x822A=>0x8D71,
+0x8352=>0x8D72,
+0x884C=>0x8D73,
+0x8861=>0x8D74,
+0x8B1B=>0x8D75,
+0x8CA2=>0x8D76,
+0x8CFC=>0x8D77,
+0x90CA=>0x8D78,
+0x9175=>0x8D79,
+0x9271=>0x8D7A,
+0x783F=>0x8D7B,
+0x92FC=>0x8D7C,
+0x95A4=>0x8D7D,
+0x964D=>0x8D7E,
+0x9805=>0x8D80,
+0x9999=>0x8D81,
+0x9AD8=>0x8D82,
+0x9D3B=>0x8D83,
+0x525B=>0x8D84,
+0x52AB=>0x8D85,
+0x53F7=>0x8D86,
+0x5408=>0x8D87,
+0x58D5=>0x8D88,
+0x62F7=>0x8D89,
+0x6FE0=>0x8D8A,
+0x8C6A=>0x8D8B,
+0x8F5F=>0x8D8C,
+0x9EB9=>0x8D8D,
+0x514B=>0x8D8E,
+0x523B=>0x8D8F,
+0x544A=>0x8D90,
+0x56FD=>0x8D91,
+0x7A40=>0x8D92,
+0x9177=>0x8D93,
+0x9D60=>0x8D94,
+0x9ED2=>0x8D95,
+0x7344=>0x8D96,
+0x6F09=>0x8D97,
+0x8170=>0x8D98,
+0x7511=>0x8D99,
+0x5FFD=>0x8D9A,
+0x60DA=>0x8D9B,
+0x9AA8=>0x8D9C,
+0x72DB=>0x8D9D,
+0x8FBC=>0x8D9E,
+0x6B64=>0x8D9F,
+0x9803=>0x8DA0,
+0x4ECA=>0x8DA1,
+0x56F0=>0x8DA2,
+0x5764=>0x8DA3,
+0x58BE=>0x8DA4,
+0x5A5A=>0x8DA5,
+0x6068=>0x8DA6,
+0x61C7=>0x8DA7,
+0x660F=>0x8DA8,
+0x6606=>0x8DA9,
+0x6839=>0x8DAA,
+0x68B1=>0x8DAB,
+0x6DF7=>0x8DAC,
+0x75D5=>0x8DAD,
+0x7D3A=>0x8DAE,
+0x826E=>0x8DAF,
+0x9B42=>0x8DB0,
+0x4E9B=>0x8DB1,
+0x4F50=>0x8DB2,
+0x53C9=>0x8DB3,
+0x5506=>0x8DB4,
+0x5D6F=>0x8DB5,
+0x5DE6=>0x8DB6,
+0x5DEE=>0x8DB7,
+0x67FB=>0x8DB8,
+0x6C99=>0x8DB9,
+0x7473=>0x8DBA,
+0x7802=>0x8DBB,
+0x8A50=>0x8DBC,
+0x9396=>0x8DBD,
+0x88DF=>0x8DBE,
+0x5750=>0x8DBF,
+0x5EA7=>0x8DC0,
+0x632B=>0x8DC1,
+0x50B5=>0x8DC2,
+0x50AC=>0x8DC3,
+0x518D=>0x8DC4,
+0x6700=>0x8DC5,
+0x54C9=>0x8DC6,
+0x585E=>0x8DC7,
+0x59BB=>0x8DC8,
+0x5BB0=>0x8DC9,
+0x5F69=>0x8DCA,
+0x624D=>0x8DCB,
+0x63A1=>0x8DCC,
+0x683D=>0x8DCD,
+0x6B73=>0x8DCE,
+0x6E08=>0x8DCF,
+0x707D=>0x8DD0,
+0x91C7=>0x8DD1,
+0x7280=>0x8DD2,
+0x7815=>0x8DD3,
+0x7826=>0x8DD4,
+0x796D=>0x8DD5,
+0x658E=>0x8DD6,
+0x7D30=>0x8DD7,
+0x83DC=>0x8DD8,
+0x88C1=>0x8DD9,
+0x8F09=>0x8DDA,
+0x969B=>0x8DDB,
+0x5264=>0x8DDC,
+0x5728=>0x8DDD,
+0x6750=>0x8DDE,
+0x7F6A=>0x8DDF,
+0x8CA1=>0x8DE0,
+0x51B4=>0x8DE1,
+0x5742=>0x8DE2,
+0x962A=>0x8DE3,
+0x583A=>0x8DE4,
+0x698A=>0x8DE5,
+0x80B4=>0x8DE6,
+0x54B2=>0x8DE7,
+0x5D0E=>0x8DE8,
+0x57FC=>0x8DE9,
+0x7895=>0x8DEA,
+0x9DFA=>0x8DEB,
+0x4F5C=>0x8DEC,
+0x524A=>0x8DED,
+0x548B=>0x8DEE,
+0x643E=>0x8DEF,
+0x6628=>0x8DF0,
+0x6714=>0x8DF1,
+0x67F5=>0x8DF2,
+0x7A84=>0x8DF3,
+0x7B56=>0x8DF4,
+0x7D22=>0x8DF5,
+0x932F=>0x8DF6,
+0x685C=>0x8DF7,
+0x9BAD=>0x8DF8,
+0x7B39=>0x8DF9,
+0x5319=>0x8DFA,
+0x518A=>0x8DFB,
+0x5237=>0x8DFC,
+0x5BDF=>0x8E40,
+0x62F6=>0x8E41,
+0x64AE=>0x8E42,
+0x64E6=>0x8E43,
+0x672D=>0x8E44,
+0x6BBA=>0x8E45,
+0x85A9=>0x8E46,
+0x96D1=>0x8E47,
+0x7690=>0x8E48,
+0x9BD6=>0x8E49,
+0x634C=>0x8E4A,
+0x9306=>0x8E4B,
+0x9BAB=>0x8E4C,
+0x76BF=>0x8E4D,
+0x6652=>0x8E4E,
+0x4E09=>0x8E4F,
+0x5098=>0x8E50,
+0x53C2=>0x8E51,
+0x5C71=>0x8E52,
+0x60E8=>0x8E53,
+0x6492=>0x8E54,
+0x6563=>0x8E55,
+0x685F=>0x8E56,
+0x71E6=>0x8E57,
+0x73CA=>0x8E58,
+0x7523=>0x8E59,
+0x7B97=>0x8E5A,
+0x7E82=>0x8E5B,
+0x8695=>0x8E5C,
+0x8B83=>0x8E5D,
+0x8CDB=>0x8E5E,
+0x9178=>0x8E5F,
+0x9910=>0x8E60,
+0x65AC=>0x8E61,
+0x66AB=>0x8E62,
+0x6B8B=>0x8E63,
+0x4ED5=>0x8E64,
+0x4ED4=>0x8E65,
+0x4F3A=>0x8E66,
+0x4F7F=>0x8E67,
+0x523A=>0x8E68,
+0x53F8=>0x8E69,
+0x53F2=>0x8E6A,
+0x55E3=>0x8E6B,
+0x56DB=>0x8E6C,
+0x58EB=>0x8E6D,
+0x59CB=>0x8E6E,
+0x59C9=>0x8E6F,
+0x59FF=>0x8E70,
+0x5B50=>0x8E71,
+0x5C4D=>0x8E72,
+0x5E02=>0x8E73,
+0x5E2B=>0x8E74,
+0x5FD7=>0x8E75,
+0x601D=>0x8E76,
+0x6307=>0x8E77,
+0x652F=>0x8E78,
+0x5B5C=>0x8E79,
+0x65AF=>0x8E7A,
+0x65BD=>0x8E7B,
+0x65E8=>0x8E7C,
+0x679D=>0x8E7D,
+0x6B62=>0x8E7E,
+0x6B7B=>0x8E80,
+0x6C0F=>0x8E81,
+0x7345=>0x8E82,
+0x7949=>0x8E83,
+0x79C1=>0x8E84,
+0x7CF8=>0x8E85,
+0x7D19=>0x8E86,
+0x7D2B=>0x8E87,
+0x80A2=>0x8E88,
+0x8102=>0x8E89,
+0x81F3=>0x8E8A,
+0x8996=>0x8E8B,
+0x8A5E=>0x8E8C,
+0x8A69=>0x8E8D,
+0x8A66=>0x8E8E,
+0x8A8C=>0x8E8F,
+0x8AEE=>0x8E90,
+0x8CC7=>0x8E91,
+0x8CDC=>0x8E92,
+0x96CC=>0x8E93,
+0x98FC=>0x8E94,
+0x6B6F=>0x8E95,
+0x4E8B=>0x8E96,
+0x4F3C=>0x8E97,
+0x4F8D=>0x8E98,
+0x5150=>0x8E99,
+0x5B57=>0x8E9A,
+0x5BFA=>0x8E9B,
+0x6148=>0x8E9C,
+0x6301=>0x8E9D,
+0x6642=>0x8E9E,
+0x6B21=>0x8E9F,
+0x6ECB=>0x8EA0,
+0x6CBB=>0x8EA1,
+0x723E=>0x8EA2,
+0x74BD=>0x8EA3,
+0x75D4=>0x8EA4,
+0x78C1=>0x8EA5,
+0x793A=>0x8EA6,
+0x800C=>0x8EA7,
+0x8033=>0x8EA8,
+0x81EA=>0x8EA9,
+0x8494=>0x8EAA,
+0x8F9E=>0x8EAB,
+0x6C50=>0x8EAC,
+0x9E7F=>0x8EAD,
+0x5F0F=>0x8EAE,
+0x8B58=>0x8EAF,
+0x9D2B=>0x8EB0,
+0x7AFA=>0x8EB1,
+0x8EF8=>0x8EB2,
+0x5B8D=>0x8EB3,
+0x96EB=>0x8EB4,
+0x4E03=>0x8EB5,
+0x53F1=>0x8EB6,
+0x57F7=>0x8EB7,
+0x5931=>0x8EB8,
+0x5AC9=>0x8EB9,
+0x5BA4=>0x8EBA,
+0x6089=>0x8EBB,
+0x6E7F=>0x8EBC,
+0x6F06=>0x8EBD,
+0x75BE=>0x8EBE,
+0x8CEA=>0x8EBF,
+0x5B9F=>0x8EC0,
+0x8500=>0x8EC1,
+0x7BE0=>0x8EC2,
+0x5072=>0x8EC3,
+0x67F4=>0x8EC4,
+0x829D=>0x8EC5,
+0x5C61=>0x8EC6,
+0x854A=>0x8EC7,
+0x7E1E=>0x8EC8,
+0x820E=>0x8EC9,
+0x5199=>0x8ECA,
+0x5C04=>0x8ECB,
+0x6368=>0x8ECC,
+0x8D66=>0x8ECD,
+0x659C=>0x8ECE,
+0x716E=>0x8ECF,
+0x793E=>0x8ED0,
+0x7D17=>0x8ED1,
+0x8005=>0x8ED2,
+0x8B1D=>0x8ED3,
+0x8ECA=>0x8ED4,
+0x906E=>0x8ED5,
+0x86C7=>0x8ED6,
+0x90AA=>0x8ED7,
+0x501F=>0x8ED8,
+0x52FA=>0x8ED9,
+0x5C3A=>0x8EDA,
+0x6753=>0x8EDB,
+0x707C=>0x8EDC,
+0x7235=>0x8EDD,
+0x914C=>0x8EDE,
+0x91C8=>0x8EDF,
+0x932B=>0x8EE0,
+0x82E5=>0x8EE1,
+0x5BC2=>0x8EE2,
+0x5F31=>0x8EE3,
+0x60F9=>0x8EE4,
+0x4E3B=>0x8EE5,
+0x53D6=>0x8EE6,
+0x5B88=>0x8EE7,
+0x624B=>0x8EE8,
+0x6731=>0x8EE9,
+0x6B8A=>0x8EEA,
+0x72E9=>0x8EEB,
+0x73E0=>0x8EEC,
+0x7A2E=>0x8EED,
+0x816B=>0x8EEE,
+0x8DA3=>0x8EEF,
+0x9152=>0x8EF0,
+0x9996=>0x8EF1,
+0x5112=>0x8EF2,
+0x53D7=>0x8EF3,
+0x546A=>0x8EF4,
+0x5BFF=>0x8EF5,
+0x6388=>0x8EF6,
+0x6A39=>0x8EF7,
+0x7DAC=>0x8EF8,
+0x9700=>0x8EF9,
+0x56DA=>0x8EFA,
+0x53CE=>0x8EFB,
+0x5468=>0x8EFC,
+0x5B97=>0x8F40,
+0x5C31=>0x8F41,
+0x5DDE=>0x8F42,
+0x4FEE=>0x8F43,
+0x6101=>0x8F44,
+0x62FE=>0x8F45,
+0x6D32=>0x8F46,
+0x79C0=>0x8F47,
+0x79CB=>0x8F48,
+0x7D42=>0x8F49,
+0x7E4D=>0x8F4A,
+0x7FD2=>0x8F4B,
+0x81ED=>0x8F4C,
+0x821F=>0x8F4D,
+0x8490=>0x8F4E,
+0x8846=>0x8F4F,
+0x8972=>0x8F50,
+0x8B90=>0x8F51,
+0x8E74=>0x8F52,
+0x8F2F=>0x8F53,
+0x9031=>0x8F54,
+0x914B=>0x8F55,
+0x916C=>0x8F56,
+0x96C6=>0x8F57,
+0x919C=>0x8F58,
+0x4EC0=>0x8F59,
+0x4F4F=>0x8F5A,
+0x5145=>0x8F5B,
+0x5341=>0x8F5C,
+0x5F93=>0x8F5D,
+0x620E=>0x8F5E,
+0x67D4=>0x8F5F,
+0x6C41=>0x8F60,
+0x6E0B=>0x8F61,
+0x7363=>0x8F62,
+0x7E26=>0x8F63,
+0x91CD=>0x8F64,
+0x9283=>0x8F65,
+0x53D4=>0x8F66,
+0x5919=>0x8F67,
+0x5BBF=>0x8F68,
+0x6DD1=>0x8F69,
+0x795D=>0x8F6A,
+0x7E2E=>0x8F6B,
+0x7C9B=>0x8F6C,
+0x587E=>0x8F6D,
+0x719F=>0x8F6E,
+0x51FA=>0x8F6F,
+0x8853=>0x8F70,
+0x8FF0=>0x8F71,
+0x4FCA=>0x8F72,
+0x5CFB=>0x8F73,
+0x6625=>0x8F74,
+0x77AC=>0x8F75,
+0x7AE3=>0x8F76,
+0x821C=>0x8F77,
+0x99FF=>0x8F78,
+0x51C6=>0x8F79,
+0x5FAA=>0x8F7A,
+0x65EC=>0x8F7B,
+0x696F=>0x8F7C,
+0x6B89=>0x8F7D,
+0x6DF3=>0x8F7E,
+0x6E96=>0x8F80,
+0x6F64=>0x8F81,
+0x76FE=>0x8F82,
+0x7D14=>0x8F83,
+0x5DE1=>0x8F84,
+0x9075=>0x8F85,
+0x9187=>0x8F86,
+0x9806=>0x8F87,
+0x51E6=>0x8F88,
+0x521D=>0x8F89,
+0x6240=>0x8F8A,
+0x6691=>0x8F8B,
+0x66D9=>0x8F8C,
+0x6E1A=>0x8F8D,
+0x5EB6=>0x8F8E,
+0x7DD2=>0x8F8F,
+0x7F72=>0x8F90,
+0x66F8=>0x8F91,
+0x85AF=>0x8F92,
+0x85F7=>0x8F93,
+0x8AF8=>0x8F94,
+0x52A9=>0x8F95,
+0x53D9=>0x8F96,
+0x5973=>0x8F97,
+0x5E8F=>0x8F98,
+0x5F90=>0x8F99,
+0x6055=>0x8F9A,
+0x92E4=>0x8F9B,
+0x9664=>0x8F9C,
+0x50B7=>0x8F9D,
+0x511F=>0x8F9E,
+0x52DD=>0x8F9F,
+0x5320=>0x8FA0,
+0x5347=>0x8FA1,
+0x53EC=>0x8FA2,
+0x54E8=>0x8FA3,
+0x5546=>0x8FA4,
+0x5531=>0x8FA5,
+0x5617=>0x8FA6,
+0x5968=>0x8FA7,
+0x59BE=>0x8FA8,
+0x5A3C=>0x8FA9,
+0x5BB5=>0x8FAA,
+0x5C06=>0x8FAB,
+0x5C0F=>0x8FAC,
+0x5C11=>0x8FAD,
+0x5C1A=>0x8FAE,
+0x5E84=>0x8FAF,
+0x5E8A=>0x8FB0,
+0x5EE0=>0x8FB1,
+0x5F70=>0x8FB2,
+0x627F=>0x8FB3,
+0x6284=>0x8FB4,
+0x62DB=>0x8FB5,
+0x638C=>0x8FB6,
+0x6377=>0x8FB7,
+0x6607=>0x8FB8,
+0x660C=>0x8FB9,
+0x662D=>0x8FBA,
+0x6676=>0x8FBB,
+0x677E=>0x8FBC,
+0x68A2=>0x8FBD,
+0x6A1F=>0x8FBE,
+0x6A35=>0x8FBF,
+0x6CBC=>0x8FC0,
+0x6D88=>0x8FC1,
+0x6E09=>0x8FC2,
+0x6E58=>0x8FC3,
+0x713C=>0x8FC4,
+0x7126=>0x8FC5,
+0x7167=>0x8FC6,
+0x75C7=>0x8FC7,
+0x7701=>0x8FC8,
+0x785D=>0x8FC9,
+0x7901=>0x8FCA,
+0x7965=>0x8FCB,
+0x79F0=>0x8FCC,
+0x7AE0=>0x8FCD,
+0x7B11=>0x8FCE,
+0x7CA7=>0x8FCF,
+0x7D39=>0x8FD0,
+0x8096=>0x8FD1,
+0x83D6=>0x8FD2,
+0x848B=>0x8FD3,
+0x8549=>0x8FD4,
+0x885D=>0x8FD5,
+0x88F3=>0x8FD6,
+0x8A1F=>0x8FD7,
+0x8A3C=>0x8FD8,
+0x8A54=>0x8FD9,
+0x8A73=>0x8FDA,
+0x8C61=>0x8FDB,
+0x8CDE=>0x8FDC,
+0x91A4=>0x8FDD,
+0x9266=>0x8FDE,
+0x937E=>0x8FDF,
+0x9418=>0x8FE0,
+0x969C=>0x8FE1,
+0x9798=>0x8FE2,
+0x4E0A=>0x8FE3,
+0x4E08=>0x8FE4,
+0x4E1E=>0x8FE5,
+0x4E57=>0x8FE6,
+0x5197=>0x8FE7,
+0x5270=>0x8FE8,
+0x57CE=>0x8FE9,
+0x5834=>0x8FEA,
+0x58CC=>0x8FEB,
+0x5B22=>0x8FEC,
+0x5E38=>0x8FED,
+0x60C5=>0x8FEE,
+0x64FE=>0x8FEF,
+0x6761=>0x8FF0,
+0x6756=>0x8FF1,
+0x6D44=>0x8FF2,
+0x72B6=>0x8FF3,
+0x7573=>0x8FF4,
+0x7A63=>0x8FF5,
+0x84B8=>0x8FF6,
+0x8B72=>0x8FF7,
+0x91B8=>0x8FF8,
+0x9320=>0x8FF9,
+0x5631=>0x8FFA,
+0x57F4=>0x8FFB,
+0x98FE=>0x8FFC,
+0x62ED=>0x9040,
+0x690D=>0x9041,
+0x6B96=>0x9042,
+0x71ED=>0x9043,
+0x7E54=>0x9044,
+0x8077=>0x9045,
+0x8272=>0x9046,
+0x89E6=>0x9047,
+0x98DF=>0x9048,
+0x8755=>0x9049,
+0x8FB1=>0x904A,
+0x5C3B=>0x904B,
+0x4F38=>0x904C,
+0x4FE1=>0x904D,
+0x4FB5=>0x904E,
+0x5507=>0x904F,
+0x5A20=>0x9050,
+0x5BDD=>0x9051,
+0x5BE9=>0x9052,
+0x5FC3=>0x9053,
+0x614E=>0x9054,
+0x632F=>0x9055,
+0x65B0=>0x9056,
+0x664B=>0x9057,
+0x68EE=>0x9058,
+0x699B=>0x9059,
+0x6D78=>0x905A,
+0x6DF1=>0x905B,
+0x7533=>0x905C,
+0x75B9=>0x905D,
+0x771F=>0x905E,
+0x795E=>0x905F,
+0x79E6=>0x9060,
+0x7D33=>0x9061,
+0x81E3=>0x9062,
+0x82AF=>0x9063,
+0x85AA=>0x9064,
+0x89AA=>0x9065,
+0x8A3A=>0x9066,
+0x8EAB=>0x9067,
+0x8F9B=>0x9068,
+0x9032=>0x9069,
+0x91DD=>0x906A,
+0x9707=>0x906B,
+0x4EBA=>0x906C,
+0x4EC1=>0x906D,
+0x5203=>0x906E,
+0x5875=>0x906F,
+0x58EC=>0x9070,
+0x5C0B=>0x9071,
+0x751A=>0x9072,
+0x5C3D=>0x9073,
+0x814E=>0x9074,
+0x8A0A=>0x9075,
+0x8FC5=>0x9076,
+0x9663=>0x9077,
+0x976D=>0x9078,
+0x7B25=>0x9079,
+0x8ACF=>0x907A,
+0x9808=>0x907B,
+0x9162=>0x907C,
+0x56F3=>0x907D,
+0x53A8=>0x907E,
+0x9017=>0x9080,
+0x5439=>0x9081,
+0x5782=>0x9082,
+0x5E25=>0x9083,
+0x63A8=>0x9084,
+0x6C34=>0x9085,
+0x708A=>0x9086,
+0x7761=>0x9087,
+0x7C8B=>0x9088,
+0x7FE0=>0x9089,
+0x8870=>0x908A,
+0x9042=>0x908B,
+0x9154=>0x908C,
+0x9310=>0x908D,
+0x9318=>0x908E,
+0x968F=>0x908F,
+0x745E=>0x9090,
+0x9AC4=>0x9091,
+0x5D07=>0x9092,
+0x5D69=>0x9093,
+0x6570=>0x9094,
+0x67A2=>0x9095,
+0x8DA8=>0x9096,
+0x96DB=>0x9097,
+0x636E=>0x9098,
+0x6749=>0x9099,
+0x6919=>0x909A,
+0x83C5=>0x909B,
+0x9817=>0x909C,
+0x96C0=>0x909D,
+0x88FE=>0x909E,
+0x6F84=>0x909F,
+0x647A=>0x90A0,
+0x5BF8=>0x90A1,
+0x4E16=>0x90A2,
+0x702C=>0x90A3,
+0x755D=>0x90A4,
+0x662F=>0x90A5,
+0x51C4=>0x90A6,
+0x5236=>0x90A7,
+0x52E2=>0x90A8,
+0x59D3=>0x90A9,
+0x5F81=>0x90AA,
+0x6027=>0x90AB,
+0x6210=>0x90AC,
+0x653F=>0x90AD,
+0x6574=>0x90AE,
+0x661F=>0x90AF,
+0x6674=>0x90B0,
+0x68F2=>0x90B1,
+0x6816=>0x90B2,
+0x6B63=>0x90B3,
+0x6E05=>0x90B4,
+0x7272=>0x90B5,
+0x751F=>0x90B6,
+0x76DB=>0x90B7,
+0x7CBE=>0x90B8,
+0x8056=>0x90B9,
+0x58F0=>0x90BA,
+0x88FD=>0x90BB,
+0x897F=>0x90BC,
+0x8AA0=>0x90BD,
+0x8A93=>0x90BE,
+0x8ACB=>0x90BF,
+0x901D=>0x90C0,
+0x9192=>0x90C1,
+0x9752=>0x90C2,
+0x9759=>0x90C3,
+0x6589=>0x90C4,
+0x7A0E=>0x90C5,
+0x8106=>0x90C6,
+0x96BB=>0x90C7,
+0x5E2D=>0x90C8,
+0x60DC=>0x90C9,
+0x621A=>0x90CA,
+0x65A5=>0x90CB,
+0x6614=>0x90CC,
+0x6790=>0x90CD,
+0x77F3=>0x90CE,
+0x7A4D=>0x90CF,
+0x7C4D=>0x90D0,
+0x7E3E=>0x90D1,
+0x810A=>0x90D2,
+0x8CAC=>0x90D3,
+0x8D64=>0x90D4,
+0x8DE1=>0x90D5,
+0x8E5F=>0x90D6,
+0x78A9=>0x90D7,
+0x5207=>0x90D8,
+0x62D9=>0x90D9,
+0x63A5=>0x90DA,
+0x6442=>0x90DB,
+0x6298=>0x90DC,
+0x8A2D=>0x90DD,
+0x7A83=>0x90DE,
+0x7BC0=>0x90DF,
+0x8AAC=>0x90E0,
+0x96EA=>0x90E1,
+0x7D76=>0x90E2,
+0x820C=>0x90E3,
+0x8749=>0x90E4,
+0x4ED9=>0x90E5,
+0x5148=>0x90E6,
+0x5343=>0x90E7,
+0x5360=>0x90E8,
+0x5BA3=>0x90E9,
+0x5C02=>0x90EA,
+0x5C16=>0x90EB,
+0x5DDD=>0x90EC,
+0x6226=>0x90ED,
+0x6247=>0x90EE,
+0x64B0=>0x90EF,
+0x6813=>0x90F0,
+0x6834=>0x90F1,
+0x6CC9=>0x90F2,
+0x6D45=>0x90F3,
+0x6D17=>0x90F4,
+0x67D3=>0x90F5,
+0x6F5C=>0x90F6,
+0x714E=>0x90F7,
+0x717D=>0x90F8,
+0x65CB=>0x90F9,
+0x7A7F=>0x90FA,
+0x7BAD=>0x90FB,
+0x7DDA=>0x90FC,
+0x7E4A=>0x9140,
+0x7FA8=>0x9141,
+0x817A=>0x9142,
+0x821B=>0x9143,
+0x8239=>0x9144,
+0x85A6=>0x9145,
+0x8A6E=>0x9146,
+0x8CCE=>0x9147,
+0x8DF5=>0x9148,
+0x9078=>0x9149,
+0x9077=>0x914A,
+0x92AD=>0x914B,
+0x9291=>0x914C,
+0x9583=>0x914D,
+0x9BAE=>0x914E,
+0x524D=>0x914F,
+0x5584=>0x9150,
+0x6F38=>0x9151,
+0x7136=>0x9152,
+0x5168=>0x9153,
+0x7985=>0x9154,
+0x7E55=>0x9155,
+0x81B3=>0x9156,
+0x7CCE=>0x9157,
+0x564C=>0x9158,
+0x5851=>0x9159,
+0x5CA8=>0x915A,
+0x63AA=>0x915B,
+0x66FE=>0x915C,
+0x66FD=>0x915D,
+0x695A=>0x915E,
+0x72D9=>0x915F,
+0x758F=>0x9160,
+0x758E=>0x9161,
+0x790E=>0x9162,
+0x7956=>0x9163,
+0x79DF=>0x9164,
+0x7C97=>0x9165,
+0x7D20=>0x9166,
+0x7D44=>0x9167,
+0x8607=>0x9168,
+0x8A34=>0x9169,
+0x963B=>0x916A,
+0x9061=>0x916B,
+0x9F20=>0x916C,
+0x50E7=>0x916D,
+0x5275=>0x916E,
+0x53CC=>0x916F,
+0x53E2=>0x9170,
+0x5009=>0x9171,
+0x55AA=>0x9172,
+0x58EE=>0x9173,
+0x594F=>0x9174,
+0x723D=>0x9175,
+0x5B8B=>0x9176,
+0x5C64=>0x9177,
+0x531D=>0x9178,
+0x60E3=>0x9179,
+0x60F3=>0x917A,
+0x635C=>0x917B,
+0x6383=>0x917C,
+0x633F=>0x917D,
+0x63BB=>0x917E,
+0x64CD=>0x9180,
+0x65E9=>0x9181,
+0x66F9=>0x9182,
+0x5DE3=>0x9183,
+0x69CD=>0x9184,
+0x69FD=>0x9185,
+0x6F15=>0x9186,
+0x71E5=>0x9187,
+0x4E89=>0x9188,
+0x75E9=>0x9189,
+0x76F8=>0x918A,
+0x7A93=>0x918B,
+0x7CDF=>0x918C,
+0x7DCF=>0x918D,
+0x7D9C=>0x918E,
+0x8061=>0x918F,
+0x8349=>0x9190,
+0x8358=>0x9191,
+0x846C=>0x9192,
+0x84BC=>0x9193,
+0x85FB=>0x9194,
+0x88C5=>0x9195,
+0x8D70=>0x9196,
+0x9001=>0x9197,
+0x906D=>0x9198,
+0x9397=>0x9199,
+0x971C=>0x919A,
+0x9A12=>0x919B,
+0x50CF=>0x919C,
+0x5897=>0x919D,
+0x618E=>0x919E,
+0x81D3=>0x919F,
+0x8535=>0x91A0,
+0x8D08=>0x91A1,
+0x9020=>0x91A2,
+0x4FC3=>0x91A3,
+0x5074=>0x91A4,
+0x5247=>0x91A5,
+0x5373=>0x91A6,
+0x606F=>0x91A7,
+0x6349=>0x91A8,
+0x675F=>0x91A9,
+0x6E2C=>0x91AA,
+0x8DB3=>0x91AB,
+0x901F=>0x91AC,
+0x4FD7=>0x91AD,
+0x5C5E=>0x91AE,
+0x8CCA=>0x91AF,
+0x65CF=>0x91B0,
+0x7D9A=>0x91B1,
+0x5352=>0x91B2,
+0x8896=>0x91B3,
+0x5176=>0x91B4,
+0x63C3=>0x91B5,
+0x5B58=>0x91B6,
+0x5B6B=>0x91B7,
+0x5C0A=>0x91B8,
+0x640D=>0x91B9,
+0x6751=>0x91BA,
+0x905C=>0x91BB,
+0x4ED6=>0x91BC,
+0x591A=>0x91BD,
+0x592A=>0x91BE,
+0x6C70=>0x91BF,
+0x8A51=>0x91C0,
+0x553E=>0x91C1,
+0x5815=>0x91C2,
+0x59A5=>0x91C3,
+0x60F0=>0x91C4,
+0x6253=>0x91C5,
+0x67C1=>0x91C6,
+0x8235=>0x91C7,
+0x6955=>0x91C8,
+0x9640=>0x91C9,
+0x99C4=>0x91CA,
+0x9A28=>0x91CB,
+0x4F53=>0x91CC,
+0x5806=>0x91CD,
+0x5BFE=>0x91CE,
+0x8010=>0x91CF,
+0x5CB1=>0x91D0,
+0x5E2F=>0x91D1,
+0x5F85=>0x91D2,
+0x6020=>0x91D3,
+0x614B=>0x91D4,
+0x6234=>0x91D5,
+0x66FF=>0x91D6,
+0x6CF0=>0x91D7,
+0x6EDE=>0x91D8,
+0x80CE=>0x91D9,
+0x817F=>0x91DA,
+0x82D4=>0x91DB,
+0x888B=>0x91DC,
+0x8CB8=>0x91DD,
+0x9000=>0x91DE,
+0x902E=>0x91DF,
+0x968A=>0x91E0,
+0x9EDB=>0x91E1,
+0x9BDB=>0x91E2,
+0x4EE3=>0x91E3,
+0x53F0=>0x91E4,
+0x5927=>0x91E5,
+0x7B2C=>0x91E6,
+0x918D=>0x91E7,
+0x984C=>0x91E8,
+0x9DF9=>0x91E9,
+0x6EDD=>0x91EA,
+0x7027=>0x91EB,
+0x5353=>0x91EC,
+0x5544=>0x91ED,
+0x5B85=>0x91EE,
+0x6258=>0x91EF,
+0x629E=>0x91F0,
+0x62D3=>0x91F1,
+0x6CA2=>0x91F2,
+0x6FEF=>0x91F3,
+0x7422=>0x91F4,
+0x8A17=>0x91F5,
+0x9438=>0x91F6,
+0x6FC1=>0x91F7,
+0x8AFE=>0x91F8,
+0x8338=>0x91F9,
+0x51E7=>0x91FA,
+0x86F8=>0x91FB,
+0x53EA=>0x91FC,
+0x53E9=>0x9240,
+0x4F46=>0x9241,
+0x9054=>0x9242,
+0x8FB0=>0x9243,
+0x596A=>0x9244,
+0x8131=>0x9245,
+0x5DFD=>0x9246,
+0x7AEA=>0x9247,
+0x8FBF=>0x9248,
+0x68DA=>0x9249,
+0x8C37=>0x924A,
+0x72F8=>0x924B,
+0x9C48=>0x924C,
+0x6A3D=>0x924D,
+0x8AB0=>0x924E,
+0x4E39=>0x924F,
+0x5358=>0x9250,
+0x5606=>0x9251,
+0x5766=>0x9252,
+0x62C5=>0x9253,
+0x63A2=>0x9254,
+0x65E6=>0x9255,
+0x6B4E=>0x9256,
+0x6DE1=>0x9257,
+0x6E5B=>0x9258,
+0x70AD=>0x9259,
+0x77ED=>0x925A,
+0x7AEF=>0x925B,
+0x7BAA=>0x925C,
+0x7DBB=>0x925D,
+0x803D=>0x925E,
+0x80C6=>0x925F,
+0x86CB=>0x9260,
+0x8A95=>0x9261,
+0x935B=>0x9262,
+0x56E3=>0x9263,
+0x58C7=>0x9264,
+0x5F3E=>0x9265,
+0x65AD=>0x9266,
+0x6696=>0x9267,
+0x6A80=>0x9268,
+0x6BB5=>0x9269,
+0x7537=>0x926A,
+0x8AC7=>0x926B,
+0x5024=>0x926C,
+0x77E5=>0x926D,
+0x5730=>0x926E,
+0x5F1B=>0x926F,
+0x6065=>0x9270,
+0x667A=>0x9271,
+0x6C60=>0x9272,
+0x75F4=>0x9273,
+0x7A1A=>0x9274,
+0x7F6E=>0x9275,
+0x81F4=>0x9276,
+0x8718=>0x9277,
+0x9045=>0x9278,
+0x99B3=>0x9279,
+0x7BC9=>0x927A,
+0x755C=>0x927B,
+0x7AF9=>0x927C,
+0x7B51=>0x927D,
+0x84C4=>0x927E,
+0x9010=>0x9280,
+0x79E9=>0x9281,
+0x7A92=>0x9282,
+0x8336=>0x9283,
+0x5AE1=>0x9284,
+0x7740=>0x9285,
+0x4E2D=>0x9286,
+0x4EF2=>0x9287,
+0x5B99=>0x9288,
+0x5FE0=>0x9289,
+0x62BD=>0x928A,
+0x663C=>0x928B,
+0x67F1=>0x928C,
+0x6CE8=>0x928D,
+0x866B=>0x928E,
+0x8877=>0x928F,
+0x8A3B=>0x9290,
+0x914E=>0x9291,
+0x92F3=>0x9292,
+0x99D0=>0x9293,
+0x6A17=>0x9294,
+0x7026=>0x9295,
+0x732A=>0x9296,
+0x82E7=>0x9297,
+0x8457=>0x9298,
+0x8CAF=>0x9299,
+0x4E01=>0x929A,
+0x5146=>0x929B,
+0x51CB=>0x929C,
+0x558B=>0x929D,
+0x5BF5=>0x929E,
+0x5E16=>0x929F,
+0x5E33=>0x92A0,
+0x5E81=>0x92A1,
+0x5F14=>0x92A2,
+0x5F35=>0x92A3,
+0x5F6B=>0x92A4,
+0x5FB4=>0x92A5,
+0x61F2=>0x92A6,
+0x6311=>0x92A7,
+0x66A2=>0x92A8,
+0x671D=>0x92A9,
+0x6F6E=>0x92AA,
+0x7252=>0x92AB,
+0x753A=>0x92AC,
+0x773A=>0x92AD,
+0x8074=>0x92AE,
+0x8139=>0x92AF,
+0x8178=>0x92B0,
+0x8776=>0x92B1,
+0x8ABF=>0x92B2,
+0x8ADC=>0x92B3,
+0x8D85=>0x92B4,
+0x8DF3=>0x92B5,
+0x929A=>0x92B6,
+0x9577=>0x92B7,
+0x9802=>0x92B8,
+0x9CE5=>0x92B9,
+0x52C5=>0x92BA,
+0x6357=>0x92BB,
+0x76F4=>0x92BC,
+0x6715=>0x92BD,
+0x6C88=>0x92BE,
+0x73CD=>0x92BF,
+0x8CC3=>0x92C0,
+0x93AE=>0x92C1,
+0x9673=>0x92C2,
+0x6D25=>0x92C3,
+0x589C=>0x92C4,
+0x690E=>0x92C5,
+0x69CC=>0x92C6,
+0x8FFD=>0x92C7,
+0x939A=>0x92C8,
+0x75DB=>0x92C9,
+0x901A=>0x92CA,
+0x585A=>0x92CB,
+0x6802=>0x92CC,
+0x63B4=>0x92CD,
+0x69FB=>0x92CE,
+0x4F43=>0x92CF,
+0x6F2C=>0x92D0,
+0x67D8=>0x92D1,
+0x8FBB=>0x92D2,
+0x8526=>0x92D3,
+0x7DB4=>0x92D4,
+0x9354=>0x92D5,
+0x693F=>0x92D6,
+0x6F70=>0x92D7,
+0x576A=>0x92D8,
+0x58F7=>0x92D9,
+0x5B2C=>0x92DA,
+0x7D2C=>0x92DB,
+0x722A=>0x92DC,
+0x540A=>0x92DD,
+0x91E3=>0x92DE,
+0x9DB4=>0x92DF,
+0x4EAD=>0x92E0,
+0x4F4E=>0x92E1,
+0x505C=>0x92E2,
+0x5075=>0x92E3,
+0x5243=>0x92E4,
+0x8C9E=>0x92E5,
+0x5448=>0x92E6,
+0x5824=>0x92E7,
+0x5B9A=>0x92E8,
+0x5E1D=>0x92E9,
+0x5E95=>0x92EA,
+0x5EAD=>0x92EB,
+0x5EF7=>0x92EC,
+0x5F1F=>0x92ED,
+0x608C=>0x92EE,
+0x62B5=>0x92EF,
+0x633A=>0x92F0,
+0x63D0=>0x92F1,
+0x68AF=>0x92F2,
+0x6C40=>0x92F3,
+0x7887=>0x92F4,
+0x798E=>0x92F5,
+0x7A0B=>0x92F6,
+0x7DE0=>0x92F7,
+0x8247=>0x92F8,
+0x8A02=>0x92F9,
+0x8AE6=>0x92FA,
+0x8E44=>0x92FB,
+0x9013=>0x92FC,
+0x90B8=>0x9340,
+0x912D=>0x9341,
+0x91D8=>0x9342,
+0x9F0E=>0x9343,
+0x6CE5=>0x9344,
+0x6458=>0x9345,
+0x64E2=>0x9346,
+0x6575=>0x9347,
+0x6EF4=>0x9348,
+0x7684=>0x9349,
+0x7B1B=>0x934A,
+0x9069=>0x934B,
+0x93D1=>0x934C,
+0x6EBA=>0x934D,
+0x54F2=>0x934E,
+0x5FB9=>0x934F,
+0x64A4=>0x9350,
+0x8F4D=>0x9351,
+0x8FED=>0x9352,
+0x9244=>0x9353,
+0x5178=>0x9354,
+0x586B=>0x9355,
+0x5929=>0x9356,
+0x5C55=>0x9357,
+0x5E97=>0x9358,
+0x6DFB=>0x9359,
+0x7E8F=>0x935A,
+0x751C=>0x935B,
+0x8CBC=>0x935C,
+0x8EE2=>0x935D,
+0x985B=>0x935E,
+0x70B9=>0x935F,
+0x4F1D=>0x9360,
+0x6BBF=>0x9361,
+0x6FB1=>0x9362,
+0x7530=>0x9363,
+0x96FB=>0x9364,
+0x514E=>0x9365,
+0x5410=>0x9366,
+0x5835=>0x9367,
+0x5857=>0x9368,
+0x59AC=>0x9369,
+0x5C60=>0x936A,
+0x5F92=>0x936B,
+0x6597=>0x936C,
+0x675C=>0x936D,
+0x6E21=>0x936E,
+0x767B=>0x936F,
+0x83DF=>0x9370,
+0x8CED=>0x9371,
+0x9014=>0x9372,
+0x90FD=>0x9373,
+0x934D=>0x9374,
+0x7825=>0x9375,
+0x783A=>0x9376,
+0x52AA=>0x9377,
+0x5EA6=>0x9378,
+0x571F=>0x9379,
+0x5974=>0x937A,
+0x6012=>0x937B,
+0x5012=>0x937C,
+0x515A=>0x937D,
+0x51AC=>0x937E,
+0x51CD=>0x9380,
+0x5200=>0x9381,
+0x5510=>0x9382,
+0x5854=>0x9383,
+0x5858=>0x9384,
+0x5957=>0x9385,
+0x5B95=>0x9386,
+0x5CF6=>0x9387,
+0x5D8B=>0x9388,
+0x60BC=>0x9389,
+0x6295=>0x938A,
+0x642D=>0x938B,
+0x6771=>0x938C,
+0x6843=>0x938D,
+0x68BC=>0x938E,
+0x68DF=>0x938F,
+0x76D7=>0x9390,
+0x6DD8=>0x9391,
+0x6E6F=>0x9392,
+0x6D9B=>0x9393,
+0x706F=>0x9394,
+0x71C8=>0x9395,
+0x5F53=>0x9396,
+0x75D8=>0x9397,
+0x7977=>0x9398,
+0x7B49=>0x9399,
+0x7B54=>0x939A,
+0x7B52=>0x939B,
+0x7CD6=>0x939C,
+0x7D71=>0x939D,
+0x5230=>0x939E,
+0x8463=>0x939F,
+0x8569=>0x93A0,
+0x85E4=>0x93A1,
+0x8A0E=>0x93A2,
+0x8B04=>0x93A3,
+0x8C46=>0x93A4,
+0x8E0F=>0x93A5,
+0x9003=>0x93A6,
+0x900F=>0x93A7,
+0x9419=>0x93A8,
+0x9676=>0x93A9,
+0x982D=>0x93AA,
+0x9A30=>0x93AB,
+0x95D8=>0x93AC,
+0x50CD=>0x93AD,
+0x52D5=>0x93AE,
+0x540C=>0x93AF,
+0x5802=>0x93B0,
+0x5C0E=>0x93B1,
+0x61A7=>0x93B2,
+0x649E=>0x93B3,
+0x6D1E=>0x93B4,
+0x77B3=>0x93B5,
+0x7AE5=>0x93B6,
+0x80F4=>0x93B7,
+0x8404=>0x93B8,
+0x9053=>0x93B9,
+0x9285=>0x93BA,
+0x5CE0=>0x93BB,
+0x9D07=>0x93BC,
+0x533F=>0x93BD,
+0x5F97=>0x93BE,
+0x5FB3=>0x93BF,
+0x6D9C=>0x93C0,
+0x7279=>0x93C1,
+0x7763=>0x93C2,
+0x79BF=>0x93C3,
+0x7BE4=>0x93C4,
+0x6BD2=>0x93C5,
+0x72EC=>0x93C6,
+0x8AAD=>0x93C7,
+0x6803=>0x93C8,
+0x6A61=>0x93C9,
+0x51F8=>0x93CA,
+0x7A81=>0x93CB,
+0x6934=>0x93CC,
+0x5C4A=>0x93CD,
+0x9CF6=>0x93CE,
+0x82EB=>0x93CF,
+0x5BC5=>0x93D0,
+0x9149=>0x93D1,
+0x701E=>0x93D2,
+0x5678=>0x93D3,
+0x5C6F=>0x93D4,
+0x60C7=>0x93D5,
+0x6566=>0x93D6,
+0x6C8C=>0x93D7,
+0x8C5A=>0x93D8,
+0x9041=>0x93D9,
+0x9813=>0x93DA,
+0x5451=>0x93DB,
+0x66C7=>0x93DC,
+0x920D=>0x93DD,
+0x5948=>0x93DE,
+0x90A3=>0x93DF,
+0x5185=>0x93E0,
+0x4E4D=>0x93E1,
+0x51EA=>0x93E2,
+0x8599=>0x93E3,
+0x8B0E=>0x93E4,
+0x7058=>0x93E5,
+0x637A=>0x93E6,
+0x934B=>0x93E7,
+0x6962=>0x93E8,
+0x99B4=>0x93E9,
+0x7E04=>0x93EA,
+0x7577=>0x93EB,
+0x5357=>0x93EC,
+0x6960=>0x93ED,
+0x8EDF=>0x93EE,
+0x96E3=>0x93EF,
+0x6C5D=>0x93F0,
+0x4E8C=>0x93F1,
+0x5C3C=>0x93F2,
+0x5F10=>0x93F3,
+0x8FE9=>0x93F4,
+0x5302=>0x93F5,
+0x8CD1=>0x93F6,
+0x8089=>0x93F7,
+0x8679=>0x93F8,
+0x5EFF=>0x93F9,
+0x65E5=>0x93FA,
+0x4E73=>0x93FB,
+0x5165=>0x93FC,
+0x5982=>0x9440,
+0x5C3F=>0x9441,
+0x97EE=>0x9442,
+0x4EFB=>0x9443,
+0x598A=>0x9444,
+0x5FCD=>0x9445,
+0x8A8D=>0x9446,
+0x6FE1=>0x9447,
+0x79B0=>0x9448,
+0x7962=>0x9449,
+0x5BE7=>0x944A,
+0x8471=>0x944B,
+0x732B=>0x944C,
+0x71B1=>0x944D,
+0x5E74=>0x944E,
+0x5FF5=>0x944F,
+0x637B=>0x9450,
+0x649A=>0x9451,
+0x71C3=>0x9452,
+0x7C98=>0x9453,
+0x4E43=>0x9454,
+0x5EFC=>0x9455,
+0x4E4B=>0x9456,
+0x57DC=>0x9457,
+0x56A2=>0x9458,
+0x60A9=>0x9459,
+0x6FC3=>0x945A,
+0x7D0D=>0x945B,
+0x80FD=>0x945C,
+0x8133=>0x945D,
+0x81BF=>0x945E,
+0x8FB2=>0x945F,
+0x8997=>0x9460,
+0x86A4=>0x9461,
+0x5DF4=>0x9462,
+0x628A=>0x9463,
+0x64AD=>0x9464,
+0x8987=>0x9465,
+0x6777=>0x9466,
+0x6CE2=>0x9467,
+0x6D3E=>0x9468,
+0x7436=>0x9469,
+0x7834=>0x946A,
+0x5A46=>0x946B,
+0x7F75=>0x946C,
+0x82AD=>0x946D,
+0x99AC=>0x946E,
+0x4FF3=>0x946F,
+0x5EC3=>0x9470,
+0x62DD=>0x9471,
+0x6392=>0x9472,
+0x6557=>0x9473,
+0x676F=>0x9474,
+0x76C3=>0x9475,
+0x724C=>0x9476,
+0x80CC=>0x9477,
+0x80BA=>0x9478,
+0x8F29=>0x9479,
+0x914D=>0x947A,
+0x500D=>0x947B,
+0x57F9=>0x947C,
+0x5A92=>0x947D,
+0x6885=>0x947E,
+0x6973=>0x9480,
+0x7164=>0x9481,
+0x72FD=>0x9482,
+0x8CB7=>0x9483,
+0x58F2=>0x9484,
+0x8CE0=>0x9485,
+0x966A=>0x9486,
+0x9019=>0x9487,
+0x877F=>0x9488,
+0x79E4=>0x9489,
+0x77E7=>0x948A,
+0x8429=>0x948B,
+0x4F2F=>0x948C,
+0x5265=>0x948D,
+0x535A=>0x948E,
+0x62CD=>0x948F,
+0x67CF=>0x9490,
+0x6CCA=>0x9491,
+0x767D=>0x9492,
+0x7B94=>0x9493,
+0x7C95=>0x9494,
+0x8236=>0x9495,
+0x8584=>0x9496,
+0x8FEB=>0x9497,
+0x66DD=>0x9498,
+0x6F20=>0x9499,
+0x7206=>0x949A,
+0x7E1B=>0x949B,
+0x83AB=>0x949C,
+0x99C1=>0x949D,
+0x9EA6=>0x949E,
+0x51FD=>0x949F,
+0x7BB1=>0x94A0,
+0x7872=>0x94A1,
+0x7BB8=>0x94A2,
+0x8087=>0x94A3,
+0x7B48=>0x94A4,
+0x6AE8=>0x94A5,
+0x5E61=>0x94A6,
+0x808C=>0x94A7,
+0x7551=>0x94A8,
+0x7560=>0x94A9,
+0x516B=>0x94AA,
+0x9262=>0x94AB,
+0x6E8C=>0x94AC,
+0x767A=>0x94AD,
+0x9197=>0x94AE,
+0x9AEA=>0x94AF,
+0x4F10=>0x94B0,
+0x7F70=>0x94B1,
+0x629C=>0x94B2,
+0x7B4F=>0x94B3,
+0x95A5=>0x94B4,
+0x9CE9=>0x94B5,
+0x567A=>0x94B6,
+0x5859=>0x94B7,
+0x86E4=>0x94B8,
+0x96BC=>0x94B9,
+0x4F34=>0x94BA,
+0x5224=>0x94BB,
+0x534A=>0x94BC,
+0x53CD=>0x94BD,
+0x53DB=>0x94BE,
+0x5E06=>0x94BF,
+0x642C=>0x94C0,
+0x6591=>0x94C1,
+0x677F=>0x94C2,
+0x6C3E=>0x94C3,
+0x6C4E=>0x94C4,
+0x7248=>0x94C5,
+0x72AF=>0x94C6,
+0x73ED=>0x94C7,
+0x7554=>0x94C8,
+0x7E41=>0x94C9,
+0x822C=>0x94CA,
+0x85E9=>0x94CB,
+0x8CA9=>0x94CC,
+0x7BC4=>0x94CD,
+0x91C6=>0x94CE,
+0x7169=>0x94CF,
+0x9812=>0x94D0,
+0x98EF=>0x94D1,
+0x633D=>0x94D2,
+0x6669=>0x94D3,
+0x756A=>0x94D4,
+0x76E4=>0x94D5,
+0x78D0=>0x94D6,
+0x8543=>0x94D7,
+0x86EE=>0x94D8,
+0x532A=>0x94D9,
+0x5351=>0x94DA,
+0x5426=>0x94DB,
+0x5983=>0x94DC,
+0x5E87=>0x94DD,
+0x5F7C=>0x94DE,
+0x60B2=>0x94DF,
+0x6249=>0x94E0,
+0x6279=>0x94E1,
+0x62AB=>0x94E2,
+0x6590=>0x94E3,
+0x6BD4=>0x94E4,
+0x6CCC=>0x94E5,
+0x75B2=>0x94E6,
+0x76AE=>0x94E7,
+0x7891=>0x94E8,
+0x79D8=>0x94E9,
+0x7DCB=>0x94EA,
+0x7F77=>0x94EB,
+0x80A5=>0x94EC,
+0x88AB=>0x94ED,
+0x8AB9=>0x94EE,
+0x8CBB=>0x94EF,
+0x907F=>0x94F0,
+0x975E=>0x94F1,
+0x98DB=>0x94F2,
+0x6A0B=>0x94F3,
+0x7C38=>0x94F4,
+0x5099=>0x94F5,
+0x5C3E=>0x94F6,
+0x5FAE=>0x94F7,
+0x6787=>0x94F8,
+0x6BD8=>0x94F9,
+0x7435=>0x94FA,
+0x7709=>0x94FB,
+0x7F8E=>0x94FC,
+0x9F3B=>0x9540,
+0x67CA=>0x9541,
+0x7A17=>0x9542,
+0x5339=>0x9543,
+0x758B=>0x9544,
+0x9AED=>0x9545,
+0x5F66=>0x9546,
+0x819D=>0x9547,
+0x83F1=>0x9548,
+0x8098=>0x9549,
+0x5F3C=>0x954A,
+0x5FC5=>0x954B,
+0x7562=>0x954C,
+0x7B46=>0x954D,
+0x903C=>0x954E,
+0x6867=>0x954F,
+0x59EB=>0x9550,
+0x5A9B=>0x9551,
+0x7D10=>0x9552,
+0x767E=>0x9553,
+0x8B2C=>0x9554,
+0x4FF5=>0x9555,
+0x5F6A=>0x9556,
+0x6A19=>0x9557,
+0x6C37=>0x9558,
+0x6F02=>0x9559,
+0x74E2=>0x955A,
+0x7968=>0x955B,
+0x8868=>0x955C,
+0x8A55=>0x955D,
+0x8C79=>0x955E,
+0x5EDF=>0x955F,
+0x63CF=>0x9560,
+0x75C5=>0x9561,
+0x79D2=>0x9562,
+0x82D7=>0x9563,
+0x9328=>0x9564,
+0x92F2=>0x9565,
+0x849C=>0x9566,
+0x86ED=>0x9567,
+0x9C2D=>0x9568,
+0x54C1=>0x9569,
+0x5F6C=>0x956A,
+0x658C=>0x956B,
+0x6D5C=>0x956C,
+0x7015=>0x956D,
+0x8CA7=>0x956E,
+0x8CD3=>0x956F,
+0x983B=>0x9570,
+0x654F=>0x9571,
+0x74F6=>0x9572,
+0x4E0D=>0x9573,
+0x4ED8=>0x9574,
+0x57E0=>0x9575,
+0x592B=>0x9576,
+0x5A66=>0x9577,
+0x5BCC=>0x9578,
+0x51A8=>0x9579,
+0x5E03=>0x957A,
+0x5E9C=>0x957B,
+0x6016=>0x957C,
+0x6276=>0x957D,
+0x6577=>0x957E,
+0x65A7=>0x9580,
+0x666E=>0x9581,
+0x6D6E=>0x9582,
+0x7236=>0x9583,
+0x7B26=>0x9584,
+0x8150=>0x9585,
+0x819A=>0x9586,
+0x8299=>0x9587,
+0x8B5C=>0x9588,
+0x8CA0=>0x9589,
+0x8CE6=>0x958A,
+0x8D74=>0x958B,
+0x961C=>0x958C,
+0x9644=>0x958D,
+0x4FAE=>0x958E,
+0x64AB=>0x958F,
+0x6B66=>0x9590,
+0x821E=>0x9591,
+0x8461=>0x9592,
+0x856A=>0x9593,
+0x90E8=>0x9594,
+0x5C01=>0x9595,
+0x6953=>0x9596,
+0x98A8=>0x9597,
+0x847A=>0x9598,
+0x8557=>0x9599,
+0x4F0F=>0x959A,
+0x526F=>0x959B,
+0x5FA9=>0x959C,
+0x5E45=>0x959D,
+0x670D=>0x959E,
+0x798F=>0x959F,
+0x8179=>0x95A0,
+0x8907=>0x95A1,
+0x8986=>0x95A2,
+0x6DF5=>0x95A3,
+0x5F17=>0x95A4,
+0x6255=>0x95A5,
+0x6CB8=>0x95A6,
+0x4ECF=>0x95A7,
+0x7269=>0x95A8,
+0x9B92=>0x95A9,
+0x5206=>0x95AA,
+0x543B=>0x95AB,
+0x5674=>0x95AC,
+0x58B3=>0x95AD,
+0x61A4=>0x95AE,
+0x626E=>0x95AF,
+0x711A=>0x95B0,
+0x596E=>0x95B1,
+0x7C89=>0x95B2,
+0x7CDE=>0x95B3,
+0x7D1B=>0x95B4,
+0x96F0=>0x95B5,
+0x6587=>0x95B6,
+0x805E=>0x95B7,
+0x4E19=>0x95B8,
+0x4F75=>0x95B9,
+0x5175=>0x95BA,
+0x5840=>0x95BB,
+0x5E63=>0x95BC,
+0x5E73=>0x95BD,
+0x5F0A=>0x95BE,
+0x67C4=>0x95BF,
+0x4E26=>0x95C0,
+0x853D=>0x95C1,
+0x9589=>0x95C2,
+0x965B=>0x95C3,
+0x7C73=>0x95C4,
+0x9801=>0x95C5,
+0x50FB=>0x95C6,
+0x58C1=>0x95C7,
+0x7656=>0x95C8,
+0x78A7=>0x95C9,
+0x5225=>0x95CA,
+0x77A5=>0x95CB,
+0x8511=>0x95CC,
+0x7B86=>0x95CD,
+0x504F=>0x95CE,
+0x5909=>0x95CF,
+0x7247=>0x95D0,
+0x7BC7=>0x95D1,
+0x7DE8=>0x95D2,
+0x8FBA=>0x95D3,
+0x8FD4=>0x95D4,
+0x904D=>0x95D5,
+0x4FBF=>0x95D6,
+0x52C9=>0x95D7,
+0x5A29=>0x95D8,
+0x5F01=>0x95D9,
+0x97AD=>0x95DA,
+0x4FDD=>0x95DB,
+0x8217=>0x95DC,
+0x92EA=>0x95DD,
+0x5703=>0x95DE,
+0x6355=>0x95DF,
+0x6B69=>0x95E0,
+0x752B=>0x95E1,
+0x88DC=>0x95E2,
+0x8F14=>0x95E3,
+0x7A42=>0x95E4,
+0x52DF=>0x95E5,
+0x5893=>0x95E6,
+0x6155=>0x95E7,
+0x620A=>0x95E8,
+0x66AE=>0x95E9,
+0x6BCD=>0x95EA,
+0x7C3F=>0x95EB,
+0x83E9=>0x95EC,
+0x5023=>0x95ED,
+0x4FF8=>0x95EE,
+0x5305=>0x95EF,
+0x5446=>0x95F0,
+0x5831=>0x95F1,
+0x5949=>0x95F2,
+0x5B9D=>0x95F3,
+0x5CF0=>0x95F4,
+0x5CEF=>0x95F5,
+0x5D29=>0x95F6,
+0x5E96=>0x95F7,
+0x62B1=>0x95F8,
+0x6367=>0x95F9,
+0x653E=>0x95FA,
+0x65B9=>0x95FB,
+0x670B=>0x95FC,
+0x6CD5=>0x9640,
+0x6CE1=>0x9641,
+0x70F9=>0x9642,
+0x7832=>0x9643,
+0x7E2B=>0x9644,
+0x80DE=>0x9645,
+0x82B3=>0x9646,
+0x840C=>0x9647,
+0x84EC=>0x9648,
+0x8702=>0x9649,
+0x8912=>0x964A,
+0x8A2A=>0x964B,
+0x8C4A=>0x964C,
+0x90A6=>0x964D,
+0x92D2=>0x964E,
+0x98FD=>0x964F,
+0x9CF3=>0x9650,
+0x9D6C=>0x9651,
+0x4E4F=>0x9652,
+0x4EA1=>0x9653,
+0x508D=>0x9654,
+0x5256=>0x9655,
+0x574A=>0x9656,
+0x59A8=>0x9657,
+0x5E3D=>0x9658,
+0x5FD8=>0x9659,
+0x5FD9=>0x965A,
+0x623F=>0x965B,
+0x66B4=>0x965C,
+0x671B=>0x965D,
+0x67D0=>0x965E,
+0x68D2=>0x965F,
+0x5192=>0x9660,
+0x7D21=>0x9661,
+0x80AA=>0x9662,
+0x81A8=>0x9663,
+0x8B00=>0x9664,
+0x8C8C=>0x9665,
+0x8CBF=>0x9666,
+0x927E=>0x9667,
+0x9632=>0x9668,
+0x5420=>0x9669,
+0x982C=>0x966A,
+0x5317=>0x966B,
+0x50D5=>0x966C,
+0x535C=>0x966D,
+0x58A8=>0x966E,
+0x64B2=>0x966F,
+0x6734=>0x9670,
+0x7267=>0x9671,
+0x7766=>0x9672,
+0x7A46=>0x9673,
+0x91E6=>0x9674,
+0x52C3=>0x9675,
+0x6CA1=>0x9676,
+0x6B86=>0x9677,
+0x5800=>0x9678,
+0x5E4C=>0x9679,
+0x5954=>0x967A,
+0x672C=>0x967B,
+0x7FFB=>0x967C,
+0x51E1=>0x967D,
+0x76C6=>0x967E,
+0x6469=>0x9680,
+0x78E8=>0x9681,
+0x9B54=>0x9682,
+0x9EBB=>0x9683,
+0x57CB=>0x9684,
+0x59B9=>0x9685,
+0x6627=>0x9686,
+0x679A=>0x9687,
+0x6BCE=>0x9688,
+0x54E9=>0x9689,
+0x69D9=>0x968A,
+0x5E55=>0x968B,
+0x819C=>0x968C,
+0x6795=>0x968D,
+0x9BAA=>0x968E,
+0x67FE=>0x968F,
+0x9C52=>0x9690,
+0x685D=>0x9691,
+0x4EA6=>0x9692,
+0x4FE3=>0x9693,
+0x53C8=>0x9694,
+0x62B9=>0x9695,
+0x672B=>0x9696,
+0x6CAB=>0x9697,
+0x8FC4=>0x9698,
+0x4FAD=>0x9699,
+0x7E6D=>0x969A,
+0x9EBF=>0x969B,
+0x4E07=>0x969C,
+0x6162=>0x969D,
+0x6E80=>0x969E,
+0x6F2B=>0x969F,
+0x8513=>0x96A0,
+0x5473=>0x96A1,
+0x672A=>0x96A2,
+0x9B45=>0x96A3,
+0x5DF3=>0x96A4,
+0x7B95=>0x96A5,
+0x5CAC=>0x96A6,
+0x5BC6=>0x96A7,
+0x871C=>0x96A8,
+0x6E4A=>0x96A9,
+0x84D1=>0x96AA,
+0x7A14=>0x96AB,
+0x8108=>0x96AC,
+0x5999=>0x96AD,
+0x7C8D=>0x96AE,
+0x6C11=>0x96AF,
+0x7720=>0x96B0,
+0x52D9=>0x96B1,
+0x5922=>0x96B2,
+0x7121=>0x96B3,
+0x725F=>0x96B4,
+0x77DB=>0x96B5,
+0x9727=>0x96B6,
+0x9D61=>0x96B7,
+0x690B=>0x96B8,
+0x5A7F=>0x96B9,
+0x5A18=>0x96BA,
+0x51A5=>0x96BB,
+0x540D=>0x96BC,
+0x547D=>0x96BD,
+0x660E=>0x96BE,
+0x76DF=>0x96BF,
+0x8FF7=>0x96C0,
+0x9298=>0x96C1,
+0x9CF4=>0x96C2,
+0x59EA=>0x96C3,
+0x725D=>0x96C4,
+0x6EC5=>0x96C5,
+0x514D=>0x96C6,
+0x68C9=>0x96C7,
+0x7DBF=>0x96C8,
+0x7DEC=>0x96C9,
+0x9762=>0x96CA,
+0x9EBA=>0x96CB,
+0x6478=>0x96CC,
+0x6A21=>0x96CD,
+0x8302=>0x96CE,
+0x5984=>0x96CF,
+0x5B5F=>0x96D0,
+0x6BDB=>0x96D1,
+0x731B=>0x96D2,
+0x76F2=>0x96D3,
+0x7DB2=>0x96D4,
+0x8017=>0x96D5,
+0x8499=>0x96D6,
+0x5132=>0x96D7,
+0x6728=>0x96D8,
+0x9ED9=>0x96D9,
+0x76EE=>0x96DA,
+0x6762=>0x96DB,
+0x52FF=>0x96DC,
+0x9905=>0x96DD,
+0x5C24=>0x96DE,
+0x623B=>0x96DF,
+0x7C7E=>0x96E0,
+0x8CB0=>0x96E1,
+0x554F=>0x96E2,
+0x60B6=>0x96E3,
+0x7D0B=>0x96E4,
+0x9580=>0x96E5,
+0x5301=>0x96E6,
+0x4E5F=>0x96E7,
+0x51B6=>0x96E8,
+0x591C=>0x96E9,
+0x723A=>0x96EA,
+0x8036=>0x96EB,
+0x91CE=>0x96EC,
+0x5F25=>0x96ED,
+0x77E2=>0x96EE,
+0x5384=>0x96EF,
+0x5F79=>0x96F0,
+0x7D04=>0x96F1,
+0x85AC=>0x96F2,
+0x8A33=>0x96F3,
+0x8E8D=>0x96F4,
+0x9756=>0x96F5,
+0x67F3=>0x96F6,
+0x85AE=>0x96F7,
+0x9453=>0x96F8,
+0x6109=>0x96F9,
+0x6108=>0x96FA,
+0x6CB9=>0x96FB,
+0x7652=>0x96FC,
+0x8AED=>0x9740,
+0x8F38=>0x9741,
+0x552F=>0x9742,
+0x4F51=>0x9743,
+0x512A=>0x9744,
+0x52C7=>0x9745,
+0x53CB=>0x9746,
+0x5BA5=>0x9747,
+0x5E7D=>0x9748,
+0x60A0=>0x9749,
+0x6182=>0x974A,
+0x63D6=>0x974B,
+0x6709=>0x974C,
+0x67DA=>0x974D,
+0x6E67=>0x974E,
+0x6D8C=>0x974F,
+0x7336=>0x9750,
+0x7337=>0x9751,
+0x7531=>0x9752,
+0x7950=>0x9753,
+0x88D5=>0x9754,
+0x8A98=>0x9755,
+0x904A=>0x9756,
+0x9091=>0x9757,
+0x90F5=>0x9758,
+0x96C4=>0x9759,
+0x878D=>0x975A,
+0x5915=>0x975B,
+0x4E88=>0x975C,
+0x4F59=>0x975D,
+0x4E0E=>0x975E,
+0x8A89=>0x975F,
+0x8F3F=>0x9760,
+0x9810=>0x9761,
+0x50AD=>0x9762,
+0x5E7C=>0x9763,
+0x5996=>0x9764,
+0x5BB9=>0x9765,
+0x5EB8=>0x9766,
+0x63DA=>0x9767,
+0x63FA=>0x9768,
+0x64C1=>0x9769,
+0x66DC=>0x976A,
+0x694A=>0x976B,
+0x69D8=>0x976C,
+0x6D0B=>0x976D,
+0x6EB6=>0x976E,
+0x7194=>0x976F,
+0x7528=>0x9770,
+0x7AAF=>0x9771,
+0x7F8A=>0x9772,
+0x8000=>0x9773,
+0x8449=>0x9774,
+0x84C9=>0x9775,
+0x8981=>0x9776,
+0x8B21=>0x9777,
+0x8E0A=>0x9778,
+0x9065=>0x9779,
+0x967D=>0x977A,
+0x990A=>0x977B,
+0x617E=>0x977C,
+0x6291=>0x977D,
+0x6B32=>0x977E,
+0x6C83=>0x9780,
+0x6D74=>0x9781,
+0x7FCC=>0x9782,
+0x7FFC=>0x9783,
+0x6DC0=>0x9784,
+0x7F85=>0x9785,
+0x87BA=>0x9786,
+0x88F8=>0x9787,
+0x6765=>0x9788,
+0x83B1=>0x9789,
+0x983C=>0x978A,
+0x96F7=>0x978B,
+0x6D1B=>0x978C,
+0x7D61=>0x978D,
+0x843D=>0x978E,
+0x916A=>0x978F,
+0x4E71=>0x9790,
+0x5375=>0x9791,
+0x5D50=>0x9792,
+0x6B04=>0x9793,
+0x6FEB=>0x9794,
+0x85CD=>0x9795,
+0x862D=>0x9796,
+0x89A7=>0x9797,
+0x5229=>0x9798,
+0x540F=>0x9799,
+0x5C65=>0x979A,
+0x674E=>0x979B,
+0x68A8=>0x979C,
+0x7406=>0x979D,
+0x7483=>0x979E,
+0x75E2=>0x979F,
+0x88CF=>0x97A0,
+0x88E1=>0x97A1,
+0x91CC=>0x97A2,
+0x96E2=>0x97A3,
+0x9678=>0x97A4,
+0x5F8B=>0x97A5,
+0x7387=>0x97A6,
+0x7ACB=>0x97A7,
+0x844E=>0x97A8,
+0x63A0=>0x97A9,
+0x7565=>0x97AA,
+0x5289=>0x97AB,
+0x6D41=>0x97AC,
+0x6E9C=>0x97AD,
+0x7409=>0x97AE,
+0x7559=>0x97AF,
+0x786B=>0x97B0,
+0x7C92=>0x97B1,
+0x9686=>0x97B2,
+0x7ADC=>0x97B3,
+0x9F8D=>0x97B4,
+0x4FB6=>0x97B5,
+0x616E=>0x97B6,
+0x65C5=>0x97B7,
+0x865C=>0x97B8,
+0x4E86=>0x97B9,
+0x4EAE=>0x97BA,
+0x50DA=>0x97BB,
+0x4E21=>0x97BC,
+0x51CC=>0x97BD,
+0x5BEE=>0x97BE,
+0x6599=>0x97BF,
+0x6881=>0x97C0,
+0x6DBC=>0x97C1,
+0x731F=>0x97C2,
+0x7642=>0x97C3,
+0x77AD=>0x97C4,
+0x7A1C=>0x97C5,
+0x7CE7=>0x97C6,
+0x826F=>0x97C7,
+0x8AD2=>0x97C8,
+0x907C=>0x97C9,
+0x91CF=>0x97CA,
+0x9675=>0x97CB,
+0x9818=>0x97CC,
+0x529B=>0x97CD,
+0x7DD1=>0x97CE,
+0x502B=>0x97CF,
+0x5398=>0x97D0,
+0x6797=>0x97D1,
+0x6DCB=>0x97D2,
+0x71D0=>0x97D3,
+0x7433=>0x97D4,
+0x81E8=>0x97D5,
+0x8F2A=>0x97D6,
+0x96A3=>0x97D7,
+0x9C57=>0x97D8,
+0x9E9F=>0x97D9,
+0x7460=>0x97DA,
+0x5841=>0x97DB,
+0x6D99=>0x97DC,
+0x7D2F=>0x97DD,
+0x985E=>0x97DE,
+0x4EE4=>0x97DF,
+0x4F36=>0x97E0,
+0x4F8B=>0x97E1,
+0x51B7=>0x97E2,
+0x52B1=>0x97E3,
+0x5DBA=>0x97E4,
+0x601C=>0x97E5,
+0x73B2=>0x97E6,
+0x793C=>0x97E7,
+0x82D3=>0x97E8,
+0x9234=>0x97E9,
+0x96B7=>0x97EA,
+0x96F6=>0x97EB,
+0x970A=>0x97EC,
+0x9E97=>0x97ED,
+0x9F62=>0x97EE,
+0x66A6=>0x97EF,
+0x6B74=>0x97F0,
+0x5217=>0x97F1,
+0x52A3=>0x97F2,
+0x70C8=>0x97F3,
+0x88C2=>0x97F4,
+0x5EC9=>0x97F5,
+0x604B=>0x97F6,
+0x6190=>0x97F7,
+0x6F23=>0x97F8,
+0x7149=>0x97F9,
+0x7C3E=>0x97FA,
+0x7DF4=>0x97FB,
+0x806F=>0x97FC,
+0x84EE=>0x9840,
+0x9023=>0x9841,
+0x932C=>0x9842,
+0x5442=>0x9843,
+0x9B6F=>0x9844,
+0x6AD3=>0x9845,
+0x7089=>0x9846,
+0x8CC2=>0x9847,
+0x8DEF=>0x9848,
+0x9732=>0x9849,
+0x52B4=>0x984A,
+0x5A41=>0x984B,
+0x5ECA=>0x984C,
+0x5F04=>0x984D,
+0x6717=>0x984E,
+0x697C=>0x984F,
+0x6994=>0x9850,
+0x6D6A=>0x9851,
+0x6F0F=>0x9852,
+0x7262=>0x9853,
+0x72FC=>0x9854,
+0x7BED=>0x9855,
+0x8001=>0x9856,
+0x807E=>0x9857,
+0x874B=>0x9858,
+0x90CE=>0x9859,
+0x516D=>0x985A,
+0x9E93=>0x985B,
+0x7984=>0x985C,
+0x808B=>0x985D,
+0x9332=>0x985E,
+0x8AD6=>0x985F,
+0x502D=>0x9860,
+0x548C=>0x9861,
+0x8A71=>0x9862,
+0x6B6A=>0x9863,
+0x8CC4=>0x9864,
+0x8107=>0x9865,
+0x60D1=>0x9866,
+0x67A0=>0x9867,
+0x9DF2=>0x9868,
+0x4E99=>0x9869,
+0x4E98=>0x986A,
+0x9C10=>0x986B,
+0x8A6B=>0x986C,
+0x85C1=>0x986D,
+0x8568=>0x986E,
+0x6900=>0x986F,
+0x6E7E=>0x9870,
+0x7897=>0x9871,
+0x8155=>0x9872,
+0x5F0C=>0x989F,
+0x4E10=>0x98A0,
+0x4E15=>0x98A1,
+0x4E2A=>0x98A2,
+0x4E31=>0x98A3,
+0x4E36=>0x98A4,
+0x4E3C=>0x98A5,
+0x4E3F=>0x98A6,
+0x4E42=>0x98A7,
+0x4E56=>0x98A8,
+0x4E58=>0x98A9,
+0x4E82=>0x98AA,
+0x4E85=>0x98AB,
+0x8C6B=>0x98AC,
+0x4E8A=>0x98AD,
+0x8212=>0x98AE,
+0x5F0D=>0x98AF,
+0x4E8E=>0x98B0,
+0x4E9E=>0x98B1,
+0x4E9F=>0x98B2,
+0x4EA0=>0x98B3,
+0x4EA2=>0x98B4,
+0x4EB0=>0x98B5,
+0x4EB3=>0x98B6,
+0x4EB6=>0x98B7,
+0x4ECE=>0x98B8,
+0x4ECD=>0x98B9,
+0x4EC4=>0x98BA,
+0x4EC6=>0x98BB,
+0x4EC2=>0x98BC,
+0x4ED7=>0x98BD,
+0x4EDE=>0x98BE,
+0x4EED=>0x98BF,
+0x4EDF=>0x98C0,
+0x4EF7=>0x98C1,
+0x4F09=>0x98C2,
+0x4F5A=>0x98C3,
+0x4F30=>0x98C4,
+0x4F5B=>0x98C5,
+0x4F5D=>0x98C6,
+0x4F57=>0x98C7,
+0x4F47=>0x98C8,
+0x4F76=>0x98C9,
+0x4F88=>0x98CA,
+0x4F8F=>0x98CB,
+0x4F98=>0x98CC,
+0x4F7B=>0x98CD,
+0x4F69=>0x98CE,
+0x4F70=>0x98CF,
+0x4F91=>0x98D0,
+0x4F6F=>0x98D1,
+0x4F86=>0x98D2,
+0x4F96=>0x98D3,
+0x5118=>0x98D4,
+0x4FD4=>0x98D5,
+0x4FDF=>0x98D6,
+0x4FCE=>0x98D7,
+0x4FD8=>0x98D8,
+0x4FDB=>0x98D9,
+0x4FD1=>0x98DA,
+0x4FDA=>0x98DB,
+0x4FD0=>0x98DC,
+0x4FE4=>0x98DD,
+0x4FE5=>0x98DE,
+0x501A=>0x98DF,
+0x5028=>0x98E0,
+0x5014=>0x98E1,
+0x502A=>0x98E2,
+0x5025=>0x98E3,
+0x5005=>0x98E4,
+0x4F1C=>0x98E5,
+0x4FF6=>0x98E6,
+0x5021=>0x98E7,
+0x5029=>0x98E8,
+0x502C=>0x98E9,
+0x4FFE=>0x98EA,
+0x4FEF=>0x98EB,
+0x5011=>0x98EC,
+0x5006=>0x98ED,
+0x5043=>0x98EE,
+0x5047=>0x98EF,
+0x6703=>0x98F0,
+0x5055=>0x98F1,
+0x5050=>0x98F2,
+0x5048=>0x98F3,
+0x505A=>0x98F4,
+0x5056=>0x98F5,
+0x506C=>0x98F6,
+0x5078=>0x98F7,
+0x5080=>0x98F8,
+0x509A=>0x98F9,
+0x5085=>0x98FA,
+0x50B4=>0x98FB,
+0x50B2=>0x98FC,
+0x50C9=>0x9940,
+0x50CA=>0x9941,
+0x50B3=>0x9942,
+0x50C2=>0x9943,
+0x50D6=>0x9944,
+0x50DE=>0x9945,
+0x50E5=>0x9946,
+0x50ED=>0x9947,
+0x50E3=>0x9948,
+0x50EE=>0x9949,
+0x50F9=>0x994A,
+0x50F5=>0x994B,
+0x5109=>0x994C,
+0x5101=>0x994D,
+0x5102=>0x994E,
+0x5116=>0x994F,
+0x5115=>0x9950,
+0x5114=>0x9951,
+0x511A=>0x9952,
+0x5121=>0x9953,
+0x513A=>0x9954,
+0x5137=>0x9955,
+0x513C=>0x9956,
+0x513B=>0x9957,
+0x513F=>0x9958,
+0x5140=>0x9959,
+0x5152=>0x995A,
+0x514C=>0x995B,
+0x5154=>0x995C,
+0x5162=>0x995D,
+0x7AF8=>0x995E,
+0x5169=>0x995F,
+0x516A=>0x9960,
+0x516E=>0x9961,
+0x5180=>0x9962,
+0x5182=>0x9963,
+0x56D8=>0x9964,
+0x518C=>0x9965,
+0x5189=>0x9966,
+0x518F=>0x9967,
+0x5191=>0x9968,
+0x5193=>0x9969,
+0x5195=>0x996A,
+0x5196=>0x996B,
+0x51A4=>0x996C,
+0x51A6=>0x996D,
+0x51A2=>0x996E,
+0x51A9=>0x996F,
+0x51AA=>0x9970,
+0x51AB=>0x9971,
+0x51B3=>0x9972,
+0x51B1=>0x9973,
+0x51B2=>0x9974,
+0x51B0=>0x9975,
+0x51B5=>0x9976,
+0x51BD=>0x9977,
+0x51C5=>0x9978,
+0x51C9=>0x9979,
+0x51DB=>0x997A,
+0x51E0=>0x997B,
+0x8655=>0x997C,
+0x51E9=>0x997D,
+0x51ED=>0x997E,
+0x51F0=>0x9980,
+0x51F5=>0x9981,
+0x51FE=>0x9982,
+0x5204=>0x9983,
+0x520B=>0x9984,
+0x5214=>0x9985,
+0x520E=>0x9986,
+0x5227=>0x9987,
+0x522A=>0x9988,
+0x522E=>0x9989,
+0x5233=>0x998A,
+0x5239=>0x998B,
+0x524F=>0x998C,
+0x5244=>0x998D,
+0x524B=>0x998E,
+0x524C=>0x998F,
+0x525E=>0x9990,
+0x5254=>0x9991,
+0x526A=>0x9992,
+0x5274=>0x9993,
+0x5269=>0x9994,
+0x5273=>0x9995,
+0x527F=>0x9996,
+0x527D=>0x9997,
+0x528D=>0x9998,
+0x5294=>0x9999,
+0x5292=>0x999A,
+0x5271=>0x999B,
+0x5288=>0x999C,
+0x5291=>0x999D,
+0x8FA8=>0x999E,
+0x8FA7=>0x999F,
+0x52AC=>0x99A0,
+0x52AD=>0x99A1,
+0x52BC=>0x99A2,
+0x52B5=>0x99A3,
+0x52C1=>0x99A4,
+0x52CD=>0x99A5,
+0x52D7=>0x99A6,
+0x52DE=>0x99A7,
+0x52E3=>0x99A8,
+0x52E6=>0x99A9,
+0x98ED=>0x99AA,
+0x52E0=>0x99AB,
+0x52F3=>0x99AC,
+0x52F5=>0x99AD,
+0x52F8=>0x99AE,
+0x52F9=>0x99AF,
+0x5306=>0x99B0,
+0x5308=>0x99B1,
+0x7538=>0x99B2,
+0x530D=>0x99B3,
+0x5310=>0x99B4,
+0x530F=>0x99B5,
+0x5315=>0x99B6,
+0x531A=>0x99B7,
+0x5323=>0x99B8,
+0x532F=>0x99B9,
+0x5331=>0x99BA,
+0x5333=>0x99BB,
+0x5338=>0x99BC,
+0x5340=>0x99BD,
+0x5346=>0x99BE,
+0x5345=>0x99BF,
+0x4E17=>0x99C0,
+0x5349=>0x99C1,
+0x534D=>0x99C2,
+0x51D6=>0x99C3,
+0x535E=>0x99C4,
+0x5369=>0x99C5,
+0x536E=>0x99C6,
+0x5918=>0x99C7,
+0x537B=>0x99C8,
+0x5377=>0x99C9,
+0x5382=>0x99CA,
+0x5396=>0x99CB,
+0x53A0=>0x99CC,
+0x53A6=>0x99CD,
+0x53A5=>0x99CE,
+0x53AE=>0x99CF,
+0x53B0=>0x99D0,
+0x53B6=>0x99D1,
+0x53C3=>0x99D2,
+0x7C12=>0x99D3,
+0x96D9=>0x99D4,
+0x53DF=>0x99D5,
+0x66FC=>0x99D6,
+0x71EE=>0x99D7,
+0x53EE=>0x99D8,
+0x53E8=>0x99D9,
+0x53ED=>0x99DA,
+0x53FA=>0x99DB,
+0x5401=>0x99DC,
+0x543D=>0x99DD,
+0x5440=>0x99DE,
+0x542C=>0x99DF,
+0x542D=>0x99E0,
+0x543C=>0x99E1,
+0x542E=>0x99E2,
+0x5436=>0x99E3,
+0x5429=>0x99E4,
+0x541D=>0x99E5,
+0x544E=>0x99E6,
+0x548F=>0x99E7,
+0x5475=>0x99E8,
+0x548E=>0x99E9,
+0x545F=>0x99EA,
+0x5471=>0x99EB,
+0x5477=>0x99EC,
+0x5470=>0x99ED,
+0x5492=>0x99EE,
+0x547B=>0x99EF,
+0x5480=>0x99F0,
+0x5476=>0x99F1,
+0x5484=>0x99F2,
+0x5490=>0x99F3,
+0x5486=>0x99F4,
+0x54C7=>0x99F5,
+0x54A2=>0x99F6,
+0x54B8=>0x99F7,
+0x54A5=>0x99F8,
+0x54AC=>0x99F9,
+0x54C4=>0x99FA,
+0x54C8=>0x99FB,
+0x54A8=>0x99FC,
+0x54AB=>0x9A40,
+0x54C2=>0x9A41,
+0x54A4=>0x9A42,
+0x54BE=>0x9A43,
+0x54BC=>0x9A44,
+0x54D8=>0x9A45,
+0x54E5=>0x9A46,
+0x54E6=>0x9A47,
+0x550F=>0x9A48,
+0x5514=>0x9A49,
+0x54FD=>0x9A4A,
+0x54EE=>0x9A4B,
+0x54ED=>0x9A4C,
+0x54FA=>0x9A4D,
+0x54E2=>0x9A4E,
+0x5539=>0x9A4F,
+0x5540=>0x9A50,
+0x5563=>0x9A51,
+0x554C=>0x9A52,
+0x552E=>0x9A53,
+0x555C=>0x9A54,
+0x5545=>0x9A55,
+0x5556=>0x9A56,
+0x5557=>0x9A57,
+0x5538=>0x9A58,
+0x5533=>0x9A59,
+0x555D=>0x9A5A,
+0x5599=>0x9A5B,
+0x5580=>0x9A5C,
+0x54AF=>0x9A5D,
+0x558A=>0x9A5E,
+0x559F=>0x9A5F,
+0x557B=>0x9A60,
+0x557E=>0x9A61,
+0x5598=>0x9A62,
+0x559E=>0x9A63,
+0x55AE=>0x9A64,
+0x557C=>0x9A65,
+0x5583=>0x9A66,
+0x55A9=>0x9A67,
+0x5587=>0x9A68,
+0x55A8=>0x9A69,
+0x55DA=>0x9A6A,
+0x55C5=>0x9A6B,
+0x55DF=>0x9A6C,
+0x55C4=>0x9A6D,
+0x55DC=>0x9A6E,
+0x55E4=>0x9A6F,
+0x55D4=>0x9A70,
+0x5614=>0x9A71,
+0x55F7=>0x9A72,
+0x5616=>0x9A73,
+0x55FE=>0x9A74,
+0x55FD=>0x9A75,
+0x561B=>0x9A76,
+0x55F9=>0x9A77,
+0x564E=>0x9A78,
+0x5650=>0x9A79,
+0x71DF=>0x9A7A,
+0x5634=>0x9A7B,
+0x5636=>0x9A7C,
+0x5632=>0x9A7D,
+0x5638=>0x9A7E,
+0x566B=>0x9A80,
+0x5664=>0x9A81,
+0x562F=>0x9A82,
+0x566C=>0x9A83,
+0x566A=>0x9A84,
+0x5686=>0x9A85,
+0x5680=>0x9A86,
+0x568A=>0x9A87,
+0x56A0=>0x9A88,
+0x5694=>0x9A89,
+0x568F=>0x9A8A,
+0x56A5=>0x9A8B,
+0x56AE=>0x9A8C,
+0x56B6=>0x9A8D,
+0x56B4=>0x9A8E,
+0x56C2=>0x9A8F,
+0x56BC=>0x9A90,
+0x56C1=>0x9A91,
+0x56C3=>0x9A92,
+0x56C0=>0x9A93,
+0x56C8=>0x9A94,
+0x56CE=>0x9A95,
+0x56D1=>0x9A96,
+0x56D3=>0x9A97,
+0x56D7=>0x9A98,
+0x56EE=>0x9A99,
+0x56F9=>0x9A9A,
+0x5700=>0x9A9B,
+0x56FF=>0x9A9C,
+0x5704=>0x9A9D,
+0x5709=>0x9A9E,
+0x5708=>0x9A9F,
+0x570B=>0x9AA0,
+0x570D=>0x9AA1,
+0x5713=>0x9AA2,
+0x5718=>0x9AA3,
+0x5716=>0x9AA4,
+0x55C7=>0x9AA5,
+0x571C=>0x9AA6,
+0x5726=>0x9AA7,
+0x5737=>0x9AA8,
+0x5738=>0x9AA9,
+0x574E=>0x9AAA,
+0x573B=>0x9AAB,
+0x5740=>0x9AAC,
+0x574F=>0x9AAD,
+0x5769=>0x9AAE,
+0x57C0=>0x9AAF,
+0x5788=>0x9AB0,
+0x5761=>0x9AB1,
+0x577F=>0x9AB2,
+0x5789=>0x9AB3,
+0x5793=>0x9AB4,
+0x57A0=>0x9AB5,
+0x57B3=>0x9AB6,
+0x57A4=>0x9AB7,
+0x57AA=>0x9AB8,
+0x57B0=>0x9AB9,
+0x57C3=>0x9ABA,
+0x57C6=>0x9ABB,
+0x57D4=>0x9ABC,
+0x57D2=>0x9ABD,
+0x57D3=>0x9ABE,
+0x580A=>0x9ABF,
+0x57D6=>0x9AC0,
+0x57E3=>0x9AC1,
+0x580B=>0x9AC2,
+0x5819=>0x9AC3,
+0x581D=>0x9AC4,
+0x5872=>0x9AC5,
+0x5821=>0x9AC6,
+0x5862=>0x9AC7,
+0x584B=>0x9AC8,
+0x5870=>0x9AC9,
+0x6BC0=>0x9ACA,
+0x5852=>0x9ACB,
+0x583D=>0x9ACC,
+0x5879=>0x9ACD,
+0x5885=>0x9ACE,
+0x58B9=>0x9ACF,
+0x589F=>0x9AD0,
+0x58AB=>0x9AD1,
+0x58BA=>0x9AD2,
+0x58DE=>0x9AD3,
+0x58BB=>0x9AD4,
+0x58B8=>0x9AD5,
+0x58AE=>0x9AD6,
+0x58C5=>0x9AD7,
+0x58D3=>0x9AD8,
+0x58D1=>0x9AD9,
+0x58D7=>0x9ADA,
+0x58D9=>0x9ADB,
+0x58D8=>0x9ADC,
+0x58E5=>0x9ADD,
+0x58DC=>0x9ADE,
+0x58E4=>0x9ADF,
+0x58DF=>0x9AE0,
+0x58EF=>0x9AE1,
+0x58FA=>0x9AE2,
+0x58F9=>0x9AE3,
+0x58FB=>0x9AE4,
+0x58FC=>0x9AE5,
+0x58FD=>0x9AE6,
+0x5902=>0x9AE7,
+0x590A=>0x9AE8,
+0x5910=>0x9AE9,
+0x591B=>0x9AEA,
+0x68A6=>0x9AEB,
+0x5925=>0x9AEC,
+0x592C=>0x9AED,
+0x592D=>0x9AEE,
+0x5932=>0x9AEF,
+0x5938=>0x9AF0,
+0x593E=>0x9AF1,
+0x7AD2=>0x9AF2,
+0x5955=>0x9AF3,
+0x5950=>0x9AF4,
+0x594E=>0x9AF5,
+0x595A=>0x9AF6,
+0x5958=>0x9AF7,
+0x5962=>0x9AF8,
+0x5960=>0x9AF9,
+0x5967=>0x9AFA,
+0x596C=>0x9AFB,
+0x5969=>0x9AFC,
+0x5978=>0x9B40,
+0x5981=>0x9B41,
+0x599D=>0x9B42,
+0x4F5E=>0x9B43,
+0x4FAB=>0x9B44,
+0x59A3=>0x9B45,
+0x59B2=>0x9B46,
+0x59C6=>0x9B47,
+0x59E8=>0x9B48,
+0x59DC=>0x9B49,
+0x598D=>0x9B4A,
+0x59D9=>0x9B4B,
+0x59DA=>0x9B4C,
+0x5A25=>0x9B4D,
+0x5A1F=>0x9B4E,
+0x5A11=>0x9B4F,
+0x5A1C=>0x9B50,
+0x5A09=>0x9B51,
+0x5A1A=>0x9B52,
+0x5A40=>0x9B53,
+0x5A6C=>0x9B54,
+0x5A49=>0x9B55,
+0x5A35=>0x9B56,
+0x5A36=>0x9B57,
+0x5A62=>0x9B58,
+0x5A6A=>0x9B59,
+0x5A9A=>0x9B5A,
+0x5ABC=>0x9B5B,
+0x5ABE=>0x9B5C,
+0x5ACB=>0x9B5D,
+0x5AC2=>0x9B5E,
+0x5ABD=>0x9B5F,
+0x5AE3=>0x9B60,
+0x5AD7=>0x9B61,
+0x5AE6=>0x9B62,
+0x5AE9=>0x9B63,
+0x5AD6=>0x9B64,
+0x5AFA=>0x9B65,
+0x5AFB=>0x9B66,
+0x5B0C=>0x9B67,
+0x5B0B=>0x9B68,
+0x5B16=>0x9B69,
+0x5B32=>0x9B6A,
+0x5AD0=>0x9B6B,
+0x5B2A=>0x9B6C,
+0x5B36=>0x9B6D,
+0x5B3E=>0x9B6E,
+0x5B43=>0x9B6F,
+0x5B45=>0x9B70,
+0x5B40=>0x9B71,
+0x5B51=>0x9B72,
+0x5B55=>0x9B73,
+0x5B5A=>0x9B74,
+0x5B5B=>0x9B75,
+0x5B65=>0x9B76,
+0x5B69=>0x9B77,
+0x5B70=>0x9B78,
+0x5B73=>0x9B79,
+0x5B75=>0x9B7A,
+0x5B78=>0x9B7B,
+0x6588=>0x9B7C,
+0x5B7A=>0x9B7D,
+0x5B80=>0x9B7E,
+0x5B83=>0x9B80,
+0x5BA6=>0x9B81,
+0x5BB8=>0x9B82,
+0x5BC3=>0x9B83,
+0x5BC7=>0x9B84,
+0x5BC9=>0x9B85,
+0x5BD4=>0x9B86,
+0x5BD0=>0x9B87,
+0x5BE4=>0x9B88,
+0x5BE6=>0x9B89,
+0x5BE2=>0x9B8A,
+0x5BDE=>0x9B8B,
+0x5BE5=>0x9B8C,
+0x5BEB=>0x9B8D,
+0x5BF0=>0x9B8E,
+0x5BF6=>0x9B8F,
+0x5BF3=>0x9B90,
+0x5C05=>0x9B91,
+0x5C07=>0x9B92,
+0x5C08=>0x9B93,
+0x5C0D=>0x9B94,
+0x5C13=>0x9B95,
+0x5C20=>0x9B96,
+0x5C22=>0x9B97,
+0x5C28=>0x9B98,
+0x5C38=>0x9B99,
+0x5C39=>0x9B9A,
+0x5C41=>0x9B9B,
+0x5C46=>0x9B9C,
+0x5C4E=>0x9B9D,
+0x5C53=>0x9B9E,
+0x5C50=>0x9B9F,
+0x5C4F=>0x9BA0,
+0x5B71=>0x9BA1,
+0x5C6C=>0x9BA2,
+0x5C6E=>0x9BA3,
+0x4E62=>0x9BA4,
+0x5C76=>0x9BA5,
+0x5C79=>0x9BA6,
+0x5C8C=>0x9BA7,
+0x5C91=>0x9BA8,
+0x5C94=>0x9BA9,
+0x599B=>0x9BAA,
+0x5CAB=>0x9BAB,
+0x5CBB=>0x9BAC,
+0x5CB6=>0x9BAD,
+0x5CBC=>0x9BAE,
+0x5CB7=>0x9BAF,
+0x5CC5=>0x9BB0,
+0x5CBE=>0x9BB1,
+0x5CC7=>0x9BB2,
+0x5CD9=>0x9BB3,
+0x5CE9=>0x9BB4,
+0x5CFD=>0x9BB5,
+0x5CFA=>0x9BB6,
+0x5CED=>0x9BB7,
+0x5D8C=>0x9BB8,
+0x5CEA=>0x9BB9,
+0x5D0B=>0x9BBA,
+0x5D15=>0x9BBB,
+0x5D17=>0x9BBC,
+0x5D5C=>0x9BBD,
+0x5D1F=>0x9BBE,
+0x5D1B=>0x9BBF,
+0x5D11=>0x9BC0,
+0x5D14=>0x9BC1,
+0x5D22=>0x9BC2,
+0x5D1A=>0x9BC3,
+0x5D19=>0x9BC4,
+0x5D18=>0x9BC5,
+0x5D4C=>0x9BC6,
+0x5D52=>0x9BC7,
+0x5D4E=>0x9BC8,
+0x5D4B=>0x9BC9,
+0x5D6C=>0x9BCA,
+0x5D73=>0x9BCB,
+0x5D76=>0x9BCC,
+0x5D87=>0x9BCD,
+0x5D84=>0x9BCE,
+0x5D82=>0x9BCF,
+0x5DA2=>0x9BD0,
+0x5D9D=>0x9BD1,
+0x5DAC=>0x9BD2,
+0x5DAE=>0x9BD3,
+0x5DBD=>0x9BD4,
+0x5D90=>0x9BD5,
+0x5DB7=>0x9BD6,
+0x5DBC=>0x9BD7,
+0x5DC9=>0x9BD8,
+0x5DCD=>0x9BD9,
+0x5DD3=>0x9BDA,
+0x5DD2=>0x9BDB,
+0x5DD6=>0x9BDC,
+0x5DDB=>0x9BDD,
+0x5DEB=>0x9BDE,
+0x5DF2=>0x9BDF,
+0x5DF5=>0x9BE0,
+0x5E0B=>0x9BE1,
+0x5E1A=>0x9BE2,
+0x5E19=>0x9BE3,
+0x5E11=>0x9BE4,
+0x5E1B=>0x9BE5,
+0x5E36=>0x9BE6,
+0x5E37=>0x9BE7,
+0x5E44=>0x9BE8,
+0x5E43=>0x9BE9,
+0x5E40=>0x9BEA,
+0x5E4E=>0x9BEB,
+0x5E57=>0x9BEC,
+0x5E54=>0x9BED,
+0x5E5F=>0x9BEE,
+0x5E62=>0x9BEF,
+0x5E64=>0x9BF0,
+0x5E47=>0x9BF1,
+0x5E75=>0x9BF2,
+0x5E76=>0x9BF3,
+0x5E7A=>0x9BF4,
+0x9EBC=>0x9BF5,
+0x5E7F=>0x9BF6,
+0x5EA0=>0x9BF7,
+0x5EC1=>0x9BF8,
+0x5EC2=>0x9BF9,
+0x5EC8=>0x9BFA,
+0x5ED0=>0x9BFB,
+0x5ECF=>0x9BFC,
+0x5ED6=>0x9C40,
+0x5EE3=>0x9C41,
+0x5EDD=>0x9C42,
+0x5EDA=>0x9C43,
+0x5EDB=>0x9C44,
+0x5EE2=>0x9C45,
+0x5EE1=>0x9C46,
+0x5EE8=>0x9C47,
+0x5EE9=>0x9C48,
+0x5EEC=>0x9C49,
+0x5EF1=>0x9C4A,
+0x5EF3=>0x9C4B,
+0x5EF0=>0x9C4C,
+0x5EF4=>0x9C4D,
+0x5EF8=>0x9C4E,
+0x5EFE=>0x9C4F,
+0x5F03=>0x9C50,
+0x5F09=>0x9C51,
+0x5F5D=>0x9C52,
+0x5F5C=>0x9C53,
+0x5F0B=>0x9C54,
+0x5F11=>0x9C55,
+0x5F16=>0x9C56,
+0x5F29=>0x9C57,
+0x5F2D=>0x9C58,
+0x5F38=>0x9C59,
+0x5F41=>0x9C5A,
+0x5F48=>0x9C5B,
+0x5F4C=>0x9C5C,
+0x5F4E=>0x9C5D,
+0x5F2F=>0x9C5E,
+0x5F51=>0x9C5F,
+0x5F56=>0x9C60,
+0x5F57=>0x9C61,
+0x5F59=>0x9C62,
+0x5F61=>0x9C63,
+0x5F6D=>0x9C64,
+0x5F73=>0x9C65,
+0x5F77=>0x9C66,
+0x5F83=>0x9C67,
+0x5F82=>0x9C68,
+0x5F7F=>0x9C69,
+0x5F8A=>0x9C6A,
+0x5F88=>0x9C6B,
+0x5F91=>0x9C6C,
+0x5F87=>0x9C6D,
+0x5F9E=>0x9C6E,
+0x5F99=>0x9C6F,
+0x5F98=>0x9C70,
+0x5FA0=>0x9C71,
+0x5FA8=>0x9C72,
+0x5FAD=>0x9C73,
+0x5FBC=>0x9C74,
+0x5FD6=>0x9C75,
+0x5FFB=>0x9C76,
+0x5FE4=>0x9C77,
+0x5FF8=>0x9C78,
+0x5FF1=>0x9C79,
+0x5FDD=>0x9C7A,
+0x60B3=>0x9C7B,
+0x5FFF=>0x9C7C,
+0x6021=>0x9C7D,
+0x6060=>0x9C7E,
+0x6019=>0x9C80,
+0x6010=>0x9C81,
+0x6029=>0x9C82,
+0x600E=>0x9C83,
+0x6031=>0x9C84,
+0x601B=>0x9C85,
+0x6015=>0x9C86,
+0x602B=>0x9C87,
+0x6026=>0x9C88,
+0x600F=>0x9C89,
+0x603A=>0x9C8A,
+0x605A=>0x9C8B,
+0x6041=>0x9C8C,
+0x606A=>0x9C8D,
+0x6077=>0x9C8E,
+0x605F=>0x9C8F,
+0x604A=>0x9C90,
+0x6046=>0x9C91,
+0x604D=>0x9C92,
+0x6063=>0x9C93,
+0x6043=>0x9C94,
+0x6064=>0x9C95,
+0x6042=>0x9C96,
+0x606C=>0x9C97,
+0x606B=>0x9C98,
+0x6059=>0x9C99,
+0x6081=>0x9C9A,
+0x608D=>0x9C9B,
+0x60E7=>0x9C9C,
+0x6083=>0x9C9D,
+0x609A=>0x9C9E,
+0x6084=>0x9C9F,
+0x609B=>0x9CA0,
+0x6096=>0x9CA1,
+0x6097=>0x9CA2,
+0x6092=>0x9CA3,
+0x60A7=>0x9CA4,
+0x608B=>0x9CA5,
+0x60E1=>0x9CA6,
+0x60B8=>0x9CA7,
+0x60E0=>0x9CA8,
+0x60D3=>0x9CA9,
+0x60B4=>0x9CAA,
+0x5FF0=>0x9CAB,
+0x60BD=>0x9CAC,
+0x60C6=>0x9CAD,
+0x60B5=>0x9CAE,
+0x60D8=>0x9CAF,
+0x614D=>0x9CB0,
+0x6115=>0x9CB1,
+0x6106=>0x9CB2,
+0x60F6=>0x9CB3,
+0x60F7=>0x9CB4,
+0x6100=>0x9CB5,
+0x60F4=>0x9CB6,
+0x60FA=>0x9CB7,
+0x6103=>0x9CB8,
+0x6121=>0x9CB9,
+0x60FB=>0x9CBA,
+0x60F1=>0x9CBB,
+0x610D=>0x9CBC,
+0x610E=>0x9CBD,
+0x6147=>0x9CBE,
+0x613E=>0x9CBF,
+0x6128=>0x9CC0,
+0x6127=>0x9CC1,
+0x614A=>0x9CC2,
+0x613F=>0x9CC3,
+0x613C=>0x9CC4,
+0x612C=>0x9CC5,
+0x6134=>0x9CC6,
+0x613D=>0x9CC7,
+0x6142=>0x9CC8,
+0x6144=>0x9CC9,
+0x6173=>0x9CCA,
+0x6177=>0x9CCB,
+0x6158=>0x9CCC,
+0x6159=>0x9CCD,
+0x615A=>0x9CCE,
+0x616B=>0x9CCF,
+0x6174=>0x9CD0,
+0x616F=>0x9CD1,
+0x6165=>0x9CD2,
+0x6171=>0x9CD3,
+0x615F=>0x9CD4,
+0x615D=>0x9CD5,
+0x6153=>0x9CD6,
+0x6175=>0x9CD7,
+0x6199=>0x9CD8,
+0x6196=>0x9CD9,
+0x6187=>0x9CDA,
+0x61AC=>0x9CDB,
+0x6194=>0x9CDC,
+0x619A=>0x9CDD,
+0x618A=>0x9CDE,
+0x6191=>0x9CDF,
+0x61AB=>0x9CE0,
+0x61AE=>0x9CE1,
+0x61CC=>0x9CE2,
+0x61CA=>0x9CE3,
+0x61C9=>0x9CE4,
+0x61F7=>0x9CE5,
+0x61C8=>0x9CE6,
+0x61C3=>0x9CE7,
+0x61C6=>0x9CE8,
+0x61BA=>0x9CE9,
+0x61CB=>0x9CEA,
+0x7F79=>0x9CEB,
+0x61CD=>0x9CEC,
+0x61E6=>0x9CED,
+0x61E3=>0x9CEE,
+0x61F6=>0x9CEF,
+0x61FA=>0x9CF0,
+0x61F4=>0x9CF1,
+0x61FF=>0x9CF2,
+0x61FD=>0x9CF3,
+0x61FC=>0x9CF4,
+0x61FE=>0x9CF5,
+0x6200=>0x9CF6,
+0x6208=>0x9CF7,
+0x6209=>0x9CF8,
+0x620D=>0x9CF9,
+0x620C=>0x9CFA,
+0x6214=>0x9CFB,
+0x621B=>0x9CFC,
+0x621E=>0x9D40,
+0x6221=>0x9D41,
+0x622A=>0x9D42,
+0x622E=>0x9D43,
+0x6230=>0x9D44,
+0x6232=>0x9D45,
+0x6233=>0x9D46,
+0x6241=>0x9D47,
+0x624E=>0x9D48,
+0x625E=>0x9D49,
+0x6263=>0x9D4A,
+0x625B=>0x9D4B,
+0x6260=>0x9D4C,
+0x6268=>0x9D4D,
+0x627C=>0x9D4E,
+0x6282=>0x9D4F,
+0x6289=>0x9D50,
+0x627E=>0x9D51,
+0x6292=>0x9D52,
+0x6293=>0x9D53,
+0x6296=>0x9D54,
+0x62D4=>0x9D55,
+0x6283=>0x9D56,
+0x6294=>0x9D57,
+0x62D7=>0x9D58,
+0x62D1=>0x9D59,
+0x62BB=>0x9D5A,
+0x62CF=>0x9D5B,
+0x62FF=>0x9D5C,
+0x62C6=>0x9D5D,
+0x64D4=>0x9D5E,
+0x62C8=>0x9D5F,
+0x62DC=>0x9D60,
+0x62CC=>0x9D61,
+0x62CA=>0x9D62,
+0x62C2=>0x9D63,
+0x62C7=>0x9D64,
+0x629B=>0x9D65,
+0x62C9=>0x9D66,
+0x630C=>0x9D67,
+0x62EE=>0x9D68,
+0x62F1=>0x9D69,
+0x6327=>0x9D6A,
+0x6302=>0x9D6B,
+0x6308=>0x9D6C,
+0x62EF=>0x9D6D,
+0x62F5=>0x9D6E,
+0x6350=>0x9D6F,
+0x633E=>0x9D70,
+0x634D=>0x9D71,
+0x641C=>0x9D72,
+0x634F=>0x9D73,
+0x6396=>0x9D74,
+0x638E=>0x9D75,
+0x6380=>0x9D76,
+0x63AB=>0x9D77,
+0x6376=>0x9D78,
+0x63A3=>0x9D79,
+0x638F=>0x9D7A,
+0x6389=>0x9D7B,
+0x639F=>0x9D7C,
+0x63B5=>0x9D7D,
+0x636B=>0x9D7E,
+0x6369=>0x9D80,
+0x63BE=>0x9D81,
+0x63E9=>0x9D82,
+0x63C0=>0x9D83,
+0x63C6=>0x9D84,
+0x63E3=>0x9D85,
+0x63C9=>0x9D86,
+0x63D2=>0x9D87,
+0x63F6=>0x9D88,
+0x63C4=>0x9D89,
+0x6416=>0x9D8A,
+0x6434=>0x9D8B,
+0x6406=>0x9D8C,
+0x6413=>0x9D8D,
+0x6426=>0x9D8E,
+0x6436=>0x9D8F,
+0x651D=>0x9D90,
+0x6417=>0x9D91,
+0x6428=>0x9D92,
+0x640F=>0x9D93,
+0x6467=>0x9D94,
+0x646F=>0x9D95,
+0x6476=>0x9D96,
+0x644E=>0x9D97,
+0x652A=>0x9D98,
+0x6495=>0x9D99,
+0x6493=>0x9D9A,
+0x64A5=>0x9D9B,
+0x64A9=>0x9D9C,
+0x6488=>0x9D9D,
+0x64BC=>0x9D9E,
+0x64DA=>0x9D9F,
+0x64D2=>0x9DA0,
+0x64C5=>0x9DA1,
+0x64C7=>0x9DA2,
+0x64BB=>0x9DA3,
+0x64D8=>0x9DA4,
+0x64C2=>0x9DA5,
+0x64F1=>0x9DA6,
+0x64E7=>0x9DA7,
+0x8209=>0x9DA8,
+0x64E0=>0x9DA9,
+0x64E1=>0x9DAA,
+0x62AC=>0x9DAB,
+0x64E3=>0x9DAC,
+0x64EF=>0x9DAD,
+0x652C=>0x9DAE,
+0x64F6=>0x9DAF,
+0x64F4=>0x9DB0,
+0x64F2=>0x9DB1,
+0x64FA=>0x9DB2,
+0x6500=>0x9DB3,
+0x64FD=>0x9DB4,
+0x6518=>0x9DB5,
+0x651C=>0x9DB6,
+0x6505=>0x9DB7,
+0x6524=>0x9DB8,
+0x6523=>0x9DB9,
+0x652B=>0x9DBA,
+0x6534=>0x9DBB,
+0x6535=>0x9DBC,
+0x6537=>0x9DBD,
+0x6536=>0x9DBE,
+0x6538=>0x9DBF,
+0x754B=>0x9DC0,
+0x6548=>0x9DC1,
+0x6556=>0x9DC2,
+0x6555=>0x9DC3,
+0x654D=>0x9DC4,
+0x6558=>0x9DC5,
+0x655E=>0x9DC6,
+0x655D=>0x9DC7,
+0x6572=>0x9DC8,
+0x6578=>0x9DC9,
+0x6582=>0x9DCA,
+0x6583=>0x9DCB,
+0x8B8A=>0x9DCC,
+0x659B=>0x9DCD,
+0x659F=>0x9DCE,
+0x65AB=>0x9DCF,
+0x65B7=>0x9DD0,
+0x65C3=>0x9DD1,
+0x65C6=>0x9DD2,
+0x65C1=>0x9DD3,
+0x65C4=>0x9DD4,
+0x65CC=>0x9DD5,
+0x65D2=>0x9DD6,
+0x65DB=>0x9DD7,
+0x65D9=>0x9DD8,
+0x65E0=>0x9DD9,
+0x65E1=>0x9DDA,
+0x65F1=>0x9DDB,
+0x6772=>0x9DDC,
+0x660A=>0x9DDD,
+0x6603=>0x9DDE,
+0x65FB=>0x9DDF,
+0x6773=>0x9DE0,
+0x6635=>0x9DE1,
+0x6636=>0x9DE2,
+0x6634=>0x9DE3,
+0x661C=>0x9DE4,
+0x664F=>0x9DE5,
+0x6644=>0x9DE6,
+0x6649=>0x9DE7,
+0x6641=>0x9DE8,
+0x665E=>0x9DE9,
+0x665D=>0x9DEA,
+0x6664=>0x9DEB,
+0x6667=>0x9DEC,
+0x6668=>0x9DED,
+0x665F=>0x9DEE,
+0x6662=>0x9DEF,
+0x6670=>0x9DF0,
+0x6683=>0x9DF1,
+0x6688=>0x9DF2,
+0x668E=>0x9DF3,
+0x6689=>0x9DF4,
+0x6684=>0x9DF5,
+0x6698=>0x9DF6,
+0x669D=>0x9DF7,
+0x66C1=>0x9DF8,
+0x66B9=>0x9DF9,
+0x66C9=>0x9DFA,
+0x66BE=>0x9DFB,
+0x66BC=>0x9DFC,
+0x66C4=>0x9E40,
+0x66B8=>0x9E41,
+0x66D6=>0x9E42,
+0x66DA=>0x9E43,
+0x66E0=>0x9E44,
+0x663F=>0x9E45,
+0x66E6=>0x9E46,
+0x66E9=>0x9E47,
+0x66F0=>0x9E48,
+0x66F5=>0x9E49,
+0x66F7=>0x9E4A,
+0x670F=>0x9E4B,
+0x6716=>0x9E4C,
+0x671E=>0x9E4D,
+0x6726=>0x9E4E,
+0x6727=>0x9E4F,
+0x9738=>0x9E50,
+0x672E=>0x9E51,
+0x673F=>0x9E52,
+0x6736=>0x9E53,
+0x6741=>0x9E54,
+0x6738=>0x9E55,
+0x6737=>0x9E56,
+0x6746=>0x9E57,
+0x675E=>0x9E58,
+0x6760=>0x9E59,
+0x6759=>0x9E5A,
+0x6763=>0x9E5B,
+0x6764=>0x9E5C,
+0x6789=>0x9E5D,
+0x6770=>0x9E5E,
+0x67A9=>0x9E5F,
+0x677C=>0x9E60,
+0x676A=>0x9E61,
+0x678C=>0x9E62,
+0x678B=>0x9E63,
+0x67A6=>0x9E64,
+0x67A1=>0x9E65,
+0x6785=>0x9E66,
+0x67B7=>0x9E67,
+0x67EF=>0x9E68,
+0x67B4=>0x9E69,
+0x67EC=>0x9E6A,
+0x67B3=>0x9E6B,
+0x67E9=>0x9E6C,
+0x67B8=>0x9E6D,
+0x67E4=>0x9E6E,
+0x67DE=>0x9E6F,
+0x67DD=>0x9E70,
+0x67E2=>0x9E71,
+0x67EE=>0x9E72,
+0x67B9=>0x9E73,
+0x67CE=>0x9E74,
+0x67C6=>0x9E75,
+0x67E7=>0x9E76,
+0x6A9C=>0x9E77,
+0x681E=>0x9E78,
+0x6846=>0x9E79,
+0x6829=>0x9E7A,
+0x6840=>0x9E7B,
+0x684D=>0x9E7C,
+0x6832=>0x9E7D,
+0x684E=>0x9E7E,
+0x68B3=>0x9E80,
+0x682B=>0x9E81,
+0x6859=>0x9E82,
+0x6863=>0x9E83,
+0x6877=>0x9E84,
+0x687F=>0x9E85,
+0x689F=>0x9E86,
+0x688F=>0x9E87,
+0x68AD=>0x9E88,
+0x6894=>0x9E89,
+0x689D=>0x9E8A,
+0x689B=>0x9E8B,
+0x6883=>0x9E8C,
+0x6AAE=>0x9E8D,
+0x68B9=>0x9E8E,
+0x6874=>0x9E8F,
+0x68B5=>0x9E90,
+0x68A0=>0x9E91,
+0x68BA=>0x9E92,
+0x690F=>0x9E93,
+0x688D=>0x9E94,
+0x687E=>0x9E95,
+0x6901=>0x9E96,
+0x68CA=>0x9E97,
+0x6908=>0x9E98,
+0x68D8=>0x9E99,
+0x6922=>0x9E9A,
+0x6926=>0x9E9B,
+0x68E1=>0x9E9C,
+0x690C=>0x9E9D,
+0x68CD=>0x9E9E,
+0x68D4=>0x9E9F,
+0x68E7=>0x9EA0,
+0x68D5=>0x9EA1,
+0x6936=>0x9EA2,
+0x6912=>0x9EA3,
+0x6904=>0x9EA4,
+0x68D7=>0x9EA5,
+0x68E3=>0x9EA6,
+0x6925=>0x9EA7,
+0x68F9=>0x9EA8,
+0x68E0=>0x9EA9,
+0x68EF=>0x9EAA,
+0x6928=>0x9EAB,
+0x692A=>0x9EAC,
+0x691A=>0x9EAD,
+0x6923=>0x9EAE,
+0x6921=>0x9EAF,
+0x68C6=>0x9EB0,
+0x6979=>0x9EB1,
+0x6977=>0x9EB2,
+0x695C=>0x9EB3,
+0x6978=>0x9EB4,
+0x696B=>0x9EB5,
+0x6954=>0x9EB6,
+0x697E=>0x9EB7,
+0x696E=>0x9EB8,
+0x6939=>0x9EB9,
+0x6974=>0x9EBA,
+0x693D=>0x9EBB,
+0x6959=>0x9EBC,
+0x6930=>0x9EBD,
+0x6961=>0x9EBE,
+0x695E=>0x9EBF,
+0x695D=>0x9EC0,
+0x6981=>0x9EC1,
+0x696A=>0x9EC2,
+0x69B2=>0x9EC3,
+0x69AE=>0x9EC4,
+0x69D0=>0x9EC5,
+0x69BF=>0x9EC6,
+0x69C1=>0x9EC7,
+0x69D3=>0x9EC8,
+0x69BE=>0x9EC9,
+0x69CE=>0x9ECA,
+0x5BE8=>0x9ECB,
+0x69CA=>0x9ECC,
+0x69DD=>0x9ECD,
+0x69BB=>0x9ECE,
+0x69C3=>0x9ECF,
+0x69A7=>0x9ED0,
+0x6A2E=>0x9ED1,
+0x6991=>0x9ED2,
+0x69A0=>0x9ED3,
+0x699C=>0x9ED4,
+0x6995=>0x9ED5,
+0x69B4=>0x9ED6,
+0x69DE=>0x9ED7,
+0x69E8=>0x9ED8,
+0x6A02=>0x9ED9,
+0x6A1B=>0x9EDA,
+0x69FF=>0x9EDB,
+0x6B0A=>0x9EDC,
+0x69F9=>0x9EDD,
+0x69F2=>0x9EDE,
+0x69E7=>0x9EDF,
+0x6A05=>0x9EE0,
+0x69B1=>0x9EE1,
+0x6A1E=>0x9EE2,
+0x69ED=>0x9EE3,
+0x6A14=>0x9EE4,
+0x69EB=>0x9EE5,
+0x6A0A=>0x9EE6,
+0x6A12=>0x9EE7,
+0x6AC1=>0x9EE8,
+0x6A23=>0x9EE9,
+0x6A13=>0x9EEA,
+0x6A44=>0x9EEB,
+0x6A0C=>0x9EEC,
+0x6A72=>0x9EED,
+0x6A36=>0x9EEE,
+0x6A78=>0x9EEF,
+0x6A47=>0x9EF0,
+0x6A62=>0x9EF1,
+0x6A59=>0x9EF2,
+0x6A66=>0x9EF3,
+0x6A48=>0x9EF4,
+0x6A38=>0x9EF5,
+0x6A22=>0x9EF6,
+0x6A90=>0x9EF7,
+0x6A8D=>0x9EF8,
+0x6AA0=>0x9EF9,
+0x6A84=>0x9EFA,
+0x6AA2=>0x9EFB,
+0x6AA3=>0x9EFC,
+0x6A97=>0x9F40,
+0x8617=>0x9F41,
+0x6ABB=>0x9F42,
+0x6AC3=>0x9F43,
+0x6AC2=>0x9F44,
+0x6AB8=>0x9F45,
+0x6AB3=>0x9F46,
+0x6AAC=>0x9F47,
+0x6ADE=>0x9F48,
+0x6AD1=>0x9F49,
+0x6ADF=>0x9F4A,
+0x6AAA=>0x9F4B,
+0x6ADA=>0x9F4C,
+0x6AEA=>0x9F4D,
+0x6AFB=>0x9F4E,
+0x6B05=>0x9F4F,
+0x8616=>0x9F50,
+0x6AFA=>0x9F51,
+0x6B12=>0x9F52,
+0x6B16=>0x9F53,
+0x9B31=>0x9F54,
+0x6B1F=>0x9F55,
+0x6B38=>0x9F56,
+0x6B37=>0x9F57,
+0x76DC=>0x9F58,
+0x6B39=>0x9F59,
+0x98EE=>0x9F5A,
+0x6B47=>0x9F5B,
+0x6B43=>0x9F5C,
+0x6B49=>0x9F5D,
+0x6B50=>0x9F5E,
+0x6B59=>0x9F5F,
+0x6B54=>0x9F60,
+0x6B5B=>0x9F61,
+0x6B5F=>0x9F62,
+0x6B61=>0x9F63,
+0x6B78=>0x9F64,
+0x6B79=>0x9F65,
+0x6B7F=>0x9F66,
+0x6B80=>0x9F67,
+0x6B84=>0x9F68,
+0x6B83=>0x9F69,
+0x6B8D=>0x9F6A,
+0x6B98=>0x9F6B,
+0x6B95=>0x9F6C,
+0x6B9E=>0x9F6D,
+0x6BA4=>0x9F6E,
+0x6BAA=>0x9F6F,
+0x6BAB=>0x9F70,
+0x6BAF=>0x9F71,
+0x6BB2=>0x9F72,
+0x6BB1=>0x9F73,
+0x6BB3=>0x9F74,
+0x6BB7=>0x9F75,
+0x6BBC=>0x9F76,
+0x6BC6=>0x9F77,
+0x6BCB=>0x9F78,
+0x6BD3=>0x9F79,
+0x6BDF=>0x9F7A,
+0x6BEC=>0x9F7B,
+0x6BEB=>0x9F7C,
+0x6BF3=>0x9F7D,
+0x6BEF=>0x9F7E,
+0x9EBE=>0x9F80,
+0x6C08=>0x9F81,
+0x6C13=>0x9F82,
+0x6C14=>0x9F83,
+0x6C1B=>0x9F84,
+0x6C24=>0x9F85,
+0x6C23=>0x9F86,
+0x6C5E=>0x9F87,
+0x6C55=>0x9F88,
+0x6C62=>0x9F89,
+0x6C6A=>0x9F8A,
+0x6C82=>0x9F8B,
+0x6C8D=>0x9F8C,
+0x6C9A=>0x9F8D,
+0x6C81=>0x9F8E,
+0x6C9B=>0x9F8F,
+0x6C7E=>0x9F90,
+0x6C68=>0x9F91,
+0x6C73=>0x9F92,
+0x6C92=>0x9F93,
+0x6C90=>0x9F94,
+0x6CC4=>0x9F95,
+0x6CF1=>0x9F96,
+0x6CD3=>0x9F97,
+0x6CBD=>0x9F98,
+0x6CD7=>0x9F99,
+0x6CC5=>0x9F9A,
+0x6CDD=>0x9F9B,
+0x6CAE=>0x9F9C,
+0x6CB1=>0x9F9D,
+0x6CBE=>0x9F9E,
+0x6CBA=>0x9F9F,
+0x6CDB=>0x9FA0,
+0x6CEF=>0x9FA1,
+0x6CD9=>0x9FA2,
+0x6CEA=>0x9FA3,
+0x6D1F=>0x9FA4,
+0x884D=>0x9FA5,
+0x6D36=>0x9FA6,
+0x6D2B=>0x9FA7,
+0x6D3D=>0x9FA8,
+0x6D38=>0x9FA9,
+0x6D19=>0x9FAA,
+0x6D35=>0x9FAB,
+0x6D33=>0x9FAC,
+0x6D12=>0x9FAD,
+0x6D0C=>0x9FAE,
+0x6D63=>0x9FAF,
+0x6D93=>0x9FB0,
+0x6D64=>0x9FB1,
+0x6D5A=>0x9FB2,
+0x6D79=>0x9FB3,
+0x6D59=>0x9FB4,
+0x6D8E=>0x9FB5,
+0x6D95=>0x9FB6,
+0x6FE4=>0x9FB7,
+0x6D85=>0x9FB8,
+0x6DF9=>0x9FB9,
+0x6E15=>0x9FBA,
+0x6E0A=>0x9FBB,
+0x6DB5=>0x9FBC,
+0x6DC7=>0x9FBD,
+0x6DE6=>0x9FBE,
+0x6DB8=>0x9FBF,
+0x6DC6=>0x9FC0,
+0x6DEC=>0x9FC1,
+0x6DDE=>0x9FC2,
+0x6DCC=>0x9FC3,
+0x6DE8=>0x9FC4,
+0x6DD2=>0x9FC5,
+0x6DC5=>0x9FC6,
+0x6DFA=>0x9FC7,
+0x6DD9=>0x9FC8,
+0x6DE4=>0x9FC9,
+0x6DD5=>0x9FCA,
+0x6DEA=>0x9FCB,
+0x6DEE=>0x9FCC,
+0x6E2D=>0x9FCD,
+0x6E6E=>0x9FCE,
+0x6E2E=>0x9FCF,
+0x6E19=>0x9FD0,
+0x6E72=>0x9FD1,
+0x6E5F=>0x9FD2,
+0x6E3E=>0x9FD3,
+0x6E23=>0x9FD4,
+0x6E6B=>0x9FD5,
+0x6E2B=>0x9FD6,
+0x6E76=>0x9FD7,
+0x6E4D=>0x9FD8,
+0x6E1F=>0x9FD9,
+0x6E43=>0x9FDA,
+0x6E3A=>0x9FDB,
+0x6E4E=>0x9FDC,
+0x6E24=>0x9FDD,
+0x6EFF=>0x9FDE,
+0x6E1D=>0x9FDF,
+0x6E38=>0x9FE0,
+0x6E82=>0x9FE1,
+0x6EAA=>0x9FE2,
+0x6E98=>0x9FE3,
+0x6EC9=>0x9FE4,
+0x6EB7=>0x9FE5,
+0x6ED3=>0x9FE6,
+0x6EBD=>0x9FE7,
+0x6EAF=>0x9FE8,
+0x6EC4=>0x9FE9,
+0x6EB2=>0x9FEA,
+0x6ED4=>0x9FEB,
+0x6ED5=>0x9FEC,
+0x6E8F=>0x9FED,
+0x6EA5=>0x9FEE,
+0x6EC2=>0x9FEF,
+0x6E9F=>0x9FF0,
+0x6F41=>0x9FF1,
+0x6F11=>0x9FF2,
+0x704C=>0x9FF3,
+0x6EEC=>0x9FF4,
+0x6EF8=>0x9FF5,
+0x6EFE=>0x9FF6,
+0x6F3F=>0x9FF7,
+0x6EF2=>0x9FF8,
+0x6F31=>0x9FF9,
+0x6EEF=>0x9FFA,
+0x6F32=>0x9FFB,
+0x6ECC=>0x9FFC,
+0x6F3E=>0xE040,
+0x6F13=>0xE041,
+0x6EF7=>0xE042,
+0x6F86=>0xE043,
+0x6F7A=>0xE044,
+0x6F78=>0xE045,
+0x6F81=>0xE046,
+0x6F80=>0xE047,
+0x6F6F=>0xE048,
+0x6F5B=>0xE049,
+0x6FF3=>0xE04A,
+0x6F6D=>0xE04B,
+0x6F82=>0xE04C,
+0x6F7C=>0xE04D,
+0x6F58=>0xE04E,
+0x6F8E=>0xE04F,
+0x6F91=>0xE050,
+0x6FC2=>0xE051,
+0x6F66=>0xE052,
+0x6FB3=>0xE053,
+0x6FA3=>0xE054,
+0x6FA1=>0xE055,
+0x6FA4=>0xE056,
+0x6FB9=>0xE057,
+0x6FC6=>0xE058,
+0x6FAA=>0xE059,
+0x6FDF=>0xE05A,
+0x6FD5=>0xE05B,
+0x6FEC=>0xE05C,
+0x6FD4=>0xE05D,
+0x6FD8=>0xE05E,
+0x6FF1=>0xE05F,
+0x6FEE=>0xE060,
+0x6FDB=>0xE061,
+0x7009=>0xE062,
+0x700B=>0xE063,
+0x6FFA=>0xE064,
+0x7011=>0xE065,
+0x7001=>0xE066,
+0x700F=>0xE067,
+0x6FFE=>0xE068,
+0x701B=>0xE069,
+0x701A=>0xE06A,
+0x6F74=>0xE06B,
+0x701D=>0xE06C,
+0x7018=>0xE06D,
+0x701F=>0xE06E,
+0x7030=>0xE06F,
+0x703E=>0xE070,
+0x7032=>0xE071,
+0x7051=>0xE072,
+0x7063=>0xE073,
+0x7099=>0xE074,
+0x7092=>0xE075,
+0x70AF=>0xE076,
+0x70F1=>0xE077,
+0x70AC=>0xE078,
+0x70B8=>0xE079,
+0x70B3=>0xE07A,
+0x70AE=>0xE07B,
+0x70DF=>0xE07C,
+0x70CB=>0xE07D,
+0x70DD=>0xE07E,
+0x70D9=>0xE080,
+0x7109=>0xE081,
+0x70FD=>0xE082,
+0x711C=>0xE083,
+0x7119=>0xE084,
+0x7165=>0xE085,
+0x7155=>0xE086,
+0x7188=>0xE087,
+0x7166=>0xE088,
+0x7162=>0xE089,
+0x714C=>0xE08A,
+0x7156=>0xE08B,
+0x716C=>0xE08C,
+0x718F=>0xE08D,
+0x71FB=>0xE08E,
+0x7184=>0xE08F,
+0x7195=>0xE090,
+0x71A8=>0xE091,
+0x71AC=>0xE092,
+0x71D7=>0xE093,
+0x71B9=>0xE094,
+0x71BE=>0xE095,
+0x71D2=>0xE096,
+0x71C9=>0xE097,
+0x71D4=>0xE098,
+0x71CE=>0xE099,
+0x71E0=>0xE09A,
+0x71EC=>0xE09B,
+0x71E7=>0xE09C,
+0x71F5=>0xE09D,
+0x71FC=>0xE09E,
+0x71F9=>0xE09F,
+0x71FF=>0xE0A0,
+0x720D=>0xE0A1,
+0x7210=>0xE0A2,
+0x721B=>0xE0A3,
+0x7228=>0xE0A4,
+0x722D=>0xE0A5,
+0x722C=>0xE0A6,
+0x7230=>0xE0A7,
+0x7232=>0xE0A8,
+0x723B=>0xE0A9,
+0x723C=>0xE0AA,
+0x723F=>0xE0AB,
+0x7240=>0xE0AC,
+0x7246=>0xE0AD,
+0x724B=>0xE0AE,
+0x7258=>0xE0AF,
+0x7274=>0xE0B0,
+0x727E=>0xE0B1,
+0x7282=>0xE0B2,
+0x7281=>0xE0B3,
+0x7287=>0xE0B4,
+0x7292=>0xE0B5,
+0x7296=>0xE0B6,
+0x72A2=>0xE0B7,
+0x72A7=>0xE0B8,
+0x72B9=>0xE0B9,
+0x72B2=>0xE0BA,
+0x72C3=>0xE0BB,
+0x72C6=>0xE0BC,
+0x72C4=>0xE0BD,
+0x72CE=>0xE0BE,
+0x72D2=>0xE0BF,
+0x72E2=>0xE0C0,
+0x72E0=>0xE0C1,
+0x72E1=>0xE0C2,
+0x72F9=>0xE0C3,
+0x72F7=>0xE0C4,
+0x500F=>0xE0C5,
+0x7317=>0xE0C6,
+0x730A=>0xE0C7,
+0x731C=>0xE0C8,
+0x7316=>0xE0C9,
+0x731D=>0xE0CA,
+0x7334=>0xE0CB,
+0x732F=>0xE0CC,
+0x7329=>0xE0CD,
+0x7325=>0xE0CE,
+0x733E=>0xE0CF,
+0x734E=>0xE0D0,
+0x734F=>0xE0D1,
+0x9ED8=>0xE0D2,
+0x7357=>0xE0D3,
+0x736A=>0xE0D4,
+0x7368=>0xE0D5,
+0x7370=>0xE0D6,
+0x7378=>0xE0D7,
+0x7375=>0xE0D8,
+0x737B=>0xE0D9,
+0x737A=>0xE0DA,
+0x73C8=>0xE0DB,
+0x73B3=>0xE0DC,
+0x73CE=>0xE0DD,
+0x73BB=>0xE0DE,
+0x73C0=>0xE0DF,
+0x73E5=>0xE0E0,
+0x73EE=>0xE0E1,
+0x73DE=>0xE0E2,
+0x74A2=>0xE0E3,
+0x7405=>0xE0E4,
+0x746F=>0xE0E5,
+0x7425=>0xE0E6,
+0x73F8=>0xE0E7,
+0x7432=>0xE0E8,
+0x743A=>0xE0E9,
+0x7455=>0xE0EA,
+0x743F=>0xE0EB,
+0x745F=>0xE0EC,
+0x7459=>0xE0ED,
+0x7441=>0xE0EE,
+0x745C=>0xE0EF,
+0x7469=>0xE0F0,
+0x7470=>0xE0F1,
+0x7463=>0xE0F2,
+0x746A=>0xE0F3,
+0x7476=>0xE0F4,
+0x747E=>0xE0F5,
+0x748B=>0xE0F6,
+0x749E=>0xE0F7,
+0x74A7=>0xE0F8,
+0x74CA=>0xE0F9,
+0x74CF=>0xE0FA,
+0x74D4=>0xE0FB,
+0x73F1=>0xE0FC,
+0x74E0=>0xE140,
+0x74E3=>0xE141,
+0x74E7=>0xE142,
+0x74E9=>0xE143,
+0x74EE=>0xE144,
+0x74F2=>0xE145,
+0x74F0=>0xE146,
+0x74F1=>0xE147,
+0x74F8=>0xE148,
+0x74F7=>0xE149,
+0x7504=>0xE14A,
+0x7503=>0xE14B,
+0x7505=>0xE14C,
+0x750C=>0xE14D,
+0x750E=>0xE14E,
+0x750D=>0xE14F,
+0x7515=>0xE150,
+0x7513=>0xE151,
+0x751E=>0xE152,
+0x7526=>0xE153,
+0x752C=>0xE154,
+0x753C=>0xE155,
+0x7544=>0xE156,
+0x754D=>0xE157,
+0x754A=>0xE158,
+0x7549=>0xE159,
+0x755B=>0xE15A,
+0x7546=>0xE15B,
+0x755A=>0xE15C,
+0x7569=>0xE15D,
+0x7564=>0xE15E,
+0x7567=>0xE15F,
+0x756B=>0xE160,
+0x756D=>0xE161,
+0x7578=>0xE162,
+0x7576=>0xE163,
+0x7586=>0xE164,
+0x7587=>0xE165,
+0x7574=>0xE166,
+0x758A=>0xE167,
+0x7589=>0xE168,
+0x7582=>0xE169,
+0x7594=>0xE16A,
+0x759A=>0xE16B,
+0x759D=>0xE16C,
+0x75A5=>0xE16D,
+0x75A3=>0xE16E,
+0x75C2=>0xE16F,
+0x75B3=>0xE170,
+0x75C3=>0xE171,
+0x75B5=>0xE172,
+0x75BD=>0xE173,
+0x75B8=>0xE174,
+0x75BC=>0xE175,
+0x75B1=>0xE176,
+0x75CD=>0xE177,
+0x75CA=>0xE178,
+0x75D2=>0xE179,
+0x75D9=>0xE17A,
+0x75E3=>0xE17B,
+0x75DE=>0xE17C,
+0x75FE=>0xE17D,
+0x75FF=>0xE17E,
+0x75FC=>0xE180,
+0x7601=>0xE181,
+0x75F0=>0xE182,
+0x75FA=>0xE183,
+0x75F2=>0xE184,
+0x75F3=>0xE185,
+0x760B=>0xE186,
+0x760D=>0xE187,
+0x7609=>0xE188,
+0x761F=>0xE189,
+0x7627=>0xE18A,
+0x7620=>0xE18B,
+0x7621=>0xE18C,
+0x7622=>0xE18D,
+0x7624=>0xE18E,
+0x7634=>0xE18F,
+0x7630=>0xE190,
+0x763B=>0xE191,
+0x7647=>0xE192,
+0x7648=>0xE193,
+0x7646=>0xE194,
+0x765C=>0xE195,
+0x7658=>0xE196,
+0x7661=>0xE197,
+0x7662=>0xE198,
+0x7668=>0xE199,
+0x7669=>0xE19A,
+0x766A=>0xE19B,
+0x7667=>0xE19C,
+0x766C=>0xE19D,
+0x7670=>0xE19E,
+0x7672=>0xE19F,
+0x7676=>0xE1A0,
+0x7678=>0xE1A1,
+0x767C=>0xE1A2,
+0x7680=>0xE1A3,
+0x7683=>0xE1A4,
+0x7688=>0xE1A5,
+0x768B=>0xE1A6,
+0x768E=>0xE1A7,
+0x7696=>0xE1A8,
+0x7693=>0xE1A9,
+0x7699=>0xE1AA,
+0x769A=>0xE1AB,
+0x76B0=>0xE1AC,
+0x76B4=>0xE1AD,
+0x76B8=>0xE1AE,
+0x76B9=>0xE1AF,
+0x76BA=>0xE1B0,
+0x76C2=>0xE1B1,
+0x76CD=>0xE1B2,
+0x76D6=>0xE1B3,
+0x76D2=>0xE1B4,
+0x76DE=>0xE1B5,
+0x76E1=>0xE1B6,
+0x76E5=>0xE1B7,
+0x76E7=>0xE1B8,
+0x76EA=>0xE1B9,
+0x862F=>0xE1BA,
+0x76FB=>0xE1BB,
+0x7708=>0xE1BC,
+0x7707=>0xE1BD,
+0x7704=>0xE1BE,
+0x7729=>0xE1BF,
+0x7724=>0xE1C0,
+0x771E=>0xE1C1,
+0x7725=>0xE1C2,
+0x7726=>0xE1C3,
+0x771B=>0xE1C4,
+0x7737=>0xE1C5,
+0x7738=>0xE1C6,
+0x7747=>0xE1C7,
+0x775A=>0xE1C8,
+0x7768=>0xE1C9,
+0x776B=>0xE1CA,
+0x775B=>0xE1CB,
+0x7765=>0xE1CC,
+0x777F=>0xE1CD,
+0x777E=>0xE1CE,
+0x7779=>0xE1CF,
+0x778E=>0xE1D0,
+0x778B=>0xE1D1,
+0x7791=>0xE1D2,
+0x77A0=>0xE1D3,
+0x779E=>0xE1D4,
+0x77B0=>0xE1D5,
+0x77B6=>0xE1D6,
+0x77B9=>0xE1D7,
+0x77BF=>0xE1D8,
+0x77BC=>0xE1D9,
+0x77BD=>0xE1DA,
+0x77BB=>0xE1DB,
+0x77C7=>0xE1DC,
+0x77CD=>0xE1DD,
+0x77D7=>0xE1DE,
+0x77DA=>0xE1DF,
+0x77DC=>0xE1E0,
+0x77E3=>0xE1E1,
+0x77EE=>0xE1E2,
+0x77FC=>0xE1E3,
+0x780C=>0xE1E4,
+0x7812=>0xE1E5,
+0x7926=>0xE1E6,
+0x7820=>0xE1E7,
+0x792A=>0xE1E8,
+0x7845=>0xE1E9,
+0x788E=>0xE1EA,
+0x7874=>0xE1EB,
+0x7886=>0xE1EC,
+0x787C=>0xE1ED,
+0x789A=>0xE1EE,
+0x788C=>0xE1EF,
+0x78A3=>0xE1F0,
+0x78B5=>0xE1F1,
+0x78AA=>0xE1F2,
+0x78AF=>0xE1F3,
+0x78D1=>0xE1F4,
+0x78C6=>0xE1F5,
+0x78CB=>0xE1F6,
+0x78D4=>0xE1F7,
+0x78BE=>0xE1F8,
+0x78BC=>0xE1F9,
+0x78C5=>0xE1FA,
+0x78CA=>0xE1FB,
+0x78EC=>0xE1FC,
+0x78E7=>0xE240,
+0x78DA=>0xE241,
+0x78FD=>0xE242,
+0x78F4=>0xE243,
+0x7907=>0xE244,
+0x7912=>0xE245,
+0x7911=>0xE246,
+0x7919=>0xE247,
+0x792C=>0xE248,
+0x792B=>0xE249,
+0x7940=>0xE24A,
+0x7960=>0xE24B,
+0x7957=>0xE24C,
+0x795F=>0xE24D,
+0x795A=>0xE24E,
+0x7955=>0xE24F,
+0x7953=>0xE250,
+0x797A=>0xE251,
+0x797F=>0xE252,
+0x798A=>0xE253,
+0x799D=>0xE254,
+0x79A7=>0xE255,
+0x9F4B=>0xE256,
+0x79AA=>0xE257,
+0x79AE=>0xE258,
+0x79B3=>0xE259,
+0x79B9=>0xE25A,
+0x79BA=>0xE25B,
+0x79C9=>0xE25C,
+0x79D5=>0xE25D,
+0x79E7=>0xE25E,
+0x79EC=>0xE25F,
+0x79E1=>0xE260,
+0x79E3=>0xE261,
+0x7A08=>0xE262,
+0x7A0D=>0xE263,
+0x7A18=>0xE264,
+0x7A19=>0xE265,
+0x7A20=>0xE266,
+0x7A1F=>0xE267,
+0x7980=>0xE268,
+0x7A31=>0xE269,
+0x7A3B=>0xE26A,
+0x7A3E=>0xE26B,
+0x7A37=>0xE26C,
+0x7A43=>0xE26D,
+0x7A57=>0xE26E,
+0x7A49=>0xE26F,
+0x7A61=>0xE270,
+0x7A62=>0xE271,
+0x7A69=>0xE272,
+0x9F9D=>0xE273,
+0x7A70=>0xE274,
+0x7A79=>0xE275,
+0x7A7D=>0xE276,
+0x7A88=>0xE277,
+0x7A97=>0xE278,
+0x7A95=>0xE279,
+0x7A98=>0xE27A,
+0x7A96=>0xE27B,
+0x7AA9=>0xE27C,
+0x7AC8=>0xE27D,
+0x7AB0=>0xE27E,
+0x7AB6=>0xE280,
+0x7AC5=>0xE281,
+0x7AC4=>0xE282,
+0x7ABF=>0xE283,
+0x9083=>0xE284,
+0x7AC7=>0xE285,
+0x7ACA=>0xE286,
+0x7ACD=>0xE287,
+0x7ACF=>0xE288,
+0x7AD5=>0xE289,
+0x7AD3=>0xE28A,
+0x7AD9=>0xE28B,
+0x7ADA=>0xE28C,
+0x7ADD=>0xE28D,
+0x7AE1=>0xE28E,
+0x7AE2=>0xE28F,
+0x7AE6=>0xE290,
+0x7AED=>0xE291,
+0x7AF0=>0xE292,
+0x7B02=>0xE293,
+0x7B0F=>0xE294,
+0x7B0A=>0xE295,
+0x7B06=>0xE296,
+0x7B33=>0xE297,
+0x7B18=>0xE298,
+0x7B19=>0xE299,
+0x7B1E=>0xE29A,
+0x7B35=>0xE29B,
+0x7B28=>0xE29C,
+0x7B36=>0xE29D,
+0x7B50=>0xE29E,
+0x7B7A=>0xE29F,
+0x7B04=>0xE2A0,
+0x7B4D=>0xE2A1,
+0x7B0B=>0xE2A2,
+0x7B4C=>0xE2A3,
+0x7B45=>0xE2A4,
+0x7B75=>0xE2A5,
+0x7B65=>0xE2A6,
+0x7B74=>0xE2A7,
+0x7B67=>0xE2A8,
+0x7B70=>0xE2A9,
+0x7B71=>0xE2AA,
+0x7B6C=>0xE2AB,
+0x7B6E=>0xE2AC,
+0x7B9D=>0xE2AD,
+0x7B98=>0xE2AE,
+0x7B9F=>0xE2AF,
+0x7B8D=>0xE2B0,
+0x7B9C=>0xE2B1,
+0x7B9A=>0xE2B2,
+0x7B8B=>0xE2B3,
+0x7B92=>0xE2B4,
+0x7B8F=>0xE2B5,
+0x7B5D=>0xE2B6,
+0x7B99=>0xE2B7,
+0x7BCB=>0xE2B8,
+0x7BC1=>0xE2B9,
+0x7BCC=>0xE2BA,
+0x7BCF=>0xE2BB,
+0x7BB4=>0xE2BC,
+0x7BC6=>0xE2BD,
+0x7BDD=>0xE2BE,
+0x7BE9=>0xE2BF,
+0x7C11=>0xE2C0,
+0x7C14=>0xE2C1,
+0x7BE6=>0xE2C2,
+0x7BE5=>0xE2C3,
+0x7C60=>0xE2C4,
+0x7C00=>0xE2C5,
+0x7C07=>0xE2C6,
+0x7C13=>0xE2C7,
+0x7BF3=>0xE2C8,
+0x7BF7=>0xE2C9,
+0x7C17=>0xE2CA,
+0x7C0D=>0xE2CB,
+0x7BF6=>0xE2CC,
+0x7C23=>0xE2CD,
+0x7C27=>0xE2CE,
+0x7C2A=>0xE2CF,
+0x7C1F=>0xE2D0,
+0x7C37=>0xE2D1,
+0x7C2B=>0xE2D2,
+0x7C3D=>0xE2D3,
+0x7C4C=>0xE2D4,
+0x7C43=>0xE2D5,
+0x7C54=>0xE2D6,
+0x7C4F=>0xE2D7,
+0x7C40=>0xE2D8,
+0x7C50=>0xE2D9,
+0x7C58=>0xE2DA,
+0x7C5F=>0xE2DB,
+0x7C64=>0xE2DC,
+0x7C56=>0xE2DD,
+0x7C65=>0xE2DE,
+0x7C6C=>0xE2DF,
+0x7C75=>0xE2E0,
+0x7C83=>0xE2E1,
+0x7C90=>0xE2E2,
+0x7CA4=>0xE2E3,
+0x7CAD=>0xE2E4,
+0x7CA2=>0xE2E5,
+0x7CAB=>0xE2E6,
+0x7CA1=>0xE2E7,
+0x7CA8=>0xE2E8,
+0x7CB3=>0xE2E9,
+0x7CB2=>0xE2EA,
+0x7CB1=>0xE2EB,
+0x7CAE=>0xE2EC,
+0x7CB9=>0xE2ED,
+0x7CBD=>0xE2EE,
+0x7CC0=>0xE2EF,
+0x7CC5=>0xE2F0,
+0x7CC2=>0xE2F1,
+0x7CD8=>0xE2F2,
+0x7CD2=>0xE2F3,
+0x7CDC=>0xE2F4,
+0x7CE2=>0xE2F5,
+0x9B3B=>0xE2F6,
+0x7CEF=>0xE2F7,
+0x7CF2=>0xE2F8,
+0x7CF4=>0xE2F9,
+0x7CF6=>0xE2FA,
+0x7CFA=>0xE2FB,
+0x7D06=>0xE2FC,
+0x7D02=>0xE340,
+0x7D1C=>0xE341,
+0x7D15=>0xE342,
+0x7D0A=>0xE343,
+0x7D45=>0xE344,
+0x7D4B=>0xE345,
+0x7D2E=>0xE346,
+0x7D32=>0xE347,
+0x7D3F=>0xE348,
+0x7D35=>0xE349,
+0x7D46=>0xE34A,
+0x7D73=>0xE34B,
+0x7D56=>0xE34C,
+0x7D4E=>0xE34D,
+0x7D72=>0xE34E,
+0x7D68=>0xE34F,
+0x7D6E=>0xE350,
+0x7D4F=>0xE351,
+0x7D63=>0xE352,
+0x7D93=>0xE353,
+0x7D89=>0xE354,
+0x7D5B=>0xE355,
+0x7D8F=>0xE356,
+0x7D7D=>0xE357,
+0x7D9B=>0xE358,
+0x7DBA=>0xE359,
+0x7DAE=>0xE35A,
+0x7DA3=>0xE35B,
+0x7DB5=>0xE35C,
+0x7DC7=>0xE35D,
+0x7DBD=>0xE35E,
+0x7DAB=>0xE35F,
+0x7E3D=>0xE360,
+0x7DA2=>0xE361,
+0x7DAF=>0xE362,
+0x7DDC=>0xE363,
+0x7DB8=>0xE364,
+0x7D9F=>0xE365,
+0x7DB0=>0xE366,
+0x7DD8=>0xE367,
+0x7DDD=>0xE368,
+0x7DE4=>0xE369,
+0x7DDE=>0xE36A,
+0x7DFB=>0xE36B,
+0x7DF2=>0xE36C,
+0x7DE1=>0xE36D,
+0x7E05=>0xE36E,
+0x7E0A=>0xE36F,
+0x7E23=>0xE370,
+0x7E21=>0xE371,
+0x7E12=>0xE372,
+0x7E31=>0xE373,
+0x7E1F=>0xE374,
+0x7E09=>0xE375,
+0x7E0B=>0xE376,
+0x7E22=>0xE377,
+0x7E46=>0xE378,
+0x7E66=>0xE379,
+0x7E3B=>0xE37A,
+0x7E35=>0xE37B,
+0x7E39=>0xE37C,
+0x7E43=>0xE37D,
+0x7E37=>0xE37E,
+0x7E32=>0xE380,
+0x7E3A=>0xE381,
+0x7E67=>0xE382,
+0x7E5D=>0xE383,
+0x7E56=>0xE384,
+0x7E5E=>0xE385,
+0x7E59=>0xE386,
+0x7E5A=>0xE387,
+0x7E79=>0xE388,
+0x7E6A=>0xE389,
+0x7E69=>0xE38A,
+0x7E7C=>0xE38B,
+0x7E7B=>0xE38C,
+0x7E83=>0xE38D,
+0x7DD5=>0xE38E,
+0x7E7D=>0xE38F,
+0x8FAE=>0xE390,
+0x7E7F=>0xE391,
+0x7E88=>0xE392,
+0x7E89=>0xE393,
+0x7E8C=>0xE394,
+0x7E92=>0xE395,
+0x7E90=>0xE396,
+0x7E93=>0xE397,
+0x7E94=>0xE398,
+0x7E96=>0xE399,
+0x7E8E=>0xE39A,
+0x7E9B=>0xE39B,
+0x7E9C=>0xE39C,
+0x7F38=>0xE39D,
+0x7F3A=>0xE39E,
+0x7F45=>0xE39F,
+0x7F4C=>0xE3A0,
+0x7F4D=>0xE3A1,
+0x7F4E=>0xE3A2,
+0x7F50=>0xE3A3,
+0x7F51=>0xE3A4,
+0x7F55=>0xE3A5,
+0x7F54=>0xE3A6,
+0x7F58=>0xE3A7,
+0x7F5F=>0xE3A8,
+0x7F60=>0xE3A9,
+0x7F68=>0xE3AA,
+0x7F69=>0xE3AB,
+0x7F67=>0xE3AC,
+0x7F78=>0xE3AD,
+0x7F82=>0xE3AE,
+0x7F86=>0xE3AF,
+0x7F83=>0xE3B0,
+0x7F88=>0xE3B1,
+0x7F87=>0xE3B2,
+0x7F8C=>0xE3B3,
+0x7F94=>0xE3B4,
+0x7F9E=>0xE3B5,
+0x7F9D=>0xE3B6,
+0x7F9A=>0xE3B7,
+0x7FA3=>0xE3B8,
+0x7FAF=>0xE3B9,
+0x7FB2=>0xE3BA,
+0x7FB9=>0xE3BB,
+0x7FAE=>0xE3BC,
+0x7FB6=>0xE3BD,
+0x7FB8=>0xE3BE,
+0x8B71=>0xE3BF,
+0x7FC5=>0xE3C0,
+0x7FC6=>0xE3C1,
+0x7FCA=>0xE3C2,
+0x7FD5=>0xE3C3,
+0x7FD4=>0xE3C4,
+0x7FE1=>0xE3C5,
+0x7FE6=>0xE3C6,
+0x7FE9=>0xE3C7,
+0x7FF3=>0xE3C8,
+0x7FF9=>0xE3C9,
+0x98DC=>0xE3CA,
+0x8006=>0xE3CB,
+0x8004=>0xE3CC,
+0x800B=>0xE3CD,
+0x8012=>0xE3CE,
+0x8018=>0xE3CF,
+0x8019=>0xE3D0,
+0x801C=>0xE3D1,
+0x8021=>0xE3D2,
+0x8028=>0xE3D3,
+0x803F=>0xE3D4,
+0x803B=>0xE3D5,
+0x804A=>0xE3D6,
+0x8046=>0xE3D7,
+0x8052=>0xE3D8,
+0x8058=>0xE3D9,
+0x805A=>0xE3DA,
+0x805F=>0xE3DB,
+0x8062=>0xE3DC,
+0x8068=>0xE3DD,
+0x8073=>0xE3DE,
+0x8072=>0xE3DF,
+0x8070=>0xE3E0,
+0x8076=>0xE3E1,
+0x8079=>0xE3E2,
+0x807D=>0xE3E3,
+0x807F=>0xE3E4,
+0x8084=>0xE3E5,
+0x8086=>0xE3E6,
+0x8085=>0xE3E7,
+0x809B=>0xE3E8,
+0x8093=>0xE3E9,
+0x809A=>0xE3EA,
+0x80AD=>0xE3EB,
+0x5190=>0xE3EC,
+0x80AC=>0xE3ED,
+0x80DB=>0xE3EE,
+0x80E5=>0xE3EF,
+0x80D9=>0xE3F0,
+0x80DD=>0xE3F1,
+0x80C4=>0xE3F2,
+0x80DA=>0xE3F3,
+0x80D6=>0xE3F4,
+0x8109=>0xE3F5,
+0x80EF=>0xE3F6,
+0x80F1=>0xE3F7,
+0x811B=>0xE3F8,
+0x8129=>0xE3F9,
+0x8123=>0xE3FA,
+0x812F=>0xE3FB,
+0x814B=>0xE3FC,
+0x968B=>0xE440,
+0x8146=>0xE441,
+0x813E=>0xE442,
+0x8153=>0xE443,
+0x8151=>0xE444,
+0x80FC=>0xE445,
+0x8171=>0xE446,
+0x816E=>0xE447,
+0x8165=>0xE448,
+0x8166=>0xE449,
+0x8174=>0xE44A,
+0x8183=>0xE44B,
+0x8188=>0xE44C,
+0x818A=>0xE44D,
+0x8180=>0xE44E,
+0x8182=>0xE44F,
+0x81A0=>0xE450,
+0x8195=>0xE451,
+0x81A4=>0xE452,
+0x81A3=>0xE453,
+0x815F=>0xE454,
+0x8193=>0xE455,
+0x81A9=>0xE456,
+0x81B0=>0xE457,
+0x81B5=>0xE458,
+0x81BE=>0xE459,
+0x81B8=>0xE45A,
+0x81BD=>0xE45B,
+0x81C0=>0xE45C,
+0x81C2=>0xE45D,
+0x81BA=>0xE45E,
+0x81C9=>0xE45F,
+0x81CD=>0xE460,
+0x81D1=>0xE461,
+0x81D9=>0xE462,
+0x81D8=>0xE463,
+0x81C8=>0xE464,
+0x81DA=>0xE465,
+0x81DF=>0xE466,
+0x81E0=>0xE467,
+0x81E7=>0xE468,
+0x81FA=>0xE469,
+0x81FB=>0xE46A,
+0x81FE=>0xE46B,
+0x8201=>0xE46C,
+0x8202=>0xE46D,
+0x8205=>0xE46E,
+0x8207=>0xE46F,
+0x820A=>0xE470,
+0x820D=>0xE471,
+0x8210=>0xE472,
+0x8216=>0xE473,
+0x8229=>0xE474,
+0x822B=>0xE475,
+0x8238=>0xE476,
+0x8233=>0xE477,
+0x8240=>0xE478,
+0x8259=>0xE479,
+0x8258=>0xE47A,
+0x825D=>0xE47B,
+0x825A=>0xE47C,
+0x825F=>0xE47D,
+0x8264=>0xE47E,
+0x8262=>0xE480,
+0x8268=>0xE481,
+0x826A=>0xE482,
+0x826B=>0xE483,
+0x822E=>0xE484,
+0x8271=>0xE485,
+0x8277=>0xE486,
+0x8278=>0xE487,
+0x827E=>0xE488,
+0x828D=>0xE489,
+0x8292=>0xE48A,
+0x82AB=>0xE48B,
+0x829F=>0xE48C,
+0x82BB=>0xE48D,
+0x82AC=>0xE48E,
+0x82E1=>0xE48F,
+0x82E3=>0xE490,
+0x82DF=>0xE491,
+0x82D2=>0xE492,
+0x82F4=>0xE493,
+0x82F3=>0xE494,
+0x82FA=>0xE495,
+0x8393=>0xE496,
+0x8303=>0xE497,
+0x82FB=>0xE498,
+0x82F9=>0xE499,
+0x82DE=>0xE49A,
+0x8306=>0xE49B,
+0x82DC=>0xE49C,
+0x8309=>0xE49D,
+0x82D9=>0xE49E,
+0x8335=>0xE49F,
+0x8334=>0xE4A0,
+0x8316=>0xE4A1,
+0x8332=>0xE4A2,
+0x8331=>0xE4A3,
+0x8340=>0xE4A4,
+0x8339=>0xE4A5,
+0x8350=>0xE4A6,
+0x8345=>0xE4A7,
+0x832F=>0xE4A8,
+0x832B=>0xE4A9,
+0x8317=>0xE4AA,
+0x8318=>0xE4AB,
+0x8385=>0xE4AC,
+0x839A=>0xE4AD,
+0x83AA=>0xE4AE,
+0x839F=>0xE4AF,
+0x83A2=>0xE4B0,
+0x8396=>0xE4B1,
+0x8323=>0xE4B2,
+0x838E=>0xE4B3,
+0x8387=>0xE4B4,
+0x838A=>0xE4B5,
+0x837C=>0xE4B6,
+0x83B5=>0xE4B7,
+0x8373=>0xE4B8,
+0x8375=>0xE4B9,
+0x83A0=>0xE4BA,
+0x8389=>0xE4BB,
+0x83A8=>0xE4BC,
+0x83F4=>0xE4BD,
+0x8413=>0xE4BE,
+0x83EB=>0xE4BF,
+0x83CE=>0xE4C0,
+0x83FD=>0xE4C1,
+0x8403=>0xE4C2,
+0x83D8=>0xE4C3,
+0x840B=>0xE4C4,
+0x83C1=>0xE4C5,
+0x83F7=>0xE4C6,
+0x8407=>0xE4C7,
+0x83E0=>0xE4C8,
+0x83F2=>0xE4C9,
+0x840D=>0xE4CA,
+0x8422=>0xE4CB,
+0x8420=>0xE4CC,
+0x83BD=>0xE4CD,
+0x8438=>0xE4CE,
+0x8506=>0xE4CF,
+0x83FB=>0xE4D0,
+0x846D=>0xE4D1,
+0x842A=>0xE4D2,
+0x843C=>0xE4D3,
+0x855A=>0xE4D4,
+0x8484=>0xE4D5,
+0x8477=>0xE4D6,
+0x846B=>0xE4D7,
+0x84AD=>0xE4D8,
+0x846E=>0xE4D9,
+0x8482=>0xE4DA,
+0x8469=>0xE4DB,
+0x8446=>0xE4DC,
+0x842C=>0xE4DD,
+0x846F=>0xE4DE,
+0x8479=>0xE4DF,
+0x8435=>0xE4E0,
+0x84CA=>0xE4E1,
+0x8462=>0xE4E2,
+0x84B9=>0xE4E3,
+0x84BF=>0xE4E4,
+0x849F=>0xE4E5,
+0x84D9=>0xE4E6,
+0x84CD=>0xE4E7,
+0x84BB=>0xE4E8,
+0x84DA=>0xE4E9,
+0x84D0=>0xE4EA,
+0x84C1=>0xE4EB,
+0x84C6=>0xE4EC,
+0x84D6=>0xE4ED,
+0x84A1=>0xE4EE,
+0x8521=>0xE4EF,
+0x84FF=>0xE4F0,
+0x84F4=>0xE4F1,
+0x8517=>0xE4F2,
+0x8518=>0xE4F3,
+0x852C=>0xE4F4,
+0x851F=>0xE4F5,
+0x8515=>0xE4F6,
+0x8514=>0xE4F7,
+0x84FC=>0xE4F8,
+0x8540=>0xE4F9,
+0x8563=>0xE4FA,
+0x8558=>0xE4FB,
+0x8548=>0xE4FC,
+0x8541=>0xE540,
+0x8602=>0xE541,
+0x854B=>0xE542,
+0x8555=>0xE543,
+0x8580=>0xE544,
+0x85A4=>0xE545,
+0x8588=>0xE546,
+0x8591=>0xE547,
+0x858A=>0xE548,
+0x85A8=>0xE549,
+0x856D=>0xE54A,
+0x8594=>0xE54B,
+0x859B=>0xE54C,
+0x85EA=>0xE54D,
+0x8587=>0xE54E,
+0x859C=>0xE54F,
+0x8577=>0xE550,
+0x857E=>0xE551,
+0x8590=>0xE552,
+0x85C9=>0xE553,
+0x85BA=>0xE554,
+0x85CF=>0xE555,
+0x85B9=>0xE556,
+0x85D0=>0xE557,
+0x85D5=>0xE558,
+0x85DD=>0xE559,
+0x85E5=>0xE55A,
+0x85DC=>0xE55B,
+0x85F9=>0xE55C,
+0x860A=>0xE55D,
+0x8613=>0xE55E,
+0x860B=>0xE55F,
+0x85FE=>0xE560,
+0x85FA=>0xE561,
+0x8606=>0xE562,
+0x8622=>0xE563,
+0x861A=>0xE564,
+0x8630=>0xE565,
+0x863F=>0xE566,
+0x864D=>0xE567,
+0x4E55=>0xE568,
+0x8654=>0xE569,
+0x865F=>0xE56A,
+0x8667=>0xE56B,
+0x8671=>0xE56C,
+0x8693=>0xE56D,
+0x86A3=>0xE56E,
+0x86A9=>0xE56F,
+0x86AA=>0xE570,
+0x868B=>0xE571,
+0x868C=>0xE572,
+0x86B6=>0xE573,
+0x86AF=>0xE574,
+0x86C4=>0xE575,
+0x86C6=>0xE576,
+0x86B0=>0xE577,
+0x86C9=>0xE578,
+0x8823=>0xE579,
+0x86AB=>0xE57A,
+0x86D4=>0xE57B,
+0x86DE=>0xE57C,
+0x86E9=>0xE57D,
+0x86EC=>0xE57E,
+0x86DF=>0xE580,
+0x86DB=>0xE581,
+0x86EF=>0xE582,
+0x8712=>0xE583,
+0x8706=>0xE584,
+0x8708=>0xE585,
+0x8700=>0xE586,
+0x8703=>0xE587,
+0x86FB=>0xE588,
+0x8711=>0xE589,
+0x8709=>0xE58A,
+0x870D=>0xE58B,
+0x86F9=>0xE58C,
+0x870A=>0xE58D,
+0x8734=>0xE58E,
+0x873F=>0xE58F,
+0x8737=>0xE590,
+0x873B=>0xE591,
+0x8725=>0xE592,
+0x8729=>0xE593,
+0x871A=>0xE594,
+0x8760=>0xE595,
+0x875F=>0xE596,
+0x8778=>0xE597,
+0x874C=>0xE598,
+0x874E=>0xE599,
+0x8774=>0xE59A,
+0x8757=>0xE59B,
+0x8768=>0xE59C,
+0x876E=>0xE59D,
+0x8759=>0xE59E,
+0x8753=>0xE59F,
+0x8763=>0xE5A0,
+0x876A=>0xE5A1,
+0x8805=>0xE5A2,
+0x87A2=>0xE5A3,
+0x879F=>0xE5A4,
+0x8782=>0xE5A5,
+0x87AF=>0xE5A6,
+0x87CB=>0xE5A7,
+0x87BD=>0xE5A8,
+0x87C0=>0xE5A9,
+0x87D0=>0xE5AA,
+0x96D6=>0xE5AB,
+0x87AB=>0xE5AC,
+0x87C4=>0xE5AD,
+0x87B3=>0xE5AE,
+0x87C7=>0xE5AF,
+0x87C6=>0xE5B0,
+0x87BB=>0xE5B1,
+0x87EF=>0xE5B2,
+0x87F2=>0xE5B3,
+0x87E0=>0xE5B4,
+0x880F=>0xE5B5,
+0x880D=>0xE5B6,
+0x87FE=>0xE5B7,
+0x87F6=>0xE5B8,
+0x87F7=>0xE5B9,
+0x880E=>0xE5BA,
+0x87D2=>0xE5BB,
+0x8811=>0xE5BC,
+0x8816=>0xE5BD,
+0x8815=>0xE5BE,
+0x8822=>0xE5BF,
+0x8821=>0xE5C0,
+0x8831=>0xE5C1,
+0x8836=>0xE5C2,
+0x8839=>0xE5C3,
+0x8827=>0xE5C4,
+0x883B=>0xE5C5,
+0x8844=>0xE5C6,
+0x8842=>0xE5C7,
+0x8852=>0xE5C8,
+0x8859=>0xE5C9,
+0x885E=>0xE5CA,
+0x8862=>0xE5CB,
+0x886B=>0xE5CC,
+0x8881=>0xE5CD,
+0x887E=>0xE5CE,
+0x889E=>0xE5CF,
+0x8875=>0xE5D0,
+0x887D=>0xE5D1,
+0x88B5=>0xE5D2,
+0x8872=>0xE5D3,
+0x8882=>0xE5D4,
+0x8897=>0xE5D5,
+0x8892=>0xE5D6,
+0x88AE=>0xE5D7,
+0x8899=>0xE5D8,
+0x88A2=>0xE5D9,
+0x888D=>0xE5DA,
+0x88A4=>0xE5DB,
+0x88B0=>0xE5DC,
+0x88BF=>0xE5DD,
+0x88B1=>0xE5DE,
+0x88C3=>0xE5DF,
+0x88C4=>0xE5E0,
+0x88D4=>0xE5E1,
+0x88D8=>0xE5E2,
+0x88D9=>0xE5E3,
+0x88DD=>0xE5E4,
+0x88F9=>0xE5E5,
+0x8902=>0xE5E6,
+0x88FC=>0xE5E7,
+0x88F4=>0xE5E8,
+0x88E8=>0xE5E9,
+0x88F2=>0xE5EA,
+0x8904=>0xE5EB,
+0x890C=>0xE5EC,
+0x890A=>0xE5ED,
+0x8913=>0xE5EE,
+0x8943=>0xE5EF,
+0x891E=>0xE5F0,
+0x8925=>0xE5F1,
+0x892A=>0xE5F2,
+0x892B=>0xE5F3,
+0x8941=>0xE5F4,
+0x8944=>0xE5F5,
+0x893B=>0xE5F6,
+0x8936=>0xE5F7,
+0x8938=>0xE5F8,
+0x894C=>0xE5F9,
+0x891D=>0xE5FA,
+0x8960=>0xE5FB,
+0x895E=>0xE5FC,
+0x8966=>0xE640,
+0x8964=>0xE641,
+0x896D=>0xE642,
+0x896A=>0xE643,
+0x896F=>0xE644,
+0x8974=>0xE645,
+0x8977=>0xE646,
+0x897E=>0xE647,
+0x8983=>0xE648,
+0x8988=>0xE649,
+0x898A=>0xE64A,
+0x8993=>0xE64B,
+0x8998=>0xE64C,
+0x89A1=>0xE64D,
+0x89A9=>0xE64E,
+0x89A6=>0xE64F,
+0x89AC=>0xE650,
+0x89AF=>0xE651,
+0x89B2=>0xE652,
+0x89BA=>0xE653,
+0x89BD=>0xE654,
+0x89BF=>0xE655,
+0x89C0=>0xE656,
+0x89DA=>0xE657,
+0x89DC=>0xE658,
+0x89DD=>0xE659,
+0x89E7=>0xE65A,
+0x89F4=>0xE65B,
+0x89F8=>0xE65C,
+0x8A03=>0xE65D,
+0x8A16=>0xE65E,
+0x8A10=>0xE65F,
+0x8A0C=>0xE660,
+0x8A1B=>0xE661,
+0x8A1D=>0xE662,
+0x8A25=>0xE663,
+0x8A36=>0xE664,
+0x8A41=>0xE665,
+0x8A5B=>0xE666,
+0x8A52=>0xE667,
+0x8A46=>0xE668,
+0x8A48=>0xE669,
+0x8A7C=>0xE66A,
+0x8A6D=>0xE66B,
+0x8A6C=>0xE66C,
+0x8A62=>0xE66D,
+0x8A85=>0xE66E,
+0x8A82=>0xE66F,
+0x8A84=>0xE670,
+0x8AA8=>0xE671,
+0x8AA1=>0xE672,
+0x8A91=>0xE673,
+0x8AA5=>0xE674,
+0x8AA6=>0xE675,
+0x8A9A=>0xE676,
+0x8AA3=>0xE677,
+0x8AC4=>0xE678,
+0x8ACD=>0xE679,
+0x8AC2=>0xE67A,
+0x8ADA=>0xE67B,
+0x8AEB=>0xE67C,
+0x8AF3=>0xE67D,
+0x8AE7=>0xE67E,
+0x8AE4=>0xE680,
+0x8AF1=>0xE681,
+0x8B14=>0xE682,
+0x8AE0=>0xE683,
+0x8AE2=>0xE684,
+0x8AF7=>0xE685,
+0x8ADE=>0xE686,
+0x8ADB=>0xE687,
+0x8B0C=>0xE688,
+0x8B07=>0xE689,
+0x8B1A=>0xE68A,
+0x8AE1=>0xE68B,
+0x8B16=>0xE68C,
+0x8B10=>0xE68D,
+0x8B17=>0xE68E,
+0x8B20=>0xE68F,
+0x8B33=>0xE690,
+0x97AB=>0xE691,
+0x8B26=>0xE692,
+0x8B2B=>0xE693,
+0x8B3E=>0xE694,
+0x8B28=>0xE695,
+0x8B41=>0xE696,
+0x8B4C=>0xE697,
+0x8B4F=>0xE698,
+0x8B4E=>0xE699,
+0x8B49=>0xE69A,
+0x8B56=>0xE69B,
+0x8B5B=>0xE69C,
+0x8B5A=>0xE69D,
+0x8B6B=>0xE69E,
+0x8B5F=>0xE69F,
+0x8B6C=>0xE6A0,
+0x8B6F=>0xE6A1,
+0x8B74=>0xE6A2,
+0x8B7D=>0xE6A3,
+0x8B80=>0xE6A4,
+0x8B8C=>0xE6A5,
+0x8B8E=>0xE6A6,
+0x8B92=>0xE6A7,
+0x8B93=>0xE6A8,
+0x8B96=>0xE6A9,
+0x8B99=>0xE6AA,
+0x8B9A=>0xE6AB,
+0x8C3A=>0xE6AC,
+0x8C41=>0xE6AD,
+0x8C3F=>0xE6AE,
+0x8C48=>0xE6AF,
+0x8C4C=>0xE6B0,
+0x8C4E=>0xE6B1,
+0x8C50=>0xE6B2,
+0x8C55=>0xE6B3,
+0x8C62=>0xE6B4,
+0x8C6C=>0xE6B5,
+0x8C78=>0xE6B6,
+0x8C7A=>0xE6B7,
+0x8C82=>0xE6B8,
+0x8C89=>0xE6B9,
+0x8C85=>0xE6BA,
+0x8C8A=>0xE6BB,
+0x8C8D=>0xE6BC,
+0x8C8E=>0xE6BD,
+0x8C94=>0xE6BE,
+0x8C7C=>0xE6BF,
+0x8C98=>0xE6C0,
+0x621D=>0xE6C1,
+0x8CAD=>0xE6C2,
+0x8CAA=>0xE6C3,
+0x8CBD=>0xE6C4,
+0x8CB2=>0xE6C5,
+0x8CB3=>0xE6C6,
+0x8CAE=>0xE6C7,
+0x8CB6=>0xE6C8,
+0x8CC8=>0xE6C9,
+0x8CC1=>0xE6CA,
+0x8CE4=>0xE6CB,
+0x8CE3=>0xE6CC,
+0x8CDA=>0xE6CD,
+0x8CFD=>0xE6CE,
+0x8CFA=>0xE6CF,
+0x8CFB=>0xE6D0,
+0x8D04=>0xE6D1,
+0x8D05=>0xE6D2,
+0x8D0A=>0xE6D3,
+0x8D07=>0xE6D4,
+0x8D0F=>0xE6D5,
+0x8D0D=>0xE6D6,
+0x8D10=>0xE6D7,
+0x9F4E=>0xE6D8,
+0x8D13=>0xE6D9,
+0x8CCD=>0xE6DA,
+0x8D14=>0xE6DB,
+0x8D16=>0xE6DC,
+0x8D67=>0xE6DD,
+0x8D6D=>0xE6DE,
+0x8D71=>0xE6DF,
+0x8D73=>0xE6E0,
+0x8D81=>0xE6E1,
+0x8D99=>0xE6E2,
+0x8DC2=>0xE6E3,
+0x8DBE=>0xE6E4,
+0x8DBA=>0xE6E5,
+0x8DCF=>0xE6E6,
+0x8DDA=>0xE6E7,
+0x8DD6=>0xE6E8,
+0x8DCC=>0xE6E9,
+0x8DDB=>0xE6EA,
+0x8DCB=>0xE6EB,
+0x8DEA=>0xE6EC,
+0x8DEB=>0xE6ED,
+0x8DDF=>0xE6EE,
+0x8DE3=>0xE6EF,
+0x8DFC=>0xE6F0,
+0x8E08=>0xE6F1,
+0x8E09=>0xE6F2,
+0x8DFF=>0xE6F3,
+0x8E1D=>0xE6F4,
+0x8E1E=>0xE6F5,
+0x8E10=>0xE6F6,
+0x8E1F=>0xE6F7,
+0x8E42=>0xE6F8,
+0x8E35=>0xE6F9,
+0x8E30=>0xE6FA,
+0x8E34=>0xE6FB,
+0x8E4A=>0xE6FC,
+0x8E47=>0xE740,
+0x8E49=>0xE741,
+0x8E4C=>0xE742,
+0x8E50=>0xE743,
+0x8E48=>0xE744,
+0x8E59=>0xE745,
+0x8E64=>0xE746,
+0x8E60=>0xE747,
+0x8E2A=>0xE748,
+0x8E63=>0xE749,
+0x8E55=>0xE74A,
+0x8E76=>0xE74B,
+0x8E72=>0xE74C,
+0x8E7C=>0xE74D,
+0x8E81=>0xE74E,
+0x8E87=>0xE74F,
+0x8E85=>0xE750,
+0x8E84=>0xE751,
+0x8E8B=>0xE752,
+0x8E8A=>0xE753,
+0x8E93=>0xE754,
+0x8E91=>0xE755,
+0x8E94=>0xE756,
+0x8E99=>0xE757,
+0x8EAA=>0xE758,
+0x8EA1=>0xE759,
+0x8EAC=>0xE75A,
+0x8EB0=>0xE75B,
+0x8EC6=>0xE75C,
+0x8EB1=>0xE75D,
+0x8EBE=>0xE75E,
+0x8EC5=>0xE75F,
+0x8EC8=>0xE760,
+0x8ECB=>0xE761,
+0x8EDB=>0xE762,
+0x8EE3=>0xE763,
+0x8EFC=>0xE764,
+0x8EFB=>0xE765,
+0x8EEB=>0xE766,
+0x8EFE=>0xE767,
+0x8F0A=>0xE768,
+0x8F05=>0xE769,
+0x8F15=>0xE76A,
+0x8F12=>0xE76B,
+0x8F19=>0xE76C,
+0x8F13=>0xE76D,
+0x8F1C=>0xE76E,
+0x8F1F=>0xE76F,
+0x8F1B=>0xE770,
+0x8F0C=>0xE771,
+0x8F26=>0xE772,
+0x8F33=>0xE773,
+0x8F3B=>0xE774,
+0x8F39=>0xE775,
+0x8F45=>0xE776,
+0x8F42=>0xE777,
+0x8F3E=>0xE778,
+0x8F4C=>0xE779,
+0x8F49=>0xE77A,
+0x8F46=>0xE77B,
+0x8F4E=>0xE77C,
+0x8F57=>0xE77D,
+0x8F5C=>0xE77E,
+0x8F62=>0xE780,
+0x8F63=>0xE781,
+0x8F64=>0xE782,
+0x8F9C=>0xE783,
+0x8F9F=>0xE784,
+0x8FA3=>0xE785,
+0x8FAD=>0xE786,
+0x8FAF=>0xE787,
+0x8FB7=>0xE788,
+0x8FDA=>0xE789,
+0x8FE5=>0xE78A,
+0x8FE2=>0xE78B,
+0x8FEA=>0xE78C,
+0x8FEF=>0xE78D,
+0x9087=>0xE78E,
+0x8FF4=>0xE78F,
+0x9005=>0xE790,
+0x8FF9=>0xE791,
+0x8FFA=>0xE792,
+0x9011=>0xE793,
+0x9015=>0xE794,
+0x9021=>0xE795,
+0x900D=>0xE796,
+0x901E=>0xE797,
+0x9016=>0xE798,
+0x900B=>0xE799,
+0x9027=>0xE79A,
+0x9036=>0xE79B,
+0x9035=>0xE79C,
+0x9039=>0xE79D,
+0x8FF8=>0xE79E,
+0x904F=>0xE79F,
+0x9050=>0xE7A0,
+0x9051=>0xE7A1,
+0x9052=>0xE7A2,
+0x900E=>0xE7A3,
+0x9049=>0xE7A4,
+0x903E=>0xE7A5,
+0x9056=>0xE7A6,
+0x9058=>0xE7A7,
+0x905E=>0xE7A8,
+0x9068=>0xE7A9,
+0x906F=>0xE7AA,
+0x9076=>0xE7AB,
+0x96A8=>0xE7AC,
+0x9072=>0xE7AD,
+0x9082=>0xE7AE,
+0x907D=>0xE7AF,
+0x9081=>0xE7B0,
+0x9080=>0xE7B1,
+0x908A=>0xE7B2,
+0x9089=>0xE7B3,
+0x908F=>0xE7B4,
+0x90A8=>0xE7B5,
+0x90AF=>0xE7B6,
+0x90B1=>0xE7B7,
+0x90B5=>0xE7B8,
+0x90E2=>0xE7B9,
+0x90E4=>0xE7BA,
+0x6248=>0xE7BB,
+0x90DB=>0xE7BC,
+0x9102=>0xE7BD,
+0x9112=>0xE7BE,
+0x9119=>0xE7BF,
+0x9132=>0xE7C0,
+0x9130=>0xE7C1,
+0x914A=>0xE7C2,
+0x9156=>0xE7C3,
+0x9158=>0xE7C4,
+0x9163=>0xE7C5,
+0x9165=>0xE7C6,
+0x9169=>0xE7C7,
+0x9173=>0xE7C8,
+0x9172=>0xE7C9,
+0x918B=>0xE7CA,
+0x9189=>0xE7CB,
+0x9182=>0xE7CC,
+0x91A2=>0xE7CD,
+0x91AB=>0xE7CE,
+0x91AF=>0xE7CF,
+0x91AA=>0xE7D0,
+0x91B5=>0xE7D1,
+0x91B4=>0xE7D2,
+0x91BA=>0xE7D3,
+0x91C0=>0xE7D4,
+0x91C1=>0xE7D5,
+0x91C9=>0xE7D6,
+0x91CB=>0xE7D7,
+0x91D0=>0xE7D8,
+0x91D6=>0xE7D9,
+0x91DF=>0xE7DA,
+0x91E1=>0xE7DB,
+0x91DB=>0xE7DC,
+0x91FC=>0xE7DD,
+0x91F5=>0xE7DE,
+0x91F6=>0xE7DF,
+0x921E=>0xE7E0,
+0x91FF=>0xE7E1,
+0x9214=>0xE7E2,
+0x922C=>0xE7E3,
+0x9215=>0xE7E4,
+0x9211=>0xE7E5,
+0x925E=>0xE7E6,
+0x9257=>0xE7E7,
+0x9245=>0xE7E8,
+0x9249=>0xE7E9,
+0x9264=>0xE7EA,
+0x9248=>0xE7EB,
+0x9295=>0xE7EC,
+0x923F=>0xE7ED,
+0x924B=>0xE7EE,
+0x9250=>0xE7EF,
+0x929C=>0xE7F0,
+0x9296=>0xE7F1,
+0x9293=>0xE7F2,
+0x929B=>0xE7F3,
+0x925A=>0xE7F4,
+0x92CF=>0xE7F5,
+0x92B9=>0xE7F6,
+0x92B7=>0xE7F7,
+0x92E9=>0xE7F8,
+0x930F=>0xE7F9,
+0x92FA=>0xE7FA,
+0x9344=>0xE7FB,
+0x932E=>0xE7FC,
+0x9319=>0xE840,
+0x9322=>0xE841,
+0x931A=>0xE842,
+0x9323=>0xE843,
+0x933A=>0xE844,
+0x9335=>0xE845,
+0x933B=>0xE846,
+0x935C=>0xE847,
+0x9360=>0xE848,
+0x937C=>0xE849,
+0x936E=>0xE84A,
+0x9356=>0xE84B,
+0x93B0=>0xE84C,
+0x93AC=>0xE84D,
+0x93AD=>0xE84E,
+0x9394=>0xE84F,
+0x93B9=>0xE850,
+0x93D6=>0xE851,
+0x93D7=>0xE852,
+0x93E8=>0xE853,
+0x93E5=>0xE854,
+0x93D8=>0xE855,
+0x93C3=>0xE856,
+0x93DD=>0xE857,
+0x93D0=>0xE858,
+0x93C8=>0xE859,
+0x93E4=>0xE85A,
+0x941A=>0xE85B,
+0x9414=>0xE85C,
+0x9413=>0xE85D,
+0x9403=>0xE85E,
+0x9407=>0xE85F,
+0x9410=>0xE860,
+0x9436=>0xE861,
+0x942B=>0xE862,
+0x9435=>0xE863,
+0x9421=>0xE864,
+0x943A=>0xE865,
+0x9441=>0xE866,
+0x9452=>0xE867,
+0x9444=>0xE868,
+0x945B=>0xE869,
+0x9460=>0xE86A,
+0x9462=>0xE86B,
+0x945E=>0xE86C,
+0x946A=>0xE86D,
+0x9229=>0xE86E,
+0x9470=>0xE86F,
+0x9475=>0xE870,
+0x9477=>0xE871,
+0x947D=>0xE872,
+0x945A=>0xE873,
+0x947C=>0xE874,
+0x947E=>0xE875,
+0x9481=>0xE876,
+0x947F=>0xE877,
+0x9582=>0xE878,
+0x9587=>0xE879,
+0x958A=>0xE87A,
+0x9594=>0xE87B,
+0x9596=>0xE87C,
+0x9598=>0xE87D,
+0x9599=>0xE87E,
+0x95A0=>0xE880,
+0x95A8=>0xE881,
+0x95A7=>0xE882,
+0x95AD=>0xE883,
+0x95BC=>0xE884,
+0x95BB=>0xE885,
+0x95B9=>0xE886,
+0x95BE=>0xE887,
+0x95CA=>0xE888,
+0x6FF6=>0xE889,
+0x95C3=>0xE88A,
+0x95CD=>0xE88B,
+0x95CC=>0xE88C,
+0x95D5=>0xE88D,
+0x95D4=>0xE88E,
+0x95D6=>0xE88F,
+0x95DC=>0xE890,
+0x95E1=>0xE891,
+0x95E5=>0xE892,
+0x95E2=>0xE893,
+0x9621=>0xE894,
+0x9628=>0xE895,
+0x962E=>0xE896,
+0x962F=>0xE897,
+0x9642=>0xE898,
+0x964C=>0xE899,
+0x964F=>0xE89A,
+0x964B=>0xE89B,
+0x9677=>0xE89C,
+0x965C=>0xE89D,
+0x965E=>0xE89E,
+0x965D=>0xE89F,
+0x965F=>0xE8A0,
+0x9666=>0xE8A1,
+0x9672=>0xE8A2,
+0x966C=>0xE8A3,
+0x968D=>0xE8A4,
+0x9698=>0xE8A5,
+0x9695=>0xE8A6,
+0x9697=>0xE8A7,
+0x96AA=>0xE8A8,
+0x96A7=>0xE8A9,
+0x96B1=>0xE8AA,
+0x96B2=>0xE8AB,
+0x96B0=>0xE8AC,
+0x96B4=>0xE8AD,
+0x96B6=>0xE8AE,
+0x96B8=>0xE8AF,
+0x96B9=>0xE8B0,
+0x96CE=>0xE8B1,
+0x96CB=>0xE8B2,
+0x96C9=>0xE8B3,
+0x96CD=>0xE8B4,
+0x894D=>0xE8B5,
+0x96DC=>0xE8B6,
+0x970D=>0xE8B7,
+0x96D5=>0xE8B8,
+0x96F9=>0xE8B9,
+0x9704=>0xE8BA,
+0x9706=>0xE8BB,
+0x9708=>0xE8BC,
+0x9713=>0xE8BD,
+0x970E=>0xE8BE,
+0x9711=>0xE8BF,
+0x970F=>0xE8C0,
+0x9716=>0xE8C1,
+0x9719=>0xE8C2,
+0x9724=>0xE8C3,
+0x972A=>0xE8C4,
+0x9730=>0xE8C5,
+0x9739=>0xE8C6,
+0x973D=>0xE8C7,
+0x973E=>0xE8C8,
+0x9744=>0xE8C9,
+0x9746=>0xE8CA,
+0x9748=>0xE8CB,
+0x9742=>0xE8CC,
+0x9749=>0xE8CD,
+0x975C=>0xE8CE,
+0x9760=>0xE8CF,
+0x9764=>0xE8D0,
+0x9766=>0xE8D1,
+0x9768=>0xE8D2,
+0x52D2=>0xE8D3,
+0x976B=>0xE8D4,
+0x9771=>0xE8D5,
+0x9779=>0xE8D6,
+0x9785=>0xE8D7,
+0x977C=>0xE8D8,
+0x9781=>0xE8D9,
+0x977A=>0xE8DA,
+0x9786=>0xE8DB,
+0x978B=>0xE8DC,
+0x978F=>0xE8DD,
+0x9790=>0xE8DE,
+0x979C=>0xE8DF,
+0x97A8=>0xE8E0,
+0x97A6=>0xE8E1,
+0x97A3=>0xE8E2,
+0x97B3=>0xE8E3,
+0x97B4=>0xE8E4,
+0x97C3=>0xE8E5,
+0x97C6=>0xE8E6,
+0x97C8=>0xE8E7,
+0x97CB=>0xE8E8,
+0x97DC=>0xE8E9,
+0x97ED=>0xE8EA,
+0x9F4F=>0xE8EB,
+0x97F2=>0xE8EC,
+0x7ADF=>0xE8ED,
+0x97F6=>0xE8EE,
+0x97F5=>0xE8EF,
+0x980F=>0xE8F0,
+0x980C=>0xE8F1,
+0x9838=>0xE8F2,
+0x9824=>0xE8F3,
+0x9821=>0xE8F4,
+0x9837=>0xE8F5,
+0x983D=>0xE8F6,
+0x9846=>0xE8F7,
+0x984F=>0xE8F8,
+0x984B=>0xE8F9,
+0x986B=>0xE8FA,
+0x986F=>0xE8FB,
+0x9870=>0xE8FC,
+0x9871=>0xE940,
+0x9874=>0xE941,
+0x9873=>0xE942,
+0x98AA=>0xE943,
+0x98AF=>0xE944,
+0x98B1=>0xE945,
+0x98B6=>0xE946,
+0x98C4=>0xE947,
+0x98C3=>0xE948,
+0x98C6=>0xE949,
+0x98E9=>0xE94A,
+0x98EB=>0xE94B,
+0x9903=>0xE94C,
+0x9909=>0xE94D,
+0x9912=>0xE94E,
+0x9914=>0xE94F,
+0x9918=>0xE950,
+0x9921=>0xE951,
+0x991D=>0xE952,
+0x991E=>0xE953,
+0x9924=>0xE954,
+0x9920=>0xE955,
+0x992C=>0xE956,
+0x992E=>0xE957,
+0x993D=>0xE958,
+0x993E=>0xE959,
+0x9942=>0xE95A,
+0x9949=>0xE95B,
+0x9945=>0xE95C,
+0x9950=>0xE95D,
+0x994B=>0xE95E,
+0x9951=>0xE95F,
+0x9952=>0xE960,
+0x994C=>0xE961,
+0x9955=>0xE962,
+0x9997=>0xE963,
+0x9998=>0xE964,
+0x99A5=>0xE965,
+0x99AD=>0xE966,
+0x99AE=>0xE967,
+0x99BC=>0xE968,
+0x99DF=>0xE969,
+0x99DB=>0xE96A,
+0x99DD=>0xE96B,
+0x99D8=>0xE96C,
+0x99D1=>0xE96D,
+0x99ED=>0xE96E,
+0x99EE=>0xE96F,
+0x99F1=>0xE970,
+0x99F2=>0xE971,
+0x99FB=>0xE972,
+0x99F8=>0xE973,
+0x9A01=>0xE974,
+0x9A0F=>0xE975,
+0x9A05=>0xE976,
+0x99E2=>0xE977,
+0x9A19=>0xE978,
+0x9A2B=>0xE979,
+0x9A37=>0xE97A,
+0x9A45=>0xE97B,
+0x9A42=>0xE97C,
+0x9A40=>0xE97D,
+0x9A43=>0xE97E,
+0x9A3E=>0xE980,
+0x9A55=>0xE981,
+0x9A4D=>0xE982,
+0x9A5B=>0xE983,
+0x9A57=>0xE984,
+0x9A5F=>0xE985,
+0x9A62=>0xE986,
+0x9A65=>0xE987,
+0x9A64=>0xE988,
+0x9A69=>0xE989,
+0x9A6B=>0xE98A,
+0x9A6A=>0xE98B,
+0x9AAD=>0xE98C,
+0x9AB0=>0xE98D,
+0x9ABC=>0xE98E,
+0x9AC0=>0xE98F,
+0x9ACF=>0xE990,
+0x9AD1=>0xE991,
+0x9AD3=>0xE992,
+0x9AD4=>0xE993,
+0x9ADE=>0xE994,
+0x9ADF=>0xE995,
+0x9AE2=>0xE996,
+0x9AE3=>0xE997,
+0x9AE6=>0xE998,
+0x9AEF=>0xE999,
+0x9AEB=>0xE99A,
+0x9AEE=>0xE99B,
+0x9AF4=>0xE99C,
+0x9AF1=>0xE99D,
+0x9AF7=>0xE99E,
+0x9AFB=>0xE99F,
+0x9B06=>0xE9A0,
+0x9B18=>0xE9A1,
+0x9B1A=>0xE9A2,
+0x9B1F=>0xE9A3,
+0x9B22=>0xE9A4,
+0x9B23=>0xE9A5,
+0x9B25=>0xE9A6,
+0x9B27=>0xE9A7,
+0x9B28=>0xE9A8,
+0x9B29=>0xE9A9,
+0x9B2A=>0xE9AA,
+0x9B2E=>0xE9AB,
+0x9B2F=>0xE9AC,
+0x9B32=>0xE9AD,
+0x9B44=>0xE9AE,
+0x9B43=>0xE9AF,
+0x9B4F=>0xE9B0,
+0x9B4D=>0xE9B1,
+0x9B4E=>0xE9B2,
+0x9B51=>0xE9B3,
+0x9B58=>0xE9B4,
+0x9B74=>0xE9B5,
+0x9B93=>0xE9B6,
+0x9B83=>0xE9B7,
+0x9B91=>0xE9B8,
+0x9B96=>0xE9B9,
+0x9B97=>0xE9BA,
+0x9B9F=>0xE9BB,
+0x9BA0=>0xE9BC,
+0x9BA8=>0xE9BD,
+0x9BB4=>0xE9BE,
+0x9BC0=>0xE9BF,
+0x9BCA=>0xE9C0,
+0x9BB9=>0xE9C1,
+0x9BC6=>0xE9C2,
+0x9BCF=>0xE9C3,
+0x9BD1=>0xE9C4,
+0x9BD2=>0xE9C5,
+0x9BE3=>0xE9C6,
+0x9BE2=>0xE9C7,
+0x9BE4=>0xE9C8,
+0x9BD4=>0xE9C9,
+0x9BE1=>0xE9CA,
+0x9C3A=>0xE9CB,
+0x9BF2=>0xE9CC,
+0x9BF1=>0xE9CD,
+0x9BF0=>0xE9CE,
+0x9C15=>0xE9CF,
+0x9C14=>0xE9D0,
+0x9C09=>0xE9D1,
+0x9C13=>0xE9D2,
+0x9C0C=>0xE9D3,
+0x9C06=>0xE9D4,
+0x9C08=>0xE9D5,
+0x9C12=>0xE9D6,
+0x9C0A=>0xE9D7,
+0x9C04=>0xE9D8,
+0x9C2E=>0xE9D9,
+0x9C1B=>0xE9DA,
+0x9C25=>0xE9DB,
+0x9C24=>0xE9DC,
+0x9C21=>0xE9DD,
+0x9C30=>0xE9DE,
+0x9C47=>0xE9DF,
+0x9C32=>0xE9E0,
+0x9C46=>0xE9E1,
+0x9C3E=>0xE9E2,
+0x9C5A=>0xE9E3,
+0x9C60=>0xE9E4,
+0x9C67=>0xE9E5,
+0x9C76=>0xE9E6,
+0x9C78=>0xE9E7,
+0x9CE7=>0xE9E8,
+0x9CEC=>0xE9E9,
+0x9CF0=>0xE9EA,
+0x9D09=>0xE9EB,
+0x9D08=>0xE9EC,
+0x9CEB=>0xE9ED,
+0x9D03=>0xE9EE,
+0x9D06=>0xE9EF,
+0x9D2A=>0xE9F0,
+0x9D26=>0xE9F1,
+0x9DAF=>0xE9F2,
+0x9D23=>0xE9F3,
+0x9D1F=>0xE9F4,
+0x9D44=>0xE9F5,
+0x9D15=>0xE9F6,
+0x9D12=>0xE9F7,
+0x9D41=>0xE9F8,
+0x9D3F=>0xE9F9,
+0x9D3E=>0xE9FA,
+0x9D46=>0xE9FB,
+0x9D48=>0xE9FC,
+0x9D5D=>0xEA40,
+0x9D5E=>0xEA41,
+0x9D64=>0xEA42,
+0x9D51=>0xEA43,
+0x9D50=>0xEA44,
+0x9D59=>0xEA45,
+0x9D72=>0xEA46,
+0x9D89=>0xEA47,
+0x9D87=>0xEA48,
+0x9DAB=>0xEA49,
+0x9D6F=>0xEA4A,
+0x9D7A=>0xEA4B,
+0x9D9A=>0xEA4C,
+0x9DA4=>0xEA4D,
+0x9DA9=>0xEA4E,
+0x9DB2=>0xEA4F,
+0x9DC4=>0xEA50,
+0x9DC1=>0xEA51,
+0x9DBB=>0xEA52,
+0x9DB8=>0xEA53,
+0x9DBA=>0xEA54,
+0x9DC6=>0xEA55,
+0x9DCF=>0xEA56,
+0x9DC2=>0xEA57,
+0x9DD9=>0xEA58,
+0x9DD3=>0xEA59,
+0x9DF8=>0xEA5A,
+0x9DE6=>0xEA5B,
+0x9DED=>0xEA5C,
+0x9DEF=>0xEA5D,
+0x9DFD=>0xEA5E,
+0x9E1A=>0xEA5F,
+0x9E1B=>0xEA60,
+0x9E1E=>0xEA61,
+0x9E75=>0xEA62,
+0x9E79=>0xEA63,
+0x9E7D=>0xEA64,
+0x9E81=>0xEA65,
+0x9E88=>0xEA66,
+0x9E8B=>0xEA67,
+0x9E8C=>0xEA68,
+0x9E92=>0xEA69,
+0x9E95=>0xEA6A,
+0x9E91=>0xEA6B,
+0x9E9D=>0xEA6C,
+0x9EA5=>0xEA6D,
+0x9EA9=>0xEA6E,
+0x9EB8=>0xEA6F,
+0x9EAA=>0xEA70,
+0x9EAD=>0xEA71,
+0x9761=>0xEA72,
+0x9ECC=>0xEA73,
+0x9ECE=>0xEA74,
+0x9ECF=>0xEA75,
+0x9ED0=>0xEA76,
+0x9ED4=>0xEA77,
+0x9EDC=>0xEA78,
+0x9EDE=>0xEA79,
+0x9EDD=>0xEA7A,
+0x9EE0=>0xEA7B,
+0x9EE5=>0xEA7C,
+0x9EE8=>0xEA7D,
+0x9EEF=>0xEA7E,
+0x9EF4=>0xEA80,
+0x9EF6=>0xEA81,
+0x9EF7=>0xEA82,
+0x9EF9=>0xEA83,
+0x9EFB=>0xEA84,
+0x9EFC=>0xEA85,
+0x9EFD=>0xEA86,
+0x9F07=>0xEA87,
+0x9F08=>0xEA88,
+0x76B7=>0xEA89,
+0x9F15=>0xEA8A,
+0x9F21=>0xEA8B,
+0x9F2C=>0xEA8C,
+0x9F3E=>0xEA8D,
+0x9F4A=>0xEA8E,
+0x9F52=>0xEA8F,
+0x9F54=>0xEA90,
+0x9F63=>0xEA91,
+0x9F5F=>0xEA92,
+0x9F60=>0xEA93,
+0x9F61=>0xEA94,
+0x9F66=>0xEA95,
+0x9F67=>0xEA96,
+0x9F6C=>0xEA97,
+0x9F6A=>0xEA98,
+0x9F77=>0xEA99,
+0x9F72=>0xEA9A,
+0x9F76=>0xEA9B,
+0x9F95=>0xEA9C,
+0x9F9C=>0xEA9D,
+0x9FA0=>0xEA9E,
+0x582F=>0xEA9F,
+0x69C7=>0xEAA0,
+0x9059=>0xEAA1,
+0x7464=>0xEAA2,
+0x51DC=>0xEAA3,
+0x7199=>0xEAA4,
+0x7E8A=>0xED40,
+0x891C=>0xED41,
+0x9348=>0xED42,
+0x9288=>0xED43,
+0x84DC=>0xED44,
+0x4FC9=>0xED45,
+0x70BB=>0xED46,
+0x6631=>0xED47,
+0x68C8=>0xED48,
+0x92F9=>0xED49,
+0x66FB=>0xED4A,
+0x5F45=>0xED4B,
+0x4E28=>0xED4C,
+0x4EE1=>0xED4D,
+0x4EFC=>0xED4E,
+0x4F00=>0xED4F,
+0x4F03=>0xED50,
+0x4F39=>0xED51,
+0x4F56=>0xED52,
+0x4F92=>0xED53,
+0x4F8A=>0xED54,
+0x4F9A=>0xED55,
+0x4F94=>0xED56,
+0x4FCD=>0xED57,
+0x5040=>0xED58,
+0x5022=>0xED59,
+0x4FFF=>0xED5A,
+0x501E=>0xED5B,
+0x5046=>0xED5C,
+0x5070=>0xED5D,
+0x5042=>0xED5E,
+0x5094=>0xED5F,
+0x50F4=>0xED60,
+0x50D8=>0xED61,
+0x514A=>0xED62,
+0x5164=>0xED63,
+0x519D=>0xED64,
+0x51BE=>0xED65,
+0x51EC=>0xED66,
+0x5215=>0xED67,
+0x529C=>0xED68,
+0x52A6=>0xED69,
+0x52C0=>0xED6A,
+0x52DB=>0xED6B,
+0x5300=>0xED6C,
+0x5307=>0xED6D,
+0x5324=>0xED6E,
+0x5372=>0xED6F,
+0x5393=>0xED70,
+0x53B2=>0xED71,
+0x53DD=>0xED72,
+0xFA0E=>0xED73,
+0x549C=>0xED74,
+0x548A=>0xED75,
+0x54A9=>0xED76,
+0x54FF=>0xED77,
+0x5586=>0xED78,
+0x5759=>0xED79,
+0x5765=>0xED7A,
+0x57AC=>0xED7B,
+0x57C8=>0xED7C,
+0x57C7=>0xED7D,
+0xFA0F=>0xED7E,
+0xFA10=>0xED80,
+0x589E=>0xED81,
+0x58B2=>0xED82,
+0x590B=>0xED83,
+0x5953=>0xED84,
+0x595B=>0xED85,
+0x595D=>0xED86,
+0x5963=>0xED87,
+0x59A4=>0xED88,
+0x59BA=>0xED89,
+0x5B56=>0xED8A,
+0x5BC0=>0xED8B,
+0x752F=>0xED8C,
+0x5BD8=>0xED8D,
+0x5BEC=>0xED8E,
+0x5C1E=>0xED8F,
+0x5CA6=>0xED90,
+0x5CBA=>0xED91,
+0x5CF5=>0xED92,
+0x5D27=>0xED93,
+0x5D53=>0xED94,
+0xFA11=>0xED95,
+0x5D42=>0xED96,
+0x5D6D=>0xED97,
+0x5DB8=>0xED98,
+0x5DB9=>0xED99,
+0x5DD0=>0xED9A,
+0x5F21=>0xED9B,
+0x5F34=>0xED9C,
+0x5F67=>0xED9D,
+0x5FB7=>0xED9E,
+0x5FDE=>0xED9F,
+0x605D=>0xEDA0,
+0x6085=>0xEDA1,
+0x608A=>0xEDA2,
+0x60DE=>0xEDA3,
+0x60D5=>0xEDA4,
+0x6120=>0xEDA5,
+0x60F2=>0xEDA6,
+0x6111=>0xEDA7,
+0x6137=>0xEDA8,
+0x6130=>0xEDA9,
+0x6198=>0xEDAA,
+0x6213=>0xEDAB,
+0x62A6=>0xEDAC,
+0x63F5=>0xEDAD,
+0x6460=>0xEDAE,
+0x649D=>0xEDAF,
+0x64CE=>0xEDB0,
+0x654E=>0xEDB1,
+0x6600=>0xEDB2,
+0x6615=>0xEDB3,
+0x663B=>0xEDB4,
+0x6609=>0xEDB5,
+0x662E=>0xEDB6,
+0x661E=>0xEDB7,
+0x6624=>0xEDB8,
+0x6665=>0xEDB9,
+0x6657=>0xEDBA,
+0x6659=>0xEDBB,
+0xFA12=>0xEDBC,
+0x6673=>0xEDBD,
+0x6699=>0xEDBE,
+0x66A0=>0xEDBF,
+0x66B2=>0xEDC0,
+0x66BF=>0xEDC1,
+0x66FA=>0xEDC2,
+0x670E=>0xEDC3,
+0xF929=>0xEDC4,
+0x6766=>0xEDC5,
+0x67BB=>0xEDC6,
+0x6852=>0xEDC7,
+0x67C0=>0xEDC8,
+0x6801=>0xEDC9,
+0x6844=>0xEDCA,
+0x68CF=>0xEDCB,
+0xFA13=>0xEDCC,
+0x6968=>0xEDCD,
+0xFA14=>0xEDCE,
+0x6998=>0xEDCF,
+0x69E2=>0xEDD0,
+0x6A30=>0xEDD1,
+0x6A6B=>0xEDD2,
+0x6A46=>0xEDD3,
+0x6A73=>0xEDD4,
+0x6A7E=>0xEDD5,
+0x6AE2=>0xEDD6,
+0x6AE4=>0xEDD7,
+0x6BD6=>0xEDD8,
+0x6C3F=>0xEDD9,
+0x6C5C=>0xEDDA,
+0x6C86=>0xEDDB,
+0x6C6F=>0xEDDC,
+0x6CDA=>0xEDDD,
+0x6D04=>0xEDDE,
+0x6D87=>0xEDDF,
+0x6D6F=>0xEDE0,
+0x6D96=>0xEDE1,
+0x6DAC=>0xEDE2,
+0x6DCF=>0xEDE3,
+0x6DF8=>0xEDE4,
+0x6DF2=>0xEDE5,
+0x6DFC=>0xEDE6,
+0x6E39=>0xEDE7,
+0x6E5C=>0xEDE8,
+0x6E27=>0xEDE9,
+0x6E3C=>0xEDEA,
+0x6EBF=>0xEDEB,
+0x6F88=>0xEDEC,
+0x6FB5=>0xEDED,
+0x6FF5=>0xEDEE,
+0x7005=>0xEDEF,
+0x7007=>0xEDF0,
+0x7028=>0xEDF1,
+0x7085=>0xEDF2,
+0x70AB=>0xEDF3,
+0x710F=>0xEDF4,
+0x7104=>0xEDF5,
+0x715C=>0xEDF6,
+0x7146=>0xEDF7,
+0x7147=>0xEDF8,
+0xFA15=>0xEDF9,
+0x71C1=>0xEDFA,
+0x71FE=>0xEDFB,
+0x72B1=>0xEDFC,
+0x72BE=>0xEE40,
+0x7324=>0xEE41,
+0xFA16=>0xEE42,
+0x7377=>0xEE43,
+0x73BD=>0xEE44,
+0x73C9=>0xEE45,
+0x73D6=>0xEE46,
+0x73E3=>0xEE47,
+0x73D2=>0xEE48,
+0x7407=>0xEE49,
+0x73F5=>0xEE4A,
+0x7426=>0xEE4B,
+0x742A=>0xEE4C,
+0x7429=>0xEE4D,
+0x742E=>0xEE4E,
+0x7462=>0xEE4F,
+0x7489=>0xEE50,
+0x749F=>0xEE51,
+0x7501=>0xEE52,
+0x756F=>0xEE53,
+0x7682=>0xEE54,
+0x769C=>0xEE55,
+0x769E=>0xEE56,
+0x769B=>0xEE57,
+0x76A6=>0xEE58,
+0xFA17=>0xEE59,
+0x7746=>0xEE5A,
+0x52AF=>0xEE5B,
+0x7821=>0xEE5C,
+0x784E=>0xEE5D,
+0x7864=>0xEE5E,
+0x787A=>0xEE5F,
+0x7930=>0xEE60,
+0xFA18=>0xEE61,
+0xFA19=>0xEE62,
+0xFA1A=>0xEE63,
+0x7994=>0xEE64,
+0xFA1B=>0xEE65,
+0x799B=>0xEE66,
+0x7AD1=>0xEE67,
+0x7AE7=>0xEE68,
+0xFA1C=>0xEE69,
+0x7AEB=>0xEE6A,
+0x7B9E=>0xEE6B,
+0xFA1D=>0xEE6C,
+0x7D48=>0xEE6D,
+0x7D5C=>0xEE6E,
+0x7DB7=>0xEE6F,
+0x7DA0=>0xEE70,
+0x7DD6=>0xEE71,
+0x7E52=>0xEE72,
+0x7F47=>0xEE73,
+0x7FA1=>0xEE74,
+0xFA1E=>0xEE75,
+0x8301=>0xEE76,
+0x8362=>0xEE77,
+0x837F=>0xEE78,
+0x83C7=>0xEE79,
+0x83F6=>0xEE7A,
+0x8448=>0xEE7B,
+0x84B4=>0xEE7C,
+0x8553=>0xEE7D,
+0x8559=>0xEE7E,
+0x856B=>0xEE80,
+0xFA1F=>0xEE81,
+0x85B0=>0xEE82,
+0xFA20=>0xEE83,
+0xFA21=>0xEE84,
+0x8807=>0xEE85,
+0x88F5=>0xEE86,
+0x8A12=>0xEE87,
+0x8A37=>0xEE88,
+0x8A79=>0xEE89,
+0x8AA7=>0xEE8A,
+0x8ABE=>0xEE8B,
+0x8ADF=>0xEE8C,
+0xFA22=>0xEE8D,
+0x8AF6=>0xEE8E,
+0x8B53=>0xEE8F,
+0x8B7F=>0xEE90,
+0x8CF0=>0xEE91,
+0x8CF4=>0xEE92,
+0x8D12=>0xEE93,
+0x8D76=>0xEE94,
+0xFA23=>0xEE95,
+0x8ECF=>0xEE96,
+0xFA24=>0xEE97,
+0xFA25=>0xEE98,
+0x9067=>0xEE99,
+0x90DE=>0xEE9A,
+0xFA26=>0xEE9B,
+0x9115=>0xEE9C,
+0x9127=>0xEE9D,
+0x91DA=>0xEE9E,
+0x91D7=>0xEE9F,
+0x91DE=>0xEEA0,
+0x91ED=>0xEEA1,
+0x91EE=>0xEEA2,
+0x91E4=>0xEEA3,
+0x91E5=>0xEEA4,
+0x9206=>0xEEA5,
+0x9210=>0xEEA6,
+0x920A=>0xEEA7,
+0x923A=>0xEEA8,
+0x9240=>0xEEA9,
+0x923C=>0xEEAA,
+0x924E=>0xEEAB,
+0x9259=>0xEEAC,
+0x9251=>0xEEAD,
+0x9239=>0xEEAE,
+0x9267=>0xEEAF,
+0x92A7=>0xEEB0,
+0x9277=>0xEEB1,
+0x9278=>0xEEB2,
+0x92E7=>0xEEB3,
+0x92D7=>0xEEB4,
+0x92D9=>0xEEB5,
+0x92D0=>0xEEB6,
+0xFA27=>0xEEB7,
+0x92D5=>0xEEB8,
+0x92E0=>0xEEB9,
+0x92D3=>0xEEBA,
+0x9325=>0xEEBB,
+0x9321=>0xEEBC,
+0x92FB=>0xEEBD,
+0xFA28=>0xEEBE,
+0x931E=>0xEEBF,
+0x92FF=>0xEEC0,
+0x931D=>0xEEC1,
+0x9302=>0xEEC2,
+0x9370=>0xEEC3,
+0x9357=>0xEEC4,
+0x93A4=>0xEEC5,
+0x93C6=>0xEEC6,
+0x93DE=>0xEEC7,
+0x93F8=>0xEEC8,
+0x9431=>0xEEC9,
+0x9445=>0xEECA,
+0x9448=>0xEECB,
+0x9592=>0xEECC,
+0xF9DC=>0xEECD,
+0xFA29=>0xEECE,
+0x969D=>0xEECF,
+0x96AF=>0xEED0,
+0x9733=>0xEED1,
+0x973B=>0xEED2,
+0x9743=>0xEED3,
+0x974D=>0xEED4,
+0x974F=>0xEED5,
+0x9751=>0xEED6,
+0x9755=>0xEED7,
+0x9857=>0xEED8,
+0x9865=>0xEED9,
+0xFA2A=>0xEEDA,
+0xFA2B=>0xEEDB,
+0x9927=>0xEEDC,
+0xFA2C=>0xEEDD,
+0x999E=>0xEEDE,
+0x9A4E=>0xEEDF,
+0x9AD9=>0xEEE0,
+0x9ADC=>0xEEE1,
+0x9B75=>0xEEE2,
+0x9B72=>0xEEE3,
+0x9B8F=>0xEEE4,
+0x9BB1=>0xEEE5,
+0x9BBB=>0xEEE6,
+0x9C00=>0xEEE7,
+0x9D70=>0xEEE8,
+0x9D6B=>0xEEE9,
+0xFA2D=>0xEEEA,
+0x9E19=>0xEEEB,
+0x9ED1=>0xEEEC,
+0x2170=>0xEEEF,
+0x2171=>0xEEF0,
+0x2172=>0xEEF1,
+0x2173=>0xEEF2,
+0x2174=>0xEEF3,
+0x2175=>0xEEF4,
+0x2176=>0xEEF5,
+0x2177=>0xEEF6,
+0x2178=>0xEEF7,
+0x2179=>0xEEF8,
+0xFFE2=>0xEEF9,
+0xFFE4=>0xEEFA,
+0xFF07=>0xEEFB,
+0xFF02=>0xEEFC,
+0xE000=>0xF040,
+0xE001=>0xF041,
+0xE002=>0xF042,
+0xE003=>0xF043,
+0xE004=>0xF044,
+0xE005=>0xF045,
+0xE006=>0xF046,
+0xE007=>0xF047,
+0xE008=>0xF048,
+0xE009=>0xF049,
+0xE00A=>0xF04A,
+0xE00B=>0xF04B,
+0xE00C=>0xF04C,
+0xE00D=>0xF04D,
+0xE00E=>0xF04E,
+0xE00F=>0xF04F,
+0xE010=>0xF050,
+0xE011=>0xF051,
+0xE012=>0xF052,
+0xE013=>0xF053,
+0xE014=>0xF054,
+0xE015=>0xF055,
+0xE016=>0xF056,
+0xE017=>0xF057,
+0xE018=>0xF058,
+0xE019=>0xF059,
+0xE01A=>0xF05A,
+0xE01B=>0xF05B,
+0xE01C=>0xF05C,
+0xE01D=>0xF05D,
+0xE01E=>0xF05E,
+0xE01F=>0xF05F,
+0xE020=>0xF060,
+0xE021=>0xF061,
+0xE022=>0xF062,
+0xE023=>0xF063,
+0xE024=>0xF064,
+0xE025=>0xF065,
+0xE026=>0xF066,
+0xE027=>0xF067,
+0xE028=>0xF068,
+0xE029=>0xF069,
+0xE02A=>0xF06A,
+0xE02B=>0xF06B,
+0xE02C=>0xF06C,
+0xE02D=>0xF06D,
+0xE02E=>0xF06E,
+0xE02F=>0xF06F,
+0xE030=>0xF070,
+0xE031=>0xF071,
+0xE032=>0xF072,
+0xE033=>0xF073,
+0xE034=>0xF074,
+0xE035=>0xF075,
+0xE036=>0xF076,
+0xE037=>0xF077,
+0xE038=>0xF078,
+0xE039=>0xF079,
+0xE03A=>0xF07A,
+0xE03B=>0xF07B,
+0xE03C=>0xF07C,
+0xE03D=>0xF07D,
+0xE03E=>0xF07E,
+0xE03F=>0xF080,
+0xE040=>0xF081,
+0xE041=>0xF082,
+0xE042=>0xF083,
+0xE043=>0xF084,
+0xE044=>0xF085,
+0xE045=>0xF086,
+0xE046=>0xF087,
+0xE047=>0xF088,
+0xE048=>0xF089,
+0xE049=>0xF08A,
+0xE04A=>0xF08B,
+0xE04B=>0xF08C,
+0xE04C=>0xF08D,
+0xE04D=>0xF08E,
+0xE04E=>0xF08F,
+0xE04F=>0xF090,
+0xE050=>0xF091,
+0xE051=>0xF092,
+0xE052=>0xF093,
+0xE053=>0xF094,
+0xE054=>0xF095,
+0xE055=>0xF096,
+0xE056=>0xF097,
+0xE057=>0xF098,
+0xE058=>0xF099,
+0xE059=>0xF09A,
+0xE05A=>0xF09B,
+0xE05B=>0xF09C,
+0xE05C=>0xF09D,
+0xE05D=>0xF09E,
+0xE05E=>0xF09F,
+0xE05F=>0xF0A0,
+0xE060=>0xF0A1,
+0xE061=>0xF0A2,
+0xE062=>0xF0A3,
+0xE063=>0xF0A4,
+0xE064=>0xF0A5,
+0xE065=>0xF0A6,
+0xE066=>0xF0A7,
+0xE067=>0xF0A8,
+0xE068=>0xF0A9,
+0xE069=>0xF0AA,
+0xE06A=>0xF0AB,
+0xE06B=>0xF0AC,
+0xE06C=>0xF0AD,
+0xE06D=>0xF0AE,
+0xE06E=>0xF0AF,
+0xE06F=>0xF0B0,
+0xE070=>0xF0B1,
+0xE071=>0xF0B2,
+0xE072=>0xF0B3,
+0xE073=>0xF0B4,
+0xE074=>0xF0B5,
+0xE075=>0xF0B6,
+0xE076=>0xF0B7,
+0xE077=>0xF0B8,
+0xE078=>0xF0B9,
+0xE079=>0xF0BA,
+0xE07A=>0xF0BB,
+0xE07B=>0xF0BC,
+0xE07C=>0xF0BD,
+0xE07D=>0xF0BE,
+0xE07E=>0xF0BF,
+0xE07F=>0xF0C0,
+0xE080=>0xF0C1,
+0xE081=>0xF0C2,
+0xE082=>0xF0C3,
+0xE083=>0xF0C4,
+0xE084=>0xF0C5,
+0xE085=>0xF0C6,
+0xE086=>0xF0C7,
+0xE087=>0xF0C8,
+0xE088=>0xF0C9,
+0xE089=>0xF0CA,
+0xE08A=>0xF0CB,
+0xE08B=>0xF0CC,
+0xE08C=>0xF0CD,
+0xE08D=>0xF0CE,
+0xE08E=>0xF0CF,
+0xE08F=>0xF0D0,
+0xE090=>0xF0D1,
+0xE091=>0xF0D2,
+0xE092=>0xF0D3,
+0xE093=>0xF0D4,
+0xE094=>0xF0D5,
+0xE095=>0xF0D6,
+0xE096=>0xF0D7,
+0xE097=>0xF0D8,
+0xE098=>0xF0D9,
+0xE099=>0xF0DA,
+0xE09A=>0xF0DB,
+0xE09B=>0xF0DC,
+0xE09C=>0xF0DD,
+0xE09D=>0xF0DE,
+0xE09E=>0xF0DF,
+0xE09F=>0xF0E0,
+0xE0A0=>0xF0E1,
+0xE0A1=>0xF0E2,
+0xE0A2=>0xF0E3,
+0xE0A3=>0xF0E4,
+0xE0A4=>0xF0E5,
+0xE0A5=>0xF0E6,
+0xE0A6=>0xF0E7,
+0xE0A7=>0xF0E8,
+0xE0A8=>0xF0E9,
+0xE0A9=>0xF0EA,
+0xE0AA=>0xF0EB,
+0xE0AB=>0xF0EC,
+0xE0AC=>0xF0ED,
+0xE0AD=>0xF0EE,
+0xE0AE=>0xF0EF,
+0xE0AF=>0xF0F0,
+0xE0B0=>0xF0F1,
+0xE0B1=>0xF0F2,
+0xE0B2=>0xF0F3,
+0xE0B3=>0xF0F4,
+0xE0B4=>0xF0F5,
+0xE0B5=>0xF0F6,
+0xE0B6=>0xF0F7,
+0xE0B7=>0xF0F8,
+0xE0B8=>0xF0F9,
+0xE0B9=>0xF0FA,
+0xE0BA=>0xF0FB,
+0xE0BB=>0xF0FC,
+0xE0BC=>0xF140,
+0xE0BD=>0xF141,
+0xE0BE=>0xF142,
+0xE0BF=>0xF143,
+0xE0C0=>0xF144,
+0xE0C1=>0xF145,
+0xE0C2=>0xF146,
+0xE0C3=>0xF147,
+0xE0C4=>0xF148,
+0xE0C5=>0xF149,
+0xE0C6=>0xF14A,
+0xE0C7=>0xF14B,
+0xE0C8=>0xF14C,
+0xE0C9=>0xF14D,
+0xE0CA=>0xF14E,
+0xE0CB=>0xF14F,
+0xE0CC=>0xF150,
+0xE0CD=>0xF151,
+0xE0CE=>0xF152,
+0xE0CF=>0xF153,
+0xE0D0=>0xF154,
+0xE0D1=>0xF155,
+0xE0D2=>0xF156,
+0xE0D3=>0xF157,
+0xE0D4=>0xF158,
+0xE0D5=>0xF159,
+0xE0D6=>0xF15A,
+0xE0D7=>0xF15B,
+0xE0D8=>0xF15C,
+0xE0D9=>0xF15D,
+0xE0DA=>0xF15E,
+0xE0DB=>0xF15F,
+0xE0DC=>0xF160,
+0xE0DD=>0xF161,
+0xE0DE=>0xF162,
+0xE0DF=>0xF163,
+0xE0E0=>0xF164,
+0xE0E1=>0xF165,
+0xE0E2=>0xF166,
+0xE0E3=>0xF167,
+0xE0E4=>0xF168,
+0xE0E5=>0xF169,
+0xE0E6=>0xF16A,
+0xE0E7=>0xF16B,
+0xE0E8=>0xF16C,
+0xE0E9=>0xF16D,
+0xE0EA=>0xF16E,
+0xE0EB=>0xF16F,
+0xE0EC=>0xF170,
+0xE0ED=>0xF171,
+0xE0EE=>0xF172,
+0xE0EF=>0xF173,
+0xE0F0=>0xF174,
+0xE0F1=>0xF175,
+0xE0F2=>0xF176,
+0xE0F3=>0xF177,
+0xE0F4=>0xF178,
+0xE0F5=>0xF179,
+0xE0F6=>0xF17A,
+0xE0F7=>0xF17B,
+0xE0F8=>0xF17C,
+0xE0F9=>0xF17D,
+0xE0FA=>0xF17E,
+0xE0FB=>0xF180,
+0xE0FC=>0xF181,
+0xE0FD=>0xF182,
+0xE0FE=>0xF183,
+0xE0FF=>0xF184,
+0xE100=>0xF185,
+0xE101=>0xF186,
+0xE102=>0xF187,
+0xE103=>0xF188,
+0xE104=>0xF189,
+0xE105=>0xF18A,
+0xE106=>0xF18B,
+0xE107=>0xF18C,
+0xE108=>0xF18D,
+0xE109=>0xF18E,
+0xE10A=>0xF18F,
+0xE10B=>0xF190,
+0xE10C=>0xF191,
+0xE10D=>0xF192,
+0xE10E=>0xF193,
+0xE10F=>0xF194,
+0xE110=>0xF195,
+0xE111=>0xF196,
+0xE112=>0xF197,
+0xE113=>0xF198,
+0xE114=>0xF199,
+0xE115=>0xF19A,
+0xE116=>0xF19B,
+0xE117=>0xF19C,
+0xE118=>0xF19D,
+0xE119=>0xF19E,
+0xE11A=>0xF19F,
+0xE11B=>0xF1A0,
+0xE11C=>0xF1A1,
+0xE11D=>0xF1A2,
+0xE11E=>0xF1A3,
+0xE11F=>0xF1A4,
+0xE120=>0xF1A5,
+0xE121=>0xF1A6,
+0xE122=>0xF1A7,
+0xE123=>0xF1A8,
+0xE124=>0xF1A9,
+0xE125=>0xF1AA,
+0xE126=>0xF1AB,
+0xE127=>0xF1AC,
+0xE128=>0xF1AD,
+0xE129=>0xF1AE,
+0xE12A=>0xF1AF,
+0xE12B=>0xF1B0,
+0xE12C=>0xF1B1,
+0xE12D=>0xF1B2,
+0xE12E=>0xF1B3,
+0xE12F=>0xF1B4,
+0xE130=>0xF1B5,
+0xE131=>0xF1B6,
+0xE132=>0xF1B7,
+0xE133=>0xF1B8,
+0xE134=>0xF1B9,
+0xE135=>0xF1BA,
+0xE136=>0xF1BB,
+0xE137=>0xF1BC,
+0xE138=>0xF1BD,
+0xE139=>0xF1BE,
+0xE13A=>0xF1BF,
+0xE13B=>0xF1C0,
+0xE13C=>0xF1C1,
+0xE13D=>0xF1C2,
+0xE13E=>0xF1C3,
+0xE13F=>0xF1C4,
+0xE140=>0xF1C5,
+0xE141=>0xF1C6,
+0xE142=>0xF1C7,
+0xE143=>0xF1C8,
+0xE144=>0xF1C9,
+0xE145=>0xF1CA,
+0xE146=>0xF1CB,
+0xE147=>0xF1CC,
+0xE148=>0xF1CD,
+0xE149=>0xF1CE,
+0xE14A=>0xF1CF,
+0xE14B=>0xF1D0,
+0xE14C=>0xF1D1,
+0xE14D=>0xF1D2,
+0xE14E=>0xF1D3,
+0xE14F=>0xF1D4,
+0xE150=>0xF1D5,
+0xE151=>0xF1D6,
+0xE152=>0xF1D7,
+0xE153=>0xF1D8,
+0xE154=>0xF1D9,
+0xE155=>0xF1DA,
+0xE156=>0xF1DB,
+0xE157=>0xF1DC,
+0xE158=>0xF1DD,
+0xE159=>0xF1DE,
+0xE15A=>0xF1DF,
+0xE15B=>0xF1E0,
+0xE15C=>0xF1E1,
+0xE15D=>0xF1E2,
+0xE15E=>0xF1E3,
+0xE15F=>0xF1E4,
+0xE160=>0xF1E5,
+0xE161=>0xF1E6,
+0xE162=>0xF1E7,
+0xE163=>0xF1E8,
+0xE164=>0xF1E9,
+0xE165=>0xF1EA,
+0xE166=>0xF1EB,
+0xE167=>0xF1EC,
+0xE168=>0xF1ED,
+0xE169=>0xF1EE,
+0xE16A=>0xF1EF,
+0xE16B=>0xF1F0,
+0xE16C=>0xF1F1,
+0xE16D=>0xF1F2,
+0xE16E=>0xF1F3,
+0xE16F=>0xF1F4,
+0xE170=>0xF1F5,
+0xE171=>0xF1F6,
+0xE172=>0xF1F7,
+0xE173=>0xF1F8,
+0xE174=>0xF1F9,
+0xE175=>0xF1FA,
+0xE176=>0xF1FB,
+0xE177=>0xF1FC,
+0xE178=>0xF240,
+0xE179=>0xF241,
+0xE17A=>0xF242,
+0xE17B=>0xF243,
+0xE17C=>0xF244,
+0xE17D=>0xF245,
+0xE17E=>0xF246,
+0xE17F=>0xF247,
+0xE180=>0xF248,
+0xE181=>0xF249,
+0xE182=>0xF24A,
+0xE183=>0xF24B,
+0xE184=>0xF24C,
+0xE185=>0xF24D,
+0xE186=>0xF24E,
+0xE187=>0xF24F,
+0xE188=>0xF250,
+0xE189=>0xF251,
+0xE18A=>0xF252,
+0xE18B=>0xF253,
+0xE18C=>0xF254,
+0xE18D=>0xF255,
+0xE18E=>0xF256,
+0xE18F=>0xF257,
+0xE190=>0xF258,
+0xE191=>0xF259,
+0xE192=>0xF25A,
+0xE193=>0xF25B,
+0xE194=>0xF25C,
+0xE195=>0xF25D,
+0xE196=>0xF25E,
+0xE197=>0xF25F,
+0xE198=>0xF260,
+0xE199=>0xF261,
+0xE19A=>0xF262,
+0xE19B=>0xF263,
+0xE19C=>0xF264,
+0xE19D=>0xF265,
+0xE19E=>0xF266,
+0xE19F=>0xF267,
+0xE1A0=>0xF268,
+0xE1A1=>0xF269,
+0xE1A2=>0xF26A,
+0xE1A3=>0xF26B,
+0xE1A4=>0xF26C,
+0xE1A5=>0xF26D,
+0xE1A6=>0xF26E,
+0xE1A7=>0xF26F,
+0xE1A8=>0xF270,
+0xE1A9=>0xF271,
+0xE1AA=>0xF272,
+0xE1AB=>0xF273,
+0xE1AC=>0xF274,
+0xE1AD=>0xF275,
+0xE1AE=>0xF276,
+0xE1AF=>0xF277,
+0xE1B0=>0xF278,
+0xE1B1=>0xF279,
+0xE1B2=>0xF27A,
+0xE1B3=>0xF27B,
+0xE1B4=>0xF27C,
+0xE1B5=>0xF27D,
+0xE1B6=>0xF27E,
+0xE1B7=>0xF280,
+0xE1B8=>0xF281,
+0xE1B9=>0xF282,
+0xE1BA=>0xF283,
+0xE1BB=>0xF284,
+0xE1BC=>0xF285,
+0xE1BD=>0xF286,
+0xE1BE=>0xF287,
+0xE1BF=>0xF288,
+0xE1C0=>0xF289,
+0xE1C1=>0xF28A,
+0xE1C2=>0xF28B,
+0xE1C3=>0xF28C,
+0xE1C4=>0xF28D,
+0xE1C5=>0xF28E,
+0xE1C6=>0xF28F,
+0xE1C7=>0xF290,
+0xE1C8=>0xF291,
+0xE1C9=>0xF292,
+0xE1CA=>0xF293,
+0xE1CB=>0xF294,
+0xE1CC=>0xF295,
+0xE1CD=>0xF296,
+0xE1CE=>0xF297,
+0xE1CF=>0xF298,
+0xE1D0=>0xF299,
+0xE1D1=>0xF29A,
+0xE1D2=>0xF29B,
+0xE1D3=>0xF29C,
+0xE1D4=>0xF29D,
+0xE1D5=>0xF29E,
+0xE1D6=>0xF29F,
+0xE1D7=>0xF2A0,
+0xE1D8=>0xF2A1,
+0xE1D9=>0xF2A2,
+0xE1DA=>0xF2A3,
+0xE1DB=>0xF2A4,
+0xE1DC=>0xF2A5,
+0xE1DD=>0xF2A6,
+0xE1DE=>0xF2A7,
+0xE1DF=>0xF2A8,
+0xE1E0=>0xF2A9,
+0xE1E1=>0xF2AA,
+0xE1E2=>0xF2AB,
+0xE1E3=>0xF2AC,
+0xE1E4=>0xF2AD,
+0xE1E5=>0xF2AE,
+0xE1E6=>0xF2AF,
+0xE1E7=>0xF2B0,
+0xE1E8=>0xF2B1,
+0xE1E9=>0xF2B2,
+0xE1EA=>0xF2B3,
+0xE1EB=>0xF2B4,
+0xE1EC=>0xF2B5,
+0xE1ED=>0xF2B6,
+0xE1EE=>0xF2B7,
+0xE1EF=>0xF2B8,
+0xE1F0=>0xF2B9,
+0xE1F1=>0xF2BA,
+0xE1F2=>0xF2BB,
+0xE1F3=>0xF2BC,
+0xE1F4=>0xF2BD,
+0xE1F5=>0xF2BE,
+0xE1F6=>0xF2BF,
+0xE1F7=>0xF2C0,
+0xE1F8=>0xF2C1,
+0xE1F9=>0xF2C2,
+0xE1FA=>0xF2C3,
+0xE1FB=>0xF2C4,
+0xE1FC=>0xF2C5,
+0xE1FD=>0xF2C6,
+0xE1FE=>0xF2C7,
+0xE1FF=>0xF2C8,
+0xE200=>0xF2C9,
+0xE201=>0xF2CA,
+0xE202=>0xF2CB,
+0xE203=>0xF2CC,
+0xE204=>0xF2CD,
+0xE205=>0xF2CE,
+0xE206=>0xF2CF,
+0xE207=>0xF2D0,
+0xE208=>0xF2D1,
+0xE209=>0xF2D2,
+0xE20A=>0xF2D3,
+0xE20B=>0xF2D4,
+0xE20C=>0xF2D5,
+0xE20D=>0xF2D6,
+0xE20E=>0xF2D7,
+0xE20F=>0xF2D8,
+0xE210=>0xF2D9,
+0xE211=>0xF2DA,
+0xE212=>0xF2DB,
+0xE213=>0xF2DC,
+0xE214=>0xF2DD,
+0xE215=>0xF2DE,
+0xE216=>0xF2DF,
+0xE217=>0xF2E0,
+0xE218=>0xF2E1,
+0xE219=>0xF2E2,
+0xE21A=>0xF2E3,
+0xE21B=>0xF2E4,
+0xE21C=>0xF2E5,
+0xE21D=>0xF2E6,
+0xE21E=>0xF2E7,
+0xE21F=>0xF2E8,
+0xE220=>0xF2E9,
+0xE221=>0xF2EA,
+0xE222=>0xF2EB,
+0xE223=>0xF2EC,
+0xE224=>0xF2ED,
+0xE225=>0xF2EE,
+0xE226=>0xF2EF,
+0xE227=>0xF2F0,
+0xE228=>0xF2F1,
+0xE229=>0xF2F2,
+0xE22A=>0xF2F3,
+0xE22B=>0xF2F4,
+0xE22C=>0xF2F5,
+0xE22D=>0xF2F6,
+0xE22E=>0xF2F7,
+0xE22F=>0xF2F8,
+0xE230=>0xF2F9,
+0xE231=>0xF2FA,
+0xE232=>0xF2FB,
+0xE233=>0xF2FC,
+0xE234=>0xF340,
+0xE235=>0xF341,
+0xE236=>0xF342,
+0xE237=>0xF343,
+0xE238=>0xF344,
+0xE239=>0xF345,
+0xE23A=>0xF346,
+0xE23B=>0xF347,
+0xE23C=>0xF348,
+0xE23D=>0xF349,
+0xE23E=>0xF34A,
+0xE23F=>0xF34B,
+0xE240=>0xF34C,
+0xE241=>0xF34D,
+0xE242=>0xF34E,
+0xE243=>0xF34F,
+0xE244=>0xF350,
+0xE245=>0xF351,
+0xE246=>0xF352,
+0xE247=>0xF353,
+0xE248=>0xF354,
+0xE249=>0xF355,
+0xE24A=>0xF356,
+0xE24B=>0xF357,
+0xE24C=>0xF358,
+0xE24D=>0xF359,
+0xE24E=>0xF35A,
+0xE24F=>0xF35B,
+0xE250=>0xF35C,
+0xE251=>0xF35D,
+0xE252=>0xF35E,
+0xE253=>0xF35F,
+0xE254=>0xF360,
+0xE255=>0xF361,
+0xE256=>0xF362,
+0xE257=>0xF363,
+0xE258=>0xF364,
+0xE259=>0xF365,
+0xE25A=>0xF366,
+0xE25B=>0xF367,
+0xE25C=>0xF368,
+0xE25D=>0xF369,
+0xE25E=>0xF36A,
+0xE25F=>0xF36B,
+0xE260=>0xF36C,
+0xE261=>0xF36D,
+0xE262=>0xF36E,
+0xE263=>0xF36F,
+0xE264=>0xF370,
+0xE265=>0xF371,
+0xE266=>0xF372,
+0xE267=>0xF373,
+0xE268=>0xF374,
+0xE269=>0xF375,
+0xE26A=>0xF376,
+0xE26B=>0xF377,
+0xE26C=>0xF378,
+0xE26D=>0xF379,
+0xE26E=>0xF37A,
+0xE26F=>0xF37B,
+0xE270=>0xF37C,
+0xE271=>0xF37D,
+0xE272=>0xF37E,
+0xE273=>0xF380,
+0xE274=>0xF381,
+0xE275=>0xF382,
+0xE276=>0xF383,
+0xE277=>0xF384,
+0xE278=>0xF385,
+0xE279=>0xF386,
+0xE27A=>0xF387,
+0xE27B=>0xF388,
+0xE27C=>0xF389,
+0xE27D=>0xF38A,
+0xE27E=>0xF38B,
+0xE27F=>0xF38C,
+0xE280=>0xF38D,
+0xE281=>0xF38E,
+0xE282=>0xF38F,
+0xE283=>0xF390,
+0xE284=>0xF391,
+0xE285=>0xF392,
+0xE286=>0xF393,
+0xE287=>0xF394,
+0xE288=>0xF395,
+0xE289=>0xF396,
+0xE28A=>0xF397,
+0xE28B=>0xF398,
+0xE28C=>0xF399,
+0xE28D=>0xF39A,
+0xE28E=>0xF39B,
+0xE28F=>0xF39C,
+0xE290=>0xF39D,
+0xE291=>0xF39E,
+0xE292=>0xF39F,
+0xE293=>0xF3A0,
+0xE294=>0xF3A1,
+0xE295=>0xF3A2,
+0xE296=>0xF3A3,
+0xE297=>0xF3A4,
+0xE298=>0xF3A5,
+0xE299=>0xF3A6,
+0xE29A=>0xF3A7,
+0xE29B=>0xF3A8,
+0xE29C=>0xF3A9,
+0xE29D=>0xF3AA,
+0xE29E=>0xF3AB,
+0xE29F=>0xF3AC,
+0xE2A0=>0xF3AD,
+0xE2A1=>0xF3AE,
+0xE2A2=>0xF3AF,
+0xE2A3=>0xF3B0,
+0xE2A4=>0xF3B1,
+0xE2A5=>0xF3B2,
+0xE2A6=>0xF3B3,
+0xE2A7=>0xF3B4,
+0xE2A8=>0xF3B5,
+0xE2A9=>0xF3B6,
+0xE2AA=>0xF3B7,
+0xE2AB=>0xF3B8,
+0xE2AC=>0xF3B9,
+0xE2AD=>0xF3BA,
+0xE2AE=>0xF3BB,
+0xE2AF=>0xF3BC,
+0xE2B0=>0xF3BD,
+0xE2B1=>0xF3BE,
+0xE2B2=>0xF3BF,
+0xE2B3=>0xF3C0,
+0xE2B4=>0xF3C1,
+0xE2B5=>0xF3C2,
+0xE2B6=>0xF3C3,
+0xE2B7=>0xF3C4,
+0xE2B8=>0xF3C5,
+0xE2B9=>0xF3C6,
+0xE2BA=>0xF3C7,
+0xE2BB=>0xF3C8,
+0xE2BC=>0xF3C9,
+0xE2BD=>0xF3CA,
+0xE2BE=>0xF3CB,
+0xE2BF=>0xF3CC,
+0xE2C0=>0xF3CD,
+0xE2C1=>0xF3CE,
+0xE2C2=>0xF3CF,
+0xE2C3=>0xF3D0,
+0xE2C4=>0xF3D1,
+0xE2C5=>0xF3D2,
+0xE2C6=>0xF3D3,
+0xE2C7=>0xF3D4,
+0xE2C8=>0xF3D5,
+0xE2C9=>0xF3D6,
+0xE2CA=>0xF3D7,
+0xE2CB=>0xF3D8,
+0xE2CC=>0xF3D9,
+0xE2CD=>0xF3DA,
+0xE2CE=>0xF3DB,
+0xE2CF=>0xF3DC,
+0xE2D0=>0xF3DD,
+0xE2D1=>0xF3DE,
+0xE2D2=>0xF3DF,
+0xE2D3=>0xF3E0,
+0xE2D4=>0xF3E1,
+0xE2D5=>0xF3E2,
+0xE2D6=>0xF3E3,
+0xE2D7=>0xF3E4,
+0xE2D8=>0xF3E5,
+0xE2D9=>0xF3E6,
+0xE2DA=>0xF3E7,
+0xE2DB=>0xF3E8,
+0xE2DC=>0xF3E9,
+0xE2DD=>0xF3EA,
+0xE2DE=>0xF3EB,
+0xE2DF=>0xF3EC,
+0xE2E0=>0xF3ED,
+0xE2E1=>0xF3EE,
+0xE2E2=>0xF3EF,
+0xE2E3=>0xF3F0,
+0xE2E4=>0xF3F1,
+0xE2E5=>0xF3F2,
+0xE2E6=>0xF3F3,
+0xE2E7=>0xF3F4,
+0xE2E8=>0xF3F5,
+0xE2E9=>0xF3F6,
+0xE2EA=>0xF3F7,
+0xE2EB=>0xF3F8,
+0xE2EC=>0xF3F9,
+0xE2ED=>0xF3FA,
+0xE2EE=>0xF3FB,
+0xE2EF=>0xF3FC,
+0xE2F0=>0xF440,
+0xE2F1=>0xF441,
+0xE2F2=>0xF442,
+0xE2F3=>0xF443,
+0xE2F4=>0xF444,
+0xE2F5=>0xF445,
+0xE2F6=>0xF446,
+0xE2F7=>0xF447,
+0xE2F8=>0xF448,
+0xE2F9=>0xF449,
+0xE2FA=>0xF44A,
+0xE2FB=>0xF44B,
+0xE2FC=>0xF44C,
+0xE2FD=>0xF44D,
+0xE2FE=>0xF44E,
+0xE2FF=>0xF44F,
+0xE300=>0xF450,
+0xE301=>0xF451,
+0xE302=>0xF452,
+0xE303=>0xF453,
+0xE304=>0xF454,
+0xE305=>0xF455,
+0xE306=>0xF456,
+0xE307=>0xF457,
+0xE308=>0xF458,
+0xE309=>0xF459,
+0xE30A=>0xF45A,
+0xE30B=>0xF45B,
+0xE30C=>0xF45C,
+0xE30D=>0xF45D,
+0xE30E=>0xF45E,
+0xE30F=>0xF45F,
+0xE310=>0xF460,
+0xE311=>0xF461,
+0xE312=>0xF462,
+0xE313=>0xF463,
+0xE314=>0xF464,
+0xE315=>0xF465,
+0xE316=>0xF466,
+0xE317=>0xF467,
+0xE318=>0xF468,
+0xE319=>0xF469,
+0xE31A=>0xF46A,
+0xE31B=>0xF46B,
+0xE31C=>0xF46C,
+0xE31D=>0xF46D,
+0xE31E=>0xF46E,
+0xE31F=>0xF46F,
+0xE320=>0xF470,
+0xE321=>0xF471,
+0xE322=>0xF472,
+0xE323=>0xF473,
+0xE324=>0xF474,
+0xE325=>0xF475,
+0xE326=>0xF476,
+0xE327=>0xF477,
+0xE328=>0xF478,
+0xE329=>0xF479,
+0xE32A=>0xF47A,
+0xE32B=>0xF47B,
+0xE32C=>0xF47C,
+0xE32D=>0xF47D,
+0xE32E=>0xF47E,
+0xE32F=>0xF480,
+0xE330=>0xF481,
+0xE331=>0xF482,
+0xE332=>0xF483,
+0xE333=>0xF484,
+0xE334=>0xF485,
+0xE335=>0xF486,
+0xE336=>0xF487,
+0xE337=>0xF488,
+0xE338=>0xF489,
+0xE339=>0xF48A,
+0xE33A=>0xF48B,
+0xE33B=>0xF48C,
+0xE33C=>0xF48D,
+0xE33D=>0xF48E,
+0xE33E=>0xF48F,
+0xE33F=>0xF490,
+0xE340=>0xF491,
+0xE341=>0xF492,
+0xE342=>0xF493,
+0xE343=>0xF494,
+0xE344=>0xF495,
+0xE345=>0xF496,
+0xE346=>0xF497,
+0xE347=>0xF498,
+0xE348=>0xF499,
+0xE349=>0xF49A,
+0xE34A=>0xF49B,
+0xE34B=>0xF49C,
+0xE34C=>0xF49D,
+0xE34D=>0xF49E,
+0xE34E=>0xF49F,
+0xE34F=>0xF4A0,
+0xE350=>0xF4A1,
+0xE351=>0xF4A2,
+0xE352=>0xF4A3,
+0xE353=>0xF4A4,
+0xE354=>0xF4A5,
+0xE355=>0xF4A6,
+0xE356=>0xF4A7,
+0xE357=>0xF4A8,
+0xE358=>0xF4A9,
+0xE359=>0xF4AA,
+0xE35A=>0xF4AB,
+0xE35B=>0xF4AC,
+0xE35C=>0xF4AD,
+0xE35D=>0xF4AE,
+0xE35E=>0xF4AF,
+0xE35F=>0xF4B0,
+0xE360=>0xF4B1,
+0xE361=>0xF4B2,
+0xE362=>0xF4B3,
+0xE363=>0xF4B4,
+0xE364=>0xF4B5,
+0xE365=>0xF4B6,
+0xE366=>0xF4B7,
+0xE367=>0xF4B8,
+0xE368=>0xF4B9,
+0xE369=>0xF4BA,
+0xE36A=>0xF4BB,
+0xE36B=>0xF4BC,
+0xE36C=>0xF4BD,
+0xE36D=>0xF4BE,
+0xE36E=>0xF4BF,
+0xE36F=>0xF4C0,
+0xE370=>0xF4C1,
+0xE371=>0xF4C2,
+0xE372=>0xF4C3,
+0xE373=>0xF4C4,
+0xE374=>0xF4C5,
+0xE375=>0xF4C6,
+0xE376=>0xF4C7,
+0xE377=>0xF4C8,
+0xE378=>0xF4C9,
+0xE379=>0xF4CA,
+0xE37A=>0xF4CB,
+0xE37B=>0xF4CC,
+0xE37C=>0xF4CD,
+0xE37D=>0xF4CE,
+0xE37E=>0xF4CF,
+0xE37F=>0xF4D0,
+0xE380=>0xF4D1,
+0xE381=>0xF4D2,
+0xE382=>0xF4D3,
+0xE383=>0xF4D4,
+0xE384=>0xF4D5,
+0xE385=>0xF4D6,
+0xE386=>0xF4D7,
+0xE387=>0xF4D8,
+0xE388=>0xF4D9,
+0xE389=>0xF4DA,
+0xE38A=>0xF4DB,
+0xE38B=>0xF4DC,
+0xE38C=>0xF4DD,
+0xE38D=>0xF4DE,
+0xE38E=>0xF4DF,
+0xE38F=>0xF4E0,
+0xE390=>0xF4E1,
+0xE391=>0xF4E2,
+0xE392=>0xF4E3,
+0xE393=>0xF4E4,
+0xE394=>0xF4E5,
+0xE395=>0xF4E6,
+0xE396=>0xF4E7,
+0xE397=>0xF4E8,
+0xE398=>0xF4E9,
+0xE399=>0xF4EA,
+0xE39A=>0xF4EB,
+0xE39B=>0xF4EC,
+0xE39C=>0xF4ED,
+0xE39D=>0xF4EE,
+0xE39E=>0xF4EF,
+0xE39F=>0xF4F0,
+0xE3A0=>0xF4F1,
+0xE3A1=>0xF4F2,
+0xE3A2=>0xF4F3,
+0xE3A3=>0xF4F4,
+0xE3A4=>0xF4F5,
+0xE3A5=>0xF4F6,
+0xE3A6=>0xF4F7,
+0xE3A7=>0xF4F8,
+0xE3A8=>0xF4F9,
+0xE3A9=>0xF4FA,
+0xE3AA=>0xF4FB,
+0xE3AB=>0xF4FC,
+0xE3AC=>0xF540,
+0xE3AD=>0xF541,
+0xE3AE=>0xF542,
+0xE3AF=>0xF543,
+0xE3B0=>0xF544,
+0xE3B1=>0xF545,
+0xE3B2=>0xF546,
+0xE3B3=>0xF547,
+0xE3B4=>0xF548,
+0xE3B5=>0xF549,
+0xE3B6=>0xF54A,
+0xE3B7=>0xF54B,
+0xE3B8=>0xF54C,
+0xE3B9=>0xF54D,
+0xE3BA=>0xF54E,
+0xE3BB=>0xF54F,
+0xE3BC=>0xF550,
+0xE3BD=>0xF551,
+0xE3BE=>0xF552,
+0xE3BF=>0xF553,
+0xE3C0=>0xF554,
+0xE3C1=>0xF555,
+0xE3C2=>0xF556,
+0xE3C3=>0xF557,
+0xE3C4=>0xF558,
+0xE3C5=>0xF559,
+0xE3C6=>0xF55A,
+0xE3C7=>0xF55B,
+0xE3C8=>0xF55C,
+0xE3C9=>0xF55D,
+0xE3CA=>0xF55E,
+0xE3CB=>0xF55F,
+0xE3CC=>0xF560,
+0xE3CD=>0xF561,
+0xE3CE=>0xF562,
+0xE3CF=>0xF563,
+0xE3D0=>0xF564,
+0xE3D1=>0xF565,
+0xE3D2=>0xF566,
+0xE3D3=>0xF567,
+0xE3D4=>0xF568,
+0xE3D5=>0xF569,
+0xE3D6=>0xF56A,
+0xE3D7=>0xF56B,
+0xE3D8=>0xF56C,
+0xE3D9=>0xF56D,
+0xE3DA=>0xF56E,
+0xE3DB=>0xF56F,
+0xE3DC=>0xF570,
+0xE3DD=>0xF571,
+0xE3DE=>0xF572,
+0xE3DF=>0xF573,
+0xE3E0=>0xF574,
+0xE3E1=>0xF575,
+0xE3E2=>0xF576,
+0xE3E3=>0xF577,
+0xE3E4=>0xF578,
+0xE3E5=>0xF579,
+0xE3E6=>0xF57A,
+0xE3E7=>0xF57B,
+0xE3E8=>0xF57C,
+0xE3E9=>0xF57D,
+0xE3EA=>0xF57E,
+0xE3EB=>0xF580,
+0xE3EC=>0xF581,
+0xE3ED=>0xF582,
+0xE3EE=>0xF583,
+0xE3EF=>0xF584,
+0xE3F0=>0xF585,
+0xE3F1=>0xF586,
+0xE3F2=>0xF587,
+0xE3F3=>0xF588,
+0xE3F4=>0xF589,
+0xE3F5=>0xF58A,
+0xE3F6=>0xF58B,
+0xE3F7=>0xF58C,
+0xE3F8=>0xF58D,
+0xE3F9=>0xF58E,
+0xE3FA=>0xF58F,
+0xE3FB=>0xF590,
+0xE3FC=>0xF591,
+0xE3FD=>0xF592,
+0xE3FE=>0xF593,
+0xE3FF=>0xF594,
+0xE400=>0xF595,
+0xE401=>0xF596,
+0xE402=>0xF597,
+0xE403=>0xF598,
+0xE404=>0xF599,
+0xE405=>0xF59A,
+0xE406=>0xF59B,
+0xE407=>0xF59C,
+0xE408=>0xF59D,
+0xE409=>0xF59E,
+0xE40A=>0xF59F,
+0xE40B=>0xF5A0,
+0xE40C=>0xF5A1,
+0xE40D=>0xF5A2,
+0xE40E=>0xF5A3,
+0xE40F=>0xF5A4,
+0xE410=>0xF5A5,
+0xE411=>0xF5A6,
+0xE412=>0xF5A7,
+0xE413=>0xF5A8,
+0xE414=>0xF5A9,
+0xE415=>0xF5AA,
+0xE416=>0xF5AB,
+0xE417=>0xF5AC,
+0xE418=>0xF5AD,
+0xE419=>0xF5AE,
+0xE41A=>0xF5AF,
+0xE41B=>0xF5B0,
+0xE41C=>0xF5B1,
+0xE41D=>0xF5B2,
+0xE41E=>0xF5B3,
+0xE41F=>0xF5B4,
+0xE420=>0xF5B5,
+0xE421=>0xF5B6,
+0xE422=>0xF5B7,
+0xE423=>0xF5B8,
+0xE424=>0xF5B9,
+0xE425=>0xF5BA,
+0xE426=>0xF5BB,
+0xE427=>0xF5BC,
+0xE428=>0xF5BD,
+0xE429=>0xF5BE,
+0xE42A=>0xF5BF,
+0xE42B=>0xF5C0,
+0xE42C=>0xF5C1,
+0xE42D=>0xF5C2,
+0xE42E=>0xF5C3,
+0xE42F=>0xF5C4,
+0xE430=>0xF5C5,
+0xE431=>0xF5C6,
+0xE432=>0xF5C7,
+0xE433=>0xF5C8,
+0xE434=>0xF5C9,
+0xE435=>0xF5CA,
+0xE436=>0xF5CB,
+0xE437=>0xF5CC,
+0xE438=>0xF5CD,
+0xE439=>0xF5CE,
+0xE43A=>0xF5CF,
+0xE43B=>0xF5D0,
+0xE43C=>0xF5D1,
+0xE43D=>0xF5D2,
+0xE43E=>0xF5D3,
+0xE43F=>0xF5D4,
+0xE440=>0xF5D5,
+0xE441=>0xF5D6,
+0xE442=>0xF5D7,
+0xE443=>0xF5D8,
+0xE444=>0xF5D9,
+0xE445=>0xF5DA,
+0xE446=>0xF5DB,
+0xE447=>0xF5DC,
+0xE448=>0xF5DD,
+0xE449=>0xF5DE,
+0xE44A=>0xF5DF,
+0xE44B=>0xF5E0,
+0xE44C=>0xF5E1,
+0xE44D=>0xF5E2,
+0xE44E=>0xF5E3,
+0xE44F=>0xF5E4,
+0xE450=>0xF5E5,
+0xE451=>0xF5E6,
+0xE452=>0xF5E7,
+0xE453=>0xF5E8,
+0xE454=>0xF5E9,
+0xE455=>0xF5EA,
+0xE456=>0xF5EB,
+0xE457=>0xF5EC,
+0xE458=>0xF5ED,
+0xE459=>0xF5EE,
+0xE45A=>0xF5EF,
+0xE45B=>0xF5F0,
+0xE45C=>0xF5F1,
+0xE45D=>0xF5F2,
+0xE45E=>0xF5F3,
+0xE45F=>0xF5F4,
+0xE460=>0xF5F5,
+0xE461=>0xF5F6,
+0xE462=>0xF5F7,
+0xE463=>0xF5F8,
+0xE464=>0xF5F9,
+0xE465=>0xF5FA,
+0xE466=>0xF5FB,
+0xE467=>0xF5FC,
+0xE468=>0xF640,
+0xE469=>0xF641,
+0xE46A=>0xF642,
+0xE46B=>0xF643,
+0xE46C=>0xF644,
+0xE46D=>0xF645,
+0xE46E=>0xF646,
+0xE46F=>0xF647,
+0xE470=>0xF648,
+0xE471=>0xF649,
+0xE472=>0xF64A,
+0xE473=>0xF64B,
+0xE474=>0xF64C,
+0xE475=>0xF64D,
+0xE476=>0xF64E,
+0xE477=>0xF64F,
+0xE478=>0xF650,
+0xE479=>0xF651,
+0xE47A=>0xF652,
+0xE47B=>0xF653,
+0xE47C=>0xF654,
+0xE47D=>0xF655,
+0xE47E=>0xF656,
+0xE47F=>0xF657,
+0xE480=>0xF658,
+0xE481=>0xF659,
+0xE482=>0xF65A,
+0xE483=>0xF65B,
+0xE484=>0xF65C,
+0xE485=>0xF65D,
+0xE486=>0xF65E,
+0xE487=>0xF65F,
+0xE488=>0xF660,
+0xE489=>0xF661,
+0xE48A=>0xF662,
+0xE48B=>0xF663,
+0xE48C=>0xF664,
+0xE48D=>0xF665,
+0xE48E=>0xF666,
+0xE48F=>0xF667,
+0xE490=>0xF668,
+0xE491=>0xF669,
+0xE492=>0xF66A,
+0xE493=>0xF66B,
+0xE494=>0xF66C,
+0xE495=>0xF66D,
+0xE496=>0xF66E,
+0xE497=>0xF66F,
+0xE498=>0xF670,
+0xE499=>0xF671,
+0xE49A=>0xF672,
+0xE49B=>0xF673,
+0xE49C=>0xF674,
+0xE49D=>0xF675,
+0xE49E=>0xF676,
+0xE49F=>0xF677,
+0xE4A0=>0xF678,
+0xE4A1=>0xF679,
+0xE4A2=>0xF67A,
+0xE4A3=>0xF67B,
+0xE4A4=>0xF67C,
+0xE4A5=>0xF67D,
+0xE4A6=>0xF67E,
+0xE4A7=>0xF680,
+0xE4A8=>0xF681,
+0xE4A9=>0xF682,
+0xE4AA=>0xF683,
+0xE4AB=>0xF684,
+0xE4AC=>0xF685,
+0xE4AD=>0xF686,
+0xE4AE=>0xF687,
+0xE4AF=>0xF688,
+0xE4B0=>0xF689,
+0xE4B1=>0xF68A,
+0xE4B2=>0xF68B,
+0xE4B3=>0xF68C,
+0xE4B4=>0xF68D,
+0xE4B5=>0xF68E,
+0xE4B6=>0xF68F,
+0xE4B7=>0xF690,
+0xE4B8=>0xF691,
+0xE4B9=>0xF692,
+0xE4BA=>0xF693,
+0xE4BB=>0xF694,
+0xE4BC=>0xF695,
+0xE4BD=>0xF696,
+0xE4BE=>0xF697,
+0xE4BF=>0xF698,
+0xE4C0=>0xF699,
+0xE4C1=>0xF69A,
+0xE4C2=>0xF69B,
+0xE4C3=>0xF69C,
+0xE4C4=>0xF69D,
+0xE4C5=>0xF69E,
+0xE4C6=>0xF69F,
+0xE4C7=>0xF6A0,
+0xE4C8=>0xF6A1,
+0xE4C9=>0xF6A2,
+0xE4CA=>0xF6A3,
+0xE4CB=>0xF6A4,
+0xE4CC=>0xF6A5,
+0xE4CD=>0xF6A6,
+0xE4CE=>0xF6A7,
+0xE4CF=>0xF6A8,
+0xE4D0=>0xF6A9,
+0xE4D1=>0xF6AA,
+0xE4D2=>0xF6AB,
+0xE4D3=>0xF6AC,
+0xE4D4=>0xF6AD,
+0xE4D5=>0xF6AE,
+0xE4D6=>0xF6AF,
+0xE4D7=>0xF6B0,
+0xE4D8=>0xF6B1,
+0xE4D9=>0xF6B2,
+0xE4DA=>0xF6B3,
+0xE4DB=>0xF6B4,
+0xE4DC=>0xF6B5,
+0xE4DD=>0xF6B6,
+0xE4DE=>0xF6B7,
+0xE4DF=>0xF6B8,
+0xE4E0=>0xF6B9,
+0xE4E1=>0xF6BA,
+0xE4E2=>0xF6BB,
+0xE4E3=>0xF6BC,
+0xE4E4=>0xF6BD,
+0xE4E5=>0xF6BE,
+0xE4E6=>0xF6BF,
+0xE4E7=>0xF6C0,
+0xE4E8=>0xF6C1,
+0xE4E9=>0xF6C2,
+0xE4EA=>0xF6C3,
+0xE4EB=>0xF6C4,
+0xE4EC=>0xF6C5,
+0xE4ED=>0xF6C6,
+0xE4EE=>0xF6C7,
+0xE4EF=>0xF6C8,
+0xE4F0=>0xF6C9,
+0xE4F1=>0xF6CA,
+0xE4F2=>0xF6CB,
+0xE4F3=>0xF6CC,
+0xE4F4=>0xF6CD,
+0xE4F5=>0xF6CE,
+0xE4F6=>0xF6CF,
+0xE4F7=>0xF6D0,
+0xE4F8=>0xF6D1,
+0xE4F9=>0xF6D2,
+0xE4FA=>0xF6D3,
+0xE4FB=>0xF6D4,
+0xE4FC=>0xF6D5,
+0xE4FD=>0xF6D6,
+0xE4FE=>0xF6D7,
+0xE4FF=>0xF6D8,
+0xE500=>0xF6D9,
+0xE501=>0xF6DA,
+0xE502=>0xF6DB,
+0xE503=>0xF6DC,
+0xE504=>0xF6DD,
+0xE505=>0xF6DE,
+0xE506=>0xF6DF,
+0xE507=>0xF6E0,
+0xE508=>0xF6E1,
+0xE509=>0xF6E2,
+0xE50A=>0xF6E3,
+0xE50B=>0xF6E4,
+0xE50C=>0xF6E5,
+0xE50D=>0xF6E6,
+0xE50E=>0xF6E7,
+0xE50F=>0xF6E8,
+0xE510=>0xF6E9,
+0xE511=>0xF6EA,
+0xE512=>0xF6EB,
+0xE513=>0xF6EC,
+0xE514=>0xF6ED,
+0xE515=>0xF6EE,
+0xE516=>0xF6EF,
+0xE517=>0xF6F0,
+0xE518=>0xF6F1,
+0xE519=>0xF6F2,
+0xE51A=>0xF6F3,
+0xE51B=>0xF6F4,
+0xE51C=>0xF6F5,
+0xE51D=>0xF6F6,
+0xE51E=>0xF6F7,
+0xE51F=>0xF6F8,
+0xE520=>0xF6F9,
+0xE521=>0xF6FA,
+0xE522=>0xF6FB,
+0xE523=>0xF6FC,
+0xE524=>0xF740,
+0xE525=>0xF741,
+0xE526=>0xF742,
+0xE527=>0xF743,
+0xE528=>0xF744,
+0xE529=>0xF745,
+0xE52A=>0xF746,
+0xE52B=>0xF747,
+0xE52C=>0xF748,
+0xE52D=>0xF749,
+0xE52E=>0xF74A,
+0xE52F=>0xF74B,
+0xE530=>0xF74C,
+0xE531=>0xF74D,
+0xE532=>0xF74E,
+0xE533=>0xF74F,
+0xE534=>0xF750,
+0xE535=>0xF751,
+0xE536=>0xF752,
+0xE537=>0xF753,
+0xE538=>0xF754,
+0xE539=>0xF755,
+0xE53A=>0xF756,
+0xE53B=>0xF757,
+0xE53C=>0xF758,
+0xE53D=>0xF759,
+0xE53E=>0xF75A,
+0xE53F=>0xF75B,
+0xE540=>0xF75C,
+0xE541=>0xF75D,
+0xE542=>0xF75E,
+0xE543=>0xF75F,
+0xE544=>0xF760,
+0xE545=>0xF761,
+0xE546=>0xF762,
+0xE547=>0xF763,
+0xE548=>0xF764,
+0xE549=>0xF765,
+0xE54A=>0xF766,
+0xE54B=>0xF767,
+0xE54C=>0xF768,
+0xE54D=>0xF769,
+0xE54E=>0xF76A,
+0xE54F=>0xF76B,
+0xE550=>0xF76C,
+0xE551=>0xF76D,
+0xE552=>0xF76E,
+0xE553=>0xF76F,
+0xE554=>0xF770,
+0xE555=>0xF771,
+0xE556=>0xF772,
+0xE557=>0xF773,
+0xE558=>0xF774,
+0xE559=>0xF775,
+0xE55A=>0xF776,
+0xE55B=>0xF777,
+0xE55C=>0xF778,
+0xE55D=>0xF779,
+0xE55E=>0xF77A,
+0xE55F=>0xF77B,
+0xE560=>0xF77C,
+0xE561=>0xF77D,
+0xE562=>0xF77E,
+0xE563=>0xF780,
+0xE564=>0xF781,
+0xE565=>0xF782,
+0xE566=>0xF783,
+0xE567=>0xF784,
+0xE568=>0xF785,
+0xE569=>0xF786,
+0xE56A=>0xF787,
+0xE56B=>0xF788,
+0xE56C=>0xF789,
+0xE56D=>0xF78A,
+0xE56E=>0xF78B,
+0xE56F=>0xF78C,
+0xE570=>0xF78D,
+0xE571=>0xF78E,
+0xE572=>0xF78F,
+0xE573=>0xF790,
+0xE574=>0xF791,
+0xE575=>0xF792,
+0xE576=>0xF793,
+0xE577=>0xF794,
+0xE578=>0xF795,
+0xE579=>0xF796,
+0xE57A=>0xF797,
+0xE57B=>0xF798,
+0xE57C=>0xF799,
+0xE57D=>0xF79A,
+0xE57E=>0xF79B,
+0xE57F=>0xF79C,
+0xE580=>0xF79D,
+0xE581=>0xF79E,
+0xE582=>0xF79F,
+0xE583=>0xF7A0,
+0xE584=>0xF7A1,
+0xE585=>0xF7A2,
+0xE586=>0xF7A3,
+0xE587=>0xF7A4,
+0xE588=>0xF7A5,
+0xE589=>0xF7A6,
+0xE58A=>0xF7A7,
+0xE58B=>0xF7A8,
+0xE58C=>0xF7A9,
+0xE58D=>0xF7AA,
+0xE58E=>0xF7AB,
+0xE58F=>0xF7AC,
+0xE590=>0xF7AD,
+0xE591=>0xF7AE,
+0xE592=>0xF7AF,
+0xE593=>0xF7B0,
+0xE594=>0xF7B1,
+0xE595=>0xF7B2,
+0xE596=>0xF7B3,
+0xE597=>0xF7B4,
+0xE598=>0xF7B5,
+0xE599=>0xF7B6,
+0xE59A=>0xF7B7,
+0xE59B=>0xF7B8,
+0xE59C=>0xF7B9,
+0xE59D=>0xF7BA,
+0xE59E=>0xF7BB,
+0xE59F=>0xF7BC,
+0xE5A0=>0xF7BD,
+0xE5A1=>0xF7BE,
+0xE5A2=>0xF7BF,
+0xE5A3=>0xF7C0,
+0xE5A4=>0xF7C1,
+0xE5A5=>0xF7C2,
+0xE5A6=>0xF7C3,
+0xE5A7=>0xF7C4,
+0xE5A8=>0xF7C5,
+0xE5A9=>0xF7C6,
+0xE5AA=>0xF7C7,
+0xE5AB=>0xF7C8,
+0xE5AC=>0xF7C9,
+0xE5AD=>0xF7CA,
+0xE5AE=>0xF7CB,
+0xE5AF=>0xF7CC,
+0xE5B0=>0xF7CD,
+0xE5B1=>0xF7CE,
+0xE5B2=>0xF7CF,
+0xE5B3=>0xF7D0,
+0xE5B4=>0xF7D1,
+0xE5B5=>0xF7D2,
+0xE5B6=>0xF7D3,
+0xE5B7=>0xF7D4,
+0xE5B8=>0xF7D5,
+0xE5B9=>0xF7D6,
+0xE5BA=>0xF7D7,
+0xE5BB=>0xF7D8,
+0xE5BC=>0xF7D9,
+0xE5BD=>0xF7DA,
+0xE5BE=>0xF7DB,
+0xE5BF=>0xF7DC,
+0xE5C0=>0xF7DD,
+0xE5C1=>0xF7DE,
+0xE5C2=>0xF7DF,
+0xE5C3=>0xF7E0,
+0xE5C4=>0xF7E1,
+0xE5C5=>0xF7E2,
+0xE5C6=>0xF7E3,
+0xE5C7=>0xF7E4,
+0xE5C8=>0xF7E5,
+0xE5C9=>0xF7E6,
+0xE5CA=>0xF7E7,
+0xE5CB=>0xF7E8,
+0xE5CC=>0xF7E9,
+0xE5CD=>0xF7EA,
+0xE5CE=>0xF7EB,
+0xE5CF=>0xF7EC,
+0xE5D0=>0xF7ED,
+0xE5D1=>0xF7EE,
+0xE5D2=>0xF7EF,
+0xE5D3=>0xF7F0,
+0xE5D4=>0xF7F1,
+0xE5D5=>0xF7F2,
+0xE5D6=>0xF7F3,
+0xE5D7=>0xF7F4,
+0xE5D8=>0xF7F5,
+0xE5D9=>0xF7F6,
+0xE5DA=>0xF7F7,
+0xE5DB=>0xF7F8,
+0xE5DC=>0xF7F9,
+0xE5DD=>0xF7FA,
+0xE5DE=>0xF7FB,
+0xE5DF=>0xF7FC,
+0xE5E0=>0xF840,
+0xE5E1=>0xF841,
+0xE5E2=>0xF842,
+0xE5E3=>0xF843,
+0xE5E4=>0xF844,
+0xE5E5=>0xF845,
+0xE5E6=>0xF846,
+0xE5E7=>0xF847,
+0xE5E8=>0xF848,
+0xE5E9=>0xF849,
+0xE5EA=>0xF84A,
+0xE5EB=>0xF84B,
+0xE5EC=>0xF84C,
+0xE5ED=>0xF84D,
+0xE5EE=>0xF84E,
+0xE5EF=>0xF84F,
+0xE5F0=>0xF850,
+0xE5F1=>0xF851,
+0xE5F2=>0xF852,
+0xE5F3=>0xF853,
+0xE5F4=>0xF854,
+0xE5F5=>0xF855,
+0xE5F6=>0xF856,
+0xE5F7=>0xF857,
+0xE5F8=>0xF858,
+0xE5F9=>0xF859,
+0xE5FA=>0xF85A,
+0xE5FB=>0xF85B,
+0xE5FC=>0xF85C,
+0xE5FD=>0xF85D,
+0xE5FE=>0xF85E,
+0xE5FF=>0xF85F,
+0xE600=>0xF860,
+0xE601=>0xF861,
+0xE602=>0xF862,
+0xE603=>0xF863,
+0xE604=>0xF864,
+0xE605=>0xF865,
+0xE606=>0xF866,
+0xE607=>0xF867,
+0xE608=>0xF868,
+0xE609=>0xF869,
+0xE60A=>0xF86A,
+0xE60B=>0xF86B,
+0xE60C=>0xF86C,
+0xE60D=>0xF86D,
+0xE60E=>0xF86E,
+0xE60F=>0xF86F,
+0xE610=>0xF870,
+0xE611=>0xF871,
+0xE612=>0xF872,
+0xE613=>0xF873,
+0xE614=>0xF874,
+0xE615=>0xF875,
+0xE616=>0xF876,
+0xE617=>0xF877,
+0xE618=>0xF878,
+0xE619=>0xF879,
+0xE61A=>0xF87A,
+0xE61B=>0xF87B,
+0xE61C=>0xF87C,
+0xE61D=>0xF87D,
+0xE61E=>0xF87E,
+0xE61F=>0xF880,
+0xE620=>0xF881,
+0xE621=>0xF882,
+0xE622=>0xF883,
+0xE623=>0xF884,
+0xE624=>0xF885,
+0xE625=>0xF886,
+0xE626=>0xF887,
+0xE627=>0xF888,
+0xE628=>0xF889,
+0xE629=>0xF88A,
+0xE62A=>0xF88B,
+0xE62B=>0xF88C,
+0xE62C=>0xF88D,
+0xE62D=>0xF88E,
+0xE62E=>0xF88F,
+0xE62F=>0xF890,
+0xE630=>0xF891,
+0xE631=>0xF892,
+0xE632=>0xF893,
+0xE633=>0xF894,
+0xE634=>0xF895,
+0xE635=>0xF896,
+0xE636=>0xF897,
+0xE637=>0xF898,
+0xE638=>0xF899,
+0xE639=>0xF89A,
+0xE63A=>0xF89B,
+0xE63B=>0xF89C,
+0xE63C=>0xF89D,
+0xE63D=>0xF89E,
+0xE63E=>0xF89F,
+0xE63F=>0xF8A0,
+0xE640=>0xF8A1,
+0xE641=>0xF8A2,
+0xE642=>0xF8A3,
+0xE643=>0xF8A4,
+0xE644=>0xF8A5,
+0xE645=>0xF8A6,
+0xE646=>0xF8A7,
+0xE647=>0xF8A8,
+0xE648=>0xF8A9,
+0xE649=>0xF8AA,
+0xE64A=>0xF8AB,
+0xE64B=>0xF8AC,
+0xE64C=>0xF8AD,
+0xE64D=>0xF8AE,
+0xE64E=>0xF8AF,
+0xE64F=>0xF8B0,
+0xE650=>0xF8B1,
+0xE651=>0xF8B2,
+0xE652=>0xF8B3,
+0xE653=>0xF8B4,
+0xE654=>0xF8B5,
+0xE655=>0xF8B6,
+0xE656=>0xF8B7,
+0xE657=>0xF8B8,
+0xE658=>0xF8B9,
+0xE659=>0xF8BA,
+0xE65A=>0xF8BB,
+0xE65B=>0xF8BC,
+0xE65C=>0xF8BD,
+0xE65D=>0xF8BE,
+0xE65E=>0xF8BF,
+0xE65F=>0xF8C0,
+0xE660=>0xF8C1,
+0xE661=>0xF8C2,
+0xE662=>0xF8C3,
+0xE663=>0xF8C4,
+0xE664=>0xF8C5,
+0xE665=>0xF8C6,
+0xE666=>0xF8C7,
+0xE667=>0xF8C8,
+0xE668=>0xF8C9,
+0xE669=>0xF8CA,
+0xE66A=>0xF8CB,
+0xE66B=>0xF8CC,
+0xE66C=>0xF8CD,
+0xE66D=>0xF8CE,
+0xE66E=>0xF8CF,
+0xE66F=>0xF8D0,
+0xE670=>0xF8D1,
+0xE671=>0xF8D2,
+0xE672=>0xF8D3,
+0xE673=>0xF8D4,
+0xE674=>0xF8D5,
+0xE675=>0xF8D6,
+0xE676=>0xF8D7,
+0xE677=>0xF8D8,
+0xE678=>0xF8D9,
+0xE679=>0xF8DA,
+0xE67A=>0xF8DB,
+0xE67B=>0xF8DC,
+0xE67C=>0xF8DD,
+0xE67D=>0xF8DE,
+0xE67E=>0xF8DF,
+0xE67F=>0xF8E0,
+0xE680=>0xF8E1,
+0xE681=>0xF8E2,
+0xE682=>0xF8E3,
+0xE683=>0xF8E4,
+0xE684=>0xF8E5,
+0xE685=>0xF8E6,
+0xE686=>0xF8E7,
+0xE687=>0xF8E8,
+0xE688=>0xF8E9,
+0xE689=>0xF8EA,
+0xE68A=>0xF8EB,
+0xE68B=>0xF8EC,
+0xE68C=>0xF8ED,
+0xE68D=>0xF8EE,
+0xE68E=>0xF8EF,
+0xE68F=>0xF8F0,
+0xE690=>0xF8F1,
+0xE691=>0xF8F2,
+0xE692=>0xF8F3,
+0xE693=>0xF8F4,
+0xE694=>0xF8F5,
+0xE695=>0xF8F6,
+0xE696=>0xF8F7,
+0xE697=>0xF8F8,
+0xE698=>0xF8F9,
+0xE699=>0xF8FA,
+0xE69A=>0xF8FB,
+0xE69B=>0xF8FC,
+0xE69C=>0xF940,
+0xE69D=>0xF941,
+0xE69E=>0xF942,
+0xE69F=>0xF943,
+0xE6A0=>0xF944,
+0xE6A1=>0xF945,
+0xE6A2=>0xF946,
+0xE6A3=>0xF947,
+0xE6A4=>0xF948,
+0xE6A5=>0xF949,
+0xE6A6=>0xF94A,
+0xE6A7=>0xF94B,
+0xE6A8=>0xF94C,
+0xE6A9=>0xF94D,
+0xE6AA=>0xF94E,
+0xE6AB=>0xF94F,
+0xE6AC=>0xF950,
+0xE6AD=>0xF951,
+0xE6AE=>0xF952,
+0xE6AF=>0xF953,
+0xE6B0=>0xF954,
+0xE6B1=>0xF955,
+0xE6B2=>0xF956,
+0xE6B3=>0xF957,
+0xE6B4=>0xF958,
+0xE6B5=>0xF959,
+0xE6B6=>0xF95A,
+0xE6B7=>0xF95B,
+0xE6B8=>0xF95C,
+0xE6B9=>0xF95D,
+0xE6BA=>0xF95E,
+0xE6BB=>0xF95F,
+0xE6BC=>0xF960,
+0xE6BD=>0xF961,
+0xE6BE=>0xF962,
+0xE6BF=>0xF963,
+0xE6C0=>0xF964,
+0xE6C1=>0xF965,
+0xE6C2=>0xF966,
+0xE6C3=>0xF967,
+0xE6C4=>0xF968,
+0xE6C5=>0xF969,
+0xE6C6=>0xF96A,
+0xE6C7=>0xF96B,
+0xE6C8=>0xF96C,
+0xE6C9=>0xF96D,
+0xE6CA=>0xF96E,
+0xE6CB=>0xF96F,
+0xE6CC=>0xF970,
+0xE6CD=>0xF971,
+0xE6CE=>0xF972,
+0xE6CF=>0xF973,
+0xE6D0=>0xF974,
+0xE6D1=>0xF975,
+0xE6D2=>0xF976,
+0xE6D3=>0xF977,
+0xE6D4=>0xF978,
+0xE6D5=>0xF979,
+0xE6D6=>0xF97A,
+0xE6D7=>0xF97B,
+0xE6D8=>0xF97C,
+0xE6D9=>0xF97D,
+0xE6DA=>0xF97E,
+0xE6DB=>0xF980,
+0xE6DC=>0xF981,
+0xE6DD=>0xF982,
+0xE6DE=>0xF983,
+0xE6DF=>0xF984,
+0xE6E0=>0xF985,
+0xE6E1=>0xF986,
+0xE6E2=>0xF987,
+0xE6E3=>0xF988,
+0xE6E4=>0xF989,
+0xE6E5=>0xF98A,
+0xE6E6=>0xF98B,
+0xE6E7=>0xF98C,
+0xE6E8=>0xF98D,
+0xE6E9=>0xF98E,
+0xE6EA=>0xF98F,
+0xE6EB=>0xF990,
+0xE6EC=>0xF991,
+0xE6ED=>0xF992,
+0xE6EE=>0xF993,
+0xE6EF=>0xF994,
+0xE6F0=>0xF995,
+0xE6F1=>0xF996,
+0xE6F2=>0xF997,
+0xE6F3=>0xF998,
+0xE6F4=>0xF999,
+0xE6F5=>0xF99A,
+0xE6F6=>0xF99B,
+0xE6F7=>0xF99C,
+0xE6F8=>0xF99D,
+0xE6F9=>0xF99E,
+0xE6FA=>0xF99F,
+0xE6FB=>0xF9A0,
+0xE6FC=>0xF9A1,
+0xE6FD=>0xF9A2,
+0xE6FE=>0xF9A3,
+0xE6FF=>0xF9A4,
+0xE700=>0xF9A5,
+0xE701=>0xF9A6,
+0xE702=>0xF9A7,
+0xE703=>0xF9A8,
+0xE704=>0xF9A9,
+0xE705=>0xF9AA,
+0xE706=>0xF9AB,
+0xE707=>0xF9AC,
+0xE708=>0xF9AD,
+0xE709=>0xF9AE,
+0xE70A=>0xF9AF,
+0xE70B=>0xF9B0,
+0xE70C=>0xF9B1,
+0xE70D=>0xF9B2,
+0xE70E=>0xF9B3,
+0xE70F=>0xF9B4,
+0xE710=>0xF9B5,
+0xE711=>0xF9B6,
+0xE712=>0xF9B7,
+0xE713=>0xF9B8,
+0xE714=>0xF9B9,
+0xE715=>0xF9BA,
+0xE716=>0xF9BB,
+0xE717=>0xF9BC,
+0xE718=>0xF9BD,
+0xE719=>0xF9BE,
+0xE71A=>0xF9BF,
+0xE71B=>0xF9C0,
+0xE71C=>0xF9C1,
+0xE71D=>0xF9C2,
+0xE71E=>0xF9C3,
+0xE71F=>0xF9C4,
+0xE720=>0xF9C5,
+0xE721=>0xF9C6,
+0xE722=>0xF9C7,
+0xE723=>0xF9C8,
+0xE724=>0xF9C9,
+0xE725=>0xF9CA,
+0xE726=>0xF9CB,
+0xE727=>0xF9CC,
+0xE728=>0xF9CD,
+0xE729=>0xF9CE,
+0xE72A=>0xF9CF,
+0xE72B=>0xF9D0,
+0xE72C=>0xF9D1,
+0xE72D=>0xF9D2,
+0xE72E=>0xF9D3,
+0xE72F=>0xF9D4,
+0xE730=>0xF9D5,
+0xE731=>0xF9D6,
+0xE732=>0xF9D7,
+0xE733=>0xF9D8,
+0xE734=>0xF9D9,
+0xE735=>0xF9DA,
+0xE736=>0xF9DB,
+0xE737=>0xF9DC,
+0xE738=>0xF9DD,
+0xE739=>0xF9DE,
+0xE73A=>0xF9DF,
+0xE73B=>0xF9E0,
+0xE73C=>0xF9E1,
+0xE73D=>0xF9E2,
+0xE73E=>0xF9E3,
+0xE73F=>0xF9E4,
+0xE740=>0xF9E5,
+0xE741=>0xF9E6,
+0xE742=>0xF9E7,
+0xE743=>0xF9E8,
+0xE744=>0xF9E9,
+0xE745=>0xF9EA,
+0xE746=>0xF9EB,
+0xE747=>0xF9EC,
+0xE748=>0xF9ED,
+0xE749=>0xF9EE,
+0xE74A=>0xF9EF,
+0xE74B=>0xF9F0,
+0xE74C=>0xF9F1,
+0xE74D=>0xF9F2,
+0xE74E=>0xF9F3,
+0xE74F=>0xF9F4,
+0xE750=>0xF9F5,
+0xE751=>0xF9F6,
+0xE752=>0xF9F7,
+0xE753=>0xF9F8,
+0xE754=>0xF9F9,
+0xE755=>0xF9FA,
+0xE756=>0xF9FB,
+0xE757=>0xF9FC,
+0x2170=>0xFA40,
+0x2171=>0xFA41,
+0x2172=>0xFA42,
+0x2173=>0xFA43,
+0x2174=>0xFA44,
+0x2175=>0xFA45,
+0x2176=>0xFA46,
+0x2177=>0xFA47,
+0x2178=>0xFA48,
+0x2179=>0xFA49,
+0x2160=>0xFA4A,
+0x2161=>0xFA4B,
+0x2162=>0xFA4C,
+0x2163=>0xFA4D,
+0x2164=>0xFA4E,
+0x2165=>0xFA4F,
+0x2166=>0xFA50,
+0x2167=>0xFA51,
+0x2168=>0xFA52,
+0x2169=>0xFA53,
+0xFFE2=>0xFA54,
+0xFFE4=>0xFA55,
+0xFF07=>0xFA56,
+0xFF02=>0xFA57,
+0x3231=>0xFA58,
+0x2116=>0xFA59,
+0x2121=>0xFA5A,
+0x2235=>0xFA5B,
+0x7E8A=>0xFA5C,
+0x891C=>0xFA5D,
+0x9348=>0xFA5E,
+0x9288=>0xFA5F,
+0x84DC=>0xFA60,
+0x4FC9=>0xFA61,
+0x70BB=>0xFA62,
+0x6631=>0xFA63,
+0x68C8=>0xFA64,
+0x92F9=>0xFA65,
+0x66FB=>0xFA66,
+0x5F45=>0xFA67,
+0x4E28=>0xFA68,
+0x4EE1=>0xFA69,
+0x4EFC=>0xFA6A,
+0x4F00=>0xFA6B,
+0x4F03=>0xFA6C,
+0x4F39=>0xFA6D,
+0x4F56=>0xFA6E,
+0x4F92=>0xFA6F,
+0x4F8A=>0xFA70,
+0x4F9A=>0xFA71,
+0x4F94=>0xFA72,
+0x4FCD=>0xFA73,
+0x5040=>0xFA74,
+0x5022=>0xFA75,
+0x4FFF=>0xFA76,
+0x501E=>0xFA77,
+0x5046=>0xFA78,
+0x5070=>0xFA79,
+0x5042=>0xFA7A,
+0x5094=>0xFA7B,
+0x50F4=>0xFA7C,
+0x50D8=>0xFA7D,
+0x514A=>0xFA7E,
+0x5164=>0xFA80,
+0x519D=>0xFA81,
+0x51BE=>0xFA82,
+0x51EC=>0xFA83,
+0x5215=>0xFA84,
+0x529C=>0xFA85,
+0x52A6=>0xFA86,
+0x52C0=>0xFA87,
+0x52DB=>0xFA88,
+0x5300=>0xFA89,
+0x5307=>0xFA8A,
+0x5324=>0xFA8B,
+0x5372=>0xFA8C,
+0x5393=>0xFA8D,
+0x53B2=>0xFA8E,
+0x53DD=>0xFA8F,
+0xFA0E=>0xFA90,
+0x549C=>0xFA91,
+0x548A=>0xFA92,
+0x54A9=>0xFA93,
+0x54FF=>0xFA94,
+0x5586=>0xFA95,
+0x5759=>0xFA96,
+0x5765=>0xFA97,
+0x57AC=>0xFA98,
+0x57C8=>0xFA99,
+0x57C7=>0xFA9A,
+0xFA0F=>0xFA9B,
+0xFA10=>0xFA9C,
+0x589E=>0xFA9D,
+0x58B2=>0xFA9E,
+0x590B=>0xFA9F,
+0x5953=>0xFAA0,
+0x595B=>0xFAA1,
+0x595D=>0xFAA2,
+0x5963=>0xFAA3,
+0x59A4=>0xFAA4,
+0x59BA=>0xFAA5,
+0x5B56=>0xFAA6,
+0x5BC0=>0xFAA7,
+0x752F=>0xFAA8,
+0x5BD8=>0xFAA9,
+0x5BEC=>0xFAAA,
+0x5C1E=>0xFAAB,
+0x5CA6=>0xFAAC,
+0x5CBA=>0xFAAD,
+0x5CF5=>0xFAAE,
+0x5D27=>0xFAAF,
+0x5D53=>0xFAB0,
+0xFA11=>0xFAB1,
+0x5D42=>0xFAB2,
+0x5D6D=>0xFAB3,
+0x5DB8=>0xFAB4,
+0x5DB9=>0xFAB5,
+0x5DD0=>0xFAB6,
+0x5F21=>0xFAB7,
+0x5F34=>0xFAB8,
+0x5F67=>0xFAB9,
+0x5FB7=>0xFABA,
+0x5FDE=>0xFABB,
+0x605D=>0xFABC,
+0x6085=>0xFABD,
+0x608A=>0xFABE,
+0x60DE=>0xFABF,
+0x60D5=>0xFAC0,
+0x6120=>0xFAC1,
+0x60F2=>0xFAC2,
+0x6111=>0xFAC3,
+0x6137=>0xFAC4,
+0x6130=>0xFAC5,
+0x6198=>0xFAC6,
+0x6213=>0xFAC7,
+0x62A6=>0xFAC8,
+0x63F5=>0xFAC9,
+0x6460=>0xFACA,
+0x649D=>0xFACB,
+0x64CE=>0xFACC,
+0x654E=>0xFACD,
+0x6600=>0xFACE,
+0x6615=>0xFACF,
+0x663B=>0xFAD0,
+0x6609=>0xFAD1,
+0x662E=>0xFAD2,
+0x661E=>0xFAD3,
+0x6624=>0xFAD4,
+0x6665=>0xFAD5,
+0x6657=>0xFAD6,
+0x6659=>0xFAD7,
+0xFA12=>0xFAD8,
+0x6673=>0xFAD9,
+0x6699=>0xFADA,
+0x66A0=>0xFADB,
+0x66B2=>0xFADC,
+0x66BF=>0xFADD,
+0x66FA=>0xFADE,
+0x670E=>0xFADF,
+0xF929=>0xFAE0,
+0x6766=>0xFAE1,
+0x67BB=>0xFAE2,
+0x6852=>0xFAE3,
+0x67C0=>0xFAE4,
+0x6801=>0xFAE5,
+0x6844=>0xFAE6,
+0x68CF=>0xFAE7,
+0xFA13=>0xFAE8,
+0x6968=>0xFAE9,
+0xFA14=>0xFAEA,
+0x6998=>0xFAEB,
+0x69E2=>0xFAEC,
+0x6A30=>0xFAED,
+0x6A6B=>0xFAEE,
+0x6A46=>0xFAEF,
+0x6A73=>0xFAF0,
+0x6A7E=>0xFAF1,
+0x6AE2=>0xFAF2,
+0x6AE4=>0xFAF3,
+0x6BD6=>0xFAF4,
+0x6C3F=>0xFAF5,
+0x6C5C=>0xFAF6,
+0x6C86=>0xFAF7,
+0x6C6F=>0xFAF8,
+0x6CDA=>0xFAF9,
+0x6D04=>0xFAFA,
+0x6D87=>0xFAFB,
+0x6D6F=>0xFAFC,
+0x6D96=>0xFB40,
+0x6DAC=>0xFB41,
+0x6DCF=>0xFB42,
+0x6DF8=>0xFB43,
+0x6DF2=>0xFB44,
+0x6DFC=>0xFB45,
+0x6E39=>0xFB46,
+0x6E5C=>0xFB47,
+0x6E27=>0xFB48,
+0x6E3C=>0xFB49,
+0x6EBF=>0xFB4A,
+0x6F88=>0xFB4B,
+0x6FB5=>0xFB4C,
+0x6FF5=>0xFB4D,
+0x7005=>0xFB4E,
+0x7007=>0xFB4F,
+0x7028=>0xFB50,
+0x7085=>0xFB51,
+0x70AB=>0xFB52,
+0x710F=>0xFB53,
+0x7104=>0xFB54,
+0x715C=>0xFB55,
+0x7146=>0xFB56,
+0x7147=>0xFB57,
+0xFA15=>0xFB58,
+0x71C1=>0xFB59,
+0x71FE=>0xFB5A,
+0x72B1=>0xFB5B,
+0x72BE=>0xFB5C,
+0x7324=>0xFB5D,
+0xFA16=>0xFB5E,
+0x7377=>0xFB5F,
+0x73BD=>0xFB60,
+0x73C9=>0xFB61,
+0x73D6=>0xFB62,
+0x73E3=>0xFB63,
+0x73D2=>0xFB64,
+0x7407=>0xFB65,
+0x73F5=>0xFB66,
+0x7426=>0xFB67,
+0x742A=>0xFB68,
+0x7429=>0xFB69,
+0x742E=>0xFB6A,
+0x7462=>0xFB6B,
+0x7489=>0xFB6C,
+0x749F=>0xFB6D,
+0x7501=>0xFB6E,
+0x756F=>0xFB6F,
+0x7682=>0xFB70,
+0x769C=>0xFB71,
+0x769E=>0xFB72,
+0x769B=>0xFB73,
+0x76A6=>0xFB74,
+0xFA17=>0xFB75,
+0x7746=>0xFB76,
+0x52AF=>0xFB77,
+0x7821=>0xFB78,
+0x784E=>0xFB79,
+0x7864=>0xFB7A,
+0x787A=>0xFB7B,
+0x7930=>0xFB7C,
+0xFA18=>0xFB7D,
+0xFA19=>0xFB7E,
+0xFA1A=>0xFB80,
+0x7994=>0xFB81,
+0xFA1B=>0xFB82,
+0x799B=>0xFB83,
+0x7AD1=>0xFB84,
+0x7AE7=>0xFB85,
+0xFA1C=>0xFB86,
+0x7AEB=>0xFB87,
+0x7B9E=>0xFB88,
+0xFA1D=>0xFB89,
+0x7D48=>0xFB8A,
+0x7D5C=>0xFB8B,
+0x7DB7=>0xFB8C,
+0x7DA0=>0xFB8D,
+0x7DD6=>0xFB8E,
+0x7E52=>0xFB8F,
+0x7F47=>0xFB90,
+0x7FA1=>0xFB91,
+0xFA1E=>0xFB92,
+0x8301=>0xFB93,
+0x8362=>0xFB94,
+0x837F=>0xFB95,
+0x83C7=>0xFB96,
+0x83F6=>0xFB97,
+0x8448=>0xFB98,
+0x84B4=>0xFB99,
+0x8553=>0xFB9A,
+0x8559=>0xFB9B,
+0x856B=>0xFB9C,
+0xFA1F=>0xFB9D,
+0x85B0=>0xFB9E,
+0xFA20=>0xFB9F,
+0xFA21=>0xFBA0,
+0x8807=>0xFBA1,
+0x88F5=>0xFBA2,
+0x8A12=>0xFBA3,
+0x8A37=>0xFBA4,
+0x8A79=>0xFBA5,
+0x8AA7=>0xFBA6,
+0x8ABE=>0xFBA7,
+0x8ADF=>0xFBA8,
+0xFA22=>0xFBA9,
+0x8AF6=>0xFBAA,
+0x8B53=>0xFBAB,
+0x8B7F=>0xFBAC,
+0x8CF0=>0xFBAD,
+0x8CF4=>0xFBAE,
+0x8D12=>0xFBAF,
+0x8D76=>0xFBB0,
+0xFA23=>0xFBB1,
+0x8ECF=>0xFBB2,
+0xFA24=>0xFBB3,
+0xFA25=>0xFBB4,
+0x9067=>0xFBB5,
+0x90DE=>0xFBB6,
+0xFA26=>0xFBB7,
+0x9115=>0xFBB8,
+0x9127=>0xFBB9,
+0x91DA=>0xFBBA,
+0x91D7=>0xFBBB,
+0x91DE=>0xFBBC,
+0x91ED=>0xFBBD,
+0x91EE=>0xFBBE,
+0x91E4=>0xFBBF,
+0x91E5=>0xFBC0,
+0x9206=>0xFBC1,
+0x9210=>0xFBC2,
+0x920A=>0xFBC3,
+0x923A=>0xFBC4,
+0x9240=>0xFBC5,
+0x923C=>0xFBC6,
+0x924E=>0xFBC7,
+0x9259=>0xFBC8,
+0x9251=>0xFBC9,
+0x9239=>0xFBCA,
+0x9267=>0xFBCB,
+0x92A7=>0xFBCC,
+0x9277=>0xFBCD,
+0x9278=>0xFBCE,
+0x92E7=>0xFBCF,
+0x92D7=>0xFBD0,
+0x92D9=>0xFBD1,
+0x92D0=>0xFBD2,
+0xFA27=>0xFBD3,
+0x92D5=>0xFBD4,
+0x92E0=>0xFBD5,
+0x92D3=>0xFBD6,
+0x9325=>0xFBD7,
+0x9321=>0xFBD8,
+0x92FB=>0xFBD9,
+0xFA28=>0xFBDA,
+0x931E=>0xFBDB,
+0x92FF=>0xFBDC,
+0x931D=>0xFBDD,
+0x9302=>0xFBDE,
+0x9370=>0xFBDF,
+0x9357=>0xFBE0,
+0x93A4=>0xFBE1,
+0x93C6=>0xFBE2,
+0x93DE=>0xFBE3,
+0x93F8=>0xFBE4,
+0x9431=>0xFBE5,
+0x9445=>0xFBE6,
+0x9448=>0xFBE7,
+0x9592=>0xFBE8,
+0xF9DC=>0xFBE9,
+0xFA29=>0xFBEA,
+0x969D=>0xFBEB,
+0x96AF=>0xFBEC,
+0x9733=>0xFBED,
+0x973B=>0xFBEE,
+0x9743=>0xFBEF,
+0x974D=>0xFBF0,
+0x974F=>0xFBF1,
+0x9751=>0xFBF2,
+0x9755=>0xFBF3,
+0x9857=>0xFBF4,
+0x9865=>0xFBF5,
+0xFA2A=>0xFBF6,
+0xFA2B=>0xFBF7,
+0x9927=>0xFBF8,
+0xFA2C=>0xFBF9,
+0x999E=>0xFBFA,
+0x9A4E=>0xFBFB,
+0x9AD9=>0xFBFC,
+0x9ADC=>0xFC40,
+0x9B75=>0xFC41,
+0x9B72=>0xFC42,
+0x9B8F=>0xFC43,
+0x9BB1=>0xFC44,
+0x9BBB=>0xFC45,
+0x9C00=>0xFC46,
+0x9D70=>0xFC47,
+0x9D6B=>0xFC48,
+0xFA2D=>0xFC49,
+0x9E19=>0xFC4A,
+0x9ED1=>0xFC4B);
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/mb_emulator/upper.table b/utf8/nucleus/libs/mb_emulator/upper.table
new file mode 100644 (file)
index 0000000..6c9339a
--- /dev/null
@@ -0,0 +1,651 @@
+<?php
+$mbemu_internals['upperarray'] = array (
+0x00B5 => 0x039C,
+0x00E0 => 0x00C0,
+0x00E1 => 0x00C1,
+0x00E2 => 0x00C2,
+0x00E3 => 0x00C3,
+0x00E4 => 0x00C4,
+0x00E5 => 0x00C5,
+0x00E6 => 0x00C6,
+0x00E7 => 0x00C7,
+0x00E8 => 0x00C8,
+0x00E9 => 0x00C9,
+0x00EA => 0x00CA,
+0x00EB => 0x00CB,
+0x00EC => 0x00CC,
+0x00ED => 0x00CD,
+0x00EE => 0x00CE,
+0x00EF => 0x00CF,
+0x00F0 => 0x00D0,
+0x00F1 => 0x00D1,
+0x00F2 => 0x00D2,
+0x00F3 => 0x00D3,
+0x00F4 => 0x00D4,
+0x00F5 => 0x00D5,
+0x00F6 => 0x00D6,
+0x00F8 => 0x00D8,
+0x00F9 => 0x00D9,
+0x00FA => 0x00DA,
+0x00FB => 0x00DB,
+0x00FC => 0x00DC,
+0x00FD => 0x00DD,
+0x00FE => 0x00DE,
+0x00FF => 0x0178,
+0x0101 => 0x0100,
+0x0103 => 0x0102,
+0x0105 => 0x0104,
+0x0107 => 0x0106,
+0x0109 => 0x0108,
+0x010B => 0x010A,
+0x010D => 0x010C,
+0x010F => 0x010E,
+0x0111 => 0x0110,
+0x0113 => 0x0112,
+0x0115 => 0x0114,
+0x0117 => 0x0116,
+0x0119 => 0x0118,
+0x011B => 0x011A,
+0x011D => 0x011C,
+0x011F => 0x011E,
+0x0121 => 0x0120,
+0x0123 => 0x0122,
+0x0125 => 0x0124,
+0x0127 => 0x0126,
+0x0129 => 0x0128,
+0x012B => 0x012A,
+0x012D => 0x012C,
+0x012F => 0x012E,
+0x0131 => 0x0049,
+0x0133 => 0x0132,
+0x0135 => 0x0134,
+0x0137 => 0x0136,
+0x013A => 0x0139,
+0x013C => 0x013B,
+0x013E => 0x013D,
+0x0140 => 0x013F,
+0x0142 => 0x0141,
+0x0144 => 0x0143,
+0x0146 => 0x0145,
+0x0148 => 0x0147,
+0x014B => 0x014A,
+0x014D => 0x014C,
+0x014F => 0x014E,
+0x0151 => 0x0150,
+0x0153 => 0x0152,
+0x0155 => 0x0154,
+0x0157 => 0x0156,
+0x0159 => 0x0158,
+0x015B => 0x015A,
+0x015D => 0x015C,
+0x015F => 0x015E,
+0x0161 => 0x0160,
+0x0163 => 0x0162,
+0x0165 => 0x0164,
+0x0167 => 0x0166,
+0x0169 => 0x0168,
+0x016B => 0x016A,
+0x016D => 0x016C,
+0x016F => 0x016E,
+0x0171 => 0x0170,
+0x0173 => 0x0172,
+0x0175 => 0x0174,
+0x0177 => 0x0176,
+0x017A => 0x0179,
+0x017C => 0x017B,
+0x017E => 0x017D,
+0x017F => 0x0053,
+0x0183 => 0x0182,
+0x0185 => 0x0184,
+0x0188 => 0x0187,
+0x018C => 0x018B,
+0x0192 => 0x0191,
+0x0195 => 0x01F6,
+0x0199 => 0x0198,
+0x019E => 0x0220,
+0x01A1 => 0x01A0,
+0x01A3 => 0x01A2,
+0x01A5 => 0x01A4,
+0x01A8 => 0x01A7,
+0x01AD => 0x01AC,
+0x01B0 => 0x01AF,
+0x01B4 => 0x01B3,
+0x01B6 => 0x01B5,
+0x01B9 => 0x01B8,
+0x01BD => 0x01BC,
+0x01BF => 0x01F7,
+0x01C6 => 0x01C5,
+0x01C9 => 0x01C8,
+0x01CC => 0x01CB,
+0x01CE => 0x01CD,
+0x01D0 => 0x01CF,
+0x01D2 => 0x01D1,
+0x01D4 => 0x01D3,
+0x01D6 => 0x01D5,
+0x01D8 => 0x01D7,
+0x01DA => 0x01D9,
+0x01DC => 0x01DB,
+0x01DD => 0x018E,
+0x01DF => 0x01DE,
+0x01E1 => 0x01E0,
+0x01E3 => 0x01E2,
+0x01E5 => 0x01E4,
+0x01E7 => 0x01E6,
+0x01E9 => 0x01E8,
+0x01EB => 0x01EA,
+0x01ED => 0x01EC,
+0x01EF => 0x01EE,
+0x01F3 => 0x01F2,
+0x01F5 => 0x01F4,
+0x01F9 => 0x01F8,
+0x01FB => 0x01FA,
+0x01FD => 0x01FC,
+0x01FF => 0x01FE,
+0x0201 => 0x0200,
+0x0203 => 0x0202,
+0x0205 => 0x0204,
+0x0207 => 0x0206,
+0x0209 => 0x0208,
+0x020B => 0x020A,
+0x020D => 0x020C,
+0x020F => 0x020E,
+0x0211 => 0x0210,
+0x0213 => 0x0212,
+0x0215 => 0x0214,
+0x0217 => 0x0216,
+0x0219 => 0x0218,
+0x021B => 0x021A,
+0x021D => 0x021C,
+0x021F => 0x021E,
+0x0223 => 0x0222,
+0x0225 => 0x0224,
+0x0227 => 0x0226,
+0x0229 => 0x0228,
+0x022B => 0x022A,
+0x022D => 0x022C,
+0x022F => 0x022E,
+0x0231 => 0x0230,
+0x0233 => 0x0232,
+0x0253 => 0x0181,
+0x0254 => 0x0186,
+0x0256 => 0x0189,
+0x0257 => 0x018A,
+0x0259 => 0x018F,
+0x025B => 0x0190,
+0x0260 => 0x0193,
+0x0263 => 0x0194,
+0x0268 => 0x0197,
+0x0269 => 0x0196,
+0x026F => 0x019C,
+0x0272 => 0x019D,
+0x0275 => 0x019F,
+0x0280 => 0x01A6,
+0x0283 => 0x01A9,
+0x0288 => 0x01AE,
+0x028A => 0x01B1,
+0x028B => 0x01B2,
+0x0292 => 0x01B7,
+0x03AC => 0x0386,
+0x03AD => 0x0388,
+0x03AE => 0x0389,
+0x03AF => 0x038A,
+0x03B1 => 0x0391,
+0x03B2 => 0x0392,
+0x03B3 => 0x0393,
+0x03B4 => 0x0394,
+0x03B5 => 0x0395,
+0x03B6 => 0x0396,
+0x03B7 => 0x0397,
+0x03B8 => 0x0398,
+0x03B9 => 0x0399,
+0x03BA => 0x039A,
+0x03BB => 0x039B,
+0x03BC => 0x039C,
+0x03BD => 0x039D,
+0x03BE => 0x039E,
+0x03BF => 0x039F,
+0x03C0 => 0x03A0,
+0x03C1 => 0x03A1,
+0x03C2 => 0x03A3,
+0x03C3 => 0x03A3,
+0x03C4 => 0x03A4,
+0x03C5 => 0x03A5,
+0x03C6 => 0x03A6,
+0x03C7 => 0x03A7,
+0x03C8 => 0x03A8,
+0x03C9 => 0x03A9,
+0x03CA => 0x03AA,
+0x03CB => 0x03AB,
+0x03CC => 0x038C,
+0x03CD => 0x038E,
+0x03CE => 0x038F,
+0x03D0 => 0x0392,
+0x03D1 => 0x0398,
+0x03D5 => 0x03A6,
+0x03D6 => 0x03A0,
+0x03D9 => 0x03D8,
+0x03DB => 0x03DA,
+0x03DD => 0x03DC,
+0x03DF => 0x03DE,
+0x03E1 => 0x03E0,
+0x03E3 => 0x03E2,
+0x03E5 => 0x03E4,
+0x03E7 => 0x03E6,
+0x03E9 => 0x03E8,
+0x03EB => 0x03EA,
+0x03ED => 0x03EC,
+0x03EF => 0x03EE,
+0x03F0 => 0x039A,
+0x03F1 => 0x03A1,
+0x03F2 => 0x03A3,
+0x03F5 => 0x0395,
+0x0430 => 0x0410,
+0x0431 => 0x0411,
+0x0432 => 0x0412,
+0x0433 => 0x0413,
+0x0434 => 0x0414,
+0x0435 => 0x0415,
+0x0436 => 0x0416,
+0x0437 => 0x0417,
+0x0438 => 0x0418,
+0x0439 => 0x0419,
+0x043A => 0x041A,
+0x043B => 0x041B,
+0x043C => 0x041C,
+0x043D => 0x041D,
+0x043E => 0x041E,
+0x043F => 0x041F,
+0x0440 => 0x0420,
+0x0441 => 0x0421,
+0x0442 => 0x0422,
+0x0443 => 0x0423,
+0x0444 => 0x0424,
+0x0445 => 0x0425,
+0x0446 => 0x0426,
+0x0447 => 0x0427,
+0x0448 => 0x0428,
+0x0449 => 0x0429,
+0x044A => 0x042A,
+0x044B => 0x042B,
+0x044C => 0x042C,
+0x044D => 0x042D,
+0x044E => 0x042E,
+0x044F => 0x042F,
+0x0450 => 0x0400,
+0x0451 => 0x0401,
+0x0452 => 0x0402,
+0x0453 => 0x0403,
+0x0454 => 0x0404,
+0x0455 => 0x0405,
+0x0456 => 0x0406,
+0x0457 => 0x0407,
+0x0458 => 0x0408,
+0x0459 => 0x0409,
+0x045A => 0x040A,
+0x045B => 0x040B,
+0x045C => 0x040C,
+0x045D => 0x040D,
+0x045E => 0x040E,
+0x045F => 0x040F,
+0x0461 => 0x0460,
+0x0463 => 0x0462,
+0x0465 => 0x0464,
+0x0467 => 0x0466,
+0x0469 => 0x0468,
+0x046B => 0x046A,
+0x046D => 0x046C,
+0x046F => 0x046E,
+0x0471 => 0x0470,
+0x0473 => 0x0472,
+0x0475 => 0x0474,
+0x0477 => 0x0476,
+0x0479 => 0x0478,
+0x047B => 0x047A,
+0x047D => 0x047C,
+0x047F => 0x047E,
+0x0481 => 0x0480,
+0x048B => 0x048A,
+0x048D => 0x048C,
+0x048F => 0x048E,
+0x0491 => 0x0490,
+0x0493 => 0x0492,
+0x0495 => 0x0494,
+0x0497 => 0x0496,
+0x0499 => 0x0498,
+0x049B => 0x049A,
+0x049D => 0x049C,
+0x049F => 0x049E,
+0x04A1 => 0x04A0,
+0x04A3 => 0x04A2,
+0x04A5 => 0x04A4,
+0x04A7 => 0x04A6,
+0x04A9 => 0x04A8,
+0x04AB => 0x04AA,
+0x04AD => 0x04AC,
+0x04AF => 0x04AE,
+0x04B1 => 0x04B0,
+0x04B3 => 0x04B2,
+0x04B5 => 0x04B4,
+0x04B7 => 0x04B6,
+0x04B9 => 0x04B8,
+0x04BB => 0x04BA,
+0x04BD => 0x04BC,
+0x04BF => 0x04BE,
+0x04C2 => 0x04C1,
+0x04C4 => 0x04C3,
+0x04C6 => 0x04C5,
+0x04C8 => 0x04C7,
+0x04CA => 0x04C9,
+0x04CC => 0x04CB,
+0x04CE => 0x04CD,
+0x04D1 => 0x04D0,
+0x04D3 => 0x04D2,
+0x04D5 => 0x04D4,
+0x04D7 => 0x04D6,
+0x04D9 => 0x04D8,
+0x04DB => 0x04DA,
+0x04DD => 0x04DC,
+0x04DF => 0x04DE,
+0x04E1 => 0x04E0,
+0x04E3 => 0x04E2,
+0x04E5 => 0x04E4,
+0x04E7 => 0x04E6,
+0x04E9 => 0x04E8,
+0x04EB => 0x04EA,
+0x04ED => 0x04EC,
+0x04EF => 0x04EE,
+0x04F1 => 0x04F0,
+0x04F3 => 0x04F2,
+0x04F5 => 0x04F4,
+0x04F9 => 0x04F8,
+0x0501 => 0x0500,
+0x0503 => 0x0502,
+0x0505 => 0x0504,
+0x0507 => 0x0506,
+0x0509 => 0x0508,
+0x050B => 0x050A,
+0x050D => 0x050C,
+0x050F => 0x050E,
+0x0561 => 0x0531,
+0x0562 => 0x0532,
+0x0563 => 0x0533,
+0x0564 => 0x0534,
+0x0565 => 0x0535,
+0x0566 => 0x0536,
+0x0567 => 0x0537,
+0x0568 => 0x0538,
+0x0569 => 0x0539,
+0x056A => 0x053A,
+0x056B => 0x053B,
+0x056C => 0x053C,
+0x056D => 0x053D,
+0x056E => 0x053E,
+0x056F => 0x053F,
+0x0570 => 0x0540,
+0x0571 => 0x0541,
+0x0572 => 0x0542,
+0x0573 => 0x0543,
+0x0574 => 0x0544,
+0x0575 => 0x0545,
+0x0576 => 0x0546,
+0x0577 => 0x0547,
+0x0578 => 0x0548,
+0x0579 => 0x0549,
+0x057A => 0x054A,
+0x057B => 0x054B,
+0x057C => 0x054C,
+0x057D => 0x054D,
+0x057E => 0x054E,
+0x057F => 0x054F,
+0x0580 => 0x0550,
+0x0581 => 0x0551,
+0x0582 => 0x0552,
+0x0583 => 0x0553,
+0x0584 => 0x0554,
+0x0585 => 0x0555,
+0x0586 => 0x0556,
+0x1E01 => 0x1E00,
+0x1E03 => 0x1E02,
+0x1E05 => 0x1E04,
+0x1E07 => 0x1E06,
+0x1E09 => 0x1E08,
+0x1E0B => 0x1E0A,
+0x1E0D => 0x1E0C,
+0x1E0F => 0x1E0E,
+0x1E11 => 0x1E10,
+0x1E13 => 0x1E12,
+0x1E15 => 0x1E14,
+0x1E17 => 0x1E16,
+0x1E19 => 0x1E18,
+0x1E1B => 0x1E1A,
+0x1E1D => 0x1E1C,
+0x1E1F => 0x1E1E,
+0x1E21 => 0x1E20,
+0x1E23 => 0x1E22,
+0x1E25 => 0x1E24,
+0x1E27 => 0x1E26,
+0x1E29 => 0x1E28,
+0x1E2B => 0x1E2A,
+0x1E2D => 0x1E2C,
+0x1E2F => 0x1E2E,
+0x1E31 => 0x1E30,
+0x1E33 => 0x1E32,
+0x1E35 => 0x1E34,
+0x1E37 => 0x1E36,
+0x1E39 => 0x1E38,
+0x1E3B => 0x1E3A,
+0x1E3D => 0x1E3C,
+0x1E3F => 0x1E3E,
+0x1E41 => 0x1E40,
+0x1E43 => 0x1E42,
+0x1E45 => 0x1E44,
+0x1E47 => 0x1E46,
+0x1E49 => 0x1E48,
+0x1E4B => 0x1E4A,
+0x1E4D => 0x1E4C,
+0x1E4F => 0x1E4E,
+0x1E51 => 0x1E50,
+0x1E53 => 0x1E52,
+0x1E55 => 0x1E54,
+0x1E57 => 0x1E56,
+0x1E59 => 0x1E58,
+0x1E5B => 0x1E5A,
+0x1E5D => 0x1E5C,
+0x1E5F => 0x1E5E,
+0x1E61 => 0x1E60,
+0x1E63 => 0x1E62,
+0x1E65 => 0x1E64,
+0x1E67 => 0x1E66,
+0x1E69 => 0x1E68,
+0x1E6B => 0x1E6A,
+0x1E6D => 0x1E6C,
+0x1E6F => 0x1E6E,
+0x1E71 => 0x1E70,
+0x1E73 => 0x1E72,
+0x1E75 => 0x1E74,
+0x1E77 => 0x1E76,
+0x1E79 => 0x1E78,
+0x1E7B => 0x1E7A,
+0x1E7D => 0x1E7C,
+0x1E7F => 0x1E7E,
+0x1E81 => 0x1E80,
+0x1E83 => 0x1E82,
+0x1E85 => 0x1E84,
+0x1E87 => 0x1E86,
+0x1E89 => 0x1E88,
+0x1E8B => 0x1E8A,
+0x1E8D => 0x1E8C,
+0x1E8F => 0x1E8E,
+0x1E91 => 0x1E90,
+0x1E93 => 0x1E92,
+0x1E95 => 0x1E94,
+0x1E9B => 0x1E60,
+0x1EA1 => 0x1EA0,
+0x1EA3 => 0x1EA2,
+0x1EA5 => 0x1EA4,
+0x1EA7 => 0x1EA6,
+0x1EA9 => 0x1EA8,
+0x1EAB => 0x1EAA,
+0x1EAD => 0x1EAC,
+0x1EAF => 0x1EAE,
+0x1EB1 => 0x1EB0,
+0x1EB3 => 0x1EB2,
+0x1EB5 => 0x1EB4,
+0x1EB7 => 0x1EB6,
+0x1EB9 => 0x1EB8,
+0x1EBB => 0x1EBA,
+0x1EBD => 0x1EBC,
+0x1EBF => 0x1EBE,
+0x1EC1 => 0x1EC0,
+0x1EC3 => 0x1EC2,
+0x1EC5 => 0x1EC4,
+0x1EC7 => 0x1EC6,
+0x1EC9 => 0x1EC8,
+0x1ECB => 0x1ECA,
+0x1ECD => 0x1ECC,
+0x1ECF => 0x1ECE,
+0x1ED1 => 0x1ED0,
+0x1ED3 => 0x1ED2,
+0x1ED5 => 0x1ED4,
+0x1ED7 => 0x1ED6,
+0x1ED9 => 0x1ED8,
+0x1EDB => 0x1EDA,
+0x1EDD => 0x1EDC,
+0x1EDF => 0x1EDE,
+0x1EE1 => 0x1EE0,
+0x1EE3 => 0x1EE2,
+0x1EE5 => 0x1EE4,
+0x1EE7 => 0x1EE6,
+0x1EE9 => 0x1EE8,
+0x1EEB => 0x1EEA,
+0x1EED => 0x1EEC,
+0x1EEF => 0x1EEE,
+0x1EF1 => 0x1EF0,
+0x1EF3 => 0x1EF2,
+0x1EF5 => 0x1EF4,
+0x1EF7 => 0x1EF6,
+0x1EF9 => 0x1EF8,
+0x1F00 => 0x1F08,
+0x1F01 => 0x1F09,
+0x1F02 => 0x1F0A,
+0x1F03 => 0x1F0B,
+0x1F04 => 0x1F0C,
+0x1F05 => 0x1F0D,
+0x1F06 => 0x1F0E,
+0x1F07 => 0x1F0F,
+0x1F10 => 0x1F18,
+0x1F11 => 0x1F19,
+0x1F12 => 0x1F1A,
+0x1F13 => 0x1F1B,
+0x1F14 => 0x1F1C,
+0x1F15 => 0x1F1D,
+0x1F20 => 0x1F28,
+0x1F21 => 0x1F29,
+0x1F22 => 0x1F2A,
+0x1F23 => 0x1F2B,
+0x1F24 => 0x1F2C,
+0x1F25 => 0x1F2D,
+0x1F26 => 0x1F2E,
+0x1F27 => 0x1F2F,
+0x1F30 => 0x1F38,
+0x1F31 => 0x1F39,
+0x1F32 => 0x1F3A,
+0x1F33 => 0x1F3B,
+0x1F34 => 0x1F3C,
+0x1F35 => 0x1F3D,
+0x1F36 => 0x1F3E,
+0x1F37 => 0x1F3F,
+0x1F40 => 0x1F48,
+0x1F41 => 0x1F49,
+0x1F42 => 0x1F4A,
+0x1F43 => 0x1F4B,
+0x1F44 => 0x1F4C,
+0x1F45 => 0x1F4D,
+0x1F51 => 0x1F59,
+0x1F53 => 0x1F5B,
+0x1F55 => 0x1F5D,
+0x1F57 => 0x1F5F,
+0x1F60 => 0x1F68,
+0x1F61 => 0x1F69,
+0x1F62 => 0x1F6A,
+0x1F63 => 0x1F6B,
+0x1F64 => 0x1F6C,
+0x1F65 => 0x1F6D,
+0x1F66 => 0x1F6E,
+0x1F67 => 0x1F6F,
+0x1F70 => 0x1FBA,
+0x1F71 => 0x1FBB,
+0x1F72 => 0x1FC8,
+0x1F73 => 0x1FC9,
+0x1F74 => 0x1FCA,
+0x1F75 => 0x1FCB,
+0x1F76 => 0x1FDA,
+0x1F77 => 0x1FDB,
+0x1F78 => 0x1FF8,
+0x1F79 => 0x1FF9,
+0x1F7A => 0x1FEA,
+0x1F7B => 0x1FEB,
+0x1F7C => 0x1FFA,
+0x1F7D => 0x1FFB,
+0x1F80 => 0x1F88,
+0x1F81 => 0x1F89,
+0x1F82 => 0x1F8A,
+0x1F83 => 0x1F8B,
+0x1F84 => 0x1F8C,
+0x1F85 => 0x1F8D,
+0x1F86 => 0x1F8E,
+0x1F87 => 0x1F8F,
+0x1F90 => 0x1F98,
+0x1F91 => 0x1F99,
+0x1F92 => 0x1F9A,
+0x1F93 => 0x1F9B,
+0x1F94 => 0x1F9C,
+0x1F95 => 0x1F9D,
+0x1F96 => 0x1F9E,
+0x1F97 => 0x1F9F,
+0x1FA0 => 0x1FA8,
+0x1FA1 => 0x1FA9,
+0x1FA2 => 0x1FAA,
+0x1FA3 => 0x1FAB,
+0x1FA4 => 0x1FAC,
+0x1FA5 => 0x1FAD,
+0x1FA6 => 0x1FAE,
+0x1FA7 => 0x1FAF,
+0x1FB0 => 0x1FB8,
+0x1FB1 => 0x1FB9,
+0x1FB3 => 0x1FBC,
+0x1FBE => 0x0399,
+0x1FC3 => 0x1FCC,
+0x1FD0 => 0x1FD8,
+0x1FD1 => 0x1FD9,
+0x1FE0 => 0x1FE8,
+0x1FE1 => 0x1FE9,
+0x1FE5 => 0x1FEC,
+0x1FF3 => 0x1FFC,
+0xFF41 => 0xFF21,
+0xFF42 => 0xFF22,
+0xFF43 => 0xFF23,
+0xFF44 => 0xFF24,
+0xFF45 => 0xFF25,
+0xFF46 => 0xFF26,
+0xFF47 => 0xFF27,
+0xFF48 => 0xFF28,
+0xFF49 => 0xFF29,
+0xFF4A => 0xFF2A,
+0xFF4B => 0xFF2B,
+0xFF4C => 0xFF2C,
+0xFF4D => 0xFF2D,
+0xFF4E => 0xFF2E,
+0xFF4F => 0xFF2F,
+0xFF50 => 0xFF30,
+0xFF51 => 0xFF31,
+0xFF52 => 0xFF32,
+0xFF53 => 0xFF33,
+0xFF54 => 0xFF34,
+0xFF55 => 0xFF35,
+0xFF56 => 0xFF36,
+0xFF57 => 0xFF37,
+0xFF58 => 0xFF38,
+0xFF59 => 0xFF39,
+0xFF5A => 0xFF3A);
+?>
diff --git a/utf8/nucleus/libs/mysql.php b/utf8/nucleus/libs/mysql.php
new file mode 100644 (file)
index 0000000..2b0d4dc
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: mysql.php,v 1.2 2006/07/20 08:01:52 kimitake Exp $
+ */
+/*
+ * if no mysql_* functions exist, define wrappers
+ */
+$MYSQL_CONN = 0;
+
+if (!function_exists('mysql_query'))
+{
+       if (!function_exists('mysqli_query') && function_exists('startUpError'))
+       {
+               startUpError(_NO_SUITABLE_MYSQL_LIBRARY);
+       }
+       
+       function mysql_query($query) 
+       {
+               global $MYSQL_CONN;
+               return mysqli_query($MYSQL_CONN, $query); 
+       }
+       
+       function mysql_fetch_object($res) 
+       { 
+               return mysqli_fetch_object($res);
+       }
+       
+       function mysql_fetch_array($res) 
+       { 
+               return mysqli_fetch_array($res);
+       }       
+       
+       function mysql_fetch_assoc($res) 
+       { 
+               return mysqli_fetch_assoc($res);
+       }       
+
+       function mysql_fetch_row($res) 
+       { 
+               return mysqli_fetch_row($res);
+       }       
+
+       function mysql_num_rows($res)
+       {
+               return mysqli_num_rows($res);
+       }
+       
+       function mysql_num_fields($res)
+       {
+               return mysqli_num_fields($res);
+       }
+       
+       function mysql_free_result($res)
+       {
+               return mysqli_free_result($res);
+       }
+       
+       function mysql_result($res, $row, $col) 
+       { 
+               if (($row != 0) || ($col != 0)) {
+                       trigger_error('not implemented', E_USER_ERROR);
+               }
+               
+               $row = mysqli_fetch_row($res);
+               return $row[$col];
+       }       
+       
+       function mysql_connect($host, $username, $pwd)
+       {
+               return mysqli_connect($host, $username, $pwd);
+       }
+       
+       function mysql_error()
+       {
+               global $MYSQL_CONN;
+               return mysqli_error($MYSQL_CONN);
+       }
+       
+       function mysql_select_db($db)
+       {
+               global $MYSQL_CONN;
+               return mysqli_select_db($MYSQL_CONN, $db);
+       }
+       
+       function mysql_close()
+       {
+               global $MYSQL_CONN;
+               return mysqli_close($MYSQL_CONN);
+       }
+       
+       function mysql_insert_id()
+       {
+               global $MYSQL_CONN;
+               return mysqli_insert_id($MYSQL_CONN);
+       }
+       
+       function mysql_affected_rows()
+       {
+               global $MYSQL_CONN;
+               return mysqli_affected_rows($MYSQL_CONN);
+       }
+}
+
+
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/showlist.php b/utf8/nucleus/libs/showlist.php
new file mode 100644 (file)
index 0000000..ff351f9
--- /dev/null
@@ -0,0 +1,674 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * Functions to create lists of things inside the admin are
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: showlist.php,v 1.7.2.3 2007/12/03 00:01:48 kmorimatsu Exp $
+ */
+
+
+// can take either an array of objects, or an SQL query
+function showlist($query, $type, $template) {
+
+       if (is_array($query)) {
+               if (sizeof($query) == 0)
+                       return 0;
+
+               call_user_func('listplug_' . $type, $template, 'HEAD');
+
+               foreach ($query as $currentObj) {
+                       $template['current'] = $currentObj;
+                       call_user_func('listplug_' . $type, $template, 'BODY');
+               }
+
+               call_user_func('listplug_' . $type, $template, 'FOOT');
+
+               return sizeof($query);
+
+       } else {
+               $res = sql_query($query);
+
+               // don't do anything if there are no results
+               $numrows = sql_num_rows($res);
+               if ($numrows == 0)
+                       return 0;
+
+               call_user_func('listplug_' . $type, $template, 'HEAD');
+
+               while($template['current'] = sql_fetch_object($res))
+                       call_user_func('listplug_' . $type, $template, 'BODY');
+
+               call_user_func('listplug_' . $type, $template, 'FOOT');
+
+               sql_free_result($res);
+
+               // return amount of results
+               return $numrows;
+       }
+}
+
+function listplug_select($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<select name="' . ifset($template['name']) . '" tabindex="' . ifset($template['tabindex']) . '" ' . ifset($template['javascript']) . '>';
+
+                       // add extra row if needed
+                       if (ifset($template['extra'])) {
+                               echo '<option value="', ifset($template['extraval']), '">', $template['extra'], '</option>';
+                       }
+
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<option value="' . htmlspecialchars($current->value) . '"';
+                       if ($template['selected'] == $current->value)
+                               echo ' selected="selected" ';
+                       if (isset($template['shorten']) && $template['shorten'] > 0) {
+                               echo ' title="'. htmlspecialchars($current->text).'"';
+                               $current->text = shorten($current->text, $template['shorten'], $template['shortenel']);
+                       }
+                       echo '>' . htmlspecialchars($current->text) . '</option>';
+                       break;
+               case 'FOOT':
+                       echo '</select>';
+                       break;
+       }
+}
+
+function listplug_table($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<table>";
+                       echo "<thead><tr>";
+                       // print head
+                       call_user_func("listplug_table_" . $template['content'] , $template, 'HEAD');
+                       echo "</tr></thead><tbody>";
+                       break;
+               case 'BODY':
+                       // print tabletype specific thingies
+                       echo "<tr onmouseover='focusRow(this);' onmouseout='blurRow(this);'>";
+                       call_user_func("listplug_table_" . $template['content'] , $template,  'BODY');
+                       echo "</tr>";
+                       break;
+               case 'FOOT':
+                       call_user_func("listplug_table_" . $template['content'] , $template,  'FOOT');
+                       echo "</tbody></table>";
+                       break;
+       }
+}
+
+function listplug_table_memberlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>' . _LIST_MEMBER_NAME . '</th><th>' . _LIST_MEMBER_RNAME . '</th><th>' . _LIST_MEMBER_URL . '</th><th>' . _LIST_MEMBER_ADMIN;
+                       help('superadmin');
+                       echo "</th><th>" . _LIST_MEMBER_LOGIN;
+                       help('canlogin');
+                       echo "</th><th colspan='2'>" . _LISTS_ACTIONS. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->mnumber,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo "<a href='mailto:", htmlspecialchars($current->memail), "' tabindex='".$template['tabindex']."'>", htmlspecialchars($current->mname), "</a>";
+                       echo '</label>';
+                       echo '</td>';
+                       echo '<td>', htmlspecialchars($current->mrealname), '</td>';
+                       echo "<td><a href='", htmlspecialchars($current->murl), "' tabindex='", $template['tabindex'] , "'>", htmlspecialchars($current->murl), "</a></td>";
+                       echo '<td>', ($current->madmin ? _YES : _NO),'</td>';
+                       echo '<td>', ($current->mcanlogin ? _YES : _NO), '</td>';
+                       echo "<td><a href='index.php?action=memberedit&amp;memberid=$current->mnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+                       echo "<td><a href='index.php?action=memberdelete&amp;memberid=$current->mnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+                       break;
+       }
+}
+
+function listplug_table_teamlist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LIST_MEMBER_NAME."</th><th>"._LIST_MEMBER_RNAME."</th><th>"._LIST_TEAM_ADMIN;
+                       help('teamadmin');
+                       echo "</th><th colspan='2'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->tmember,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo "<a href='mailto:", htmlspecialchars($current->memail), "' tabindex='".$template['tabindex']."'>", htmlspecialchars($current->mname), "</a>";
+                       echo '</label>';
+                       echo '</td>';
+                       echo '<td>', htmlspecialchars($current->mrealname), '</td>';
+                       echo '<td>', ($current->tadmin ? _YES : _NO) , '</td>';
+                       echo "<td><a href='index.php?action=teamdelete&amp;memberid=$current->tmember&amp;blogid=$current->tblog' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+
+                       $url = 'index.php?action=teamchangeadmin&memberid=' . intval($current->tmember) . '&blogid=' . intval($current->tblog);
+                       $url = $manager->addTicketToUrl($url);
+                       echo "<td><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LIST_TEAM_CHADMIN."</a></td>";
+                       break;
+       }
+}
+
+function listplug_table_pluginlist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LISTS_INFO.'</th><th>'._LISTS_DESC.'</th>';
+                       echo '<th style="white-space:nowrap">'._LISTS_ACTIONS.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       $plug =& $manager->getPlugin($current->pfile);
+                       if ($plug) {
+                               echo '<td>';
+                                       echo '<strong>' , htmlspecialchars($plug->getName()) , '</strong><br />';
+                                       echo _LIST_PLUGS_AUTHOR, ' ' , htmlspecialchars($plug->getAuthor()) , '<br />';
+                                       echo _LIST_PLUGS_VER, ' ' , htmlspecialchars($plug->getVersion()) , '<br />';
+                                       if ($plug->getURL())
+                                       echo '<a href="',htmlspecialchars($plug->getURL()),'" tabindex="'.$template['tabindex'].'">',_LIST_PLUGS_SITE,'</a><br />';
+//                                     echo '<a href="',htmlspecialchars($plug->getURL()),'" tabindex="'.$template['tabindex'].'">'.htmlspecialchars(shorten($plug->getURL(), 25, '...')),'</a><br />';
+                               echo '</td>';
+                               echo '<td>';
+                                       echo _LIST_PLUGS_DESC .'<br/>'. encode_desc($plug->getDescription());
+                                       if (sizeof($plug->getEventList()) > 0) {
+                                               echo '<br /><br />',_LIST_PLUGS_SUBS,'<br />',htmlspecialchars(implode($plug->getEventList(),', '));
+                                               // check the database to see if it is up-to-date and notice the user if not
+                                       }
+                                       if (!$plug->subscribtionListIsUptodate()) {
+                                               echo '<br /><br /><strong>',_LIST_PLUG_SUBS_NEEDUPDATE,'</strong>';
+                                       }
+                                       if (sizeof($plug->getPluginDep()) > 0) {
+                                               echo '<br /><br />',_LIST_PLUGS_DEP,'<br />',htmlspecialchars(implode($plug->getPluginDep(),', '));
+                                       }
+// <add by shizuki>
+                               // check dependency require
+                               $req = array();
+                               $res = sql_query('SELECT pfile FROM ' . sql_table('plugin'));
+                               while($o = sql_fetch_object($res)) {
+                                       $preq =& $manager->getPlugin($o->pfile);
+                                       if ($preq) {
+                                               $depList = $preq->getPluginDep();
+                                               foreach ($depList as $depName) {
+                                                       if ($current->pfile == $depName) {
+                                                               $req[] = $o->pfile;
+                                                       }
+                                               }
+                                       }
+                               }
+                               if (count($req) > 0) {
+                                       echo '<h4 class="plugin_dependreq_title">' . _LIST_PLUGS_DEPREQ . "</h4>\n";
+                                       echo '<p class="plugin_dependreq_text">';
+                                       echo htmlspecialchars(implode(', ', $req), ENT_QUOTES);
+                                       echo "</p>\n";
+                               }
+// </add by shizuki>
+                               echo '</td>';
+                       } else {
+                               echo '<td colspan="2">' . sprintf(_PLUGINFILE_COULDNT_BELOADED, htmlspecialchars($current->pfile, ENT_QUOTES)) . '</td>';
+                       }
+                       echo '<td>';
+
+                               $baseUrl = 'index.php?plugid=' . intval($current->pid) . '&action=';
+                               $url = $manager->addTicketToUrl($baseUrl . 'pluginup');
+                               echo "<a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_UP,"</a>";
+                               $url = $manager->addTicketToUrl($baseUrl . 'plugindown');
+                               echo "<br /><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_DOWN,"</a>";
+                               echo "<br /><a href='index.php?action=plugindelete&amp;plugid=$current->pid' tabindex='".$template['tabindex']."'>",_LIST_PLUGS_UNINSTALL,"</a>";
+                               if ($plug && ($plug->hasAdminArea() > 0))
+                                       echo "<br /><a href='".htmlspecialchars($plug->getAdminURL())."'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_ADMIN,"</a>";
+                               if ($plug && ($plug->supportsFeature('HelpPage') > 0))
+                                       echo "<br /><a href='index.php?action=pluginhelp&amp;plugid=$current->pid'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_HELP,"</a>";
+                               if (quickQuery('SELECT COUNT(*) AS result FROM '.sql_table('plugin_option_desc').' WHERE ocontext=\'global\' and opid='.$current->pid) > 0)
+                                       echo "<br /><a href='index.php?action=pluginoptions&amp;plugid=$current->pid'  tabindex='".$template['tabindex']."'>",_LIST_PLUGS_OPTIONS,"</a>";
+                       echo '</td>';
+                       break;
+       }
+}
+
+function listplug_table_plugoptionlist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LISTS_INFO.'</th><th>'._LISTS_VALUE.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+                       listplug_plugOptionRow($current);
+                       break;
+               case 'FOOT':
+                       ?>
+                       <tr>
+                               <th colspan="2"><?php echo _PLUGS_SAVE?></th>
+                       </tr><tr>
+                               <td><?php echo _PLUGS_SAVE?></td>
+                               <td><input type="submit" value="<?php echo _PLUGS_SAVE?>" /></td>
+                       </tr>
+                       <?php                   break;
+       }
+}
+
+function listplug_plugOptionRow($current) {
+       $varname = 'plugoption['.$current['oid'].']['.$current['contextid'].']';
+       // retreive the optionmeta
+       $meta = NucleusPlugin::getOptionMeta($current['typeinfo']);
+
+       // only if it is not a hidden option write the controls to the page
+       if (@$meta['access'] != 'hidden') {
+               echo '<td>',htmlspecialchars($current['description']?$current['description']:$current['name']),'</td>';
+               echo '<td>';
+               switch($current['type']) {
+                       case 'yesno':
+                               ADMIN::input_yesno($varname, $current['value'], 0, 'yes', 'no');
+                               break;
+                       case 'password':
+                               echo '<input type="password" size="40" maxlength="128" name="',htmlspecialchars($varname),'" value="',htmlspecialchars($current['value']),'" />';
+                               break;
+                       case 'select':
+                               echo '<select name="'.htmlspecialchars($varname).'">';
+                               $aOptions = NucleusPlugin::getOptionSelectValues($current['typeinfo']);
+                               $aOptions = explode('|', $aOptions);
+                               for ($i=0; $i<(count($aOptions)-1); $i+=2) {
+                                       echo '<option value="'.htmlspecialchars($aOptions[$i+1]).'"';
+                                       if ($aOptions[$i+1] == $current['value'])
+                                               echo ' selected="selected"';
+                                       echo '>'.htmlspecialchars($aOptions[$i]).'</option>';
+                               }
+                               echo '</select>';
+                               break;
+                       case 'textarea':
+                               //$meta = NucleusPlugin::getOptionMeta($current['typeinfo']);
+                               echo '<textarea class="pluginoption" cols="30" rows="5" name="',htmlspecialchars($varname),'"';
+                               if (@$meta['access'] == 'readonly') {
+                                       echo ' readonly="readonly"';
+                               }
+                               echo '>',htmlspecialchars($current['value']),'</textarea>';
+                               break;
+                       case 'text':
+                       default:
+                               //$meta = NucleusPlugin::getOptionMeta($current['typeinfo']);
+
+                               echo '<input type="text" size="40" maxlength="128" name="',htmlspecialchars($varname),'" value="',htmlspecialchars($current['value']),'"';
+                               if (@$meta['datatype'] == 'numerical') {
+                                       echo ' onkeyup="checkNumeric(this)" onblur="checkNumeric(this)"';
+                               }
+                               if (@$meta['access'] == 'readonly') {
+                                       echo ' readonly="readonly"';
+                               }
+                               echo ' />';
+               }
+               echo @$current['extra'];
+               echo '</td>';
+       }
+}
+
+function listplug_table_itemlist($template, $type) {
+       $cssclass = null;
+
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LIST_ITEM_INFO."</th><th>"._LIST_ITEM_CONTENT."</th><th style=\"white-space:nowrap\" colspan='1'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+                       $current->itime = strtotime($current->itime);   // string -> unix timestamp
+
+                       if ($current->idraft == 1)
+                               $cssclass = "class='draft'";
+
+                       // (can't use offset time since offsets might vary between blogs)
+                       if ($current->itime > $template['now'])
+                               $cssclass = "class='future'";
+                       
+                       $action = requestVar('action');
+                       
+                       echo '<td ' . $cssclass . ' style="white-space:nowrap;">';
+                       if ($action !== 'itemlist')
+                       echo _LIST_ITEM_BLOG . ' ', htmlspecialchars($current->bshortname) . '    <br />';
+                       echo _LIST_ITEM_CAT,' ', htmlspecialchars($current->cname) . '    <br />';
+                       if ($action !== 'browseownitems')
+                       echo _LIST_ITEM_AUTHOR, ' ', htmlspecialchars($current->mname) . '    <br />';
+                       echo date("Y-m-d",$current->itime) , " " . date("H:i",$current->itime);
+                       echo "</td>";
+                       echo "<td $cssclass>";
+
+                       $id = listplug_nextBatchId();
+
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->inumber,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo "<b>" . htmlspecialchars(strip_tags($current->ititle)) . "</b>";
+                       echo '</label>';
+                       echo "<br />";
+
+
+                       $current->ibody = strip_tags($current->ibody);
+                       $current->ibody = htmlspecialchars(shorten($current->ibody,200,'...'));
+
+                       $COMMENTS = new COMMENTS($current->inumber);
+                       echo "$current->ibody</td>";
+                       echo "<td  style=\"white-space:nowrap\" $cssclass>";
+                       echo "<a href='index.php?action=itemedit&amp;itemid={$current->inumber}'>" . _LISTS_EDIT . "</a>";
+                       echo " / <a href='index.php?action=itemmove&amp;itemid={$current->inumber}'>" . _LISTS_MOVE . "</a>";
+                       echo " / <a href='index.php?action=itemdelete&amp;itemid={$current->inumber}'>" . _LISTS_DELETE . "</a><br />";
+                       // evaluate amount of comments for the item
+                       $camount = $COMMENTS->amountComments();
+                       if ($camount>0)
+                       {
+                               echo "<a href='index.php?action=itemcommentlist&amp;itemid=$current->inumber'>";
+                               echo "( " . sprintf(_LIST_ITEM_COMMENTS, $COMMENTS->amountComments())." )</a>";
+                       }
+                       else
+                       {
+                               echo _LIST_ITEM_NOCONTENT;
+                       }
+                       echo "</td>";
+                       break;
+       }
+}
+
+// for batch operations: generates the index numbers for checkboxes
+function listplug_nextBatchId() {
+       static $id = 0;
+       return $id++;
+}
+
+function listplug_table_commentlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_INFO."</th><th>"._LIST_COMMENT."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+                       $current->ctime = strtotime($current->ctime);   // string -> unix timestamp
+
+                       echo '<td>';
+                       echo date("Y-m-d@H:i",$current->ctime);
+                       echo '<br />';
+                       if ($current->mname)
+                               echo htmlspecialchars($current->mname) ,' ', _LIST_COMMENTS_MEMBER;
+                       else
+                               echo htmlspecialchars($current->cuser);
+                       if ($current->cmail != '') {
+                                echo '<br />';
+                                echo htmlspecialchars($current->cmail);
+                        }
+                       if ($current->cemail != '') {
+                                echo '<br />';
+                                echo htmlspecialchars($current->cemail);
+                        }
+                       echo '</td>';
+
+                       $current->cbody = strip_tags($current->cbody);
+                       $current->cbody = htmlspecialchars(shorten($current->cbody, 300, '...'));
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->cnumber,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo $current->cbody;
+                       echo '</label>';
+                       echo '</td>';
+
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=commentedit&amp;commentid=$current->cnumber'>"._LISTS_EDIT."</a></td>";
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=commentdelete&amp;commentid=$current->cnumber'>"._LISTS_DELETE."</a></td>";
+                       if ($template['canAddBan'])
+                               echo "<td style=\"white-space:nowrap\"><a href='index.php?action=banlistnewfromitem&amp;itemid=$current->citem&amp;ip=", htmlspecialchars($current->cip), "' title='", htmlspecialchars($current->chost), "'>"._LIST_COMMENT_BANIP."</a></td>";
+                       break;
+       }
+}
+
+
+function listplug_table_bloglist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>" . _NAME . "</th><th colspan='7'>" ._LISTS_ACTIONS. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo "<td title='blogid:$current->bnumber shortname:$current->bshortname'><a href='$current->burl'><img src='images/globe.gif' width='13' height='13' alt='". _BLOGLIST_TT_VISIT."' /></a> " . htmlspecialchars($current->bname) . "</td>";
+                       echo "<td><a href='index.php?action=createitem&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_ADD ."'>" . _BLOGLIST_ADD . "</a></td>";
+                       echo "<td><a href='index.php?action=itemlist&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_EDIT."'>". _BLOGLIST_EDIT."</a></td>";
+                       echo "<td><a href='index.php?action=blogcommentlist&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_COMMENTS."'>". _BLOGLIST_COMMENTS."</a></td>";
+                       echo "<td><a href='index.php?action=bookmarklet&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_BMLET."'>". _BLOGLIST_BMLET . "</a></td>";
+
+                       if ($current->tadmin == 1) {
+                               echo "<td><a href='index.php?action=blogsettings&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_SETTINGS . "'>" ._BLOGLIST_SETTINGS. "</a></td>";
+                               echo "<td><a href='index.php?action=banlist&amp;blogid=$current->bnumber' title='" . _BLOGLIST_TT_BANS. "'>". _BLOGLIST_BANS."</a></td>";
+                       }
+
+                       if ($template['superadmin']) {
+                               echo "<td><a href='index.php?action=deleteblog&amp;blogid=$current->bnumber' title='". _BLOGLIST_TT_DELETE."'>" ._BLOGLIST_DELETE. "</a></td>";
+                       }
+
+
+
+                       break;
+       }
+}
+
+function listplug_table_shortblognames($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>" . _EBLOG_SHORTNAME . "</th><th>" . _EBLOG_NAME. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->bshortname) , '</td>';
+                       echo '<td>' , htmlspecialchars($current->bname) , '</td>';
+
+                       break;
+       }
+}
+
+function listplug_table_shortnames($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>" . _NAME . "</th><th>" . _LISTS_DESC. "</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->name) , '</td>';
+                       echo '<td>' , htmlspecialchars($current->description) , '</td>';
+
+                       break;
+       }
+}
+
+
+function listplug_table_categorylist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='2'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+                       $id = listplug_nextBatchId();
+                       echo '<input type="checkbox" id="batch',$id,'" name="batch[',$id,']" value="',$current->catid,'" />';
+                       echo '<label for="batch',$id,'">';
+                       echo htmlspecialchars($current->cname);
+                       echo '</label>';
+                       echo '</td>';
+
+                       echo '<td>', htmlspecialchars($current->cdesc), '</td>';
+                       echo "<td><a href='index.php?action=categorydelete&amp;blogid=$current->cblog&amp;catid=$current->catid' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+                       echo "<td><a href='index.php?action=categoryedit&amp;blogid=$current->cblog&amp;catid=$current->catid' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+
+                       break;
+       }
+}
+
+
+function listplug_table_templatelist($template, $type) {
+       global $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo "<td>" , htmlspecialchars($current->tdname), "</td>";
+                       echo "<td>" , htmlspecialchars($current->tddesc), "</td>";
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=templateedit&amp;templateid=$current->tdnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+
+                       $url = $manager->addTicketToUrl('index.php?action=templateclone&templateid=' . intval($current->tdnumber));
+                       echo "<td style=\"white-space:nowrap\"><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LISTS_CLONE."</a></td>";
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=templatedelete&amp;templateid=$current->tdnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+
+                       break;
+       }
+}
+
+function listplug_table_skinlist($template, $type) {
+       global $CONF, $DIR_SKINS, $manager;
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_NAME."</th><th>"._LISTS_DESC."</th><th colspan='3'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>';
+
+                       // use a special style for the default skin
+                       if ($current->sdnumber == $CONF['BaseSkin']) {
+                               echo '<strong>',htmlspecialchars($current->sdname),'</strong>';
+                       } else {
+                               echo htmlspecialchars($current->sdname);
+                       }
+
+                       echo '<br /><br />';
+                       echo _LISTS_TYPE ,': ' , htmlspecialchars($current->sdtype);
+                       echo '<br />', _LIST_SKINS_INCMODE , ' ' , (($current->sdincmode=='skindir') ?_PARSER_INCMODE_SKINDIR:_PARSER_INCMODE_NORMAL);
+                       if ($current->sdincpref) echo '<br />' , _LIST_SKINS_INCPREFIX , ' ', htmlspecialchars($current->sdincpref);
+
+                       // add preview image when present
+                       if ($current->sdincpref && @file_exists($DIR_SKINS . $current->sdincpref . 'preview.png'))
+                       {
+                               echo '<br /><br />';
+
+                               $hasEnlargement = @file_exists($DIR_SKINS . $current->sdincpref . 'preview-large.png');
+                               if ($hasEnlargement)
+                                       echo '<a href="',$CONF['SkinsURL'], htmlspecialchars($current->sdincpref),'preview-large.png" title="' . _LIST_SKIN_PREVIEW_VIEWLARGER . '">';
+
+                               $imgAlt = sprintf(_LIST_SKIN_PREVIEW, htmlspecialchars($current->sdname, ENT_QUOTES));
+                               echo '<img class="skinpreview" src="',$CONF['SkinsURL'], htmlspecialchars($current->sdincpref),'preview.png" width="100" height="75" alt="' . $imgAlt . '" />';
+
+                               if ($hasEnlargement)
+                                       echo '</a>';
+
+                               if (@file_exists($DIR_SKINS . $current->sdincpref . 'readme.html'))
+                               {
+                                       $url         = $CONF['SkinsURL'] . htmlspecialchars($current->sdincpref, ENT_QUOTES) . 'readme.html';
+                                       $readmeTitle = sprintf(_LIST_SKIN_README, htmlspecialchars($current->sdname, ENT_QUOTES));
+                                       echo '<br /><a href="' . $url . '" title="' . $readmeTitle . '">' . _LIST_SKIN_README_TXT . '</a>';
+                               }
+
+
+                       }
+
+                       echo "</td>";
+
+
+                       echo '<td class="availableSkinTypes">' . htmlspecialchars($current->sddesc);
+                               // show list of defined parts
+                               $r = sql_query('SELECT stype FROM '.sql_table('skin').' WHERE sdesc='.$current->sdnumber . ' ORDER BY stype');
+                               $types = array();
+                               while ($o = sql_fetch_object($r))
+                                       array_push($types,$o->stype);
+                               if (sizeof($types) > 0) {
+                                       $friendlyNames = SKIN::getFriendlyNames();
+                                       for ($i=0;$i<sizeof($types);$i++) {
+                                               $type = $types[$i];
+                                               if (in_array($type, array('index', 'item', 'archivelist', 'archive', 'search', 'error', 'member', 'imagepopup'))) {
+                                                       $types[$i] = '<li>' . helpHtml('skinpart'.$type) . ' <a href="index.php?action=skinedittype&amp;skinid='.$current->sdnumber.'&amp;type='.$type.'" tabindex="'.$template['tabindex'].'">' . htmlspecialchars($friendlyNames[$type]) . "</a></li>";
+                                               } else {
+                                                       $types[$i] = '<li>' . helpHtml('skinpartspecial') . ' <a href="index.php?action=skinedittype&amp;skinid='.$current->sdnumber.'&amp;type='.$type.'" tabindex="'.$template['tabindex'].'">' . htmlspecialchars($friendlyNames[$type]) . "</a></li>";
+                                               }
+                                       }
+                                       echo '<br /><br />',_LIST_SKINS_DEFINED,' <ul>',implode($types,'') ,'</ul>';
+                               }
+                       echo "</td>";
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=skinedit&amp;skinid=$current->sdnumber' tabindex='".$template['tabindex']."'>"._LISTS_EDIT."</a></td>";
+
+                       $url = $manager->addTicketToUrl('index.php?action=skinclone&skinid=' . intval($current->sdnumber));
+                       echo "<td style=\"white-space:nowrap\"><a href='",htmlspecialchars($url),"' tabindex='".$template['tabindex']."'>"._LISTS_CLONE."</a></td>";
+                       echo "<td style=\"white-space:nowrap\"><a href='index.php?action=skindelete&amp;skinid=$current->sdnumber' tabindex='".$template['tabindex']."'>"._LISTS_DELETE."</a></td>";
+
+                       break;
+       }
+}
+
+function listplug_table_draftlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo "<th>"._LISTS_BLOG."</th><th>"._LISTS_TITLE."</th><th colspan='2'>"._LISTS_ACTIONS."</th>";
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>', htmlspecialchars($current->bshortname) , '</td>';
+                       echo '<td>', htmlspecialchars(strip_tags($current->ititle)) , '</td>';
+                       echo "<td><a href='index.php?action=itemedit&amp;itemid=$current->inumber'>"._LISTS_EDIT."</a></td>";
+                       echo "<td><a href='index.php?action=itemdelete&amp;itemid=$current->inumber'>"._LISTS_DELETE."</a></td>";
+
+                       break;
+       }
+}
+
+
+function listplug_table_actionlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LISTS_TIME.'</th><th>'._LIST_ACTION_MSG.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->timestamp), '</td>';
+                       echo '<td>' , htmlspecialchars($current->message), '</td>';
+
+                       break;
+       }
+}
+
+function listplug_table_banlist($template, $type) {
+       switch($type) {
+               case 'HEAD':
+                       echo '<th>'._LIST_BAN_IPRANGE.'</th><th>'. _LIST_BAN_REASON.'</th><th>'._LISTS_ACTIONS.'</th>';
+                       break;
+               case 'BODY':
+                       $current = $template['current'];
+
+                       echo '<td>' , htmlspecialchars($current->iprange) , '</td>';
+                       echo '<td>' , htmlspecialchars($current->reason) , '</td>';
+                       echo "<td><a href='index.php?action=banlistdelete&amp;blogid=", intval($current->blogid) , "&amp;iprange=" , htmlspecialchars($current->iprange) , "'>",_LISTS_DELETE,"</a></td>";
+                       break;
+       }
+}
+
+?>
diff --git a/utf8/nucleus/libs/skinie.php b/utf8/nucleus/libs/skinie.php
new file mode 100755 (executable)
index 0000000..227c309
--- /dev/null
@@ -0,0 +1,683 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ *     This class contains two classes that can be used for importing and
+ *     exporting Nucleus skins: SKINIMPORT and SKINEXPORT
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: skinie.php,v 1.9.2.1 2007/09/05 07:46:30 kimitake Exp $
+ */
+
+class SKINIMPORT {
+
+       // hardcoded value (see constructor). When 1, interesting info about the
+       // parsing process is sent to the output
+       var $debug;
+
+       // parser/file pointer
+       var $parser;
+       var $fp;
+
+       // which data has been read?
+       var $metaDataRead;
+       var $allRead;
+
+       // extracted data
+       var $skins;
+       var $templates;
+       var $info;
+
+       // to maintain track of where we are inside the XML file
+       var $inXml;
+       var $inData;
+       var $inMeta;
+       var $inSkin;
+       var $inTemplate;
+       var $currentName;
+       var $currentPartName;
+       var $cdata;
+
+
+
+       /**
+        * constructor initializes data structures
+        */
+       function SKINIMPORT() {
+               // disable magic_quotes_runtime if it's turned on
+               set_magic_quotes_runtime(0);
+
+               // debugging mode?
+               $this->debug = 0;
+
+               $this->reset();
+
+       }
+
+       function reset() {
+               if ($this->parser)
+                       xml_parser_free($this->parser);
+
+               // XML file pointer
+               $this->fp = 0;
+
+               // which data has been read?
+               $this->metaDataRead = 0;
+               $this->allRead = 0;
+
+               // to maintain track of where we are inside the XML file
+               $this->inXml = 0;
+               $this->inData = 0;
+               $this->inMeta = 0;
+               $this->inSkin = 0;
+               $this->inTemplate = 0;
+               $this->currentName = '';
+               $this->currentPartName = '';
+
+               // character data pile
+               $this->cdata = '';
+
+               // list of skinnames and templatenames (will be array of array)
+               $this->skins = array();
+               $this->templates = array();
+
+               // extra info included in the XML files (e.g. installation notes)
+               $this->info = '';
+
+               // init XML parser
+               $this->parser = xml_parser_create();
+               xml_set_object($this->parser, $this);
+               xml_set_element_handler($this->parser, 'startElement', 'endElement');
+               xml_set_character_data_handler($this->parser, 'characterData');
+               xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
+
+       }
+
+       /**
+        * Reads an XML file into memory
+        *
+        * @param $filename
+        *              Which file to read
+        * @param $metaOnly
+        *              Set to 1 when only the metadata needs to be read (optional, default 0)
+        */
+       function readFile($filename, $metaOnly = 0) {
+               // open file
+               $this->fp = @fopen($filename, 'r');
+               if (!$this->fp) {
+                       return _SKINIE_ERROR_FAILEDOPEN_FILEURL;
+               }
+
+               // here we go!
+               $this->inXml = 1;
+
+               $tempbuffer = null;
+
+               while (!feof($this->fp)) {
+                       $tempbuffer .= fread($this->fp, 4096);
+               }
+               fclose($this->fp);
+
+/*
+       [2004-08-04] dekarma - Took this out since it messes up good XML if it has skins/templates
+                                                  with CDATA sections. need to investigate consequences.
+                                                  see bug [ 999914 ] Import fails (multiple skins in XML/one of them with CDATA)
+
+               // backwards compatibility with the non-wellformed skinbackup.xml files
+               // generated by v2/v3 (when CDATA sections were present in skins)
+               // split up those CDATA sections into multiple ones
+               $tempbuffer = preg_replace_callback(
+                       "/(<!\[CDATA\[[^]]*?<!\[CDATA\[[^]]*)((?:\]\].*?<!\[CDATA.*?)*)(\]\])(.*\]\])/ms",
+                       create_function(
+                               '$matches',
+                               'return $matches[1] . preg_replace("/(\]\])(.*?<!\[CDATA)/ms","]]]]><![CDATA[$2",$matches[2])."]]]]><![CDATA[".$matches[4];'
+                       ),
+                       $tempbuffer
+               );
+*/
+               $temp = tmpfile();
+//             fwrite($temp, $tempbuffer);
+               if (!function_exists('mb_convert_encoding')) {
+                       fwrite($temp, $tempbuffer);
+               } else {
+                       if (strtoupper(_CHARSET) == 'ISO-8859-1') {
+                               fwrite($temp, $tempbuffer);
+                       } else {
+                               mb_detect_order("ASCII, JIS, SJIS, UTF-8, EUC-JP, ISO-8859-1");
+                               $temp_encode = mb_detect_encoding($tempbuffer);
+                               fwrite($temp, mb_convert_encoding($tempbuffer, 'UTF-8', $temp_encode));
+                       }
+               }
+               rewind($temp);
+
+               while ( ($buffer = fread($temp, 4096) ) && (!$metaOnly || ($metaOnly && !$this->metaDataRead))) {
+                       $err = xml_parse( $this->parser, $buffer, feof($temp) );
+                       if (!$err && $this->debug) {
+                               echo _ERROR . ': ' . xml_error_string(xml_get_error_code($this->parser)) . '<br />';
+                       }
+               }
+
+               // all done
+               $this->inXml = 0;
+               fclose($temp);
+       }
+
+       /**
+        * Returns the list of skin names
+        */
+       function getSkinNames() {
+               return array_keys($this->skins);
+       }
+
+       /**
+        * Returns the list of template names
+        */
+       function getTemplateNames() {
+               return array_keys($this->templates);
+       }
+
+       /**
+        * Returns the extra information included in the XML file
+        */
+       function getInfo() {
+               return $this->info;
+       }
+
+       /**
+        * Writes the skins and templates to the database
+        *
+        * @param $allowOverwrite
+        *              set to 1 when allowed to overwrite existing skins with the same name
+        *              (default = 0)
+        */
+       function writeToDatabase($allowOverwrite = 0) {
+               $existingSkins = $this->checkSkinNameClashes();
+               $existingTemplates = $this->checkTemplateNameClashes();
+
+               // if not allowed to overwrite, check if any nameclashes exists
+               if (!$allowOverwrite) {
+                       if ((sizeof($existingSkins) > 0) || (sizeof($existingTemplates) > 0)) {
+                               return _SKINIE_NAME_CLASHES_DETECTED;
+                       }
+               }
+
+               foreach ($this->skins as $skinName => $data) {
+                       // 1. if exists: delete all part data, update desc data
+                       //    if not exists: create desc
+                       if (in_array($skinName, $existingSkins)) {
+                               $skinObj = SKIN::createFromName($skinName);
+
+                               // delete all parts of the skin
+                               $skinObj->deleteAllParts();
+
+                               // update general info
+                               $skinObj->updateGeneralInfo(
+                                       $skinName,
+                                       $data['description'],
+                                       $data['type'],
+                                       $data['includeMode'],
+                                       $data['includePrefix']
+                               );
+                       } else {
+                               $skinid = SKIN::createNew(
+                                       $skinName,
+                                       $data['description'],
+                                       $data['type'],
+                                       $data['includeMode'],
+                                       $data['includePrefix']
+                               );
+                               $skinObj = new SKIN($skinid);
+                       }
+
+                       // 2. add parts
+                       foreach ($data['parts'] as $partName => $partContent) {
+                               $skinObj->update($partName, $partContent);
+                       }
+               }
+
+               foreach ($this->templates as $templateName => $data) {
+                       // 1. if exists: delete all part data, update desc data
+                       //    if not exists: create desc
+                       if (in_array($templateName, $existingTemplates)) {
+                               $templateObj = TEMPLATE::createFromName($templateName);
+
+                               // delete all parts of the template
+                               $templateObj->deleteAllParts();
+
+                               // update general info
+                               $templateObj->updateGeneralInfo($templateName, $data['description']);
+                       } else {
+                               $templateid = TEMPLATE::createNew($templateName, $data['description']);
+                               $templateObj = new TEMPLATE($templateid);
+                       }
+
+                       // 2. add parts
+                       foreach ($data['parts'] as $partName => $partContent) {
+                               $templateObj->update($partName, $partContent);
+                       }
+               }
+
+
+       }
+
+       /**
+         * returns an array of all the skin nameclashes (empty array when no name clashes)
+         */
+       function checkSkinNameClashes() {
+               $clashes = array();
+
+               foreach ($this->skins as $skinName => $data) {
+                       if (SKIN::exists($skinName)) {
+                               array_push($clashes, $skinName);
+                       }
+               }
+
+               return $clashes;
+       }
+
+       /**
+         * returns an array of all the template nameclashes
+         * (empty array when no name clashes)
+         */
+       function checkTemplateNameClashes() {
+               $clashes = array();
+
+               foreach ($this->templates as $templateName => $data) {
+                       if (TEMPLATE::exists($templateName)) {
+                               array_push($clashes, $templateName);
+                       }
+               }
+
+               return $clashes;
+       }
+
+       /**
+        * Called by XML parser for each new start element encountered
+        */
+       function startElement($parser, $name, $attrs) {
+               foreach($attrs as $key=>$value) {
+                       $attrs[$key] = htmlspecialchars($value, ENT_QUOTES);
+               }
+
+               if ($this->debug) {
+                       echo 'START: ' . htmlspecialchars($name, ENT_QUOTES) . '<br />';
+               }
+
+               switch ($name) {
+                       case 'nucleusskin':
+                               $this->inData = 1;
+                               break;
+                       case 'meta':
+                               $this->inMeta = 1;
+                               break;
+                       case 'info':
+                               // no action needed
+                               break;
+                       case 'skin':
+                               if (!$this->inMeta) {
+                                       $this->inSkin = 1;
+                                       $this->currentName = $attrs['name'];
+                                       $this->skins[$this->currentName]['type'] = $attrs['type'];
+                                       $this->skins[$this->currentName]['includeMode'] = $attrs['includeMode'];
+                                       $this->skins[$this->currentName]['includePrefix'] = $attrs['includePrefix'];
+                                       $this->skins[$this->currentName]['parts'] = array();
+                               } else {
+                                       $this->skins[$attrs['name']] = array();
+                                       $this->skins[$attrs['name']]['parts'] = array();
+                               }
+                               break;
+                       case 'template':
+                               if (!$this->inMeta) {
+                                       $this->inTemplate = 1;
+                                       $this->currentName = $attrs['name'];
+                                       $this->templates[$this->currentName]['parts'] = array();
+                               } else {
+                                       $this->templates[$attrs['name']] = array();
+                                       $this->templates[$attrs['name']]['parts'] = array();
+                               }
+                               break;
+                       case 'description':
+                               // no action needed
+                               break;
+                       case 'part':
+                               $this->currentPartName = $attrs['name'];
+                               break;
+                       default:
+                               echo _SKINIE_SEELEMENT_UNEXPECTEDTAG . htmlspecialchars($name, ENT_QUOTES) . '<br />';
+                               break;
+               }
+
+               // character data never contains other tags
+               $this->clearCharacterData();
+
+       }
+
+       /**
+         * Called by the XML parser for each closing tag encountered
+         */
+       function endElement($parser, $name) {
+               if ($this->debug) {
+                       echo 'END: ' . htmlspecialchars($name, ENT_QUOTES) . '<br />';
+               }
+
+               switch ($name) {
+                       case 'nucleusskin':
+                               $this->inData = 0;
+                               $this->allRead = 1;
+                               break;
+                       case 'meta':
+                               $this->inMeta = 0;
+                               $this->metaDataRead = 1;
+                               break;
+                       case 'info':
+                               $this->info = $this->getCharacterData();
+                       case 'skin':
+                               if (!$this->inMeta) {
+                                       $this->inSkin = 0;
+                               }
+                               break;
+                       case 'template':
+                               if (!$this->inMeta) {
+                                       $this->inTemplate = 0;
+                               }
+                               break;
+                       case 'description':
+                               if ($this->inSkin) {
+                                       $this->skins[$this->currentName]['description'] = $this->getCharacterData();
+                               } else {
+                                       $this->templates[$this->currentName]['description'] = $this->getCharacterData();
+                               }
+                               break;
+                       case 'part':
+                               if ($this->inSkin) {
+                                       $this->skins[$this->currentName]['parts'][$this->currentPartName] = $this->getCharacterData();
+                               } else {
+                                       $this->templates[$this->currentName]['parts'][$this->currentPartName] = $this->getCharacterData();
+                               }
+                               break;
+                       default:
+                               echo _SKINIE_SEELEMENT_UNEXPECTEDTAG . htmlspecialchars($name, ENT_QUOTES) . '<br />';
+                               break;
+               }
+               $this->clearCharacterData();
+
+       }
+
+       /**
+        * Called by XML parser for data inside elements
+        */
+       function characterData ($parser, $data) {
+               if ($this->debug) {
+                       echo 'NEW DATA: ' . htmlspecialchars($data, ENT_QUOTES) . '<br />';
+               }
+               $this->cdata .= $data;
+       }
+
+       /**
+        * Returns the data collected so far
+        */
+       function getCharacterData() {
+//             echo $this->cdata;
+               if ( (strtoupper(_CHARSET) == 'UTF-8')
+                       or (strtoupper(_CHARSET) == 'ISO-8859-1')
+                       or (!function_exists('mb_convert_encoding')) ) {
+                       return $this->cdata;
+               } else {
+                       return mb_convert_encoding($this->cdata, _CHARSET ,'UTF-8');
+               }
+       }
+
+       /**
+        * Clears the data buffer
+        */
+       function clearCharacterData() {
+               $this->cdata = '';
+       }
+
+       /**
+        * Static method that looks for importable XML files in subdirs of the given dir
+        */
+       function searchForCandidates($dir) {
+               $candidates = array();
+
+               $dirhandle = opendir($dir);
+               while ($filename = readdir($dirhandle)) {
+                       if (@is_dir($dir . $filename) && ($filename != '.') && ($filename != '..')) {
+                               $xml_file = $dir . $filename . '/skinbackup.xml';
+                               if (file_exists($xml_file) && is_readable($xml_file)) {
+                                       $candidates[$filename] = $filename; //$xml_file;
+                               }
+
+                               // backwards compatibility
+                               $xml_file = $dir . $filename . '/skindata.xml';
+                               if (file_exists($xml_file) && is_readable($xml_file)) {
+                                       $candidates[$filename] = $filename; //$xml_file;
+                               }
+                       }
+               }
+               closedir($dirhandle);
+
+               return $candidates;
+
+       }
+
+
+}
+
+
+class SKINEXPORT {
+
+       var $templates;
+       var $skins;
+       var $info;
+
+       /**
+        * Constructor initializes data structures
+        */
+       function SKINEXPORT() {
+               // list of templateIDs to export
+               $this->templates = array();
+
+               // list of skinIDs to export
+               $this->skins = array();
+
+               // extra info to be in XML file
+               $this->info = '';
+       }
+
+       /**
+        * Adds a template to be exported
+        *
+        * @param id
+        *              template ID
+        * @result false when no such ID exists
+        */
+       function addTemplate($id) {
+               if (!TEMPLATE::existsID($id)) {
+                       return 0;
+               }
+
+
+               $this->templates[$id] = TEMPLATE::getNameFromId($id);
+
+               return 1;
+       }
+
+       /**
+        * Adds a skin to be exported
+        *
+        * @param id
+        *              skin ID
+        * @result false when no such ID exists
+        */
+       function addSkin($id) {
+               if (!SKIN::existsID($id)) {
+                       return 0;
+               }
+
+               $this->skins[$id] = SKIN::getNameFromId($id);
+
+               return 1;
+       }
+
+       /**
+        * Sets the extra info to be included in the exported file
+        */
+       function setInfo($info) {
+               $this->info = $info;
+       }
+
+
+       /**
+        * Outputs the XML contents of the export file
+        *
+        * @param $setHeaders
+        *              set to 0 if you don't want to send out headers
+        *              (optional, default 1)
+        */
+       function export($setHeaders = 1) {
+               if ($setHeaders) {
+                       // make sure the mimetype is correct, and that the data does not show up
+                       // in the browser, but gets saved into and XML file (popup download window)
+                       header('Content-Type: text/xml');
+                       header('Content-Disposition: attachment; filename="skinbackup.xml"');
+                       header('Expires: 0');
+                       header('Pragma: no-cache');
+               }
+
+               echo "<nucleusskin>\n";
+
+               // meta
+               echo "\t<meta>\n";
+                       // skins
+                       foreach ($this->skins as $skinId => $skinName) {
+                               $skinName = htmlspecialchars($skinName, ENT_QUOTES);
+                               if (strtoupper(_CHARSET) != 'UTF-8') {
+                                       $skinName = mb_convert_encoding($skinName, 'UTF-8', _CHARSET);
+                               }
+                               echo "\t\t" . '<skin name="' . $skinName . '" />' . "\n";
+                       }
+                       // templates
+                       foreach ($this->templates as $templateId => $templateName) {
+                               $templateName = htmlspecialchars($templateName, ENT_QUOTES);
+                               if (strtoupper(_CHARSET) != 'UTF-8') {
+                                       $templateName = mb_convert_encoding($templateName, 'UTF-8', _CHARSET);
+                               }
+                               echo "\t\t" . '<template name="' . $templateName . '" />' . "\n";
+                       }
+                       // extra info
+                       if ($this->info) {
+                               if (strtoupper(_CHARSET) != 'UTF-8') {
+                                       $skin_info = mb_convert_encoding($this->info, 'UTF-8', _CHARSET);
+                               } else {
+                                       $skin_info = $this->info;
+                               }
+                               echo "\t\t<info><![CDATA[" . $skin_info . "]]></info>\n";
+                       }
+               echo "\t</meta>\n\n\n";
+
+               // contents skins
+               foreach ($this->skins as $skinId => $skinName) {
+                       $skinId   = intval($skinId);
+                       $skinObj  = new SKIN($skinId);
+                       $skinName = htmlspecialchars($skinName, ENT_QUOTES);
+                       $contentT = htmlspecialchars($skinObj->getContentType(), ENT_QUOTES);
+                       $incMode  = htmlspecialchars($skinObj->getIncludeMode(), ENT_QUOTES);
+                       $incPrefx = htmlspecialchars($skinObj->getIncludePrefix(), ENT_QUOTES);
+                       $skinDesc = htmlspecialchars($skinObj->getDescription(), ENT_QUOTES);
+                       if (strtoupper(_CHARSET) != 'UTF-8') {
+                               $skinName = mb_convert_encoding($skinName, 'UTF-8', _CHARSET);
+                               $contentT = mb_convert_encoding($contentT, 'UTF-8', _CHARSET);
+                               $incMode  = mb_convert_encoding($incMode,  'UTF-8', _CHARSET);
+                               $incPrefx = mb_convert_encoding($incPrefx, 'UTF-8', _CHARSET);
+                               $skinDesc = mb_convert_encoding($skinDesc, 'UTF-8', _CHARSET);
+                       }
+
+                       echo "\t" . '<skin name="' . $skinName . '" type="' . $contentT . '" includeMode="' . $incMode . '" includePrefix="' . $incPrefx . '">' . "\n";
+
+                       echo "\t\t" . '<description>' . $skinDesc . '</description>' . "\n";
+
+                       $que = 'SELECT'
+                                . '    stype,'
+                                . '    scontent '
+                                . 'FROM '
+                                .      sql_table('skin')
+                                . ' WHERE'
+                                . '    sdesc = ' . $skinId;
+                       $res = sql_query($que);
+                       while ($partObj = sql_fetch_object($res)) {
+                               $type  = htmlspecialchars($partObj->stype, ENT_QUOTES);
+                               $cdata = $this->escapeCDATA($partObj->scontent);
+                               if (strtoupper(_CHARSET) != 'UTF-8') {
+                                       $type  = mb_convert_encoding($type,  'UTF-8', _CHARSET);
+                                       $cdata = mb_convert_encoding($cdata, 'UTF-8', _CHARSET);
+                               }
+                               echo "\t\t" . '<part name="' . $type . '">';
+                               echo '<![CDATA[' . $cdata . ']]>';
+                               echo "</part>\n\n";
+                       }
+
+                       echo "\t</skin>\n\n\n";
+               }
+
+               // contents templates
+               foreach ($this->templates as $templateId => $templateName) {
+                       $templateId   = intval($templateId);
+                       $templateName = htmlspecialchars($templateName, ENT_QUOTES);
+                       $templateDesc = htmlspecialchars(TEMPLATE::getDesc($templateId), ENT_QUOTES);
+                       if (strtoupper(_CHARSET) != 'UTF-8') {
+                               $templateName = mb_convert_encoding($templateName, 'UTF-8', _CHARSET);
+                               $templateDesc = mb_convert_encoding($templateDesc, 'UTF-8', _CHARSET);
+                       }
+
+                       echo "\t" . '<template name="' . $templateName . '">' . "\n";
+
+                       echo "\t\t" . '<description>' . $templateDesc . "</description>\n";
+
+                       $que =  'SELECT'
+                                .     ' tpartname,'
+                                .     ' tcontent'
+                                . ' FROM '
+                                .     sql_table('template')
+                                . ' WHERE'
+                                .     ' tdesc = ' . $templateId;
+                       $res = sql_query($que);
+                       while ($partObj = sql_fetch_object($res)) {
+                               $type  = htmlspecialchars($partObj->tpartname, ENT_QUOTES);
+                               $cdata = $this->escapeCDATA($partObj->tcontent);
+                               if (strtoupper(_CHARSET) != 'UTF-8') {
+                                       $type  = mb_convert_encoding($type,  'UTF-8', _CHARSET);
+                                       $cdata = mb_convert_encoding($cdata, 'UTF-8', _CHARSET);
+                               }
+                               echo "\t\t" . '<part name="' . $type . '">';
+                               echo '<![CDATA[' .  $cdata . ']]>';
+                               echo '</part>' . "\n\n";
+                       }
+
+                       echo "\t</template>\n\n\n";
+               }
+
+               echo '</nucleusskin>';
+       }
+
+       /**
+        * Escapes CDATA content so it can be included in another CDATA section
+        */
+       function escapeCDATA($cdata)
+       {
+               return preg_replace('/]]>/', ']]]]><![CDATA[>', $cdata);
+
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/sql/mysql.php b/utf8/nucleus/libs/sql/mysql.php
new file mode 100755 (executable)
index 0000000..bd29881
--- /dev/null
@@ -0,0 +1,339 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ */
+/*
+ * complete sql_* wrappers for mysql functions
+ *
+ * functions moved from globalfunctions.php: sql_connect, sql_disconnect, sql_query
+ */
+
+
+$MYSQL_CONN = 0;
+
+if (function_exists('mysql_query') && !function_exists('sql_fetch_assoc'))
+{
+    /**
+     *Errors before the database connection has been made
+     */
+    function startUpError($msg, $title) {
+        ?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head><title><?php echo htmlspecialchars($title)?></title></head>
+    <body>
+        <h1><?php echo htmlspecialchars($title)?></h1>
+        <?php echo $msg?>
+    </body>
+</html>
+<?php
+        exit;
+    }
+
+    /**
+      * Connects to mysql server with arguments
+      */
+    function sql_connect_args($mysql_host = 'localhost', $mysql_user = '', $mysql_password = '', $mysql_database = '') {
+        
+        $CONN = @mysql_connect($mysql_host, $mysql_user, $mysql_password);
+        if ($mysql_database) mysql_select_db($mysql_database,$CONN);
+
+        return $CONN;
+    }
+    
+    /**
+      * Connects to mysql server
+      */
+    function sql_connect() {
+        global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN;
+
+        $MYSQL_CONN = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD) or startUpError('<p>Could not connect to MySQL database.</p>', 'Connect Error');
+        mysql_select_db($MYSQL_DATABASE) or startUpError('<p>Could not select database: ' . mysql_error() . '</p>', 'Connect Error');
+
+// <add for garble measure>
+        $resource = sql_query("show variables LIKE 'character_set_database'");
+        $fetchDat = sql_fetch_assoc($resource);
+        $charset  = $fetchDat['Value'];
+        $mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info($MYSQL_CONN))));
+        if ($mySqlVer >= '5.0.7' && phpversion() >= '5.2.3') {
+            mysql_set_charset($charset);
+        } elseif ($mySqlVer >= '4.1.0') {
+            sql_query("SET CHARACTER SET " . $charset);
+        }
+// </add for garble measure>*/
+
+        return $MYSQL_CONN;
+    }
+
+    /**
+      * disconnects from SQL server
+      */
+    function sql_disconnect($conn = false) {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        @mysql_close($conn);
+    }
+    
+    function sql_close($conn = false) {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        @mysql_close($conn);
+    }
+    
+    /**
+      * executes an SQL query
+      */
+    function sql_query($query, $conn = false) {
+        global $SQLCount,$MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        $SQLCount++;
+        $res = mysql_query($query,$conn) or print("mySQL error with query $query: " . mysql_error($conn) . '<p />');
+        return $res;
+    }
+    
+    /**
+      * executes an SQL error
+      */
+    function sql_error($conn = false)
+    {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        return mysql_error($conn);
+    }
+    
+    /**
+      * executes an SQL db select
+      */
+    function sql_select_db($db,$conn = false)
+    {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        return mysql_select_db($db,$conn);
+    }
+    
+    /**
+      * executes an SQL real escape 
+      */
+    function sql_real_escape_string($val,$conn = false)
+    {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        return mysql_real_escape_string($val,$conn);
+    }
+    
+    /**
+      * executes an PDO::quote() like escape, ie adds quotes arround the string and escapes chars as needed 
+      */
+    function sql_quote_string($val,$conn = false) {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        return "'".mysql_real_escape_string($val,$conn)."'";
+    }
+    
+    /**
+      * executes an SQL insert id
+      */
+    function sql_insert_id($conn = false)
+    {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        return mysql_insert_id($conn);
+    }
+    
+    /**
+      * executes an SQL result request
+      */
+    function sql_result($res, $row, $col)
+    {
+        return mysql_result($res,$row,$col);
+    }
+    
+    /**
+      * frees sql result resources
+      */
+    function sql_free_result($res)
+    {
+        return mysql_free_result($res);
+    }
+    
+    /**
+      * returns number of rows in SQL result
+      */
+    function sql_num_rows($res)
+    {
+        return mysql_num_rows($res);
+    }
+    
+    /**
+      * returns number of rows affected by SQL query
+      */
+    function sql_affected_rows($res)
+    {
+        return mysql_affected_rows($res);
+    }
+    
+    /**
+      * Get number of fields in result
+      */
+    function sql_num_fields($res)
+    {
+        return mysql_num_fields($res);
+    }
+    
+    /**
+      * fetches next row of SQL result as an associative array
+      */
+    function sql_fetch_assoc($res)
+    {
+        return mysql_fetch_assoc($res);
+    }
+    
+    /**
+      * Fetch a result row as an associative array, a numeric array, or both
+      */
+    function sql_fetch_array($res)
+    {
+        return mysql_fetch_array($res);
+    }
+    
+    /**
+      * fetches next row of SQL result as an object
+      */
+    function sql_fetch_object($res)
+    {
+        return mysql_fetch_object($res);
+    }
+    
+    /**
+      * Get a result row as an enumerated array
+      */
+    function sql_fetch_row($res)
+    {
+        return mysql_fetch_row($res);
+    }
+    
+    /**
+      * Get column information from a result and return as an object
+      */
+    function sql_fetch_field($res,$offset = 0)
+    {
+        return mysql_fetch_field($res,$offset);
+    }
+    
+    /**
+      * Get current system status (returns string)
+      */
+    function sql_stat($conn=false)
+    {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        return mysql_stat($conn);
+    }
+    
+    /**
+      * Returns the name of the character set
+      */
+    function sql_client_encoding($conn=false)
+    {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        return mysql_client_encoding($conn);
+    }
+    
+    /**
+      * Get SQL client version
+      */
+    function sql_get_client_info()
+    {
+        return mysql_get_client_info();
+    }
+    
+    /**
+      * Get SQL server version
+      */
+    function sql_get_server_info($conn=false)
+    {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        return mysql_get_server_info($conn);
+    }
+    
+    /**
+      * Returns a string describing the type of SQL connection in use for the connection or FALSE on failure
+      */
+    function sql_get_host_info($conn=false)
+    {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        return mysql_get_host_info($conn);
+    }
+    
+    /**
+      * Returns the SQL protocol on success, or FALSE on failure. 
+      */
+    function sql_get_proto_info($conn=false)
+    {
+        global $MYSQL_CONN;
+        if (!$conn) $conn = $MYSQL_CONN;
+        return mysql_get_proto_info($conn);
+    }
+
+    /**
+     * Get the name of the specified field in a result
+     */
+    function sql_field_name($res, $offset = 0)
+    {
+        return mysql_field_name($res, $offset);
+    }
+
+/**************************************************************************
+    Unimplemented mysql_* functions
+    
+# mysql_ data_ seek (maybe useful)
+# mysql_ errno (maybe useful)
+# mysql_ fetch_ lengths (maybe useful)
+# mysql_ field_ flags (maybe useful)
+# mysql_ field_ len (maybe useful)
+# mysql_ field_ name (maybe useful)
+# mysql_ field_ seek (maybe useful)
+# mysql_ field_ table (maybe useful)
+# mysql_ field_ type (maybe useful)
+# mysql_ info (maybe useful)
+# mysql_ list_ processes (maybe useful)
+# mysql_ ping (maybe useful)
+# mysql_ set_ charset (maybe useful, requires php >=5.2.3 and mysql >=5.0.7)
+# mysql_ thread_ id (maybe useful)
+
+# mysql_ db_ name (useful only if working on multiple dbs which we do not do)
+# mysql_ list_ dbs (useful only if working on multiple dbs which we do not do)
+
+# mysql_ pconnect (probably not useful and could cause some unintended performance issues)
+# mysql_ unbuffered_ query (possibly useful, but complicated and not supported by all database drivers (pdo))
+
+# mysql_ change_ user (deprecated)
+# mysql_ create_ db (deprecated)
+# mysql_ db_ query (deprecated)
+# mysql_ drop_ db (deprecated)
+# mysql_ escape_ string (deprecated)
+# mysql_ list_ fields (deprecated)
+# mysql_ list_ tables (deprecated)
+# mysql_ tablename (deprecated)
+
+*******************************************************************/
+
+
+}
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/sql/pdo.php b/utf8/nucleus/libs/sql/pdo.php
new file mode 100755 (executable)
index 0000000..69e3ca9
--- /dev/null
@@ -0,0 +1,586 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ */
+/*
+ * complete sql_* wrappers for mysql functions
+ *
+ * functions moved from globalfunctions.php: sql_connect, sql_disconnect, sql_query
+ */
+
+$MYSQL_CONN = 0;
+global $SQL_DBH;
+$SQL_DBH = NULL;
+
+if (!function_exists('sql_fetch_assoc'))
+{
+/**
+ * Errors before the database connection has been made
+ */
+       function startUpError($msg, $title) {
+               ?>
+               <html xmlns="http://www.w3.org/1999/xhtml">
+                       <head><title><?php echo htmlspecialchars($title)?></title></head>
+                       <body>
+                               <h1><?php echo htmlspecialchars($title)?></h1>
+                               <?php echo $msg?>
+                       </body>
+               </html>
+               <?php   exit;
+       }
+       
+/**
+ * Connects to mysql server
+ */
+       function sql_connect_args($mysql_host = 'localhost', $mysql_user = '', $mysql_password = '', $mysql_database = '') {
+               global $MYSQL_HANDLER;
+               
+               try {
+                       if (strpos($mysql_host,':') === false) {
+                               $host = $mysql_host;
+                               $port = '';
+                               $portnum = '';
+                       }
+                       else {
+                               list($host,$port) = explode(":",$mysql_host);
+                               if (isset($port)) {
+                                       $portnum = $port;
+                                       $port = ';port='.trim($port);
+                               }
+                               else {
+                                       $port = '';
+                                       $portnum = '';
+                               }
+                       }
+                       
+                       switch ($MYSQL_HANDLER[1]) {
+                               case 'sybase':
+                               case 'dblib':
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
+                                       else $port = '';
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);
+                               break;
+                               case 'mssql':
+                                       if (is_numeric($portnum)) $port = ','.intval($portnum);
+                                       else $port = '';
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);
+                               break;
+                               case 'oci':
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
+                                       else $port = '';
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$mysql_database, $mysql_user, $mysql_password);
+                               break;
+                               case 'odbc':
+                                       if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);
+                                       else $port = '';
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$mysql_database.';PROTOCOL=TCPIP;UID='.$mysql_user.';PWD='.$mysql_password);
+
+                               break;
+                               case 'pgsql':
+                                       if (is_numeric($portnum)) $port = ';port='.intval($portnum);
+                                       else $port = '';
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);
+                               break;
+                               case 'sqlite':
+                               case 'sqlite2':
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
+                                       else $port = '';
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':'.$mysql_database, $mysql_user, $mysql_password);
+                               break;
+                               default:
+                                       //mysql
+                                       $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);
+                               break;
+                       }
+       
+                       
+                                               
+               } catch (PDOException $e) {
+                       $DBH =NULL;
+                       startUpError('<p>a1 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');
+               }
+//echo '<hr />DBH: '.print_r($DBH,true).'<hr />';              
+               return $DBH;
+       }
+       
+/**
+ * Connects to mysql server
+ */
+       function sql_connect() {
+               global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN, $MYSQL_HANDLER, $SQL_DBH;
+               $SQL_DBH = NULL;
+               try {
+                       if (strpos($MYSQL_HOST,':') === false) {
+                               $host = $MYSQL_HOST;
+                               $port = '';
+                       }
+                       else {
+                               list($host,$port) = explode(":",$MYSQL_HOST);
+                               if (isset($port)) {
+                                       $portnum = $port;
+                                       $port = ';port='.trim($port);
+                               }
+                               else {
+                                       $port = '';
+                                       $portnum = '';
+                               }
+                       }
+                       
+                       switch ($MYSQL_HANDLER[1]) {
+                               case 'sybase':
+                               case 'dblib':
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
+                                       else $port = '';
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
+                               break;
+                               case 'mssql':
+                                       if (is_numeric($portnum)) $port = ','.intval($portnum);
+                                       else $port = '';
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
+                               break;
+                               case 'oci':
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
+                                       else $port = '';
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
+                               break;
+                               case 'odbc':
+                                       if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);
+                                       else $port = '';
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$MYSQL_DATABASE.';PROTOCOL=TCPIP;UID='.$MYSQL_USER.';PWD='.$MYSQL_PASSWORD);
+
+                               break;
+                               case 'pgsql':
+                                       if (is_numeric($portnum)) $port = ';port='.intval($portnum);
+                                       else $port = '';
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
+                               break;
+                               case 'sqlite':
+                               case 'sqlite2':
+                                       if (is_numeric($portnum)) $port = ':'.intval($portnum);
+                                       else $port = '';
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':'.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
+                               break;
+                               default:
+                                       //mysql
+                                       $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
+                               break;
+                       }
+
+                       //$SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);
+                       
+// <add for garble measure>
+                       if (strpos($MYSQL_HANDLER[1], 'mysql') === 0) {
+                               $resource = $SQL_DBH->query("show variables LIKE 'character_set_database'");
+                               $resource->bindColumn('Value', $charset);
+                               $resource->fetchAll();
+                               $SQL_DBH->exec("SET CHARACTER SET " . $charset);
+                       }
+// </add for garble measure>*/
+               } catch (PDOException $e) {
+                       $SQL_DBH = NULL;
+                       startUpError('<p>a2 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');
+               }
+//             echo '<hr />DBH: '.print_r($SQL_DBH,true).'<hr />';             
+               $MYSQL_CONN &= $SQL_DBH;
+               return $SQL_DBH;
+
+       }
+
+/**
+ * disconnects from SQL server
+ */
+       function sql_disconnect(&$dbh=NULL) {
+               global $SQL_DBH;
+               if (is_null($dbh)) $SQL_DBH = NULL;
+               else $dbh = NULL;
+       }
+       
+       function sql_close(&$dbh=NULL) {
+               global $SQL_DBH;
+               if (is_null($dbh)) $SQL_DBH = NULL;
+               else $dbh = NULL;
+       }
+       
+/**
+ * executes an SQL query
+ */
+       function sql_query($query,$dbh=NULL) {
+               global $SQLCount,$SQL_DBH;
+               $SQLCount++;
+//echo '<hr />SQL_DBH: ';
+//print_r($SQL_DBH);
+//echo '<hr />DBH: ';
+//print_r($dbh);
+//echo '<hr />';
+//echo $query.'<hr />';
+               if (is_null($dbh)) $res = $SQL_DBH->query($query);
+               else $res = $dbh->query($query);
+               if ($res->errorCode() != '00000') {
+                       $errors = $res->errorInfo();
+                       print("SQL error with query $query: " . $errors[0].'-'.$errors[1].' '.$errors[2] . '<p />');
+               }
+               
+               return $res;
+       }
+       
+/**
+ * executes an SQL error
+ */
+       function sql_error($dbh=NULL)
+       {
+               global $SQL_DBH;
+               if (is_null($dbh)) $error = $SQL_DBH->errorInfo();
+               else $error = $dbh->errorInfo();
+               if ($error[0] != '00000') {
+                       return $error[0].'-'.$error[1].' '.$error[2];
+               }
+               else return '';
+       }
+       
+/**
+ * executes an SQL db select
+ */
+       function sql_select_db($db,&$dbh=NULL)
+       {
+               global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN, $MYSQL_HANDLER, $SQL_DBH;
+//echo '<hr />'.print_r($dbh,true).'<hr />';
+//exit;
+               if (is_null($dbh)) { 
+                       try {
+                               $SQL_DBH = NULL;
+                               list($host,$port) = explode(":",$MYSQL_HOST);
+                               if (isset($port)) {
+                                       $portnum = $port;
+                                       $port = ';port='.trim($port);
+                               }
+                               else {
+                                       $port = '';
+                                       $portnum = '';
+                               }
+                               //$SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.trim($host).$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);
+                               //$SQL_DBH = sql_connect();
+                               switch ($MYSQL_HANDLER[1]) {
+                                       case 'sybase':
+                                       case 'dblib':
+                                               if (is_numeric($portnum)) $port = ':'.intval($portnum);
+                                               else $port = '';
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);
+                                       break;
+                                       case 'mssql':
+                                               if (is_numeric($portnum)) $port = ','.intval($portnum);
+                                               else $port = '';
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);
+                                       break;
+                                       case 'oci':
+                                               if (is_numeric($portnum)) $port = ':'.intval($portnum);
+                                               else $port = '';
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$db, $MYSQL_USER, $MYSQL_PASSWORD);
+                                       break;
+                                       case 'odbc':
+                                               if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);
+                                               else $port = '';
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$db.';PROTOCOL=TCPIP;UID='.$MYSQL_USER.';PWD='.$MYSQL_PASSWORD);
+
+                                       break;
+                                       case 'pgsql':
+                                               if (is_numeric($portnum)) $port = ';port='.intval($portnum);
+                                               else $port = '';
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);
+                                       break;
+                                       case 'sqlite':
+                                       case 'sqlite2':
+                                               if (is_numeric($portnum)) $port = ':'.intval($portnum);
+                                               else $port = '';
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':'.$db, $MYSQL_USER, $MYSQL_PASSWORD);
+                                       break;
+                                       default:
+                                               //mysql
+                                               $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);
+                                       break;
+                               }
+                               return 1;
+                       } catch (PDOException $e) {
+                               startUpError('<p>a3 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');
+                               return 0;
+                       }
+               }
+               else {
+                       if ($dbh->exec("USE $db") !== false) return 1;
+                       else return 0;
+               }
+       }
+       
+/**
+ * executes an SQL real escape 
+ */
+       function sql_real_escape_string($val,$dbh=NULL)
+       {
+               return addslashes($val);
+       }
+       
+/**
+ * executes an PDO::quote() like escape, ie adds quotes arround the string and escapes chars as needed 
+ */
+       function sql_quote_string($val,$dbh=NULL) {
+               global $SQL_DBH;
+               if (is_null($dbh))
+                       return $SQL_DBH->quote($val);
+               else
+                       return $dbh->quote($val);
+       }
+       
+/**
+ * executes an SQL insert id
+ */
+       function sql_insert_id($dbh=NULL)
+       {   
+               global $SQL_DBH;
+               if (is_null($dbh))
+                       return $SQL_DBH->lastInsertId();
+               else
+                       return $dbh->lastInsertId();
+       }
+       
+/**
+ * executes an SQL result request
+ */
+       function sql_result($res, $row = 0, $col = 0)
+       {
+               $results = array();
+               if (intval($row) < 1) {
+                       $results = $res->fetch(PDO::FETCH_BOTH);
+                       return $results[$col];
+               }
+               else {
+                       for ($i = 0; $i < intval($row); $i++) {
+                               $results = $res->fetch(PDO::FETCH_BOTH);
+                       }
+                       $results = $res->fetch(PDO::FETCH_BOTH);
+                       return $results[$col];
+               }
+       }
+       
+/**
+ * frees sql result resources
+ */
+       function sql_free_result($res)
+       {
+               $res = NULL;
+               return true;
+       }
+       
+/**
+ * returns number of rows in SQL result
+ */
+       function sql_num_rows($res)
+       {
+               return $res->rowCount();
+       }
+       
+/**
+ * returns number of rows affected by SQL query
+ */
+       function sql_affected_rows($res)
+       {
+               return $res->rowCount();
+       }
+       
+/**
+ * Get number of fields in result
+ */
+       function sql_num_fields($res)
+       {
+               return $res->columnCount();
+       }
+       
+/**
+ * fetches next row of SQL result as an associative array
+ */
+       function sql_fetch_assoc($res)
+       {
+               $results = array();
+               $results = $res->fetch(PDO::FETCH_ASSOC);   
+               return $results;
+       }
+       
+/**
+ * Fetch a result row as an associative array, a numeric array, or both
+ */
+       function sql_fetch_array($res)
+       {
+               $results = array();
+               $results = $res->fetch(PDO::FETCH_BOTH);
+               return $results;
+       }
+       
+/**
+ * fetches next row of SQL result as an object
+ */
+       function sql_fetch_object($res)
+       {
+               $results = NULL;
+               $results = $res->fetchObject(); 
+               return $results;
+       }
+       
+/**
+ * Get a result row as an enumerated array
+ */
+       function sql_fetch_row($res)
+       {
+               $results = array();
+               $results = $res->fetch(PDO::FETCH_NUM); 
+               return $results;
+       }
+       
+/**
+ * Get column information from a result and return as an object
+ */
+       function sql_fetch_field($res,$offset = 0)
+       {
+               $results = array();
+               $obj = NULL;
+               $results = $res->getColumnMeta($offset);
+               foreach($results as $key=>$value) {
+                       $obj->$key = $value;
+               }
+               return $obj;
+       }
+       
+/**
+ * Get current system status (returns string)
+ */
+       function sql_stat($dbh=NULL)
+       {
+               //not implemented
+               global $SQL_DBH;
+               if (is_null($dbh))
+                       return '';
+               else
+               return '';
+       }
+       
+/**
+ * Returns the name of the character set
+ */
+       function sql_client_encoding($dbh=NULL)
+       {
+               //not implemented
+               global $SQL_DBH;
+               if (is_null($dbh))
+                       return '';
+               else
+                       return '';
+       }
+       
+/**
+ * Get SQL client version
+ */
+       function sql_get_client_info()
+       {
+               global $SQL_DBH;
+               return $SQL_DBH->getAttribute(constant("PDO::ATTR_CLIENT_VERSION"));
+       }
+       
+/**
+ * Get SQL server version
+ */
+       function sql_get_server_info($dbh=NULL)
+       {
+               global $SQL_DBH;
+               if (is_null($dbh))
+                       return $SQL_DBH->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));
+               else
+                       return $dbh->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));
+       }
+       
+/**
+ * Returns a string describing the type of SQL connection in use for the connection or FALSE on failure
+ */
+       function sql_get_host_info($dbh=NULL)
+       {
+               global $SQL_DBH;
+               if (is_null($dbh))
+                       return $SQL_DBH->getAttribute(constant("PDO::ATTR_SERVER_INFO"));
+               else
+                       return $dbh->getAttribute(constant("PDO::ATTR_SERVER_INFO"));
+       }
+       
+/**
+ * Returns the SQL protocol on success, or FALSE on failure. 
+ */
+       function sql_get_proto_info($dbh=NULL)
+       {
+               //not implemented
+               global $SQL_DBH;
+               if (is_null($dbh))
+                       return false;
+               else
+                       return false;
+       }
+
+/**
+ * Get the name of the specified field in a result
+ */
+       function sql_field_name($res, $offset = 0)
+       {
+               $column = $res->getColumnMeta($offset);
+               if ($column) {
+                       return $column['name'];
+               }
+               return false;
+       }
+
+/**************************************************************************
+       Unimplemented mysql_* functions
+       
+# mysql_ data_ seek (maybe useful)
+# mysql_ errno (maybe useful)
+# mysql_ fetch_ lengths (maybe useful)
+# mysql_ field_ flags (maybe useful)
+# mysql_ field_ len (maybe useful)
+# mysql_ field_ name (maybe useful)
+# mysql_ field_ seek (maybe useful)
+# mysql_ field_ table (maybe useful)
+# mysql_ field_ type (maybe useful)
+# mysql_ info (maybe useful)
+# mysql_ list_ processes (maybe useful)
+# mysql_ ping (maybe useful)
+# mysql_ set_ charset (maybe useful, requires php >=5.2.3 and mysql >=5.0.7)
+# mysql_ thread_ id (maybe useful)
+
+# mysql_ db_ name (useful only if working on multiple dbs which we do not do)
+# mysql_ list_ dbs (useful only if working on multiple dbs which we do not do)
+
+# mysql_ pconnect (probably not useful and could cause some unintended performance issues)
+# mysql_ unbuffered_ query (possibly useful, but complicated and not supported by all database drivers (pdo))
+
+# mysql_ change_ user (deprecated)
+# mysql_ create_ db (deprecated)
+# mysql_ db_ query (deprecated)
+# mysql_ drop_ db (deprecated)
+# mysql_ escape_ string (deprecated)
+# mysql_ list_ fields (deprecated)
+# mysql_ list_ tables (deprecated)
+# mysql_ tablename (deprecated)
+
+*******************************************************************/
+
+
+}
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/vars4.0.6.php b/utf8/nucleus/libs/vars4.0.6.php
new file mode 100755 (executable)
index 0000000..85cffac
--- /dev/null
@@ -0,0 +1,154 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: vars4.0.6.php,v 1.10.2.1 2007/09/05 07:46:30 kimitake Exp $
+ */
+
+/**
+  * The purpose of the functions below is to avoid declaring HTTP_ vars to be global
+  * everywhere, plus to offer support for php versions before 4.1.0, that do not
+  * have the _GET etc vars
+  */
+function getVar($name) {
+       global $HTTP_GET_VARS;
+
+       if (!isset($HTTP_GET_VARS[$name])) {
+               return;
+       }
+
+       return undoMagic($HTTP_GET_VARS[$name]);
+}
+
+function postVar($name) {
+       global $HTTP_POST_VARS;
+
+       if (!isset($HTTP_POST_VARS[$name])) {
+               return;
+       }
+
+       return undoMagic($HTTP_POST_VARS[$name]);
+}
+
+function cookieVar($name) {
+       global $HTTP_COOKIE_VARS;
+
+       if (!isset($HTTP_COOKIE_VARS[$name])) {
+               return;
+       }
+
+       return undoMagic($HTTP_COOKIE_VARS[$name]);
+}
+
+// request: either POST or GET
+function requestVar($name) {
+       return (postVar($name)) ? postVar($name) : getVar($name);
+}
+
+function serverVar($name) {
+       global $HTTP_SERVER_VARS;
+
+       if (!isset($HTTP_SERVER_VARS[$name])) {
+               return;
+       }
+
+       return $HTTP_SERVER_VARS[$name];
+}
+
+// removes magic quotes if that option is enabled
+function undoMagic($data) {
+       if (!get_magic_quotes_gpc())
+               return $data;
+       if (ini_get('magic_quotes_sybase') != 1)
+               return stripslashes_array($data);
+       else
+               return undoSybaseQuotes_array($data);
+}
+
+function stripslashes_array($data) {
+       return is_array($data) ? array_map('stripslashes_array', $data) : stripslashes($data);
+}
+
+function undoSybaseQuotes_array($data) {
+       return is_array($data) ? array_map('undoSybaseQuotes', $data) : stripslashes($data);
+}
+
+function undoSybaseQuotes($data) {
+       return str_replace("''", "'", $data);
+}
+
+// integer array from request
+function requestIntArray($name) {
+       global $HTTP_POST_VARS;
+
+       if (!isset($HTTP_POST_VARS[$name])) {
+               return;
+       }
+
+       return $HTTP_POST_VARS[$name];
+}
+
+// array from request. Be sure to call undoMagic on the strings inside
+function requestArray($name) {
+       global $HTTP_POST_VARS;
+
+       if (!isset($HTTP_POST_VARS[$name])) {
+               return;
+       }
+
+       return $HTTP_POST_VARS[$name];
+}
+
+
+// add all the variables from the request as hidden input field
+// @see globalfunctions.php#passVar
+function passRequestVars() {
+       global $HTTP_POST_VARS, $HTTP_GET_VARS;
+       foreach ($HTTP_POST_VARS as $key => $value) {
+               if (($key == 'action') && ($value != requestVar('nextaction')))
+                       $key = 'nextaction';
+               // a nextaction of 'showlogin' makes no sense
+               if (($key == 'nextaction') && ($value == 'showlogin'))
+                       continue;
+               if (($key != 'login') && ($key != 'password'))
+                       passVar($key, $value);
+       }
+       foreach ($HTTP_GET_VARS as $key => $value) {
+               if (($key == 'action') && ($value != requestVar('nextaction')))
+                       $key = 'nextaction';
+               // a nextaction of 'showlogin' makes no sense
+               if (($key == 'nextaction') && ($value == 'showlogin'))
+                       continue;
+               if (($key != 'login') && ($key != 'password'))
+                       passVar($key, $value);
+       }
+}
+
+function postFileInfo($name) {
+       global $HTTP_POST_FILES;
+
+       if (!isset($HTTP_POST_FILES[$name])) {
+               return;
+       }
+
+       return $HTTP_POST_FILES[$name];
+}
+
+function setOldAction($value) {
+       global $HTTP_POST_VARS;
+       $HTTP_POST_VARS['oldaction'] = $value;
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/vars4.1.0.php b/utf8/nucleus/libs/vars4.1.0.php
new file mode 100755 (executable)
index 0000000..f8d2aa9
--- /dev/null
@@ -0,0 +1,142 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: vars4.1.0.php,v 1.10.2.2 2007/10/30 19:01:33 kmorimatsu Exp $
+ */
+
+
+// Remove $_COOKIE keys in $_REQUEST
+// This is for maintaining the compatibility with PHP 4.0.6
+// and also for avoiding bugs of plugins due to cookie keys
+if (isset($_REQUEST) and isset($_COOKIE)) {
+       foreach($_COOKIE as $key=>$value) {
+               if (isset($_REQUEST[$key])) unset($_REQUEST[$key]);
+       }
+}
+
+function getVar($name) {
+       if (!isset($_GET[$name])) {
+               return;
+       }
+
+       return undoMagic($_GET[$name]);
+}
+
+function postVar($name) {
+       if (!isset($_POST[$name])) {
+               return;
+       }
+
+       return undoMagic($_POST[$name]);
+}
+
+function cookieVar($name) {
+       if (!isset($_COOKIE[$name])) {
+               return;
+       }
+
+       return undoMagic($_COOKIE[$name]);
+}
+
+function requestVar($name) {
+       if(array_key_exists($name,$_REQUEST))
+               return undoMagic($_REQUEST[$name]);
+       elseif( array_key_exists($name,$_GET))
+               return undoMagic($_GET[$name]);
+       elseif( array_key_exists($name,$_POST))
+               return undoMagic($_POST[$name]);
+       else
+               return;
+}
+
+function serverVar($name) {
+       if (!isset($_SERVER[$name])) {
+               return false;
+       }
+
+       return $_SERVER[$name];
+}
+
+// removes magic quotes if that option is enabled
+function undoMagic($data) {
+       if (!get_magic_quotes_gpc())
+               return $data;
+       if (ini_get('magic_quotes_sybase') != 1)
+               return stripslashes_array($data);
+       else
+               return undoSybaseQuotes_array($data);
+}
+
+function stripslashes_array($data) {
+       return is_array($data) ? array_map('stripslashes_array', $data) : stripslashes($data);
+}
+
+function undoSybaseQuotes_array($data) {
+       return is_array($data) ? array_map('undoSybaseQuotes', $data) : stripslashes($data);
+}
+
+function undoSybaseQuotes($data) {
+       return str_replace("''", "'", $data);
+}
+
+// integer array from request
+function requestIntArray($name) {
+       if (!isset($_REQUEST[$name])) {
+               return;
+       }
+
+       return $_REQUEST[$name];
+}
+
+// array from request. Be sure to call undoMagic on the strings inside
+function requestArray($name) {
+       if (!isset($_REQUEST[$name])) {
+               return;
+       }
+
+       return $_REQUEST[$name];
+}
+
+// add all the variables from the request as hidden input field
+// @see globalfunctions.php#passVar
+function passRequestVars() {
+       foreach ($_REQUEST as $key => $value) {
+               if (($key == 'action') && ($value != requestVar('nextaction')))
+                       $key = 'nextaction';
+
+               // a nextaction of 'showlogin' makes no sense
+               if (($key == 'nextaction') && ($value == 'showlogin'))
+                       continue;
+
+               if (($key != 'login') && ($key != 'password'))
+                       passVar($key, $value);
+       }
+}
+
+function postFileInfo($name) {
+       if (!isset($_FILES[$name])) {
+               return;
+       }
+
+       return $_FILES[$name];
+}
+
+function setOldAction($value) {
+       $_POST['oldaction'] = $value;
+}
+
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/libs/xmlrpc.inc.php b/utf8/nucleus/libs/xmlrpc.inc.php
new file mode 100755 (executable)
index 0000000..a4798b7
--- /dev/null
@@ -0,0 +1,3646 @@
+<?php
+// by Edd Dumbill (C) 1999-2002
+// <edd@usefulinc.com>
+// $Original: xmlrpc.inc,v 1.158 2007/03/01 21:21:02 ggiunta Exp $
+// $Id$
+// $NucleusJP: xmlrpc.inc.php,v 1.6.2.2 2007/09/07 07:04:24 kimitake Exp $
+
+
+// Copyright (c) 1999,2000,2002 Edd Dumbill.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    * Redistributions of source code must retain the above copyright
+//      notice, this list of conditions and the following disclaimer.
+//
+//    * Redistributions in binary form must reproduce the above
+//      copyright notice, this list of conditions and the following
+//      disclaimer in the documentation and/or other materials provided
+//      with the distribution.
+//
+//    * Neither the name of the "XML-RPC for PHP" nor the names of its
+//      contributors may be used to endorse or promote products derived
+//      from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+// OF THE POSSIBILITY OF SUCH DAMAGE.
+
+    if(!function_exists('xml_parser_create'))
+    {
+        // For PHP 4 onward, XML functionality is always compiled-in on windows:
+        // no more need to dl-open it. It might have been compiled out on *nix...
+        //if(strtoupper(substr(PHP_OS, 0, 3) != 'WIN'))
+        $phpver = phpversion();
+        if (!extension_loaded('xml') && version_compare($phpver,'5.3.0','<'))
+        {
+            dl('xml.so');
+        }
+    }
+
+    // Try to be backward compat with php < 4.2 (are we not being nice ?)
+    $phpversion = phpversion();
+    if($phpversion[0] == '4' && $phpversion[2] < 2)
+    {
+        // give an opportunity to user to specify where to include other files from
+        if(!defined('PHP_XMLRPC_COMPAT_DIR'))
+        {
+            define('PHP_XMLRPC_COMPAT_DIR',dirname(__FILE__).'/compat/');
+        }
+        if($phpversion[2] == '0')
+        {
+            if($phpversion[4] < 6)
+            {
+                include(PHP_XMLRPC_COMPAT_DIR.'is_callable.php');
+            }
+            include(PHP_XMLRPC_COMPAT_DIR.'is_scalar.php');
+            include(PHP_XMLRPC_COMPAT_DIR.'array_key_exists.php');
+            include(PHP_XMLRPC_COMPAT_DIR.'version_compare.php');
+        }
+        include(PHP_XMLRPC_COMPAT_DIR.'var_export.php');
+        include(PHP_XMLRPC_COMPAT_DIR.'is_a.php');
+    }
+
+    // G. Giunta 2005/01/29: declare global these variables,
+    // so that xmlrpc.inc will work even if included from within a function
+    // Milosch: 2005/08/07 - explicitly request these via $GLOBALS where used.
+    $GLOBALS['xmlrpcI4']='i4';
+    $GLOBALS['xmlrpcInt']='int';
+    $GLOBALS['xmlrpcBoolean']='boolean';
+    $GLOBALS['xmlrpcDouble']='double';
+    $GLOBALS['xmlrpcString']='string';
+    $GLOBALS['xmlrpcDateTime']='dateTime.iso8601';
+    $GLOBALS['xmlrpcBase64']='base64';
+    $GLOBALS['xmlrpcArray']='array';
+    $GLOBALS['xmlrpcStruct']='struct';
+    $GLOBALS['xmlrpcValue']='undefined';
+
+    $GLOBALS['xmlrpcTypes']=array(
+        $GLOBALS['xmlrpcI4']       => 1,
+        $GLOBALS['xmlrpcInt']      => 1,
+        $GLOBALS['xmlrpcBoolean']  => 1,
+        $GLOBALS['xmlrpcString']   => 1,
+        $GLOBALS['xmlrpcDouble']   => 1,
+        $GLOBALS['xmlrpcDateTime'] => 1,
+        $GLOBALS['xmlrpcBase64']   => 1,
+        $GLOBALS['xmlrpcArray']    => 2,
+        $GLOBALS['xmlrpcStruct']   => 3
+    );
+
+    $GLOBALS['xmlrpc_valid_parents'] = array(
+        'VALUE' => array('MEMBER', 'DATA', 'PARAM', 'FAULT'),
+        'BOOLEAN' => array('VALUE'),
+        'I4' => array('VALUE'),
+        'INT' => array('VALUE'),
+        'STRING' => array('VALUE'),
+        'DOUBLE' => array('VALUE'),
+        'DATETIME.ISO8601' => array('VALUE'),
+        'BASE64' => array('VALUE'),
+        'MEMBER' => array('STRUCT'),
+        'NAME' => array('MEMBER'),
+        'DATA' => array('ARRAY'),
+        'ARRAY' => array('VALUE'),
+        'STRUCT' => array('VALUE'),
+        'PARAM' => array('PARAMS'),
+        'METHODNAME' => array('METHODCALL'),
+        'PARAMS' => array('METHODCALL', 'METHODRESPONSE'),
+        'FAULT' => array('METHODRESPONSE'),
+        'NIL' => array('VALUE') // only used when extension activated
+    );
+
+    // define extra types for supporting NULL (useful for json or <NIL/>)
+    $GLOBALS['xmlrpcNull']='null';
+    $GLOBALS['xmlrpcTypes']['null']=1;
+
+    // Not in use anymore since 2.0. Shall we remove it?
+    /// @deprecated
+    $GLOBALS['xmlEntities']=array(
+        'amp'  => '&',
+        'quot' => '"',
+        'lt'   => '<',
+        'gt'   => '>',
+        'apos' => "'"
+    );
+
+    // tables used for transcoding different charsets into us-ascii xml
+
+    $GLOBALS['xml_iso88591_Entities']=array();
+    $GLOBALS['xml_iso88591_Entities']['in'] = array();
+    $GLOBALS['xml_iso88591_Entities']['out'] = array();
+    for ($i = 0; $i < 32; $i++)
+    {
+        $GLOBALS['xml_iso88591_Entities']['in'][] = chr($i);
+        $GLOBALS['xml_iso88591_Entities']['out'][] = '&#'.$i.';';
+    }
+    for ($i = 160; $i < 256; $i++)
+    {
+        $GLOBALS['xml_iso88591_Entities']['in'][] = chr($i);
+        $GLOBALS['xml_iso88591_Entities']['out'][] = '&#'.$i.';';
+    }
+
+    /// @todo add to iso table the characters from cp_1252 range, i.e. 128 to 159.
+    /// These will NOT be present in true ISO-8859-1, but will save the unwary
+    /// windows user from sending junk.
+/*
+$cp1252_to_xmlent =
+  array(
+   '\x80'=>'&#x20AC;', '\x81'=>'?', '\x82'=>'&#x201A;', '\x83'=>'&#x0192;',
+   '\x84'=>'&#x201E;', '\x85'=>'&#x2026;', '\x86'=>'&#x2020;', \x87'=>'&#x2021;',
+   '\x88'=>'&#x02C6;', '\x89'=>'&#x2030;', '\x8A'=>'&#x0160;', '\x8B'=>'&#x2039;',
+   '\x8C'=>'&#x0152;', '\x8D'=>'?', '\x8E'=>'&#x017D;', '\x8F'=>'?',
+   '\x90'=>'?', '\x91'=>'&#x2018;', '\x92'=>'&#x2019;', '\x93'=>'&#x201C;',
+   '\x94'=>'&#x201D;', '\x95'=>'&#x2022;', '\x96'=>'&#x2013;', '\x97'=>'&#x2014;',
+   '\x98'=>'&#x02DC;', '\x99'=>'&#x2122;', '\x9A'=>'&#x0161;', '\x9B'=>'&#x203A;',
+   '\x9C'=>'&#x0153;', '\x9D'=>'?', '\x9E'=>'&#x017E;', '\x9F'=>'&#x0178;'
+  );
+*/
+
+    $GLOBALS['xmlrpcerr']['unknown_method']=1;
+    $GLOBALS['xmlrpcstr']['unknown_method']='Unknown method';
+    $GLOBALS['xmlrpcerr']['invalid_return']=2;
+    $GLOBALS['xmlrpcstr']['invalid_return']='Invalid return payload: enable debugging to examine incoming payload';
+    $GLOBALS['xmlrpcerr']['incorrect_params']=3;
+    $GLOBALS['xmlrpcstr']['incorrect_params']='Incorrect parameters passed to method';
+    $GLOBALS['xmlrpcerr']['introspect_unknown']=4;
+    $GLOBALS['xmlrpcstr']['introspect_unknown']="Can't introspect: method unknown";
+    $GLOBALS['xmlrpcerr']['http_error']=5;
+    $GLOBALS['xmlrpcstr']['http_error']="Didn't receive 200 OK from remote server.";
+    $GLOBALS['xmlrpcerr']['no_data']=6;
+    $GLOBALS['xmlrpcstr']['no_data']='No data received from server.';
+    $GLOBALS['xmlrpcerr']['no_ssl']=7;
+    $GLOBALS['xmlrpcstr']['no_ssl']='No SSL support compiled in.';
+    $GLOBALS['xmlrpcerr']['curl_fail']=8;
+    $GLOBALS['xmlrpcstr']['curl_fail']='CURL error';
+    $GLOBALS['xmlrpcerr']['invalid_request']=15;
+    $GLOBALS['xmlrpcstr']['invalid_request']='Invalid request payload';
+    $GLOBALS['xmlrpcerr']['no_curl']=16;
+    $GLOBALS['xmlrpcstr']['no_curl']='No CURL support compiled in.';
+    $GLOBALS['xmlrpcerr']['server_error']=17;
+    $GLOBALS['xmlrpcstr']['server_error']='Internal server error';
+    $GLOBALS['xmlrpcerr']['multicall_error']=18;
+    $GLOBALS['xmlrpcstr']['multicall_error']='Received from server invalid multicall response';
+
+    $GLOBALS['xmlrpcerr']['multicall_notstruct'] = 9;
+    $GLOBALS['xmlrpcstr']['multicall_notstruct'] = 'system.multicall expected struct';
+    $GLOBALS['xmlrpcerr']['multicall_nomethod']  = 10;
+    $GLOBALS['xmlrpcstr']['multicall_nomethod']  = 'missing methodName';
+    $GLOBALS['xmlrpcerr']['multicall_notstring'] = 11;
+    $GLOBALS['xmlrpcstr']['multicall_notstring'] = 'methodName is not a string';
+    $GLOBALS['xmlrpcerr']['multicall_recursion'] = 12;
+    $GLOBALS['xmlrpcstr']['multicall_recursion'] = 'recursive system.multicall forbidden';
+    $GLOBALS['xmlrpcerr']['multicall_noparams']  = 13;
+    $GLOBALS['xmlrpcstr']['multicall_noparams']  = 'missing params';
+    $GLOBALS['xmlrpcerr']['multicall_notarray']  = 14;
+    $GLOBALS['xmlrpcstr']['multicall_notarray']  = 'params is not an array';
+
+    $GLOBALS['xmlrpcerr']['cannot_decompress']=103;
+    $GLOBALS['xmlrpcstr']['cannot_decompress']='Received from server compressed HTTP and cannot decompress';
+    $GLOBALS['xmlrpcerr']['decompress_fail']=104;
+    $GLOBALS['xmlrpcstr']['decompress_fail']='Received from server invalid compressed HTTP';
+    $GLOBALS['xmlrpcerr']['dechunk_fail']=105;
+    $GLOBALS['xmlrpcstr']['dechunk_fail']='Received from server invalid chunked HTTP';
+    $GLOBALS['xmlrpcerr']['server_cannot_decompress']=106;
+    $GLOBALS['xmlrpcstr']['server_cannot_decompress']='Received from client compressed HTTP request and cannot decompress';
+    $GLOBALS['xmlrpcerr']['server_decompress_fail']=107;
+    $GLOBALS['xmlrpcstr']['server_decompress_fail']='Received from client invalid compressed HTTP request';
+
+    // The charset encoding used by the server for received messages and
+    // by the client for received responses when received charset cannot be determined
+    // or is not supported
+    $GLOBALS['xmlrpc_defencoding']='UTF-8';
+
+    // The encoding used internally by PHP.
+    // String values received as xml will be converted to this, and php strings will be converted to xml
+    // as if having been coded with this
+    $GLOBALS['xmlrpc_internalencoding']='ISO-8859-1';
+
+    $GLOBALS['xmlrpcName']='XML-RPC for PHP';
+    $GLOBALS['xmlrpcVersion']='2.2';
+
+    // let user errors start at 800
+    $GLOBALS['xmlrpcerruser']=800;
+    // let XML parse errors start at 100
+    $GLOBALS['xmlrpcerrxml']=100;
+
+    // formulate backslashes for escaping regexp
+    // Not in use anymore since 2.0. Shall we remove it?
+    /// @deprecated
+    $GLOBALS['xmlrpc_backslash']=chr(92).chr(92);
+
+    // set to TRUE to enable correct decoding of <NIL/> values
+    $GLOBALS['xmlrpc_null_extension']=false;
+
+    // used to store state during parsing
+    // quick explanation of components:
+    //   ac - used to accumulate values
+    //   isf - used to indicate a parsing fault (2) or xmlrpcresp fault (1)
+    //   isf_reason - used for storing xmlrpcresp fault string
+    //   lv - used to indicate "looking for a value": implements
+    //        the logic to allow values with no types to be strings
+    //   params - used to store parameters in method calls
+    //   method - used to store method name
+    //   stack - array with genealogy of xml elements names:
+    //           used to validate nesting of xmlrpc elements
+    $GLOBALS['_xh']=null;
+
+    /**
+    * Convert a string to the correct XML representation in a target charset
+    * To help correct communication of non-ascii chars inside strings, regardless
+    * of the charset used when sending requests, parsing them, sending responses
+    * and parsing responses, an option is to convert all non-ascii chars present in the message
+    * into their equivalent 'charset entity'. Charset entities enumerated this way
+    * are independent of the charset encoding used to transmit them, and all XML
+    * parsers are bound to understand them.
+    * Note that in the std case we are not sending a charset encoding mime type
+    * along with http headers, so we are bound by RFC 3023 to emit strict us-ascii.
+    *
+    * @todo do a bit of basic benchmarking (strtr vs. str_replace)
+    * @todo make usage of iconv() or recode_string() or mb_string() where available
+    */
+    function xmlrpc_encode_entitites($data, $src_encoding='', $dest_encoding='')
+    {
+        if ($src_encoding == '')
+        {
+            // lame, but we know no better...
+            $src_encoding = $GLOBALS['xmlrpc_internalencoding'];
+        }
+
+        switch(strtoupper($src_encoding.'_'.$dest_encoding))
+        {
+            case 'ISO-8859-1_':
+            case 'ISO-8859-1_US-ASCII':
+                $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $data);
+                $escaped_data = str_replace($GLOBALS['xml_iso88591_Entities']['in'], $GLOBALS['xml_iso88591_Entities']['out'], $escaped_data);
+                break;
+            case 'ISO-8859-1_UTF-8':
+                $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $data);
+                $escaped_data = utf8_encode($escaped_data);
+                break;
+            case 'ISO-8859-1_ISO-8859-1':
+            case 'US-ASCII_US-ASCII':
+            case 'US-ASCII_UTF-8':
+            case 'US-ASCII_':
+            case 'US-ASCII_ISO-8859-1':
+            case 'UTF-8_UTF-8':
+                $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $data);
+                break;
+            case 'UTF-8_':
+            case 'UTF-8_US-ASCII':
+            case 'UTF-8_ISO-8859-1':
+    // NB: this will choke on invalid UTF-8, going most likely beyond EOF
+    $escaped_data = '';
+    // be kind to users creating string xmlrpcvals out of different php types
+    $data = (string) $data;
+    $ns = strlen ($data);
+    for ($nn = 0; $nn < $ns; $nn++)
+    {
+        $ch = $data[$nn];
+        $ii = ord($ch);
+        //1 7 0bbbbbbb (127)
+        if ($ii < 128)
+        {
+            /// @todo shall we replace this with a (supposedly) faster str_replace?
+            switch($ii){
+                case 34:
+                    $escaped_data .= '&quot;';
+                    break;
+                case 38:
+                    $escaped_data .= '&amp;';
+                    break;
+                case 39:
+                    $escaped_data .= '&apos;';
+                    break;
+                case 60:
+                    $escaped_data .= '&lt;';
+                    break;
+                case 62:
+                    $escaped_data .= '&gt;';
+                    break;
+                default:
+                    $escaped_data .= $ch;
+            } // switch
+        }
+        //2 11 110bbbbb 10bbbbbb (2047)
+        else if ($ii>>5 == 6)
+        {
+            $b1 = ($ii & 31);
+            $ii = ord($data[$nn+1]);
+            $b2 = ($ii & 63);
+            $ii = ($b1 * 64) + $b2;
+            $ent = sprintf ('&#%d;', $ii);
+            $escaped_data .= $ent;
+            $nn += 1;
+        }
+        //3 16 1110bbbb 10bbbbbb 10bbbbbb
+        else if ($ii>>4 == 14)
+        {
+            $b1 = ($ii & 31);
+            $ii = ord($data[$nn+1]);
+            $b2 = ($ii & 63);
+            $ii = ord($data[$nn+2]);
+            $b3 = ($ii & 63);
+            $ii = ((($b1 * 64) + $b2) * 64) + $b3;
+            $ent = sprintf ('&#%d;', $ii);
+            $escaped_data .= $ent;
+            $nn += 2;
+        }
+        //4 21 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
+        else if ($ii>>3 == 30)
+        {
+            $b1 = ($ii & 31);
+            $ii = ord($data[$nn+1]);
+            $b2 = ($ii & 63);
+            $ii = ord($data[$nn+2]);
+            $b3 = ($ii & 63);
+            $ii = ord($data[$nn+3]);
+            $b4 = ($ii & 63);
+            $ii = ((((($b1 * 64) + $b2) * 64) + $b3) * 64) + $b4;
+            $ent = sprintf ('&#%d;', $ii);
+            $escaped_data .= $ent;
+            $nn += 3;
+        }
+    }
+                break;
+            default:
+                $escaped_data = '';
+                error_log("Converting from $src_encoding to $dest_encoding: not supported...");
+        }
+        return $escaped_data;
+    }
+
+    /// xml parser handler function for opening element tags
+    function xmlrpc_se($parser, $name, $attrs, $accept_single_vals=false)
+    {
+        // if invalid xmlrpc already detected, skip all processing
+        if ($GLOBALS['_xh']['isf'] < 2)
+        {
+            // check for correct element nesting
+            // top level element can only be of 2 types
+            /// @todo optimization creep: save this check into a bool variable, instead of using count() every time:
+            ///       there is only a single top level element in xml anyway
+            if (count($GLOBALS['_xh']['stack']) == 0)
+            {
+                if ($name != 'METHODRESPONSE' && $name != 'METHODCALL' && (
+                    $name != 'VALUE' && !$accept_single_vals))
+                {
+                    $GLOBALS['_xh']['isf'] = 2;
+                    $GLOBALS['_xh']['isf_reason'] = 'missing top level xmlrpc element';
+                    return;
+                }
+                else
+                {
+                    $GLOBALS['_xh']['rt'] = strtolower($name);
+                }
+            }
+            else
+            {
+                // not top level element: see if parent is OK
+                $parent = end($GLOBALS['_xh']['stack']);
+                if (!array_key_exists($name, $GLOBALS['xmlrpc_valid_parents']) || !in_array($parent, $GLOBALS['xmlrpc_valid_parents'][$name]))
+                {
+                    $GLOBALS['_xh']['isf'] = 2;
+                    $GLOBALS['_xh']['isf_reason'] = "xmlrpc element $name cannot be child of $parent";
+                    return;
+                }
+            }
+
+            switch($name)
+            {
+                // optimize for speed switch cases: most common cases first
+                case 'VALUE':
+                    /// @todo we could check for 2 VALUE elements inside a MEMBER or PARAM element
+                    $GLOBALS['_xh']['vt']='value'; // indicator: no value found yet
+                    $GLOBALS['_xh']['ac']='';
+                    $GLOBALS['_xh']['lv']=1;
+                    $GLOBALS['_xh']['php_class']=null;
+                    break;
+                case 'I4':
+                case 'INT':
+                case 'STRING':
+                case 'BOOLEAN':
+                case 'DOUBLE':
+                case 'DATETIME.ISO8601':
+                case 'BASE64':
+                    if ($GLOBALS['_xh']['vt']!='value')
+                    {
+                        //two data elements inside a value: an error occurred!
+                        $GLOBALS['_xh']['isf'] = 2;
+                        $GLOBALS['_xh']['isf_reason'] = "$name element following a {$GLOBALS['_xh']['vt']} element inside a single value";
+                        return;
+                    }
+                    $GLOBALS['_xh']['ac']=''; // reset the accumulator
+                    break;
+                case 'STRUCT':
+                case 'ARRAY':
+                    if ($GLOBALS['_xh']['vt']!='value')
+                    {
+                        //two data elements inside a value: an error occurred!
+                        $GLOBALS['_xh']['isf'] = 2;
+                        $GLOBALS['_xh']['isf_reason'] = "$name element following a {$GLOBALS['_xh']['vt']} element inside a single value";
+                        return;
+                    }
+                    // create an empty array to hold child values, and push it onto appropriate stack
+                    $cur_val = array();
+                    $cur_val['values'] = array();
+                    $cur_val['type'] = $name;
+                    // check for out-of-band information to rebuild php objs
+                    // and in case it is found, save it
+                    if (@isset($attrs['PHP_CLASS']))
+                    {
+                        $cur_val['php_class'] = $attrs['PHP_CLASS'];
+                    }
+                    $GLOBALS['_xh']['valuestack'][] = $cur_val;
+                    $GLOBALS['_xh']['vt']='data'; // be prepared for a data element next
+                    break;
+                case 'DATA':
+                    if ($GLOBALS['_xh']['vt']!='data')
+                    {
+                        //two data elements inside a value: an error occurred!
+                        $GLOBALS['_xh']['isf'] = 2;
+                        $GLOBALS['_xh']['isf_reason'] = "found two data elements inside an array element";
+                        return;
+                    }
+                case 'METHODCALL':
+                case 'METHODRESPONSE':
+                case 'PARAMS':
+                    // valid elements that add little to processing
+                    break;
+                case 'METHODNAME':
+                case 'NAME':
+                    /// @todo we could check for 2 NAME elements inside a MEMBER element
+                    $GLOBALS['_xh']['ac']='';
+                    break;
+                case 'FAULT':
+                    $GLOBALS['_xh']['isf']=1;
+                    break;
+                case 'MEMBER':
+                    $GLOBALS['_xh']['valuestack'][count($GLOBALS['_xh']['valuestack'])-1]['name']=''; // set member name to null, in case we do not find in the xml later on
+                    //$GLOBALS['_xh']['ac']='';
+                    // Drop trough intentionally
+                case 'PARAM':
+                    // clear value type, so we can check later if no value has been passed for this param/member
+                    $GLOBALS['_xh']['vt']=null;
+                    break;
+                case 'NIL':
+                    if ($GLOBALS['xmlrpc_null_extension'])
+                    {
+                        if ($GLOBALS['_xh']['vt']!='value')
+                        {
+                            //two data elements inside a value: an error occurred!
+                            $GLOBALS['_xh']['isf'] = 2;
+                            $GLOBALS['_xh']['isf_reason'] = "$name element following a {$GLOBALS['_xh']['vt']} element inside a single value";
+                            return;
+                        }
+                        $GLOBALS['_xh']['ac']=''; // reset the accumulator
+                        break;
+                    }
+                    // we do not support the <NIL/> extension, so
+                    // drop through intentionally
+                default:
+                    /// INVALID ELEMENT: RAISE ISF so that it is later recognized!!!
+                    $GLOBALS['_xh']['isf'] = 2;
+                    $GLOBALS['_xh']['isf_reason'] = "found not-xmlrpc xml element $name";
+                    break;
+            }
+
+            // Save current element name to stack, to validate nesting
+            $GLOBALS['_xh']['stack'][] = $name;
+
+            /// @todo optimization creep: move this inside the big switch() above
+            if($name!='VALUE')
+            {
+                $GLOBALS['_xh']['lv']=0;
+            }
+        }
+    }
+
+    /// Used in decoding xml chunks that might represent single xmlrpc values
+    function xmlrpc_se_any($parser, $name, $attrs)
+    {
+        xmlrpc_se($parser, $name, $attrs, true);
+    }
+
+    /// xml parser handler function for close element tags
+    function xmlrpc_ee($parser, $name, $rebuild_xmlrpcvals = true)
+    {
+        if ($GLOBALS['_xh']['isf'] < 2)
+        {
+            // push this element name from stack
+            // NB: if XML validates, correct opening/closing is guaranteed and
+            // we do not have to check for $name == $curr_elem.
+            // we also checked for proper nesting at start of elements...
+            $curr_elem = array_pop($GLOBALS['_xh']['stack']);
+
+            switch($name)
+            {
+                case 'VALUE':
+                    // This if() detects if no scalar was inside <VALUE></VALUE>
+                    if ($GLOBALS['_xh']['vt']=='value')
+                    {
+                        $GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
+                        $GLOBALS['_xh']['vt']=$GLOBALS['xmlrpcString'];
+                    }
+
+                    if ($rebuild_xmlrpcvals)
+                    {
+                        // build the xmlrpc val out of the data received, and substitute it
+                        $temp =& new xmlrpcval($GLOBALS['_xh']['value'], $GLOBALS['_xh']['vt']);
+                        // in case we got info about underlying php class, save it
+                        // in the object we're rebuilding
+                        if (isset($GLOBALS['_xh']['php_class']))
+                            $temp->_php_class = $GLOBALS['_xh']['php_class'];
+                        // check if we are inside an array or struct:
+                        // if value just built is inside an array, let's move it into array on the stack
+                        $vscount = count($GLOBALS['_xh']['valuestack']);
+                        if ($vscount && $GLOBALS['_xh']['valuestack'][$vscount-1]['type']=='ARRAY')
+                        {
+                            $GLOBALS['_xh']['valuestack'][$vscount-1]['values'][] = $temp;
+                        }
+                        else
+                        {
+                            $GLOBALS['_xh']['value'] = $temp;
+                        }
+                    }
+                    else
+                    {
+                        /// @todo this needs to treat correctly php-serialized objects,
+                        /// since std deserializing is done by php_xmlrpc_decode,
+                        /// which we will not be calling...
+                        if (isset($GLOBALS['_xh']['php_class']))
+                        {
+                        }
+
+                        // check if we are inside an array or struct:
+                        // if value just built is inside an array, let's move it into array on the stack
+                        $vscount = count($GLOBALS['_xh']['valuestack']);
+                        if ($vscount && $GLOBALS['_xh']['valuestack'][$vscount-1]['type']=='ARRAY')
+                        {
+                            $GLOBALS['_xh']['valuestack'][$vscount-1]['values'][] = $GLOBALS['_xh']['value'];
+                        }
+                    }
+                    break;
+                case 'BOOLEAN':
+                case 'I4':
+                case 'INT':
+                case 'STRING':
+                case 'DOUBLE':
+                case 'DATETIME.ISO8601':
+                case 'BASE64':
+                    $GLOBALS['_xh']['vt']=strtolower($name);
+                    /// @todo: optimization creep - remove the if/elseif cycle below
+                    /// since the case() in which we are already did that
+                    if ($name=='STRING')
+                    {
+                        $GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
+                    }
+                    elseif ($name=='DATETIME.ISO8601')
+                    {
+                        if (!preg_match('/^[0-9]{8}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $GLOBALS['_xh']['ac']))
+                        {
+                            error_log('XML-RPC: invalid value received in DATETIME: '.$GLOBALS['_xh']['ac']);
+                        }
+                        $GLOBALS['_xh']['vt']=$GLOBALS['xmlrpcDateTime'];
+                        $GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
+                    }
+                    elseif ($name=='BASE64')
+                    {
+                        /// @todo check for failure of base64 decoding / catch warnings
+                        $GLOBALS['_xh']['value']=base64_decode($GLOBALS['_xh']['ac']);
+                    }
+                    elseif ($name=='BOOLEAN')
+                    {
+                        // special case here: we translate boolean 1 or 0 into PHP
+                        // constants true or false.
+                        // Strings 'true' and 'false' are accepted, even though the
+                        // spec never mentions them (see eg. Blogger api docs)
+                        // NB: this simple checks helps a lot sanitizing input, ie no
+                        // security problems around here
+                        if ($GLOBALS['_xh']['ac']=='1' || strcasecmp($GLOBALS['_xh']['ac'], 'true') == 0)
+                        {
+                            $GLOBALS['_xh']['value']=true;
+                        }
+                        else
+                        {
+                            // log if receiveing something strange, even though we set the value to false anyway
+                            if ($GLOBALS['_xh']['ac']!='0' && strcasecmp($_xh[$parser]['ac'], 'false') != 0)
+                                error_log('XML-RPC: invalid value received in BOOLEAN: '.$GLOBALS['_xh']['ac']);
+                            $GLOBALS['_xh']['value']=false;
+                        }
+                    }
+                    elseif ($name=='DOUBLE')
+                    {
+                        // we have a DOUBLE
+                        // we must check that only 0123456789-.<space> are characters here
+                        if (!preg_match('/^[+-]?[eE0123456789 \t.]+$/', $GLOBALS['_xh']['ac']))
+                        {
+                            /// @todo: find a better way of throwing an error
+                            // than this!
+                            error_log('XML-RPC: non numeric value received in DOUBLE: '.$GLOBALS['_xh']['ac']);
+                            $GLOBALS['_xh']['value']='ERROR_NON_NUMERIC_FOUND';
+                        }
+                        else
+                        {
+                            // it's ok, add it on
+                            $GLOBALS['_xh']['value']=(double)$GLOBALS['_xh']['ac'];
+                        }
+                    }
+                    else
+                    {
+                        // we have an I4/INT
+                        // we must check that only 0123456789-<space> are characters here
+                        if (!preg_match('/^[+-]?[0123456789 \t]+$/', $GLOBALS['_xh']['ac']))
+                        {
+                            /// @todo find a better way of throwing an error
+                            // than this!
+                            error_log('XML-RPC: non numeric value received in INT: '.$GLOBALS['_xh']['ac']);
+                            $GLOBALS['_xh']['value']='ERROR_NON_NUMERIC_FOUND';
+                        }
+                        else
+                        {
+                            // it's ok, add it on
+                            $GLOBALS['_xh']['value']=(int)$GLOBALS['_xh']['ac'];
+                        }
+                    }
+                    //$GLOBALS['_xh']['ac']=''; // is this necessary?
+                    $GLOBALS['_xh']['lv']=3; // indicate we've found a value
+                    break;
+                case 'NAME':
+                    $GLOBALS['_xh']['valuestack'][count($GLOBALS['_xh']['valuestack'])-1]['name'] = $GLOBALS['_xh']['ac'];
+                    break;
+                case 'MEMBER':
+                    //$GLOBALS['_xh']['ac']=''; // is this necessary?
+                    // add to array in the stack the last element built,
+                    // unless no VALUE was found
+                    if ($GLOBALS['_xh']['vt'])
+                    {
+                        $vscount = count($GLOBALS['_xh']['valuestack']);
+                        $GLOBALS['_xh']['valuestack'][$vscount-1]['values'][$GLOBALS['_xh']['valuestack'][$vscount-1]['name']] = $GLOBALS['_xh']['value'];
+                    } else
+                        error_log('XML-RPC: missing VALUE inside STRUCT in received xml');
+                    break;
+                case 'DATA':
+                    //$GLOBALS['_xh']['ac']=''; // is this necessary?
+                    $GLOBALS['_xh']['vt']=null; // reset this to check for 2 data elements in a row - even if they're empty
+                    break;
+                case 'STRUCT':
+                case 'ARRAY':
+                    // fetch out of stack array of values, and promote it to current value
+                    $curr_val = array_pop($GLOBALS['_xh']['valuestack']);
+                    $GLOBALS['_xh']['value'] = $curr_val['values'];
+                    $GLOBALS['_xh']['vt']=strtolower($name);
+                    if (isset($curr_val['php_class']))
+                    {
+                        $GLOBALS['_xh']['php_class'] = $curr_val['php_class'];
+                    }
+                    break;
+                case 'PARAM':
+                    // add to array of params the current value,
+                    // unless no VALUE was found
+                    if ($GLOBALS['_xh']['vt'])
+                    {
+                        $GLOBALS['_xh']['params'][]=$GLOBALS['_xh']['value'];
+                        $GLOBALS['_xh']['pt'][]=$GLOBALS['_xh']['vt'];
+                    }
+                    else
+                        error_log('XML-RPC: missing VALUE inside PARAM in received xml');
+                    break;
+                case 'METHODNAME':
+                    $GLOBALS['_xh']['method']=preg_replace('/^[\n\r\t ]+/', '', $GLOBALS['_xh']['ac']);
+                    break;
+                case 'NIL':
+                    if ($GLOBALS['xmlrpc_null_extension'])
+                    {
+                        $GLOBALS['_xh']['vt']='null';
+                        $GLOBALS['_xh']['value']=null;
+                        $GLOBALS['_xh']['lv']=3;
+                        break;
+                    }
+                    // drop through intentionally if nil extension not enabled
+                case 'PARAMS':
+                case 'FAULT':
+                case 'METHODCALL':
+                case 'METHORESPONSE':
+                    break;
+                default:
+                    // End of INVALID ELEMENT!
+                    // shall we add an assert here for unreachable code???
+                    break;
+            }
+        }
+    }
+
+    /// Used in decoding xmlrpc requests/responses without rebuilding xmlrpc values
+    function xmlrpc_ee_fast($parser, $name)
+    {
+        xmlrpc_ee($parser, $name, false);
+    }
+
+    /// xml parser handler function for character data
+    function xmlrpc_cd($parser, $data)
+    {
+        // skip processing if xml fault already detected
+        if ($GLOBALS['_xh']['isf'] < 2)
+        {
+            // "lookforvalue==3" means that we've found an entire value
+            // and should discard any further character data
+            if($GLOBALS['_xh']['lv']!=3)
+            {
+                // G. Giunta 2006-08-23: useless change of 'lv' from 1 to 2
+                //if($GLOBALS['_xh']['lv']==1)
+                //{
+                    // if we've found text and we're just in a <value> then
+                    // say we've found a value
+                    //$GLOBALS['_xh']['lv']=2;
+                //}
+                // we always initialize the accumulator before starting parsing, anyway...
+                //if(!@isset($GLOBALS['_xh']['ac']))
+                //{
+                //  $GLOBALS['_xh']['ac'] = '';
+                //}
+                $GLOBALS['_xh']['ac'].=$data;
+            }
+        }
+    }
+
+    /// xml parser handler function for 'other stuff', ie. not char data or
+    /// element start/end tag. In fact it only gets called on unknown entities...
+    function xmlrpc_dh($parser, $data)
+    {
+        // skip processing if xml fault already detected
+        if ($GLOBALS['_xh']['isf'] < 2)
+        {
+            if(substr($data, 0, 1) == '&' && substr($data, -1, 1) == ';')
+            {
+                // G. Giunta 2006-08-25: useless change of 'lv' from 1 to 2
+                //if($GLOBALS['_xh']['lv']==1)
+                //{
+                //  $GLOBALS['_xh']['lv']=2;
+                //}
+                $GLOBALS['_xh']['ac'].=$data;
+            }
+        }
+        return true;
+    }
+
+    class xmlrpc_client
+    {
+        var $path;
+        var $server;
+        var $port=0;
+        var $method='http';
+        var $errno;
+        var $errstr;
+        var $debug=0;
+        var $username='';
+        var $password='';
+        var $authtype=1;
+        var $cert='';
+        var $certpass='';
+        var $cacert='';
+        var $cacertdir='';
+        var $key='';
+        var $keypass='';
+        var $verifypeer=true;
+        var $verifyhost=1;
+        var $no_multicall=false;
+        var $proxy='';
+        var $proxyport=0;
+        var $proxy_user='';
+        var $proxy_pass='';
+        var $proxy_authtype=1;
+        var $cookies=array();
+        /**
+        * List of http compression methods accepted by the client for responses.
+        * NB: PHP supports deflate, gzip compressions out of the box if compiled w. zlib
+        *
+        * NNB: you can set it to any non-empty array for HTTP11 and HTTPS, since
+        * in those cases it will be up to CURL to decide the compression methods
+        * it supports. You might check for the presence of 'zlib' in the output of
+        * curl_version() to determine wheter compression is supported or not
+        */
+        var $accepted_compression = array();
+        /**
+        * Name of compression scheme to be used for sending requests.
+        * Either null, gzip or deflate
+        */
+        var $request_compression = '';
+        /**
+        * CURL handle: used for keep-alive connections (PHP 4.3.8 up, see:
+        * http://curl.haxx.se/docs/faq.html#7.3)
+        */
+        var $xmlrpc_curl_handle = null;
+        /// Wheter to use persistent connections for http 1.1 and https
+        var $keepalive = false;
+        /// Charset encodings that can be decoded without problems by the client
+        var $accepted_charset_encodings = array();
+        /// Charset encoding to be used in serializing request. NULL = use ASCII
+        var $request_charset_encoding = '';
+        /**
+        * Decides the content of xmlrpcresp objects returned by calls to send()
+        * valid strings are 'xmlrpcvals', 'phpvals' or 'xml'
+        */
+        var $return_type = 'xmlrpcvals';
+
+        /**
+        * @param string $path either the complete server URL or the PATH part of the xmlrc server URL, e.g. /xmlrpc/server.php
+        * @param string $server the server name / ip address
+        * @param integer $port the port the server is listening on, defaults to 80 or 443 depending on protocol used
+        * @param string $method the http protocol variant: defaults to 'http', 'https' and 'http11' can be used if CURL is installed
+        */
+        function xmlrpc_client($path, $server='', $port='', $method='')
+        {
+            // allow user to specify all params in $path
+            if($server == '' and $port == '' and $method == '')
+            {
+                $parts = parse_url($path);
+                $server = $parts['host'];
+                $path = $parts['path'];
+                if(isset($parts['query']))
+                {
+                    $path .= '?'.$parts['query'];
+                }
+                if(isset($parts['fragment']))
+                {
+                    $path .= '#'.$parts['fragment'];
+                }
+                if(isset($parts['port']))
+                {
+                    $port = $parts['port'];
+                }
+                if(isset($parts['scheme']))
+                {
+                    $method = $parts['scheme'];
+                }
+                if(isset($parts['user']))
+                {
+                    $this->username = $parts['user'];
+                }
+                if(isset($parts['pass']))
+                {
+                    $this->password = $parts['pass'];
+                }
+            }
+            if($path == '' || $path[0] != '/')
+            {
+                $this->path='/'.$path;
+            }
+            else
+            {
+                $this->path=$path;
+            }
+            $this->server=$server;
+            if($port != '')
+            {
+                $this->port=$port;
+            }
+            if($method != '')
+            {
+                $this->method=$method;
+            }
+
+            // if ZLIB is enabled, let the client by default accept compressed responses
+            if(function_exists('gzinflate') || (
+                function_exists('curl_init') && (($info = curl_version()) &&
+                ((is_string($info) && strpos($info, 'zlib') !== null) || isset($info['libz_version'])))
+            ))
+            {
+                $this->accepted_compression = array('gzip', 'deflate');
+            }
+
+            // keepalives: enabled by default ONLY for PHP >= 4.3.8
+            // (see http://curl.haxx.se/docs/faq.html#7.3)
+            if(version_compare(phpversion(), '4.3.8') >= 0)
+            {
+                $this->keepalive = true;
+            }
+
+            // by default the xml parser can support these 3 charset encodings
+            $this->accepted_charset_encodings = array('UTF-8', 'ISO-8859-1', 'US-ASCII');
+        }
+
+        /**
+        * Enables/disables the echoing to screen of the xmlrpc responses received
+        * @param integer $debug values 0, 1 and 2 are supported (2 = echo sent msg too, before received response)
+        * @access public
+        */
+        function setDebug($in)
+        {
+            $this->debug=$in;
+        }
+
+        /**
+        * Add some http BASIC AUTH credentials, used by the client to authenticate
+        * @param string $u username
+        * @param string $p password
+        * @param integer $t auth type. See curl_setopt man page for supported auth types. Defaults to CURLAUTH_BASIC (basic auth)
+        * @access public
+        */
+        function setCredentials($u, $p, $t=1)
+        {
+            $this->username=$u;
+            $this->password=$p;
+            $this->authtype=$t;
+        }
+
+        /**
+        * Add a client-side https certificate
+        * @param string $cert
+        * @param string $certpass
+        * @access public
+        */
+        function setCertificate($cert, $certpass)
+        {
+            $this->cert = $cert;
+            $this->certpass = $certpass;
+        }
+
+        /**
+        * Add a CA certificate to verify server with (see man page about
+        * CURLOPT_CAINFO for more details
+        * @param string $cacert certificate file name (or dir holding certificates)
+        * @param bool $is_dir set to true to indicate cacert is a dir. defaults to false
+        * @access public
+        */
+        function setCaCertificate($cacert, $is_dir=false)
+        {
+            if ($is_dir)
+            {
+                $this->cacert = $cacert;
+            }
+            else
+            {
+                $this->cacertdir = $cacert;
+            }
+        }
+
+        /**
+        * Set attributes for SSL communication: private SSL key
+        * @param string $key The name of a file containing a private SSL key
+        * @param string $keypass The secret password needed to use the private SSL key
+        * @access public
+        * NB: does not work in older php/curl installs
+        * Thanks to Daniel Convissor
+        */
+        function setKey($key, $keypass)
+        {
+            $this->key = $key;
+            $this->keypass = $keypass;
+        }
+
+        /**
+        * Set attributes for SSL communication: verify server certificate
+        * @param bool $i enable/disable verification of peer certificate
+        * @access public
+        */
+        function setSSLVerifyPeer($i)
+        {
+            $this->verifypeer = $i;
+        }
+
+        /**
+        * Set attributes for SSL communication: verify match of server cert w. hostname
+        * @param int $i
+        * @access public
+        */
+        function setSSLVerifyHost($i)
+        {
+            $this->verifyhost = $i;
+        }
+
+        /**
+        * Set proxy info
+        * @param string $proxyhost
+        * @param string $proxyport Defaults to 8080 for HTTP and 443 for HTTPS
+        * @param string $proxyusername Leave blank if proxy has public access
+        * @param string $proxypassword Leave blank if proxy has public access
+        * @param int $proxyauthtype set to constant CURLAUTH_NTLM to use NTLM auth with proxy
+        * @access public
+        */
+        function setProxy($proxyhost, $proxyport, $proxyusername = '', $proxypassword = '', $proxyauthtype = 1)
+        {
+            $this->proxy = $proxyhost;
+            $this->proxyport = $proxyport;
+            $this->proxy_user = $proxyusername;
+            $this->proxy_pass = $proxypassword;
+            $this->proxy_authtype = $proxyauthtype;
+        }
+
+        /**
+        * Enables/disables reception of compressed xmlrpc responses.
+        * Note that enabling reception of compressed responses merely adds some standard
+        * http headers to xmlrpc requests. It is up to the xmlrpc server to return
+        * compressed responses when receiving such requests.
+        * @param string $compmethod either 'gzip', 'deflate', 'any' or ''
+        * @access public
+        */
+        function setAcceptedCompression($compmethod)
+        {
+            if ($compmethod == 'any')
+                $this->accepted_compression = array('gzip', 'deflate');
+            else
+                $this->accepted_compression = array($compmethod);
+        }
+
+        /**
+        * Enables/disables http compression of xmlrpc request.
+        * Take care when sending compressed requests: servers might not support them
+        * (and automatic fallback to uncompressed requests is not yet implemented)
+        * @param string $compmethod either 'gzip', 'deflate' or ''
+        * @access public
+        */
+        function setRequestCompression($compmethod)
+        {
+            $this->request_compression = $compmethod;
+        }
+
+        /**
+        * Adds a cookie to list of cookies that will be sent to server.
+        * NB: setting any param but name and value will turn the cookie into a 'version 1' cookie:
+        * do not do it unless you know what you are doing
+        * @param string $name
+        * @param string $value
+        * @param string $path
+        * @param string $domain
+        * @param int $port
+        * @access public
+        *
+        * @todo check correctness of urlencoding cookie value (copied from php way of doing it...)
+        */
+        function setCookie($name, $value='', $path='', $domain='', $port=null)
+        {
+            $this->cookies[$name]['value'] = urlencode($value);
+            if ($path || $domain || $port)
+            {
+                $this->cookies[$name]['path'] = $path;
+                $this->cookies[$name]['domain'] = $domain;
+                $this->cookies[$name]['port'] = $port;
+                $this->cookies[$name]['version'] = 1;
+            }
+            else
+            {
+                $this->cookies[$name]['version'] = 0;
+            }
+        }
+
+        /**
+        * Send an xmlrpc request
+        * @param mixed $msg The message object, or an array of messages for using multicall, or the complete xml representation of a request
+        * @param integer $timeout Connection timeout, in seconds, If unspecified, a platform specific timeout will apply
+        * @param string $method if left unspecified, the http protocol chosen during creation of the object will be used
+        * @return xmlrpcresp
+        * @access public
+        */
+        function& send($msg, $timeout=0, $method='')
+        {
+            // if user deos not specify http protocol, use native method of this client
+            // (i.e. method set during call to constructor)
+            if($method == '')
+            {
+                $method = $this->method;
+            }
+
+            if(is_array($msg))
+            {
+                // $msg is an array of xmlrpcmsg's
+                $r = $this->multicall($msg, $timeout, $method);
+                return $r;
+            }
+            elseif(is_string($msg))
+            {
+                $n =& new xmlrpcmsg('');
+                $n->payload = $msg;
+                $msg = $n;
+            }
+
+            // where msg is an xmlrpcmsg
+            $msg->debug=$this->debug;
+
+            if($method == 'https')
+            {
+                $r =& $this->sendPayloadHTTPS(
+                    $msg,
+                    $this->server,
+                    $this->port,
+                    $timeout,
+                    $this->username,
+                    $this->password,
+                    $this->authtype,
+                    $this->cert,
+                    $this->certpass,
+                    $this->cacert,
+                    $this->cacertdir,
+                    $this->proxy,
+                    $this->proxyport,
+                    $this->proxy_user,
+                    $this->proxy_pass,
+                    $this->proxy_authtype,
+                    $this->keepalive,
+                    $this->key,
+                    $this->keypass
+                );
+            }
+            elseif($method == 'http11')
+            {
+                $r =& $this->sendPayloadCURL(
+                    $msg,
+                    $this->server,
+                    $this->port,
+                    $timeout,
+                    $this->username,
+                    $this->password,
+                    $this->authtype,
+                    null,
+                    null,
+                    null,
+                    null,
+                    $this->proxy,
+                    $this->proxyport,
+                    $this->proxy_user,
+                    $this->proxy_pass,
+                    $this->proxy_authtype,
+                    'http',
+                    $this->keepalive
+                );
+            }
+            else
+            {
+                $r =& $this->sendPayloadHTTP10(
+                    $msg,
+                    $this->server,
+                    $this->port,
+                    $timeout,
+                    $this->username,
+                    $this->password,
+                    $this->authtype,
+                    $this->proxy,
+                    $this->proxyport,
+                    $this->proxy_user,
+                    $this->proxy_pass,
+                    $this->proxy_authtype
+                );
+            }
+
+            return $r;
+        }
+
+        /**
+        * @access private
+        */
+        function &sendPayloadHTTP10($msg, $server, $port, $timeout=0,
+            $username='', $password='', $authtype=1, $proxyhost='',
+            $proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1)
+        {
+            if($port==0)
+            {
+                $port=80;
+            }
+
+            // Only create the payload if it was not created previously
+            if(empty($msg->payload))
+            {
+                $msg->createPayload($this->request_charset_encoding);
+            }
+
+            $payload = $msg->payload;
+            // Deflate request body and set appropriate request headers
+            if(function_exists('gzdeflate') && ($this->request_compression == 'gzip' || $this->request_compression == 'deflate'))
+            {
+                if($this->request_compression == 'gzip')
+                {
+                    $a = @gzencode($payload);
+                    if($a)
+                    {
+                        $payload = $a;
+                        $encoding_hdr = "Content-Encoding: gzip\r\n";
+                    }
+                }
+                else
+                {
+                    $a = @gzcompress($payload);
+                    if($a)
+                    {
+                        $payload = $a;
+                        $encoding_hdr = "Content-Encoding: deflate\r\n";
+                    }
+                }
+            }
+            else
+            {
+                $encoding_hdr = '';
+            }
+
+            // thanks to Grant Rauscher <grant7@firstworld.net> for this
+            $credentials='';
+            if($username!='')
+            {
+                $credentials='Authorization: Basic ' . base64_encode($username . ':' . $password) . "\r\n";
+                if ($authtype != 1)
+                {
+                    error_log('XML-RPC: xmlrpc_client::send: warning. Only Basic auth is supported with HTTP 1.0');
+                }
+            }
+
+            $accepted_encoding = '';
+            if(is_array($this->accepted_compression) && count($this->accepted_compression))
+            {
+                $accepted_encoding = 'Accept-Encoding: ' . implode(', ', $this->accepted_compression) . "\r\n";
+            }
+
+            $proxy_credentials = '';
+            if($proxyhost)
+            {
+                if($proxyport == 0)
+                {
+                    $proxyport = 8080;
+                }
+                $connectserver = $proxyhost;
+                $connectport = $proxyport;
+                $uri = 'http://'.$server.':'.$port.$this->path;
+                if($proxyusername != '')
+                {
+                    if ($proxyauthtype != 1)
+                    {
+                        error_log('XML-RPC: xmlrpc_client::send: warning. Only Basic auth to proxy is supported with HTTP 1.0');
+                    }
+                    $proxy_credentials = 'Proxy-Authorization: Basic ' . base64_encode($proxyusername.':'.$proxypassword) . "\r\n";
+                }
+            }
+            else
+            {
+                $connectserver = $server;
+                $connectport = $port;
+                $uri = $this->path;
+            }
+
+            // Cookie generation, as per rfc2965 (version 1 cookies) or
+            // netscape's rules (version 0 cookies)
+            $cookieheader='';
+            foreach ($this->cookies as $name => $cookie)
+            {
+                if ($cookie['version'])
+                {
+                    $cookieheader .= 'Cookie: $Version="' . $cookie['version'] . '"; ';
+                    $cookieheader .= $name . '="' . $cookie['value'] . '";';
+                    if ($cookie['path'])
+                        $cookieheader .= ' $Path="' . $cookie['path'] . '";';
+                    if ($cookie['domain'])
+                        $cookieheader .= ' $Domain="' . $cookie['domain'] . '";';
+                    if ($cookie['port'])
+                        $cookieheader .= ' $Port="' . $cookie['domain'] . '";';
+                    $cookieheader = substr($cookieheader, 0, -1) . "\r\n";
+                }
+                else
+                {
+                    $cookieheader .= 'Cookie: ' . $name . '=' . $cookie['value'] . "\r\n";
+                }
+            }
+
+            $op= 'POST ' . $uri. " HTTP/1.0\r\n" .
+                'User-Agent: ' . $GLOBALS['xmlrpcName'] . ' ' . $GLOBALS['xmlrpcVersion'] . "\r\n" .
+                'Host: '. $server . ':' . $port . "\r\n" .
+                $credentials .
+                $proxy_credentials .
+                $accepted_encoding .
+                $encoding_hdr .
+                'Accept-Charset: ' . implode(',', $this->accepted_charset_encodings) . "\r\n" .
+                $cookieheader .
+                'Content-Type: ' . $msg->content_type . "\r\nContent-Length: " .
+                strlen($payload) . "\r\n\r\n" .
+                $payload;
+
+            if($this->debug > 1)
+            {
+                print "<PRE>\n---SENDING---\n" . htmlentities($op) . "\n---END---\n</PRE>";
+                // let the client see this now in case http times out...
+                flush();
+            }
+
+            if($timeout>0)
+            {
+                $fp=@fsockopen($connectserver, $connectport, $this->errno, $this->errstr, $timeout);
+            }
+            else
+            {
+                $fp=@fsockopen($connectserver, $connectport, $this->errno, $this->errstr);
+            }
+            if($fp)
+            {
+                if($timeout>0 && function_exists('stream_set_timeout'))
+                {
+                    stream_set_timeout($fp, $timeout);
+                }
+            }
+            else
+            {
+                $this->errstr='Connect error: '.$this->errstr;
+                $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $this->errstr . ' (' . $this->errno . ')');
+                return $r;
+            }
+
+            if(!fputs($fp, $op, strlen($op)))
+            {
+                $this->errstr='Write error';
+                $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $this->errstr);
+                return $r;
+            }
+            else
+            {
+                // reset errno and errstr on succesful socket connection
+                $this->errstr = '';
+            }
+            // G. Giunta 2005/10/24: close socket before parsing.
+            // should yeld slightly better execution times, and make easier recursive calls (e.g. to follow http redirects)
+            $ipd='';
+            while($data=fread($fp, 32768))
+            {
+                // shall we check for $data === FALSE?
+                // as per the manual, it signals an error
+                $ipd.=$data;
+            }
+            fclose($fp);
+            $r =& $msg->parseResponse($ipd, false, $this->return_type);
+            return $r;
+
+        }
+
+        /**
+        * @access private
+        */
+        function &sendPayloadHTTPS($msg, $server, $port, $timeout=0, $username='',
+            $password='', $authtype=1, $cert='',$certpass='', $cacert='', $cacertdir='',
+            $proxyhost='', $proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1,
+            $keepalive=false, $key='', $keypass='')
+        {
+            $r =& $this->sendPayloadCURL($msg, $server, $port, $timeout, $username,
+                $password, $authtype, $cert, $certpass, $cacert, $cacertdir, $proxyhost, $proxyport,
+                $proxyusername, $proxypassword, $proxyauthtype, 'https', $keepalive, $key, $keypass);
+            return $r;
+        }
+
+        /**
+        * Contributed by Justin Miller <justin@voxel.net>
+        * Requires curl to be built into PHP
+        * NB: CURL versions before 7.11.10 cannot use proxy to talk to https servers!
+        * @access private
+        */
+        function &sendPayloadCURL($msg, $server, $port, $timeout=0, $username='',
+            $password='', $authtype=1, $cert='', $certpass='', $cacert='', $cacertdir='',
+            $proxyhost='', $proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1, $method='https',
+            $keepalive=false, $key='', $keypass='')
+        {
+            if(!function_exists('curl_init'))
+            {
+                $this->errstr='CURL unavailable on this install';
+                $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_curl'], $GLOBALS['xmlrpcstr']['no_curl']);
+                return $r;
+            }
+            if($method == 'https')
+            {
+                if(($info = curl_version()) &&
+                    ((is_string($info) && strpos($info, 'OpenSSL') === null) || (is_array($info) && !isset($info['ssl_version']))))
+                {
+                    $this->errstr='SSL unavailable on this install';
+                    $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_ssl'], $GLOBALS['xmlrpcstr']['no_ssl']);
+                    return $r;
+                }
+            }
+
+            if($port == 0)
+            {
+                if($method == 'http')
+                {
+                    $port = 80;
+                }
+                else
+                {
+                    $port = 443;
+                }
+            }
+
+            // Only create the payload if it was not created previously
+            if(empty($msg->payload))
+            {
+                $msg->createPayload($this->request_charset_encoding);
+            }
+
+            // Deflate request body and set appropriate request headers
+            $payload = $msg->payload;
+            if(function_exists('gzdeflate') && ($this->request_compression == 'gzip' || $this->request_compression == 'deflate'))
+            {
+                if($this->request_compression == 'gzip')
+                {
+                    $a = @gzencode($payload);
+                    if($a)
+                    {
+                        $payload = $a;
+                        $encoding_hdr = 'Content-Encoding: gzip';
+                    }
+                }
+                else
+                {
+                    $a = @gzcompress($payload);
+                    if($a)
+                    {
+                        $payload = $a;
+                        $encoding_hdr = 'Content-Encoding: deflate';
+                    }
+                }
+            }
+            else
+            {
+                $encoding_hdr = '';
+            }
+
+            if($this->debug > 1)
+            {
+                print "<PRE>\n---SENDING---\n" . htmlentities($payload) . "\n---END---\n</PRE>";
+                // let the client see this now in case http times out...
+                flush();
+            }
+
+            if(!$keepalive || !$this->xmlrpc_curl_handle)
+            {
+                $curl = curl_init($method . '://' . $server . ':' . $port . $this->path);
+                if($keepalive)
+                {
+                    $this->xmlrpc_curl_handle = $curl;
+                }
+            }
+            else
+            {
+                $curl = $this->xmlrpc_curl_handle;
+            }
+
+            // results into variable
+            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+
+            if($this->debug)
+            {
+                curl_setopt($curl, CURLOPT_VERBOSE, 1);
+            }
+            curl_setopt($curl, CURLOPT_USERAGENT, $GLOBALS['xmlrpcName'].' '.$GLOBALS['xmlrpcVersion']);
+            // required for XMLRPC: post the data
+            curl_setopt($curl, CURLOPT_POST, 1);
+            // the data
+            curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
+
+            // return the header too
+            curl_setopt($curl, CURLOPT_HEADER, 1);
+
+            // will only work with PHP >= 5.0
+            // NB: if we set an empty string, CURL will add http header indicating
+            // ALL methods it is supporting. This is possibly a better option than
+            // letting the user tell what curl can / cannot do...
+            if(is_array($this->accepted_compression) && count($this->accepted_compression))
+            {
+                //curl_setopt($curl, CURLOPT_ENCODING, implode(',', $this->accepted_compression));
+                // empty string means 'any supported by CURL' (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
+                if (count($this->accepted_compression) == 1)
+                {
+                    curl_setopt($curl, CURLOPT_ENCODING, $this->accepted_compression[0]);
+                }
+                else
+                    curl_setopt($curl, CURLOPT_ENCODING, '');
+            }
+            // extra headers
+            $headers = array('Content-Type: ' . $msg->content_type , 'Accept-Charset: ' . implode(',', $this->accepted_charset_encodings));
+            // if no keepalive is wanted, let the server know it in advance
+            if(!$keepalive)
+            {
+                $headers[] = 'Connection: close';
+            }
+            // request compression header
+            if($encoding_hdr)
+            {
+                $headers[] = $encoding_hdr;
+            }
+
+            curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
+            // timeout is borked
+            if($timeout)
+            {
+                curl_setopt($curl, CURLOPT_TIMEOUT, $timeout == 1 ? 1 : $timeout - 1);
+            }
+
+            if($username && $password)
+            {
+                curl_setopt($curl, CURLOPT_USERPWD, $username.':'.$password);
+                if (defined('CURLOPT_HTTPAUTH'))
+                {
+                    curl_setopt($curl, CURLOPT_HTTPAUTH, $authtype);
+                }
+                else if ($authtype != 1)
+                {
+                    error_log('XML-RPC: xmlrpc_client::send: warning. Only Basic auth is supported by the current PHP/curl install');
+                }
+            }
+
+            if($method == 'https')
+            {
+                // set cert file
+                if($cert)
+                {
+                    curl_setopt($curl, CURLOPT_SSLCERT, $cert);
+                }
+                // set cert password
+                if($certpass)
+                {
+                    curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $certpass);
+                }
+                // whether to verify remote host's cert
+                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $this->verifypeer);
+                // set ca certificates file/dir
+                if($cacert)
+                {
+                    curl_setopt($curl, CURLOPT_CAINFO, $cacert);
+                }
+                if($cacertdir)
+                {
+                    curl_setopt($curl, CURLOPT_CAPATH, $cacertdir);
+                }
+                // set key file (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
+                if($key)
+                {
+                    curl_setopt($curl, CURLOPT_SSLKEY, $key);
+                }
+                // set key password (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
+                if($keypass)
+                {
+                    curl_setopt($curl, CURLOPT_SSLKEYPASSWD, $keypass);
+                }
+                // whether to verify cert's common name (CN); 0 for no, 1 to verify that it exists, and 2 to verify that it matches the hostname used
+                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $this->verifyhost);
+            }
+
+            // proxy info
+            if($proxyhost)
+            {
+                if($proxyport == 0)
+                {
+                    $proxyport = 8080; // NB: even for HTTPS, local connection is on port 8080
+                }
+                curl_setopt($curl, CURLOPT_PROXY,$proxyhost.':'.$proxyport);
+                //curl_setopt($curl, CURLOPT_PROXYPORT,$proxyport);
+                if($proxyusername)
+                {
+                    curl_setopt($curl, CURLOPT_PROXYUSERPWD, $proxyusername.':'.$proxypassword);
+                    if (defined('CURLOPT_PROXYAUTH'))
+                    {
+                        curl_setopt($curl, CURLOPT_PROXYAUTH, $proxyauthtype);
+                    }
+                    else if ($proxyauthtype != 1)
+                    {
+                        error_log('XML-RPC: xmlrpc_client::send: warning. Only Basic auth to proxy is supported by the current PHP/curl install');
+                    }
+                }
+            }
+
+            // NB: should we build cookie http headers by hand rather than let CURL do it?
+            // the following code does not honour 'expires', 'path' and 'domain' cookie attributes
+            // set to clint obj the the user...
+            if (count($this->cookies))
+            {
+                $cookieheader = '';
+                foreach ($this->cookies as $name => $cookie)
+                {
+                    $cookieheader .= $name . '=' . $cookie['value'] . ', ';
+                }
+                curl_setopt($curl, CURLOPT_COOKIE, substr($cookieheader, 0, -2));
+            }
+
+            $result = curl_exec($curl);
+
+            if(!$result)
+            {
+                $this->errstr='no response';
+                $resp=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['curl_fail'], $GLOBALS['xmlrpcstr']['curl_fail']. ': '. curl_error($curl));
+                if(!$keepalive)
+                {
+                    curl_close($curl);
+                }
+            }
+            else
+            {
+                if(!$keepalive)
+                {
+                    curl_close($curl);
+                }
+                $resp =& $msg->parseResponse($result, true, $this->return_type);
+            }
+            return $resp;
+        }
+
+        /**
+        * Send an array of request messages and return an array of responses.
+        * Unless $this->no_multicall has been set to true, it will try first
+        * to use one single xmlrpc call to server method system.multicall, and
+        * revert to sending many successive calls in case of failure.
+        * This failure is also stored in $this->no_multicall for subsequent calls.
+        * Unfortunately, there is no server error code universally used to denote
+        * the fact that multicall is unsupported, so there is no way to reliably
+        * distinguish between that and a temporary failure.
+        * If you are sure that server supports multicall and do not want to
+        * fallback to using many single calls, set the fourth parameter to FALSE.
+        *
+        * NB: trying to shoehorn extra functionality into existing syntax has resulted
+        * in pretty much convoluted code...
+        *
+        * @param array $msgs an array of xmlrpcmsg objects
+        * @param integer $timeout connection timeout (in seconds)
+        * @param string $method the http protocol variant to be used
+        * @param boolean fallback When true, upon receiveing an error during multicall, multiple single calls will be attempted
+        * @return array
+        * @access public
+        */
+        function multicall($msgs, $timeout=0, $method='', $fallback=true)
+        {
+            if ($method == '')
+            {
+                $method = $this->method;
+            }
+            if(!$this->no_multicall)
+            {
+                $results = $this->_try_multicall($msgs, $timeout, $method);
+                if(is_array($results))
+                {
+                    // System.multicall succeeded
+                    return $results;
+                }
+                else
+                {
+                    // either system.multicall is unsupported by server,
+                    // or call failed for some other reason.
+                    if ($fallback)
+                    {
+                        // Don't try it next time...
+                        $this->no_multicall = true;
+                    }
+                    else
+                    {
+                        if (is_a($results, 'xmlrpcresp'))
+                        {
+                            $result = $results;
+                        }
+                        else
+                        {
+                            $result =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['multicall_error'], $GLOBALS['xmlrpcstr']['multicall_error']);
+                        }
+                    }
+                }
+            }
+            else
+            {
+                // override fallback, in case careless user tries to do two
+                // opposite things at the same time
+                $fallback = true;
+            }
+
+            $results = array();
+            if ($fallback)
+            {
+                // system.multicall is (probably) unsupported by server:
+                // emulate multicall via multiple requests
+                foreach($msgs as $msg)
+                {
+                    $results[] =& $this->send($msg, $timeout, $method);
+                }
+            }
+            else
+            {
+                // user does NOT want to fallback on many single calls:
+                // since we should always return an array of responses,
+                // return an array with the same error repeated n times
+                foreach($msgs as $msg)
+                {
+                    $results[] = $result;
+                }
+            }
+            return $results;
+        }
+
+        /**
+        * Attempt to boxcar $msgs via system.multicall.
+        * Returns either an array of xmlrpcreponses, an xmlrpc error response
+        * or false (when received response does not respect valid multicall syntax)
+        * @access private
+        */
+        function _try_multicall($msgs, $timeout, $method)
+        {
+            // Construct multicall message
+            $calls = array();
+            foreach($msgs as $msg)
+            {
+                $call['methodName'] =& new xmlrpcval($msg->method(),'string');
+                $numParams = $msg->getNumParams();
+                $params = array();
+                for($i = 0; $i < $numParams; $i++)
+                {
+                    $params[$i] = $msg->getParam($i);
+                }
+                $call['params'] =& new xmlrpcval($params, 'array');
+                $calls[] =& new xmlrpcval($call, 'struct');
+            }
+            $multicall =& new xmlrpcmsg('system.multicall');
+            $multicall->addParam(new xmlrpcval($calls, 'array'));
+
+            // Attempt RPC call
+            $result =& $this->send($multicall, $timeout, $method);
+
+            if($result->faultCode() != 0)
+            {
+                // call to system.multicall failed
+                return $result;
+            }
+
+            // Unpack responses.
+            $rets = $result->value();
+
+            if ($this->return_type == 'xml')
+            {
+                    return $rets;
+            }
+            else if ($this->return_type == 'phpvals')
+            {
+                ///@todo test this code branch...
+                $rets = $result->value();
+                if(!is_array($rets))
+                {
+                    return false;       // bad return type from system.multicall
+                }
+                $numRets = count($rets);
+                if($numRets != count($msgs))
+                {
+                    return false;       // wrong number of return values.
+                }
+
+                $response = array();
+                for($i = 0; $i < $numRets; $i++)
+                {
+                    $val = $rets[$i];
+                    if (!is_array($val)) {
+                        return false;
+                    }
+                    switch(count($val))
+                    {
+                        case 1:
+                            if(!isset($val[0]))
+                            {
+                                return false;       // Bad value
+                            }
+                            // Normal return value
+                            $response[$i] =& new xmlrpcresp($val[0], 0, '', 'phpvals');
+                            break;
+                        case 2:
+                            /// @todo remove usage of @: it is apparently quite slow
+                            $code = @$val['faultCode'];
+                            if(!is_int($code))
+                            {
+                                return false;
+                            }
+                            $str = @$val['faultString'];
+                            if(!is_string($str))
+                            {
+                                return false;
+                            }
+                            $response[$i] =& new xmlrpcresp(0, $code, $str);
+                            break;
+                        default:
+                            return false;
+                    }
+                }
+                return $response;
+            }
+            else // return type == 'xmlrpcvals'
+            {
+                $rets = $result->value();
+                if($rets->kindOf() != 'array')
+                {
+                    return false;       // bad return type from system.multicall
+                }
+                $numRets = $rets->arraysize();
+                if($numRets != count($msgs))
+                {
+                    return false;       // wrong number of return values.
+                }
+
+                $response = array();
+                for($i = 0; $i < $numRets; $i++)
+                {
+                    $val = $rets->arraymem($i);
+                    switch($val->kindOf())
+                    {
+                        case 'array':
+                            if($val->arraysize() != 1)
+                            {
+                                return false;       // Bad value
+                            }
+                            // Normal return value
+                            $response[$i] =& new xmlrpcresp($val->arraymem(0));
+                            break;
+                        case 'struct':
+                            $code = $val->structmem('faultCode');
+                            if($code->kindOf() != 'scalar' || $code->scalartyp() != 'int')
+                            {
+                                return false;
+                            }
+                            $str = $val->structmem('faultString');
+                            if($str->kindOf() != 'scalar' || $str->scalartyp() != 'string')
+                            {
+                                return false;
+                            }
+                            $response[$i] =& new xmlrpcresp(0, $code->scalarval(), $str->scalarval());
+                            break;
+                        default:
+                            return false;
+                    }
+                }
+                return $response;
+            }
+        }
+    } // end class xmlrpc_client
+
+    class xmlrpcresp
+    {
+        var $val = 0;
+        var $valtyp;
+        var $errno = 0;
+        var $errstr = '';
+        var $payload;
+        var $hdrs = array();
+        var $_cookies = array();
+        var $content_type = 'text/xml';
+        var $raw_data = '';
+
+        /**
+        * @param mixed $val either an xmlrpcval obj, a php value or the xml serialization of an xmlrpcval (a string)
+        * @param integer $fcode set it to anything but 0 to create an error response
+        * @param string $fstr the error string, in case of an error response
+        * @param string $valtyp either 'xmlrpcvals', 'phpvals' or 'xml'
+        *
+        * @todo add check that $val / $fcode / $fstr is of correct type???
+        * NB: as of now we do not do it, since it might be either an xmlrpcval or a plain
+        * php val, or a complete xml chunk, depending on usage of xmlrpc_client::send() inside which creator is called...
+        */
+        function xmlrpcresp($val, $fcode = 0, $fstr = '', $valtyp='')
+        {
+            if($fcode != 0)
+            {
+                // error response
+                $this->errno = $fcode;
+                $this->errstr = $fstr;
+                //$this->errstr = htmlspecialchars($fstr); // XXX: encoding probably shouldn't be done here; fix later.
+            }
+            else
+            {
+                // successful response
+                $this->val = $val;
+                if ($valtyp == '')
+                {
+                    // user did not declare type of response value: try to guess it
+                    if (is_object($this->val) && is_a($this->val, 'xmlrpcval'))
+                    {
+                        $this->valtyp = 'xmlrpcvals';
+                    }
+                    else if (is_string($this->val))
+                    {
+                        $this->valtyp = 'xml';
+
+                    }
+                    else
+                    {
+                        $this->valtyp = 'phpvals';
+                    }
+                }
+                else
+                {
+                    // user declares type of resp value: believe him
+                    $this->valtyp = $valtyp;
+                }
+            }
+        }
+
+        /**
+        * Returns the error code of the response.
+        * @return integer the error code of this response (0 for not-error responses)
+        * @access public
+        */
+        function faultCode()
+        {
+            return $this->errno;
+        }
+
+        /**
+        * Returns the error code of the response.
+        * @return string the error string of this response ('' for not-error responses)
+        * @access public
+        */
+        function faultString()
+        {
+            return $this->errstr;
+        }
+
+        /**
+        * Returns the value received by the server.
+        * @return mixed the xmlrpcval object returned by the server. Might be an xml string or php value if the response has been created by specially configured xmlrpc_client objects
+        * @access public
+        */
+        function value()
+        {
+            return $this->val;
+        }
+
+        /**
+        * Returns an array with the cookies received from the server.
+        * Array has the form: $cookiename => array ('value' => $val, $attr1 => $val1, $attr2 = $val2, ...)
+        * with attributes being e.g. 'expires', 'path', domain'.
+        * NB: cookies sent as 'expired' by the server (i.e. with an expiry date in the past)
+        * are still present in the array. It is up to the user-defined code to decide
+        * how to use the received cookies, and wheter they have to be sent back with the next
+        * request to the server (using xmlrpc_client::setCookie) or not
+        * @return array array of cookies received from the server
+        * @access public
+        */
+        function cookies()
+        {
+            return $this->_cookies;
+        }
+
+        /**
+        * Returns xml representation of the response. XML prologue not included
+        * @param string $charset_encoding the charset to be used for serialization. if null, US-ASCII is assumed
+        * @return string the xml representation of the response
+        * @access public
+        */
+        function serialize($charset_encoding='')
+        {
+            if ($charset_encoding != '')
+                $this->content_type = 'text/xml; charset=' . $charset_encoding;
+            else
+                $this->content_type = 'text/xml';
+            $result = "<methodResponse>\n";
+            if($this->errno)
+            {
+                // G. Giunta 2005/2/13: let non-ASCII response messages be tolerated by clients
+                // by xml-encoding non ascii chars
+                $result .= "<fault>\n" .
+"<value>\n<struct><member><name>faultCode</name>\n<value><int>" . $this->errno .
+"</int></value>\n</member>\n<member>\n<name>faultString</name>\n<value><string>" .
+xmlrpc_encode_entitites($this->errstr, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding) . "</string></value>\n</member>\n" .
+"</struct>\n</value>\n</fault>";
+            }
+            else
+            {
+                if(!is_object($this->val) || !is_a($this->val, 'xmlrpcval'))
+                {
+                    if (is_string($this->val) && $this->valtyp == 'xml')
+                    {
+                        $result .= "<params>\n<param>\n" .
+                            $this->val .
+                            "</param>\n</params>";
+                    }
+                    else
+                    {
+                        /// @todo try to build something serializable?
+                        die('cannot serialize xmlrpcresp objects whose content is native php values');
+                    }
+                }
+                else
+                {
+                    $result .= "<params>\n<param>\n" .
+                        $this->val->serialize($charset_encoding) .
+                        "</param>\n</params>";
+                }
+            }
+            $result .= "\n</methodResponse>";
+            $this->payload = $result;
+            return $result;
+        }
+    }
+
+    class xmlrpcmsg
+    {
+        var $payload;
+        var $methodname;
+        var $params=array();
+        var $debug=0;
+        var $content_type = 'text/xml';
+
+        /**
+        * @param string $meth the name of the method to invoke
+        * @param array $pars array of parameters to be paased to the method (xmlrpcval objects)
+        */
+        function xmlrpcmsg($meth, $pars=0)
+        {
+            $this->methodname=$meth;
+            if(is_array($pars) && count($pars)>0)
+            {
+                for($i=0; $i<count($pars); $i++)
+                {
+                    $this->addParam($pars[$i]);
+                }
+            }
+        }
+
+        /**
+        * @access private
+        */
+        function xml_header($charset_encoding='')
+        {
+            if ($charset_encoding != '')
+            {
+                return "<?xml version=\"1.0\" encoding=\"$charset_encoding\" ?" . ">\n<methodCall>\n";
+            }
+            else
+            {
+                return "<?xml version=\"1.0\"?" . ">\n<methodCall>\n";
+            }
+        }
+
+        /**
+        * @access private
+        */
+        function xml_footer()
+        {
+            return '</methodCall>';
+        }
+
+        /**
+        * @access private
+        */
+        function kindOf()
+        {
+            return 'msg';
+        }
+
+        /**
+        * @access private
+        */
+        function createPayload($charset_encoding='')
+        {
+            if ($charset_encoding != '')
+                $this->content_type = 'text/xml; charset=' . $charset_encoding;
+            else
+                $this->content_type = 'text/xml';
+            $this->payload=$this->xml_header($charset_encoding);
+            $this->payload.='<methodName>' . $this->methodname . "</methodName>\n";
+            $this->payload.="<params>\n";
+            for($i=0; $i<count($this->params); $i++)
+            {
+                $p=$this->params[$i];
+                $this->payload.="<param>\n" . $p->serialize($charset_encoding) .
+                "</param>\n";
+            }
+            $this->payload.="</params>\n";
+            $this->payload.=$this->xml_footer();
+        }
+
+        /**
+        * Gets/sets the xmlrpc method to be invoked
+        * @param string $meth the method to be set (leave empty not to set it)
+        * @return string the method that will be invoked
+        * @access public
+        */
+        function method($meth='')
+        {
+            if($meth!='')
+            {
+                $this->methodname=$meth;
+            }
+            return $this->methodname;
+        }
+
+        /**
+        * Returns xml representation of the message. XML prologue included
+        * @return string the xml representation of the message, xml prologue included
+        * @access public
+        */
+        function serialize($charset_encoding='')
+        {
+            $this->createPayload($charset_encoding);
+            return $this->payload;
+        }
+
+        /**
+        * Add a parameter to the list of parameters to be used upon method invocation
+        * @param xmlrpcval $par
+        * @return boolean false on failure
+        * @access public
+        */
+        function addParam($par)
+        {
+            // add check: do not add to self params which are not xmlrpcvals
+            if(is_object($par) && is_a($par, 'xmlrpcval'))
+            {
+                $this->params[]=$par;
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+
+        /**
+        * Returns the nth parameter in the message. The index zero-based.
+        * @param integer $i the index of the parameter to fetch (zero based)
+        * @return xmlrpcval the i-th parameter
+        * @access public
+        */
+        function getParam($i) { return $this->params[$i]; }
+
+        /**
+        * Returns the number of parameters in the messge.
+        * @return integer the number of parameters currently set
+        * @access public
+        */
+        function getNumParams() { return count($this->params); }
+
+        /**
+        * Given an open file handle, read all data available and parse it as axmlrpc response.
+        * NB: the file handle is not closed by this function.
+        * @access public
+        * @return xmlrpcresp
+        * @todo add 2nd & 3rd param to be passed to ParseResponse() ???
+        */
+        function &parseResponseFile($fp)
+        {
+            $ipd='';
+            while($data=fread($fp, 32768))
+            {
+                $ipd.=$data;
+            }
+            //fclose($fp);
+            $r =& $this->parseResponse($ipd);
+            return $r;
+        }
+
+        /**
+        * Parses HTTP headers and separates them from data.
+        * @access private
+        */
+        function &parseResponseHeaders(&$data, $headers_processed=false)
+        {
+                // Support "web-proxy-tunelling" connections for https through proxies
+                if(preg_match('/^HTTP\/1\.[0-1] 200 Connection established/', $data))
+                {
+                    // Look for CR/LF or simple LF as line separator,
+                    // (even though it is not valid http)
+                    $pos = strpos($data,"\r\n\r\n");
+                    if($pos || is_int($pos))
+                    {
+                        $bd = $pos+4;
+                    }
+                    else
+                    {
+                        $pos = strpos($data,"\n\n");
+                        if($pos || is_int($pos))
+                        {
+                            $bd = $pos+2;
+                        }
+                        else
+                        {
+                            // No separation between response headers and body: fault?
+                            $bd = 0;
+                        }
+                    }
+                    if ($bd)
+                    {
+                        // this filters out all http headers from proxy.
+                        // maybe we could take them into account, too?
+                        $data = substr($data, $bd);
+                    }
+                    else
+                    {
+                        error_log('XML-RPC: xmlrpcmsg::parseResponse: HTTPS via proxy error, tunnel connection possibly failed');
+                        $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $GLOBALS['xmlrpcstr']['http_error']. ' (HTTPS via proxy error, tunnel connection possibly failed)');
+                        return $r;
+                    }
+                }
+
+                // Strip HTTP 1.1 100 Continue header if present
+                while(preg_match('/^HTTP\/1\.1 1[0-9]{2} /', $data))
+                {
+                    $pos = strpos($data, 'HTTP', 12);
+                    // server sent a Continue header without any (valid) content following...
+                    // give the client a chance to know it
+                    if(!$pos && !is_int($pos)) // works fine in php 3, 4 and 5
+                    {
+                        break;
+                    }
+                    $data = substr($data, $pos);
+                }
+                if(!preg_match('/^HTTP\/[0-9.]+ 200 /', $data))
+                {
+                    $errstr= substr($data, 0, strpos($data, "\n")-1);
+                    error_log('XML-RPC: xmlrpcmsg::parseResponse: HTTP error, got response: ' .$errstr);
+                    $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $GLOBALS['xmlrpcstr']['http_error']. ' (' . $errstr . ')');
+                    return $r;
+                }
+
+                $GLOBALS['_xh']['headers'] = array();
+                $GLOBALS['_xh']['cookies'] = array();
+
+                // be tolerant to usage of \n instead of \r\n to separate headers and data
+                // (even though it is not valid http)
+                $pos = strpos($data,"\r\n\r\n");
+                if($pos || is_int($pos))
+                {
+                    $bd = $pos+4;
+                }
+                else
+                {
+                    $pos = strpos($data,"\n\n");
+                    if($pos || is_int($pos))
+                    {
+                        $bd = $pos+2;
+                    }
+                    else
+                    {
+                        // No separation between response headers and body: fault?
+                        // we could take some action here instead of going on...
+                        $bd = 0;
+                    }
+                }
+                // be tolerant to line endings, and extra empty lines
+                //$ar = split("\r?\n", trim(substr($data, 0, $pos))); //split() is deprecated
+                $ar = preg_split("/\r?\n/", trim(substr($data, 0, $pos)));
+                while(list(,$line) = @each($ar))
+                {
+                    // take care of multi-line headers and cookies
+                    $arr = explode(':',$line,2);
+                    if(count($arr) > 1)
+                    {
+                        $header_name = strtolower(trim($arr[0]));
+                        /// @todo some other headers (the ones that allow a CSV list of values)
+                        /// do allow many values to be passed using multiple header lines.
+                        /// We should add content to $GLOBALS['_xh']['headers'][$header_name]
+                        /// instead of replacing it for those...
+                        if ($header_name == 'set-cookie' || $header_name == 'set-cookie2')
+                        {
+                            if ($header_name == 'set-cookie2')
+                            {
+                                // version 2 cookies:
+                                // there could be many cookies on one line, comma separated
+                                $cookies = explode(',', $arr[1]);
+                            }
+                            else
+                            {
+                                $cookies = array($arr[1]);
+                            }
+                            foreach ($cookies as $cookie)
+                            {
+                                // glue together all received cookies, using a comma to separate them
+                                // (same as php does with getallheaders())
+                                if (isset($GLOBALS['_xh']['headers'][$header_name]))
+                                    $GLOBALS['_xh']['headers'][$header_name] .= ', ' . trim($cookie);
+                                else
+                                    $GLOBALS['_xh']['headers'][$header_name] = trim($cookie);
+                                // parse cookie attributes, in case user wants to correctly honour them
+                                // feature creep: only allow rfc-compliant cookie attributes?
+                                $cookie = explode(';', $cookie);
+                                foreach ($cookie as $pos => $val)
+                                {
+                                    $val = explode('=', $val, 2);
+                                    $tag = trim($val[0]);
+                                    $val = trim(@$val[1]);
+                                    /// @todo with version 1 cookies, we should strip leading and trailing " chars
+                                    if ($pos == 0)
+                                    {
+                                        $cookiename = $tag;
+                                        $GLOBALS['_xh']['cookies'][$tag] = array();
+                                        $GLOBALS['_xh']['cookies'][$cookiename]['value'] = urldecode($val);
+                                    }
+                                    else
+                                    {
+                                        $GLOBALS['_xh']['cookies'][$cookiename][$tag] = $val;
+                                    }
+                                }
+                            }
+                        }
+                        else
+                        {
+                            $GLOBALS['_xh']['headers'][$header_name] = trim($arr[1]);
+                        }
+                    }
+                    elseif(isset($header_name))
+                    {
+                        /// @todo version1 cookies might span multiple lines, thus breaking the parsing above
+                        $GLOBALS['_xh']['headers'][$header_name] .= ' ' . trim($line);
+                    }
+                }
+
+                $data = substr($data, $bd);
+
+                if($this->debug && count($GLOBALS['_xh']['headers']))
+                {
+                    print '<PRE>';
+                    foreach($GLOBALS['_xh']['headers'] as $header => $value)
+                    {
+                        print htmlentities("HEADER: $header: $value\n");
+                    }
+                    foreach($GLOBALS['_xh']['cookies'] as $header => $value)
+                    {
+                        print htmlentities("COOKIE: $header={$value['value']}\n");
+                    }
+                    print "</PRE>\n";
+                }
+
+                // if CURL was used for the call, http headers have been processed,
+                // and dechunking + reinflating have been carried out
+                if(!$headers_processed)
+                {
+                    // Decode chunked encoding sent by http 1.1 servers
+                    if(isset($GLOBALS['_xh']['headers']['transfer-encoding']) && $GLOBALS['_xh']['headers']['transfer-encoding'] == 'chunked')
+                    {
+                        if(!$data = decode_chunked($data))
+                        {
+                            error_log('XML-RPC: xmlrpcmsg::parseResponse: errors occurred when trying to rebuild the chunked data received from server');
+                            $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['dechunk_fail'], $GLOBALS['xmlrpcstr']['dechunk_fail']);
+                            return $r;
+                        }
+                    }
+
+                    // Decode gzip-compressed stuff
+                    // code shamelessly inspired from nusoap library by Dietrich Ayala
+                    if(isset($GLOBALS['_xh']['headers']['content-encoding']))
+                    {
+                        $GLOBALS['_xh']['headers']['content-encoding'] = str_replace('x-', '', $GLOBALS['_xh']['headers']['content-encoding']);
+                        if($GLOBALS['_xh']['headers']['content-encoding'] == 'deflate' || $GLOBALS['_xh']['headers']['content-encoding'] == 'gzip')
+                        {
+                            // if decoding works, use it. else assume data wasn't gzencoded
+                            if(function_exists('gzinflate'))
+                            {
+                                if($GLOBALS['_xh']['headers']['content-encoding'] == 'deflate' && $degzdata = @gzuncompress($data))
+                                {
+                                    $data = $degzdata;
+                                    if($this->debug)
+                                    print "<PRE>---INFLATED RESPONSE---[".strlen($data)." chars]---\n" . htmlentities($data) . "\n---END---</PRE>";
+                                }
+                                elseif($GLOBALS['_xh']['headers']['content-encoding'] == 'gzip' && $degzdata = @gzinflate(substr($data, 10)))
+                                {
+                                    $data = $degzdata;
+                                    if($this->debug)
+                                    print "<PRE>---INFLATED RESPONSE---[".strlen($data)." chars]---\n" . htmlentities($data) . "\n---END---</PRE>";
+                                }
+                                else
+                                {
+                                    error_log('XML-RPC: xmlrpcmsg::parseResponse: errors occurred when trying to decode the deflated data received from server');
+                                    $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['decompress_fail'], $GLOBALS['xmlrpcstr']['decompress_fail']);
+                                    return $r;
+                                }
+                            }
+                            else
+                            {
+                                error_log('XML-RPC: xmlrpcmsg::parseResponse: the server sent deflated data. Your php install must have the Zlib extension compiled in to support this.');
+                                $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['cannot_decompress'], $GLOBALS['xmlrpcstr']['cannot_decompress']);
+                                return $r;
+                            }
+                        }
+                    }
+                } // end of 'if needed, de-chunk, re-inflate response'
+
+                // real stupid hack to avoid PHP 4 complaining about returning NULL by ref
+                $r = null;
+                $r =& $r;
+                return $r;
+        }
+
+        /**
+        * Parse the xmlrpc response contained in the string $data and return an xmlrpcresp object.
+        * @param string $data the xmlrpc response, eventually including http headers
+        * @param bool $headers_processed when true prevents parsing HTTP headers for interpretation of content-encoding and consequent decoding
+        * @param string $return_type decides return type, i.e. content of response->value(). Either 'xmlrpcvals', 'xml' or 'phpvals'
+        * @return xmlrpcresp
+        * @access public
+        */
+        function &parseResponse($data='', $headers_processed=false, $return_type='xmlrpcvals')
+        {
+            if($this->debug)
+            {
+                //by maHo, replaced htmlspecialchars with htmlentities
+                print "<PRE>---GOT---\n" . htmlentities($data) . "\n---END---\n</PRE>";
+            }
+
+            if($data == '')
+            {
+                error_log('XML-RPC: xmlrpcmsg::parseResponse: no response received from server.');
+                $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_data'], $GLOBALS['xmlrpcstr']['no_data']);
+                return $r;
+            }
+
+            $GLOBALS['_xh']=array();
+
+            $raw_data = $data;
+            // parse the HTTP headers of the response, if present, and separate them from data
+            if(substr($data, 0, 4) == 'HTTP')
+            {
+                $r =& $this->parseResponseHeaders($data, $headers_processed);
+                if ($r)
+                {
+                    // failed processing of HTTP response headers
+                    // save into response obj the full payload received, for debugging
+                    $r->raw_data = $data;
+                    return $r;
+                }
+            }
+            else
+            {
+                $GLOBALS['_xh']['headers'] = array();
+                $GLOBALS['_xh']['cookies'] = array();
+            }
+
+            if($this->debug)
+            {
+                $start = strpos($data, '<!-- SERVER DEBUG INFO (BASE64 ENCODED):');
+                if ($start)
+                {
+                    $start += strlen('<!-- SERVER DEBUG INFO (BASE64 ENCODED):');
+                    $end = strpos($data, '-->', $start);
+                    $comments = substr($data, $start, $end-$start);
+                    print "<PRE>---SERVER DEBUG INFO (DECODED) ---\n\t".htmlentities(str_replace("\n", "\n\t", base64_decode($comments)))."\n---END---\n</PRE>";
+                }
+            }
+
+            // be tolerant of extra whitespace in response body
+            $data = trim($data);
+
+            /// @todo return an error msg if $data=='' ?
+
+            // be tolerant of junk after methodResponse (e.g. javascript ads automatically inserted by free hosts)
+            // idea from Luca Mariano <luca.mariano@email.it> originally in PEARified version of the lib
+            $bd = false;
+            // Poor man's version of strrpos for php 4...
+            $pos = strpos($data, '</methodResponse>');
+            while($pos || is_int($pos))
+            {
+                $bd = $pos+17;
+                $pos = strpos($data, '</methodResponse>', $bd);
+            }
+            if($bd)
+            {
+                $data = substr($data, 0, $bd);
+            }
+
+            // if user wants back raw xml, give it to him
+            if ($return_type == 'xml')
+            {
+                $r =& new xmlrpcresp($data, 0, '', 'xml');
+                $r->hdrs = $GLOBALS['_xh']['headers'];
+                $r->_cookies = $GLOBALS['_xh']['cookies'];
+                $r->raw_data = $raw_data;
+                return $r;
+            }
+
+            // try to 'guestimate' the character encoding of the received response
+            $resp_encoding = guess_encoding(@$GLOBALS['_xh']['headers']['content-type'], $data);
+
+            $GLOBALS['_xh']['ac']='';
+            //$GLOBALS['_xh']['qt']=''; //unused...
+            $GLOBALS['_xh']['stack'] = array();
+            $GLOBALS['_xh']['valuestack'] = array();
+            $GLOBALS['_xh']['isf']=0; // 0 = OK, 1 for xmlrpc fault responses, 2 = invalid xmlrpc
+            $GLOBALS['_xh']['isf_reason']='';
+            $GLOBALS['_xh']['rt']=''; // 'methodcall or 'methodresponse'
+
+            // if response charset encoding is not known / supported, try to use
+            // the default encoding and parse the xml anyway, but log a warning...
+            if (!in_array($resp_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
+            // the following code might be better for mb_string enabled installs, but
+            // makes the lib about 200% slower...
+            //if (!is_valid_charset($resp_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
+            {
+                error_log('XML-RPC: xmlrpcmsg::parseResponse: invalid charset encoding of received response: '.$resp_encoding);
+                $resp_encoding = $GLOBALS['xmlrpc_defencoding'];
+            }
+            $parser = xml_parser_create($resp_encoding);
+            xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
+            // G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell
+            // the xml parser to give us back data in the expected charset
+            xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
+
+            if ($return_type == 'phpvals')
+            {
+                xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee_fast');
+            }
+            else
+            {
+                xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');
+            }
+
+            xml_set_character_data_handler($parser, 'xmlrpc_cd');
+            xml_set_default_handler($parser, 'xmlrpc_dh');
+
+            // first error check: xml not well formed
+            if(!xml_parse($parser, $data, count($data)))
+            {
+                // thanks to Peter Kocks <peter.kocks@baygate.com>
+                if((xml_get_current_line_number($parser)) == 1)
+                {
+                    $errstr = 'XML error at line 1, check URL';
+                }
+                else
+                {
+                    $errstr = sprintf('XML error: %s at line %d, column %d',
+                        xml_error_string(xml_get_error_code($parser)),
+                        xml_get_current_line_number($parser), xml_get_current_column_number($parser));
+                }
+                error_log($errstr);
+                $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'], $GLOBALS['xmlrpcstr']['invalid_return'].' ('.$errstr.')');
+                xml_parser_free($parser);
+                if($this->debug)
+                {
+                    print $errstr;
+                }
+                $r->hdrs = $GLOBALS['_xh']['headers'];
+                $r->_cookies = $GLOBALS['_xh']['cookies'];
+                $r->raw_data = $raw_data;
+                return $r;
+            }
+            xml_parser_free($parser);
+            // second error check: xml well formed but not xml-rpc compliant
+            if ($GLOBALS['_xh']['isf'] > 1)
+            {
+                if ($this->debug)
+                {
+                    /// @todo echo something for user?
+                }
+
+                $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'],
+                $GLOBALS['xmlrpcstr']['invalid_return'] . ' ' . $GLOBALS['_xh']['isf_reason']);
+            }
+            // third error check: parsing of the response has somehow gone boink.
+            // NB: shall we omit this check, since we trust the parsing code?
+            elseif ($return_type == 'xmlrpcvals' && !is_object($GLOBALS['_xh']['value']))
+            {
+                // something odd has happened
+                // and it's time to generate a client side error
+                // indicating something odd went on
+                $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'],
+                    $GLOBALS['xmlrpcstr']['invalid_return']);
+            }
+            else
+            {
+                if ($this->debug)
+                {
+                    print "<PRE>---PARSED---\n";
+                    // somehow htmlentities chokes on var_export, and some full html string...
+                    //print htmlentitites(var_export($GLOBALS['_xh']['value'], true));
+                    print htmlspecialchars(var_export($GLOBALS['_xh']['value'], true));
+                    print "\n---END---</PRE>";
+                }
+
+                // note that using =& will raise an error if $GLOBALS['_xh']['st'] does not generate an object.
+                $v =& $GLOBALS['_xh']['value'];
+
+                if($GLOBALS['_xh']['isf'])
+                {
+                    /// @todo we should test here if server sent an int and a string,
+                    /// and/or coerce them into such...
+                    if ($return_type == 'xmlrpcvals')
+                    {
+                        $errno_v = $v->structmem('faultCode');
+                        $errstr_v = $v->structmem('faultString');
+                        $errno = $errno_v->scalarval();
+                        $errstr = $errstr_v->scalarval();
+                    }
+                    else
+                    {
+                        $errno = $v['faultCode'];
+                        $errstr = $v['faultString'];
+                    }
+
+                    if($errno == 0)
+                    {
+                        // FAULT returned, errno needs to reflect that
+                        $errno = -1;
+                    }
+
+                    $r =& new xmlrpcresp(0, $errno, $errstr);
+                }
+                else
+                {
+                    $r=&new xmlrpcresp($v, 0, '', $return_type);
+                }
+            }
+
+            $r->hdrs = $GLOBALS['_xh']['headers'];
+            $r->_cookies = $GLOBALS['_xh']['cookies'];
+            $r->raw_data = $raw_data;
+            return $r;
+        }
+    }
+
+    class xmlrpcval
+    {
+        var $me=array();
+        var $mytype=0;
+        var $_php_class=null;
+
+        /**
+        * @param mixed $val
+        * @param string $type any valid xmlrpc type name (lowercase). If null, 'string' is assumed
+        */
+        function xmlrpcval($val=-1, $type='')
+        {
+            /// @todo: optimization creep - do not call addXX, do it all inline.
+            /// downside: booleans will not be coerced anymore
+            if($val!==-1 || $type!='')
+            {
+                // optimization creep: inlined all work done by constructor
+                switch($type)
+                {
+                    case '':
+                        $this->mytype=1;
+                        $this->me['string']=$val;
+                        break;
+                    case 'i4':
+                    case 'int':
+                    case 'double':
+                    case 'string':
+                    case 'boolean':
+                    case 'dateTime.iso8601':
+                    case 'base64':
+                    case 'null':
+                        $this->mytype=1;
+                        $this->me[$type]=$val;
+                        break;
+                    case 'array':
+                        $this->mytype=2;
+                        $this->me['array']=$val;
+                        break;
+                    case 'struct':
+                        $this->mytype=3;
+                        $this->me['struct']=$val;
+                        break;
+                    default:
+                        error_log("XML-RPC: xmlrpcval::xmlrpcval: not a known type ($type)");
+                }
+                /*if($type=='')
+                {
+                    $type='string';
+                }
+                if($GLOBALS['xmlrpcTypes'][$type]==1)
+                {
+                    $this->addScalar($val,$type);
+                }
+                elseif($GLOBALS['xmlrpcTypes'][$type]==2)
+                {
+                    $this->addArray($val);
+                }
+                elseif($GLOBALS['xmlrpcTypes'][$type]==3)
+                {
+                    $this->addStruct($val);
+                }*/
+            }
+        }
+
+        /**
+        * Add a single php value to an (unitialized) xmlrpcval
+        * @param mixed $val
+        * @param string $type
+        * @return int 1 or 0 on failure
+        */
+        function addScalar($val, $type='string')
+        {
+            $typeof=@$GLOBALS['xmlrpcTypes'][$type];
+            if($typeof!=1)
+            {
+                error_log("XML-RPC: xmlrpcval::addScalar: not a scalar type ($type)");
+                return 0;
+            }
+
+            // coerce booleans into correct values
+            // NB: we should iether do it for datetimes, integers and doubles, too,
+            // or just plain remove this check, implemnted on booleans only...
+            if($type==$GLOBALS['xmlrpcBoolean'])
+            {
+                if(strcasecmp($val,'true')==0 || $val==1 || ($val==true && strcasecmp($val,'false')))
+                {
+                    $val=true;
+                }
+                else
+                {
+                    $val=false;
+                }
+            }
+
+            switch($this->mytype)
+            {
+                case 1:
+                    error_log('XML-RPC: xmlrpcval::addScalar: scalar xmlrpcval can have only one value');
+                    return 0;
+                case 3:
+                    error_log('XML-RPC: xmlrpcval::addScalar: cannot add anonymous scalar to struct xmlrpcval');
+                    return 0;
+                case 2:
+                    // we're adding a scalar value to an array here
+                    //$ar=$this->me['array'];
+                    //$ar[]=&new xmlrpcval($val, $type);
+                    //$this->me['array']=$ar;
+                    // Faster (?) avoid all the costly array-copy-by-val done here...
+                    $this->me['array'][]=&new xmlrpcval($val, $type);
+                    return 1;
+                default:
+                    // a scalar, so set the value and remember we're scalar
+                    $this->me[$type]=$val;
+                    $this->mytype=$typeof;
+                    return 1;
+            }
+        }
+
+        /**
+        * Add an array of xmlrpcval objects to an xmlrpcval
+        * @param array $vals
+        * @return int 1 or 0 on failure
+        * @access public
+        *
+        * @todo add some checking for $vals to be an array of xmlrpcvals?
+        */
+        function addArray($vals)
+        {
+            if($this->mytype==0)
+            {
+                $this->mytype=$GLOBALS['xmlrpcTypes']['array'];
+                $this->me['array']=$vals;
+                return 1;
+            }
+            elseif($this->mytype==2)
+            {
+                // we're adding to an array here
+                $this->me['array'] = array_merge($this->me['array'], $vals);
+                return 1;
+            }
+            else
+            {
+                error_log('XML-RPC: xmlrpcval::addArray: already initialized as a [' . $this->kindOf() . ']');
+                return 0;
+            }
+        }
+
+        /**
+        * Add an array of named xmlrpcval objects to an xmlrpcval
+        * @param array $vals
+        * @return int 1 or 0 on failure
+        * @access public
+        *
+        * @todo add some checking for $vals to be an array?
+        */
+        function addStruct($vals)
+        {
+            if($this->mytype==0)
+            {
+                $this->mytype=$GLOBALS['xmlrpcTypes']['struct'];
+                $this->me['struct']=$vals;
+                return 1;
+            }
+            elseif($this->mytype==3)
+            {
+                // we're adding to a struct here
+                $this->me['struct'] = array_merge($this->me['struct'], $vals);
+                return 1;
+            }
+            else
+            {
+                error_log('XML-RPC: xmlrpcval::addStruct: already initialized as a [' . $this->kindOf() . ']');
+                return 0;
+            }
+        }
+
+        // poor man's version of print_r ???
+        // DEPRECATED!
+        function dump($ar)
+        {
+            foreach($ar as $key => $val)
+            {
+                echo "$key => $val<br />";
+                if($key == 'array')
+                {
+                    while(list($key2, $val2) = each($val))
+                    {
+                        echo "-- $key2 => $val2<br />";
+                    }
+                }
+            }
+        }
+
+        /**
+        * Returns a string containing "struct", "array" or "scalar" describing the base type of the value
+        * @return string
+        * @access public
+        */
+        function kindOf()
+        {
+            switch($this->mytype)
+            {
+                case 3:
+                    return 'struct';
+                    break;
+                case 2:
+                    return 'array';
+                    break;
+                case 1:
+                    return 'scalar';
+                    break;
+                default:
+                    return 'undef';
+            }
+        }
+
+        /**
+        * @access private
+        */
+        function serializedata($typ, $val, $charset_encoding='')
+        {
+            $rs='';
+            switch(@$GLOBALS['xmlrpcTypes'][$typ])
+            {
+                case 1:
+                    switch($typ)
+                    {
+                        case $GLOBALS['xmlrpcBase64']:
+                            $rs.="<${typ}>" . base64_encode($val) . "</${typ}>";
+                            break;
+                        case $GLOBALS['xmlrpcBoolean']:
+                            $rs.="<${typ}>" . ($val ? '1' : '0') . "</${typ}>";
+                            break;
+                        case $GLOBALS['xmlrpcString']:
+                            // G. Giunta 2005/2/13: do NOT use htmlentities, since
+                            // it will produce named html entities, which are invalid xml
+                            $rs.="<${typ}>" . xmlrpc_encode_entitites($val, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding). "</${typ}>";
+                            break;
+                        case $GLOBALS['xmlrpcInt']:
+                        case $GLOBALS['xmlrpcI4']:
+                            $rs.="<${typ}>".(int)$val."</${typ}>";
+                            break;
+                        case $GLOBALS['xmlrpcDouble']:
+                            $rs.="<${typ}>".(double)$val."</${typ}>";
+                            break;
+                        case $GLOBALS['xmlrpcNull']:
+                            $rs.="<nil/>";
+                            break;
+                        default:
+                            // no standard type value should arrive here, but provide a possibility
+                            // for xmlrpcvals of unknown type...
+                            $rs.="<${typ}>${val}</${typ}>";
+                    }
+                    break;
+                case 3:
+                    // struct
+                    if ($this->_php_class)
+                    {
+                        $rs.='<struct php_class="' . $this->_php_class . "\">\n";
+                    }
+                    else
+                    {
+                        $rs.="<struct>\n";
+                    }
+                    foreach($val as $key2 => $val2)
+                    {
+                        $rs.='<member><name>'.xmlrpc_encode_entitites($key2, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding)."</name>\n";
+                        //$rs.=$this->serializeval($val2);
+                        $rs.=$val2->serialize($charset_encoding);
+                        $rs.="</member>\n";
+                    }
+                    $rs.='</struct>';
+                    break;
+                case 2:
+                    // array
+                    $rs.="<array>\n<data>\n";
+                    for($i=0; $i<count($val); $i++)
+                    {
+                        //$rs.=$this->serializeval($val[$i]);
+                        $rs.=$val[$i]->serialize($charset_encoding);
+                    }
+                    $rs.="</data>\n</array>";
+                    break;
+                default:
+                    break;
+            }
+            return $rs;
+        }
+
+        /**
+        * Returns xml representation of the value. XML prologue not included
+        * @param string $charset_encoding the charset to be used for serialization. if null, US-ASCII is assumed
+        * @return string
+        * @access public
+        */
+        function serialize($charset_encoding='')
+        {
+            // add check? slower, but helps to avoid recursion in serializing broken xmlrpcvals...
+            //if (is_object($o) && (get_class($o) == 'xmlrpcval' || is_subclass_of($o, 'xmlrpcval')))
+            //{
+                reset($this->me);
+                list($typ, $val) = each($this->me);
+                return '<value>' . $this->serializedata($typ, $val, $charset_encoding) . "</value>\n";
+            //}
+        }
+
+        // DEPRECATED
+        function serializeval($o)
+        {
+            // add check? slower, but helps to avoid recursion in serializing broken xmlrpcvals...
+            //if (is_object($o) && (get_class($o) == 'xmlrpcval' || is_subclass_of($o, 'xmlrpcval')))
+            //{
+                $ar=$o->me;
+                reset($ar);
+                list($typ, $val) = each($ar);
+                return '<value>' . $this->serializedata($typ, $val) . "</value>\n";
+            //}
+        }
+
+        /**
+        * Checks wheter a struct member with a given name is present.
+        * Works only on xmlrpcvals of type struct.
+        * @param string $m the name of the struct member to be looked up
+        * @return boolean
+        * @access public
+        */
+        function structmemexists($m)
+        {
+            return array_key_exists($m, $this->me['struct']);
+        }
+
+        /**
+        * Returns the value of a given struct member (an xmlrpcval object in itself).
+        * Will raise a php warning if struct member of given name does not exist
+        * @param string $m the name of the struct member to be looked up
+        * @return xmlrpcval
+        * @access public
+        */
+        function structmem($m)
+        {
+            return $this->me['struct'][$m];
+        }
+
+        /**
+        * Reset internal pointer for xmlrpcvals of type struct.
+        * @access public
+        */
+        function structreset()
+        {
+            reset($this->me['struct']);
+        }
+
+        /**
+        * Return next member element for xmlrpcvals of type struct.
+        * @return xmlrpcval
+        * @access public
+        */
+        function structeach()
+        {
+            return each($this->me['struct']);
+        }
+
+        // DEPRECATED! this code looks like it is very fragile and has not been fixed
+        // for a long long time. Shall we remove it for 2.0?
+        function getval()
+        {
+            // UNSTABLE
+            reset($this->me);
+            list($a,$b)=each($this->me);
+            // contributed by I Sofer, 2001-03-24
+            // add support for nested arrays to scalarval
+            // i've created a new method here, so as to
+            // preserve back compatibility
+
+            if(is_array($b))
+            {
+                @reset($b);
+                while(list($id,$cont) = @each($b))
+                {
+                    $b[$id] = $cont->scalarval();
+                }
+            }
+
+            // add support for structures directly encoding php objects
+            if(is_object($b))
+            {
+                $t = get_object_vars($b);
+                @reset($t);
+                while(list($id,$cont) = @each($t))
+                {
+                    $t[$id] = $cont->scalarval();
+                }
+                @reset($t);
+                while(list($id,$cont) = @each($t))
+                {
+                    @$b->$id = $cont;
+                }
+            }
+            // end contrib
+            return $b;
+        }
+
+        /**
+        * Returns the value of a scalar xmlrpcval
+        * @return mixed
+        * @access public
+        */
+        function scalarval()
+        {
+            reset($this->me);
+            list(,$b)=each($this->me);
+            return $b;
+        }
+
+        /**
+        * Returns the type of the xmlrpcval.
+        * For integers, 'int' is always returned in place of 'i4'
+        * @return string
+        * @access public
+        */
+        function scalartyp()
+        {
+            reset($this->me);
+            list($a,)=each($this->me);
+            if($a==$GLOBALS['xmlrpcI4'])
+            {
+                $a=$GLOBALS['xmlrpcInt'];
+            }
+            return $a;
+        }
+
+        /**
+        * Returns the m-th member of an xmlrpcval of struct type
+        * @param integer $m the index of the value to be retrieved (zero based)
+        * @return xmlrpcval
+        * @access public
+        */
+        function arraymem($m)
+        {
+            return $this->me['array'][$m];
+        }
+
+        /**
+        * Returns the number of members in an xmlrpcval of array type
+        * @return integer
+        * @access public
+        */
+        function arraysize()
+        {
+            return count($this->me['array']);
+        }
+
+        /**
+        * Returns the number of members in an xmlrpcval of struct type
+        * @return integer
+        * @access public
+        */
+        function structsize()
+        {
+            return count($this->me['struct']);
+        }
+    }
+
+
+    // date helpers
+
+    /**
+    * Given a timestamp, return the corresponding ISO8601 encoded string.
+    *
+    * Really, timezones ought to be supported
+    * but the XML-RPC spec says:
+    *
+    * "Don't assume a timezone. It should be specified by the server in its
+    * documentation what assumptions it makes about timezones."
+    *
+    * These routines always assume localtime unless
+    * $utc is set to 1, in which case UTC is assumed
+    * and an adjustment for locale is made when encoding
+    *
+    * @param int $timet (timestamp)
+    * @param int $utc (0 or 1)
+    * @return string
+    */
+    function iso8601_encode($timet, $utc=0)
+    {
+        if(!$utc)
+        {
+            $t=strftime("%Y%m%dT%H:%M:%S", $timet);
+        }
+        else
+        {
+            if(function_exists('gmstrftime'))
+            {
+                // gmstrftime doesn't exist in some versions
+                // of PHP
+                $t=gmstrftime("%Y%m%dT%H:%M:%S", $timet);
+            }
+            else
+            {
+                $t=strftime("%Y%m%dT%H:%M:%S", $timet-date('Z'));
+            }
+        }
+        return $t;
+    }
+
+    /**
+    * Given an ISO8601 date string, return a timet in the localtime, or UTC
+    * @param string $idate
+    * @param int $utc either 0 or 1
+    * @return int (datetime)
+    */
+    function iso8601_decode($idate, $utc=0)
+    {
+        $t=0;
+        if(preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})/', $idate, $regs))
+        {
+            if($utc)
+            {
+                $t=gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
+            }
+            else
+            {
+                $t=mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
+            }
+        }
+        return $t;
+    }
+
+    /**
+    * Takes an xmlrpc value in PHP xmlrpcval object format and translates it into native PHP types.
+    *
+    * Works with xmlrpc message objects as input, too.
+    *
+    * Given proper options parameter, can rebuild generic php object instances
+    * (provided those have been encoded to xmlrpc format using a corresponding
+    * option in php_xmlrpc_encode())
+    * PLEASE NOTE that rebuilding php objects involves calling their constructor function.
+    * This means that the remote communication end can decide which php code will
+    * get executed on your server, leaving the door possibly open to 'php-injection'
+    * style of attacks (provided you have some classes defined on your server that
+    * might wreak havoc if instances are built outside an appropriate context).
+    * Make sure you trust the remote server/client before eanbling this!
+    *
+    * @author Dan Libby (dan@libby.com)
+    *
+    * @param xmlrpcval $xmlrpc_val
+    * @param array $options if 'decode_php_objs' is set in the options array, xmlrpc structs can be decoded into php objects
+    * @return mixed
+    */
+    function php_xmlrpc_decode($xmlrpc_val, $options=array())
+    {
+        switch($xmlrpc_val->kindOf())
+        {
+            case 'scalar':
+                if (in_array('extension_api', $options))
+                {
+                    reset($xmlrpc_val->me);
+                    list($typ,$val) = each($xmlrpc_val->me);
+                    switch ($typ)
+                    {
+                        case 'dateTime.iso8601':
+                            $xmlrpc_val->scalar = $val;
+                            $xmlrpc_val->xmlrpc_type = 'datetime';
+                            $xmlrpc_val->timestamp = iso8601_decode($val);
+                            return $xmlrpc_val;
+                        case 'base64':
+                            $xmlrpc_val->scalar = $val;
+                            $xmlrpc_val->type = $typ;
+                            return $xmlrpc_val;
+                        default:
+                            return $xmlrpc_val->scalarval();
+                    }
+                }
+                return $xmlrpc_val->scalarval();
+            case 'array':
+                $size = $xmlrpc_val->arraysize();
+                $arr = array();
+                for($i = 0; $i < $size; $i++)
+                {
+                    $arr[] = php_xmlrpc_decode($xmlrpc_val->arraymem($i), $options);
+                }
+                return $arr;
+            case 'struct':
+                $xmlrpc_val->structreset();
+                // If user said so, try to rebuild php objects for specific struct vals.
+                /// @todo should we raise a warning for class not found?
+                // shall we check for proper subclass of xmlrpcval instead of
+                // presence of _php_class to detect what we can do?
+                if (in_array('decode_php_objs', $options) && $xmlrpc_val->_php_class != ''
+                    && class_exists($xmlrpc_val->_php_class))
+                {
+                    $obj = @new $xmlrpc_val->_php_class;
+                    while(list($key,$value)=$xmlrpc_val->structeach())
+                    {
+                        $obj->$key = php_xmlrpc_decode($value, $options);
+                    }
+                    return $obj;
+                }
+                else
+                {
+                    $arr = array();
+                    while(list($key,$value)=$xmlrpc_val->structeach())
+                    {
+                        $arr[$key] = php_xmlrpc_decode($value, $options);
+                    }
+                    return $arr;
+                }
+            case 'msg':
+                $paramcount = $xmlrpc_val->getNumParams();
+                $arr = array();
+                for($i = 0; $i < $paramcount; $i++)
+                {
+                    $arr[] = php_xmlrpc_decode($xmlrpc_val->getParam($i));
+                }
+                return $arr;
+            }
+    }
+
+    // This constant left here only for historical reasons...
+    // it was used to decide if we have to define xmlrpc_encode on our own, but
+    // we do not do it anymore
+    if(function_exists('xmlrpc_decode'))
+    {
+        define('XMLRPC_EPI_ENABLED','1');
+    }
+    else
+    {
+        define('XMLRPC_EPI_ENABLED','0');
+    }
+
+    /**
+    * Takes native php types and encodes them into xmlrpc PHP object format.
+    * It will not re-encode xmlrpcval objects.
+    *
+    * Feature creep -- could support more types via optional type argument
+    * (string => datetime support has been added, ??? => base64 not yet)
+    *
+    * If given a proper options parameter, php object instances will be encoded
+    * into 'special' xmlrpc values, that can later be decoded into php objects
+    * by calling php_xmlrpc_decode() with a corresponding option
+    *
+    * @author Dan Libby (dan@libby.com)
+    *
+    * @param mixed $php_val the value to be converted into an xmlrpcval object
+    * @param array $options can include 'encode_php_objs', 'auto_dates', 'null_extension' or 'extension_api'
+    * @return xmlrpcval
+    */
+    function &php_xmlrpc_encode($php_val, $options=array())
+    {
+        $type = gettype($php_val);
+        switch($type)
+        {
+            case 'string':
+                if (in_array('auto_dates', $options) && preg_match('/^[0-9]{8}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $php_val))
+                    $xmlrpc_val =& new xmlrpcval($php_val, $GLOBALS['xmlrpcDateTime']);
+                else
+                    $xmlrpc_val =& new xmlrpcval($php_val, $GLOBALS['xmlrpcString']);
+                break;
+            case 'integer':
+                $xmlrpc_val =& new xmlrpcval($php_val, $GLOBALS['xmlrpcInt']);
+                break;
+            case 'double':
+                $xmlrpc_val =& new xmlrpcval($php_val, $GLOBALS['xmlrpcDouble']);
+                break;
+                // <G_Giunta_2001-02-29>
+                // Add support for encoding/decoding of booleans, since they are supported in PHP
+            case 'boolean':
+                $xmlrpc_val =& new xmlrpcval($php_val, $GLOBALS['xmlrpcBoolean']);
+                break;
+                // </G_Giunta_2001-02-29>
+            case 'array':
+                // PHP arrays can be encoded to either xmlrpc structs or arrays,
+                // depending on wheter they are hashes or plain 0..n integer indexed
+                // A shorter one-liner would be
+                // $tmp = array_diff(array_keys($php_val), range(0, count($php_val)-1));
+                // but execution time skyrockets!
+                $j = 0;
+                $arr = array();
+                $ko = false;
+                foreach($php_val as $key => $val)
+                {
+                    $arr[$key] =& php_xmlrpc_encode($val, $options);
+                    if(!$ko && $key !== $j)
+                    {
+                        $ko = true;
+                    }
+                    $j++;
+                }
+                if($ko)
+                {
+                    $xmlrpc_val =& new xmlrpcval($arr, $GLOBALS['xmlrpcStruct']);
+                }
+                else
+                {
+                    $xmlrpc_val =& new xmlrpcval($arr, $GLOBALS['xmlrpcArray']);
+                }
+                break;
+            case 'object':
+                if(is_a($php_val, 'xmlrpcval'))
+                {
+                    $xmlrpc_val = $php_val;
+                }
+                else
+                {
+                    $arr = array();
+                    while(list($k,$v) = each($php_val))
+                    {
+                        $arr[$k] = php_xmlrpc_encode($v, $options);
+                    }
+                    $xmlrpc_val =& new xmlrpcval($arr, $GLOBALS['xmlrpcStruct']);
+                    if (in_array('encode_php_objs', $options))
+                    {
+                        // let's save original class name into xmlrpcval:
+                        // might be useful later on...
+                        $xmlrpc_val->_php_class = get_class($php_val);
+                    }
+                }
+                break;
+            case 'NULL':
+                if (in_array('extension_api', $options))
+                {
+                    $xmlrpc_val =& new xmlrpcval('', $GLOBALS['xmlrpcString']);
+                }
+                if (in_array('null_extension', $options))
+                {
+                    $xmlrpc_val =& new xmlrpcval('', $GLOBALS['xmlrpcNull']);
+                }
+                else
+                {
+                    $xmlrpc_val =& new xmlrpcval();
+                }
+                break;
+            case 'resource':
+                if (in_array('extension_api', $options))
+                {
+                    $xmlrpc_val =& new xmlrpcval((int)$php_val, $GLOBALS['xmlrpcInt']);
+                }
+                else
+                {
+                    $xmlrpc_val =& new xmlrpcval();
+                }
+            // catch "user function", "unknown type"
+            default:
+                // giancarlo pinerolo <ping@alt.it>
+                // it has to return
+                // an empty object in case, not a boolean.
+                $xmlrpc_val =& new xmlrpcval();
+                break;
+            }
+            return $xmlrpc_val;
+    }
+
+    /**
+    * Convert the xml representation of a method response, method request or single
+    * xmlrpc value into the appropriate object (a.k.a. deserialize)
+    * @param string $xml_val
+    * @param array $options
+    * @return mixed false on error, or an instance of either xmlrpcval, xmlrpcmsg or xmlrpcresp
+    */
+    function php_xmlrpc_decode_xml($xml_val, $options=array())
+    {
+        $GLOBALS['_xh'] = array();
+        $GLOBALS['_xh']['ac'] = '';
+        $GLOBALS['_xh']['stack'] = array();
+        $GLOBALS['_xh']['valuestack'] = array();
+        $GLOBALS['_xh']['params'] = array();
+        $GLOBALS['_xh']['pt'] = array();
+        $GLOBALS['_xh']['isf'] = 0;
+        $GLOBALS['_xh']['isf_reason'] = '';
+        $GLOBALS['_xh']['method'] = false;
+        $GLOBALS['_xh']['rt'] = '';
+        /// @todo 'guestimate' encoding
+        $parser = xml_parser_create();
+        xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
+        xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
+        xml_set_element_handler($parser, 'xmlrpc_se_any', 'xmlrpc_ee');
+        xml_set_character_data_handler($parser, 'xmlrpc_cd');
+        xml_set_default_handler($parser, 'xmlrpc_dh');
+        if(!xml_parse($parser, $xml_val, 1))
+        {
+            $errstr = sprintf('XML error: %s at line %d, column %d',
+                        xml_error_string(xml_get_error_code($parser)),
+                        xml_get_current_line_number($parser), xml_get_current_column_number($parser));
+            error_log($errstr);
+            xml_parser_free($parser);
+            return false;
+        }
+        xml_parser_free($parser);
+        if ($GLOBALS['_xh']['isf'] > 1) // test that $GLOBALS['_xh']['value'] is an obj, too???
+        {
+            error_log($GLOBALS['_xh']['isf_reason']);
+            return false;
+        }
+        switch ($GLOBALS['_xh']['rt'])
+        {
+            case 'methodresponse':
+                $v =& $GLOBALS['_xh']['value'];
+                if ($GLOBALS['_xh']['isf'] == 1)
+                {
+                    $vc = $v->structmem('faultCode');
+                    $vs = $v->structmem('faultString');
+                    $r =& new xmlrpcresp(0, $vc->scalarval(), $vs->scalarval());
+                }
+                else
+                {
+                    $r =& new xmlrpcresp($v);
+                }
+                return $r;
+            case 'methodcall':
+                $m =& new xmlrpcmsg($GLOBALS['_xh']['method']);
+                for($i=0; $i < count($GLOBALS['_xh']['params']); $i++)
+                {
+                    $m->addParam($GLOBALS['_xh']['params'][$i]);
+                }
+                return $m;
+            case 'value':
+                return $GLOBALS['_xh']['value'];
+            default:
+                return false;
+        }
+    }
+
+    /**
+    * decode a string that is encoded w/ "chunked" transfer encoding
+    * as defined in rfc2068 par. 19.4.6
+    * code shamelessly stolen from nusoap library by Dietrich Ayala
+    *
+    * @param string $buffer the string to be decoded
+    * @return string
+    */
+    function decode_chunked($buffer)
+    {
+        // length := 0
+        $length = 0;
+        $new = '';
+
+        // read chunk-size, chunk-extension (if any) and crlf
+        // get the position of the linebreak
+        $chunkend = strpos($buffer,"\r\n") + 2;
+        $temp = substr($buffer,0,$chunkend);
+        $chunk_size = hexdec( trim($temp) );
+        $chunkstart = $chunkend;
+        while($chunk_size > 0)
+        {
+            $chunkend = strpos($buffer, "\r\n", $chunkstart + $chunk_size);
+
+            // just in case we got a broken connection
+            if($chunkend == false)
+            {
+                $chunk = substr($buffer,$chunkstart);
+                // append chunk-data to entity-body
+                $new .= $chunk;
+                $length += strlen($chunk);
+                break;
+            }
+
+            // read chunk-data and crlf
+            $chunk = substr($buffer,$chunkstart,$chunkend-$chunkstart);
+            // append chunk-data to entity-body
+            $new .= $chunk;
+            // length := length + chunk-size
+            $length += strlen($chunk);
+            // read chunk-size and crlf
+            $chunkstart = $chunkend + 2;
+
+            $chunkend = strpos($buffer,"\r\n",$chunkstart)+2;
+            if($chunkend == false)
+            {
+                break; //just in case we got a broken connection
+            }
+            $temp = substr($buffer,$chunkstart,$chunkend-$chunkstart);
+            $chunk_size = hexdec( trim($temp) );
+            $chunkstart = $chunkend;
+        }
+        return $new;
+    }
+
+    /**
+    * xml charset encoding guessing helper function.
+    * Tries to determine the charset encoding of an XML chunk
+    * received over HTTP.
+    * NB: according to the spec (RFC 3023, if text/xml content-type is received over HTTP without a content-type,
+    * we SHOULD assume it is strictly US-ASCII. But we try to be more tolerant of unconforming (legacy?) clients/servers,
+    * which will be most probably using UTF-8 anyway...
+    *
+    * @param string $httpheaders the http Content-type header
+    * @param string $xmlchunk xml content buffer
+    * @param string $encoding_prefs comma separated list of character encodings to be used as default (when mb extension is enabled)
+    *
+    * @todo explore usage of mb_http_input(): does it detect http headers + post data? if so, use it instead of hand-detection!!!
+    */
+    function guess_encoding($httpheader='', $xmlchunk='', $encoding_prefs=null)
+    {
+        // discussion: see http://www.yale.edu/pclt/encoding/
+        // 1 - test if encoding is specified in HTTP HEADERS
+
+        //Details:
+        // LWS:           (\13\10)?( |\t)+
+        // token:         (any char but excluded stuff)+
+        // header:        Content-type = ...; charset=value(; ...)*
+        //   where value is of type token, no LWS allowed between 'charset' and value
+        // Note: we do not check for invalid chars in VALUE:
+        //   this had better be done using pure ereg as below
+
+        /// @todo this test will pass if ANY header has charset specification, not only Content-Type. Fix it?
+        $matches = array();
+        if(preg_match('/;\s*charset=([^;]+)/i', $httpheader, $matches))
+        {
+            return strtoupper(trim($matches[1]));
+        }
+
+        // 2 - scan the first bytes of the data for a UTF-16 (or other) BOM pattern
+        //     (source: http://www.w3.org/TR/2000/REC-xml-20001006)
+        //     NOTE: actually, according to the spec, even if we find the BOM and determine
+        //     an encoding, we should check if there is an encoding specified
+        //     in the xml declaration, and verify if they match.
+        /// @todo implement check as described above?
+        /// @todo implement check for first bytes of string even without a BOM? (It sure looks harder than for cases WITH a BOM)
+        if(preg_match('/^(\x00\x00\xFE\xFF|\xFF\xFE\x00\x00|\x00\x00\xFF\xFE|\xFE\xFF\x00\x00)/', $xmlchunk))
+        {
+            return 'UCS-4';
+        }
+        elseif(preg_match('/^(\xFE\xFF|\xFF\xFE)/', $xmlchunk))
+        {
+            return 'UTF-16';
+        }
+        elseif(preg_match('/^(\xEF\xBB\xBF)/', $xmlchunk))
+        {
+            return 'UTF-8';
+        }
+
+        // 3 - test if encoding is specified in the xml declaration
+        // Details:
+        // SPACE:         (#x20 | #x9 | #xD | #xA)+ === [ \x9\xD\xA]+
+        // EQ:            SPACE?=SPACE? === [ \x9\xD\xA]*=[ \x9\xD\xA]*
+        if (preg_match('/^<\?xml\s+version\s*=\s*'. "((?:\"[a-zA-Z0-9_.:-]+\")|(?:'[a-zA-Z0-9_.:-]+'))".
+            '\s+encoding\s*=\s*' . "((?:\"[A-Za-z][A-Za-z0-9._-]*\")|(?:'[A-Za-z][A-Za-z0-9._-]*'))/",
+            $xmlchunk, $matches))
+        {
+            return strtoupper(substr($matches[2], 1, -1));
+        }
+
+        // 4 - if mbstring is available, let it do the guesswork
+        // NB: we favour finding an encoding that is compatible with what we can process
+        if(extension_loaded('mbstring'))
+        {
+            if($encoding_prefs)
+            {
+                $enc = mb_detect_encoding($xmlchunk, $encoding_prefs);
+            }
+            else
+            {
+                $enc = mb_detect_encoding($xmlchunk);
+            }
+            // NB: mb_detect likes to call it ascii, xml parser likes to call it US_ASCII...
+            // IANA also likes better US-ASCII, so go with it
+            if($enc == 'ASCII')
+            {
+                $enc = 'US-'.$enc;
+            }
+            return $enc;
+        }
+        else
+        {
+            // no encoding specified: as per HTTP1.1 assume it is iso-8859-1?
+            // Both RFC 2616 (HTTP 1.1) and 1945(http 1.0) clearly state that for text/xxx content types
+            // this should be the standard. And we should be getting text/xml as request and response.
+            // BUT we have to be backward compatible with the lib, which always used UTF-8 as default...
+            return $GLOBALS['xmlrpc_defencoding'];
+        }
+    }
+
+    /**
+    * Checks if a given charset encoding is present in a list of encodings or
+    * if it is a valid subset of any encoding in the list
+    * @param string $encoding charset to be tested
+    * @param mixed $validlist comma separated list of valid charsets (or array of charsets)
+    */
+    function is_valid_charset($encoding, $validlist)
+    {
+        $charset_supersets = array(
+            'US-ASCII' => array ('ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4',
+                'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8',
+                'ISO-8859-9', 'ISO-8859-10', 'ISO-8859-11', 'ISO-8859-12',
+                'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'UTF-8',
+                'EUC-JP', 'EUC-', 'EUC-KR', 'EUC-CN')
+        );
+        if (is_string($validlist))
+            $validlist = explode(',', $validlist);
+        if (@in_array(strtoupper($encoding), $validlist))
+            return true;
+        else
+        {
+            if (array_key_exists($encoding, $charset_supersets))
+                foreach ($validlist as $allowed)
+                    if (in_array($allowed, $charset_supersets[$encoding]))
+                        return true;
+                return false;
+        }
+    }
+
+?>
diff --git a/utf8/nucleus/libs/xmlrpcs.inc.php b/utf8/nucleus/libs/xmlrpcs.inc.php
new file mode 100755 (executable)
index 0000000..171e911
--- /dev/null
@@ -0,0 +1,1174 @@
+<?php
+// by Edd Dumbill (C) 1999-2002
+// <edd@usefulinc.com>
+// $Original: xmlrpcs.inc,v 1.66 2006/09/17 21:25:06 ggiunta Exp $
+// $Id$
+// $NucleusJP: xmlrpcs.inc.php,v 1.9.2.2 2007/09/07 07:04:24 kimitake Exp $
+
+// Copyright (c) 1999,2000,2002 Edd Dumbill.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    * Redistributions of source code must retain the above copyright
+//      notice, this list of conditions and the following disclaimer.
+//
+//    * Redistributions in binary form must reproduce the above
+//      copyright notice, this list of conditions and the following
+//      disclaimer in the documentation and/or other materials provided
+//      with the distribution.
+//
+//    * Neither the name of the "XML-RPC for PHP" nor the names of its
+//      contributors may be used to endorse or promote products derived
+//      from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+// OF THE POSSIBILITY OF SUCH DAMAGE.
+
+       // XML RPC Server class
+       // requires: xmlrpc.inc
+
+       $GLOBALS['xmlrpcs_capabilities'] = array(
+               // xmlrpc spec: always supported
+               'xmlrpc' => new xmlrpcval(array(
+                       'specUrl' => new xmlrpcval('http://www.xmlrpc.com/spec', 'string'),
+                       'specVersion' => new xmlrpcval(1, 'int')
+               ), 'struct'),
+               // if we support system.xxx functions, we always support multicall, too...
+               // Note that, as of 2006/09/17, the following URL does not respond anymore
+               'system.multicall' => new xmlrpcval(array(
+                       'specUrl' => new xmlrpcval('http://www.xmlrpc.com/discuss/msgReader$1208', 'string'),
+                       'specVersion' => new xmlrpcval(1, 'int')
+               ), 'struct'),
+               // introspection: version 2! we support 'mixed', too
+               'introspection' => new xmlrpcval(array(
+                       'specUrl' => new xmlrpcval('http://phpxmlrpc.sourceforge.net/doc-2/ch10.html', 'string'),
+                       'specVersion' => new xmlrpcval(2, 'int')
+               ), 'struct')
+       );
+
+       /* Functions that implement system.XXX methods of xmlrpc servers */
+       $_xmlrpcs_getCapabilities_sig=array(array($GLOBALS['xmlrpcStruct']));
+       $_xmlrpcs_getCapabilities_doc='This method lists all the capabilites that the XML-RPC server has: the (more or less standard) extensions to the xmlrpc spec that it adheres to';
+       $_xmlrpcs_getCapabilities_sdoc=array(array('list of capabilities, described as structs with a version number and url for the spec'));
+       function _xmlrpcs_getCapabilities($server, $m=null)
+       {
+               $outAr = $GLOBALS['xmlrpcs_capabilities'];
+               // NIL extension
+               if ($GLOBALS['xmlrpc_null_extension']) {
+                       $outAr['nil'] = new xmlrpcval(array(
+                               'specUrl' => new xmlrpcval('http://www.ontosys.com/xml-rpc/extensions.php', 'string'),
+                               'specVersion' => new xmlrpcval(1, 'int')
+                       ), 'struct');
+               }
+               return new xmlrpcresp(new xmlrpcval($outAr, 'struct'));
+       }
+
+       // listMethods: signature was either a string, or nothing.
+       // The useless string variant has been removed
+       $_xmlrpcs_listMethods_sig=array(array($GLOBALS['xmlrpcArray']));
+       $_xmlrpcs_listMethods_doc='This method lists all the methods that the XML-RPC server knows how to dispatch';
+       $_xmlrpcs_listMethods_sdoc=array(array('list of method names'));
+       function _xmlrpcs_listMethods($server, $m=null) // if called in plain php values mode, second param is missing
+       {
+
+               $outAr=array();
+               foreach($server->dmap as $key => $val)
+               {
+                       $outAr[]=&new xmlrpcval($key, 'string');
+               }
+               if($server->allow_system_funcs)
+               {
+                       foreach($GLOBALS['_xmlrpcs_dmap'] as $key => $val)
+                       {
+                               $outAr[]=&new xmlrpcval($key, 'string');
+                       }
+               }
+               return new xmlrpcresp(new xmlrpcval($outAr, 'array'));
+       }
+
+       $_xmlrpcs_methodSignature_sig=array(array($GLOBALS['xmlrpcArray'], $GLOBALS['xmlrpcString']));
+       $_xmlrpcs_methodSignature_doc='Returns an array of known signatures (an array of arrays) for the method name passed. If no signatures are known, returns a none-array (test for type != array to detect missing signature)';
+       $_xmlrpcs_methodSignature_sdoc=array(array('list of known signatures, each sig being an array of xmlrpc type names', 'name of method to be described'));
+       function _xmlrpcs_methodSignature($server, $m)
+       {
+               // let accept as parameter both an xmlrpcval or string
+               if (is_object($m))
+               {
+                       $methName=$m->getParam(0);
+                       $methName=$methName->scalarval();
+               }
+               else
+               {
+                       $methName=$m;
+               }
+               if(strpos($methName, "system.") === 0)
+               {
+                       $dmap=$GLOBALS['_xmlrpcs_dmap']; $sysCall=1;
+               }
+               else
+               {
+                       $dmap=$server->dmap; $sysCall=0;
+               }
+               if(isset($dmap[$methName]))
+               {
+                       if(isset($dmap[$methName]['signature']))
+                       {
+                               $sigs=array();
+                               foreach($dmap[$methName]['signature'] as $inSig)
+                               {
+                                       $cursig=array();
+                                       foreach($inSig as $sig)
+                                       {
+                                               $cursig[]=&new xmlrpcval($sig, 'string');
+                                       }
+                                       $sigs[]=&new xmlrpcval($cursig, 'array');
+                               }
+                               $r=&new xmlrpcresp(new xmlrpcval($sigs, 'array'));
+                       }
+                       else
+                       {
+                               // NB: according to the official docs, we should be returning a
+                               // "none-array" here, which means not-an-array
+                               $r=&new xmlrpcresp(new xmlrpcval('undef', 'string'));
+                       }
+               }
+               else
+               {
+                       $r=&new xmlrpcresp(0,$GLOBALS['xmlrpcerr']['introspect_unknown'], $GLOBALS['xmlrpcstr']['introspect_unknown']);
+               }
+               return $r;
+       }
+
+       $_xmlrpcs_methodHelp_sig=array(array($GLOBALS['xmlrpcString'], $GLOBALS['xmlrpcString']));
+       $_xmlrpcs_methodHelp_doc='Returns help text if defined for the method passed, otherwise returns an empty string';
+       $_xmlrpcs_methodHelp_sdoc=array(array('method description', 'name of the method to be described'));
+       function _xmlrpcs_methodHelp($server, $m)
+       {
+               // let accept as parameter both an xmlrpcval or string
+               if (is_object($m))
+               {
+                       $methName=$m->getParam(0);
+                       $methName=$methName->scalarval();
+               }
+               else
+               {
+                       $methName=$m;
+               }
+               if(strpos($methName, "system.") === 0)
+               {
+                       $dmap=$GLOBALS['_xmlrpcs_dmap']; $sysCall=1;
+               }
+               else
+               {
+                       $dmap=$server->dmap; $sysCall=0;
+               }
+               if(isset($dmap[$methName]))
+               {
+                       if(isset($dmap[$methName]['docstring']))
+                       {
+                               $r=&new xmlrpcresp(new xmlrpcval($dmap[$methName]['docstring']), 'string');
+                       }
+                       else
+                       {
+                               $r=&new xmlrpcresp(new xmlrpcval('', 'string'));
+                       }
+               }
+               else
+               {
+                       $r=&new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['introspect_unknown'], $GLOBALS['xmlrpcstr']['introspect_unknown']);
+               }
+               return $r;
+       }
+
+       $_xmlrpcs_multicall_sig = array(array($GLOBALS['xmlrpcArray'], $GLOBALS['xmlrpcArray']));
+       $_xmlrpcs_multicall_doc = 'Boxcar multiple RPC calls in one request. See http://www.xmlrpc.com/discuss/msgReader$1208 for details';
+       $_xmlrpcs_multicall_sdoc = array(array('list of response structs, where each struct has the usual members', 'list of calls, with each call being represented as a struct, with members "methodname" and "params"'));
+       function _xmlrpcs_multicall_error($err)
+       {
+               if(is_string($err))
+               {
+                       $str = $GLOBALS['xmlrpcstr']["multicall_${err}"];
+                       $code = $GLOBALS['xmlrpcerr']["multicall_${err}"];
+               }
+               else
+               {
+                       $code = $err->faultCode();
+                       $str = $err->faultString();
+               }
+               $struct = array();
+               $struct['faultCode'] =& new xmlrpcval($code, 'int');
+               $struct['faultString'] =& new xmlrpcval($str, 'string');
+               return new xmlrpcval($struct, 'struct');
+       }
+
+       function _xmlrpcs_multicall_do_call($server, $call)
+       {
+               if($call->kindOf() != 'struct')
+               {
+                       return _xmlrpcs_multicall_error('notstruct');
+               }
+               $methName = @$call->structmem('methodName');
+               if(!$methName)
+               {
+                       return _xmlrpcs_multicall_error('nomethod');
+               }
+               if($methName->kindOf() != 'scalar' || $methName->scalartyp() != 'string')
+               {
+                       return _xmlrpcs_multicall_error('notstring');
+               }
+               if($methName->scalarval() == 'system.multicall')
+               {
+                       return _xmlrpcs_multicall_error('recursion');
+               }
+
+               $params = @$call->structmem('params');
+               if(!$params)
+               {
+                       return _xmlrpcs_multicall_error('noparams');
+               }
+               if($params->kindOf() != 'array')
+               {
+                       return _xmlrpcs_multicall_error('notarray');
+               }
+               $numParams = $params->arraysize();
+
+               $msg =& new xmlrpcmsg($methName->scalarval());
+               for($i = 0; $i < $numParams; $i++)
+               {
+                       if(!$msg->addParam($params->arraymem($i)))
+                       {
+                               $i++;
+                               return _xmlrpcs_multicall_error(new xmlrpcresp(0,
+                                       $GLOBALS['xmlrpcerr']['incorrect_params'],
+                                       $GLOBALS['xmlrpcstr']['incorrect_params'] . ": probable xml error in param " . $i));
+                       }
+               }
+
+               $result = $server->execute($msg);
+
+               if($result->faultCode() != 0)
+               {
+                       return _xmlrpcs_multicall_error($result);               // Method returned fault.
+               }
+
+               return new xmlrpcval(array($result->value()), 'array');
+       }
+
+       function _xmlrpcs_multicall_do_call_phpvals($server, $call)
+       {
+               if(!is_array($call))
+               {
+                       return _xmlrpcs_multicall_error('notstruct');
+               }
+               if(!array_key_exists('methodName', $call))
+               {
+                       return _xmlrpcs_multicall_error('nomethod');
+               }
+               if (!is_string($call['methodName']))
+               {
+                       return _xmlrpcs_multicall_error('notstring');
+               }
+               if($call['methodName'] == 'system.multicall')
+               {
+                       return _xmlrpcs_multicall_error('recursion');
+               }
+               if(!array_key_exists('params', $call))
+               {
+                       return _xmlrpcs_multicall_error('noparams');
+               }
+               if(!is_array($call['params']))
+               {
+                       return _xmlrpcs_multicall_error('notarray');
+               }
+
+               // this is a real dirty and simplistic hack, since we might have received a
+               // base64 or datetime values, but they will be listed as strings here...
+               $numParams = count($call['params']);
+               $pt = array();
+               foreach($call['params'] as $val)
+                       $pt[] = php_2_xmlrpc_type(gettype($val));
+
+               $result = $server->execute($call['methodName'], $call['params'], $pt);
+
+               if($result->faultCode() != 0)
+               {
+                       return _xmlrpcs_multicall_error($result);               // Method returned fault.
+               }
+
+               return new xmlrpcval(array($result->value()), 'array');
+       }
+
+       function _xmlrpcs_multicall($server, $m)
+       {
+               $result = array();
+               // let accept a plain list of php parameters, beside a single xmlrpc msg object
+               if (is_object($m))
+               {
+                       $calls = $m->getParam(0);
+                       $numCalls = $calls->arraysize();
+                       for($i = 0; $i < $numCalls; $i++)
+                       {
+                               $call = $calls->arraymem($i);
+                               $result[$i] = _xmlrpcs_multicall_do_call($server, $call);
+                       }
+               }
+               else
+               {
+                       $numCalls=count($m);
+                       for($i = 0; $i < $numCalls; $i++)
+                       {
+                               $result[$i] = _xmlrpcs_multicall_do_call_phpvals($server, $m[$i]);
+                       }
+               }
+
+               return new xmlrpcresp(new xmlrpcval($result, 'array'));
+       }
+
+       $GLOBALS['_xmlrpcs_dmap']=array(
+               'system.listMethods' => array(
+                       'function' => '_xmlrpcs_listMethods',
+                       'signature' => $_xmlrpcs_listMethods_sig,
+                       'docstring' => $_xmlrpcs_listMethods_doc,
+                       'signature_docs' => $_xmlrpcs_listMethods_sdoc),
+               'system.methodHelp' => array(
+                       'function' => '_xmlrpcs_methodHelp',
+                       'signature' => $_xmlrpcs_methodHelp_sig,
+                       'docstring' => $_xmlrpcs_methodHelp_doc,
+                       'signature_docs' => $_xmlrpcs_methodHelp_sdoc),
+               'system.methodSignature' => array(
+                       'function' => '_xmlrpcs_methodSignature',
+                       'signature' => $_xmlrpcs_methodSignature_sig,
+                       'docstring' => $_xmlrpcs_methodSignature_doc,
+                       'signature_docs' => $_xmlrpcs_methodSignature_sdoc),
+               'system.multicall' => array(
+                       'function' => '_xmlrpcs_multicall',
+                       'signature' => $_xmlrpcs_multicall_sig,
+                       'docstring' => $_xmlrpcs_multicall_doc,
+                       'signature_docs' => $_xmlrpcs_multicall_sdoc),
+               'system.getCapabilities' => array(
+                       'function' => '_xmlrpcs_getCapabilities',
+                       'signature' => $_xmlrpcs_getCapabilities_sig,
+                       'docstring' => $_xmlrpcs_getCapabilities_doc,
+                       'signature_docs' => $_xmlrpcs_getCapabilities_sdoc)
+       );
+
+       $GLOBALS['_xmlrpcs_occurred_errors'] = '';
+       $GLOBALS['_xmlrpcs_prev_ehandler'] = '';
+       /**
+       * Error handler used to track errors that occur during server-side execution of PHP code.
+       * This allows to report back to the client whether an internal error has occurred or not
+       * using an xmlrpc response object, instead of letting the client deal with the html junk
+       * that a PHP execution error on the server generally entails.
+       *
+       * NB: in fact a user defined error handler can only handle WARNING, NOTICE and USER_* errors.
+       *
+       */
+       function _xmlrpcs_errorHandler($errcode, $errstring, $filename=null, $lineno=null, $context=null)
+       {
+               // obey the @ protocol
+               if (error_reporting() == 0)
+                       return;
+
+               //if($errcode != E_NOTICE && $errcode != E_WARNING && $errcode != E_USER_NOTICE && $errcode != E_USER_WARNING)
+               if($errcode != 2048) // do not use E_STRICT by name, since on PHP 4 it will not be defined
+               {
+                       $GLOBALS['_xmlrpcs_occurred_errors'] = $GLOBALS['_xmlrpcs_occurred_errors'] . $errstring . "\n";
+               }
+               // Try to avoid as much as possible disruption to the previous error handling
+               // mechanism in place
+               if($GLOBALS['_xmlrpcs_prev_ehandler'] == '')
+               {
+                       // The previous error handler was the default: all we should do is log error
+                       // to the default error log (if level high enough)
+                       if(ini_get('log_errors') && (intval(ini_get('error_reporting')) & $errcode))
+                       {
+                               error_log($errstring);
+                       }
+               }
+               else
+               {
+                       // Pass control on to previous error handler, trying to avoid loops...
+                       if($GLOBALS['_xmlrpcs_prev_ehandler'] != '_xmlrpcs_errorHandler')
+                       {
+                               // NB: this code will NOT work on php < 4.0.2: only 2 params were used for error handlers
+                               if(is_array($GLOBALS['_xmlrpcs_prev_ehandler']))
+                               {
+                                       $GLOBALS['_xmlrpcs_prev_ehandler'][0]->$GLOBALS['_xmlrpcs_prev_ehandler'][1]($errcode, $errstring, $filename, $lineno, $context);
+                               }
+                               else
+                               {
+                                       $GLOBALS['_xmlrpcs_prev_ehandler']($errcode, $errstring, $filename, $lineno, $context);
+                               }
+                       }
+               }
+       }
+
+       $GLOBALS['_xmlrpc_debuginfo']='';
+
+       /**
+       * Add a string to the debug info that can be later seralized by the server
+       * as part of the response message.
+       * Note that for best compatbility, the debug string should be encoded using
+       * the $GLOBALS['xmlrpc_internalencoding'] character set.
+       * @param string $m
+       * @access public
+       */
+       function xmlrpc_debugmsg($m)
+       {
+               $GLOBALS['_xmlrpc_debuginfo'] .= $m . "\n";
+       }
+
+       class xmlrpc_server
+       {
+               /// array defining php functions exposed as xmlrpc methods by this server
+               var $dmap=array();
+               /**
+               * Defines how functions in dmap will be invokde: either using an xmlrpc msg object
+               * or plain php values.
+               * valid strings are 'xmlrpcvals', 'phpvals' or 'epivals'
+               */
+               var $functions_parameters_type='xmlrpcvals';
+               /// controls wether the server is going to echo debugging messages back to the client as comments in response body. valid values: 0,1,2,3
+               var $debug = 1;
+               /**
+               * When set to true, it will enable HTTP compression of the response, in case
+               * the client has declared its support for compression in the request.
+               */
+               var $compress_response = false;
+               /**
+               * List of http compression methods accepted by the server for requests.
+               * NB: PHP supports deflate, gzip compressions out of the box if compiled w. zlib
+               */
+               var $accepted_compression = array();
+               /// shall we serve calls to system.* methods?
+               var $allow_system_funcs = true;
+               /// list of charset encodings natively accepted for requests
+               var $accepted_charset_encodings = array();
+               /**
+               * charset encoding to be used for response.
+               * NB: if we can, we will convert the generated response from internal_encoding to the intended one.
+               * can be: a supported xml encoding (only UTF-8 and ISO-8859-1 at present, unless mbstring is enabled),
+               * null (leave unspecified in response, convert output stream to US_ASCII),
+               * 'default' (use xmlrpc library default as specified in xmlrpc.inc, convert output stream if needed),
+               * or 'auto' (use client-specified charset encoding or same as request if request headers do not specify it (unless request is US-ASCII: then use library default anyway).
+               * NB: pretty dangerous if you accept every charset and do not have mbstring enabled)
+               */
+               var $response_charset_encoding = '';
+               /// storage for internal debug info
+               var $debug_info = '';
+               /// extra data passed at runtime to method handling functions. Used only by EPI layer
+               var $user_data = null;
+
+               /**
+               * @param array $dispmap the dispatch map withd efinition of exposed services
+               * @param boolean $servicenow set to false to prevent the server from runnung upon construction
+               */
+               function xmlrpc_server($dispMap=null, $serviceNow=true)
+               {
+                       // if ZLIB is enabled, let the server by default accept compressed requests,
+                       // and compress responses sent to clients that support them
+                       if(function_exists('gzinflate'))
+                       {
+                               $this->accepted_compression = array('gzip', 'deflate');
+                               $this->compress_response = true;
+                       }
+
+                       // by default the xml parser can support these 3 charset encodings
+                       $this->accepted_charset_encodings = array('UTF-8', 'ISO-8859-1', 'US-ASCII');
+
+                       // dispMap is a dispatch array of methods
+                       // mapped to function names and signatures
+                       // if a method
+                       // doesn't appear in the map then an unknown
+                       // method error is generated
+                       /* milosch - changed to make passing dispMap optional.
+                        * instead, you can use the class add_to_map() function
+                        * to add functions manually (borrowed from SOAPX4)
+                        */
+                       if($dispMap)
+                       {
+                               $this->dmap = $dispMap;
+                               if($serviceNow)
+                               {
+                                       $this->service();
+                               }
+                       }
+               }
+
+               /**
+               * Set debug level of server.
+               * @param integer $in debug lvl: determines info added to xmlrpc responses (as xml comments)
+               * 0 = no debug info,
+               * 1 = msgs set from user with debugmsg(),
+               * 2 = add complete xmlrpc request (headers and body),
+               * 3 = add also all processing warnings happened during method processing
+               * (NB: this involves setting a custom error handler, and might interfere
+               * with the standard processing of the php function exposed as method. In
+               * particular, triggering an USER_ERROR level error will not halt script
+               * execution anymore, but just end up logged in the xmlrpc response)
+               * Note that info added at elevel 2 and 3 will be base64 encoded
+               * @access public
+               */
+               function setDebug($in)
+               {
+                       $this->debug=$in;
+               }
+
+               /**
+               * Return a string with the serialized representation of all debug info
+               * @param string $charset_encoding the target charset encoding for the serialization
+               * @return string an XML comment (or two)
+               */
+               function serializeDebug($charset_encoding='')
+               {
+                       // Tough encoding problem: which internal charset should we assume for debug info?
+                       // It might contain a copy of raw data received from client, ie with unknown encoding,
+                       // intermixed with php generated data and user generated data...
+                       // so we split it: system debug is base 64 encoded,
+                       // user debug info should be encoded by the end user using the INTERNAL_ENCODING
+                       $out = '';
+                       if ($this->debug_info != '')
+                       {
+                               $out .= "<!-- SERVER DEBUG INFO (BASE64 ENCODED):\n".base64_encode($this->debug_info)."\n-->\n";
+                       }
+                       if($GLOBALS['_xmlrpc_debuginfo']!='')
+                       {
+
+                               $out .= "<!-- DEBUG INFO:\n" . xmlrpc_encode_entitites(str_replace('--', '_-', $GLOBALS['_xmlrpc_debuginfo']), $GLOBALS['xmlrpc_internalencoding'], $charset_encoding) . "\n-->\n";
+                               // NB: a better solution MIGHT be to use CDATA, but we need to insert it
+                               // into return payload AFTER the beginning tag
+                               //$out .= "<![CDATA[ DEBUG INFO:\n\n" . str_replace(']]>', ']_]_>', $GLOBALS['_xmlrpc_debuginfo']) . "\n]]>\n";
+                       }
+                       return $out;
+               }
+
+               /**
+               * Execute the xmlrpc request, printing the response
+               * @param string $data the request body. If null, the http POST request will be examined
+               * @return xmlrpcresp the response object (usually not used by caller...)
+               * @access public
+               */
+               function service($data=null, $return_payload=false)
+               {
+                       if ($data === null)
+                       {
+                               $data = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
+                       }
+                       $raw_data = $data;
+
+                       // reset internal debug info
+                       $this->debug_info = '';
+
+                       // Echo back what we received, before parsing it
+                       if($this->debug > 1)
+                       {
+                               $this->debugmsg("+++GOT+++\n" . $data . "\n+++END+++");
+                       }
+
+                       $r = $this->parseRequestHeaders($data, $req_charset, $resp_charset, $resp_encoding);
+                       if (!$r)
+                       {
+                               $r=$this->parseRequest($data, $req_charset);
+                       }
+
+                       // save full body of request into response, for more debugging usages
+                       $r->raw_data = $raw_data;
+
+                       if($this->debug > 2 && $GLOBALS['_xmlrpcs_occurred_errors'])
+                       {
+                               $this->debugmsg("+++PROCESSING ERRORS AND WARNINGS+++\n" .
+                                       $GLOBALS['_xmlrpcs_occurred_errors'] . "+++END+++");
+                       }
+
+                       $payload=$this->xml_header($resp_charset);
+                       if($this->debug > 0)
+                       {
+                               $payload = $payload . $this->serializeDebug($resp_charset);
+                       }
+
+                       // G. Giunta 2006-01-27: do not create response serialization if it has
+                       // already happened. Helps building json magic
+                       if (empty($r->payload))
+                       {
+                               $r->serialize($resp_charset);
+                       }
+                       $payload = $payload . $r->payload;
+
+                       if ($return_payload)
+                       {
+                               return $payload;
+                       }
+
+                       // if we get a warning/error that has output some text before here, then we cannot
+                       // add a new header. We cannot say we are sending xml, either...
+                       if(!headers_sent())
+                       {
+                               header('Content-Type: '.$r->content_type);
+                               // we do not know if client actually told us an accepted charset, but if he did
+                               // we have to tell him what we did
+                               header("Vary: Accept-Charset");
+
+                               // http compression of output: only
+                               // if we can do it, and we want to do it, and client asked us to,
+                               // and php ini settings do not force it already
+                               $php_no_self_compress = ini_get('zlib.output_compression') == '' && (ini_get('output_handler') != 'ob_gzhandler');
+                               if($this->compress_response && function_exists('gzencode') && $resp_encoding != ''
+                                       && $php_no_self_compress)
+                               {
+                                       if(strpos($resp_encoding, 'gzip') !== false)
+                                       {
+                                               $payload = gzencode($payload);
+                                               header("Content-Encoding: gzip");
+                                               header("Vary: Accept-Encoding");
+                                       }
+                                       elseif (strpos($resp_encoding, 'deflate') !== false)
+                                       {
+                                               $payload = gzcompress($payload);
+                                               header("Content-Encoding: deflate");
+                                               header("Vary: Accept-Encoding");
+                                       }
+                               }
+
+                               // do not ouput content-length header if php is compressing output for us:
+                               // it will mess up measurements
+                               if($php_no_self_compress)
+                               {
+                                       header('Content-Length: ' . (int)strlen($payload));
+                               }
+                       }
+                       else
+                       {
+                               error_log('XML-RPC: xmlrpc_server::service: http headers already sent before response is fully generated. Check for php warning or error messages');
+                       }
+
+                       print $payload;
+
+                       // return request, in case subclasses want it
+                       return $r;
+               }
+
+               /**
+               * Add a method to the dispatch map
+               * @param string $methodname the name with which the method will be made available
+               * @param string $function the php function that will get invoked
+               * @param array $sig the array of valid method signatures
+               * @param string $doc method documentation
+               * @access public
+               */
+               function add_to_map($methodname,$function,$sig=null,$doc='')
+               {
+                       $this->dmap[$methodname] = array(
+                               'function'      => $function,
+                               'docstring' => $doc
+                       );
+                       if ($sig)
+                       {
+                               $this->dmap[$methodname]['signature'] = $sig;
+                       }
+               }
+
+               /**
+               * Verify type and number of parameters received against a list of known signatures
+               * @param array $in array of either xmlrpcval objects or xmlrpc type definitions
+               * @param array $sig array of known signatures to match against
+               * @access private
+               */
+               function verifySignature($in, $sig)
+               {
+                       // check each possible signature in turn
+                       if (is_object($in))
+                       {
+                               $numParams = $in->getNumParams();
+                       }
+                       else
+                       {
+                               $numParams = count($in);
+                       }
+                       foreach($sig as $cursig)
+                       {
+                               if(count($cursig)==$numParams+1)
+                               {
+                                       $itsOK=1;
+                                       for($n=0; $n<$numParams; $n++)
+                                       {
+                                               if (is_object($in))
+                                               {
+                                                       $p=$in->getParam($n);
+                                                       if($p->kindOf() == 'scalar')
+                                                       {
+                                                               $pt=$p->scalartyp();
+                                                       }
+                                                       else
+                                                       {
+                                                               $pt=$p->kindOf();
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       $pt= $in[$n] == 'i4' ? 'int' : $in[$n]; // dispatch maps never use i4...
+                                               }
+
+                                               // param index is $n+1, as first member of sig is return type
+                                               if($pt != $cursig[$n+1] && $cursig[$n+1] != $GLOBALS['xmlrpcValue'])
+                                               {
+                                                       $itsOK=0;
+                                                       $pno=$n+1;
+                                                       $wanted=$cursig[$n+1];
+                                                       $got=$pt;
+                                                       break;
+                                               }
+                                       }
+                                       if($itsOK)
+                                       {
+                                               return array(1,'');
+                                       }
+                               }
+                       }
+                       if(isset($wanted))
+                       {
+                               return array(0, "Wanted ${wanted}, got ${got} at param ${pno}");
+                       }
+                       else
+                       {
+                               return array(0, "No method signature matches number of parameters");
+                       }
+               }
+
+               /**
+               * Parse http headers received along with xmlrpc request. If needed, inflate request
+               * @return null on success or an xmlrpcresp
+               * @access private
+               */
+               function parseRequestHeaders(&$data, &$req_encoding, &$resp_encoding, &$resp_compression)
+               {
+                       // Play nice to PHP 4.0.x: superglobals were not yet invented...
+                       if(!isset($_SERVER))
+                       {
+                               $_SERVER = $GLOBALS['HTTP_SERVER_VARS'];
+                       }
+
+                       if($this->debug > 1)
+                       {
+                               if(function_exists('getallheaders'))
+                               {
+                                       $this->debugmsg(''); // empty line
+                                       foreach(getallheaders() as $name => $val)
+                                       {
+                                               $this->debugmsg("HEADER: $name: $val");
+                                       }
+                               }
+
+                       }
+
+                       if(isset($_SERVER['HTTP_CONTENT_ENCODING']))
+                       {
+                               $content_encoding = str_replace('x-', '', $_SERVER['HTTP_CONTENT_ENCODING']);
+                       }
+                       else
+                       {
+                               $content_encoding = '';
+                       }
+
+                       // check if request body has been compressed and decompress it
+                       if($content_encoding != '' && strlen($data))
+                       {
+                               if($content_encoding == 'deflate' || $content_encoding == 'gzip')
+                               {
+                                       // if decoding works, use it. else assume data wasn't gzencoded
+                                       if(function_exists('gzinflate') && in_array($content_encoding, $this->accepted_compression))
+                                       {
+                                               if($content_encoding == 'deflate' && $degzdata = @gzuncompress($data))
+                                               {
+                                                       $data = $degzdata;
+                                                       if($this->debug > 1)
+                                                       {
+                                                               $this->debugmsg("\n+++INFLATED REQUEST+++[".strlen($data)." chars]+++\n" . $data . "\n+++END+++");
+                                                       }
+                                               }
+                                               elseif($content_encoding == 'gzip' && $degzdata = @gzinflate(substr($data, 10)))
+                                               {
+                                                       $data = $degzdata;
+                                                       if($this->debug > 1)
+                                                               $this->debugmsg("+++INFLATED REQUEST+++[".strlen($data)." chars]+++\n" . $data . "\n+++END+++");
+                                               }
+                                               else
+                                               {
+                                                       $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['server_decompress_fail'], $GLOBALS['xmlrpcstr']['server_decompress_fail']);
+                                                       return $r;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               //error_log('The server sent deflated data. Your php install must have the Zlib extension compiled in to support this.');
+                                               $r =& new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['server_cannot_decompress'], $GLOBALS['xmlrpcstr']['server_cannot_decompress']);
+                                               return $r;
+                                       }
+                               }
+                       }
+
+                       // check if client specified accepted charsets, and if we know how to fulfill
+                       // the request
+                       if ($this->response_charset_encoding == 'auto')
+                       {
+                               $resp_encoding = '';
+                               if (isset($_SERVER['HTTP_ACCEPT_CHARSET']))
+                               {
+                                       // here we should check if we can match the client-requested encoding
+                                       // with the encodings we know we can generate.
+                                       /// @todo we should parse q=0.x preferences instead of getting first charset specified...
+                                       $client_accepted_charsets = explode(',', strtoupper($_SERVER['HTTP_ACCEPT_CHARSET']));
+                                       // Give preference to internal encoding
+                                       $known_charsets = array($this->internal_encoding, 'UTF-8', 'ISO-8859-1', 'US-ASCII');
+                                       foreach ($known_charsets as $charset)
+                                       {
+                                               foreach ($client_accepted_charsets as $accepted)
+                                                       if (strpos($accepted, $charset) === 0)
+                                                       {
+                                                               $resp_encoding = $charset;
+                                                               break;
+                                                       }
+                                               if ($resp_encoding)
+                                                       break;
+                                       }
+                               }
+                       }
+                       else
+                       {
+                               $resp_encoding = $this->response_charset_encoding;
+                       }
+
+                       if (isset($_SERVER['HTTP_ACCEPT_ENCODING']))
+                       {
+                               $resp_compression = $_SERVER['HTTP_ACCEPT_ENCODING'];
+                       }
+                       else
+                       {
+                               $resp_compression = '';
+                       }
+
+                       // 'guestimate' request encoding
+                       /// @todo check if mbstring is enabled and automagic input conversion is on: it might mingle with this check???
+                       $req_encoding = guess_encoding(isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : '',
+                               $data);
+
+                       return null;
+               }
+
+               /**
+               * Parse an xml chunk containing an xmlrpc request and execute the corresponding
+               * php function registered with the server
+               * @param string $data the xml request
+               * @param string $req_encoding (optional) the charset encoding of the xml request
+               * @return xmlrpcresp
+               * @access private
+               */
+               function parseRequest($data, $req_encoding='')
+               {
+                       // 2005/05/07 commented and moved into caller function code
+                       //if($data=='')
+                       //{
+                       //      $data=$GLOBALS['HTTP_RAW_POST_DATA'];
+                       //}
+
+                       // G. Giunta 2005/02/13: we do NOT expect to receive html entities
+                       // so we do not try to convert them into xml character entities
+                       //$data = xmlrpc_html_entity_xlate($data);
+
+                       $GLOBALS['_xh']=array();
+                       $GLOBALS['_xh']['ac']='';
+                       $GLOBALS['_xh']['stack']=array();
+                       $GLOBALS['_xh']['valuestack'] = array();
+                       $GLOBALS['_xh']['params']=array();
+                       $GLOBALS['_xh']['pt']=array();
+                       $GLOBALS['_xh']['isf']=0;
+                       $GLOBALS['_xh']['isf_reason']='';
+                       $GLOBALS['_xh']['method']=false; // so we can check later if we got a methodname or not
+                       $GLOBALS['_xh']['rt']='';
+
+                       // decompose incoming XML into request structure
+                       if ($req_encoding != '')
+                       {
+                               if (!in_array($req_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
+                               // the following code might be better for mb_string enabled installs, but
+                               // makes the lib about 200% slower...
+                               //if (!is_valid_charset($req_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
+                               {
+                                       error_log('XML-RPC: xmlrpc_server::parseRequest: invalid charset encoding of received request: '.$req_encoding);
+                                       $req_encoding = $GLOBALS['xmlrpc_defencoding'];
+                               }
+                               /// @BUG this will fail on PHP 5 if charset is not specified in the xml prologue,
+                               // the encoding is not UTF8 and there are non-ascii chars in the text...
+                               $parser = xml_parser_create($req_encoding);
+                       }
+                       else
+                       {
+                               $parser = xml_parser_create();
+                       }
+
+                       xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
+                       // G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell
+                       // the xml parser to give us back data in the expected charset
+                       xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
+
+                       if ($this->functions_parameters_type != 'xmlrpcvals')
+                               xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee_fast');
+                       else
+                               xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');
+                       xml_set_character_data_handler($parser, 'xmlrpc_cd');
+                       xml_set_default_handler($parser, 'xmlrpc_dh');
+                       if(!xml_parse($parser, $data, 1))
+                       {
+                               // return XML error as a faultCode
+                               $r=&new xmlrpcresp(0,
+                               $GLOBALS['xmlrpcerrxml']+xml_get_error_code($parser),
+                               sprintf('XML error: %s at line %d, column %d',
+                                       xml_error_string(xml_get_error_code($parser)),
+                                       xml_get_current_line_number($parser), xml_get_current_column_number($parser)));
+                               xml_parser_free($parser);
+                       }
+                       elseif ($GLOBALS['_xh']['isf'])
+                       {
+                               xml_parser_free($parser);
+                               $r=&new xmlrpcresp(0,
+                                       $GLOBALS['xmlrpcerr']['invalid_request'],
+                                       $GLOBALS['xmlrpcstr']['invalid_request'] . ' ' . $GLOBALS['_xh']['isf_reason']);
+                       }
+                       else
+                       {
+                               xml_parser_free($parser);
+                               if ($this->functions_parameters_type != 'xmlrpcvals')
+                               {
+                                       if($this->debug > 1)
+                                       {
+                                               $this->debugmsg("\n+++PARSED+++\n".var_export($GLOBALS['_xh']['params'], true)."\n+++END+++");
+                                       }
+                                       $r = $this->execute($GLOBALS['_xh']['method'], $GLOBALS['_xh']['params'], $GLOBALS['_xh']['pt']);
+                               }
+                               else
+                               {
+                                       // build an xmlrpcmsg object with data parsed from xml
+                                       $m=&new xmlrpcmsg($GLOBALS['_xh']['method']);
+                                       // now add parameters in
+                                       for($i=0; $i<count($GLOBALS['_xh']['params']); $i++)
+                                       {
+                                               $m->addParam($GLOBALS['_xh']['params'][$i]);
+                                       }
+
+                                       if($this->debug > 1)
+                                       {
+                                               $this->debugmsg("\n+++PARSED+++\n".var_export($m, true)."\n+++END+++");
+                                       }
+
+                                       $r = $this->execute($m);
+                               }
+                       }
+                       return $r;
+               }
+
+               /**
+               * Execute a method invoked by the client, checking parameters used
+               * @param mixed $m either an xmlrpcmsg obj or a method name
+               * @param array $params array with method parameters as php types (if m is method name only)
+               * @param array $paramtypes array with xmlrpc types of method parameters (if m is method name only)
+               * @return xmlrpcresp
+               * @access private
+               */
+               function execute($m, $params=null, $paramtypes=null)
+               {
+                       if (is_object($m))
+                       {
+                               $methName = $m->method();
+                       }
+                       else
+                       {
+                               $methName = $m;
+                       }
+                       $sysCall = $this->allow_system_funcs && (strpos($methName, "system.") === 0);
+                       $dmap = $sysCall ? $GLOBALS['_xmlrpcs_dmap'] : $this->dmap;
+
+                       if(!isset($dmap[$methName]['function']))
+                       {
+                               // No such method
+                               return new xmlrpcresp(0,
+                                       $GLOBALS['xmlrpcerr']['unknown_method'],
+                                       $GLOBALS['xmlrpcstr']['unknown_method']);
+                       }
+
+                       // Check signature
+                       if(isset($dmap[$methName]['signature']))
+                       {
+                               $sig = $dmap[$methName]['signature'];
+                               if (is_object($m))
+                               {
+                                       list($ok, $errstr) = $this->verifySignature($m, $sig);
+                               }
+                               else
+                               {
+                                       list($ok, $errstr) = $this->verifySignature($paramtypes, $sig);
+                               }
+                               if(!$ok)
+                               {
+                                       // Didn't match.
+                                       return new xmlrpcresp(
+                                               0,
+                                               $GLOBALS['xmlrpcerr']['incorrect_params'],
+                                               $GLOBALS['xmlrpcstr']['incorrect_params'] . ": ${errstr}"
+                                       );
+                               }
+                       }
+
+                       $func = $dmap[$methName]['function'];
+                       // let the 'class::function' syntax be accepted in dispatch maps
+                       if(is_string($func) && strpos($func, '::'))
+                       {
+                               $func = explode('::', $func);
+                       }
+                       // verify that function to be invoked is in fact callable
+                       if(!is_callable($func))
+                       {
+                               error_log("XML-RPC: xmlrpc_server::execute: function $func registered as method handler is not callable");
+                               return new xmlrpcresp(
+                                       0,
+                                       $GLOBALS['xmlrpcerr']['server_error'],
+                                       $GLOBALS['xmlrpcstr']['server_error'] . ": no function matches method"
+                               );
+                       }
+
+                       // If debug level is 3, we should catch all errors generated during
+                       // processing of user function, and log them as part of response
+                       if($this->debug > 2)
+                       {
+                               $GLOBALS['_xmlrpcs_prev_ehandler'] = set_error_handler('_xmlrpcs_errorHandler');
+                       }
+                       if (is_object($m))
+                       {
+                               if($sysCall)
+                               {
+                                       $r = call_user_func($func, $this, $m);
+                               }
+                               else
+                               {
+                                       $r = call_user_func($func, $m);
+                               }
+                               if (!is_a($r, 'xmlrpcresp'))
+                               {
+                                       error_log("XML-RPC: xmlrpc_server::execute: function $func registered as method handler does not return an xmlrpcresp object");
+                                       if (is_a($r, 'xmlrpcval'))
+                                       {
+                                               $r =& new xmlrpcresp($r);
+                                       }
+                                       else
+                                       {
+                                               $r =& new xmlrpcresp(
+                                                       0,
+                                                       $GLOBALS['xmlrpcerr']['server_error'],
+                                                       $GLOBALS['xmlrpcstr']['server_error'] . ": function does not return xmlrpcresp object"
+                                               );
+                                       }
+                               }
+                       }
+                       else
+                       {
+                               // call a 'plain php' function
+                               if($sysCall)
+                               {
+                                       array_unshift($params, $this);
+                                       $r = call_user_func_array($func, $params);
+                               }
+                               else
+                               {
+                                       // 3rd API convention for method-handling functions: EPI-style
+                                       if ($this->functions_parameters_type == 'epivals')
+                                       {
+                                               $r = call_user_func_array($func, array($methName, $params, $this->user_data));
+                                               // mimic EPI behaviour: if we get an array that looks like an error, make it
+                                               // an eror response
+                                               if (is_array($r) && array_key_exists('faultCode', $r) && array_key_exists('faultString', $r))
+                                               {
+                                                       $r =& new xmlrpcresp(0, (integer)$r['faultCode'], (string)$r['faultString']);
+                                               }
+                                               else
+                                               {
+                                                       // functions using EPI api should NOT return resp objects,
+                                                       // so make sure we encode the return type correctly
+                                                       $r =& new xmlrpcresp(php_xmlrpc_encode($r, array('extension_api')));
+                                               }
+                                       }
+                                       else
+                                       {
+                                               $r = call_user_func_array($func, $params);
+                                       }
+                               }
+                               // the return type can be either an xmlrpcresp object or a plain php value...
+                               if (!is_a($r, 'xmlrpcresp'))
+                               {
+                                       // what should we assume here about automatic encoding of datetimes
+                                       // and php classes instances???
+                                       $r =& new xmlrpcresp(php_xmlrpc_encode($r, array('auto_dates')));
+                               }
+                       }
+                       if($this->debug > 2)
+                       {
+                               // note: restore the error handler we found before calling the
+                               // user func, even if it has been changed inside the func itself
+                               if($GLOBALS['_xmlrpcs_prev_ehandler'])
+                               {
+                                       set_error_handler($GLOBALS['_xmlrpcs_prev_ehandler']);
+                               }
+                               else
+                               {
+                                       restore_error_handler();
+                               }
+                       }
+                       return $r;
+               }
+
+               /**
+               * add a string to the 'internal debug message' (separate from 'user debug message')
+               * @param string $strings
+               * @access private
+               */
+               function debugmsg($string)
+               {
+                       $this->debug_info .= $string."\n";
+               }
+
+               /**
+               * @access private
+               */
+               function xml_header($charset_encoding='')
+               {
+                       if ($charset_encoding != '')
+                       {
+                               return "<?xml version=\"1.0\" encoding=\"$charset_encoding\"?" . ">\n";
+                       }
+                       else
+                       {
+                               return "<?xml version=\"1.0\"?" . ">\n";
+                       }
+               }
+
+               /**
+               * A debugging routine: just echoes back the input packet as a string value
+               * DEPRECATED!
+               */
+               function echoInput()
+               {
+                       $r=&new xmlrpcresp(new xmlrpcval( "'Aha said I: '" . $GLOBALS['HTTP_RAW_POST_DATA'], 'string'));
+                       print $r->serialize();
+               }
+       }
+?>
diff --git a/utf8/nucleus/media.php b/utf8/nucleus/media.php
new file mode 100755 (executable)
index 0000000..2ebf804
--- /dev/null
@@ -0,0 +1,421 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * Media popup window for Nucleus
+ *
+ * Purpose:
+ *   - can be openen from an add-item form or bookmarklet popup
+ *   - shows a list of recent files, allowing browsing, search and
+ *     upload of new files
+ *   - close the popup by selecting a file in the list. The file gets
+ *     passed through to the add-item form (linkto, popupimg or inline img)
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: media.php,v 1.8.2.1 2007/09/07 07:36:44 kimitake Exp $
+ *
+ */
+
+$CONF = array();
+
+// defines how much media items will be shown per page. You can override this
+// in config.php if you like. (changing it in config.php instead of here will
+// allow your settings to be kept even after a Nucleus upgrade)
+$CONF['MediaPerPage'] = 10;
+
+// include all classes and config data
+require('../config.php');
+include($DIR_LIBS . 'MEDIA.php');      // media classes
+
+sendContentType('application/xhtml+xml', 'media');
+
+// user needs to be logged in to use this
+if (!$member->isLoggedIn()) {
+       media_loginAndPassThrough();
+       exit;
+}
+
+// check if member is on at least one teamlist
+$query = 'SELECT * FROM ' . sql_table('team'). ' WHERE tmember=' . $member->getID();
+$teams = sql_query($query);
+if (sql_num_rows($teams) == 0 && !$member->isAdmin())
+       media_doError(_ERROR_DISALLOWEDUPLOAD);
+
+// get action
+$action = requestVar('action');
+if ($action == '')
+       $action = 'selectmedia';
+
+// check ticket
+$aActionsNotToCheck = array('selectmedia', _MEDIA_FILTER_APPLY, _MEDIA_COLLECTION_SELECT);
+if (!in_array($action, $aActionsNotToCheck))
+{
+       if (!$manager->checkTicket())
+               media_doError(_ERROR_BADTICKET);
+}
+
+
+switch($action) {
+       case 'chooseupload':
+       case _MEDIA_UPLOAD_TO:
+       case _MEDIA_UPLOAD_NEW:
+               if (!$member->isAdmin() and $CONF['AllowUpload'] != true) {
+                       media_doError(_ERROR_DISALLOWED);
+               } else {
+                       media_choose();
+               }
+               break;
+       case 'uploadfile':
+               if (!$member->isAdmin() and $CONF['AllowUpload'] != true) {
+                       media_doError(_ERROR_DISALLOWED);
+               } else {
+                       media_upload();
+               }
+               break;
+       case _MEDIA_FILTER_APPLY:
+       case 'selectmedia':
+       case _MEDIA_COLLECTION_SELECT:
+       default:
+               media_select();
+               break;
+}
+
+// select a file
+function media_select() {
+       global $member, $CONF, $DIR_MEDIA, $manager;
+
+       // show 10 files + navigation buttons
+       // show msg when no files
+       // show upload form
+       // files sorted according to last modification date
+
+       // currently selected collection
+       $currentCollection = requestVar('collection');
+       if (!$currentCollection || !@is_dir($DIR_MEDIA . $currentCollection))
+               $currentCollection = $member->getID();
+
+       // avoid directory travarsal and accessing invalid directory
+       if (!MEDIA::isValidCollection($currentCollection)) media_doError(_ERROR_DISALLOWED);
+
+       media_head();
+
+       // get collection list
+       $collections = MEDIA::getCollectionList();
+
+       if (sizeof($collections) > 1) {
+       ?>
+               <form method="post" action="media.php"><div>
+                       <label for="media_collection"><?php echo htmlspecialchars(_MEDIA_COLLECTION_LABEL)?></label>
+                       <select name="collection" id="media_collection">
+                               <?php                                   foreach ($collections as $dirname => $description) {
+                                               echo '<option value="',htmlspecialchars($dirname),'"';
+                                               if ($dirname == $currentCollection) {
+                                                       echo ' selected="selected"';
+                                               }
+                                               echo '>',htmlspecialchars($description),'</option>';
+                                       }
+                               ?>
+                       </select>
+                       <input type="submit" name="action" value="<?php echo htmlspecialchars(_MEDIA_COLLECTION_SELECT) ?>" title="<?php echo htmlspecialchars(_MEDIA_COLLECTION_TT)?>" />
+                       <input type="submit" name="action" value="<?php echo htmlspecialchars(_MEDIA_UPLOAD_TO) ?>" title="<?php echo htmlspecialchars(_MEDIA_UPLOADLINK) ?>" />
+                       <?php $manager->addTicketHidden() ?>
+               </div></form>
+       <?php   } else {
+       ?>
+               <form method="post" action="media.php" style="float:right"><div>
+                       <input type="hidden" name="collection" value="<?php echo htmlspecialchars($currentCollection)?>" />
+                       <input type="submit" name="action" value="<?php echo htmlspecialchars(_MEDIA_UPLOAD_NEW) ?>" title="<?php echo htmlspecialchars(_MEDIA_UPLOADLINK) ?>" />
+                       <?php $manager->addTicketHidden() ?>
+               </div></form>
+       <?php   } // if sizeof
+
+       $filter = requestVar('filter');
+       $offset = intRequestVar('offset');
+       $arr = MEDIA::getMediaListByCollection($currentCollection, $filter);
+
+       ?>
+               <form method="post" action="media.php"><div>
+                       <label for="media_filter"><?php echo htmlspecialchars(_MEDIA_FILTER_LABEL)?></label>
+                       <input id="media_filter" type="text" name="filter" value="<?php echo htmlspecialchars($filter)?>" />
+                       <input type="submit" name="action" value="<?php echo htmlspecialchars(_MEDIA_FILTER_APPLY) ?>" />
+                       <input type="hidden" name="collection" value="<?php echo htmlspecialchars($currentCollection)?>" />
+                       <input type="hidden" name="offset" value="<?php echo intval($offset)?>" />
+               </div></form>
+
+       <?php
+
+       ?>
+               <table width="100%">
+               <caption><?php echo _MEDIA_COLLECTION_LABEL . htmlspecialchars($collections[$currentCollection])?></caption>
+               <tr>
+                <th><?php echo _MEDIA_MODIFIED?></th><th><?php echo _MEDIA_FILENAME?></th><th><?php echo _MEDIA_DIMENSIONS?></th>
+               </tr>
+
+       <?php
+
+       if (sizeof($arr)>0) {
+
+               if (($offset + $CONF['MediaPerPage']) >= sizeof($arr))
+                       $offset = sizeof($arr) - $CONF['MediaPerPage'];
+
+               if ($offset < 0) $offset = 0;
+
+               $idxStart = $offset;
+               $idxEnd = $offset + $CONF['MediaPerPage'];
+               $idxNext = $idxEnd;
+               $idxPrev = $idxStart - $CONF['MediaPerPage'];
+
+               if ($idxPrev < 0) $idxPrev = 0;
+
+               if ($idxEnd > sizeof($arr))
+                       $idxEnd = sizeof($arr);
+
+               for($i=$idxStart;$i<$idxEnd;$i++) {
+                       $obj = $arr[$i];
+                       $filename = $DIR_MEDIA . $currentCollection . '/' . $obj->filename;
+
+                       $old_level = error_reporting(0);
+                       $size = @GetImageSize($filename);
+                       error_reporting($old_level);
+                       $width = $size[0];
+                       $height = $size[1];
+                       $filetype = $size[2];
+
+                       echo "<tr>";
+                       echo "<td>". date("Y-m-d",$obj->timestamp) ."</td>";
+
+                       // strings for javascript
+                       $jsCurrentCollection = str_replace("'","\\'",$currentCollection);
+                       $jsFileName = str_replace("'","\\'",$obj->filename);
+
+                       if ($filetype != 0) {
+                               // image (gif/jpg/png/swf)
+                               echo "<td><a href=\"media.php\" onclick=\"chooseImage('", htmlspecialchars($jsCurrentCollection), "','", htmlspecialchars($jsFileName), "',"
+                                                          . "'", htmlspecialchars($width), "','" , htmlspecialchars($height), "'"
+                                                          . ")\" title=\"" . htmlspecialchars($obj->filename). "\">"
+                                                          . htmlspecialchars(shorten($obj->filename,25,'...'))
+                                                          ."</a>";
+                               echo ' (<a href="', htmlspecialchars($CONF['MediaURL'] . $currentCollection . '/' . $obj->filename), '" onclick="window.open(this.href); return false;" title="',htmlspecialchars(_MEDIA_VIEW_TT),'">',_MEDIA_VIEW,'</a>)';
+                               echo "</td>";
+                       } else {
+                               // no image (e.g. mpg)
+                               echo "<td><a href='media.php' onclick=\"chooseOther('" , htmlspecialchars($jsCurrentCollection), "','", htmlspecialchars($jsFileName), "'"
+                                                          . ")\" title=\"" . htmlspecialchars($obj->filename). "\">"
+                                                          . htmlspecialchars(shorten($obj->filename,30,'...'))
+                                                          ."</a></td>";
+
+                       }
+                       echo '<td>' , htmlspecialchars($width) , 'x' , htmlspecialchars($height) , '</td>';
+                       echo '</tr>';
+               }
+       } // if (sizeof($arr)>0)
+       ?>
+
+               </table>
+       <?php
+       if ($idxStart > 0)
+               echo "<a href='media.php?offset=$idxPrev&amp;collection=".urlencode($currentCollection)."'>". _LISTS_PREV."</a> ";
+       if ($idxEnd < sizeof($arr))
+               echo "<a href='media.php?offset=$idxNext&amp;collection=".urlencode($currentCollection)."'>". _LISTS_NEXT."</a> ";
+
+       ?>
+               <input id="typeradio0" type="radio" name="typeradio" onclick="setType(0);" checked="checked" /><label for="typeradio0"><?php echo _MEDIA_INLINE?></label>
+               <input id="typeradio1" type="radio" name="typeradio" onclick="setType(1);" /><label for="typeradio1"><?php echo _MEDIA_POPUP?></label>
+       <?php
+       media_foot();
+
+
+}
+
+/**
+  * Shows a screen where you can select the file to upload
+  */
+function media_choose() {
+       global $CONF, $member, $manager;
+
+       $currentCollection = requestVar('collection');
+
+       $collections = MEDIA::getCollectionList();
+
+       media_head();
+       ?>
+       <h1><?php echo _UPLOAD_TITLE?></h1>
+
+       <p><?php echo _UPLOAD_MSG?></p>
+
+       <form method="post" enctype="multipart/form-data" action="media.php">
+       <div>
+         <input type="hidden" name="action" value="uploadfile" />
+         <?php $manager->addTicketHidden() ?>
+         <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $CONF['MaxUploadSize']?>" />
+         File:
+         <br />
+         <input name="uploadfile" type="file" size="40" />
+       <?php           if (sizeof($collections) > 1) {
+       ?>
+               <br /><br /><label for="upload_collection">Collection:</label>
+               <br /><select name="collection" id="upload_collection">
+                       <?php                           foreach ($collections as $dirname => $description) {
+                                       echo '<option value="',htmlspecialchars($dirname),'"';
+                                       if ($dirname == $currentCollection) {
+                                               echo ' selected="selected"';
+                                       }
+                                       echo '>',htmlspecialchars($description),'</option>';
+                               }
+                       ?>
+               </select>
+       <?php           } else {
+       ?>
+               <input name="collection" type="hidden" value="<?php echo htmlspecialchars(requestVar('collection'))?>" />
+       <?php           } // if sizeof
+       ?>
+         <br /><br />
+         <input type="submit" value="<?php echo _UPLOAD_BUTTON?>" />
+       </div>
+       </form>
+
+       <?php
+       media_foot();
+}
+
+
+/**
+  * accepts a file for upload
+  */
+function media_upload() {
+       global $DIR_MEDIA, $member, $CONF;
+
+       $uploadInfo = postFileInfo('uploadfile');
+
+       $filename = $uploadInfo['name'];
+       $filetype = $uploadInfo['type'];
+       $filesize = $uploadInfo['size'];
+       $filetempname = $uploadInfo['tmp_name'];
+       $fileerror = intval($uploadInfo['error']);
+
+       switch ($fileerror)
+       {
+               case 0: // = UPLOAD_ERR_OK
+                       break;
+               case 1: // = UPLOAD_ERR_INI_SIZE
+               case 2: // = UPLOAD_ERR_FORM_SIZE
+                       media_doError(_ERROR_FILE_TOO_BIG);
+               case 3: // = UPLOAD_ERR_PARTIAL
+               case 4: // = UPLOAD_ERR_NO_FILE
+               case 6: // = UPLOAD_ERR_NO_TMP_DIR
+               case 7: // = UPLOAD_ERR_CANT_WRITE
+               default:
+                       // include error code for debugging
+                       // (see http://www.php.net/manual/en/features.file-upload.errors.php)
+                       media_doError(_ERROR_BADREQUEST . ' (' . $fileerror . ')');
+       }
+
+       if ($filesize > $CONF['MaxUploadSize'])
+               media_doError(_ERROR_FILE_TOO_BIG);
+
+       // check file type against allowed types
+       $ok = 0;
+       $allowedtypes = explode (',', $CONF['AllowedTypes']);
+       foreach ( $allowedtypes as $type )
+               if (eregi("\." .$type. "$",$filename)) $ok = 1;
+       if (!$ok) media_doError(_ERROR_BADFILETYPE);
+
+       if (!is_uploaded_file($filetempname))
+               media_doError(_ERROR_BADREQUEST);
+
+       // prefix filename with current date (YYYY-MM-DD-)
+       // this to avoid nameclashes
+       if ($CONF['MediaPrefix'])
+               $filename = strftime("%Y%m%d-", time()) . $filename;
+
+       $collection = requestVar('collection');
+       $res = MEDIA::addMediaObject($collection, $filetempname, $filename);
+
+       if ($res != '')
+               media_doError($res);
+
+       // shows updated list afterwards
+       media_select();
+}
+
+function media_loginAndPassThrough() {
+       media_head();
+       ?>
+               <h1><?php echo _LOGIN_PLEASE?></h1>
+
+               <form method="post" action="media.php">
+               <div>
+                       <input name="action" value="login" type="hidden" />
+                       <input name="collection" value="<?php echo htmlspecialchars(requestVar('collection'))?>" type="hidden" />
+                       <?php echo _LOGINFORM_NAME?> <input name="login" />
+                       <br /><?php echo _LOGINFORM_PWD?> <input name="password" type="password" />
+                       <br /><input type="submit" value="<?php echo _LOGIN?>" />
+               </div>
+               </form>
+               <p><a href="media.php" onclick="window.close();"><?php echo _POPUP_CLOSE?></a></p>
+       <?php   media_foot();
+       exit;
+}
+
+function media_doError($msg) {
+       media_head();
+       ?>
+       <h1><?php echo _ERROR?></h1>
+       <p><?php echo $msg?></p>
+       <p><a href="media.php" onclick="history.back()"><?php echo _BACK?></a></p>
+       <?php   media_foot();
+       exit;
+}
+
+
+function media_head() {
+?>
+       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+       <html <?php echo _HTML_XML_NAME_SPACE_AND_LANG_CODE; ?>>
+       <head>
+               <meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>" />
+               <title>Nucleus Media</title>
+               <link rel="stylesheet" type="text/css" href="styles/popups.css" />
+               <script type="text/javascript">
+                       var type = 0;
+                       function setType(val) { type = val; }
+
+                       function chooseImage(collection, filename, width, height) {
+                               window.opener.focus();
+                               window.opener.includeImage(collection,
+                                                                                  filename,
+                                                                                  type == 0 ? 'inline' : 'popup',
+                                                                                  width,
+                                                                                  height
+                                                                                  );
+                               window.close();
+                       }
+
+                       function chooseOther(collection, filename) {
+                               window.opener.focus();
+                               window.opener.includeOtherMedia(collection, filename);
+                               window.close();
+
+                       }
+               </script>
+       </head>
+       <body>
+<?php }
+
+function media_foot() {
+?>
+       </body>
+       </html>
+<?php }
+
+?>
diff --git a/utf8/nucleus/nucleus.gif b/utf8/nucleus/nucleus.gif
new file mode 100755 (executable)
index 0000000..1cdf680
Binary files /dev/null and b/utf8/nucleus/nucleus.gif differ
diff --git a/utf8/nucleus/nucleus2.gif b/utf8/nucleus/nucleus2.gif
new file mode 100755 (executable)
index 0000000..68d44ed
Binary files /dev/null and b/utf8/nucleus/nucleus2.gif differ
diff --git a/utf8/nucleus/plugins/NP_Ping.php b/utf8/nucleus/plugins/NP_Ping.php
new file mode 100644 (file)
index 0000000..91f0bdc
--- /dev/null
@@ -0,0 +1,385 @@
+<?php
+/**
+ *
+ * Send weblog updates ping
+ *     plugin for NucleusCMS(version 3.30 or lator)
+ *     Note: based on NP_PingPong, adapt for the new ping mechanism
+ * PHP versions 4 and 5
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ *
+ * @author    admun (Edmond Hui)
+ * @license   http://www.gnu.org/licenses/gpl.txt  GNU GENERAL PUBLIC LICENSE Version 2, June 1991
+ * @version   1.8
+ * @link      http://edmondhui.homeip.net/nudn
+ * $id$
+ * History
+ *   v1.0 - Initial version
+ *   v1.1 - Add JustPosted event support
+ *   v1.2 - JustPosted event handling in background
+ *   v1.3 - pinged variable support
+ *   v1.4 - language file support
+ *   v1.5 - remove arg1 in exec() call
+ *   v1.6 - move send update ping override option to plugin
+ *   v1.7 - move send ping option from blog to plugin/blog level
+ *        - remove ping override option
+ *   v1.8 - remove sendPing event handle, switch to use PostAddItem and PostUpdateItem event for new item ping
+ *   v1.81 - fix bug in _sendPingCheck() where ITEM class not found when creating new weblog
+ */
+
+class NP_Ping extends NucleusPlugin
+{
+
+    function getName()
+    {
+        return 'Ping';
+    }
+
+    function getAuthor()
+    {
+        return 'admun (Edmond Hui)';
+    }
+
+    function getURL()
+    {
+        return 'http://edmondhui.homeip.net/nudn';
+    }
+
+    function getVersion()
+    {
+        return '1.81';
+    }
+
+    function getMinNucleusVersion()
+    {
+        return '330';
+    }
+
+    function getDescription()
+    {
+        return _PING_DESC;
+    }
+
+    function supportsFeature($what)
+    {
+        switch($what) {
+            case 'SqlTablePrefix':
+                return 1;
+            default:
+                return 0;
+        }
+    }
+
+    function init()
+    {
+//        $language = ereg_replace( '[\\|/]', '', getLanguageName());
+        $language = preg_replace( '@\\|/@', '', getLanguageName());
+        if (file_exists($this->getDirectory()  . $language . '.php')) {
+            include_once($this->getDirectory() . $language . '.php');
+        } else {
+            include_once($this->getDirectory() . 'english.php');
+        }
+    }
+
+    function install()
+    {
+        // Default, http://pingomatic.com
+        $this->createOption('pingpong_pingomatic',  _PING_PINGOM,    'yesno', 'yes');
+        // http://weblogs.com
+        $this->createOption('pingpong_weblogs',     _PING_WEBLOGS,   'yesno', 'no');
+        // http://www.technorati.com
+        $this->createOption('pingpong_technorati',  _PING_TECHNOR,   'yesno', 'no');
+        // http://www.blogrolling.com
+        $this->createOption('pingpong_blogrolling', _PING_BLOGR,     'yesno', 'no');
+        // http://blo.gs
+        $this->createOption('pingpong_blogs',       _PING_BLOGS,     'yesno', 'no');
+        // http://weblogues.com/
+        $this->createOption('pingpong_weblogues',   _PING_WEBLOGUES, 'yesno', 'no');
+        // http://blogg.de
+        $this->createOption('pingpong_bloggde',     _PING_BLOGGDE,   'yesno', 'no');
+
+        // Pinging on background
+        $this->createOption('ping_background',      _PING_BG,        'yesno', 'no');
+
+        $this->createBlogOption('ping_sendping',    _PING_SENDPING,  'yesno', 'yes');
+    }
+
+    function getEventList()
+    {
+        return array(
+            'JustPosted',
+            'PostAddItem',
+            'PostUpdateItem'
+        );
+    }
+
+    function event_JustPosted($data)
+    {
+        global $DIR_PLUGINS, $DIR_NUCLEUS;
+
+        // exit is another plugin already send ping
+        if ($data['pinged'] == true) {
+            return;
+        }
+
+        $bid = intval($data['blogid']);
+        if ($this->getBlogOption($bid, 'ping_sendping') == "yes") {
+            if ($this->getOption('ping_background') == "yes") {
+                exec("php $DIR_PLUGINS/ping/ping.php " . $data['blogid'] . " &");
+            } else {
+                $this->sendPings($data['blogid']);
+            }
+        }
+        // mark the ping has been sent
+        $data['pinged'] = true;
+    }
+
+    function event_PostAddItem($data)
+    {
+//        global $manager;
+//        $blogId =  getBlogIDFromItemID($data['itemid']);
+//        $item   =& ITEM::getitem($data['itemid'], 0, 0); // draft or future post return 0
+//        if ($item != 0) {
+//            if ($this->getBlogOption($blogId, 'ping_sendping') == "yes") {
+//                $this->sendPings(array('blogid' => $blogId));
+//            }
+//        }
+        $this->_sendPingCheck($data['itemid']);
+    }
+
+    function event_PostUpdateItem($data)
+    {
+//        global $manager;
+//        $blogId =  getBlogIDFromItemID($data['itemid']);
+//        $blog   =& $manager->getBlog($blogId);    // <- why?
+//        $item   =& ITEM::getitem($data['itemid'], 0, 0); // draft or future post return 0
+//        if ($item != 0) {
+//            if ($this->getBlogOption($blogId,'ping_sendping') == "yes" ) {
+//                $this->sendPings(array('blogid' => $blogId));
+//            }
+//        }
+        $this->_sendPingCheck($data['itemid']);
+    }
+
+    function _sendPingCheck($itemid)
+    {
+        $iid  = intval($itemid);
+        global $manager;
+               $item = $manager->getItem($iid,0,0);
+        if ($item) {
+            $bid = intval(getBlogIDFromItemID($iid));
+            if ($this->getBlogOption($bid, 'ping_sendping') == "yes" ) {
+                $this->sendPings(array('blogid' => $bid));
+            }
+        }
+    }
+
+    function sendPings($data) {
+
+        if (!class_exists('xmlrpcmsg')) {
+            global $DIR_LIBS;
+            include($DIR_LIBS . 'xmlrpc.inc.php');
+        }
+        $this->myBlogId = $data['blogid'];
+
+        $ping_result = '';
+
+        if ($this->getOption('pingpong_pingomatic') == 'yes') {
+            $ping_result .= _PINGING . "Ping-o-matic:\n";
+            $ping_result .= $this->pingPingomatic();
+            $ping_result .= " | ";
+        }
+
+        if ($this->getOption('pingpong_weblogs') == 'yes') { 
+            $ping_result .= _PINGING . "Weblogs.com:\n";
+            $ping_result .= $this->pingWeblogs();
+            $ping_result .= " | ";
+        }
+
+        if ($this->getOption('pingpong_technorati') == 'yes') {
+            $ping_result .= _PINGING . "Technorati:\n";
+            $ping_result .= $this->pingTechnorati();
+            $ping_result .= " | ";
+        }
+
+        if ($this->getOption('pingpong_blogrolling') == 'yes') {
+            $ping_result .= _PINGING . "Blogrolling.com:\n";
+            $ping_result .= $this->pingBlogRollingDotCom();
+            $ping_result .= " | ";
+        }
+
+        if ($this->getOption('pingpong_blogs') == 'yes') {
+            $ping_result .= _PINGING . "Blog.gs:\n";
+            $ping_result .= $this->pingBloGs();
+            $ping_result .= " | ";
+        }
+
+        if ($this->getOption('pingpong_weblogues') == 'yes') {
+            $ping_result .= _PINGING . "Weblogues.com:\n";
+            $ping_result .= $this->pingWebloguesDotCom();
+            $ping_result .= " | ";
+        }
+
+        if ($this->getOption('pingpong_bloggde') == 'yes') {
+            $ping_result .= _PINGING . "Blog.de:\n";
+            $ping_result .= $this->pingBloggDe();
+            $ping_result .= " | ";
+        }
+
+        ACTIONLOG::add(INFO, $ping_result);
+    }
+
+    function pingPingomatic() {
+        $b = new BLOG($this->myBlogId);
+        $message = new xmlrpcmsg(
+                            'weblogUpdates.ping',
+                            array(
+                                new xmlrpcval($b->getName(), 'string'),
+                                new xmlrpcval($b->getURL(), 'string')
+                            )
+                   );
+
+        $c = new xmlrpc_client('/', 'rpc.pingomatic.com', 80);
+        //$c->setDebug(1);
+
+        $r = $c->send($message,30); // 30 seconds timeout...
+        return $this->processPingResult($r);
+    }
+
+    function pingWeblogs() {
+        $b = new BLOG($this->myBlogId);
+        $message = new xmlrpcmsg(
+                            'weblogupdates.ping',
+                            array(
+                                new xmlrpcval($b->getName(), 'string'),
+                                new xmlrpcval($b->getURL(), 'string')
+                            )
+                   );
+
+        $c = new xmlrpc_client('/rpc2', 'rpc.weblogs.com', 80);
+        //$c->setdebug(1);
+
+        $r = $c->send($message,30); // 30 seconds timeout...
+        return $this->processPingResult($r);
+    } 
+
+    function pingTechnorati() {
+        $b = new BLOG($this->myBlogId);
+        $message = new xmlrpcmsg(
+                            'weblogUpdates.ping',
+                            array(
+                                new xmlrpcval($b->getName(),'string'),
+                                new xmlrpcval($b->getURL(),'string')
+                            )
+                   );
+
+        $c = new xmlrpc_client('/rpc/ping/', 'rpc.technorati.com', 80);
+        //$c->setDebug(1);
+
+        $r = $c->send($message,30); // 30 seconds timeout...
+        return $this->processPingResult($r);
+    }
+
+    function pingBlogRollingDotCom() {
+        $b = new BLOG($this->myBlogId);
+        $message = new xmlrpcmsg(
+                            'weblogUpdates.ping',
+                            array(
+                                new xmlrpcval($b->getName(),'string'),
+                                new xmlrpcval($b->getURL(),'string')
+                            )
+                   );
+
+        $c = new xmlrpc_client('/pinger/', 'rpc.blogrolling.com', 80);
+        //$c->setDebug(1);
+
+        $r = $c->send($message,30); // 30 seconds timeout...     
+        return $this->processPingResult($r);
+    } 
+
+    function pingBloGs() {
+        $b = new BLOG($this->myBlogId);
+        $message = new xmlrpcmsg(
+                            'weblogUpdates.extendedPing',
+                            array(
+                                new xmlrpcval($b->getName(),'string'),
+                                new xmlrpcval($b->getURL(),'string')
+                            )
+                   );
+
+        $c = new xmlrpc_client('/', 'ping.blo.gs', 80);
+        //$c->setDebug(1);
+
+        $r = $c->send($message,30); // 30 seconds timeout...    
+        return $this->processPingResult($r);
+    } 
+
+    function pingWebloguesDotCom() {
+        $b = new BLOG($this->myBlogId);
+        $message = new xmlrpcmsg(
+                            'weblogUpdates.extendedPing',
+                            array(
+                                new xmlrpcval($b->getName(),'string'),
+                                new xmlrpcval($b->getURL(),'string')
+                            )
+                   );
+
+        $c = new xmlrpc_client('/RPC/', 'www.weblogues.com', 80);
+        //$c->setDebug(1);
+
+        $r = $c->send($message,30); // 30 seconds timeout...     
+        return $this->processPingResult($r);
+    }
+
+    function pingBloggDe() {
+        $b = new BLOG($this->myBlogId);
+        $message = new xmlrpcmsg(
+                            'bloggUpdates.ping',
+                            array(
+                                new xmlrpcval($b->getName(),'string'),
+                                new xmlrpcval($b->getURL(),'string')
+                            )
+                   );
+
+        $c = new xmlrpc_client('/', 'xmlrpc.blogg.de', 80);
+        //$c->setDebug(1);
+
+        $r = $c->send($message,30); // 30 seconds timeout...   
+        return $this->processPingResult($r);
+    } 
+
+    function processPingResult($r) {
+        global $php_errormsg;
+
+        if (($r == 0) && ($r->errno || $r->errstring)) {
+            return _PING_ERROR . " " . $r->errno . ' : ' . $r->errstring;
+        } elseif (($r == 0) && ($php_errormsg)) {
+            return _PING_PHP_ERROR . $php_errormsg;
+        } elseif ($r == 0) {
+            return _PING_PHP_PING_ERROR;
+        } elseif ($r->faultCode() != 0) {
+            return _PING_ERROR . ': ' . $r->faultString();
+        } else {
+            $r = $r->value();   // get response struct
+
+            // get values
+            $flerror = $r->structmem('flerror');
+            $flerror = $flerror->scalarval();
+
+            $message = $r->structmem('message');
+            $message = $message->scalarval();
+
+            if ($flerror != 0) {
+                return _PING_ERROR . ' (flerror=1): ' . $message;
+            } else {
+                return _PING_SUCCESS . ': ' . $message;
+            }
+        }
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/plugins/NP_SkinFiles.php b/utf8/nucleus/plugins/NP_SkinFiles.php
new file mode 100644 (file)
index 0000000..7a35da8
--- /dev/null
@@ -0,0 +1,162 @@
+<?php
+
+class NP_SkinFiles extends NucleusPlugin {
+
+   /* ==========================================================================================
+    * Nucleus SkinFiles Plugin
+    *
+    * Copyright 2005-2009 by Jeff MacMichael and Niels Leenheer
+    *
+    * @version $Id$
+    * @version $NucleusJP: NP_SkinFiles.php,v 1.4 2007/02/04 06:28:46 kimitake Exp $
+    *
+    * ==========================================================================================
+    * This program is free software and open source 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  or visit
+    * http://www.gnu.org/licenses/gpl.html
+    * ==========================================================================================
+    *
+    * Changes:
+    * v0.91 ged   - added ICO, PHPx files, fixed/added some icons
+    *             - changed perms on file or folder creation or upload to 0755 from 0640
+    *             - changed 'cancel' links for delete actions to $parent dir from http_referer
+    *             - changed order of links next to files... moved 'del' over a bit.  ;)
+    * v0.92 ged   - changed order of links next to dirs
+    *               $privateskins = FALSE by default
+    * v1.0  ged   - fixed security catch so it actually quits the script
+    *               "columnated" the files & dirs display for easier viewing
+    *               Made the edit cancel link more intuitive
+    * v1.01 ged   - fixed event_QuickMenu to properly skip for non-admins
+    *               lined up columns for directories & added <tr> highlights
+    * v2.00 rakaz - Almost complete rewrite
+    * v2.01 yama  - modified form button for IE
+    * v2.02 kimitake - multilingual support, modified form button for IE
+    * v2.03 yama - CSS out source. and textarea width bug fix for IE. And some lang add.And add routine empty file delete.
+       * v2.031 cacher - replace function 'basename' (PHP BUG)
+                         add help
+    */
+
+
+    function getName() {
+        return 'SkinFiles';
+    }
+
+    function getAuthor() {
+        return 'Misc authors';
+    }
+
+    function getURL() {
+        return 'http://wakka.xiffy.nl/skinfiles';
+    }
+
+    function getVersion() {
+               return '2.031';
+    }
+
+    function getDescription() {
+        return _SKINFILES_01;
+    }
+
+    function supportsFeature($what) {
+        switch($what) {
+            case 'SqlTablePrefix':
+            case 'HelpPage':
+                return 1;
+            default:
+                return 0;
+        }
+    }
+
+    function install() {
+        $this->createOption(
+            'generate_backup',
+                       '_SKINFILES_OPT_GENBACKUP',
+            'yesno',
+            'no'
+        );
+        $this->createOption(
+            'backup_prefix',
+                       '_SKINFILES_OPT_BACKUPPREFIX',
+            'text',
+            'bkup_'
+        );
+    }
+    
+    function unInstall() {
+    }
+
+    function getEventList() {
+        return array(
+            'QuickMenu',
+                       'AdminPrePageHead',
+                       'PrePluginOptionsEdit'
+        );
+    }
+    
+    function hasAdminArea() {
+        return 1;
+    }
+
+    function init() {
+        // include language file for this plugin
+        $language = preg_replace( '@\\|/@', '', getLanguageName());
+        if (file_exists($this->getDirectory().$language.'.php'))
+            include_once($this->getDirectory().$language.'.php');
+        else
+            include_once($this->getDirectory().'english.php');
+    }
+    
+       function event_QuickMenu(&$data) {
+        global $member;
+
+        // only show to admins
+        if (!($member->isLoggedIn() && $member->isAdmin())) return;
+
+        array_push(
+            $data['options'], 
+            array(
+                'title'   => _SKINFILES_TITLE,
+                'url'     => $this->getAdminURL(),
+                'tooltip' => _SKINFILES_TOOLTIP
+            )
+        );
+    }
+
+
+// start add yama.kyms
+       function event_AdminPrePageHead(&$data) {
+        global $CONF;
+        $path = $CONF['PluginURL'];
+        if ($data['action'] != 'plugin_SkinFiles') return;
+        
+            $data['extrahead'] .= <<< EOS
+<link rel="stylesheet" type="text/css" href="{$path}skinfiles/style.css" />
+EOS;
+        }
+        
+// end add yama.kyms
+
+       function event_PrePluginOptionsEdit($data)
+       {
+               if ($data['plugid'] === $this->getID()) {
+                       foreach($data['options'] as $key => $value){
+                               if (defined($value['description'])) {
+                                       $data['options'][$key]['description'] = constant($value['description']);
+                               }
+                       }
+               }
+       }
+}
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/plugins/index.html b/utf8/nucleus/plugins/index.html
new file mode 100755 (executable)
index 0000000..3974d80
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/plugins/ping/english.php b/utf8/nucleus/plugins/ping/english.php
new file mode 100644 (file)
index 0000000..226c58c
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+       define('_PING_DESC', 'This plugin can be used to ping many blog tracking services. - Don\'t forget to enable the option \'Ping weblog listing service on update\' in your blog settings!');
+       define('_PING_PINGOM', 'Ping-o-matic');
+       define('_PING_WEBLOGS', 'weblogs.com');
+       define('_PING_TECHNOR', 'Technorati');
+       define('_PING_BLOGR', 'Blogrolling');
+       define('_PING_BLOGS', 'Blo.gs (no longer works?)');
+       define('_PING_WEBLOGUES', 'Weblogues (no longer works?)');
+       define('_PING_BLOGGDE', 'Blogg.de (not working??)');
+       define('_PING_BG', 'Ping from background when a future post first appears');
+       define('_PINGING', 'Pinging ');
+       define('_PING_ERROR', 'Error');
+       define('_PING_PHP_ERROR', 'PHP Error: ');
+       define('_PING_PHP_PING_ERROR', 'Error while trying to send ping. Sorry about that.');
+       define('_PING_SUCCESS', 'Success');
+       define('_UPDATEDPING_GOSENDPING', 'Send Update ping'); 
+       define('_PING_EXTRA_PLUGIN_OPTION', 'Blog Tracking Ping Service');
+       define('_PING_SENDPING', 'Notify ping service when new post is added?');
+?>
diff --git a/utf8/nucleus/plugins/ping/japanese-euc.php b/utf8/nucleus/plugins/ping/japanese-euc.php
new file mode 100644 (file)
index 0000000..f4afce6
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+       define('_PING_DESC', '¤³¤Î¥×¥é¥°¥¤¥ó¤Ï°ìÅ٤˿¤¯¤Î¥Ö¥í¥°¥È¥é¥Ã¥­¥ó¥°¥·¥¹¥Æ¥à¤Ë ping ¤òÁ÷¿®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£- ¥Ö¥í¥°ÀßÄê¤Ç¡Ö¹¹¿·»þ¤Ëweblogs¥¢¥Ã¥×¥Ç¡¼¥ÈÄÌÃÎ¥µ¡¼¥Ó¥¹¤ØPing¤òÁ÷¤ê¤Þ¤¹¤«?¡×¤Î¥ª¥×¥·¥ç¥ó¤ò¡Ö¤Ï¤¤¡×¤Ë¤¹¤ë¤³¤È¤ò˺¤ì¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£');
+       define('_PING_PINGOM', 'Ping-o-matic');
+       define('_PING_WEBLOGS', 'weblogs.com');
+       define('_PING_TECHNOR', 'Technorati');
+       define('_PING_BLOGR', 'Blogrolling');
+       define('_PING_BLOGS', 'Blo.gs (¥µ¡¼¥Ó¥¹½ªÎ»¡©)');
+       define('_PING_WEBLOGUES', 'Weblogues (¥µ¡¼¥Ó¥¹½ªÎ»¡©)');
+       define('_PING_BLOGGDE', 'Blogg.de (¥µ¡¼¥Ó¥¹Ää»ßÃæ??)');
+       define('_PING_BG', '̤Íè¤ÎÆüÉդε­»ö¤¬Í­¸ú¤Ë¤Ê¤Ã¤¿¤È¤­¥Ð¥Ã¥¯¥°¥é¥ó¥É¤Ç ping ¤òÁ÷¿®¤¹¤ë');
+       define('_PINGING', 'Ping Á÷¿®Ãæ ');
+       define('_PING_ERROR', '¥¨¥é¡¼');
+       define('_PING_PHP_ERROR', 'PHP ¥¨¥é¡¼: ');
+       define('_PING_PHP_PING_ERROR', '¿½¤·Ìõ¤¢¤ê¤Þ¤»¤ó¡£ping ¤òÁ÷¿®Ãæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£');
+       define('_PING_SUCCESS', 'À®¸ù');
+       define('_UPDATEDPING_GOSENDPING', 'ping¤òÁ÷¿®¤¹¤ë'); 
+       define('_PING_EXTRA_PLUGIN_OPTION', '¹¹¿·ping');
+       define('_PING_SENDPING', '¿·¤·¤¯µ­»ö¤¬Åê¹Æ¤µ¤ì¤¿»þ¤Ë¹¹¿·ping¤òÁ÷¿®¤·¤Þ¤¹¤«¡©');
+?>
diff --git a/utf8/nucleus/plugins/ping/japanese-utf8.php b/utf8/nucleus/plugins/ping/japanese-utf8.php
new file mode 100644 (file)
index 0000000..f35abcb
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+       define('_PING_DESC', 'このプラグインは一度に多くのブログトラッキングシステムに ping を送信することができます。- ブログ設定で「更新時にweblogsアップデート通知サービスへPingを送りますか?」のオプションを「はい」にすることを忘れないようにしてください。');
+       define('_PING_PINGOM', 'Ping-o-matic');
+       define('_PING_WEBLOGS', 'weblogs.com');
+       define('_PING_TECHNOR', 'Technorati');
+       define('_PING_BLOGR', 'Blogrolling');
+       define('_PING_BLOGS', 'Blo.gs (サービス終了?)');
+       define('_PING_WEBLOGUES', 'Weblogues (サービス終了?)');
+       define('_PING_BLOGGDE', 'Blogg.de (サービス停止中??)');
+       define('_PING_BG', '未来の日付の記事が有効になったときバックグランドで ping を送信する');
+       define('_PINGING', 'Ping 送信中 ');
+       define('_PING_ERROR', 'エラー');
+       define('_PING_PHP_ERROR', 'PHP エラー: ');
+       define('_PING_PHP_PING_ERROR', '申し訳ありません。ping を送信中にエラーが発生しました。');
+       define('_PING_SUCCESS', '成功');
+       define('_UPDATEDPING_GOSENDPING', 'pingを送信する'); 
+       define('_PING_EXTRA_PLUGIN_OPTION', '更新ping');
+       define('_PING_SENDPING', '新しく記事が投稿された時に更新pingを送信しますか?');
+?>
diff --git a/utf8/nucleus/plugins/ping/ping.php b/utf8/nucleus/plugins/ping/ping.php
new file mode 100644 (file)
index 0000000..63da95a
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+require(dirname(__FILE__).'/../../../config.php');
+
+include($DIR_LIBS . 'PLUGINADMIN.php');
+
+// create a object of the plugin via Plugin Admin
+$oPluginAdmin = new PluginAdmin('Ping');
+ACTIONLOG::add(INFO, 'NP_Ping: Sending ping (from background)');
+
+$blogid = intval($argv[1]);
+if ($blogid > 0) {
+       $oPluginAdmin->plugin->sendPings($blogid);
+} else {
+       ACTIONLOG::add(WARNING, 'NP_Ping: invalid blogid, background ping abort');
+}
+?>
diff --git a/utf8/nucleus/plugins/skinfiles/dir.gif b/utf8/nucleus/plugins/skinfiles/dir.gif
new file mode 100644 (file)
index 0000000..4b8ac3b
Binary files /dev/null and b/utf8/nucleus/plugins/skinfiles/dir.gif differ
diff --git a/utf8/nucleus/plugins/skinfiles/english.php b/utf8/nucleus/plugins/skinfiles/english.php
new file mode 100644 (file)
index 0000000..9821a31
--- /dev/null
@@ -0,0 +1,185 @@
+<?php
+
+   /*
+       * @version $Id$
+       * @version $NucleusJP: english.php,v 1.3 2007/02/04 06:28:46 kimitake Exp $
+       */
+
+define('_SKINFILES_TITLE',                             'Skin Files');
+define('_SKINFILES_TOOLTIP',                   'Manage skin files');
+
+define('_SKINFILES_MANAGEMENT',                        'Skin File Management');
+define('_SKINFILES_CURRENT_LOCATION',  'Current location: ');
+define('_SKINFILES_NAME',                              'Name');
+define('_SKINFILES_SIZE',                              'Size');
+define('_SKINFILES_LAST_MODIFIED',             'Last Modified');
+define('_SKINFILES_ACTIONS',                   'Actions');
+
+define('_SKINFILES_RENAME',                            'Rename');
+define('_SKINFILES_RENAME_DIR_MSG',            'Rename directory');
+define('_SKINFILES_RENAME_DIR_MSG2',   'to:');
+define('_SKINFILES_EDIT_FILE_MSG',             'Edit file');
+define('_SKINFILES_RENAME_FILE_MSG',   'Rename file ');
+define('_SKINFILES_RENAME_FILE_MSG2',  'to:');
+define('_SKINFILES_DELETE',                            'Delete');
+define('_SKINFILES_EDIT',                              'Edit');
+define('_SKINFILES_CANCEL',                            'Cancel');
+define('_SKINFILES_DOWNLOAD',                  'Download');
+define('_SKINFILES_SAVE_CHANGES',              'Save Changes');
+
+define('_SKINFILES_DATE_FORMAT',               'M d Y, H:i');
+
+define('_SKINFILES_CREATE_NEW_FILE',   'Create a new file');
+define('_SKINFILES_CREATE_NEW_DIR',            'Create a new directory');
+define('_SKINFILES_CREATE_FILE',               'Create file');
+define('_SKINFILES_CREATE',                            'Create');
+define('_SKINFILES_UPLOAD',                            'Upload');
+define('_SKINFILES_DELETE_FILE',               'Delete file');
+define('_SKINFILES_DELETE_FILE2',              '?');
+define('_SKINFILES_DELETE_DIR',                        'Delete directory');
+define('_SKINFILES_DELETE_DIR2',               '?');
+define('_SKINFILES_DELETE_ALL',                        'Delete All');
+define('_SKINFILES_DELETE_FILE_MSG',   'Delete the following files from directory');
+define('_SKINFILES_DELETE_FILE_MSG2',  '?');
+define('_SKINFILES_UPLOAD_NEW_FILE',   'Upload new file');
+define('_SKINFILES_DEL_ALL_FILES',             'Delete all files in this directory');
+define('_SKINFILES_DEL_ALL_FILES_MSG', 'Delete all files? (will ask for confirmation)');
+
+define('_SKINFILES_VIEW_FILE',                         'View file ');
+define('_SKINFILES_VIEW_FILE_IMG_INFO',                'Image information');
+define('_SKINFILES_VIEW_FILE_TYPE',                    'Type:');
+define('_SKINFILES_VIEW_FILE_WIDTH',           'Width:');
+define('_SKINFILES_VIEW_FILE_HEIGHT',          'Height:');
+define('_SKINFILES_VIEW_FILE_PX',                      ' px');
+define('_SKINFILES_VIEW_FILE_CHANNELS',                'Channels:');
+define('_SKINFILES_VIEW_FILE_COLOR_DEPTH',     'Color depth:');
+define('_SKINFILES_VIEW_FILE_BITS',                    ' bits');
+define('_SKINFILES_VIEW_FILE_COLORS',          'Colors:');
+define('_SKINFILES_VIEW_FILE_COLORS2',         ' colors');
+
+
+
+define('_SKINFILES_ERR_DIR_DOES_NOT_CONTAIN',  'This directory does not contain any files or directories.');
+define('_SKINFILES_ERR_DIR_DOES_NOT_EXIST1',   'Error: The directory ');
+define('_SKINFILES_ERR_DIR_DOES_NOT_EXIST2',   'does not exist ');
+define('_SKINFILES_ERR_DIR_DOES_NOT_EXIST3',   'or you do not have permission to rename the directory.');
+
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR1', 'Error: Could not rename the directory ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR2', 'because no new name was supplied.');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR3', 'Error: Could not rename the directory ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR4', 'because the supplied name contains one or more illegal characters.');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR5', 'Error: Could not rename the directory ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR6', 'because the supplied name is the same as the original name.');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR7', ' Please use a different name.');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR8', 'Error: Could not rename the directory ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR9', 'because the supplied name is already used by another file or directory.');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR10',        'Consider using a different name, or delete the existing file or directory first.');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR11',        'Error: Could not rename the directory ');
+
+define('_SKINFILES_RENAMED_DIR1',                              'Message: The directory ');
+define('_SKINFILES_RENAMED_DIR2',                              'has been renamed ');
+define('_SKINFILES_RENAMED_DIR3',                              'to ');
+define('_SKINFILES_RENAMED_DIR4',                              '.');
+
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR1', 'Error: Could not create a new directory because there was no name supplied. ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR2', 'Error: Could not create the directory ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR3', 'because the supplied name contains one or more illegal characters.');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR4', 'Error: Could not create the directory ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR5', 'because the supplied name is already used by another file or directory.');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR6', ' Consider using a different name, or delete the existing file or directory first.');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR7', 'Message: The directory ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR8', 'has been created.');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR9', 'Error: The directory ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR10',        'does not exist ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR11',        'or you do not have permission to access that directory.');
+
+define('_SKINFILES_ERR_DELETE_DIR1',                   'Error: The directory ');
+define('_SKINFILES_ERR_DELETE_DIR2',                   'does not exist ');
+define('_SKINFILES_ERR_DELETE_DIR3',                   'or you do not have permission to delete the directory.');
+define('_SKINFILES_ERR_DELETE_DIR4',                   'Error: Could not delete the directory.');
+define('_SKINFILES_ERR_DELETE_DIR5',                   'Message: The directory ');
+define('_SKINFILES_ERR_DELETE_DIR6',                   'has been deleted.');
+define('_SKINFILES_ERR_DELETE_DIR7',                   'There are currently no files in this directory that can be deleted.');
+
+define('_SKINFILES_ERR_EMPTY_DIR1',                            'Message: The file ');
+define('_SKINFILES_ERR_EMPTY_DIR2',                            'has been deleted.');
+define('_SKINFILES_ERR_EMPTY_DIR3',                            'Error: The file ');
+define('_SKINFILES_ERR_EMPTY_DIR4',                            'could not be deleted.');
+define('_SKINFILES_ERR_EMPTY_DIR5',                            'Error: The directory ');
+define('_SKINFILES_ERR_EMPTY_DIR6',                            'does not exist ');
+define('_SKINFILES_ERR_EMPTY_DIR7',                            'or you do not have permission to access that directory.');
+
+define('_SKINFILES_ERR_DOWNLOAD_FILE1',                        'Error: Could not access the file.');
+define('_SKINFILES_ERR_DOWNLOAD_FILE2',                        'Error: No permission to access the file.');
+
+define('_SKINFILES_ERR_VIEW_FILE1',                            'Error: The file ');
+define('_SKINFILES_ERR_VIEW_FILE2',                            'does not exist ');
+define('_SKINFILES_ERR_VIEW_FILE3',                            'or you do not have permission to view the file.');
+
+define('_SKINFILES_ERR_EDIT_FILE1',                            'Error: The file ');
+define('_SKINFILES_ERR_EDIT_FILE2',                            'does not exist ');
+define('_SKINFILES_ERR_EDIT_FILE3',                            'or you do not have permission to edit the file.');
+define('_SKINFILES_ERR_EDIT_FILE4',                            'Message: The file ');
+define('_SKINFILES_ERR_EDIT_FILE5',                            'has been saved.');
+define('_SKINFILES_ERR_EDIT_FILE6',                            'Error: The file ');
+define('_SKINFILES_ERR_EDIT_FILE7',                            'could not be saved.');
+
+define('_SKINFILES_ERR_RENAME_FILE1',                  'Error: The file ');
+define('_SKINFILES_ERR_RENAME_FILE2',                  'does not exist ');
+define('_SKINFILES_ERR_RENAME_FILE3',                  'or you do not have permission to rename the file.');
+define('_SKINFILES_ERR_RENAME_FILE4',                  'Error: Could not rename the file ');
+define('_SKINFILES_ERR_RENAME_FILE5',                  'because no new name was supplied.');
+define('_SKINFILES_ERR_RENAME_FILE6',                  'Error: Could not rename the file ');
+define('_SKINFILES_ERR_RENAME_FILE7',                  'because the supplied file name contains one or more illegal characters.');
+define('_SKINFILES_ERR_RENAME_FILE8',                  'Error: Could not rename the file ');
+define('_SKINFILES_ERR_RENAME_FILE9',                  'because the supplied name is the same as the original name. Please use a different name.');
+define('_SKINFILES_ERR_RENAME_FILE10',                 'Error: Could not rename the file ');
+define('_SKINFILES_ERR_RENAME_FILE11',                 'because the supplied name is already used by another file or directory. Consider using a different name, or ');
+define('_SKINFILES_ERR_RENAME_FILE12',                 'delete the existing file or directory first.');
+define('_SKINFILES_ERR_RENAME_FILE13',                 'Error: Could not rename the file ');
+define('_SKINFILES_ERR_RENAME_FILE14',                 '.');
+define('_SKINFILES_ERR_RENAME_FILE15',                 'Message: The file ');
+define('_SKINFILES_ERR_RENAME_FILE16',                 'has been renamed ');
+define('_SKINFILES_ERR_RENAME_FILE17',                 'to ');
+define('_SKINFILES_ERR_RENAME_FILE18',                 '.');
+
+define('_SKINFILES_ERR_CREATE_FILE1',                  'Error: Could not create a new file because there was no name supplied.');
+define('_SKINFILES_ERR_CREATE_FILE2',                  'Error: Could not create the file ');
+define('_SKINFILES_ERR_CREATE_FILE3',                  'because the supplied file name contains one or more illegal characters.');
+define('_SKINFILES_ERR_CREATE_FILE4',                  'Error: Could not create the file ');
+define('_SKINFILES_ERR_CREATE_FILE5',                  'because the supplied name is already used by another file or directory. Consider using a different name, or ');
+define('_SKINFILES_ERR_CREATE_FILE6',                  'delete the existing file or directory first.');
+define('_SKINFILES_ERR_CREATE_FILE7',                  'Error: Could not create the file ');
+define('_SKINFILES_ERR_CREATE_FILE8',                  '.');
+define('_SKINFILES_ERR_CREATE_FILE9',                  'Message: The file ');
+define('_SKINFILES_ERR_CREATE_FILE10',                 'has been created.');
+define('_SKINFILES_ERR_CREATE_FILE11',                 'Error: The directory ');
+define('_SKINFILES_ERR_CREATE_FILE12',                 'does not exist ');
+define('_SKINFILES_ERR_CREATE_FILE13',                 'or you do not have permission to access that directory.');
+
+define('_SKINFILES_ERR_DELETE_FILE1',                  'Error: The file ');
+define('_SKINFILES_ERR_DELETE_FILE2',                  'does not exist ');
+define('_SKINFILES_ERR_DELETE_FILE3',                  'or you do not have permission to delete the file.');
+define('_SKINFILES_ERR_DELETE_FILE4',                  'Error: Could not delete the file.');
+define('_SKINFILES_ERR_DELETE_FILE5',                  'Message: The file ');
+define('_SKINFILES_ERR_DELETE_FILE6',                  'has been delete.');
+
+define('_SKINFILES_ERR_UPLOAD_FILE1',                  'Error: Could not upload the file ');
+define('_SKINFILES_ERR_UPLOAD_FILE2',                  '. ');
+define('_SKINFILES_ERR_UPLOAD_FILE3',                  'Max / Current size: ');
+define('_SKINFILES_ERR_UPLOAD_FILE4',                  '.');
+define('_SKINFILES_ERR_UPLOAD_FILE5',                  'Error: Could not upload the file ');
+define('_SKINFILES_ERR_UPLOAD_FILE6',                  ',because the supplied file name contains one or more illegal characters.');
+define('_SKINFILES_ERR_UPLOAD_FILE7',                  'Message: The file ');
+define('_SKINFILES_ERR_UPLOAD_FILE8',                  'has been uploaded.');
+define('_SKINFILES_ERR_UPLOAD_FILE9',                  'Error: The directory ');
+define('_SKINFILES_ERR_UPLOAD_FILE10',                 'does not exist ');
+define('_SKINFILES_ERR_UPLOAD_FILE11',                 'or you do not have permission to access that directory.');
+
+
+define('_SKINFILES_01',                                'A simple file manager for skins.');
+define('_SKINFILES_02',                                'The file is empty. Do you delete this? ');
+
+define('_SKINFILES_OPT_GENBACKUP',                             'When editing, is back-up file generated?');
+define('_SKINFILES_OPT_BACKUPPREFIX',                  'Prefix of the file name of the backup');
+?>
diff --git a/utf8/nucleus/plugins/skinfiles/generic.gif b/utf8/nucleus/plugins/skinfiles/generic.gif
new file mode 100644 (file)
index 0000000..1f11633
Binary files /dev/null and b/utf8/nucleus/plugins/skinfiles/generic.gif differ
diff --git a/utf8/nucleus/plugins/skinfiles/help.html b/utf8/nucleus/plugins/skinfiles/help.html
new file mode 100644 (file)
index 0000000..d9a33cf
--- /dev/null
@@ -0,0 +1,8 @@
+<div style="width:100%;">\r
+<a href="http://wakka.xiffy.nl/skinfiles" target="inlinehelp">English</a>|\r
+<a href="http://japan.nucleuscms.org/wiki/plugins:skinfiles" target="inlinehelp">Japanese</a><br />\r
+<iframe name="inlinehelp" id="inlinehelp" title="inlinehelp" src="http://japan.nucleuscms.org/wiki/plugins:skinfiles" width="100%" height="1600" frameborder="0">\r
+<a href="http://wakka.xiffy.nl/skinfiles">English</a>|\r
+<a href="http://japan.nucleuscms.org/wiki/plugins:skinfiles">Japanese</a><br />\r
+</iframe>\r
+</div>\r
diff --git a/utf8/nucleus/plugins/skinfiles/home.gif b/utf8/nucleus/plugins/skinfiles/home.gif
new file mode 100644 (file)
index 0000000..fec3f68
Binary files /dev/null and b/utf8/nucleus/plugins/skinfiles/home.gif differ
diff --git a/utf8/nucleus/plugins/skinfiles/html.gif b/utf8/nucleus/plugins/skinfiles/html.gif
new file mode 100644 (file)
index 0000000..f7a5a76
Binary files /dev/null and b/utf8/nucleus/plugins/skinfiles/html.gif differ
diff --git a/utf8/nucleus/plugins/skinfiles/image.gif b/utf8/nucleus/plugins/skinfiles/image.gif
new file mode 100644 (file)
index 0000000..a9cbcd7
Binary files /dev/null and b/utf8/nucleus/plugins/skinfiles/image.gif differ
diff --git a/utf8/nucleus/plugins/skinfiles/index.php b/utf8/nucleus/plugins/skinfiles/index.php
new file mode 100644 (file)
index 0000000..4825b31
--- /dev/null
@@ -0,0 +1,1514 @@
+<?php\r
+\r
+   /* ==========================================================================================\r
+       * Nucleus SkinFiles Plugin\r
+       *\r
+       * Copyright 2005-2007 by Jeff MacMichael and Niels Leenheer\r
+       *\r
+       * @version $Id$\r
+       * @version $NucleusJP: index.php,v 1.6 2007/03/20 19:32:47 kmorimatsu Exp $\r
+       *\r
+       * ==========================================================================================\r
+       * This program is free software and open source software; you can redistribute\r
+       * it and/or modify it under the terms of the GNU General Public License as\r
+       * published by the Free Software Foundation; either version 2 of the License,\r
+       * or (at your option) any later version.\r
+       *\r
+       * This program is distributed in the hope that it will be useful, but WITHOUT\r
+       * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+       * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+       * more details.\r
+       *\r
+       * You should have received a copy of the GNU General Public License along\r
+       * with this program; if not, write to the Free Software Foundation, Inc.,\r
+       * 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  or visit\r
+       * http://www.gnu.org/licenses/gpl.html\r
+       * ==========================================================================================\r
+       */\r
+\r
+       $strRel = '../../../'; \r
+       require($strRel . 'config.php');\r
+       include($DIR_LIBS . 'PLUGINADMIN.php');\r
+\r
+       $language = preg_replace( '@\\|/@', '', getLanguageName());\r
+       $langfile = $language.'.php';\r
+       if (file_exists($langfile))\r
+               include_once($langfile);\r
+       else\r
+               include_once('english.php');\r
+\r
+       /**\r
+         * Create admin area\r
+         */\r
+\r
+       $oPluginAdmin  = new PluginAdmin('SkinFiles');\r
+\r
+       if (!($member->isLoggedIn() && $member->isAdmin()))\r
+       {\r
+               /* begin modification by yama.kyms */\r
+               $oPluginAdmin->start();\r
+               /* end modification */\r
+               echo '<p>' . _ERROR_DISALLOWED . '</p>';\r
+               $oPluginAdmin->end();\r
+               exit;\r
+       }\r
+\r
+\r
+       \r
+       /**\r
+         * Setup main variables\r
+         */\r
+\r
+       $rootDirectory = sfRealPath($DIR_SKINS);                        \r
+       $rootUrl       = $CONF['SkinsURL'];\r
+       $pluginUrl         = $oPluginAdmin->plugin->getAdminURL();\r
+\r
+       $filetypes = array (\r
+               'text'  => array ('inc', 'txt', 'css', 'js', 'php'),\r
+               'html'  => array ('htm', 'html'),\r
+               'img'   => array ('png', 'gif', 'jpg', 'jpeg', 'bmp', 'ico', 'swf'),\r
+       );\r
+       \r
+       \r
+       /**\r
+         * Bypass admin area for downloads\r
+         */\r
+       \r
+       $action = requestVar('action');\r
+\r
+       if ($action == 'download') { \r
+               _skinfiles_download();\r
+               exit;\r
+       }\r
+\r
+\r
+       /**\r
+         * Build admin area\r
+         */\r
+\r
+       $oPluginAdmin->start();\r
+       \r
+       echo "<h2>" . _SKINFILES_MANAGEMENT . "</h2>";\r
+       \r
+       $actions = array (\r
+               'renfile', 'renfile_process', 'delfile', 'delfile_process', \r
+               'editfile', 'editfile_process', 'uploadfile', 'createfile', 'viewfile',\r
+               'rendir', 'rendir_process', 'deldir', 'deldir_process',\r
+               'emptydir', 'emptydir_process', 'createdir'\r
+       );\r
+       \r
+       if (in_array($action, $actions)) \r
+       { \r
+               if (!$manager->checkTicket())\r
+               {\r
+                       echo '<p class="error">' . _ERROR . ': ' . _ERROR_BADTICKET . '</p>';\r
+                       sfShowDirectory();\r
+                       \r
+               } \r
+               else \r
+               {\r
+                       call_user_func('_skinfiles_' . $action);\r
+               }\r
+       } \r
+       else \r
+       {\r
+               sfShowDirectory();\r
+       }\r
+\r
+       $oPluginAdmin->end();\r
+       exit;\r
+       \r
+       \r
+\r
+\r
+\r
+\r
+\r
+       /* Helper functions **************************************************************************************************************/\r
+\r
+       function sfExpandDirectory ($path) {\r
+          /* IN:  relative directory\r
+               * OUT: full path to directory\r
+               */\r
+\r
+               global $rootDirectory;\r
+               return sfRealPath($rootDirectory . $path);\r
+       }\r
+       \r
+       function sfRealPath ($path) {\r
+          /* IN:  full path \r
+               * OUT: canonicalized absolute pathname\r
+               */\r
+\r
+               $path = realpath($path);\r
+               $path = str_replace('\\', '/', $path);  \r
+               $path = substr($path, strlen($path) - 1) != '/' ? $path . '/' : $path;\r
+               return $path;\r
+       }\r
+\r
+       function sfFullUrl ($path) {\r
+          /* IN:  full path including filename\r
+               * OUT: url including filename\r
+               */\r
+\r
+               global $rootDirectory, $rootUrl;\r
+               \r
+               $path = str_replace($rootDirectory, '', $path);\r
+               $path = rawurlencode($path);\r
+               $path = str_replace('%2F', '/', $path);\r
+               return $rootUrl . $path;\r
+       }\r
+\r
+       function sfValidPath ($path) {\r
+          /* IN:  full path excluding or including filename\r
+               * OUT: boolean, true if full path is or is within rootDirectory\r
+               */\r
+\r
+               global $rootDirectory;\r
+               return substr($path, 0, strlen($rootDirectory)) == $rootDirectory;\r
+       }\r
+       \r
+       function sfRelativePath ($path) {\r
+          /* IN:  full path including or excluding filename\r
+               * OUT: relative path from rootDirectory\r
+               */\r
+\r
+               global $rootDirectory;\r
+               return str_replace($rootDirectory, '', $path);\r
+       }\r
+       \r
+       function sfIsFileType ($type, $file) {\r
+\r
+               global $filetypes;\r
+               return isset($filetypes[$type]) && in_array(strtolower(substr(strrchr($file, "."), 1)), $filetypes[$type]);\r
+       }\r
+\r
+       function sfAllowEditing ($file) {\r
+               return sfIsFileType('html', $file) || sfIsFileType('text', $file);\r
+       }\r
+       \r
+       function sfAllowViewing ($file) {\r
+               return sfIsFileType('html', $file) || sfIsFileType('text', $file) || sfIsFileType('img', $file);\r
+       }\r
+\r
+\r
+       function sfDisplayPath ($relative) {\r
+       \r
+               global $pluginUrl;\r
+               \r
+               $result  = '<a href="' . htmlspecialchars($pluginUrl) . '" title="Go back to &laquo;skins&raquo;">';\r
+               $result .= '<img src="' . htmlspecialchars($pluginUrl . 'home.gif') . '" alt="" /> skins</a> / ';\r
+\r
+               $parts = explode('/', $relative);\r
+               $part = '';\r
+               \r
+               while (list(,$v) = each ($parts)) {\r
+                       if ($v != '') {\r
+                               $part .= $v . '/';\r
+                               \r
+                               $result .= '<a href="' . htmlspecialchars($pluginUrl . '?dir=' . rawurlencode($part)) . '" ';\r
+                               $result .= 'title="Go back to &laquo;' . htmlspecialchars($v) . '&raquo;">';\r
+                               $result .= '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="" /> ';\r
+                               $result .= htmlspecialchars($v) . '</a> / ';\r
+                       }\r
+               }\r
+               \r
+               return $result;\r
+       }\r
+\r
+       function sfIcon ($file) {\r
+       \r
+               global $pluginUrl;\r
+       \r
+               $ext = strtolower(substr(strrchr($file, "."), 1));\r
+               \r
+               switch ($ext) {\r
+                       case 'htm':\r
+                       case 'html':\r
+                               return $pluginUrl . 'html.gif';\r
+                               break;\r
+\r
+                       case 'txt':\r
+                       case 'js':\r
+                       case 'css':\r
+                       case 'inc':\r
+                               return $pluginUrl . 'text.gif';\r
+                               break;\r
+\r
+                       case 'gif':\r
+                       case 'png':\r
+                       case 'jpg':\r
+                       case 'jpeg':\r
+                       case 'bmp':\r
+                       case 'xbmp':\r
+                       case 'ico':\r
+                               return $pluginUrl . 'image.gif';\r
+                               break;\r
+\r
+                       case 'php':\r
+                       case 'php3':\r
+                       case 'php4':\r
+                               return $pluginUrl . 'php.gif';\r
+                               break;\r
+                               \r
+                       default:\r
+                               return $pluginUrl . 'generic.gif';\r
+                               break;\r
+               }\r
+       }\r
+\r
+       function sfIllegalFilename($name) {\r
+               return preg_match('#[\n\r\\\/\:\*\?\"\<\>\|]#', $name);\r
+       }\r
+\r
+       function sfDirectoryIsEmpty($dir) {\r
+               \r
+               $count = 0;\r
+               \r
+               if ($dh = opendir($dir)) \r
+               {\r
+                       while (($file = readdir($dh)) !== false) \r
+                               $count++;\r
+                       \r
+                       closedir($dh);\r
+               }\r
+               \r
+               // $count must be smaller or equal than 2, because '.' \r
+               // and '..' are always returned by readdir().\r
+               return $count <= 2;\r
+       }\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+       /* Show directory ****************************************************************************************************************/\r
+\r
+       function sfShowDirectory($default = '') {\r
+\r
+               global $pluginUrl, $rootDirectory, $CONF, $manager;\r
+               \r
+               $directory = $default != '' ? \r
+                       $default : \r
+                       sfExpandDirectory(trim(requestVar('dir')));\r
+               \r
+               if (!sfValidPath($directory) || !is_dir($directory)) {\r
+                       $directory = $rootDirectory;\r
+               }\r
+\r
+               $relative  = sfRelativePath ($directory);\r
+               \r
+               echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative) . '</p>';                  \r
+\r
+                       \r
+               $dirs = array();\r
+               $files = array();\r
+\r
+               if ($dh = @opendir($directory)) { \r
+                       while (($file = readdir($dh)) !== false) { \r
+                               if (!preg_match("/^\.{1,2}$/", $file)) {\r
+                                       $fstat = @stat($directory . $file);\r
+                               \r
+                                       if ($fstat['mode'] & 040000)\r
+                                               $dirs[$file] = $fstat;\r
+                                       else\r
+                                               $files[$file] = $fstat;\r
+                               }\r
+                       }\r
+                       closedir($dh); \r
+               }                       \r
+               \r
+               ksort($dirs);\r
+               ksort($files);\r
+               \r
+               echo '<table><thead><tr>';\r
+               echo '<th>' . _SKINFILES_NAME . '</th><th>' . _SKINFILES_SIZE . '</th><th>' . _SKINFILES_LAST_MODIFIED . '</th><th colspan="4">' . _SKINFILES_ACTIONS . '</th>';\r
+               echo '</tr></thead>';\r
+\r
+               while (list($name, $stat) = each($dirs)) {\r
+                       \r
+                       $dir = sfRelativePath($directory . $name . '/');\r
+                               \r
+                       echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';\r
+                       \r
+                       if (is_readable ($directory . $name)) \r
+                       {\r
+                               echo '<a href="' . htmlspecialchars($pluginUrl . '?dir=' . rawurlencode($dir)) . '">';\r
+                               echo '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="folder" /> ';\r
+                               echo htmlspecialchars($name).'</a>';                    \r
+                       }\r
+                       else\r
+                       {\r
+                               echo '<img src="' . htmlspecialchars($pluginUrl . 'dir.gif') . '" alt="folder" /> ';\r
+                               echo htmlspecialchars($name);                   \r
+                       }\r
+                                               \r
+                       echo '</td>';\r
+                               \r
+                       $renUrl = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($dir));\r
+                       $delUrl = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($dir));\r
+                               \r
+                       echo '<td>&ndash;</td>';\r
+                       echo '<td>' . date(_SKINFILES_DATE_FORMAT, $stat['mtime']);\r
+                       \r
+                       \r
+                       if (is_writable($directory . $name)) {\r
+                               echo '<td><a href="' . htmlspecialchars($renUrl) . '" title="' . _SKINFILES_RENAME . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_RENAME . '</a></td>';\r
+                       } else {\r
+                               echo '<td>&nbsp;</td>';\r
+                       }\r
+                       \r
+                       if (is_writable($directory . $name) && sfDirectoryIsEmpty($directory . $name)) {\r
+                               echo '<td><a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_DELETE . '</a></td>';\r
+                       } else {\r
+                               echo '<td>&nbsp;</td>';\r
+                       }\r
+                       \r
+                       echo '<td>&nbsp;</td><td>&nbsp;</td>';\r
+                       echo '</tr>';\r
+               }\r
+\r
+\r
+               while (list($name, $stat) = each($files)) {\r
+\r
+                       $file = sfRelativePath($directory . $name);\r
+\r
+                       $renUrl   = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file='  . rawurlencode($file));\r
+                       $delUrl   = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file='  . rawurlencode($file));\r
+                       $editUrl  = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode($file));\r
+                       $viewUrl  = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode($file));\r
+                       $dlUrl    = $manager->addTicketToUrl($pluginUrl . '?action=download&file=' . rawurlencode($file));\r
+\r
+                       echo '<tr onmouseover="focusRow(this);" onmouseout="blurRow(this);"><td>';\r
+                       \r
+                       if (is_readable ($directory . $name) && sfAllowViewing($name)) \r
+                       {\r
+                               echo '<a href="' . htmlspecialchars($viewUrl) . '">';\r
+                               echo '<img src="' . htmlspecialchars(sfIcon($name)) . '" alt="" /> ';\r
+                               echo htmlspecialchars($name).'</a>';\r
+                       }\r
+                       else\r
+                       {\r
+                               echo '<img src="' . htmlspecialchars(sfIcon($name)) . '" alt="" /> ';\r
+                               echo htmlspecialchars($name);\r
+                       }\r
+\r
+                       echo '</td><td>';\r
+                       echo ceil($stat['size'] / 1024) . ' kB';\r
+                       echo '</td><td>';\r
+                       echo date(_SKINFILES_DATE_FORMAT, $stat['mtime']);\r
+                       echo '</td><td>';\r
+                               \r
+                       if (is_writable($directory . $name)) {\r
+                               echo '<a href="' . htmlspecialchars($renUrl) . '" title="' . _SKINFILES_RENAME . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_RENAME . '</a>';\r
+                       } else {\r
+                               echo '&nbsp;';\r
+                       }\r
+                               \r
+                       echo '</td><td>';\r
+\r
+                       if (is_writable($directory . $name)) {\r
+                               echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_DELETE . '</a>';\r
+                       } else {\r
+                               echo '&nbsp;';\r
+                       }\r
+                               \r
+                       echo '</td><td>';\r
+                       \r
+                       if (is_writable($directory . $name) && sfAllowEditing($name))\r
+                               echo '<a href="'. htmlspecialchars($editUrl) . '" title="' . _SKINFILES_EDIT . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_EDIT . '</a>';\r
+                       else\r
+                               echo '&nbsp;';\r
+\r
+                       echo '</td><td>';\r
+                       \r
+                       if (is_readable ($directory . $name))\r
+                               echo '<a href="' . htmlspecialchars($dlUrl) . '" title="' . _SKINFILES_DOWNLOAD . ' &laquo;' . htmlspecialchars($name) . '&raquo;">' . _SKINFILES_DOWNLOAD . '</a>';\r
+                       else\r
+                               echo '&nbsp;';\r
+                               \r
+                       echo '</td></tr>';\r
+               }\r
+\r
+               if (!count($dirs) && !count($files)) {\r
+                       echo '<tr><td colspan="7">' . _SKINFILES_ERR_DIR_DOES_NOT_CONTAIN . '</td></tr>';\r
+               }\r
+\r
+               echo '</table>';\r
+\r
+               if ($relative != '') {\r
+               \r
+                       if (is_writable($directory)) {\r
+                               echo '<div class="dialogbox">';\r
+                               echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_FILE . '</h4><div>';\r
+                               echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
+                               $manager->addTicketHidden();\r
+                               echo '<input type="hidden" name="action" value="createfile" />';\r
+                               echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';\r
+                               echo '<input type="text" name="name" size="40" value="untitled.txt" />';\r
+                               echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE_FILE . '" /></p></form>';\r
+                               echo '</div></div>';\r
+       \r
+                               echo '<div class="dialogbox">';\r
+                               echo '<h4 class="light">' . _SKINFILES_UPLOAD_NEW_FILE . '</h4><div>';\r
+                               echo '<form method="post" enctype="multipart/form-data" action="' . htmlspecialchars($pluginUrl) . '">';\r
+                               $manager->addTicketHidden();\r
+                               echo '<input type="hidden" name="action" value="uploadfile" />';\r
+                               echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';\r
+                               echo '<input type="hidden" name="MAX_FILE_SIZE" value="' . $CONF['MaxUploadSize'] . '" />';\r
+                               echo '<input type="file" name="name" size="40" />';\r
+                               echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_UPLOAD . '" /></p></form>';\r
+                               echo '</div></div>';\r
+                       }\r
+       \r
+                       if (count($files)) {\r
+                               echo '<div class="dialogbox">';\r
+                               echo '<h4 class="light">' . _SKINFILES_DEL_ALL_FILES . '</h4><div>';\r
+                               echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
+                               $manager->addTicketHidden();\r
+                               echo '<input type="hidden" name="action" value="emptydir" />';\r
+                               echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';\r
+                               echo _SKINFILES_DEL_ALL_FILES_MSG;\r
+                               echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_DELETE_ALL . '" tabindex="140" onclick="return checkSubmit();" /></p>';\r
+                               echo '</form>';\r
+                               echo '</div></div>';\r
+                       }\r
+               }\r
+       \r
+               if (is_writable($directory)) {\r
+                       echo '<div class="dialogbox">';\r
+                       echo '<h4 class="light">' . _SKINFILES_CREATE_NEW_DIR . '</h4><div>';\r
+                       echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
+                       $manager->addTicketHidden();\r
+                       echo '<input type="hidden" name="action" value="createdir" />';\r
+                       echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative) . '" />';\r
+                       echo '<input type="text" name="name" value="untitled" tabindex="90" size="40" />';\r
+                       echo '<p class="buttons"><input type="submit" value="' . _SKINFILES_CREATE . '" tabindex="140" onclick="return checkSubmit();" /></p>';\r
+                       echo '</form>';\r
+                       echo '</div></div>';\r
+               }\r
+       }\r
+       \r
+       \r
+       \r
+\r
+       /* Rename directory **************************************************************************************************************/\r
+\r
+       function _skinfiles_rendir($preset = '') {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = trim(_skinfikes_basename(requestVar('dir')));\r
+               $directory = trim(dirname(requestVar('dir')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (sfValidPath($directory . $file) && file_exists($directory . $file) && \r
+                       is_dir($directory . $file) && is_writable($directory . $file)) \r
+               {\r
+                       $relative = sfRelativePath ($directory);\r
+                       $editUrl  = $manager->addTicketToUrl($pluginUrl . '?action=rendir&dir=' . rawurlencode($relative . $file));\r
+\r
+                       echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
+                       echo '<a href="' . htmlspecialchars($editUrl) . '" title="' . _SKINFILES_RENAME . ' &laquo;' . $file . '&raquo;">';\r
+                       echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';\r
+\r
+                       echo '<div class="dialogbox">';\r
+                       echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
+                       $manager->addTicketHidden();\r
+                       echo '<input type="hidden" name="action" value="rendir_process" />';\r
+                       echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';\r
+\r
+                       echo '<h4>' . _SKINFILES_RENAME_DIR_MSG . ' &laquo;' . htmlspecialchars($file) . '&raquo; ' . _SKINFILES_RENAME_DIR_MSG2 . '</h4><div>';\r
+                       echo '<p><input type="text" name="name" size="40" value="' . htmlspecialchars($preset != '' ? $preset : $file) . '" /></p>';\r
+                       echo '<p class="buttons">';\r
+                       echo '<input type="hidden" name="sure" value="yes" />';\r
+                       echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';\r
+                       echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
+                       echo '</p>';\r
+                       echo '</div></form></div>';\r
+               }\r
+               else\r
+               {\r
+                       echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . " &laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;\r
+                       echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";\r
+               }\r
+       }\r
+       \r
+       function _skinfiles_rendir_process() {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = trim(_skinfikes_basename(requestVar('dir')));\r
+               $directory = trim(dirname(requestVar('dir')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (requestVar('sure') == 'yes')\r
+               {\r
+                       if (sfValidPath($directory . $file) && file_exists($directory . $file) && \r
+                               is_dir($directory . $file) && is_writable($directory . $file)) \r
+                       {\r
+                               $name = requestVar('name');\r
+                               \r
+                               if ($name == '') {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR1 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
+                                       echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR2 . "</p>";\r
+                                       _skinfiles_rendir($name);\r
+                                       return;\r
+                               }\r
+                               \r
+                               if (sfIllegalFilename($name)) {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR3 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
+                                       echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR4 . "</p>";\r
+                                       _skinfiles_rendir($name);\r
+                                       return;\r
+                               } \r
+                               \r
+                               if ($name == $file) {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR5 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
+                                       echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR6 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR7 . "</p>";\r
+                                       _skinfiles_rendir($name);\r
+                                       return;\r
+                               }\r
+                               \r
+                               if (file_exists($directory . $name)) {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR8 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
+                                       echo _SKINFILES_ERR_COULD_NOT_RENAME_DIR9 . _SKINFILES_ERR_COULD_NOT_RENAME_DIR10 . "</p>";\r
+                                       _skinfiles_rendir($name);\r
+                                       return;\r
+                               }\r
+                               \r
+                               if (!@rename($directory . $file, $directory . $name)) \r
+                               {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_RENAME_DIR11 . "&laquo;" . htmlspecialchars($file) . "&raquo;</p>";\r
+                                       _skinfiles_rendir($name);\r
+                                       return;\r
+                               }\r
+       \r
+                               echo "<p class='message'>" . _SKINFILES_RENAMED_DIR1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_RENAMED_DIR2;\r
+                               echo _SKINFILES_RENAMED_DIR3 . "&laquo;" . htmlspecialchars($name) . "&raquo;" . _SKINFILES_RENAMED_DIR4 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                       }               \r
+                       else\r
+                       {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_DIR_DOES_NOT_EXIST1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DIR_DOES_NOT_EXIST2;\r
+                               echo _SKINFILES_ERR_DIR_DOES_NOT_EXIST3 . "</p>";\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       // User cancelled\r
+                       sfShowDirectory($directory);\r
+               }\r
+       }\r
+\r
+\r
+\r
+\r
+       /* Create directory **************************************************************************************************************/\r
+\r
+       function _skinfiles_createdir() {\r
+       \r
+               $directory = trim(requestVar('dir'));\r
+               $directory = sfExpandDirectory($directory);\r
+\r
+               if (sfValidPath($directory) && is_dir($directory) && is_writable($directory)) \r
+               {\r
+                       $name = requestVar('name');\r
+                       \r
+                       if ($name == '') {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR1 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       }\r
+                       \r
+                       if (sfIllegalFilename($name)) {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "&laquo;" . htmlspecialchars($name) . "&raquo; ";\r
+                               echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR3 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       } \r
+                       \r
+                       if (file_exists($directory . $name)) {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR4 . "&laquo;" . htmlspecialchars($name) . "&raquo; ";\r
+                               echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR5 . _SKINFILES_ERR_COULD_NOT_CREATE_DIR6 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       }\r
+                       \r
+                       $mask = @umask(0000);\r
+\r
+                       if (!@mkdir($directory . $name, 0755)) \r
+                       {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR2 . "&laquo;" . htmlspecialchars($name) . "&raquo;</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       }\r
+\r
+                       @umask($mask);\r
+                       \r
+                       echo "<p class='message'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR7 . "&laquo;" . htmlspecialchars($name) . "&raquo; " . _SKINFILES_ERR_COULD_NOT_CREATE_DIR8 . "</p>";\r
+                       sfShowDirectory($directory);\r
+               }               \r
+               else\r
+               {\r
+                       echo "<p class='error'>" . _SKINFILES_ERR_COULD_NOT_CREATE_DIR9 . "&laquo;" . htmlspecialchars(_skinfikes_basename($directory)) . "&raquo; " .  _SKINFILES_ERR_COULD_NOT_CREATE_DIR10;\r
+                       echo _SKINFILES_ERR_COULD_NOT_CREATE_DIR11 . "</p>";\r
+               }\r
+       }\r
+       \r
+       \r
+       \r
+\r
+       /* Delete directory **************************************************************************************************************/\r
+\r
+       function _skinfiles_deldir() {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = trim(_skinfikes_basename(requestVar('dir')));\r
+               $directory = trim(dirname(requestVar('dir')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (sfValidPath($directory . $file) && file_exists($directory . $file) && \r
+                       is_dir($directory . $file) && is_writable($directory . $file) &&\r
+                       sfDirectoryIsEmpty($directory . $file)) \r
+               {\r
+                       $relative = sfRelativePath ($directory);\r
+                       $delUrl  = $manager->addTicketToUrl($pluginUrl . '?action=deldir&dir=' . rawurlencode($relative . $file));\r
+\r
+                       echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
+                       echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' &laquo;' . $file . '&raquo;">';\r
+                       echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';\r
+\r
+                       echo '<div class="dialogbox">';\r
+                       echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
+                       $manager->addTicketHidden();\r
+                       echo '<input type="hidden" name="action" value="deldir_process" />';\r
+                       echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';\r
+\r
+                       echo '<h4>' . _SKINFILES_DELETE_DIR . ' &laquo;' . htmlspecialchars($file) . '&raquo; ' . _SKINFILES_DELETE_DIR2 . '</h4><div>';\r
+                       echo '<p class="buttons">';\r
+                       echo '<input type="hidden" name="sure" value="yes" />';\r
+                       echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';\r
+                       echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
+                       echo '</p>';\r
+                       echo '</div></form></div>';\r
+               }\r
+               else\r
+               {\r
+                       echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . " &laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_DIR2;\r
+                       echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";\r
+               }\r
+       }\r
+       \r
+       function _skinfiles_deldir_process() {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = trim(_skinfikes_basename(requestVar('dir')));\r
+               $directory = trim(dirname(requestVar('dir')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (requestVar('sure') == 'yes')\r
+               {\r
+                       if (sfValidPath($directory . $file) && file_exists($directory . $file) && \r
+                               is_dir($directory . $file) && is_writable($directory . $file) &&\r
+                               sfDirectoryIsEmpty($directory . $file)) \r
+                       {\r
+                               if (!@rmdir($directory . $file)) \r
+                               {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR4 . "&laquo;" . htmlspecialchars($file) . "&raquo;</p>";\r
+                                       sfShowDirectory($directory);\r
+                                       return;\r
+                               }\r
+       \r
+                               echo "<p class='message'>" . _SKINFILES_ERR_DELETE_DIR5 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_DIR6 . "</p>";\r
+\r
+                               /* begin modification by katsumi */\r
+                               $num=0;\r
+                               $d = dir($directory);\r
+                               while (false !== ($entry = $d->read())) {\r
+                                   if ($entry!='.' && $entry!='..') $num++;\r
+                               }\r
+                               $d->close();\r
+                               if ($num==0) _skinfiles_delbutton('dir',dirname(trim(requestVar('dir'))));\r
+                               /* end modification */\r
+\r
+                               sfShowDirectory($directory);\r
+                       }               \r
+                       else\r
+                       {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_DIR2;\r
+                               echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       // User cancelled\r
+                       sfShowDirectory($directory);\r
+               }\r
+       }       \r
+       \r
+       \r
+       \r
+       \r
+       /* Empty directory ***************************************************************************************************************/\r
+\r
+       function _skinfiles_emptydir() {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = trim(_skinfikes_basename(requestVar('dir')));\r
+               $directory = trim(dirname(requestVar('dir')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file)) \r
+               {\r
+                       $files = array();\r
+       \r
+                       if ($dh = @opendir($directory . $file)) \r
+                       { \r
+                               while (($name = readdir($dh)) !== false) {\r
+                                       if(!preg_match("/^\.{1,2}$/", $name) && \r
+                                          !is_dir($directory . $file . '/' . $name) &&\r
+                                          is_writable($directory . $file . '/' . $name)) \r
+                                                       $files[] = $name;\r
+                               }\r
+                               \r
+                               closedir($dh); \r
+                               sort($files);\r
+                       }\r
+                       \r
+                       $relative = sfRelativePath ($directory);\r
+                       $emptyUrl  = $manager->addTicketToUrl($pluginUrl . '?action=emptydir&dir=' . rawurlencode($relative . $file));\r
+\r
+                       echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
+                       echo '<a href="' . htmlspecialchars($emptyUrl) . '" title="Empty &laquo;' . $file . '&raquo;">';\r
+                       echo '<img src="' . $pluginUrl . 'dir.gif' . '" alt="" /> ' . $file . '</a></p>';\r
+\r
+                       echo '<div class="dialogbox">';\r
+                       echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
+                       $manager->addTicketHidden();\r
+                       echo '<input type="hidden" name="action" value="emptydir_process" />';\r
+                       echo '<input type="hidden" name="dir" value="' . htmlspecialchars($relative . $file) . '" />';\r
+\r
+                       echo '<h4>' . _SKINFILES_DELETE_FILE_MSG . ' &laquo;' . htmlspecialchars($file) . '&raquo;' . _SKINFILES_DELETE_FILE_MSG2 . '</h4><div>';\r
+                       \r
+                       if (count($files)) \r
+                       {\r
+                               echo '<ul>';\r
+                               foreach ($files as $name) {     echo '<li>' . htmlspecialchars($name) . '</li>'; }\r
+                               echo '</ul>';\r
+       \r
+                               echo '<p class="buttons">';\r
+                               echo '<input type="hidden" name="sure" value="yes" />';\r
+                               echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';\r
+                               echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
+                               echo '</p>';\r
+                       }\r
+                       else\r
+                       {\r
+                               echo '<p>' . _SKINFILES_ERR_DELETE_DIR7 . '</p>';\r
+                               echo '<p class="buttons">';\r
+                               echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
+                               echo '</p>';\r
+                       }\r
+                       \r
+                       echo '</div></form></div>';\r
+                       \r
+               }\r
+               else\r
+               {\r
+                       echo "<p class='error'>" . _SKINFILES_ERR_DELETE_DIR1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_DIR2;\r
+                       echo _SKINFILES_ERR_DELETE_DIR3 . "</p>";\r
+               }\r
+       }\r
+\r
+       function _skinfiles_emptydir_process() {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = trim(_skinfikes_basename(requestVar('dir')));\r
+               $directory = trim(dirname(requestVar('dir')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (requestVar('sure') == 'yes')\r
+               {\r
+                       if (sfValidPath($directory . $file) && file_exists($directory . $file) && is_dir($directory . $file)) \r
+                       {\r
+                               if ($dh = @opendir($directory . $file)) \r
+                               { \r
+                                       while (($name = readdir($dh)) !== false) \r
+                                       {\r
+                                               if(!preg_match("/^\.{1,2}$/", $name) &&  !is_dir($directory . $file . '/' . $name) &&\r
+                                                  is_writable($directory . $file . '/' . $name)) \r
+                                               {\r
+                                                       if (unlink ($directory .$file . '/' . $name)) \r
+                                                               echo "<p class='message'>" . _SKINFILES_ERR_EMPTY_DIR1 . "&laquo;" . htmlspecialchars($name) . "&raquo; " . _SKINFILES_ERR_EMPTY_DIR2 . "</p>";\r
+                                                       else\r
+                                                               echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR3 . "&laquo;" . htmlspecialchars($name) . "&raquo; " . _SKINFILES_ERR_EMPTY_DIR4 . "</p>";\r
+                                               }\r
+                                       }\r
+                                       \r
+                                       closedir($dh); \r
+       \r
+                                       sfShowDirectory($directory . $file . '/');\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_EMPTY_DIR5 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_EMPTY_DIR6;\r
+                               echo _SKINFILES_ERR_EMPTY_DIR7 . "</p>";\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       // User cancelled\r
+                       sfShowDirectory($directory . $file . '/');\r
+               }\r
+       }\r
+\r
+\r
+\r
+\r
+       /* Download file *****************************************************************************************************************/\r
+\r
+       function _skinfiles_download() {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file = _skinfikes_basename(trim(requestVar('file')));\r
+\r
+               $directory = dirname(trim(requestVar('file')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (sfValidPath($directory) && file_exists($directory . $file) && \r
+                       is_file($directory . $file) && is_readable($directory . $file)) \r
+               {\r
+                       if (strstr(serverVar('HTTP_USER_AGENT'), "MSIE"))\r
+                               $name = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);\r
+                       else\r
+                               $name = $file;\r
+                               \r
+                       if ($fp = @fopen($directory . $file, 'r')) {\r
+                               header("Cache-Control: ");      // leave blank to avoid IE errors\r
+                               header("Pragma: ");                     // leave blank to avoid IE errors\r
+                               header("Content-type: application/octet-stream");\r
+                               header('Content-Disposition: attachment; filename="'.$name.'"');\r
+                               header("Content-length: ".(string)(filesize($directory . $file)));\r
+                               sleep(1);\r
+                               \r
+                               fpassthru($fp);\r
+                               fclose($fp);\r
+                       }\r
+                       else\r
+                       {\r
+                               echo _SKINFILES_ERR_DOWNLOAD_FILE1;\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       echo _SKINFILES_ERR_DOWNLOAD_FILE2;\r
+               }\r
+\r
+               exit;\r
+       }\r
+\r
+\r
+\r
+\r
+       /* View file *********************************************************************************************************************/\r
+\r
+       function _skinfiles_viewfile() {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = _skinfikes_basename(trim(requestVar('file')));\r
+               $directory = dirname(trim(requestVar('file')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (sfValidPath($directory) && file_exists($directory . $file) && \r
+                       is_file($directory . $file) && is_readable($directory . $file) && sfAllowViewing($file)) \r
+               {\r
+                       $relative = sfRelativePath ($directory);\r
+                       $viewUrl  = $manager->addTicketToUrl($pluginUrl . '?action=viewfile&file=' . rawurlencode(sfRelativePath($directory . $file)));\r
+\r
+                       echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
+                       echo '<a href="' . htmlspecialchars($viewUrl) . '" title="View &laquo;' . $file . '&raquo;">';\r
+                       echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';\r
+\r
+                       echo '<h4>' . _SKINFILES_VIEW_FILE . '&laquo;' . htmlspecialchars($file) . '&raquo;</h4>';\r
+\r
+                       if (sfIsFileType('html', $file))\r
+                       {\r
+                               echo '<iframe src="' . sfFullUrl($directory . $file) . '"></iframe>';\r
+                       }\r
+\r
+                       if (sfIsFileType('text', $file))\r
+                       {\r
+                               $content = implode('', file($directory . $file));\r
+\r
+                               echo '<pre>';\r
+                               echo htmlspecialchars($content);\r
+                               echo '</pre>';\r
+                       }\r
+\r
+                       if (sfIsFileType('img', $file))\r
+                       {\r
+                               $size = getimagesize($directory . $file, $info);\r
+                               \r
+                               switch ($size[2]) {\r
+                                       case IMAGETYPE_GIF:             $type = 'GIF document'; break;\r
+                                       case IMAGETYPE_JPEG:    $type = 'JPEG photograph'; break;\r
+                                       case IMAGETYPE_PNG:             $type = 'PNG document'; break;\r
+                                       case IMAGETYPE_SWF:             $type = 'Flash animation'; break;\r
+                                       case IMAGETYPE_PSD:             $type = 'Photoshop document'; break;\r
+                                       case IMAGETYPE_BMP:             $type = 'BMP document'; break;\r
+                                       case IMAGETYPE_TIFF_II: $type = 'TIFF document (Intel Byte Order)'; break;\r
+                                       case IMAGETYPE_TIFF_MM: $type = 'TIFF document (Motorola Byte Order)'; break;\r
+                                       case IMAGETYPE_JPC:             $type = 'JPEG2000 photograph'; break;\r
+                                       case IMAGETYPE_JP2:     $type = 'JPEG2000 photograph'; break;\r
+                                       case IMAGETYPE_JPX:     $type = 'JPEG2000 photograph'; break;\r
+                                       case IMAGETYPE_JB2:     $type = 'Slowview document'; break;\r
+                                       case IMAGETYPE_SWC:     $type = 'Flash animation (compressed)'; break;\r
+                                       case IMAGETYPE_IFF:     $type = 'IFF document'; break;\r
+                                       case IMAGETYPE_WBMP:    $type = 'WBMP document'; break;\r
+                                       case IMAGETYPE_XBM:     $type = 'XBM document'; break;\r
+                                       default:                                $type = 'Unknown document'; break;\r
+                               }\r
+\r
+                               if ($size[2] == IMAGETYPE_GIF || $size[2] == IMAGETYPE_JPEG ||\r
+                                       $size[2] == IMAGETYPE_PNG)\r
+                               {\r
+                                       echo '<p><img src="' . sfFullUrl($directory . $file) . '" alt="" /></p>';\r
+                               }\r
+                               \r
+                               echo '<table>';\r
+                               echo '<tr><th colspan="2">' . _SKINFILES_VIEW_FILE_IMG_INFO . '</th></tr>';\r
+                               echo '<tr><td>' . _SKINFILES_VIEW_FILE_TYPE . '</td><td>' . htmlspecialchars($type) . '</td></tr>';\r
+                               echo '<tr><td>' . _SKINFILES_VIEW_FILE_WIDTH . '</td><td>' . htmlspecialchars($size[0]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';\r
+                               echo '<tr><td>' . _SKINFILES_VIEW_FILE_HEIGHT . '</td><td>' . htmlspecialchars($size[1]) . _SKINFILES_VIEW_FILE_PX . '</td></tr>';      \r
+                               \r
+                               if (isset($size['channels']) || isset($size['bits'])) \r
+                               {\r
+                                       $channels = isset($size['channels']) ? $size['channels'] : 3;\r
+                                       $depth    = $size[2] == IMAGETYPE_GIF ? $size['bits'] : $size['bits'] * $channels;\r
+                                       echo '<tr><td>' . _SKINFILES_VIEW_FILE_CHANNELS . '</td><td>' . htmlspecialchars($channels) . '</td></tr>';\r
+                                       echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLOR_DEPTH . '</td><td>' . htmlspecialchars($depth) . _SKINFILES_VIEW_FILE_BITS . '</td></tr>';\r
+                                       echo '<tr><td>' . _SKINFILES_VIEW_FILE_COLORS . '</td><td>' . htmlspecialchars(pow(2, $depth)) . _SKINFILES_VIEW_FILE_COLORS2 . '</td></tr>';\r
+                               }\r
+\r
+                               \r
+                               if (function_exists('exif_read_data') && ($size[2] == IMAGETYPE_JPEG || \r
+                                       $size[2] == IMAGETYPE_TIFF_II || $size[2] == IMAGETYPE_TIFF_MM))\r
+                               {\r
+                                       $exif = exif_read_data($directory . $file, 'EXIF');\r
+                                       \r
+                                       if ($exif) \r
+                                       {\r
+                                               echo '<tr><th colspan="2">Exif information</th></tr>';\r
+                                               \r
+                                               if (isset($exif['Make']) && isset($exif['Model']))\r
+                                                       echo '<tr><td>Camera:</td><td>' . htmlspecialchars($exif['Make'] . ' ' . $exif['Model']) . '</td></tr>';\r
+                                               \r
+                                               if (isset($exif['DateTime']))\r
+                                                       echo '<tr><td>Created on:</td><td>' . htmlspecialchars($exif['DateTime']) . '</td></tr>';\r
+                                               \r
+                                               if (isset($exif['XResolution']))\r
+                                                       echo '<tr><td>Horizontal resolution:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['XResolution'])) . ' dpi</td></tr>';\r
+                                               \r
+                                               if (isset($exif['YResolution']))\r
+                                                       echo '<tr><td>Vertical resolution:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['YResolution'])) . ' dpi</td></tr>';\r
+                                               \r
+                                               if (isset($exif['FocalLength']))\r
+                                                       echo '<tr><td>Focal length:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['FocalLength'])) . ' mm</td></tr>';\r
+                                               \r
+                                               if (isset($exif['FNumber']))\r
+                                                       echo '<tr><td>F-number:</td><td>F/' . htmlspecialchars(_skinfiles_exif_prepare($exif['FNumber'])) . '</td></tr>';\r
+                                               \r
+                                               if (isset($exif['ExposureTime']))\r
+                                                       echo '<tr><td>Exposuretime:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['ExposureTime'])) . ' sec</td></tr>';\r
+                                               \r
+                                               if (isset($exif['ISOSpeedRatings']))\r
+                                                       echo '<tr><td>ISO-speed:</td><td>' . htmlspecialchars(_skinfiles_exif_prepare($exif['ISOSpeedRatings'])) . '</td></tr>';\r
+                                       }\r
+                               }\r
+\r
+                               echo '</table>';\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       echo "<p class='error'>" . _SKINFILES_ERR_VIEW_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_VIEW_FILE2;\r
+                       echo _SKINFILES_ERR_VIEW_FILE3 . "</p>";\r
+               }\r
+       }\r
+\r
+       function _skinfiles_exif_prepare($value) {\r
+               if (preg_match('#([0-9]+)/([0-9]+)#', $value, $matches))\r
+                       if ($matches[1] < $matches[2])\r
+                               return '1/' . round($matches[2] / $matches[1]);\r
+                       else\r
+                               return round($matches[1] / $matches[2]);\r
+               else\r
+                       return $value;\r
+       }\r
+\r
+\r
+\r
+\r
+       /* Edit file *********************************************************************************************************************/\r
+\r
+       function _skinfiles_editfile() {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = _skinfikes_basename(trim(requestVar('file')));\r
+               $directory = dirname(trim(requestVar('file')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (sfValidPath($directory) && file_exists($directory . $file) && \r
+                       is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file)) \r
+               {\r
+                       $relative = sfRelativePath ($directory);\r
+                       $editUrl  = $manager->addTicketToUrl($pluginUrl . '?action=editfile&file=' . rawurlencode(sfRelativePath($directory . $file)));\r
+\r
+                       echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
+                       echo '<a href="' . htmlspecialchars($editUrl) . '" title="Edit &laquo;' . $file . '&raquo;">';\r
+                       echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';\r
+\r
+                       $content = implode('', file($directory . $file));\r
+\r
+                       echo '<div class="dialogbox">';\r
+                       echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
+                       $manager->addTicketHidden();\r
+                       echo '<input type="hidden" name="action" value="editfile_process" />';\r
+                       echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';\r
+\r
+                       echo '<h4>' . _SKINFILES_EDIT_FILE_MSG . ' &laquo;' . htmlspecialchars($file) . '&raquo;</h4><div>';\r
+                       echo '<p><label><textarea class="skinedit" tabindex="8" rows="20" cols="80" name="content">';\r
+                       echo htmlspecialchars($content);\r
+                       echo '</textarea></label></p>';\r
+                       \r
+                       echo '<p class="buttons">';\r
+                       echo '<input type="hidden" name="sure" value="yes" /">';\r
+                       echo '<input type="submit" value="' .  _SKINFILES_SAVE_CHANGES . '" />';\r
+                       echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
+                       echo '</p>';\r
+                       echo '</div></form></div>';\r
+               }\r
+               else\r
+               {\r
+                       echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_EDIT_FILE2;\r
+                       echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";\r
+               }\r
+       }\r
+\r
+       function _skinfiles_editfile_process() {\r
+               global $manager;\r
+               $skinfiles            = $manager->getPlugin('NP_SkinFiles');\r
+               $file      = _skinfikes_basename(trim(requestVar('file')));\r
+               $directory = dirname(trim(requestVar('file')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (requestVar('sure') == 'yes')\r
+               {\r
+                       if (sfValidPath($directory) && file_exists($directory . $file) && \r
+                               is_file($directory . $file) && is_writable($directory . $file) && sfAllowEditing($file)) \r
+                       {\r
+                               if ($skinfiles->getOption('generate_backup') == 'yes')\r
+                               {\r
+                                       copy($directory . $file,  $directory . $skinfiles->getOption('backup_prefix') . $file);\r
+                               }\r
+                               $content = postVar('content');\r
+                               $success = false;\r
+                               if ($fh = @fopen($directory . $file, 'wb')) { \r
+                                       \r
+                                       if (@fwrite($fh, $content) !== false)\r
+                                               $success = true;\r
+                                               \r
+                                       @fclose($fh);\r
+                               }\r
+                               \r
+                               if ($success)\r
+                                       echo "<p class='message'>" . _SKINFILES_ERR_EDIT_FILE4 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_EDIT_FILE5 . "</p>";\r
+                               else\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE6 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_EDIT_FILE7 . "</p>";\r
+                       \r
+                               /* begin modification by katsumi */\r
+                               if ($success && strlen($content)==0) {\r
+                                       _skinfiles_delbutton('file',trim(requestVar('file')));\r
+                               }\r
+                               /* end modification */\r
+                               _skinfiles_editfile();\r
+                       }\r
+                       else\r
+                       {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_EDIT_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_EDIT_FILE2;\r
+                               echo _SKINFILES_ERR_EDIT_FILE3 . "</p>";\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       // User cancelled\r
+                       sfShowDirectory($directory);\r
+               }\r
+       }\r
+\r
+\r
+\r
+       /* Rename file *******************************************************************************************************************/\r
+\r
+       function _skinfiles_renfile($preset = '') {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = _skinfikes_basename(trim(requestVar('file')));\r
+               $directory = dirname(trim(requestVar('file')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (sfValidPath($directory) && file_exists($directory . $file) && \r
+                       is_file($directory . $file) && is_writable($directory . $file)) \r
+               {\r
+                       $relative = sfRelativePath ($directory);\r
+                       $editUrl  = $manager->addTicketToUrl($pluginUrl . '?action=renfile&file=' . rawurlencode(sfRelativePath($directory . $file)));\r
+\r
+                       echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
+                       echo '<a href="' . htmlspecialchars($editUrl) . '" title="' . _SKINFILES_RENAME . ' &laquo;' . $file . '&raquo;">';\r
+                       echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';\r
+\r
+                       echo '<div class="dialogbox">';\r
+                       echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
+                       $manager->addTicketHidden();\r
+                       echo '<input type="hidden" name="action" value="renfile_process" />';\r
+                       echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';\r
+\r
+                       echo '<h4>' . _SKINFILES_RENAME_FILE_MSG . '&laquo;' . htmlspecialchars($file) . '&raquo; ' . _SKINFILES_RENAME_FILE_MSG2 . '</h4><div>';\r
+                       echo '<p><input type="text" name="name" size="40" value="' . htmlspecialchars($preset != '' ? $preset : $file) . '" /></p>';\r
+                       echo '<p class="buttons">';\r
+                       echo '<input type="hidden" name="sure" value="yes" /">';\r
+                       echo '<input type="submit" value="' . _SKINFILES_RENAME . '" />';\r
+                       echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
+                       echo '</p>';\r
+                       echo '</div></form></div>';\r
+               }\r
+               else\r
+               {\r
+                       echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_RENAME_FILE2;\r
+                       echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";\r
+               }\r
+       }\r
+       \r
+       function _skinfiles_renfile_process() {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = _skinfikes_basename(trim(requestVar('file')));\r
+               $directory = dirname(trim(requestVar('file')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (requestVar('sure') == 'yes')\r
+               {\r
+                       if (sfValidPath($directory) && file_exists($directory . $file) && \r
+                               is_file($directory . $file) && is_writable($directory . $file)) \r
+                       {\r
+                               $name = requestVar('name');\r
+\r
+                               if ($name == '') {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE4 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
+                                       echo _SKINFILES_ERR_RENAME_FILE5 . "</p>";\r
+                                       _skinfiles_renfile($name);\r
+                                       return;\r
+                               }\r
+                               \r
+                               if (sfIllegalFilename($name)) {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE6 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
+                                       echo _SKINFILES_ERR_RENAME_FILE7 . "</p>";\r
+                                       _skinfiles_renfile($name);\r
+                                       return;\r
+                               } \r
+                               \r
+                               if ($name == $file) {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE8 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
+                                       echo _SKINFILES_ERR_RENAME_FILE9 . "</p>";\r
+                                       _skinfiles_renfile($name);\r
+                                       return;\r
+                               }\r
+                               \r
+                               if (file_exists($directory . $name)) {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE10 . "&laquo;" . htmlspecialchars($file) . "&raquo; ";\r
+                                       echo _SKINFILES_ERR_RENAME_FILE11;\r
+                                       echo _SKINFILES_ERR_RENAME_FILE12 . "</p>";\r
+                                       _skinfiles_renfile($name);\r
+                                       return;\r
+                               }\r
+\r
+                               if (!@rename($directory . $file, $directory . $name)) \r
+                               {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE13 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_RENAME_FILE14 . "</p>";\r
+                                       _skinfiles_renfile($name);\r
+                                       return;\r
+                               }\r
+       \r
+                               echo "<p class='message'>" . _SKINFILES_ERR_RENAME_FILE15 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_RENAME_FILE16;\r
+                               echo _SKINFILES_ERR_RENAME_FILE17 . "&laquo;" . htmlspecialchars($name) . "&raquo;" . _SKINFILES_ERR_RENAME_FILE18 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                       }               \r
+                       else\r
+                       {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_RENAME_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_RENAME_FILE2;\r
+                               echo _SKINFILES_ERR_RENAME_FILE3 . "</p>";\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       // User cancelled\r
+                       sfShowDirectory($directory);\r
+               }\r
+       }\r
+\r
+\r
+\r
+\r
+       /* Create file *******************************************************************************************************************/\r
+\r
+       function _skinfiles_createfile() {\r
+       \r
+               $directory = trim(requestVar('dir'));\r
+               $directory = sfExpandDirectory($directory);\r
+\r
+               if (sfValidPath($directory) && is_dir($directory) && is_writable($directory)) \r
+               {\r
+                       $name = requestVar('name');\r
+                       \r
+                       if ($name == '') {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE1 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       }\r
+                       \r
+                       if (sfIllegalFilename($name)) {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE2 . "&laquo;" . htmlspecialchars($name) . "&raquo; ";\r
+                               echo _SKINFILES_ERR_CREATE_FILE3 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       } \r
+                       \r
+                       if (file_exists($directory . $name)) {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE4 . "&laquo;" . htmlspecialchars($name) . "&raquo; ";\r
+                               echo _SKINFILES_ERR_CREATE_FILE5;\r
+                               echo _SKINFILES_ERR_CREATE_FILE6 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       }\r
+                       \r
+                       if (!@touch($directory . $name)) \r
+                       {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE7 . "&laquo;" . htmlspecialchars($name) . "&raquo; " . _SKINFILES_ERR_CREATE_FILE8 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       }\r
+\r
+                       $mask = @umask(0000);\r
+                       @chmod($directory . $name, 0755);\r
+                       @umask($mask);\r
+                       \r
+                       echo "<p class='message'>" . _SKINFILES_ERR_CREATE_FILE9 . "&laquo;" . htmlspecialchars($name) . "&raquo; " . _SKINFILES_ERR_CREATE_FILE10 . "</p>";\r
+                       sfShowDirectory($directory);\r
+               }               \r
+               else\r
+               {\r
+                       echo "<p class='error'>" . _SKINFILES_ERR_CREATE_FILE11 . "&laquo;" . htmlspecialchars(_skinfikes_basename($directory)) . "&raquo; " . _SKINFILES_ERR_CREATE_FILE12;\r
+                       echo _SKINFILES_ERR_CREATE_FILE13 . "</p>";\r
+               }\r
+       }\r
+\r
+\r
+\r
+\r
+       /* Delete file *******************************************************************************************************************/\r
+\r
+       function _skinfiles_delfile() {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = _skinfikes_basename(trim(requestVar('file')));\r
+               $directory = dirname(trim(requestVar('file')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (sfValidPath($directory) && file_exists($directory . $file) && \r
+                       is_file($directory . $file) && is_writable($directory . $file)) \r
+               {\r
+                       $relative = sfRelativePath ($directory);\r
+                       $delUrl  = $manager->addTicketToUrl($pluginUrl . '?action=delfile&file=' . rawurlencode(sfRelativePath($directory . $file)));\r
+\r
+                       echo '<p class="location">' . _SKINFILES_CURRENT_LOCATION . sfDisplayPath($relative);\r
+                       echo '<a href="' . htmlspecialchars($delUrl) . '" title="' . _SKINFILES_DELETE . ' &laquo;' . $file . '&raquo;">';\r
+                       echo '<img src="' . htmlspecialchars(sfIcon($file)) . '" alt="" /> ' . $file . '</a></p>';\r
+\r
+                       echo '<div class="dialogbox">';\r
+                       echo '<form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
+                       $manager->addTicketHidden();\r
+                       echo '<input type="hidden" name="action" value="delfile_process" />';\r
+                       echo '<input type="hidden" name="file" value="' . htmlspecialchars(sfRelativePath($directory . $file)) . '" />';\r
+\r
+                       echo '<h4>' . _SKINFILES_DELETE_FILE . ' &laquo;' . htmlspecialchars($file) . '&raquo; ' . _SKINFILES_DELETE_FILE2 . '</h4><div>';\r
+                       echo '<p class="buttons">';\r
+                       echo '<input type="hidden" name="sure" value="yes" />';\r
+                       echo '<input type="submit" value="' . _SKINFILES_DELETE . '" />';\r
+                       echo '<input type="button" name="sure" value="' . _SKINFILES_CANCEL . '" onclick="history.back();" />';\r
+                       echo '</p>';\r
+                       echo '</div></form></div>';\r
+               }\r
+               else\r
+               {\r
+                       echo "<p class='error'>"  . _SKINFILES_ERR_DELETE_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_FILE2;\r
+                       echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";\r
+               }\r
+       }\r
+\r
+       function _skinfiles_delfile_process() {\r
+\r
+               global $pluginUrl, $manager;\r
+               \r
+               $file      = _skinfikes_basename(trim(requestVar('file')));\r
+               $directory = dirname(trim(requestVar('file')));\r
+               $directory = sfExpandDirectory ($directory);\r
+               \r
+               if (requestVar('sure') == 'yes')\r
+               {\r
+                       if (sfValidPath($directory) && file_exists($directory . $file) && \r
+                               is_file($directory . $file) && is_writable($directory . $file)) \r
+                       {\r
+                               if (!@unlink($directory . $file)) \r
+                               {\r
+                                       echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE4 . "&laquo;" . htmlspecialchars($file) . "&raquo;</p>";\r
+                                       sfShowDirectory($directory);\r
+                                       return;\r
+                               }\r
+       \r
+                               echo "<p class='message'>" . _SKINFILES_ERR_DELETE_FILE5 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_FILE6 . "</p>";\r
+\r
+                               /* begin modification by katsumi */\r
+                               $num=0;\r
+                               $d = dir($directory);\r
+                               while (false !== ($entry = $d->read())) {\r
+                                   if ($entry!='.' && $entry!='..') $num++;\r
+                               }\r
+                               $d->close();\r
+                               if ($num==0) _skinfiles_delbutton('dir',dirname(trim(requestVar('file'))));\r
+                               /* end modification */\r
+\r
+                               sfShowDirectory($directory);\r
+                       }               \r
+                       else\r
+                       {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_DELETE_FILE1 . "&laquo;" . htmlspecialchars($file) . "&raquo; " . _SKINFILES_ERR_DELETE_FILE2;\r
+                               echo _SKINFILES_ERR_DELETE_FILE3 . "</p>";\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       // User cancelled\r
+                       sfShowDirectory($directory);\r
+               }\r
+       }\r
+\r
+\r
+\r
+       /* Upload file *******************************************************************************************************************/\r
+\r
+       function _skinfiles_uploadfile() {\r
+\r
+               global $pluginUrl, $manager, $CONF;\r
+               \r
+               $directory = trim(requestVar('dir'));\r
+               $directory = sfExpandDirectory($directory);\r
+\r
+               if (sfValidPath($directory) && is_dir($directory) && is_writable($directory)) \r
+               {\r
+                       $file = postFileInfo('name');\r
+\r
+                       if ($file['size'] > $CONF['MaxUploadSize']) {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_FILE_TOO_BIG . "<br />";\r
+                               echo _SKINFILES_ERR_UPLOAD_FILE3 . $CONF['MaxUploadSize'] . " / ";\r
+                               echo $file['size'] . " bytes</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       }\r
+\r
+                       if (!is_uploaded_file($file['tmp_name'])) {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_BADREQUEST .  _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       }\r
+                       \r
+                       if (sfIllegalFilename($file['name'])) {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE5 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; ";\r
+                               echo _SKINFILES_ERR_UPLOAD_FILE6 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       }\r
+                       \r
+                       if (file_exists($directory . $file['name'])) {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADDUPLICATE . "</p>";\r
+                               sfShowDirectory($directory);\r
+                               return;\r
+                       }\r
+\r
+                       if (!@move_uploaded_file($file['tmp_name'], $directory . $file['name'])) {\r
+                               echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE1 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE2 . _ERROR_UPLOADMOVEP . _SKINFILES_ERR_UPLOAD_FILE4 . "</p>";\r
+                               sfShowDirectory($directory);\r
+                       }\r
+\r
+                       $mask = @umask(0000);\r
+                       @chmod($directory . $file['name'], 0755);\r
+                       @umask($mask);\r
+\r
+                       echo "<p class='message'>" . _SKINFILES_ERR_UPLOAD_FILE7 . "&laquo;" . htmlspecialchars($file['name']) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE8 . "</p>";\r
+                       sfShowDirectory($directory);\r
+               }\r
+               else\r
+               {\r
+                       echo "<p class='error'>" . _SKINFILES_ERR_UPLOAD_FILE9 . "&laquo;" . htmlspecialchars(_skinfikes_basename($directory)) . "&raquo; " . _SKINFILES_ERR_UPLOAD_FILE10;\r
+                       echo _SKINFILES_ERR_UPLOAD_FILE11 . "</p>";\r
+               }       \r
+       }\r
+\r
+/* begin modification by katsumi */\r
+       /* Delete file/directory buttons when empty *******************************************************************************************************************/\r
+\r
+       function _skinfiles_delbutton($mode,$path){\r
+               global $pluginUrl,$manager;\r
+               echo '<p><form method="post" action="' . htmlspecialchars($pluginUrl) . '">';\r
+               $manager->addTicketHidden();\r
+               switch($mode){\r
+               case 'file':\r
+                       echo _SKINFILES_02;\r
+                       echo '<input type="hidden" name="action" value="delfile_process" />';\r
+                       echo '<input type="hidden" name="file" value="'.htmlspecialchars($path).'" />';\r
+                       break;\r
+               case 'dir':\r
+               default:\r
+                       echo 'The directory is empty.';\r
+                       echo '<input type="hidden" name="action" value="deldir_process" />';\r
+                       echo '<input type="hidden" name="dir" value="'.htmlspecialchars($path).'" />';\r
+               }\r
+               echo '<input type="hidden" name="sure" value="yes" />';\r
+               echo '<input type="submit" value="'._SKINFILES_DELETE.'" />';\r
+               echo "</form></p>\n";\r
+       }\r
+/* end modification */\r
+\r
+       function _skinfikes_basename($name) {\r
+               if ((strtolower(_CHARSET) != 'utf-8') && function_exists('mb_convert_encoding')) {$name = mb_convert_encoding($name , "UTF-8" , _CHARSET);}\r
+               $name = str_replace('\\','/',$name); // Avoid using "\" in Windows.\r
+               $name = (function_exists('mb_split')) ? end(mb_split("/",$name)) : end(explode("/",$name));\r
+               if ((strtolower(_CHARSET) != 'utf-8') && function_exists('mb_convert_encoding')) {$name = mb_convert_encoding($name , _CHARSET , "UTF-8");}\r
+               return $name;\r
+       }\r
+?>\r
diff --git a/utf8/nucleus/plugins/skinfiles/japanese-euc.php b/utf8/nucleus/plugins/skinfiles/japanese-euc.php
new file mode 100644 (file)
index 0000000..ee9473c
--- /dev/null
@@ -0,0 +1,185 @@
+<?php
+
+   /*
+       * @version $Id$
+       * @version $NucleusJP: japanese-euc.php,v 1.3 2007/02/04 06:28:46 kimitake Exp $
+       */
+
+define('_SKINFILES_TITLE',                             '¥¹¥­¥ó¥Õ¥¡¥¤¥ë');
+define('_SKINFILES_TOOLTIP',                   '¥¹¥­¥ó¥Õ¥¡¥¤¥ë¤Î´ÉÍý');
+
+define('_SKINFILES_MANAGEMENT',                        '¥¹¥­¥ó¥Õ¥¡¥¤¥ë´ÉÍý');
+define('_SKINFILES_CURRENT_LOCATION',  '¸½ºß¤Î¥Ç¥£¥ì¥¯¥È¥ê: ');
+define('_SKINFILES_NAME',                              '̾Á°');
+define('_SKINFILES_SIZE',                              '¥µ¥¤¥º');
+define('_SKINFILES_LAST_MODIFIED',             'ºÇ½ª¹¹¿·Æü');
+define('_SKINFILES_ACTIONS',                   '¥¢¥¯¥·¥ç¥ó');
+
+define('_SKINFILES_RENAME',                            '̾Á°Êѹ¹');
+define('_SKINFILES_RENAME_DIR_MSG',            '¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê̾');
+define('_SKINFILES_RENAME_DIR_MSG2',   '¤ò²¼µ­¤Î̾Á°¤ËÊѹ¹');
+define('_SKINFILES_EDIT_FILE_MSG',             '¥Õ¥¡¥¤¥ë¤ÎÊÔ½¸');
+define('_SKINFILES_RENAME_FILE_MSG',   '¥Õ¥¡¥¤¥ë');
+define('_SKINFILES_RENAME_FILE_MSG2',  '¤Î̾Á°¤ò²¼µ­¤ËÊѹ¹:');
+define('_SKINFILES_DELETE',                            'ºï½ü');
+define('_SKINFILES_EDIT',                              'ÊÔ½¸');
+define('_SKINFILES_CANCEL',                            '¥­¥ã¥ó¥»¥ë');
+define('_SKINFILES_DOWNLOAD',                  '¥À¥¦¥ó¥í¡¼¥É');
+define('_SKINFILES_SAVE_CHANGES',              'Êݸ');
+
+define('_SKINFILES_DATE_FORMAT',               'Y/m/d H:i');
+
+define('_SKINFILES_CREATE_NEW_FILE',   '¿·µ¬¥Õ¥¡¥¤¥ë¤ÎºîÀ®');
+define('_SKINFILES_CREATE_NEW_DIR',            '¿·µ¬¥Ç¥£¥ì¥¯¥È¥ê¤ÎºîÀ®');
+define('_SKINFILES_CREATE_FILE',               '¥Õ¥¡¥¤¥ëºîÀ®');
+define('_SKINFILES_CREATE',                            'ºîÀ®');
+define('_SKINFILES_UPLOAD',                            '¥¢¥Ã¥×¥í¡¼¥É');
+define('_SKINFILES_DELETE_FILE',               '¥Õ¥¡¥¤¥ë');
+define('_SKINFILES_DELETE_FILE2',              ' ¤òºï½ü¤·¤Þ¤¹¤«¡©');
+define('_SKINFILES_DELETE_DIR',                        '¥Ç¥£¥ì¥¯¥È¥ê');
+define('_SKINFILES_DELETE_DIR2',               ' ¤òºï½ü¤·¤Þ¤¹¤«¡©');
+define('_SKINFILES_DELETE_ALL',                        'Á´ºï½ü');
+define('_SKINFILES_DELETE_FILE_MSG',   '¥Ç¥£¥ì¥¯¥È¥ê');
+define('_SKINFILES_DELETE_FILE_MSG2',  ' ¤«¤é²¼µ­¤Î¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Þ¤¹¤«¡©');
+define('_SKINFILES_UPLOAD_NEW_FILE',   '¿·µ¬¥Õ¥¡¥¤¥ë¤Î¥¢¥Ã¥×¥í¡¼¥É');
+define('_SKINFILES_DEL_ALL_FILES',             '¸½¥Ç¥£¥ì¥¯¥È¥ê¤ÎÁ´¥Õ¥¡¥¤¥ëºï½ü');
+define('_SKINFILES_DEL_ALL_FILES_MSG', 'Á´¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Þ¤¹¤«¡© ¡ÊºÇ½ª³Îǧ¤¢¤ê¡Ë');
+
+define('_SKINFILES_VIEW_FILE',                         '¥Õ¥¡¥¤¥ëɽ¼¨ ');
+define('_SKINFILES_VIEW_FILE_IMG_INFO',                '¥¤¥á¡¼¥¸¾ðÊó');
+define('_SKINFILES_VIEW_FILE_TYPE',                    '¼ïÊÌ');
+define('_SKINFILES_VIEW_FILE_WIDTH',           '²£¥µ¥¤¥º');
+define('_SKINFILES_VIEW_FILE_HEIGHT',          '½Ä¥µ¥¤¥º');
+define('_SKINFILES_VIEW_FILE_PX',                      ' ¥Ô¥¯¥»¥ë');
+define('_SKINFILES_VIEW_FILE_CHANNELS',                '¥Á¥ã¥ó¥Í¥ë¿ô');
+define('_SKINFILES_VIEW_FILE_COLOR_DEPTH',     '¿§¿¼ÅÙ');
+define('_SKINFILES_VIEW_FILE_BITS',                    ' ¥Ó¥Ã¥È');
+define('_SKINFILES_VIEW_FILE_COLORS',          '¿§¿ô');
+define('_SKINFILES_VIEW_FILE_COLORS2',         ' ¿§');
+
+
+define('_SKINFILES_ERR_DIR_DOES_NOT_CONTAIN',  '¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Ï¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥ì¥¯¥È¥ê¤¬Â¸ºß¤·¤Þ¤»¤ó¡£');
+define('_SKINFILES_ERR_DIR_DOES_NOT_EXIST1',   '¥¨¥é¡¼: ¥Ç¥£¥ì¥¯¥È¥ê ');
+define('_SKINFILES_ERR_DIR_DOES_NOT_EXIST2',   '¤Ï¸ºß¤·¤Ê¤¤¤«¡¢');
+define('_SKINFILES_ERR_DIR_DOES_NOT_EXIST3',   '¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê̾¤òÊѹ¹¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£');
+
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR1', '¥¨¥é¡¼: ¿·¤·¤¤Ì¾Á°¤¬ÀßÄꤵ¤ì¤Þ¤»¤ó¤Ç¤·¤¿¤Î¤Ç ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR2', '¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR3', '¥¨¥é¡¼: ÀßÄꤷ¤¿Ì¾Á°¤Ë£±¤Ä°Ê¾å¤Î̵¸ú¤Êʸ»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤·¤¿¤Î¤Ç ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR4', '¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR5', '¥¨¥é¡¼: ÀßÄꤷ¤¿Ì¾Á°¤Ï¸µ¤Î̾Á°¤ÈƱ¤¸¤Ç¤·¤¿¤Î¤Ç ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR6', '¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR7', 'Ê̤Î̾Á°¤òÀßÄꤷ¤Æ²¼¤µ¤¤¡£');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR8', '¥¨¥é¡¼: ÀßÄꤷ¤¿Ì¾Á°¤Ï´û¤Ë¾¤Î¥Õ¥¡¥¤¥ë¤ä¥Ç¥£¥ì¥¯¥È¥ê¤Ë»ÈÍѤµ¤ì¤Æ¤¤¤Þ¤·¤¿¤Î¤Ç ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR9', '¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR10',        'Ê̤Î̾Á°¤ò»ÈÍѤ¹¤ë¤«¡¢¤Þ¤º´û¸¤Î¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü¤·¤Æ²¼¤µ¤¤¡£');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR11',        '¥¨¥é¡¼: ¼¡¤Î¥Ç¥£¥ì¥¯¥È¥ê̾¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£ ');
+
+define('_SKINFILES_RENAMED_DIR1',                              '¥á¥Ã¥»¡¼¥¸: ¥Ç¥£¥ì¥¯¥È¥ê ');
+define('_SKINFILES_RENAMED_DIR2',                              '¤Î̾Á°¤ò ');
+define('_SKINFILES_RENAMED_DIR3',                              '');
+define('_SKINFILES_RENAMED_DIR4',                              ' ¤ËÊѹ¹¤·¤Þ¤·¤¿¡£');
+
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR1', '¥¨¥é¡¼: Ì¾Á°¤¬ÀßÄꤵ¤ì¤Þ¤»¤ó¤Ç¤·¤¿¤Î¤Ç¡¢¿·µ¬¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£ ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR2', '¥¨¥é¡¼: ÀßÄꤷ¤¿Ì¾Á°¤Ë£±¤Ä°Ê¾å¤Î̵¸ú¤Êʸ»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤·¤¿¤Î¤Ç ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR3', '¿·µ¬¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR4', '¥¨¥é¡¼: ÀßÄꤷ¤¿Ì¾Á°¤Ï´û¤Ë¾¤Î¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ë»ÈÍѤµ¤ì¤Æ¤¤¤Þ¤·¤¿¤Î¤Ç ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR5', ' ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò¿·µ¬¤ÇºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR6', 'Ê̤Î̾Á°¤ò»ÈÍѤ¹¤ë¤«¡¢¤Þ¤º´û¸¤Î¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü¤·¤Æ²¼¤µ¤¤¡£');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR7', '¥á¥Ã¥»¡¼¥¸: ¥Ç¥£¥ì¥¯¥È¥ê ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR8', '¤òºîÀ®¤·¤Þ¤·¤¿¡£');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR9', '¥¨¥é¡¼: ¥Ç¥£¥ì¥¯¥È¥ê ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR10',        '¤Ï¸ºß¤·¤Ê¤¤¤«');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR11',        '¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¢¥¯¥»¥¹¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£');
+
+define('_SKINFILES_ERR_DELETE_DIR1',                   '¥¨¥é¡¼: ¥Ç¥£¥ì¥¯¥È¥ê ');
+define('_SKINFILES_ERR_DELETE_DIR2',                   '¤Ï¸ºß¤·¤Ê¤¤¤«');
+define('_SKINFILES_ERR_DELETE_DIR3',                   '¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£');
+define('_SKINFILES_ERR_DELETE_DIR4',                   '¥¨¥é¡¼: ¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_DELETE_DIR5',                   '¥á¥Ã¥»¡¼¥¸: ¥Ç¥£¥ì¥¯¥È¥ê ');
+define('_SKINFILES_ERR_DELETE_DIR6',                   '¤òºï½ü¤·¤Þ¤·¤¿¡£');
+define('_SKINFILES_ERR_DELETE_DIR7',                   '¸½ºß¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Ïºï½ü¤Ç¤­¤ë¥Õ¥¡¥¤¥ë¤Ï¤¢¤ê¤Þ¤»¤ó¡£');
+
+define('_SKINFILES_ERR_EMPTY_DIR1',                            '¥á¥Ã¥»¡¼¥¸: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_EMPTY_DIR2',                            '¤òºï½ü¤·¤Þ¤·¤¿¡£');
+define('_SKINFILES_ERR_EMPTY_DIR3',                            '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_EMPTY_DIR4',                            '¤Ïºï½ü¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_EMPTY_DIR5',                            '¥¨¥é¡¼: ¥Ç¥£¥ì¥¯¥È¥ê ');
+define('_SKINFILES_ERR_EMPTY_DIR6',                            '¤Ï¸ºß¤·¤Ê¤¤¤«');
+define('_SKINFILES_ERR_EMPTY_DIR7',                            '¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¢¥¯¥»¥¹¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£');
+
+define('_SKINFILES_ERR_DOWNLOAD_FILE1',                        '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_DOWNLOAD_FILE2',                        '¥¨¥é¡¼: ¤½¤Î¥Õ¥¡¥¤¥ë¤Ë¥¢¥¯¥»¥¹¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+
+define('_SKINFILES_ERR_VIEW_FILE1',                            '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_VIEW_FILE2',                            '¤Ï¸ºß¤·¤Ê¤¤¤«');
+define('_SKINFILES_ERR_VIEW_FILE3',                            '¤½¤Î¥Õ¥¡¥¤¥ë¤ò»²¾È¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£');
+
+define('_SKINFILES_ERR_EDIT_FILE1',                            '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_EDIT_FILE2',                            '¤Ï¸ºß¤·¤Ê¤¤¤«');
+define('_SKINFILES_ERR_EDIT_FILE3',                            '¤½¤Î¥Õ¥¡¥¤¥ë¤òÊÔ½¸¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£');
+define('_SKINFILES_ERR_EDIT_FILE4',                            '¥á¥Ã¥»¡¼¥¸: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_EDIT_FILE5',                            '¤òÊݸ¤·¤Þ¤·¤¿¡£');
+define('_SKINFILES_ERR_EDIT_FILE6',                            '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_EDIT_FILE7',                            '¤ÏÊݸ¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+
+define('_SKINFILES_ERR_RENAME_FILE1',                  '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_RENAME_FILE2',                  '¤Ï¸ºß¤·¤Ê¤¤¤«');
+define('_SKINFILES_ERR_RENAME_FILE3',                  '¤½¤Î¥Õ¥¡¥¤¥ë̾¤òÊѹ¹¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£');
+define('_SKINFILES_ERR_RENAME_FILE4',                  '¥¨¥é¡¼: ¿·¤·¤¤Ì¾Á°¤¬ÀßÄꤵ¤ì¤Þ¤»¤ó¤Ç¤·¤¿¤Î¤Ç¡¢');
+define('_SKINFILES_ERR_RENAME_FILE5',                  '¤Î̾Á°¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£ ');
+define('_SKINFILES_ERR_RENAME_FILE6',                  '¥¨¥é¡¼: ÀßÄꤷ¤¿Ì¾Á°¤Ë£±¤Ä°Ê¾å¤Î̵¸ú¤Êʸ»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤·¤¿¤Î¤Ç ');
+define('_SKINFILES_ERR_RENAME_FILE7',                  '¤Î̾Á°¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£ ');
+define('_SKINFILES_ERR_RENAME_FILE8',                  '¥¨¥é¡¼: ÀßÄꤷ¤¿Ì¾Á°¤Ï¸µ¤Î̾Á°¤ÈƱ¤¸¤Ç¤·¤¿¤Î¤Ç ');
+define('_SKINFILES_ERR_RENAME_FILE9',                  '¤Î̾Á°¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£Ê̤Î̾Á°¤ò»ÈÍѤ·¤Æ²¼¤µ¤¤¡£ ');
+define('_SKINFILES_ERR_RENAME_FILE10',                 '¥¨¥é¡¼: ÀßÄꤷ¤¿Ì¾Á°¤Ï´û¤Ë¾¤Î¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ë»ÈÍѤµ¤ì¤Æ¤¤¤Þ¤·¤¿¤Î¤Ç ');
+define('_SKINFILES_ERR_RENAME_FILE11',                 '¤Î̾Á°¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_RENAME_FILE12',                 'Ê̤Î̾Á°¤ò»ÈÍѤ¹¤ë¤«¡¢¤Þ¤º´û¸¤Î¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü¤·¤Æ²¼¤µ¤¤¡£');
+define('_SKINFILES_ERR_RENAME_FILE13',                 '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_RENAME_FILE14',                 '¤Î̾Á°¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_RENAME_FILE15',                 '¥á¥Ã¥»¡¼¥¸: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_RENAME_FILE16',                 '¤ò ');
+define('_SKINFILES_ERR_RENAME_FILE17',                 ' ');
+define('_SKINFILES_ERR_RENAME_FILE18',                 ' ¤Ø̾Á°¤òÊѹ¹¤·¤Þ¤·¤¿¡£');
+
+define('_SKINFILES_ERR_CREATE_FILE1',                  '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë̾¤¬ÀßÄꤵ¤ì¤Þ¤»¤ó¤Ç¤·¤¿¤Î¤Ç¡¢¿·¤·¤¤¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_CREATE_FILE2',                  '¥¨¥é¡¼: ÀßÄꤷ¤¿Ì¾Á°¤Ë£±¤Ä°Ê¾å¤Î̵¸ú¤Êʸ»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤·¤¿¤Î¤Ç¡¢');
+define('_SKINFILES_ERR_CREATE_FILE3',                  '¤Ï¿·µ¬¤ËºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_CREATE_FILE4',                  '¥¨¥é¡¼: ÀßÄꤷ¤¿Ì¾Á°¤Ï¤¹¤Ç¤Ë¾¤Î¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç»ÈÍѤµ¤ì¤Æ¤¤¤Þ¤·¤¿¤Î¤Ç¡¢');
+define('_SKINFILES_ERR_CREATE_FILE5',                  '¤Ï¿·µ¬¤ËºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_CREATE_FILE6',                  'Ê̤Î̾Á°¤ò»ÈÍѤ¹¤ë¤«¡¢´û¸¤Î¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤ò¤Þ¤ººï½ü¤·¤Æ²¼¤µ¤¤¡£');
+define('_SKINFILES_ERR_CREATE_FILE7',                  '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_CREATE_FILE8',                  '¤Ï¿·µ¬¤ËºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_CREATE_FILE9',                  '¥á¥Ã¥»¡¼¥¸: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_CREATE_FILE10',                 ' ¤ò¿·µ¬¤ËºîÀ®¤·¤Þ¤·¤¿¡£');
+define('_SKINFILES_ERR_CREATE_FILE11',                 '¥¨¥é¡¼: ¥Ç¥£¥ì¥¯¥È¥ê ');
+define('_SKINFILES_ERR_CREATE_FILE12',                 ' ¤Ï¸ºß¤·¤Ê¤¤¤«');
+define('_SKINFILES_ERR_CREATE_FILE13',                 '¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¢¥¯¥»¥¹¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£');
+
+define('_SKINFILES_ERR_DELETE_FILE1',                  '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_DELETE_FILE2',                  '¤Ï¸ºß¤·¤Ê¤¤¤«');
+define('_SKINFILES_ERR_DELETE_FILE3',                  '¤½¤Î¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£');
+define('_SKINFILES_ERR_DELETE_FILE4',                  '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë¤òºï½ü¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£ ');
+define('_SKINFILES_ERR_DELETE_FILE5',                  '¥á¥Ã¥»¡¼¥¸: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_DELETE_FILE6',                  '¤òºï½ü¤·¤Þ¤·¤¿¡£');
+
+define('_SKINFILES_ERR_UPLOAD_FILE1',                  '¥¨¥é¡¼: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_UPLOAD_FILE2',                  '¤Î¥¢¥Ã¥×¥í¡¼¥É¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_UPLOAD_FILE3',                  'ºÇÂç / ¸½ºß¤Î¥µ¥¤¥º: ');
+define('_SKINFILES_ERR_UPLOAD_FILE4',                  '¡£');
+define('_SKINFILES_ERR_UPLOAD_FILE5',                  '¥¨¥é¡¼: ÀßÄꤷ¤¿Ì¾Á°¤Ë£±¤Ä°Ê¾å¤Î̵¸ú¤Êʸ»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤·¤¿¤Î¤Ç¡¢¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_UPLOAD_FILE6',                  '¤Î¥¢¥Ã¥×¥í¡¼¥É¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£');
+define('_SKINFILES_ERR_UPLOAD_FILE7',                  '¥á¥Ã¥»¡¼¥¸: ¥Õ¥¡¥¤¥ë ');
+define('_SKINFILES_ERR_UPLOAD_FILE8',                  '¤ò¥¢¥Ã¥×¥í¡¼¥É¤·¤Þ¤·¤¿¡£');
+define('_SKINFILES_ERR_UPLOAD_FILE9',                  '¥¨¥é¡¼: ¥Ç¥£¥ì¥¯¥È¥ê ');
+define('_SKINFILES_ERR_UPLOAD_FILE10',                 '¤Ï¸ºß¤·¤Ê¤¤¤«');
+define('_SKINFILES_ERR_UPLOAD_FILE11',                 '¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¢¥¯¥»¥¹¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£');
+
+
+define('_SKINFILES_01',                                'FTP¤ò»È¤ï¤º¤ËNucleus´ÉÍý²èÌ̤ǥ¹¥­¥ó¤Î¹½À®¥Õ¥¡¥¤¥ë¤ò´ÉÍý¡£NP_LinkToSkinFiles¤ÈÁȤ߹ç¤ï¤»¤ë¤ÈÊØÍø');
+define('_SKINFILES_02',                                '¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤¬¤¢¤ê¤Þ¤»¤ó¡£ºï½ü¤·¤Þ¤¹¤«¡© ');
+
+define('_SKINFILES_OPT_GENBACKUP',                             'ÊÔ½¸»þ¤Ë¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÀ¸À®¤·¤Þ¤¹¤«¡©');
+define('_SKINFILES_OPT_BACKUPPREFIX',                  '¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë̾¤Î¥×¥ê¥Õ¥£¥Ã¥¯¥¹');
+
+?>
diff --git a/utf8/nucleus/plugins/skinfiles/japanese-utf8.php b/utf8/nucleus/plugins/skinfiles/japanese-utf8.php
new file mode 100644 (file)
index 0000000..0986a0e
--- /dev/null
@@ -0,0 +1,184 @@
+<?php
+
+   /*
+       * @version $Id$
+       * @version $NucleusJP: japanese-utf8.php,v 1.3 2007/02/04 06:28:46 kimitake Exp $
+       */
+
+define('_SKINFILES_TITLE',                             'スキンファイル');
+define('_SKINFILES_TOOLTIP',                   'スキンファイルの管理');
+
+define('_SKINFILES_MANAGEMENT',                        'スキンファイル管理');
+define('_SKINFILES_CURRENT_LOCATION',  '現在のディレクトリ: ');
+define('_SKINFILES_NAME',                              '名前');
+define('_SKINFILES_SIZE',                              'サイズ');
+define('_SKINFILES_LAST_MODIFIED',             '最終更新日');
+define('_SKINFILES_ACTIONS',                   'アクション');
+
+define('_SKINFILES_RENAME',                            '名前変更');
+define('_SKINFILES_RENAME_DIR_MSG',            'このディレクトリ名');
+define('_SKINFILES_RENAME_DIR_MSG2',   'を下記の名前に変更');
+define('_SKINFILES_EDIT_FILE_MSG',             'ファイルの編集');
+define('_SKINFILES_RENAME_FILE_MSG',   'ファイル');
+define('_SKINFILES_RENAME_FILE_MSG2',  'の名前を下記に変更:');
+define('_SKINFILES_DELETE',                            '削除');
+define('_SKINFILES_EDIT',                              '編集');
+define('_SKINFILES_CANCEL',                            'キャンセル');
+define('_SKINFILES_DOWNLOAD',                  'ダウンロード');
+define('_SKINFILES_SAVE_CHANGES',              '保存');
+
+define('_SKINFILES_DATE_FORMAT',               'Y/m/d H:i');
+
+define('_SKINFILES_CREATE_NEW_FILE',   '新規ファイルの作成');
+define('_SKINFILES_CREATE_NEW_DIR',            '新規ディレクトリの作成');
+define('_SKINFILES_CREATE_FILE',               'ファイル作成');
+define('_SKINFILES_CREATE',                            '作成');
+define('_SKINFILES_UPLOAD',                            'アップロード');
+define('_SKINFILES_DELETE_FILE',               'ファイル');
+define('_SKINFILES_DELETE_FILE2',              ' を削除しますか?');
+define('_SKINFILES_DELETE_DIR',                        'ディレクトリ');
+define('_SKINFILES_DELETE_DIR2',               ' を削除しますか?');
+define('_SKINFILES_DELETE_ALL',                        '全削除');
+define('_SKINFILES_DELETE_FILE_MSG',   'ディレクトリ');
+define('_SKINFILES_DELETE_FILE_MSG2',  ' から下記のファイルを削除しますか?');
+define('_SKINFILES_UPLOAD_NEW_FILE',   '新規ファイルのアップロード');
+define('_SKINFILES_DEL_ALL_FILES',             '現ディレクトリの全ファイル削除');
+define('_SKINFILES_DEL_ALL_FILES_MSG', '全ファイルを削除しますか? (最終確認あり)');
+
+define('_SKINFILES_VIEW_FILE',                         'ファイル表示 ');
+define('_SKINFILES_VIEW_FILE_IMG_INFO',                'イメージ情報');
+define('_SKINFILES_VIEW_FILE_TYPE',                    '種別');
+define('_SKINFILES_VIEW_FILE_WIDTH',           '横サイズ');
+define('_SKINFILES_VIEW_FILE_HEIGHT',          '縦サイズ');
+define('_SKINFILES_VIEW_FILE_PX',                      ' ピクセル');
+define('_SKINFILES_VIEW_FILE_CHANNELS',                'チャンネル数');
+define('_SKINFILES_VIEW_FILE_COLOR_DEPTH',     '色深度');
+define('_SKINFILES_VIEW_FILE_BITS',                    ' ビット');
+define('_SKINFILES_VIEW_FILE_COLORS',          '色数');
+define('_SKINFILES_VIEW_FILE_COLORS2',         ' 色');
+
+
+define('_SKINFILES_ERR_DIR_DOES_NOT_CONTAIN',  'このディレクトリにはファイル・ディレクトリが存在しません。');
+define('_SKINFILES_ERR_DIR_DOES_NOT_EXIST1',   'エラー: ディレクトリ ');
+define('_SKINFILES_ERR_DIR_DOES_NOT_EXIST2',   'は存在しないか、');
+define('_SKINFILES_ERR_DIR_DOES_NOT_EXIST3',   'そのディレクトリ名を変更する権限がありません。');
+
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR1', 'エラー: 新しい名前が設定されませんでしたので ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR2', 'は変更できませんでした。');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR3', 'エラー: 設定した名前に1つ以上の無効な文字が含まれていましたので ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR4', 'は変更できませんでした。');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR5', 'エラー: 設定した名前は元の名前と同じでしたので ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR6', 'は変更できませんでした。');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR7', '別の名前を設定して下さい。');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR8', 'エラー: 設定した名前は既に他のファイルやディレクトリに使用されていましたので ');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR9', 'は変更できませんでした。');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR10',        '別の名前を使用するか、まず既存のファイルまたはディレクトリを削除して下さい。');
+define('_SKINFILES_ERR_COULD_NOT_RENAME_DIR11',        'エラー: 次のディレクトリ名を変更できませんでした。 ');
+
+define('_SKINFILES_RENAMED_DIR1',                              'メッセージ: ディレクトリ ');
+define('_SKINFILES_RENAMED_DIR2',                              'の名前を ');
+define('_SKINFILES_RENAMED_DIR3',                              '');
+define('_SKINFILES_RENAMED_DIR4',                              ' に変更しました。');
+
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR1', 'エラー: 名前が設定されませんでしたので、新規にディレクトリを作成できませんでした。 ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR2', 'エラー: 設定した名前に1つ以上の無効な文字が含まれていましたので ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR3', '新規にディレクトリを作成できませんでした。');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR4', 'エラー: 設定した名前は既に他のファイルまたはディレクトリに使用されていましたので ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR5', ' のディレクトリを新規で作成できませんでした。');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR6', '別の名前を使用するか、まず既存のファイルまたはディレクトリを削除して下さい。');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR7', 'メッセージ: ディレクトリ ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR8', 'を作成しました。');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR9', 'エラー: ディレクトリ ');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR10',        'は存在しないか');
+define('_SKINFILES_ERR_COULD_NOT_CREATE_DIR11',        'そのディレクトリにアクセスする権限がありません。');
+
+define('_SKINFILES_ERR_DELETE_DIR1',                   'エラー: ディレクトリ ');
+define('_SKINFILES_ERR_DELETE_DIR2',                   'は存在しないか');
+define('_SKINFILES_ERR_DELETE_DIR3',                   'そのディレクトリを削除する権限がありません。');
+define('_SKINFILES_ERR_DELETE_DIR4',                   'エラー: ディレクトリを削除できませんでした。');
+define('_SKINFILES_ERR_DELETE_DIR5',                   'メッセージ: ディレクトリ ');
+define('_SKINFILES_ERR_DELETE_DIR6',                   'を削除しました。');
+define('_SKINFILES_ERR_DELETE_DIR7',                   '現在このディレクトリには削除できるファイルはありません。');
+
+define('_SKINFILES_ERR_EMPTY_DIR1',                            'メッセージ: ファイル ');
+define('_SKINFILES_ERR_EMPTY_DIR2',                            'を削除しました。');
+define('_SKINFILES_ERR_EMPTY_DIR3',                            'エラー: ファイル ');
+define('_SKINFILES_ERR_EMPTY_DIR4',                            'は削除できませんでした。');
+define('_SKINFILES_ERR_EMPTY_DIR5',                            'エラー: ディレクトリ ');
+define('_SKINFILES_ERR_EMPTY_DIR6',                            'は存在しないか');
+define('_SKINFILES_ERR_EMPTY_DIR7',                            'そのディレクトリにアクセスする権限がありません。');
+
+define('_SKINFILES_ERR_DOWNLOAD_FILE1',                        'エラー: ファイルにアクセスできませんでした。');
+define('_SKINFILES_ERR_DOWNLOAD_FILE2',                        'エラー: そのファイルにアクセスする権限がありませんでした。');
+
+define('_SKINFILES_ERR_VIEW_FILE1',                            'エラー: ファイル ');
+define('_SKINFILES_ERR_VIEW_FILE2',                            'は存在しないか');
+define('_SKINFILES_ERR_VIEW_FILE3',                            'そのファイルを参照する権限がありません。');
+
+define('_SKINFILES_ERR_EDIT_FILE1',                            'エラー: ファイル ');
+define('_SKINFILES_ERR_EDIT_FILE2',                            'は存在しないか');
+define('_SKINFILES_ERR_EDIT_FILE3',                            'そのファイルを編集する権限がありません。');
+define('_SKINFILES_ERR_EDIT_FILE4',                            'メッセージ: ファイル ');
+define('_SKINFILES_ERR_EDIT_FILE5',                            'を保存しました。');
+define('_SKINFILES_ERR_EDIT_FILE6',                            'エラー: ファイル ');
+define('_SKINFILES_ERR_EDIT_FILE7',                            'は保存できませんでした。');
+
+define('_SKINFILES_ERR_RENAME_FILE1',                  'エラー: ファイル ');
+define('_SKINFILES_ERR_RENAME_FILE2',                  'は存在しないか');
+define('_SKINFILES_ERR_RENAME_FILE3',                  'そのファイル名を変更する権限がありません。');
+define('_SKINFILES_ERR_RENAME_FILE4',                  'エラー: 新しい名前が設定されませんでしたので、');
+define('_SKINFILES_ERR_RENAME_FILE5',                  'の名前は変更できませんでした。 ');
+define('_SKINFILES_ERR_RENAME_FILE6',                  'エラー: 設定した名前に1つ以上の無効な文字が含まれていましたので ');
+define('_SKINFILES_ERR_RENAME_FILE7',                  'の名前は変更できませんでした。 ');
+define('_SKINFILES_ERR_RENAME_FILE8',                  'エラー: 設定した名前は元の名前と同じでしたので ');
+define('_SKINFILES_ERR_RENAME_FILE9',                  'の名前は変更できませんでした。別の名前を使用して下さい。 ');
+define('_SKINFILES_ERR_RENAME_FILE10',                 'エラー: 設定した名前は既に他のファイルまたはディレクトリに使用されていましたので ');
+define('_SKINFILES_ERR_RENAME_FILE11',                 'の名前は変更できませんでした。');
+define('_SKINFILES_ERR_RENAME_FILE12',                 '別の名前を使用するか、まず既存のファイルまたはディレクトリを削除して下さい。');
+define('_SKINFILES_ERR_RENAME_FILE13',                 'エラー: ファイル ');
+define('_SKINFILES_ERR_RENAME_FILE14',                 'の名前は変更できませんでした。');
+define('_SKINFILES_ERR_RENAME_FILE15',                 'メッセージ: ファイル ');
+define('_SKINFILES_ERR_RENAME_FILE16',                 'を ');
+define('_SKINFILES_ERR_RENAME_FILE17',                 ' ');
+define('_SKINFILES_ERR_RENAME_FILE18',                 ' へ名前を変更しました。');
+
+define('_SKINFILES_ERR_CREATE_FILE1',                  'エラー: ファイル名が設定されませんでしたので、新しいファイルが作成できませんでした。');
+define('_SKINFILES_ERR_CREATE_FILE2',                  'エラー: 設定した名前に1つ以上の無効な文字が含まれていましたので、');
+define('_SKINFILES_ERR_CREATE_FILE3',                  'は新規に作成できませんでした。');
+define('_SKINFILES_ERR_CREATE_FILE4',                  'エラー: 設定した名前はすでに他のファイルまたはディレクトリで使用されていましたので、');
+define('_SKINFILES_ERR_CREATE_FILE5',                  'は新規に作成できませんでした。');
+define('_SKINFILES_ERR_CREATE_FILE6',                  '別の名前を使用するか、既存のファイルまたはディレクトリをまず削除して下さい。');
+define('_SKINFILES_ERR_CREATE_FILE7',                  'エラー: ファイル ');
+define('_SKINFILES_ERR_CREATE_FILE8',                  'は新規に作成できませんでした。');
+define('_SKINFILES_ERR_CREATE_FILE9',                  'メッセージ: ファイル ');
+define('_SKINFILES_ERR_CREATE_FILE10',                 ' を新規に作成しました。');
+define('_SKINFILES_ERR_CREATE_FILE11',                 'エラー: ディレクトリ ');
+define('_SKINFILES_ERR_CREATE_FILE12',                 ' は存在しないか');
+define('_SKINFILES_ERR_CREATE_FILE13',                 'そのディレクトリにアクセスする権限がありません。');
+
+define('_SKINFILES_ERR_DELETE_FILE1',                  'エラー: ファイル ');
+define('_SKINFILES_ERR_DELETE_FILE2',                  'は存在しないか');
+define('_SKINFILES_ERR_DELETE_FILE3',                  'そのファイルを削除する権限がありません。');
+define('_SKINFILES_ERR_DELETE_FILE4',                  'エラー: ファイルを削除できませんでした。 ');
+define('_SKINFILES_ERR_DELETE_FILE5',                  'メッセージ: ファイル ');
+define('_SKINFILES_ERR_DELETE_FILE6',                  'を削除しました。');
+
+define('_SKINFILES_ERR_UPLOAD_FILE1',                  'エラー: ファイル ');
+define('_SKINFILES_ERR_UPLOAD_FILE2',                  'のアップロードができませんでした。');
+define('_SKINFILES_ERR_UPLOAD_FILE3',                  '最大 / 現在のサイズ: ');
+define('_SKINFILES_ERR_UPLOAD_FILE4',                  '。');
+define('_SKINFILES_ERR_UPLOAD_FILE5',                  'エラー: 設定した名前に1つ以上の無効な文字が含まれていましたので、ファイル ');
+define('_SKINFILES_ERR_UPLOAD_FILE6',                  'のアップロードができませんでした。');
+define('_SKINFILES_ERR_UPLOAD_FILE7',                  'メッセージ: ファイル ');
+define('_SKINFILES_ERR_UPLOAD_FILE8',                  'をアップロードしました。');
+define('_SKINFILES_ERR_UPLOAD_FILE9',                  'エラー: ディレクトリ ');
+define('_SKINFILES_ERR_UPLOAD_FILE10',                 'は存在しないか');
+define('_SKINFILES_ERR_UPLOAD_FILE11',                 'そのディレクトリにアクセスする権限がありません。');
+
+
+define('_SKINFILES_01',                                'FTPを使わずにNucleus管理画面でスキンの構成ファイルを管理。NP_LinkToSkinFilesと組み合わせると便利');
+define('_SKINFILES_02',                                'ファイルの中身がありません。削除しますか? ');
+
+define('_SKINFILES_OPT_GENBACKUP',                             '編集時にバックアップファイルを生成しますか?');
+define('_SKINFILES_OPT_BACKUPPREFIX',                  'バックアップファイル名のプリフィックス');
+?>
diff --git a/utf8/nucleus/plugins/skinfiles/php.gif b/utf8/nucleus/plugins/skinfiles/php.gif
new file mode 100644 (file)
index 0000000..bfbacdf
Binary files /dev/null and b/utf8/nucleus/plugins/skinfiles/php.gif differ
diff --git a/utf8/nucleus/plugins/skinfiles/style.css b/utf8/nucleus/plugins/skinfiles/style.css
new file mode 100644 (file)
index 0000000..97f43ce
--- /dev/null
@@ -0,0 +1,59 @@
+div#content a {\r
+       text-decoration: none;\r
+}\r
+div#content img {\r
+       vertical-align: middle;\r
+       margin-top: -3px;\r
+}\r
+p.message {\r
+       font-weight: bold;\r
+       color: #800000;\r
+}\r
+p.error {\r
+       font-size: 100%;\r
+       font-weight: bold;\r
+       color: #880000;\r
+}\r
+pre {\r
+       overflow: auto;\r
+       height: 400px;\r
+}\r
+iframe {\r
+       width: 100%;\r
+       height: 400px;\r
+       border: 1px solid gray;\r
+}\r
+div.dialogbox {\r
+       border: 1px solid #ddd;\r
+       background-color: #F6F6F6;\r
+       margin: 18px 0 1.5em 0;\r
+}\r
+div.dialogbox h4 {\r
+       background-color: #bbc;\r
+       color: #000;\r
+       margin: 0;\r
+       padding: 5px;\r
+}\r
+div.dialogbox h4.light {\r
+       background-color: #ddd;\r
+}\r
+div.dialogbox div {\r
+       margin: 0;\r
+       padding: 10px;\r
+}\r
+div.dialogbox button {\r
+       margin: 10px 0 0 6px;\r
+       float: right;\r
+}\r
+div.dialogbox p {\r
+       width: 100%;\r
+       margin: 0;\r
+}\r
+div.dialogbox p.buttons {\r
+       text-align: right;\r
+       overflow: auto;\r
+}\r
+div.dialogbox textarea {\r
+       width: 100%;\r
+       margin: 0;\r
+}\r
diff --git a/utf8/nucleus/plugins/skinfiles/text.gif b/utf8/nucleus/plugins/skinfiles/text.gif
new file mode 100644 (file)
index 0000000..102cedd
Binary files /dev/null and b/utf8/nucleus/plugins/skinfiles/text.gif differ
diff --git a/utf8/nucleus/styles/addedit.css b/utf8/nucleus/styles/addedit.css
new file mode 100755 (executable)
index 0000000..d301c44
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+       This stylesheet serves to make item previews look nicer, and to markup the 
+       buttonbar
+       
+       $Id$
+       $NucleusJP: addedit.css,v 1.5 2006/07/12 07:11:48 kimitake Exp $
+*/
+
+.leftbox, .rightbox {
+       margin: 3px;
+       padding: 3px;
+       font-size: larger;
+       width: 20%;
+}
+.leftbox {
+       float: left;
+       border-right: 2px solid #888;   
+}
+.rightbox {
+       float: right;
+       border-left: 2px solid #888;    
+}
+
+/* markup buttons */
+.jsbutton {
+       text-align: center; 
+       cursor: pointer;
+
+       padding: 3px;
+       border: 1px solid #dddddd;
+}
+
+.jsbuttonspacer {
+       padding-right: 10px;
+}
+
+.jsbuttonbar {
+       padding: 3px;
+/*     cursor: default;*/
+       margin: 3px auto;
+}
+
diff --git a/utf8/nucleus/styles/admin.css b/utf8/nucleus/styles/admin.css
new file mode 100755 (executable)
index 0000000..f4c3cd2
--- /dev/null
@@ -0,0 +1,458 @@
+@charset 'UTF-8';\r
+\r
+/*\r
+       admin area style\r
+       \r
+       $Id$\r
+       $NucleusJP: admin.css,v 1.6 2006/07/17 20:03:45 kimitake Exp $\r
+*/\r
+\r
+body {\r
+       background: #fff url(background.png) repeat-x;\r
+\r
+}\r
+\r
+body, td, th, a, li, ul, textarea {\r
+/*     color: #000; modify */\r
+       color: #333\r
+/*     font-family: "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;*/\r
+/*     font-family: "Hiragino Kaku Gothic Pro W3", "Meiryo", "MS PGothic", "Osaka", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif; */\r
+       font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;\r
+}\r
+\r
+/* basic link appearance */\r
+a:link, a:visited {\r
+       color: #1D3565;\r
+       font-weight: bold;\r
+       text-decoration: none;\r
+}\r
+\r
+a:hover {\r
+       text-decoration: underline;\r
+}\r
+\r
+/* textareas */\r
+textarea {\r
+/*  font-size: small;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+  \r
+       line-height:145%;/* add */\r
+       padding:5px;/* add */\r
+       \r
+/*  font-family: "Hiragino Kaku Gothic Pro W3", "MS PGothic", "Osaka", sans-serif;\r
+}\r
+\r
+*>textarea {*/\r
+  width: 95%;\r
+}\r
+\r
+/* textareas for skin/template editing have monospace fonts */\r
+textarea.skinedit, textarea.templateedit {\r
+/*     font-family: "Hiragino Kaku Gothic Pro W3", "MS PGothic", "Osaka", monospace;\r
+/* except MacIE \*//*\r
+       font-family: monospace;\r
+/* end */\r
+/*     font-size: medium;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+}\r
+\r
+/* add start */\r
+textarea#inputbody,textarea#inputmore {\r
+       width:500px;\r
+       margin:5px 3px;\r
+}\r
+\r
+textarea.pluginoption {\r
+       width:420px;\r
+}\r
+/* add end */\r
+\r
+/* images */\r
+img {\r
+       border: none; \r
+}\r
+\r
+img.skinpreview {\r
+       border: 1px solid #ccc;\r
+}\r
+\r
+/* forms */\r
+form {\r
+       margin-bottom: 0px;\r
+}\r
+\r
+label {\r
+       cursor: pointer; \r
+}\r
+\r
+input.transparent {\r
+       background-color: transparent;\r
+}\r
+\r
+/* preformatted text */\r
+pre {\r
+       margin-left: 10px;\r
+}\r
+\r
+/* a div that has an indent */\r
+div.indent {\r
+       margin-left: 40px;\r
+}\r
+\r
+.skip {\r
+       display: none; \r
+}\r
+\r
+.error {\r
+       color: red;\r
+       /*font-size: 1.2em;*//*mod yotaka 090323*/\r
+       font-size: 14pt; /*add yotaka 090323*/\r
+}\r
+\r
+/* header */\r
+h1 {\r
+       text-align: right;\r
+/*     font-size: 30px;*//*mod yotaka 090323*/\r
+       font-size:24pt;/*add yotaka 090323*/\r
+       font-weight: 900;\r
+       letter-spacing: 0.1em;\r
+/*     color: #0001AA;*/\r
+       color: #596d9d;\r
+       margin: 0 0 5px 135px;\r
+       height: 35px;\r
+/*     display: none;  hide the header if you don't want it*/\r
+\r
+}\r
+\r
+/* quick menu on left */\r
+/* \r
+       It's a real pain getting this absolute positioning to work correctly\r
+       in all browsers. IE in particular seems to have a lot of trouble, even\r
+       when a valid doctype is present. Because of the way it is solved currently,\r
+       the top of the quickmenu and the contents will not line up\r
+*/\r
+#quickmenu {\r
+       position: absolute;\r
+       overflow: hidden;\r
+       \r
+       top: 10px;\r
+       left: 10px;\r
+\r
+       width: 150px;\r
+       margin: 0px;\r
+       padding: 0px;\r
+       \r
+/*     font-size: 70%;*/\r
+/*     font-size: small;*//*mod yotaka 090323*/\r
+       font-size:9pt;/*add yotaka 090323*/\r
+       color:#333;/* add */\r
+       \r
+       border-width: 1px;\r
+       border-style: solid;\r
+/*     border-color: black; modify */\r
+       border-color: #bbb;\r
+\r
+       background: #ffffff url(quickb.jpg) top left fixed repeat-y; \r
+}\r
+\r
+#quickmenu ul {\r
+       list-style-type: none;\r
+       margin: 0;\r
+       padding: 0;\r
+}\r
+\r
+#quickmenu li {\r
+       padding: 0;\r
+       margin: 0;\r
+       text-align: center;\r
+       border-bottom: 1px solid #ccc;\r
+}\r
+\r
+#quickmenu p {\r
+       padding: 5px;\r
+       margin: 0px;\r
+       text-align: justify;\r
+}\r
+\r
+#quickmenu a {\r
+       display: block;\r
+       padding: 5px;\r
+       /*font-size: 1em;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+       line-height: 1.5em;\r
+       text-decoration: none;\r
+/*     font-family: verdana, lucida, arial, helvetica, sans-serif;\r
+}\r
+\r
+*>#quickmenu a {\r
+       font-family: "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;\r
+*/\r
+}\r
+\r
+#quickmenu a:hover {\r
+       background: #ffffff url(quickb-hover.jpg) top left fixed repeat-y; \r
+/*     color: #000; modify */\r
+       color: #333;\r
+       letter-spacing: 1px;\r
+       white-space: nowrap; /* add */\r
+}\r
+\r
+#quickmenu h2 {\r
+       /*font-size: small;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+       text-align: center;\r
+       padding: 1px 0px 1px 0px;\r
+       margin: 0px;\r
+       border-bottom: 1px solid #bbb;  \r
+       background-color: #ddd;\r
+/*     color: #000; modify */\r
+       color: #333;\r
+}\r
+\r
+#quickmenu form {\r
+       margin: 0;\r
+       padding: 5px;\r
+       text-align: center;\r
+}\r
+\r
+#quickmenu option {\r
+/*     font-size: 0.9em;*//*mod yotaka 090323*/\r
+       font-size: 8pt;/*add yotaka 090323*/\r
+}\r
+\r
+.loginname {\r
+       float: right;\r
+/*     font-size: small;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+       text-align: right;\r
+       line-height: normal;\r
+       padding-left: 5px;\r
+       background-color: white;\r
+}\r
+\r
+/* page content */\r
+#content {\r
+   margin-left:163px;\r
+       font-style: normal;\r
+       text-decoration: none;\r
+/*     color: black; modify */\r
+       color: #333;\r
+       text-align: justify;\r
+       line-height: 13pt;\r
+\r
+       border-width: 1px;\r
+       border-style: solid;\r
+/*     border-color: black; modify */\r
+       border-color: #bbb;\r
+       \r
+/*     rounded borders in gecko-based browsers? why not :) */\r
+       -moz-border-radius: 10px;\r
+\r
+/*     rounded borders in webkit-based browsers? why not :) */\r
+       -webkit-border-radius: 10px;\r
+\r
+/*     rounded borders in css3-based browsers? why not :) */\r
+       border-radius: 10px;\r
+\r
+       padding: 10px 10px 0 10px;\r
+\r
+       background-color: white;\r
+\r
+}\r
+\r
+#content h2 {\r
+       color: #596d9d; \r
+\r
+       border-color: gray;\r
+       border-style: dashed;\r
+       border-width: 0px 0px 1px 0px;\r
+\r
+       /*font-size: large;\r
+       line-height: 120%;*//*mod yotaka 090323*/\r
+       font-size: 10pt;/*add yotaka 090323*/\r
+       line-height: 20px;/*add yotaka 090323*/\r
+\r
+       text-decoration: none;\r
+       font-weight: bold; \r
+       letter-spacing: 2px;/* add */\r
+       margin-top:20px;/*add yotaka 090323*/\r
+}\r
+\r
+#content h3 {\r
+/*     border-color: gray;\r
+       border-style: dotted;\r
+       border-width: 0px 0px 1px 0px; modify */\r
+\r
+       border-color: #596d9d;\r
+       border-style: solid;\r
+       border-width: 0px 0px 0px 5px;\r
+\r
+/*     font-size: medium;*/\r
+       font-size: 10pt;\r
+       font-weight: normal;\r
+       line-height: 120%;\r
+\r
+/*     color: gray;\r
+       padding-left: 20px;\r
+       letter-spacing: 2; modify */\r
+\r
+       color: #596d9d;\r
+       padding-left: 8px;\r
+       letter-spacing: 2px;\r
+       margin-left:5px;/* add */\r
+}\r
+\r
+/* add start */\r
+#content ul {\r
+       line-height:1.5em;\r
+/*     list-style-type:square;*/\r
+       margin:0 0 0.5em 30px;\r
+       padding:0;\r
+       list-style-image:url(bullet.gif);\r
+}\r
+/* add end */\r
+\r
+#content .note, pre {\r
+       background-color: #ddd;\r
+       padding: 5px;\r
+}\r
+\r
+#content li a{\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+}\r
+\r
+/* \r
+       font size tricks, to make it work in all browsers\r
+\r
+       See:\r
+       http://diveintoaccessibility.org/day_26_using_relative_font_sizes.html\r
+\r
+       (netscape 4 trick is left out, Nucleus doesn't work anyway in that browser)     \r
+       #content should be 'small' (in standard-compliant browsers)\r
+\r
+*/\r
+\r
+#content {\r
+/*     font-size: small;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+       voice-family: "\"}\"";\r
+       voice-family: inherit;\r
+       /*font-size: small;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+}\r
+html>body #content {\r
+       /*font-size: small;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+}\r
+\r
+/* tables */\r
+table {\r
+       border: none;\r
+       width: 100%;\r
+       border-collapse: collapse;\r
+       margin-bottom: 10px;\r
+       margin-top: 10px;       \r
+}\r
+\r
+th {\r
+/*     background-color: #bbc; modify */\r
+       background-color: #ddd;\r
+/*     color: #000; modify */\r
+       color: #333;\r
+       /*font-size: small;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+       letter-spacing:1px;/* add */\r
+}\r
+\r
+th, td {\r
+       padding: 4px;\r
+       empty-cells: show;      \r
+       border: 1px solid #ddd; /* add */\r
+}\r
+\r
+td {\r
+       background-color: #fff;\r
+/*     border: 1px solid #ddd;*/\r
+/*     font-size: small;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+       vertical-align: top;\r
+       text-align: left;\r
+}\r
+\r
+td a:link, td a:visited { \r
+       text-decoration: underline;\r
+/*     color: black; modify */\r
+       color: #333;\r
+       font-weight: normal;\r
+}\r
+\r
+td a:hover {\r
+       color: #1D3565;\r
+       text-decoration: underline;\r
+}\r
+td.draft {\r
+       background-color: #ffe;\r
+}\r
+td.future {\r
+       background-color: #fff7f1;\r
+}\r
+tr.highlighted td {\r
+       background-color: green;\r
+}\r
+\r
+table.navigation td, table.navigation th {\r
+       border: none;\r
+}\r
+\r
+.batchoperations {\r
+       background-color: #ebebf2;\r
+       width: auto;\r
+       padding: 5px;\r
+       text-align: right;\r
+}\r
+\r
+/* plugin list */\r
+#content table ul.list_comment_info,\r
+#content table ul.list_item_info,\r
+#content table ul.list_item_action,\r
+#content table ul.plugin_info,\r
+#content table ul.pluginlist_actions {\r
+       list-style-type: none;\r
+       list-style-image: none;\r
+       margin: 0 0 0.5em 5px;\r
+       line-height:1.1em;\r
+}\r
+\r
+.plugin_name {\r
+       font-weight: bold;\r
+}\r
+\r
+.plugin_desc h4 {\r
+       margin: 0;\r
+}\r
+\r
+.plugin_desc p {\r
+       margin-top: 0;\r
+}\r
+\r
+/* item list */\r
+#content table label.list_item_title {\r
+/*     font-size: 1.1em;*//*mod yotaka 090323*/\r
+       font-size: 10pt;/*mod yotaka 090323*/\r
+       font-weight: bold;\r
+}\r
+\r
+.list_item_info_th {\r
+       width: 130px;\r
+}\r
+\r
+/* footer */\r
+.foot {\r
+       padding: 2px 0px 2px 10px;\r
+       margin:10px -10px 0 -10px;\r
+       text-align: center;\r
+}\r
+\r
+table .availableSkinTypes ul li {\r
+       list-style: none;\r
+}\r
diff --git a/utf8/nucleus/styles/background.png b/utf8/nucleus/styles/background.png
new file mode 100644 (file)
index 0000000..a1308eb
Binary files /dev/null and b/utf8/nucleus/styles/background.png differ
diff --git a/utf8/nucleus/styles/bookmarklet.css b/utf8/nucleus/styles/bookmarklet.css
new file mode 100755 (executable)
index 0000000..c7565b5
--- /dev/null
@@ -0,0 +1,233 @@
+@charset 'UTF-8';\r
+/* \r
+       style definitions for the bookmarklet \r
+\r
+       $Id$\r
+       $NucleusJP: bookmarklet.css,v 1.6 2007/01/30 07:35:20 kimitake Exp $\r
+*/\r
+\r
+body {\r
+/*  font-size: small;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+       background: #fff;\r
+       color: #000;\r
+/*     font-family: "Trebuchet MS",Trebuchet,"Bitstream Vera Sans",verdana,lucida,arial,helvetica,sans-serif;*/\r
+       font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif !important;\r
+       margin:0;/* add 090313 */\r
+       padding:5px;/* add 090313 */\r
+}\r
+\r
+/*textarea {\r
+       font-family: "Hiragino Kaku Gothic Pro W3", "MS P Gothic", "Osaka", sans-serif;\r
+}*/\r
+\r
+h1 {\r
+       border-bottom: 1px dotted gray;\r
+/*     font-size: medium;*//*mod yotaka 090323*/\r
+       font-size: 10pt;/*add yotaka 090323*/\r
+       color: #596d9d;\r
+       margin:0;/* add 090313 */\r
+       padding:5px;/* add 090313 */\r
+}\r
+\r
+/* \r
+       Hide switch buttons initially, we'll enable them again if we are sure\r
+       the browser supports DOM\r
+*\r
+#switchbuttons {\r
+       display: none;\r
+}\r
+/*\r
+       Hide preview also when no DOM is supported\r
+*\r
+#preview {\r
+       display: none;\r
+}\r
+\r
+.buttonbar {\r
+   margin-bottom: 5px;\r
+   background: rgb(187, 187, 204);\r
+   padding: 3px;\r
+}\r
+\r
+.buttonbar input {\r
+   background: #C5C5D3;\r
+    border: 1px solid #CACAD7;\r
+    border-right: 2px solid #8E8EAB;\r
+    border-bottom: 2px solid #8E8EAB;\r
+    color: #000000;\r
+/*    font-family: "Trebuchet MS",Trebuchet,"Bitstream Vera Sans",verdana,lucida,arial,helvetica,sans-serif;*\r
+    font-weight: bold;   \r
+}\r
+*/\r
+\r
+.contentblock {\r
+       /*background: #ddd;*/\r
+/*     height: 500px;*/\r
+/*     height: 370px;*/\r
+       height: 410px;/*mod 090309*/\r
+       overflow: auto; /* temporary removed, to make the select box work in Mozilla */\r
+       padding: 1px !important;\r
+       margin: 0px;\r
+       vertical-align: top;\r
+}\r
+\r
+.shortcuts {\r
+       float: right; \r
+       text-align: right;\r
+/*     font-size: x-small;*//*mod yotaka 090323*/\r
+       font-size: 8pt;/*add yotaka 090323*/\r
+}\r
+/*\r
+#options {\r
+   margin-top:-15px;\r
+   }*/\r
+#options h2 {\r
+   margin:15px 0 0 0;\r
+}\r
+\r
+h2 {\r
+/*     font-size: 1.5em;*//*mod yotaka 090323*/\r
+       font-size: 10pt;/*add yotaka 090323*/\r
+       color: gray;\r
+       margin-top: 0px;\r
+       padding-top: 0px;\r
+       padding-bottom: 0px;\r
+       margin-top: 0px;\r
+}\r
+\r
+a:link, a:visited {\r
+       color: #1D3565; \r
+       font-weight: bold;\r
+       text-decoration: none;\r
+}\r
+\r
+a:hover {\r
+       text-decoration: underline;\r
+}                      \r
+\r
+img { \r
+       border: none;\r
+}\r
+\r
+.indent {\r
+       margin-left: 40px;\r
+}\r
+\r
+label          { cursor: pointer; }\r
+\r
+table {\r
+       border: none;\r
+/*     width: 95%;*/\r
+       width: 98%;\r
+       border-collapse: collapse;\r
+/*     margin: 10px auto; */\r
+       margin: auto;/* mod 090313 */\r
+/*     margin-bottom: 10px;\r
+       margin-top: 10px;*/\r
+       height: 95%;    /* add 090309*/\r
+       table-layout:fixed;/* add 090313 */\r
+}\r
+\r
+th {\r
+/*     background: #bbc;\r
+       color: #000;\r
+       font-size: small;*//* mod 090313 */\r
+       width:130px;/* add 090313 */\r
+       font-weight:normal;/* add 090313 */\r
+}\r
+\r
+th, td {\r
+       padding: 4px;\r
+       empty-cells: show;\r
+/*}\r
+\r
+td {*//* mod 090313 */\r
+       background: #fff;\r
+       border: 1px solid #ddd;\r
+/*     font-size: small;*//*mod yotaka 090323*/\r
+       font-size: 9pt;/*add yotaka 090323*/\r
+       vertical-align: top;\r
+       text-align: left;\r
+/*}\r
+\r
+#body td,\r
+#more td {*//* mod 090313 */\r
+       white-space: nowrap;/*add 090309*/\r
+}\r
+\r
+td a:link, td a:visited { \r
+       text-decoration: underline;\r
+       color: black;\r
+       font-weight: normal;\r
+}\r
+td a:hover {\r
+       color: #1D3565;\r
+       text-decoration: underline;\r
+}\r
+\r
+td.draft, td.future {\r
+       background: #ffe;\r
+}\r
+\r
+tr.highlighted td {\r
+       background: green;\r
+}\r
+\r
+ul.nobullets {\r
+       list-style-type: none;\r
+       padding: 0;\r
+       margin: 0;\r
+}\r
+\r
+form {/* add 090313 */\r
+               margin:0;\r
+               padding:0;\r
+}\r
+\r
+.jsbuttonbar,\r
+/*#body input[type=text],*//* mod 090313 */\r
+#inputtitle,/* add 090313 */\r
+#body textarea,\r
+#body select,\r
+/*#more input[type=text],*//* mod 090313 */\r
+#more textarea,\r
+#more select {\r
+       margin: auto;\r
+       padding:0;/* add 090313 */\r
+       display: block;\r
+/*     width: 90%;*/\r
+       width: 98%      /*mod 090309*/\r
+}\r
+\r
+#body textarea {/* add 090313 */\r
+       margin-top: 4px;\r
+}\r
+#more textarea {/* add 090313 */\r
+       height: 300px;\r
+       margin-top: 4px;\r
+}\r
+\r
+/*textarea {/*mod 090313 /\r
+       margin-top: 1px;\r
+}*/\r
+\r
+.submitbuttons {\r
+       line-height: 2em;\r
+       margin: 8px;\r
+}\r
+\r
+.submitbuttons input {\r
+       float: left;\r
+       width: 9em;\r
+       height: 2em;\r
+       margin: 0 3px;\r
+}\r
+\r
+.submitbuttons span.autosavestatus {\r
+       display: block;\r
+       clear: both;\r
+       height: 2em;\r
+       margin: 0 3px;\r
+}\r
+\r
diff --git a/utf8/nucleus/styles/bullet.gif b/utf8/nucleus/styles/bullet.gif
new file mode 100644 (file)
index 0000000..b43de48
Binary files /dev/null and b/utf8/nucleus/styles/bullet.gif differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100644 (file)
index 0000000..954e22d
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100644 (file)
index 0000000..9223353
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100644 (file)
index 0000000..5b5dab2
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_100_ffffff_40x100.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_100_ffffff_40x100.png
new file mode 100644 (file)
index 0000000..ac8b229
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_100_ffffff_40x100.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_10_000000_40x100.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_10_000000_40x100.png
new file mode 100644 (file)
index 0000000..abdc010
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_10_000000_40x100.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_100_eaeaea_1x400.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_100_eaeaea_1x400.png
new file mode 100644 (file)
index 0000000..062284a
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_100_eaeaea_1x400.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100644 (file)
index 0000000..a23baad
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100644 (file)
index 0000000..ad3d634
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644 (file)
index 0000000..42ccba2
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100644 (file)
index 0000000..5a46b47
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100644 (file)
index 0000000..86c2baa
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_ffffff_1x400.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_ffffff_1x400.png
new file mode 100644 (file)
index 0000000..e65ca12
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_ffffff_1x400.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-hard_72_fecf03_1x100.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-hard_72_fecf03_1x100.png
new file mode 100644 (file)
index 0000000..1731a06
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-hard_72_fecf03_1x100.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100644 (file)
index 0000000..7c9fa6c
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100644 (file)
index 0000000..359397a
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-bg_inset-soft_95_fef1ec_1x100.png b/utf8/nucleus/styles/jquery-ui/images/ui-bg_inset-soft_95_fef1ec_1x100.png
new file mode 100644 (file)
index 0000000..0e05810
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-bg_inset-soft_95_fef1ec_1x100.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-icons_222222_256x240.png b/utf8/nucleus/styles/jquery-ui/images/ui-icons_222222_256x240.png
new file mode 100644 (file)
index 0000000..67560da
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-icons_222222_256x240.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-icons_228ef1_256x240.png b/utf8/nucleus/styles/jquery-ui/images/ui-icons_228ef1_256x240.png
new file mode 100644 (file)
index 0000000..7c09067
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-icons_228ef1_256x240.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-icons_2e83ff_256x240.png b/utf8/nucleus/styles/jquery-ui/images/ui-icons_2e83ff_256x240.png
new file mode 100644 (file)
index 0000000..b425c44
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-icons_2e83ff_256x240.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-icons_454545_256x240.png b/utf8/nucleus/styles/jquery-ui/images/ui-icons_454545_256x240.png
new file mode 100644 (file)
index 0000000..0cd64a2
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-icons_454545_256x240.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-icons_888888_256x240.png b/utf8/nucleus/styles/jquery-ui/images/ui-icons_888888_256x240.png
new file mode 100644 (file)
index 0000000..2e5180e
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-icons_888888_256x240.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-icons_cd0a0a_256x240.png b/utf8/nucleus/styles/jquery-ui/images/ui-icons_cd0a0a_256x240.png
new file mode 100644 (file)
index 0000000..2db88b7
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-icons_cd0a0a_256x240.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-icons_ef8c08_256x240.png b/utf8/nucleus/styles/jquery-ui/images/ui-icons_ef8c08_256x240.png
new file mode 100644 (file)
index 0000000..41cb97c
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-icons_ef8c08_256x240.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-icons_fbcb09_256x240.png b/utf8/nucleus/styles/jquery-ui/images/ui-icons_fbcb09_256x240.png
new file mode 100644 (file)
index 0000000..a9fa220
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-icons_fbcb09_256x240.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-icons_fecf03_256x240.png b/utf8/nucleus/styles/jquery-ui/images/ui-icons_fecf03_256x240.png
new file mode 100644 (file)
index 0000000..142314b
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-icons_fecf03_256x240.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/images/ui-icons_ffffff_256x240.png b/utf8/nucleus/styles/jquery-ui/images/ui-icons_ffffff_256x240.png
new file mode 100644 (file)
index 0000000..746e6fa
Binary files /dev/null and b/utf8/nucleus/styles/jquery-ui/images/ui-icons_ffffff_256x240.png differ
diff --git a/utf8/nucleus/styles/jquery-ui/ui.accordion.css b/utf8/nucleus/styles/jquery-ui/ui.accordion.css
new file mode 100644 (file)
index 0000000..c84ad4e
--- /dev/null
@@ -0,0 +1,9 @@
+/* Accordion
+----------------------------------*/
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion li {display: inline;}
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
+.ui-accordion .ui-accordion-content-active { display: block; }
\ No newline at end of file
diff --git a/utf8/nucleus/styles/jquery-ui/ui.all.css b/utf8/nucleus/styles/jquery-ui/ui.all.css
new file mode 100644 (file)
index 0000000..b57c44d
--- /dev/null
@@ -0,0 +1,6 @@
+@import url("ui.core.css");
+
+@import url("ui.resizable.css");
+@import url("ui.tabs.css");
+
+@import "ui.theme.css";
diff --git a/utf8/nucleus/styles/jquery-ui/ui.base.css b/utf8/nucleus/styles/jquery-ui/ui.base.css
new file mode 100644 (file)
index 0000000..dadf378
--- /dev/null
@@ -0,0 +1,9 @@
+@import url("ui.core.css");
+
+@import url("ui.accordion.css");
+@import url("ui.datepicker.css");
+@import url("ui.dialog.css");
+@import url("ui.progressbar.css");
+@import url("ui.resizable.css");
+@import url("ui.slider.css");
+@import url("ui.tabs.css");
diff --git a/utf8/nucleus/styles/jquery-ui/ui.core.css b/utf8/nucleus/styles/jquery-ui/ui.core.css
new file mode 100644 (file)
index 0000000..d832ad7
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+*/
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
\ No newline at end of file
diff --git a/utf8/nucleus/styles/jquery-ui/ui.datepicker.css b/utf8/nucleus/styles/jquery-ui/ui.datepicker.css
new file mode 100644 (file)
index 0000000..92986c9
--- /dev/null
@@ -0,0 +1,62 @@
+/* Datepicker
+----------------------------------*/
+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:left; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+    display: none; /*sorry for IE5*/
+    display/**/: block; /*sorry for IE5*/
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}
\ No newline at end of file
diff --git a/utf8/nucleus/styles/jquery-ui/ui.dialog.css b/utf8/nucleus/styles/jquery-ui/ui.dialog.css
new file mode 100644 (file)
index 0000000..f10f409
--- /dev/null
@@ -0,0 +1,13 @@
+/* Dialog
+----------------------------------*/
+.ui-dialog { position: relative; padding: .2em; width: 300px; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative;  }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } 
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
\ No newline at end of file
diff --git a/utf8/nucleus/styles/jquery-ui/ui.progressbar.css b/utf8/nucleus/styles/jquery-ui/ui.progressbar.css
new file mode 100644 (file)
index 0000000..bc0939e
--- /dev/null
@@ -0,0 +1,4 @@
+/* Progressbar
+----------------------------------*/
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/utf8/nucleus/styles/jquery-ui/ui.resizable.css b/utf8/nucleus/styles/jquery-ui/ui.resizable.css
new file mode 100644 (file)
index 0000000..44efeb2
--- /dev/null
@@ -0,0 +1,13 @@
+/* Resizable
+----------------------------------*/
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
\ No newline at end of file
diff --git a/utf8/nucleus/styles/jquery-ui/ui.slider.css b/utf8/nucleus/styles/jquery-ui/ui.slider.css
new file mode 100644 (file)
index 0000000..0792a48
--- /dev/null
@@ -0,0 +1,17 @@
+/* Slider
+----------------------------------*/
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: 1%; display: block; border: 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }
\ No newline at end of file
diff --git a/utf8/nucleus/styles/jquery-ui/ui.tabs.css b/utf8/nucleus/styles/jquery-ui/ui.tabs.css
new file mode 100644 (file)
index 0000000..70ed3ef
--- /dev/null
@@ -0,0 +1,9 @@
+/* Tabs
+----------------------------------*/
+.ui-tabs {padding: .2em;}
+.ui-tabs .ui-tabs-nav { padding: .2em .2em 0 .2em;  position: relative; }
+.ui-tabs .ui-tabs-nav li { float: left; border-bottom: 0 !important; margin: 0 .2em -1px 0; padding: 0; list-style: none; }
+.ui-tabs .ui-tabs-nav li a { display:block; text-decoration: none; padding: .5em 1em; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected {  padding-bottom: .1em; border-bottom: 0; }
+.ui-tabs .ui-tabs-panel { padding: 1em 1.4em;  display: block; border: 0; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
\ No newline at end of file
diff --git a/utf8/nucleus/styles/jquery-ui/ui.theme.css b/utf8/nucleus/styles/jquery-ui/ui.theme.css
new file mode 100644 (file)
index 0000000..28a85b8
--- /dev/null
@@ -0,0 +1,223 @@
+@charset 'UTF-8';
+
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+* To view and modify this theme, visit http://ui.jquery.com/themeroller/?ffDefault=verdana,%20lucida,%20arial,%20helvetica,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=fecf03&bgTextureHeader=04_highlight_hard.png&bgImgOpacityHeader=72&borderColorHeader=fea503&fcHeader=494949&iconColorHeader=ffffff&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=100&borderColorContent=e0e0e0&fcContent=494949&iconColorContent=222222&bgColorDefault=eaeaea&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=919191&iconColorDefault=fecf03&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fea503&fcActive=494949&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=fbcb09&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=80&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+*/
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif; font-size: 1.1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: verdana, lucida, arial, helvetica, sans-serif; font-size: 1em; }
+.ui-widget-header { border: 1px solid #fea503; background: #fecf03 url(images/ui-bg_highlight-hard_72_fecf03_1x100.png) 50% 50% repeat-x; color: #494949; font-weight: bold; }
+.ui-widget-header a { color: #494949; }
+.ui-widget-content { border: 1px solid #e0e0e0; background: #ffffff url(images/ui-bg_flat_100_ffffff_40x100.png) 50% 50% repeat-x; color: #494949; }
+.ui-widget-content a { color: #494949; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default a { color: #919191; text-decoration: none; outline: none; }
+.ui-state-hover a { color: #c77405; text-decoration: none; outline: none; }
+.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fea503; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #494949; outline: none; }
+.ui-state-active a { color: #494949; outline: none; text-decoration: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
+.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
+.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
+.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
+.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
+.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
+.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
diff --git a/utf8/nucleus/styles/logo.gif b/utf8/nucleus/styles/logo.gif
new file mode 100755 (executable)
index 0000000..3644e2f
Binary files /dev/null and b/utf8/nucleus/styles/logo.gif differ
diff --git a/utf8/nucleus/styles/manual.css b/utf8/nucleus/styles/manual.css
new file mode 100755 (executable)
index 0000000..462f799
--- /dev/null
@@ -0,0 +1,179 @@
+@charset 'UTF-8';\r
+\r
+/*\r
+       documentation style\r
+       \r
+       $Id$\r
+       $NucleusJP: manual.css,v 1.4 2006/07/12 07:11:48 kimitake Exp $\r
+*/\r
+\r
+body {\r
+       background-color: #fff;\r
+       color: #000;\r
+/*     font-family: verdana, arial;\r
+       font-size: small;*/\r
+       font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;\r
+       font-size: small;\r
+}\r
+\r
+@media screen {\r
+       body {\r
+               margin-left: 10%;\r
+               margin-right: 10%;\r
+       }\r
+}\r
+\r
+@media print {\r
+       pre, .note, td, th {\r
+               border: 1px dashed gray;\r
+       }\r
+}\r
+\r
+img {\r
+       border: none;\r
+}\r
+\r
+a:link, a:visited {\r
+       color: #1D3565; \r
+       font-weight: bold;\r
+       text-decoration: none;\r
+}\r
+a: hover {\r
+       text-decoration: underline;\r
+}\r
+\r
+.heading {\r
+       text-align: center;\r
+       font-size: xx-large;\r
+       font-weight: bold;\r
+       color: gray;    \r
+}\r
+\r
+.heading i {\r
+       position: absolute;\r
+       top: 5px;\r
+       right: 5px;\r
+       font-size: small;\r
+       font-style: normal;\r
+       font-weight: normal;\r
+}\r
+\r
+p:first-letter {\r
+       font-size: large;\r
+}\r
+\r
+p {\r
+       text-indent: 20px;\r
+}\r
+\r
+h1 {\r
+       border-bottom: 1px dotted gray;\r
+       font-size: x-large;\r
+       color: #596d9d;\r
+}\r
+\r
+h2 {\r
+       color: gray;\r
+       font-size: large;\r
+       margin-left: 20px;\r
+       text-indent: 10px;\r
+       border-bottom: 1px solid #ddd;\r
+}\r
+\r
+pre, .note, .faq .answer {\r
+       background-color: #ddd;\r
+       padding: 10px;\r
+       font-size: small;\r
+}\r
+\r
+.screenshot {\r
+       text-align: center;\r
+       background-color: #ddd;\r
+       padding: 10px;\r
+}\r
+\r
+.faq .question {\r
+       font-weight: bold;\r
+       margin-bottom: 0px;\r
+}\r
+\r
+.faq .answer {\r
+\r
+}\r
+\r
+.faq {\r
+       margin-bottom: 20px;\r
+}\r
+\r
+table {\r
+       border: none;\r
+}\r
+\r
+th {\r
+       background-color: linen;\r
+       font-size: medium;\r
+}\r
+\r
+th, td {\r
+       padding: 5px;\r
+}\r
+\r
+td {\r
+       background-color: #dddddd;\r
+       font-size: small;\r
+       vertical-align: top;\r
+       text-align: left;\r
+}\r
+\r
+input, select, option, textarea {\r
+       background-color: transparent;\r
+}\r
+\r
+.deprecated {\r
+       border: 3px solid red;\r
+       padding: 5px;\r
+       font-size: medium;\r
+}\r
+\r
+tt, code, samp {\r
+       font-size: small;\r
+}\r
+\r
+.warning {\r
+       color: red;\r
+}\r
+.ok {\r
+       color: green;\r
+}\r
+\r
+acronym, abbr {\r
+       border-bottom: 1px dotted gray;\r
+       cursor: help;\r
+}\r
+\r
+label {\r
+       cursor: hand;\r
+}\r
+\r
+\r
+#fontSizeCanger {\r
+       position: fixed;\r
+       top: 20px;\r
+       left: 50px;\r
+       font-size: medium !important;\r
+}\r
+\r
+#fontSizeCanger a {\r
+       font-weight: normal;\r
+       border: 1px dotted gray;\r
+       padding: 0 3px;\r
+}\r
+\r
+#fontSizeCanger a#fontSmall {\r
+       font-weight: bold;\r
+}\r
+\r
+#fontSizeCanger a:hover {\r
+       color: #fff;\r
+       background-color: #1D3565;\r
+}\r
diff --git a/utf8/nucleus/styles/popups.css b/utf8/nucleus/styles/popups.css
new file mode 100755 (executable)
index 0000000..686306b
--- /dev/null
@@ -0,0 +1,105 @@
+@charset 'UTF-8';\r
+/*
+       media library popup
+       
+       $Id$
+       $NucleusJP: popups.css,v 1.4 2006/07/12 07:11:48 kimitake Exp $
+*/
+
+body {
+/*     font-family: verdana, arial;*/\r
+       font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif;\r
+       font-size: small;
+       background-color: #fff;
+       color: #000;
+}
+
+img {
+       border: none;
+}
+
+a:link, a:visited {
+       color: #1D3565; 
+       font-weight: bold;
+       text-decoration: none;
+}
+a:hover {
+       text-decoration: underline;
+}
+
+.heading {
+       text-align: center;
+       font-size: xx-large;
+       font-weight: bold;
+       color: gray;    
+}
+
+.heading i {
+       position: absolute;
+       top: 5px;
+       right: 5px;
+       font-size: small;
+       font-style: normal;
+       font-weight: normal;
+}
+
+p {
+       text-indent: 20px;
+}
+
+h1 {
+       border-bottom: 1px dotted gray;
+       font-size: x-large;
+       color: #596d9d;
+}
+
+h2 {
+       color: gray;
+       font-size: large;
+       margin-left: 20px;
+       text-indent: 10px;
+       border-bottom: 1px solid #ddd;
+}
+
+pre, .note, .faq .answer {
+       background-color: #ddd;
+       padding: 10px;
+       font-size: small;
+}
+
+.faq .question {
+       font-weight: bold;
+       margin-bottom: 0px;
+}
+
+.faq .answer {
+
+}
+
+.faq {
+       margin-bottom: 20px;
+}
+
+table {
+       border: none;
+}
+
+th {
+       background-color: linen;
+       font-size: medium;
+}
+
+th, td {
+       padding: 5px;
+}
+
+td {
+       background-color: #dddddd;
+       font-size: small;
+       vertical-align: top;
+       text-align: left;
+}
+
+label {
+       cursor: pointer;
+}
\ No newline at end of file
diff --git a/utf8/nucleus/styles/quickb-hover.jpg b/utf8/nucleus/styles/quickb-hover.jpg
new file mode 100644 (file)
index 0000000..87d7e5a
Binary files /dev/null and b/utf8/nucleus/styles/quickb-hover.jpg differ
diff --git a/utf8/nucleus/styles/quickb-hover_org.jpg b/utf8/nucleus/styles/quickb-hover_org.jpg
new file mode 100755 (executable)
index 0000000..87d7e5a
Binary files /dev/null and b/utf8/nucleus/styles/quickb-hover_org.jpg differ
diff --git a/utf8/nucleus/styles/quickb.jpg b/utf8/nucleus/styles/quickb.jpg
new file mode 100644 (file)
index 0000000..b617305
Binary files /dev/null and b/utf8/nucleus/styles/quickb.jpg differ
diff --git a/utf8/nucleus/styles/quickb_org.jpg b/utf8/nucleus/styles/quickb_org.jpg
new file mode 100755 (executable)
index 0000000..b617305
Binary files /dev/null and b/utf8/nucleus/styles/quickb_org.jpg differ
diff --git a/utf8/nucleus/upgrades/index.html b/utf8/nucleus/upgrades/index.html
new file mode 100644 (file)
index 0000000..b4e9eed
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<!--
+       This html file is needed because Nucleus 0.95 has a static index.html file
+       in this directory, and some servers prefer to serve index.html rather than
+       index.php when it is available.
+-->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<meta http-equiv="Refresh" content="0; url=index.php" />
+<title>Nucleus アップグレード</title>
+<style type="text/css">
+<!--
+       @import url(../styles/manual.css);
+-->
+</style>
+</head>
+<body>
+
+<h1>移動します</h1>
+
+<p>
+<a href="index.php">自動的に移動しない場合はここをクリックしてください</a>
+</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/upgrades/index.php b/utf8/nucleus/upgrades/index.php
new file mode 100755 (executable)
index 0000000..de6a945
--- /dev/null
@@ -0,0 +1,295 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: index.php,v 1.11 2007/04/26 08:45:26 kimitake Exp $
+ *
+ */
+
+include('upgrade.functions.php');
+
+// check if logged in etc
+if (!$member->isLoggedIn()) {
+  upgrade_showLogin('index.php');
+}
+
+if (!$member->isAdmin()) {
+  upgrade_error('Super-admin(最高管理者)のみがアップグレードを実行できます。');
+}
+
+upgrade_head();
+
+?>
+
+<h1>アップグレードスクリプト集</h1>
+
+<div class="note">
+<b>Note:</b> もし古いバージョンの Nuclues からアップグレードしようとしているのでなければ(つまりまっさらな状態からインストールしたのであれば)、これらのスクリプト集は必要ありません。
+</div>
+
+<p>
+古いバージョンの Nucleus からアップグレードするとき、データベーステーブルのアップグレードが必要です。
+このアップグレードスクリプトを実行することでそれが可能となります。
+</p>
+
+<?php  // calculate current version
+      if (!upgrade_checkinstall(96)) $current = 95;
+  else  if (!upgrade_checkinstall(100)) $current = 96;
+  else  if (!upgrade_checkinstall(110)) $current = 100;
+  else  if (!upgrade_checkinstall(150)) $current = 110;
+  else  if (!upgrade_checkinstall(200)) $current = 150;
+  else  if (!upgrade_checkinstall(250)) $current = 200;
+  else  if (!upgrade_checkinstall(300)) $current = 250;
+  else  if (!upgrade_checkinstall(310)) $current = 300;
+  else  if (!upgrade_checkinstall(320)) $current = 310;
+  else  if (!upgrade_checkinstall(330)) $current = 320;
+  else  if (!upgrade_checkinstall(331)) $current = 330;
+  else  if (!upgrade_checkinstall(340)) $current = 331;
+  else  if (!upgrade_checkinstall(350)) $current = 340;
+  else  $current = 350;
+
+  if ($current == 350) {        
+         ?>     
+           <p class="ok">自動でできるアップグレードはありません。データベースは既に最新の Nucleus 用にアップデートされています。</p>     
+         <?php          
+   } else {
+    ?>
+      <p class="warning"><a href="upgrade.php?from=<?php echo $current?>">ここをクリックしてデータベースを Nucleus v3.51 用にアップグレードします</a></p>
+         <?php          
+   }    
+ ?>     
+
+<div class="note">
+<b>注意:</b> 作業中、各ステップごとにデータベースのバックアップを忘れないようにして下さい。
+
+</div>
+
+<h1>手動変更</h1>
+
+<p>いくつかの変更は手動で行う必要があります。下記にその手順を示します。</p>
+
+<?php
+$from = intGetVar('from');
+if (!$from) 
+    $from = $current;
+
+$sth = 0;
+if (!$DIR_MEDIA) {
+  upgrade_manual_96();
+  $sth = 1;
+}
+if (!$DIR_SKINS) {
+  upgrade_manual_20();
+  $sth = 1;
+}
+
+// some manual code changes are needed in order to get Nucleus to work on php version
+// lower than 4.0.6
+if (phpversion() < '4.0.6') {
+  upgrade_manual_php405();
+  $sth = 1;
+}
+
+// from v3.3, atom feed supports 1.0 and blogsetting is added
+$sth = upgrade_manual_atom1_0();
+
+// upgrades from pre-340 version need to be told of recommended .htaccess files for the media and skins folders.
+// these .htaccess files are included in new installs of 340 or higher
+if (in_array($from,array(95,96)) || $from < 340) {
+  upgrade_manual_340();
+  $sth = 1;
+} 
+
+// upgrades from pre-350 version need to be told of deprecation of PHP4 support and two new plugins 
+// included with 3.51 and higher
+if (in_array($from,array(95,96)) || $from < 350) {
+  upgrade_manual_350();
+  $sth = 1;
+} 
+
+if ($sth == 0)
+  echo "<p class='ok'>手動変更は必要ありません。今日はラッキーな日ですね!</p>";
+
+
+
+upgrade_foot();
+
+function upgrade_todo($ver) {
+  return upgrade_checkinstall($ver) ? "(<span class='ok'>インストール済み</span>)" : "(<span class='warning'>インストールが必要</span>)";
+}
+
+function upgrade_manual_96() {
+  global $DIR_NUCLEUS;
+
+  $guess = str_replace("/nucleus/","/media/",$DIR_NUCLEUS);
+?>
+  <h2>Nucleus 0.96 用に必要な変更</h2>
+  <p>
+    メディア機能を使用するために<i>config.php</i>を手動で変更する必要があります。下記の通り追加します:
+  </p>
+  <pre>
+  // path to media dir
+  $DIR_MEDIA = '<b><?php echo htmlspecialchars($guess)?></b>';
+  </pre>
+
+  <p>
+  また、ディレクトリもあなた自身の手で作る必要があります。もしファイルのアップロードを可能にしたいのであれば、media/ ディレクトリのパーミッションを777にします。(Nucleus 0.96+ のためのパーミッションの設定に関するクイックガイドが documentation/tips.html にあります)
+  </p>
+
+<?php }
+
+function upgrade_manual_200() {
+  global $DIR_NUCLEUS;
+
+  $guess = str_replace("/nucleus/","/skins/",$DIR_NUCLEUS);
+?>
+  <h2>Nucleus 2.0 用に必要な変更</h2>
+  <p>
+    スキンの取り込み機能を使用するために<i>config.php</i>を手動で変更する必要があります。下記の通り追加します:
+  </p>
+  <pre>
+  // extra skin files for imported skins
+  $DIR_SKINS = '<b><?php echo htmlspecialchars($guess)?></b>';
+  </pre>
+
+  <p>また、ディレクトリもあなた自身の手で作る必要があります。これでダウンロードしたスキンを上記ディレクトリに展開したり、Nucleus 管理画面から取り込んだりできるようになります。</p>
+
+  <h3>RSS 2.0 と RSD スキン</h3>
+
+  <p>Nucleus 2.0 を新規にインストールしたとき、RSD(Really Simple Discovery) 用のスキンの他に、RSS 2.0(Really Simple Syndication)用のスキンもまたインストールされます。<code>xml-rss2.php</code> と <code>rsd.php</code> の両ファイルはアップグレードされますが、スキンに関しては手動でインストールする必要があります。<code>upgrade-files</code>の中身をアップロードしたあと、管理者画面を開き、管理ホームにあるスキンの「読込/書出」を開きます。そこから両スキンをインストールすることができます(もしインストールするつもりがなければ、しなくても結構です)。</p>
+
+<?php }
+
+function upgrade_manual_340() {
+  global $DIR_NUCLEUS;
+
+?>
+  <h2>Nucleus 3.4 用に必要な変更</h2>
+  <p>
+    <em>skins</em>ディレクトリと<em>media</em>ディレクトリに「.haccess」を設置して、アクセス制限をかけることが推奨されます。この変更は、Nucleusの機能やセキュリティに直接関係があるわけではありませんが、不正アクセスを防ぐ為の重要な助けになるでしょう。
+  </p>
+  
+  <p>
+    手順は以下の2つのファイルに書いてありますので参考にしてください:
+    <ul>
+       <li><a href="../../extra/htaccess/media/readme.ja.txt">extra/htaccess/media/readme.ja.txt</a></li>
+       <li><a href="../../extra/htaccess/skins/readme.ja.txt">extra/htaccess/skins/readme.ja.txt</a></li>
+    </ul>
+  </p>
+  
+<?php }
+
+function upgrade_manual_350() {
+  global $DIR_NUCLEUS;
+
+?>
+  <h2>Nucleus 3.51に関する重要なお知らせ</h2>
+  
+<?php  // Give user warning if they are running old version of PHP
+        if (phpversion() < '5') {
+                echo '<p>警告:サーバで稼動しているPHPのバージョンが、NucleusCMSの動作保障外の古いバージョンのようです。PHP5以上にアップグレードしてください!</p>';
+        }
+}
+
+function upgrade_manual_php405() {
+?>
+<h2>PHP のバージョンが 4.0.3, 4.0.4 または 4.0.5 の場合に必要となる変更</h2>
+<p>
+  PHP のバージョンが 4.0.6 より以前の場合、変更が必要なファイルが2つあります。PHP のバージョンを 4.0.6 や 4.2.2+以降のものにアップグレードした方がいいでしょう(4.0.6 や 4.2.2 以前のものにはセキュリティー問題があります)。もし PHP のアップグレードが困難もしくは、する予定がない場合は、以下のファイルを変更して下さい。
+</p>
+<ul>
+  <li>nucleus/libs/PARSER.php のコードが下記のようになっていることを確認して下さい。(84行目から):
+    <pre>
+
+  if (in_array($actionlc, $this-&gt;actions) || $this-&gt;norestrictions ) {
+    <strong>$this-&gt;call_using_array($action, $this-&gt;handler, $params);</strong>
+  } else {
+    // redirect to plugin action if possible
+    if (in_array('plugin', $this-&gt;actions)
+      && $manager-&gt;pluginInstalled('NP_'.$action))
+      $this-&gt;doAction('plugin('.$action.
+        $this-&gt;pdelim.implode($this-&gt;pdelim,$params).')');
+    else
+      echo '&lt;b&gt;DISALLOWED (' , $action , ')&lt;/b&gt;';
+  }
+
+
+}
+     </pre>
+    </li>
+    <li>nucleus/libs/PARSER.php のコードが下記のようになっていることを確認して下さい。(75行目から):
+    <pre>
+// $params = array_map('trim',$params);
+foreach ($params as $key =&gt; $value) { $params[$key] = trim($value); }
+    </pre>
+    </li>
+  </ul>
+
+<?php }
+
+function upgrade_manual_atom1_0() {
+
+    $sth = 0;
+
+    // atom 1.0
+    $query = 'SELECT sddesc FROM ' . sql_table('skin_desc')
+        . ' WHERE sdname="feeds/atom"';
+    $res = mysql_query($query);
+    while ($o = mysql_fetch_object($res)) {
+        if ($o->sddesc=='Atom 0.3 weblog syndication')
+        {
+            $sth = 1;
+?>
+<h2>Atom 1.0</h2>
+<p>Nucleus 3.3 から atom feed が 1.0 対応になりましたので、次の手順でスキン・テンプレートのアップグレードをして下さい。</p>
+
+<p>管理者画面を開き、管理ホームにあるスキンの「読込/書出」を開きます。そこから atom を選択し、読み込みボタンを押して上書きインストールしてください。</p>
+
+<p>もし atom のスキンやテンプレートを変更している場合は、既存の内容をファイルに書き出して(skinbackup.xml というファイルが作成されます)、/skins/atom/skinbackup.xml (これが新しいファイル)と比較し、この新しいファイルを更新します。その後、前述の通り管理者画面からスキンの「読込/書出」を開いて同様にして上書きインストールして下さい。</p>
+
+<?php
+        }
+    }
+
+    // default skin
+    $query = 'SELECT tdnumber FROM ' . sql_table('template_desc')
+           . ' WHERE tdname="default/index"';
+    $res = mysql_query($query);
+    $tdnumber = 0;
+    while ($o = mysql_fetch_object($res)) {
+        $tdnumber = $o->tdnumber;
+    }
+    if ($tdnumber>0)
+    {
+        $query = 'SELECT tpartname FROM ' . sql_table('template')
+               . ' WHERE tdesc=' . $tdnumber . ' AND tpartname="BLOGLIST_LISTITEM"';
+        $res = mysql_query($query);
+        if (!mysql_fetch_object($res)) {
+
+            $sth = 1;
+?>
+<h2>Default スキン</h2>
+<p>Nucleus 3.3 からいくつかのフォームの CSS が変更になっています。たとえば最初のページのログインフォームや、コメント投稿のためのフォームなど。このためフォームの表示が崩れるので、次の手順でDefault スキンのアップグレードをして下さい。</p>
+
+<p>管理者画面を開き、管理ホームにあるスキンの「読込/書出」を開きます。そこから default を選択し、読み込みボタンを押して上書きインストールしてください。</p>
+
+<p>もし default のスキンやテンプレートを変更している場合は、既存の内容をファイルに書き出して(skinbackup.xml というファイルが作成されます)、/skins/default/skinbackup.xml (これが新しいファイル)と比較し、この新しいファイルを更新します。その後、前述の通り管理者画面からスキンの「読込/書出」を開いて同様にして上書きインストールして下さい。</p>
+<?php
+        }
+    }
+
+    return $sth;
+}
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade.functions.php b/utf8/nucleus/upgrades/upgrade.functions.php
new file mode 100755 (executable)
index 0000000..b69a44b
--- /dev/null
@@ -0,0 +1,346 @@
+<?php
+
+    /*
+     * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+     * Copyright (C) 2002-2010 The Nucleus Group
+     *
+     * 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.
+     * (see nucleus/documentation/index.html#license for more info)
+     */
+    /**
+     * Some functions common to all upgrade scripts
+     *
+     * @license http://nucleuscms.org/license.txt GNU General Public License
+     * @copyright Copyright (C) 2002-2010 The Nucleus Group
+     * @version $Id$
+     * $NucleusJP: upgrade.functions.php,v 1.10 2007/04/26 06:20:19 kimitake Exp $
+     */
+
+/*************************************************************
+ *     NOTE: With upgrade to 3.6, need to set this to use sql_* API           *
+ **************************************************************/
+
+    include('../../config.php');
+
+    // sql_table function did not exists in nucleus <= 2.0
+    if (!function_exists('sql_table'))
+    {
+        function sql_table($name) {
+            return 'nucleus_' . $name;
+        }
+    }
+
+    //intGetVar did not exist in very early versions
+    if (!function_exists('intGetVar')) {
+        function intGetVar($name) {
+            if (defined($_GET)) {
+                return intval($_GET[$name]);
+            } else {
+                global $HTTP_GET_VARS;
+                return intval($HTTP_GET_VARS[$name]);
+            }
+        }
+    }
+
+    function upgrade_checkinstall($version) {
+        $installed = 0;
+
+        switch($version) {
+            case '95':
+                $query = 'SELECT bconvertbreaks FROM '.sql_table('blog').' LIMIT 1';
+                $minrows = -1;
+                break;
+            case '96':
+                $query = 'SELECT cip FROM '.sql_table('comment').' LIMIT 1';
+                $minrows = -1;
+                break;
+            case '100':
+                $query = 'SELECT mcookiekey FROM '.sql_table('member').' LIMIT 1';
+                $minrows = -1;
+                break;
+            case '110':
+                $query = 'SELECT bnotifytype FROM '.sql_table('blog').' LIMIT 1';
+                $minrows = -1;
+                break;
+            case '150':
+                $query = 'SELECT * FROM '.sql_table('plugin_option').' LIMIT 1';
+                $minrows = -1;
+                break;
+            case '200':
+                $query = 'SELECT sdincpref FROM '.sql_table('skin_desc').' LIMIT 1';
+                $minrows = -1;
+                break;
+            // dev only (v2.2)
+            case '220':
+                $query = 'SELECT oid FROM '.sql_table('plugin_option_desc').' LIMIT 1';
+                $minrows = -1;
+                break;
+            // v2.5 beta
+            case '240':
+                $query = 'SELECT bincludesearch FROM ' . sql_table('blog') . ' LIMIT 1';
+                $minrows = -1;
+                break;
+            case '250':
+                $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 250 LIMIT 1';
+                $minrows = 1;
+                break;
+            case '300':
+                $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 300 LIMIT 1';
+                $minrows = 1;
+                break;
+            case '310':
+                $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 310 LIMIT 1';
+                $minrows = 1;
+                break;
+            case '320':
+                $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 320 LIMIT 1';
+                $minrows = 1;
+                break;
+            case '330':
+                $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 330 LIMIT 1';
+                $minrows = 1;
+                break;
+            case '331':
+                $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 331 LIMIT 1';
+                $minrows = 1;
+                break;
+            case '340':
+                $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 340 LIMIT 1';
+                $minrows = 1;
+                break;
+            case '350':
+                $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 350 LIMIT 1';
+                $minrows = 1;
+                break;
+        }
+
+        $res = mysql_query($query);
+        $installed = ($res != 0) && (mysql_num_rows($res) >= $minrows);
+
+        return $installed;
+    }
+
+
+    /** this function gets the nucleus version, even if the getNucleusVersion
+     * function does not exist yet
+     * return 96 for all versions < 100
+     */
+    function upgrade_getNucleusVersion() {
+        if (!function_exists('getNucleusVersion')) return 96;
+        return getNucleusVersion();
+    }
+
+    function upgrade_showLogin($type) {
+        upgrade_head();
+    ?>
+        <h1>まずはログインして下さい</h1>
+        <p>下記の情報を入力して下さい:</p>
+
+        <form method="post" action="<?php echo $type?>">
+
+            <ul>
+                <li>名前: <input name="login" /></li>
+                <li>パスワード <input name="password" type="password" /></li>
+            </ul>
+
+            <p>
+                <input name="action" value="login" type="hidden" />
+                <input type="submit" value="ログイン" />
+            </p>
+
+        </form>
+    <?php       upgrade_foot();
+        exit;
+    }
+
+    function upgrade_head() {
+    ?>
+            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+            <html xmlns="http://www.w3.org/1999/xhtml">
+            <head>
+                <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+                <title>Nucleus アップグレード</title>
+<?php if (file_exists("../styles/manual.css")) { ?>
+                <link rel="stylesheet" href="../styles/manual.css" type="text/css" />
+<?php }else{ ?>
+                <style type="text/css"><!--
+                    .warning {
+                        color: red;
+                    }
+                    .ok {
+                        color: green;
+                    }
+                --></style>
+<?php } ?>
+            </head>
+            <body>
+    <?php   }
+
+    function upgrade_foot() {
+    ?>
+            </body>
+            </html>
+    <?php   }
+
+    function upgrade_error($msg) {
+        upgrade_head();
+        ?>
+        <h1>エラー!</h1>
+
+        <p>メッセージは以下の通り:</p>
+
+        <blockquote><div>
+        <?php echo $msg?>
+        </div></blockquote>
+
+        <p><a href="index.php" onclick="history.back();">戻る</a></p>
+        <?php
+        upgrade_foot();
+        exit;
+    }
+
+
+    function upgrade_start() {
+        global $upgrade_failures;
+        $upgrade_failures = 0;
+
+        upgrade_head();
+        ?>
+        <h1>アップグレードの実行</h1>
+        <ul>
+        <?php   }
+
+    function upgrade_end($msg = "") {
+        global $upgrade_failures;
+        $from = intGetVar('from');
+        if ($upgrade_failures > 0)
+            $msg = "いくつかのデータベース操作に失敗しました。もし以前にこのアップグレードスクリプトを実行していたのであれば、問題ないと思われます。";
+
+        ?>
+        </ul>
+
+        <h1>アップグレード完了!</h1>
+
+        <p><?php echo $msg?></p>
+
+        <p><a href="index.php?from=<?php echo $from; ?>">アップグレード最初のページ</a>にもどる</p>
+
+        <?php
+        upgrade_foot();
+        exit;
+    }
+
+    /**
+      * Tries to execute a query, gives a message when failed
+      *
+      * @param friendly name
+      * @param query
+      */
+    function upgrade_query($friendly, $query) {
+        global $upgrade_failures;
+
+        echo "<li>$friendly ... ";
+        $res = mysql_query($query);
+        if (!$res) {
+            echo "<span style='color:red'>失敗</span>\n";
+            echo "<blockquote>失敗の理由: " . mysql_error() . " </blockquote>";
+            $upgrade_failures++;
+        } else {
+            echo "<span style='color:green'>成功!</span><br />\n";
+        }
+        echo "</li>";
+        return $res;
+    }
+
+    /**
+      * Tries to update database version, gives a message when failed
+      *
+      * @param $version
+      *     Schema version the database has been upgraded to
+      */
+    function update_version($version) {
+        global $upgrade_failures;
+        $message='Updating DatabaseVersion in config table to '.$version;
+        if(0==$upgrade_failures){
+            $query = 'UPDATE ' . sql_table('config') . ' set value=\''.$version.'\' where name=\'DatabaseVersion\'';
+            upgrade_query($message, $query);
+        }else
+            echo '<li>'.$message.' ... <span class="warning">NOT EXECUTED</span>\n<blockquote>Errors occurred during upgrade process.</blockquote>';
+    }
+
+    /**
+     * @param $table
+     *      table to check (without prefix)
+     * @param $aColumns
+     *      array of column names included
+     */
+    function upgrade_checkIfIndexExists($table, $aColumns) {
+        // get info for indices from database
+
+        $aIndices = array();
+        $query = 'show index from ' . sql_table($table);
+        $res = mysql_query($query);
+        while ($o = mysql_fetch_object($res)) {
+            if (!$aIndices[$o->Key_name]) {
+                $aIndices[$o->Key_name] = array();
+            }
+            array_push($aIndices[$o->Key_name], $o->Column_name);
+        }
+
+        // compare each index with parameter
+        foreach ($aIndices as $keyName => $aIndexColumns) {
+            $aDiff = array_diff($aIndexColumns, $aColumns);
+            if (count($aDiff) == 0) return 1;
+        }
+
+        return 0;
+
+    }
+
+    /**
+      * Checks to see if a given table exists
+      *
+      * @param $table
+      *     Name of table to check for existance of
+      *     Uses sql_table internally
+      * @return true if table exists, false otherwise.
+      */
+    function upgrade_checkIfTableExists($table){
+        $query = 'SHOW TABLES LIKE \''.sql_table($table).'\'';
+        $res = mysql_query($query);
+        return ($res != 0) && (mysql_num_rows($res) == 1);
+    }
+
+    /**
+      * Checks to see if a given configuration value exists
+      *
+      * @param $value
+      *     Config value to check for existance of.
+      *     Paramater must be MySQL escaped
+      * @return true if configuration value exists, false otherwise.
+      */
+    function upgrade_checkIfCVExists($value){
+        $query = 'SELECT name from '.sql_table('config').' WHERE name = \''.$value.'\'';
+        $res = mysql_query($query);
+        return ($res != 0) && (mysql_num_rows($res) == 1);
+    }
+
+    /**
+      * Checks to see if a given column exists
+      *
+      * @param $table
+      *     Name of table to check for column in
+      *     Uses sql_table internally
+      * @param $col
+      *     Name of column to check for existance of
+      * @return true if column exists, false otherwise.
+      */
+    function upgrade_checkIfColumnExists($table, $col){
+        $query = 'DESC `'.sql_table($table).'` `'.$col.'`';
+        $res = mysql_query($query);
+        return ($res != 0) && (mysql_num_rows($res) == 1);
+    }
+?>
diff --git a/utf8/nucleus/upgrades/upgrade.php b/utf8/nucleus/upgrades/upgrade.php
new file mode 100755 (executable)
index 0000000..d299e37
--- /dev/null
@@ -0,0 +1,91 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade.php,v 1.7 2007/04/26 06:20:19 kimitake Exp $
+ */
+
+include('upgrade.functions.php');
+
+// check if logged in etc
+if (!$member->isLoggedIn()) {
+    upgrade_showLogin('upgrade.php?from=' . intGetVar('from'));
+}
+
+if (!$member->isAdmin()) {
+    upgrade_error('Super-admin(最高管理者)のみがアップグレードを実行できます。');
+}
+
+include('upgrade0.95.php');
+include('upgrade0.96.php');
+include('upgrade1.0.php');
+include('upgrade1.1.php');
+include('upgrade1.5.php');
+include('upgrade2.0.php');
+include('upgrade2.5.php');
+include('upgrade3.0.php');
+include('upgrade3.1.php');
+include('upgrade3.2.php');
+include('upgrade3.3.php');
+include('upgrade3.31.php');
+include('upgrade3.4.php');
+include('upgrade3.5.php');
+
+$from = intGetVar('from');
+
+upgrade_start();
+
+switch($from) {
+    case 95:
+        upgrade_do95();
+        upgrade_do96();
+    case 96:
+        upgrade_do100();
+    case 10:
+        upgrade_do110();
+    case 11:
+        upgrade_do150();
+    case 15:
+        upgrade_do200();
+    case 20:
+        upgrade_do250();
+    case 25:
+        upgrade_do300();
+    case 30:
+        upgrade_do310();
+    case 31:
+        upgrade_do320();
+//             break;
+    case 32:
+        upgrade_do330();
+//             break;
+    case 33:
+        upgrade_do331();
+//             break;
+    case 331:
+        upgrade_do340();
+        break;
+    case 340:
+        upgrade_do350();
+        break;
+    default:
+        echo "<li>エラー! 実行すべきアップデートはありません</li>";
+        break;
+}
+
+
+
+upgrade_end("アップグレード成功");
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade0.95.php b/utf8/nucleus/upgrades/upgrade0.95.php
new file mode 100755 (executable)
index 0000000..8e10f97
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2007 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2007 The Nucleus Group
+ * $NucleusJP: upgrade0.95.php,v 1.3.2.1 2007/10/24 05:39:15 kimitake Exp $
+ *
+ */
+
+function upgrade_do95() {
+
+       if (upgrade_checkinstall(95))
+        return 'インストール済みです';
+
+       if(!upgrade_checkIfColumnExists('blog', 'bconvertbreaks')){
+               $query =  'ALTER TABLE '.sql_table('blog')
+                          . " ADD bsendping tinyint(2) NOT NULL default '0',"
+                          . " ADD bconvertbreaks tinyint(2) NOT NULL default '1'";
+               upgrade_query("Adding 'send ping' and convert linebreaks options",$query);
+       }else{
+               echo "<li>Adding 'send ping' and convert linebreaks options ... <span class=\"warning\">NOT EXECUTED</span>\n<blockquote>Errors occurred during upgrade process.</blockquote>";
+       }
+}
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade0.96.php b/utf8/nucleus/upgrades/upgrade0.96.php
new file mode 100755 (executable)
index 0000000..5b5d88b
--- /dev/null
@@ -0,0 +1,110 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2007 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2007 The Nucleus Group
+ * $NucleusJP: upgrade0.96.php,v 1.3.2.1 2007/10/24 05:39:15 kimitake Exp $
+ *
+ */
+
+function upgrade_do96() {
+
+       if (upgrade_checkinstall(96))
+        return 'インストール済みです';
+
+       // 1. create nucleus_actionlog
+       if (!upgrade_checkIfTableExists('actionlog')) {
+               $query = 'CREATE TABLE '.sql_table('actionlog')." (timestamp datetime NOT NULL default '0000-00-00 00:00:00', message varchar(255) NOT NULL default '', PRIMARY KEY  (timestamp)) TYPE=MyISAM;";
+               upgrade_query("Creating nucleus_actionlog table",$query);
+       }
+       
+       // 2. create nucleus_ban
+       if (!upgrade_checkIfTableExists('ban')) {
+               $query = 'CREATE TABLE '.sql_table('ban')." (  iprange varchar(15) NOT NULL default '',  reason varchar(255) NOT NULL default '',  blogid int(11) NOT NULL default '0') TYPE=MyISAM;";
+               upgrade_query("Creating nucleus_ban table",$query);
+       }
+       
+       // 3. add ikarma to nucleus_item
+       if (!upgrade_checkIfColumnExists('item','ikarma')) {
+               $query =  'ALTER TABLE '.sql_table('item')
+                          . " ADD ikarma int(11) NOT NULL default '0'";
+               upgrade_query("Adding karma-votes to items",$query);
+       }
+       
+       // 4. create nucleus_karma
+       if (!upgrade_checkIfTableExists('karma')) {
+               $query = 'CREATE TABLE '.sql_table('karma')." ("
+                       ."  itemid int(11) NOT NULL default '0',"
+                       ."  ip char(15) NOT NULL default ''"
+                       .") TYPE=MyISAM;";
+               upgrade_query("Creating nucleus_karma table",$query);
+       }
+       
+       // 5. nucleus_config: add MediaURL, AllowedTypes, AllowLoginEdit, AllowUpload
+       
+       // create MediaURL out of IndexURL
+       $mediaURL = $CONF['IndexURL'] . "media/";
+       
+       if (!upgrade_checkIfCVExists('MediaURL')) {
+               $query = 'INSERT INTO '.sql_table('config')." VALUES ('MediaURL', '$mediaURL');";
+               upgrade_query("New setting MediaURL",$query);
+       }
+       if (!upgrade_checkIfCVExists('AllowedTypes')) {
+               $query = 'INSERT INTO '.sql_table('config')." VALUES ('AllowedTypes', 'jpg,jpeg,gif,mpg,mpeg,avi,mov,mp3,swf,png');";
+               upgrade_query("New setting AllowedTypes",$query);
+       }
+       if (!upgrade_checkIfCVExists('AllowLoginEdit')) {
+               $query = 'INSERT INTO '.sql_table('config')." VALUES ('AllowLoginEdit', '0');";
+               upgrade_query("New setting AllowLoginEdit",$query);
+       }
+       if (!upgrade_checkIfCVExists('AllowUpload')) {
+               $query = 'INSERT INTO '.sql_table('config')." VALUES ('AllowUpload', '1');";
+               upgrade_query("New setting AllowUpload",$query);
+       }
+       
+       //The following blocks (6 and 7) should check for existing values and only update as needed.
+       // 6. add 'imagepopup' skincontents in skin 'default'
+       
+       $query = 'SELECT sdnumber FROM '.sql_table('skin_desc')." WHERE sdname='default'";
+       $res = sql_query($query);
+       $obj = mysql_fetch_object($res);
+       $skinid = $obj->sdnumber;
+       $query = 'INSERT INTO '.sql_table('skin')." VALUES (" . $skinid . ", 'imagepopup', '<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n  <title><%imagetext%></title>\r\n  <style type=\"text/css\">\r\n   img { border: none; }\r\n  </style>\r\n</head>\r\n<body>\r\n  <a href=\"javascript:window.close();\"><%image%></a>\r\n</body>\r\n</html>');";
+       upgrade_query("Adding 'imagepopup' skinparts",$query);
+       
+       // 7. add POPUP_CODE, MEDIA_CODE, IMAGE_CODE to ALL templates
+       $query = 'SELECT tdnumber FROM '.sql_table('template_desc');
+       $res = sql_query($query);       // get all template ids
+       while ($obj = mysql_fetch_object($res)) {
+               $tid = $obj->tdnumber;  // template id
+       
+               $query = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'POPUP_CODE', '<%popuplink%>');";
+               $query2 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'MEDIA_CODE', '<%media%>');";
+               $query3 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'IMAGE_CODE', '<%image%>');";
+               upgrade_query("Adding popupcode to template $tid",$query);
+               upgrade_query("Adding mediacode to template $tid",$query2);
+               upgrade_query("Adding imagecode to template $tid",$query3);
+               
+       }
+       
+       // 8. add cip to nucleus_comment
+       if(0==$upgrade_failures && !upgrade_checkIfColumnExists('comment', 'cip')){
+               $query =  'ALTER TABLE '.sql_table('comment')
+                          . " ADD cip varchar(15) NOT NULL default ''";
+               upgrade_query("Adding IP attribute to comments",$query);
+       }else{
+               echo "<li>Adding IP attribute to comments ... <span class=\"warning\">NOT EXECUTED</span>\n<blockquote>Errors occurred during upgrade process.</blockquote>";
+       }
+}
+
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade1.0.php b/utf8/nucleus/upgrades/upgrade1.0.php
new file mode 100755 (executable)
index 0000000..1c38e8c
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade1.0.php,v 1.3.2.1 2007/10/24 05:39:15 kimitake Exp $
+ *
+ */
+
+function upgrade_do100() {
+    
+    if (upgrade_checkinstall(100))
+        return 'インストール済みです';
+    
+    // 1. add extra indices to tables
+    if (!upgrade_checkIfIndexExists('item', array('iblog', 'itime'))) {
+        $query = 'ALTER TABLE '.sql_table('item').' ADD INDEX(iblog, itime);';
+        upgrade_query("Adding extra index to nucleus_item",$query);
+    }
+    if (!upgrade_checkIfIndexExists('comment', array('citem'))) {
+        $query = 'ALTER TABLE '.sql_table('comment').' ADD INDEX(citem);';
+        upgrade_query("Adding extra index to nucleus_comment",$query);
+    }
+    
+    // 2. add DisableJsTools to config
+    if (!upgrade_checkIfCVExists('DisableJsTools')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('DisableJsTools', '0');";
+        upgrade_query("Adding setting DisableJsTools",$query);
+    }
+    
+    // 3. Drop primary key in nucleus_actionlog
+    $query = 'ALTER TABLE '.sql_table('actionlog').' DROP PRIMARY KEY;';
+    upgrade_query("Dropping primary key for actionlog table",$query);
+
+    // 4. add mcookiekey to nucleus_member
+    if(0==$upgrade_failures && !upgrade_checkIfColumnExists('member', 'mcookiekey')){
+        $query =  'ALTER TABLE '.sql_table('member')
+               . " ADD mcookiekey varchar(40) ";
+        $res = upgrade_query("Adding cookiekey attribute to members",$query);       
+        
+        // only do this when the previous query succeeds
+        //A more efficent query might be 'UPDATE '.sql_table('member')." SET mpassword=MD5(mpassword)"
+        if ($res) {
+            // 5. for all members: hash their password and also copy it to mcookiekey
+            $query = 'SELECT * FROM '.sql_table('member');
+            $res = mysql_query($query);
+            while ($current = mysql_fetch_object($res)) {
+                $hashedpw = md5($current->mpassword);
+                $updquery = 'UPDATE '.sql_table('member')." SET mpassword='$hashedpw' WHERE mnumber=" . $current->mnumber;
+                upgrade_query("Encrypting password for member " . $current->mnumber,$updquery);
+            }
+        }
+    }else{
+        echo "<li>Adding cookiekey attribute to members ... <span class=\"warning\">NOT EXECUTED</span>\n<blockquote>Errors occurred during upgrade process.</blockquote>";
+    }
+}
+
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade1.1.php b/utf8/nucleus/upgrades/upgrade1.1.php
new file mode 100755 (executable)
index 0000000..b2dda2f
--- /dev/null
@@ -0,0 +1,129 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade1.1.php,v 1.3.2.1 2007/10/24 05:39:16 kimitake Exp $
+ *
+ */
+
+function upgrade_do110() {
+    global $upgrade_failures;
+
+    if (upgrade_checkinstall(110))
+        return 'インストール済みです';
+    
+    // 1. add some options to nucleus_config
+    if (!upgrade_checkIfCVExists('CookiePath')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('CookiePath', '/');";
+        upgrade_query('CookiePath setting',$query);
+    }
+    if (!upgrade_checkIfCVExists('CookieDomain')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('CookieDomain', '');";
+        upgrade_query('CookieDomain setting',$query);
+    }
+    if (!upgrade_checkIfCVExists('CookieSecure')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('CookieSecure', '0');";
+        upgrade_query('CookieSecure setting',$query);
+    }
+    if (!upgrade_checkIfCVExists('MediaPrefix')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('MediaPrefix', '1');";
+        upgrade_query('MediaPrefix setting',$query);
+    }
+    
+    // 2. add language field to member table
+    if(!upgrade_checkIfColumnExists('member', 'deflang')){
+        upgrade_query("Language setting (member)", 
+                      'ALTER TABLE '.sql_table('member')." ADD deflang varchar(20) NOT NULL default '';");
+    }
+
+    // 3. create category table and update other tables (nucleus_item and nucleus_blog)
+    $mark=$upgrade_failures;
+    if (!upgrade_checkIfTableExists('plugin')) {
+        $query = 'CREATE TABLE '.sql_table('category').' ('
+            ." catid int(11) NOT NULL auto_increment,"
+            ." cblog int(11) NOT NULL, "
+            ." cname varchar(40),"
+            ." cdesc varchar(200),"
+            ." PRIMARY KEY (catid)"
+            .") ";
+        upgrade_query('New table '.sql_table('category'), $query);
+    }
+    if(!upgrade_checkIfColumnExists('item', 'icat')){
+        upgrade_query("Adding category attribute to item-table", 
+            'ALTER TABLE '.sql_table('item').' ADD icat int(11)');
+    }
+    if(!upgrade_checkIfColumnExists('blog', 'bdefcat')){
+        upgrade_query("Adding defcat attribute to blog-table", 
+            'ALTER TABLE '.sql_table('blog').' ADD bdefcat int(11)');
+    }
+    
+    //The following blocks should check for existing values and only update as needed.
+    if($mark==$upgrade_failures){
+        // 4. add 'general' categories for all blogs, and update nucleus_item
+        $catid = 1; // generate catids ourself
+        $query = 'SELECT bnumber FROM '.sql_table('blog');
+        $res = mysql_query($query);
+        while ($current = mysql_fetch_object($res)) {
+            $blogid = $current->bnumber;
+            
+            $query = 'INSERT INTO '.sql_table('category')." (catid, cblog, cname, cdesc) VALUES ($catid, $blogid, 'General', 'Items that do not fit in other categories')";
+            $r = upgrade_query("Adding category 'general' for blog " . $blogid, $query);
+            
+            // only perform next actions when insert went ok
+            if ($r) {
+                $query = 'UPDATE '.sql_table('blog')." SET bdefcat=$catid WHERE bnumber=$blogid";
+                upgrade_query("Setting the default category for blog $blogid to the 'General' category", $query);
+            
+                $query = 'UPDATE '.sql_table('item')." SET icat=$catid WHERE iblog=$blogid";
+                upgrade_query("Assigning all existing items of blog $blogid to the 'General' category",$query);
+            }
+        
+            $catid++;
+        }
+        
+        // 5. add template parts for category lists to all templates
+        $query = 'SELECT tdnumber FROM '.sql_table('template_desc');
+        $res = sql_query($query);   // get all template ids
+        while ($obj = mysql_fetch_object($res)) {
+            $tid = $obj->tdnumber;  // template id
+        
+            $query = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'CATLIST_HEADER', '<ul><li><a href=\"<%blogurl%>\">All</a></li>');";
+            $query2 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'CATLIST_LISTITEM', '<li><a href=\"<%catlink%>\"><%catname%></a></li>');";
+            $query3 = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'CATLIST_FOOTER', '</ul>');";
+            upgrade_query("Adding categorylist header to template $tid",$query);
+            upgrade_query("Adding categorylist item to template $tid",$query2);
+            upgrade_query("Adding categorylist footer to template $tid",$query3);
+            
+        }
+    }
+    
+    // 6. add content type field to skins
+    if(!upgrade_checkIfColumnExists('skin_desc', 'sdtype')){
+        $query = 'ALTER TABLE '.sql_table('skin_desc')." ADD sdtype VARCHAR(40) NOT NULL DEFAULT 'text/html'";
+        upgrade_query("Adding content type field to skins (text/html)", $query);
+    }
+    
+    // 7. try to set content type for xml-rss skin to text/xml
+    $query = 'UPDATE '.sql_table('skin_desc')." SET sdtype='text/xml' WHERE sdname='xmlrss'";
+    upgrade_query("Setting content type for xmlrss skin to text/xml", $query);
+    
+    // 8. add bnotifytype column to blog tables
+    if(0==$upgrade_failures && !upgrade_checkIfColumnExists('blog', 'bnotifytype')){
+        upgrade_query("Adding Notify Type Setting", 
+                      'ALTER TABLE '.sql_table('blog')." ADD bnotifytype INT(11) NOT NULL default '15';");
+    }else{
+        echo "<li>Adding Notify Type Setting ... <span class=\"warning\">NOT EXECUTED</span>\n<blockquote>Errors occurred during upgrade process.</blockquote>";
+    }
+}
+?>
diff --git a/utf8/nucleus/upgrades/upgrade1.5.php b/utf8/nucleus/upgrades/upgrade1.5.php
new file mode 100755 (executable)
index 0000000..3040d2f
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade1.5.php,v 1.3.2.1 2007/10/24 05:39:16 kimitake Exp $
+ *
+ */
+
+function upgrade_do150() {
+
+    if (upgrade_checkinstall(150))
+        return 'インストール済みです';
+    
+    // create nucleus_plugin_event
+    if (upgrade_checkIfTableExists('plugin_events')) {//present in dev version
+        upgrade_query('Renaming table nucleus_plugins_events','RENAME TABLE '.sql_table('plugins_events').' TO '.sql_table('plugin_event'));
+    }elseif (!upgrade_checkIfTableExists('plugin_event')) {
+        $query = 'CREATE TABLE '.sql_table('plugin_event').' (pid int(11) NOT NULL, event varchar(40)) TYPE=MyISAM;';
+        upgrade_query("Creating nucleus_plugin_event table",$query);
+    }
+
+    // create nucleus_plugin
+    if (upgrade_checkIfTableExists('plugins')) {//present in dev version
+        upgrade_query('Renaming table nucleus_plugins','RENAME TABLE '.sql_table('plugins').' TO '.sql_table('plugin'));
+    }elseif (!upgrade_checkIfTableExists('plugin')) {
+        $query = 'CREATE TABLE '.sql_table('plugin')." (pid int(11) NOT NULL auto_increment, pfile varchar(40) NOT NULL, porder int(11) not null, PRIMARY KEY(pid)) TYPE=MyISAM;";
+        upgrade_query("Creating nucleus_plugin table",$query);
+    }
+
+    // add MaxUploadSize to config  
+    if (!upgrade_checkIfCVExists('MaxUploadSize')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('MaxUploadSize','1048576')";
+        upgrade_query('MaxUploadSize setting',$query);
+    }
+    
+
+    // try to add cblog column when it does not exists yet
+    //The logic on the old code seems off, but my replacement may not be correct either--AWB
+    //$query = 'SELECT * FROM '.sql_table('comment').' WHERE cblog=0 LIMIT 1';
+    //$res = mysql_query($query);
+    //if (!$res || (mysql_num_rows($res) > 0)) {
+    
+    if(!upgrade_checkIfColumnExists('comment', 'cblog')){
+        $query = 'ALTER TABLE '.sql_table('comment')." ADD cblog int(11) NOT NULL default '0'";
+        upgrade_query('Adding cblog column in table nucleus_comment',$query);
+
+        $query = 'SELECT inumber, iblog FROM '.sql_table('item').', '.sql_table('comment').' WHERE inumber=citem AND cblog=0';
+        $res = sql_query($query);
+
+        while($o = mysql_fetch_object($res)) {
+            $query = 'UPDATE '.sql_table('comment')." SET cblog='".$o->iblog."' WHERE citem='".$o->inumber."'";
+            upgrade_query('Filling cblog column for item ' . $o->inumber, $query);
+        }
+    }   
+    
+    // add 'pluginURL' to config
+    global $CONF;
+    if (!upgrade_checkIfCVExists('PluginURL')) {
+        $pluginURL = $CONF['AdminURL'] . "plugins/";
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('PluginURL', '$pluginURL');";
+        upgrade_query('PluginURL setting', $query);
+    }
+    
+    // add 'EDITLINK' to all templates
+    $query = 'SELECT tdnumber FROM '.sql_table('template_desc');
+    $res = sql_query($query);   // get all template ids
+    while ($obj = mysql_fetch_object($res)) {
+        $tid = $obj->tdnumber;  // template id
+    
+        $query = 'INSERT INTO '.sql_table('template')." VALUES ($tid, 'EDITLINK', '<a href=\"<%editlink%>\" onclick=\"<%editpopupcode%>\">edit</a>');";
+        upgrade_query("Adding editlink code to template $tid",$query);
+        
+    }
+    
+    // in templates: update DATE_HEADER templates
+    $res = sql_query('SELECT * FROM '.sql_table('template').' WHERE tpartname=\'DATE_HEADER\'');
+    while ($o = mysql_fetch_object($res)) {
+        $newval = str_replace('<%daylink%>','<%%daylink%%>',$o->tcontent);
+        $query = 'UPDATE '.sql_table('template').' SET tcontent=\''. addslashes($newval).'\' WHERE tdesc=' . $o->tdesc . ' AND tpartname=\'DATE_HEADER\'';
+        upgrade_query('Updating DATE_HEADER part in template ' . $o->tdesc, $query);
+    }
+    
+    // in templates: add 'comments'-templatevar to all non-empty ITEM templates 
+    $res = sql_query('SELECT * FROM '.sql_table('template').' WHERE tpartname=\'ITEM\'');
+    while ($o = mysql_fetch_object($res)) {
+        if (!strstr($o->tcontent,'<%comments%>')) {
+            $newval = $o->tcontent . '<%comments%>';
+            $query = 'UPDATE '.sql_table('template').' SET tcontent=\''. addslashes($newval).'\' WHERE tdesc=' . $o->tdesc . ' AND tpartname=\'ITEM\'';
+            upgrade_query('Updating ITEM part in template ' . $o->tdesc, $query);
+        }
+    }
+
+    // new setting: NonmemberMail
+    if (!upgrade_checkIfCVExists('NonmemberMail')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('NonmemberMail', '0');";
+        upgrade_query("Adding setting NonmemberMail",$query);
+    }
+    
+    // new setting: ProtectMemNames
+    if (!upgrade_checkIfCVExists('ProtectMemNames')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('ProtectMemNames', '1');";
+        upgrade_query("Adding setting ProtectMemNames",$query);
+    }
+
+    // create new table: nucleus_plugin_option
+    global $upgrade_failures;
+    if (0==$upgrade_failures && !upgrade_checkIfTableExists('plugin_option')) {
+        $query = 'CREATE TABLE '.sql_table('plugin_option')." (opid int(11) NOT NULL, oname varchar(20) NOT NULL, ovalue varchar(128) not null, odesc varchar(255), otype varchar(8), PRIMARY KEY(opid, oname)) TYPE=MyISAM;";
+        upgrade_query("Creating nucleus_plugin_option table",$query);
+    }else{
+        echo "<li>Creating nucleus_plugin_option table ... <span class=\"warning\">NOT EXECUTED</span>\n<blockquote>Errors occurred during upgrade process.</blockquote>";
+    }
+}
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade2.0.php b/utf8/nucleus/upgrades/upgrade2.0.php
new file mode 100755 (executable)
index 0000000..04739b7
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade2.0.php,v 1.3.2.1 2007/10/24 05:39:16 kimitake Exp $
+ *
+ */
+
+function upgrade_do200() {
+
+    if (upgrade_checkinstall(200))
+        return 'インストール済みです';
+
+    // queries come here
+    
+    // add ikarmaneg 
+    if (!upgrade_checkIfColumnExists('item','ikarmaneg')) {
+        $query =  'ALTER TABLE '.sql_table('item')
+               . " ADD ikarmaneg int(11) NOT NULL default '0'";
+        upgrade_query("Adding ikarmaneg column to items",$query);
+    }
+
+    // rename ikarma to ikarmapos
+    if (!upgrade_checkIfColumnExists('item','ikarmapos')) {
+        $query =  'ALTER TABLE '.sql_table('item')
+               . " CHANGE ikarma ikarmapos int(11) NOT NULL default '0'";
+        upgrade_query("Renaming ikarma column for items to ikarmapos",$query);
+    }
+
+    // drop key in actionlog
+    $query = 'ALTER TABLE '.sql_table('actionlog').' DROP PRIMARY KEY';
+    upgrade_query("Dropping primary key in actionlog table",$query);    
+    
+    // change cmail field length
+    $query = 'ALTER TABLE '.sql_table('comment').' CHANGE cmail cmail varchar(100) default NULL';
+    upgrade_query("changing max email/url length of guest comments to 100",$query); 
+    
+    // create default skin option
+    if (!upgrade_checkIfCVExists('BaseSkin')) {
+        $skinid = SKIN::getIdFromName('default');
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('BaseSkin', '$skinid');";
+        upgrade_query("Adding setting BaseSkin",$query);
+    }
+
+    global $CONF;
+    // add SkinsURL setting
+    if (!upgrade_checkIfCVExists('SkinsURL')) {
+        $skinsurl = str_replace('/media/','/skins/',$CONF['MediaURL']);
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('SkinsURL', '".addslashes($skinsurl)."');";
+        upgrade_query("Adding setting SkinsURL",$query);
+    }
+
+    // add ActionURL setting
+    if (!upgrade_checkIfCVExists('ActionURL')) {
+        $actionurl = str_replace('/media/','/action.php',$CONF['MediaURL']);
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('ActionURL', '".addslashes($actionurl)."');";
+        upgrade_query("Adding setting ActionURL",$query);
+    }
+    
+    // time offset can also be decimal (for half time zones like GMT+3:30)
+    $query = 'ALTER TABLE '.sql_table('blog')." CHANGE btimeoffset btimeoffset DECIMAL( 3, 1 ) DEFAULT '0' NOT NULL";
+    upgrade_query('Changing time offset column type to decimal',$query);
+    
+    // add ballowpast option to nucleus_blog
+    if (!upgrade_checkIfColumnExists('blog','ballowpast')) {
+        $query =  'ALTER TABLE '.sql_table('blog')." ADD ballowpast tinyint(2) NOT NULL default '0'";
+        upgrade_query("Adding 'Allow posting to the past' option to blogs",$query);
+    }
+    
+    // URLMode
+    if (!upgrade_checkIfCVExists('URLMode')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('URLMode', 'normal');";
+        upgrade_query("Adding setting URLMode",$query);
+    }
+    
+    // add id to nucleus_plugin_option (allows for ordening)
+    if (!upgrade_checkIfColumnExists('plugin_option','oid')) {
+        $query =  'ALTER TABLE '.sql_table('plugin_option').' ADD oid int(11) NOT NULL auto_increment UNIQUE ';
+        upgrade_query("Adding id attribute to plugin options table",$query);
+    }
+
+    // add sdincmode and sdincpref to skins
+    global $upgrade_failures;
+    if (0 == $upgrade_failures && !upgrade_checkIfColumnExists('skin_desc','sdincpref')) {
+        $query =  'ALTER TABLE '.sql_table('skin_desc')
+               . " ADD sdincmode varchar(10) NOT NULL default 'normal',"
+               . " ADD sdincpref varchar(50) NOT NULL default ''";
+        upgrade_query('Adding IncludeMode and IncludePrefix properties to skins',$query);   
+    }else{
+        echo "<li>Adding IncludeMode and IncludePrefix properties to skins ... <span class=\"warning\">NOT EXECUTED</span>\n<blockquote>Errors occurred during upgrade process.</blockquote>";
+    }
+}
+?>
diff --git a/utf8/nucleus/upgrades/upgrade2.5.php b/utf8/nucleus/upgrades/upgrade2.5.php
new file mode 100755 (executable)
index 0000000..0a1d510
--- /dev/null
@@ -0,0 +1,143 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade2.5.php,v 1.3.2.1 2007/10/24 05:39:16 kimitake Exp $
+ *
+ */
+
+function upgrade_do250() {
+       global $upgrade_failures;
+               //needed as some queries depend on the success of others
+
+       if (upgrade_checkinstall(250))
+        return 'インストール済みです';
+
+       // -------------------- 2.0 -> 2.2 (dev only) --------------------
+       // (avoid doing this twice :))
+       if (!upgrade_checkinstall(220)) {
+               // 1. create nucleus_plugin_option_desc table
+               // create new table: nucleus_plugin_option
+               if (!upgrade_checkIfTableExists('plugin_option_desc')) {
+                       $query = 'CREATE TABLE '. sql_table('plugin_option_desc') . ' ('
+                                  ." oid int(11) NOT NULL auto_increment UNIQUE,"
+                                  ." opid int(11) NOT NULL,"
+                                  ." oname varchar(20) NOT NULL,"
+                                  ." ocontext varchar(20) NOT NULL,"
+                                  ." odesc varchar(255),"
+                                  ." otype varchar(20),"
+                                  ." odef text,"
+                                  ." oextra text,"
+                                  ." PRIMARY KEY(opid, oname, ocontext)"
+                                  .") TYPE=MyISAM;";
+                       upgrade_query('Creating ' . sql_table('plugin_option_desc') . ' table',$query);
+               }
+
+               // 2. move all data from plugin_option to plugin_option_desc
+               if (0 == $upgrade_failures){
+                       $query = 'DELETE FROM ' . sql_table('plugin_option_desc');
+                       upgrade_query('Flushing plugin option descriptions', $query);
+                       $query = 'SELECT * FROM ' . sql_table('plugin_option') .' ORDER BY oid ASC';
+                       $res = sql_query($query);
+                       $aValues = array();
+                       while ($o = mysql_fetch_object($res)) {
+                               $query = 'INSERT INTO ' . sql_table('plugin_option_desc')
+                                          .' (opid, oname, ocontext, odesc, otype)'
+                                          ." VALUES ("
+                                                       ."'".addslashes($o->opid)."',"
+                                                       ."'".addslashes($o->oname) ."',"
+                                                       ."'global',"
+                                                       ."'".addslashes($o->odesc) ."',"
+                                                       ."'".addslashes($o->otype) ."')";
+                               upgrade_query('Moving option description for '.htmlspecialchars($o->oname).' to ' . sql_table('plugin_option_desc'), $query);
+       
+                               // store new id
+                               $aValues[] = array ( 
+                                                               'id' => mysql_insert_id(),
+                                                               'value' => $o->ovalue
+                                                       );
+                       }
+               }
+
+               // 3. alter plugin_options table 
+               if (0 == $upgrade_failures && !upgrade_checkIfColumnExists('plugin_option','ocontextid')) {
+                       $query = 'ALTER TABLE ' . sql_table('plugin_option')
+                                  .' DROP PRIMARY KEY,'
+                                  .' DROP KEY oid,'
+                                  .' DROP COLUMN opid,'
+                                  .' DROP COLUMN oname,'
+                                  .' DROP COLUMN odesc,'
+                                  .' DROP COLUMN otype,'               
+                                  .' ADD ocontextid INT(11) NOT NULL,'
+                                  .' ADD PRIMARY KEY (oid, ocontextid)';
+                       upgrade_query('Altering ' . sql_table('plugin_option') . ' table', $query);
+                       
+                       if(0 == $upgrade_failures){
+                               // 4. delete from plugin_options
+                               $query = 'DELETE FROM ' . sql_table('plugin_option');
+                               upgrade_query('Cleaning ' . sql_table('plugin_option'), $query);
+               
+                               // 5. refill plugin_options
+                               foreach ($aValues as $aInfo) {
+                                       $query = 'INSERT INTO ' . sql_table('plugin_option') 
+                                                  .' (oid, ocontextid, ovalue)'
+                                                  ." VALUES (".$aInfo['id'].",'0','".addslashes($aInfo['value'])."')";
+                                       upgrade_query('Re-filling ' . sql_table('plugin_option') . ' ('.$aInfo['id'].')', $query);
+                               }
+                       }       
+               }
+       }               
+       
+       // -------------------- 2.0 -> 2.5 --------------------
+       
+       if (!upgrade_checkIfIndexExists('item', array('ibody', 'ititle', 'imore'))) {
+               // add fulltext indices for search
+               $query = 'ALTER TABLE ' . sql_table('item') . ' ADD FULLTEXT(ibody, ititle, imore)';
+               upgrade_query('Adding fulltext index to item table', $query);
+               // repair table is needed (build index)
+               upgrade_query('Repairing item table', 'REPAIR TABLE ' . sql_table('item'));
+       }
+       
+       if (!upgrade_checkIfIndexExists('comment', array('cbody'))) {
+               $query = 'ALTER TABLE ' . sql_table('comment') . ' ADD FULLTEXT(cbody)';
+               upgrade_query('Adding fulltext index to comments table', $query);       
+               upgrade_query('Repairing comment table', 'REPAIR TABLE ' . sql_table('comment'));       
+       }       
+       
+       if (!upgrade_checkinstall(240)) {
+           $query = ' ALTER TABLE ' . sql_table('blog') . ' ADD bincludesearch TINYINT(2) DEFAULT 0';
+               upgrade_query('Adding bincludesearch column to blog', $query);
+       }
+       
+       // modify plugin option table value column type to TEXT
+       $query = 'ALTER TABLE ' . sql_table('plugin_option') . ' MODIFY ovalue TEXT NOT NULL default \'\'';
+       upgrade_query('Modifying plugin options column type', $query);
+       
+       // insert External Authentication global option
+       if (!upgrade_checkIfCVExists('ExtAuth')) {
+               $query = 'INSERT INTO ' . sql_table('config') . ' (name,value) VALUES (\'ExtAuth\',\'0\')';
+               upgrade_query('Adding External Authentication option to config table', $query); 
+       }
+       
+       // insert database version  (allows us to do better version checking in v3.0 upgrades)
+       // But only if no errors in upgrade
+       if (0 == $upgrade_failures && !upgrade_checkIfCVExists('DatabaseVersion')) {
+               $query = 'INSERT INTO ' . sql_table('config') . ' (name,value) VALUES (\'DatabaseVersion\',\'250\')';
+               upgrade_query('Adding DatabaseVersion to config table', $query);
+       }else{
+               echo "<li>Adding DatabaseVersion to config table ... <span class=\"warning\">NOT EXECUTED</span>\n<blockquote>Errors occurred during upgrade process.</blockquote>";
+       }
+}
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade3.0.php b/utf8/nucleus/upgrades/upgrade3.0.php
new file mode 100755 (executable)
index 0000000..1b74ad5
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade3.0.php,v 1.3.2.1 2007/10/24 05:39:16 kimitake Exp $
+ *
+ */
+
+function upgrade_do300() {
+
+    if (upgrade_checkinstall(300))
+        return 'インストール済みです';
+
+    // 2.5(beta/RC/...) -> 3.0
+    // update database version  
+    update_version('300');
+    // nothing!
+}
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade3.1.php b/utf8/nucleus/upgrades/upgrade3.1.php
new file mode 100755 (executable)
index 0000000..cb17bb7
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade3.1.php,v 1.3.2.1 2007/10/24 05:39:16 kimitake Exp $
+ *
+ */
+
+function upgrade_do310() {
+
+    if (upgrade_checkinstall(310))
+        return 'インストール済みです';
+
+    // 3.0 -> 3.1
+    // update database version  
+    update_version('310');
+    // nothing!
+}
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade3.2.php b/utf8/nucleus/upgrades/upgrade3.2.php
new file mode 100755 (executable)
index 0000000..641a8e2
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade3.2.php,v 1.5.2.1 2007/10/24 05:39:16 kimitake Exp $
+ *
+ */
+
+function upgrade_do320() {
+
+    if (upgrade_checkinstall(320))
+        return 'インストール済みです';
+
+    // create nucleus_activation table
+    if (!upgrade_checkIfTableExists('tickets')) {
+        $query = 'CREATE TABLE ' . sql_table('activation') . ' ('
+               . ' vkey varchar(40) NOT NULL default \'\','
+               . ' vtime datetime NOT NULL default \'0000-00-00 00:00:00\','
+               . ' vmember int(11) NOT NULL default \'0\','
+               . ' vtype varchar(15) NOT NULL default \'\','
+               . ' vextra varchar(128) NOT NULL default \'\','
+               . ' PRIMARY KEY  (vkey) '
+               . ' )';
+        upgrade_query('Creating account activation table', $query);    
+    }
+    
+    // create CookiePrefix setting
+    if (!upgrade_checkIfCVExists('CookiePrefix')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('CookiePrefix','')";
+        upgrade_query('Creating CookiePrefix config value',$query); 
+    }
+
+    // create nucleus_tickets table
+    if (!upgrade_checkIfTableExists('tickets')) {
+        $query = 'CREATE TABLE ' . sql_table('tickets') . ' ('
+               . ' ticket varchar(40) NOT NULL default \'\','
+               . ' ctime datetime NOT NULL default \'0000-00-00 00:00:00\','
+               . ' member int(11) NOT NULL default \'0\', '
+               . ' PRIMARY KEY  (ticket, member) '
+               . ' )';
+        upgrade_query('Creating ticket table', $query);    
+    }
+    
+    // 3.1 -> 3.2
+    // update database version  
+    update_version('320');
+    
+    // nothing!
+}
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade3.3.php b/utf8/nucleus/upgrades/upgrade3.3.php
new file mode 100644 (file)
index 0000000..a491301
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade3.3.php,v 1.5.2.1 2007/10/24 05:39:16 kimitake Exp $
+ *
+ */
+
+function upgrade_do330() {
+
+    if (upgrade_checkinstall(330))
+        return 'インストール済みです';
+
+    if (!upgrade_checkIfColumnExists('comment','cemail')) {
+        $query = "  ALTER TABLE `" . sql_table('comment') . "`
+                    ADD `cemail` VARCHAR( 100 ) AFTER `cmail` ;";
+
+        upgrade_query('Altering ' . sql_table('comment') . ' table', $query);
+    }
+
+    if (!upgrade_checkIfColumnExists('blog','breqemail')) {
+        $query = "  ALTER TABLE `" . sql_table('blog') . "`
+                    ADD `breqemail` TINYINT( 2 ) DEFAULT '0' NOT NULL ;";
+
+        upgrade_query('Altering ' . sql_table('blog') . ' table', $query);
+    }
+
+    // check cmail column to separate to URL and cemail
+    mysql_query(
+        'UPDATE ' . sql_table('comment') . ' ' . 
+        "SET cemail = cmail, cmail = '' " .
+        "WHERE cmail LIKE '%@%'"
+    );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    // 3.2 -> 3.3
+    // update database version
+    update_version('330');
+
+
+
+
+
+
+
+}
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade3.31.php b/utf8/nucleus/upgrades/upgrade3.31.php
new file mode 100644 (file)
index 0000000..e986db3
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade3.31.php,v 1.1.2.4 2008/02/04 07:05:36 kimitake Exp $
+ *
+ */
+
+function upgrade_do331() {
+
+    if (upgrade_checkinstall(331))
+        return 'インストール済みです';
+
+    if (!upgrade_checkIfColumnExists('item','iposted')) {
+        $query = "  ALTER TABLE `" . sql_table('item') . "`
+                                ADD `iposted` TINYINT(2) DEFAULT 1 NOT NULL ;";
+
+        upgrade_query('Altering ' . sql_table('item') . ' table', $query);
+    }
+
+    if (!upgrade_checkIfColumnExists('blog','bfuturepost')) {
+        $query = "  ALTER TABLE `" . sql_table('blog') . "`
+                                ADD `bfuturepost` TINYINT(2) DEFAULT 0 NOT NULL ;";
+
+        upgrade_query('Altering ' . sql_table('blog') . ' table', $query);
+    }
+
+    // 3.3 -> 3.31
+    // update database version
+    update_version('331');
+
+    // check to see if user turn on Weblogs.com ping, if so, suggest to install the plugin
+    $query = "SELECT bsendping FROM " . sql_table('blog') . " WHERE bsendping='1'"; 
+    $res = mysql_query($query);
+    if (mysql_num_rows($res) > 0) {
+        echo "<li>メモ: weblogs.com ping 機能が向上しプラグイン化されました。この機能を有効化するには、プラグインの管理メニューを開き、NP_Ping プラグインをインストールしてください。また NP_Ping は NP_PingPong を置き換えるものです。もしすでに NP_PingPong をインストール済みであれば削除してください。</li>";
+    }
+}
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade3.4.php b/utf8/nucleus/upgrades/upgrade3.4.php
new file mode 100644 (file)
index 0000000..797dda1
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: upgrade3.3.php,v 1.5.2.1 2007/10/24 05:39:16 kimitake Exp $
+ *
+ */
+
+function upgrade_do340() {
+
+    if (upgrade_checkinstall(340))
+        return 'インストール済みです';
+    
+    // Give user warning if they are running old version of PHP
+        if (phpversion() < '5') {
+                echo '警告: Nucleusを古いバージョンのPHPで運用しようとしています。次のリリースバージョンからはPHP4のサポートはしないので、はやくPHP5に切り替えましょう!';
+        }
+
+    // lengthen tpartname column of nucleus_template
+    $query = "  ALTER TABLE `" . sql_table('template') . "`
+                    MODIFY `tpartname` varchar(64) NOT NULL default '' ;";
+
+    upgrade_query('Altering ' . sql_table('template') . ' table', $query);
+    
+    // lengthen tdname column of nucleus_template_desc
+    $query = "  ALTER TABLE `" . sql_table('template_desc') . "`
+                    MODIFY `tdname` varchar(64) NOT NULL default '' ;";
+
+    upgrade_query('Altering ' . sql_table('template_desc') . ' table', $query);
+    
+    // create DebugVars setting
+    if (!upgrade_checkIfCVExists('DebugVars')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('DebugVars',0)";
+        upgrade_query('Creating DebugVars config value',$query);    
+    }
+    
+    // create DefaultListSize setting
+    if (!upgrade_checkIfCVExists('DefaultListSize')) {
+        $query = 'INSERT INTO '.sql_table('config')." VALUES ('DefaultListSize',10)";
+        upgrade_query('Creating DefaultListSize config value',$query);  
+    }
+    
+    // changing the member table
+    $query = ' ALTER TABLE ' . sql_table('member') . ' ADD mautosave TINYINT(2) DEFAULT 1';
+    upgrade_query('Adding a new row for the autosave member option', $query);
+
+    // 3.31 -> 3.4
+    // update database version
+    update_version('340');
+    
+}
+
+?>
diff --git a/utf8/nucleus/upgrades/upgrade3.5.php b/utf8/nucleus/upgrades/upgrade3.5.php
new file mode 100755 (executable)
index 0000000..2d6478a
--- /dev/null
@@ -0,0 +1,49 @@
+<?php\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+/**\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ *\r
+ */\r
+\r
+function upgrade_do350() {\r
+\r
+    if (upgrade_checkinstall(350))\r
+        return 'インストール済みです';\r
+    \r
+    // Give user warning if they are running old version of PHP\r
+        if (phpversion() < '5') {\r
+                echo '警告:サーバで稼動しているPHPのバージョンが、NucleusCMSの動作保障外の古いバージョンのようです。PHP5以上にアップグレードしてください!';\r
+        }\r
+    \r
+    // changing the member table to lengthen display name (mname)\r
+    $query = " ALTER TABLE `" . sql_table('member') . "`\r
+                    MODIFY `mname` varchar(32) NOT NULL default '' ;";\r
+\r
+    upgrade_query('Altering ' . sql_table('member') . ' table', $query);\r
+\r
+    // changing the blog table to remove bsendping flag\r
+    $query = " ALTER TABLE `" . sql_table('blog') . "`\r
+                    DROP `bsendping`;";\r
+\r
+    upgrade_query('Altering ' . sql_table('blog') . ' table', $query);\r
+\r
+    // 3.4 -> 3.5\r
+    // update database version\r
+    update_version('350');\r
+\r
+    // Remind user to re-install NP_Ping \r
+    echo '<p>注意: バージョン3.50よりNP_Pingに変更があるので、使用中の方は管理画面より再インストールしてください。</p>';\r
+\r
+}\r
+?>\r
diff --git a/utf8/nucleus/xmlrpc/api_blogger.inc.php b/utf8/nucleus/xmlrpc/api_blogger.inc.php
new file mode 100755 (executable)
index 0000000..e52bc2c
--- /dev/null
@@ -0,0 +1,453 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * This file contains definitions for the methods in the Blogger API
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: api_blogger.inc.php,v 1.5 2006/07/17 20:03:45 kimitake Exp $
+ */
+
+
+       // blogger.newPost
+       $f_blogger_newPost_sig = array(array(
+                       // return type
+                       $xmlrpcString,  // itemid of the new item
+
+                       // params:
+                       $xmlrpcString,  // appkey (ignored)
+                       $xmlrpcString,  // blogid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcString,  // content
+                       $xmlrpcBoolean, // publish boolean (set to false to create draft)
+
+               ));
+       $f_blogger_newPost_doc = "Adds a new item to the given blog. Adds it as a draft when publish is false";
+       function f_blogger_newPost($m) {
+               $blogid = _getScalar($m,1);
+               $username = _getScalar($m,2);
+               $password = _getScalar($m,3);
+               $content = _getScalar($m,4);
+               $publish = _getScalar($m,5);
+
+               $title = blogger_extractTitle($content);
+               $category = blogger_extractCategory($content);
+               $content = blogger_removeSpecialTags($content);
+
+               return _addItem($blogid, $username, $password, $title, $content, '', $publish, 0, $category);
+       }
+
+       // blogger.editPost
+       $f_blogger_editPost_sig = array(array(
+                       // return type
+                       $xmlrpcBoolean, // true or false
+
+                       // params:
+                       $xmlrpcString,  // appkey (ignored)
+                       $xmlrpcString,  // postid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcString,  // content
+                       $xmlrpcBoolean, // publish boolean (only considered when dealing with a draft)
+
+               ));
+       $f_blogger_editPost_doc = "Edits an item of a blog";
+       function f_blogger_editPost($m) {
+               global $manager;
+
+               $itemid = intval(_getScalar($m,1));
+               $username = _getScalar($m,2);
+               $password = _getScalar($m,3);
+               $content = _getScalar($m,4);
+               $publish = _getScalar($m,5);
+
+               $title = blogger_extractTitle($content);
+               $category = blogger_extractCategory($content);
+               $content = blogger_removeSpecialTags($content);
+
+               // get old title and extended part
+               if (!$manager->existsItem($itemid,1,1))
+                       return _error(6,"No such item ($itemid)");
+               $old =& $manager->getItem($itemid,1,1);
+
+               $blogid = getBlogIDFromItemID($itemid);
+
+               $blog = new BLOG($blogid);
+               $catid = $blog->getCategoryIdFromName($category);
+
+               if ($old['draft'] && $publish) {
+                       $wasdraft = 1;
+                       $publish = 1;
+               } else {
+                       $wasdraft = 0;
+               }
+
+               return _edititem($itemid, $username, $password, $catid, $title, $content, $old['more'], $wasdraft, $publish, $old['closed']);
+       }
+
+
+       // blogger.getUsersBlogs
+       $f_blogger_getUsersBlogs_sig = array(array(
+                       // return type
+                       $xmlrpcArray,   // array containing structs containing blog info
+
+                       // params:
+                       $xmlrpcString,  // appkey (ignored)
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+               ));
+       $f_blogger_getUsersBlogs_doc = "Returns a list of all the blogs where the given member is on the team";
+       function f_blogger_getUsersBlogs($m) {
+               $username = _getScalar($m,1);
+               $password = _getScalar($m,2);
+
+               return _getUsersBlogs($username, $password);
+       }
+
+       // blogger.getRecentPosts
+       $f_blogger_getRecentPosts_sig = array(array(
+                       // return type
+                       $xmlrpcArray,   // array of strucs (representing items)
+
+                       // params
+                       $xmlrpcString,  // appkey (ignored)
+                       $xmlrpcString,  // blogid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcInt,     // amount of items to return (max = 20)
+               ));
+       $f_blogger_getRecentPosts_doc = "Returns a maximum of 20 recent items";
+       function f_blogger_getRecentPosts($m) {
+               $blogid = _getScalar($m, 1);
+               $username = _getScalar($m, 2);
+               $password = _getScalar($m, 3);
+               $amount = _getScalar($m, 4);
+
+               return _getRecentItemsBlogger($blogid, $username, $password, $amount);
+       }
+
+
+       // blogger.getPost
+       $f_blogger_getPost_sig = array(array(
+                       // return type
+                       $xmlrpcStruct,  // A struct representing the item
+
+                       // params
+                       $xmlrpcString,  // appkey (ignored)
+                       $xmlrpcString,  // postid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+               ));
+       $f_blogger_getPost_doc = "Returns an item (only the item body!)";
+       function f_blogger_getPost($m) {
+               $postid = _getScalar($m, 1);
+               $username = _getScalar($m, 2);
+               $password = _getScalar($m, 3);
+
+               return _getItemBlogger($postid, $username, $password);
+       }
+
+
+       // blogger.deletePost
+       $f_blogger_deletePost_sig = array(array(
+                       // return type
+                       $xmlrpcBoolean, // boolean (ok or not ok)
+
+                       // params
+                       $xmlrpcString,  // appkey (ignored)
+                       $xmlrpcString,  // postid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcBoolean, // publish (ignored)
+               ));
+       $f_blogger_deletePost_doc = "Deletes an item";
+       function f_blogger_deletePost($m) {
+               $postid = _getScalar($m,1);
+               $username = _getScalar($m, 2);
+               $password = _getScalar($m, 3);
+
+               return _deleteItem($postid, $username, $password);
+       }
+
+       // blogger.getTemplate
+       $f_blogger_getTemplate_sig = array(array(
+                       // return type
+                       $xmlrpcString,  // the template
+
+                       // params
+                       $xmlrpcString,  // appkey (ignored)
+                       $xmlrpcString,  // blogid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcString,  // type of template (main/archiveIndex)
+                               ));
+       $f_blogger_getTemplate_doc = "Returns the required part of the default skin for the given blog";
+       function f_blogger_getTemplate($m) {
+               $blogid = _getScalar($m,1);
+               $username = _getScalar($m,2);
+               $password = _getScalar($m,3);
+               $type = _getScalar($m,4);
+
+               switch($type) {
+                       case "main":
+                               $type = "index";
+                               break;
+                       case "archiveIndex":
+                               $type = "archivelist";
+                               break;
+               }
+
+               return _getSkinPart($blogid, $username, $password, $type);
+       }
+
+       // blogger.setTemplate
+       $f_blogger_setTemplate_sig = array(array(
+                       // return type
+                       $xmlrpcBoolean, // OK or not OK
+
+                       // params
+                       $xmlrpcString,  // appkey (ignored)
+                       $xmlrpcString,  // blogid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcString,  // template contents
+                       $xmlrpcString,  // type of template (main/archiveIndex)
+                       ));
+       $f_blogger_setTemplate_doc = "Changes a part of the default skin for the selected blog";
+       function f_blogger_setTemplate($m) {
+               $blogid = _getScalar($m,1);
+               $username = _getScalar($m,2);
+               $password = _getScalar($m,3);
+               $content = _getScalar($m,4);
+               $type = _getScalar($m,5);
+
+               switch($type) {
+                       case "main":
+                               $type = "index";
+                               break;
+                       case "archiveIndex":
+                               $type = "archivelist";
+                               break;
+               }
+
+               return _setSkinPart($blogid, $username, $password, $content, $type);
+       }
+
+       // blogger.getUserInfo
+       $f_blogger_getUserInfo_sig = array(array(
+                       // return type
+                       $xmlrpcStruct,  // Struct
+
+                       // params
+                       $xmlrpcString,  // appkey (ignored)
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       ));
+       $f_blogger_getUserInfo_doc = "Returns info on the user";
+       function f_blogger_getUserInfo($m) {
+               $username = _getScalar($m,1);
+               $password = _getScalar($m,2);
+
+               return _getUserInfo($username, $password);
+       }
+
+
+       /**
+         * Returns a list of recent items
+         */
+       function _getRecentItemsBlogger($blogid, $username, $password, $amount) {
+
+               $blogid = intval($blogid);
+               $amount = intval($amount);
+
+               // 1. login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,"Could not log in");
+
+               // 2. check if allowed
+               if (!BLOG::existsID($blogid))
+                       return _error(2,"No such blog ($blogid)");
+               if (!$mem->teamRights($blogid))
+                       return _error(3,"Not a team member");
+               $amount = intval($amount);
+               if (($amount < 1) or ($amount > 20))
+                       return _error(5,"Amount parameter must be in range 1..20");
+
+               // 3. create and return list of recent items
+               // Struct returned has dateCreated, userid, blogid and content
+
+               $blog = new BLOG($blogid);
+
+               $structarray = array();         // the array in which the structs will be stored
+
+               $query = "SELECT mname, ibody, iauthor, ibody, inumber, ititle as title, itime, cname as category"
+                          .' FROM '.sql_table('item').', '.sql_table('category').', '.sql_table('member')
+                          ." WHERE iblog=$blogid and icat=catid and iauthor=mnumber"
+                          ." ORDER BY itime DESC"
+                          ." LIMIT $amount";
+               $r = sql_query($query);
+
+               while ($row = sql_fetch_assoc($r)) {
+
+                       // remove linebreaks if needed
+                       if ($blog->convertBreaks())
+                               $row['ibody'] = removeBreaks($row['ibody']);
+
+                       $content = blogger_specialTags($row) . $row['ibody'];
+
+                       $newstruct = new xmlrpcval(array(
+                               "userid" => new xmlrpcval($row['iauthor'],"string"),
+                               "dateCreated" => new xmlrpcval(iso8601_encode(strtotime($row['itime'])),"dateTime.iso8601"),
+                               "blogid" => new xmlrpcval($blogid,"string"),
+                               "content" => new xmlrpcval($content,"string"),
+                               "postid" => new xmlrpcval($row['inumber'],"string"),
+                               "authorName" => new xmlrpcval($row['mname'],'string'),
+                               "title" => new xmlrpcval($row['title'],'string'),
+                       ),'struct');
+                       array_push($structarray, $newstruct);
+               }
+
+               return new xmlrpcresp(new xmlrpcval( $structarray , "array"));
+
+       }
+
+       /**
+         * Returns one item (Blogger version)
+         */
+       function _getItemBlogger($itemid, $username, $password) {
+               global $manager;
+
+               // 1. login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,"Could not log in");
+
+               // 2. check if allowed
+               if (!$manager->existsItem($itemid,1,1))
+                       return _error(6,"No such item ($itemid)");
+               $blogid = getBlogIDFromItemID($itemid);
+               if (!$mem->teamRights($blogid))
+                       return _error(3,"Not a team member");
+
+               // 3. return the item
+               // Structure returned has dateCreated, userid, blogid and content
+
+               $item =& $manager->getItem($itemid,1,1); // (also allow drafts and future items)
+               $blog = new BLOG($blogid);
+
+               // get category
+               $item['category'] = $blog->getCategoryName($item['catid']);
+
+               // remove linebreaks if needed
+               if ($blog->convertBreaks())
+                       $item['body'] = removeBreaks($item['body']);
+
+               $content = blogger_specialTags($item) . $item['body'];
+
+               $newstruct = new xmlrpcval(array(
+                       "dateCreated" => new xmlrpcval(iso8601_encode($item['timestamp']),"dateTime.iso8601"),
+                       "userid" => new xmlrpcval($item['authorid'],"string"),
+                       "blogid" => new xmlrpcval($blogid,"string"),
+                       "content" => new xmlrpcval($content,"string")
+               ),'struct');
+
+               return new xmlrpcresp($newstruct);
+
+
+       }
+
+
+       function blogger_extractTitle($body) {
+               return blogger_matchTag('title',$body);
+       }
+
+       function blogger_extractCategory($body) {
+               return blogger_matchTag('category',$body);
+       }
+
+       function blogger_matchTag($tag, $body) {
+               if (preg_match("/<" . $tag .">(.+?)<\/".$tag.">/is",$body,$match))
+                       return $match[1];
+               else
+                       return "";
+       }
+
+       function blogger_removeSpecialTags($body) {
+               $body = preg_replace("/<title>(.+?)<\/title>/","",$body);
+               $body = preg_replace("/<category>(.+?)<\/category>/","",$body);
+               return trim($body);
+       }
+
+       function blogger_specialTags($item) {
+               $result = "<title>". $item['title']."</title>";
+               $result .= "<category>".$item['category']."</category>";
+               return $result;
+       }
+
+
+
+       $functionDefs = array_merge($functionDefs,
+               array(
+                        "blogger.getUsersBlogs" =>
+                        array( "function" => "f_blogger_getUsersBlogs",
+                               "signature" => $f_blogger_getUsersBlogs_sig,
+                               "docstring" => $f_blogger_getUsersBlogs_doc),
+
+                        "blogger.newPost" =>
+                        array( "function" => "f_blogger_newPost",
+                               "signature" => $f_blogger_newPost_sig,
+                               "docstring" => $f_blogger_newPost_doc),
+
+                        "blogger.editPost" =>
+                        array( "function" => "f_blogger_editPost",
+                               "signature" => $f_blogger_editPost_sig,
+                               "docstring" => $f_blogger_editPost_doc),
+
+                        "blogger.deletePost" =>
+                        array( "function" => "f_blogger_deletePost",
+                               "signature" => $f_blogger_deletePost_sig,
+                               "docstring" => $f_blogger_deletePost_doc),
+
+                        "blogger.getPost" =>
+                        array( "function" => "f_blogger_getPost",
+                               "signature" => $f_blogger_getPost_sig,
+                               "docstring" => $f_blogger_getPost_doc),
+
+                        "blogger.getRecentPosts" =>
+                        array( "function" => "f_blogger_getRecentPosts",
+                               "signature" => $f_blogger_getRecentPosts_sig,
+                               "docstring" => $f_blogger_getRecentPosts_doc),
+
+                        "blogger.getUserInfo" =>
+                        array( "function" => "f_blogger_getUserInfo",
+                               "signature" => $f_blogger_getUserInfo_sig,
+                               "docstring" => $f_blogger_getUserInfo_doc),
+
+                        "blogger.getTemplate" =>
+                        array( "function" => "f_blogger_getTemplate",
+                               "signature" => $f_blogger_getTemplate_sig,
+                               "docstring" => $f_blogger_getTemplate_doc),
+
+                        "blogger.setTemplate" =>
+                        array( "function" => "f_blogger_setTemplate",
+                               "signature" => $f_blogger_setTemplate_sig,
+                               "docstring" => $f_blogger_setTemplate_doc)
+
+               )
+       );
+
+
+?>
diff --git a/utf8/nucleus/xmlrpc/api_metaweblog.inc.php b/utf8/nucleus/xmlrpc/api_metaweblog.inc.php
new file mode 100755 (executable)
index 0000000..c8afcf2
--- /dev/null
@@ -0,0 +1,529 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ *     This file contains definitions for the methods of the metaWeblog API
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: api_metaweblog.inc.php,v 1.5 2006/07/17 20:03:45 kimitake Exp $
+ */
+
+
+       // metaWeblog.newPost
+       $f_metaWeblog_newPost_sig = array(array(
+                       // return type
+                       $xmlrpcString,  // itemid of the new item
+
+                       // params:
+                       $xmlrpcString,  // blogid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcStruct,  // content
+                       $xmlrpcBoolean, // publish boolean (set to false to create draft)
+
+               ));
+       $f_metaWeblog_newPost_doc = "Adds a new item to the given blog. Adds it as a draft when publish is false";
+       function f_metaWeblog_newPost($m) {
+               global $manager;
+               
+               $blogid =                       _getScalar($m,0);
+               $username =             _getScalar($m,1);
+               $password =             _getScalar($m,2);
+               $struct =                       $m->getParam(3);
+               
+               $content =              _getStructVal($struct, 'description');
+               $more =                 _getStructVal($struct, 'mt_text_more');
+               $title =                _getStructVal($struct, 'title');
+
+               // category is optional (thus: be careful)!
+               $catlist = $struct->structmem('categories');
+               if ($catlist && ($catlist->kindOf() == "array") && ($catlist->arraysize() > 0))
+                       $category = _getArrayVal($catlist, 0);
+               
+               
+//             $comments = (int) _getStructVal($struct, 'mt_allow_comments') ? 0 : 1;
+               $comments = $struct->structmem('mt_allow_comments');
+               if ($comments) {
+                       $closed = (intval(_getStructVal($struct, 'mt_allow_comments')) == 1) ? 0 : 1;
+               } else {
+                       $closed = 0;
+               }
+                                       $publish = _getScalar($m,4);
+
+
+               // Add item
+//             $res = _addItem($blogid, $username, $password, $title, $content, $more, $publish, $comments, $category);
+               $res = _addItem($blogid, $username, $password, $title, $content, $more, $publish, $closed, $category);
+                                                       
+               // Handle trackbacks
+               $trackbacks = array();
+               $tblist = $struct->structmem('mt_tb_ping_urls');
+               if ($tblist && ($tblist->kindOf() == "array") && ($tblist->arraysize() > 0)) {
+                       
+                       for ($i = 0; $i < $tblist->arraysize(); $i++) {
+                               $trackbacks[] = _getArrayVal($tblist, $i);
+                       }
+                       
+                       $manager->notify('SendTrackback', array ('tb_id' => $itemid, 'urls' => & $trackbacks));
+               }
+
+               return $res;
+       }
+
+
+       // metaWeblog.getCategories
+       $f_metaWeblog_getCategories_sig = array(array(
+               // return
+               $xmlrpcStruct,  // categories for blog
+
+               // params
+               $xmlrpcString,  // blogid
+               $xmlrpcString,  // username
+               $xmlrpcString,  // password
+
+       ));
+       $f_metaWeblog_getCategories_doc = "Returns the categories for a given blog";
+       function f_metaWeblog_getCategories($m) {
+               $blogid =       _getScalar($m,0);
+               $username =     _getScalar($m,1);
+               $password =     _getScalar($m,2);
+
+               return _categoryList($blogid, $username, $password);
+       }
+
+
+       // metaWeblog.getPost
+       $f_metaWeblog_getPost_sig = array(array(
+               // return
+               $xmlrpcStruct,  // the juice
+
+               // params
+               $xmlrpcString,  // itemid
+               $xmlrpcString,  // username
+               $xmlrpcString,  // password
+
+       ));
+       $f_metaWeblog_getPost_doc = "Retrieves a post";
+       function f_metaWeblog_getPost($m) {
+               $itemid =       _getScalar($m,0);
+               $username =     _getScalar($m,1);
+               $password =     _getScalar($m,2);
+
+               return _mw_getPost($itemid, $username, $password);
+       }
+
+
+       // metaWeblog.editPost
+       $f_metaWeblog_editPost_sig = array(array(
+                       // return type
+                       $xmlrpcBoolean, // true
+
+                       // params:
+                       $xmlrpcString,  // itemid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcStruct,  // content
+                       $xmlrpcBoolean, // publish boolean (set to false to create draft)
+
+               ));
+       $f_metaWeblog_editPost_doc = "Edits an item";
+       function f_metaWeblog_editPost($m) {
+               global $manager;
+
+               $itemid =                       _getScalar($m,0);
+               $username =             _getScalar($m,1);
+               $password =             _getScalar($m,2);
+
+               $category = '';
+               $struct =                       $m->getParam(3);
+                       $content =              _getStructVal($struct, 'description');
+                       $title =                _getStructVal($struct, 'title');
+
+                       // category is optional (thus: be careful)!
+                       $catlist = $struct->structmem('categories');
+                       if ($catlist && ($catlist->kindOf() == "array") && ($catlist->arraysize() > 0)) {
+                               $category = _getArrayVal($catlist, 0);
+                       }
+
+               $publish = _getScalar($m,4);
+
+               
+               // get old title and extended part
+               if (!$manager->existsItem($itemid,1,1))
+                       return _error(6,"No such item ($itemid)");
+               $blogid = getBlogIDFromItemID($itemid);
+
+               $old =& $manager->getItem($itemid,1,1);
+
+               if ($category == '')
+               {
+                       // leave category unchanged when not present
+                       $catid = $old['catid'];
+               }
+               else
+               {
+                       $blog = new BLOG($blogid);
+                       $catid = $blog->getCategoryIdFromName($category);
+               }
+
+               if ($old['draft'] && $publish) {
+                       $wasdraft = 1;
+                       $publish = 1;
+               } else {
+                       $wasdraft = 0;
+               }
+
+               $more = $struct->structmem('mt_text_more');
+               if ($more) {
+                       $more = _getStructVal($struct, 'mt_text_more');
+               } else {
+                       $more = $old['more'];
+               }
+               
+               $comments = $struct->structmem('mt_allow_comments');
+               if ($comments) {
+//                     $comments = (int) _getStructVal($struct, 'mt_allow_comments') ? 0 : 1;
+                       $closed = (intval(_getStructVal($struct, 'mt_allow_comments')) == 1) ? 0 : 1;
+               } else {
+//                     $comments = $old['closed'];
+                       $closed = $old['closed'];
+               }
+
+//             $res = _edititem($itemid, $username, $password, $catid, $title, $content, $more, $wasdraft, $publish, $comments);
+               $res = _edititem($itemid, $username, $password, $catid, $title, $content, $more, $wasdraft, $publish, $closed);
+               // Handle trackbacks
+               $trackbacks = array();
+               $tblist = $struct->structmem('mt_tb_ping_urls');
+               if ($tblist && ($tblist->kindOf() == "array") && ($tblist->arraysize() > 0)) {
+                       
+                       for ($i = 0; $i < $tblist->arraysize(); $i++) {
+                               $trackbacks[] = _getArrayVal($tblist, $i);
+                       }
+                       
+                       $manager->notify('SendTrackback', array ('tb_id' => $itemid, 'urls' => & $trackbacks));
+               }
+
+               return $res;
+       }
+
+       // metaWeblog.newMediaObject
+       $f_metaWeblog_newMediaObject_sig = array(array(
+               //  return type
+               $xmlrpcStruct,          // "url" element
+
+               // params
+               $xmlrpcString,          // blogid
+               $xmlrpcString,          // username
+               $xmlrpcString,          // password
+               $xmlrpcStruct           // 'name', 'type' and 'bits'
+       ));
+       $f_metaWeblog_newMediaObject_doc = 'Uploads a file to to the media library of the user';
+       function f_metaWeblog_newMediaObject($m) {
+               $blogid         = _getScalar($m, 0);
+               $username       = _getScalar($m, 1);
+               $password       = _getScalar($m, 2);
+
+               $struct         = $m->getParam(3);
+                       $name   = _getStructVal($struct, 'name');
+                       $type   = _getStructVal($struct, 'type');
+                       $bits   = _getStructVal($struct, 'bits');
+
+               return _newMediaObject($blogid, $username, $password, array('name' => $name, 'type' => $type, 'bits' => $bits));
+       }
+
+       // metaWeblog.getRecentPosts
+       $f_metaWeblog_getRecentPosts_sig = array(array(
+               // return type
+               $xmlrpcStruct,          // array of structs
+
+               // params
+               $xmlrpcString,          // blogid
+               $xmlrpcString,          // username
+               $xmlrpcString,          // password
+               $xmlrpcInt                      // number of posts
+       ));
+       $f_metaWeblog_getRecentPosts_doc = 'Returns recent weblog items.';
+       function f_metaWeblog_getRecentPosts($m) {
+               $blogid         = _getScalar($m, 0);
+               $username       = _getScalar($m, 1);
+               $password       = _getScalar($m, 2);
+               $amount         = intval(_getScalar($m, 3));
+
+               return _getRecentItemsMetaWeblog($blogid, $username, $password, $amount);
+       }
+
+       function _getRecentItemsMetaWeblog($blogid, $username, $password, $amount) {
+
+               $blogid = intval($blogid);
+               $amount = intval($amount);
+
+               // 1. login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,"Could not log in");
+
+               // 2. check if allowed
+               if (!BLOG::existsID($blogid))
+                       return _error(2,"No such blog ($blogid)");
+               if (!$mem->teamRights($blogid))
+                       return _error(3,"Not a team member");
+               $amount = intval($amount);
+               if (($amount < 1) or ($amount > 20))
+                       return _error(5,"Amount parameter must be in range 1..20");
+
+               // 3. create and return list of recent items
+               // Struct returned has dateCreated, userid, blogid and content
+
+               $blog = new BLOG($blogid);
+
+               $structarray = array();         // the array in which the structs will be stored
+
+               $query = "SELECT mname, ibody, imore, iauthor, ibody, inumber, ititle as title, itime, cname as category, iclosed"
+                          .' FROM '.sql_table('item').', '.sql_table('category').', '.sql_table('member')
+                          ." WHERE iblog=$blogid and icat=catid and iauthor=mnumber"
+                          ." ORDER BY itime DESC"
+                          ." LIMIT $amount";
+               $r = sql_query($query);
+
+               while ($row = sql_fetch_assoc($r)) {
+
+                       // remove linebreaks if needed
+                       if ($blog->convertBreaks()) {
+                               $row['ibody'] = removeBreaks($row['ibody']);
+                               $row['imore'] = removeBreaks($row['imore']);
+                       }
+
+                       $newstruct = new xmlrpcval(array(
+                               "dateCreated" => new xmlrpcval(iso8601_encode(strtotime($row['itime'])),"dateTime.iso8601"),
+                               "userid" => new xmlrpcval($row['iauthor'],"string"),
+                               "blogid" => new xmlrpcval($blogid,"string"),
+                               "postid" => new xmlrpcval($row['inumber'],"string"),
+                               "description" => new xmlrpcval($row['ibody'],"string"),
+                               "title" => new xmlrpcval($row['title'],"string"),
+                               "categories" => new xmlrpcval(
+                                               array(
+                                                       new xmlrpcval($row['category'], "string")
+                                               )
+                                               ,"array"),
+                               
+                                               
+                               "mt_text_more"          => new xmlrpcval($row['imore'], "string"),
+                               "mt_allow_comments" => new xmlrpcval($row['iclosed'] ? 0 : 1, "int"),
+                               "mt_allow_pings"        => new xmlrpcval(1, "int")
+                       ),'struct');
+
+               //TODO: String link?
+               //TODO: String permaLink?
+
+
+                       array_push($structarray, $newstruct);
+               }
+
+               return new xmlrpcresp(new xmlrpcval( $structarray , "array"));
+       }
+
+       function _newMediaObject($blogid, $username, $password, $info) {
+               global $CONF, $DIR_MEDIA, $DIR_LIBS;
+
+               // - login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,'Could not log in');
+
+               // - check if team member
+               if (!BLOG::existsID($blogid))
+                       return _error(2,"No such blog ($blogid)");
+               if (!$mem->teamRights($blogid))
+                       return _error(3,'Not a team member');
+
+               $b = new BLOG($blogid);
+
+               // - decode data
+               $data = $info['bits']; // decoding was done transparantly by xmlrpclib
+
+               // - check filesize
+               if (strlen($data) > $CONF['MaxUploadSize'])
+                       return _error(9, 'filesize is too big');
+
+
+               // - check if filetype is allowed (check filename)
+               $filename = $info['name'];
+               $ok = 0;
+               $allowedtypes = explode (',', $CONF['AllowedTypes']);
+               foreach ( $allowedtypes as $type )
+                       if (eregi("\." .$type. "$",$filename)) $ok = 1;
+               if (!$ok)
+                       _error(8, 'Filetype is not allowed');
+
+               // - add file to media library
+               include_once($DIR_LIBS . 'MEDIA.php');  // media classes
+
+               // always use private media library of member
+               $collection = $mem->getID();
+
+               // prefix filename with current date (YYYY-MM-DD-)
+               // this to avoid nameclashes
+               if ($CONF['MediaPrefix'])
+                       $filename = strftime("%Y%m%d-", time()) . $filename;
+
+               $res = MEDIA::addMediaObjectRaw($collection, $filename, $data);
+               if ($res)
+                       return _error(10, $res);
+
+               // - return URL
+               $urlstruct = new xmlrpcval(array(
+                       "url" => new xmlrpcval($CONF['MediaURL'] . $collection. '/' . $filename,'string')
+               ),'struct');
+
+               return new xmlrpcresp($urlstruct);
+       }
+
+       function _categoryList($blogid, $username, $password) {
+               // 1. login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,"Could not log in");
+
+               // check if on team and blog exists
+               if (!BLOG::existsID($blogid))
+                       return _error(2,"No such blog ($blogid)");
+               if (!$mem->teamRights($blogid))
+                       return _error(3,"Not a team member");
+
+               $b = new BLOG($blogid);
+
+               $categorystruct = array();
+
+               $query =  "SELECT cname, cdesc, catid"
+                               . ' FROM '.sql_table('category')
+                               . " WHERE cblog=" . intval($blogid)
+                               . " ORDER BY cname";
+               $r = sql_query($query);
+
+               while ($obj = sql_fetch_object($r)) {
+
+                       $categorystruct[$obj->cname] = new xmlrpcval(
+                               array(
+                                       "description" => new xmlrpcval($obj->cdesc,"string"),
+                                       "htmlUrl" => new xmlrpcval($b->getURL() . "?catid=" . $obj->catid ,"string"),
+                                       "rssUrl" => new xmlrpcval("","string")
+                               )
+                       ,'struct');
+               }
+
+
+               return new xmlrpcresp(new xmlrpcval( $categorystruct , "struct"));
+
+       }
+
+
+       function _mw_getPost($itemid, $username, $password) {
+               global $manager;
+
+               // 1. login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,"Could not log in");
+
+               // 2. check if allowed
+               if (!$manager->existsItem($itemid,1,1))
+                       return _error(6,"No such item ($itemid)");
+               $blogid = getBlogIDFromItemID($itemid);
+               if (!$mem->teamRights($blogid))
+                       return _error(3,"Not a team member");
+
+               // 3. return the item
+               $item =& $manager->getItem($itemid,1,1); // (also allow drafts and future items)
+
+               $b = new BLOG($blogid);
+               if ($b->convertBreaks()) {
+                       $item['body'] = removeBreaks($item['body']);
+                       $item['more'] = removeBreaks($item['more']);
+               }
+
+               $categoryname = $b->getCategoryName($item['catid']);
+
+               $newstruct = new xmlrpcval(array(
+                       "dateCreated" => new xmlrpcval(iso8601_encode($item['timestamp']),"dateTime.iso8601"),
+                       "userid" => new xmlrpcval($item['authorid'],"string"),
+                       "blogid" => new xmlrpcval($blogid,"string"),
+                       "postid" => new xmlrpcval($itemid, "string"),
+                       "description" => new xmlrpcval($item['body'],"string"),
+                       "title" => new xmlrpcval($item['title'],"string"),
+                       "categories" => new xmlrpcval(
+                                       array(
+                                               new xmlrpcval($categoryname, "string")
+                                       )
+                                       ,"array"),
+                               
+                       "mt_text_more"          => new xmlrpcval($item['more'], "string"),
+                       "mt_allow_comments" => new xmlrpcval($item['closed'] ? 0 : 1, "int"),
+                       "mt_allow_pings"        => new xmlrpcval(1, "int")
+               ),'struct');
+
+               //TODO: add "String link" to struct?
+               //TODO: add "String permaLink" to struct?
+
+               return new xmlrpcresp($newstruct);
+
+       }
+
+       $functionDefs = array_merge($functionDefs,
+               array(
+                        "metaWeblog.newPost" =>
+                        array(
+                               "function" => "f_metaWeblog_newPost",
+                               "signature" => $f_metaWeblog_newPost_sig,
+                               "docstring" => $f_metaWeblog_newPost_doc
+                        ),
+
+                        "metaWeblog.getCategories" =>
+                        array(
+                               "function" => "f_metaWeblog_getCategories",
+                               "signature" => $f_metaWeblog_getCategories_sig,
+                               "docstring" => $f_metaWeblog_getCategories_doc
+                        ),
+
+                        "metaWeblog.getPost" =>
+                        array(
+                               "function" => "f_metaWeblog_getPost",
+                               "signature" => $f_metaWeblog_getPost_sig,
+                               "docstring" => $f_metaWeblog_getPost_doc
+                        ),
+
+                        "metaWeblog.editPost" =>
+                        array(
+                               "function" => "f_metaWeblog_editPost",
+                               "signature" => $f_metaWeblog_editPost_sig,
+                               "docstring" => $f_metaWeblog_editPost_doc
+                        ),
+
+                        'metaWeblog.newMediaObject' =>
+                        array(
+                               'function' => 'f_metaWeblog_newMediaObject',
+                               'signature' => $f_metaWeblog_newMediaObject_sig,
+                               'docstring' => $f_metaWeblog_newMediaObject_doc
+                        ),
+
+                        'metaWeblog.getRecentPosts' =>
+                        array(
+                               'function' => 'f_metaWeblog_getRecentPosts',
+                               'signature' => $f_metaWeblog_getRecentPosts_sig,
+                               'docstring' => $f_metaWeblog_getRecentPosts_doc
+                        )
+
+               )
+       );
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/xmlrpc/api_mt.inc.php b/utf8/nucleus/xmlrpc/api_mt.inc.php
new file mode 100755 (executable)
index 0000000..6ecf774
--- /dev/null
@@ -0,0 +1,424 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * This file contains definitions for the methods in the Movable Type API
+ *
+ * Wouter Demuynck 2003-08-31
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ *  * $NucleusJP: api_mt.inc.php,v 1.5 2006/07/17 20:03:45 kimitake Exp $
+ */
+
+       // mt.supportedMethods
+       $f_mt_supportedMethods_sig = array(array(
+                       // return type
+                       $xmlrpcArray // array of strings
+               ));
+       $f_mt_supportedMethods_doc = 'returns an array of supported methods';
+       function f_mt_supportedMethods($m) {
+               $res = new xmlrpcresp(new xmlrpcval(
+                       array(
+                               new xmlrpcval('mt.supportedMethods', 'string'),
+                               new xmlrpcval('mt.supportedTextFilters', 'string'),
+                               new xmlrpcval('mt.publishPost', 'string'),
+                               new xmlrpcval('mt.getCategoryList', 'string'),
+                               new xmlrpcval('mt.getPostCategories', 'string'),
+                               new xmlrpcval('mt.setPostCategories', 'string'),
+                               new xmlrpcval('mt.getRecentPostTitles', 'string'),
+                               new xmlrpcval('mt.getTrackbackPings','string'),
+                       ), 'array')
+               );
+               return $res;
+       }
+
+       // mt.supportedTextFilters
+       $f_mt_supportedTextFilters_sig = array(array(
+                       // return type
+                       $xmlrpcArray    // array of structs
+               ));
+       $f_mt_supportedTextFilters_doc = 'returns the supported text filters';
+       function f_mt_supportedTextFilters($m) {
+               $res = new xmlrpcresp(new xmlrpcval(
+                       array(
+                               // no text filters in nucleus
+                       ), 'array')
+               );
+               return $res;
+       }
+
+       // mt.getCategoryList
+       $f_mt_getCategoryList_sig = array(array(
+                       // return type
+                       $xmlrpcArray,           // array of structs
+
+                       // params
+                       $xmlrpcString,          // blogid
+                       $xmlrpcString,          // username
+                       $xmlrpcString           // password
+
+               ));
+       $f_mt_getCategoryList_doc = 'Returns a list of all categories defined in the weblog';
+       function f_mt_getCategoryList($m) {
+               $blogid =       _getScalar($m,0);
+               $username =     _getScalar($m,1);
+               $password =     _getScalar($m,2);
+
+               return _mt_categoryList($blogid, $username, $password);
+       }
+
+       // mt.publishPost
+       $f_mt_publishPost_sig = array(array(
+                       // return type
+                       $xmlrpcBoolean,         // true
+
+                       // params
+                       $xmlrpcString,          // itemid
+                       $xmlrpcString,          // username
+                       $xmlrpcString           // password
+               ));
+       $f_mt_publishPost_doc = 'Transfers an item from the "draft" state to the "published" state. For items that were published earlier, does nothing.';
+       function f_mt_publishPost($m) {
+               $itemid         = intval(_getScalar($m, 0));
+               $username       = _getScalar($m, 1);
+               $password       = _getScalar($m, 2);
+
+               return _mt_publishPost($itemid, $username, $password);
+       }
+
+       // mt.getPostCategories
+       $f_mt_getPostCategories_sig = array(array(
+               // return
+               $xmlrpcArray,           // array of structs
+               // parameters
+               $xmlrpcString,          // itemid
+               $xmlrpcString,          // username
+               $xmlrpcString           // password
+       ));
+       $f_mt_getPostCategories_doc = 'Returns a list of all categories to which the post is assigned.';
+       function f_mt_getPostCategories($m) {
+               $itemid         = intval(_getScalar($m, 0));
+               $username       = _getScalar($m, 1);
+               $password       = _getScalar($m, 2);
+
+               return _mt_getPostCategories($itemid, $username, $password);
+       }
+
+       // mt.setPostCategories
+       $f_mt_setPostCategories_sig = array(array(
+               // return
+               $xmlrpcBoolean,         // true
+               // parameters
+               $xmlrpcString,          // itemid
+               $xmlrpcString,          // username
+               $xmlrpcString,          // password
+               $xmlrpcArray            // categories
+       ));
+       $f_mt_setPostCategories_doc = 'Sets the categories for a post. Only the primary category will be stored';
+       function f_mt_setPostCategories($m) {
+               $itemid         = intval(_getScalar($m, 0));
+               $username       = _getScalar($m, 1);
+               $password       = _getScalar($m, 2);
+
+               $categories = $m->getParam(3);
+               $iSize = $categories->arraysize();
+
+               $category = '';
+               for ($i=0;$i<$iSize;$i++) {
+                       $struct = $categories->arraymem($i);
+                       $bPrimary = $struct->structmem('isPrimary');
+                       if ($bPrimary)
+                               $bPrimary = $bPrimary->scalarval();
+                       else if (!$category)
+                               $bPrimary = 1;  // "Using isPrimary to set the primary category is optional--
+                                                               // in the absence of this flag, the first struct in the array
+                                                               // will be assigned the primary category for the post." (MT doc)
+                       if ($bPrimary) {
+                               $category = $struct->structmem('categoryId');
+                               $category = $category->scalarval();
+                       }
+
+               }
+
+               return _mt_setPostCategories($itemid, $username, $password, $category);
+       }
+
+       // mt.getRecentPostTitles
+       $f_mt_getRecentPostTitles_sig = array(array(
+               // return
+               $xmlrpcArray,           // array of structs
+               // params
+               $xmlrpcString,          // blogid
+               $xmlrpcString,          // userid
+               $xmlrpcString,          // password,
+               $xmlrpcInt                      // number of posts
+       ));
+       $f_mt_getRecentPostTitles_doc = 'Returns a bandwidth-friendly list of the most recent posts in the system.';
+       function f_mt_getRecentPostTitles($m) {
+               $blogid         = intval(_getScalar($m, 0));
+               $username       = _getScalar($m, 1);
+               $password       = _getScalar($m, 2);
+               $iAmount        = intval(_getScalar($m, 3));
+
+               return _mt_getRecentPostTitles($blogid, $username, $password, $iAmount);
+       }
+
+       // mt.getTrackbackPings
+       $f_mt_getTrackbackPings_sig = array(array(
+               // return
+               $xmlrpcArray,           // array of structs
+               // params
+               $xmlrpcString           // postid
+       ));
+       $f_mt_getTrackbackPings_doc = '(this is currently just a placeholder. It returns an empty array.)';
+       function f_mt_getTrackbackPings($m) {
+               global $manager;
+               
+               $itemid = intval(_getScalar($m, 0));
+
+               $trackbacks = array ();
+               $tbstruct   = array ();
+                       
+               $manager->notify('RetrieveTrackback', array ('tb_id' => $itemid, 'trackbacks' => & $trackbacks));
+                               
+               while (list(,$v) = each ($trackbacks)) {
+                       $tbstruct[] = new xmlrpcval(
+                               array(
+                                       "pingTitle" => new xmlrpcval($v['title'], "string"),
+                                       "pingURL"   => new xmlrpcval($v['url'], "string"),
+                                       "pingIP"    => new xmlrpcval($v['ip'], "string")
+                               )
+                       ,'struct');                     
+               }               
+                               
+               return new xmlrpcresp(new xmlrpcval( $tbstruct , "array"));
+       }
+
+       $functionDefs = array_merge($functionDefs,
+               array(
+                        "mt.supportedMethods" =>
+                        array( "function" => "f_mt_supportedMethods",
+                               "signature" => $f_mt_supportedMethods_sig,
+                               "docstring" => $f_mt_supportedMethods_doc),
+
+                        "mt.supportedTextFilters" =>
+                        array( "function" => "f_mt_supportedTextFilters",
+                               "signature" => $f_mt_supportedTextFilters_sig,
+                               "docstring" => $f_mt_supportedTextFilters_doc),
+
+                        "mt.getCategoryList" =>
+                        array( "function" => "f_mt_getCategoryList",
+                               "signature" => $f_mt_getCategoryList_sig,
+                               "docstring" => $f_mt_getCategoryList_doc),
+
+                        "mt.publishPost" =>
+                        array( "function" => "f_mt_publishPost",
+                               "signature" => $f_mt_publishPost_sig,
+                               "docstring" => $f_mt_publishPost_doc),
+
+                        "mt.getPostCategories" =>
+                        array( "function" => "f_mt_getPostCategories",
+                               "signature" => $f_mt_getPostCategories_sig,
+                               "docstring" => $f_mt_getPostCategories_doc),
+
+                        "mt.setPostCategories" =>
+                        array( "function" => "f_mt_setPostCategories",
+                               "signature" => $f_mt_setPostCategories_sig,
+                               "docstring" => $f_mt_setPostCategories_doc),
+
+                        "mt.getRecentPostTitles" =>
+                        array( "function" => "f_mt_getRecentPostTitles",
+                               "signature" => $f_mt_getRecentPostTitles_sig,
+                               "docstring" => $f_mt_getRecentPostTitles_doc),
+
+                        "mt.getTrackbackPings" =>
+                        array( "function" => "f_mt_getTrackbackPings",
+                               "signature" => $f_mt_getTrackbackPings_sig,
+                               "docstring" => $f_mt_getTrackbackPings_doc)
+
+               )
+       );
+
+       function _mt_setPostCategories($itemid, $username, $password, $category) {
+               global $manager;
+
+               // login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,"Could not log in");
+
+               // check if item exists
+               if (!$manager->existsItem($itemid,1,1))
+                       return _error(6,"No such item ($itemid)");
+
+               $blogid = getBlogIDFromItemID($itemid);
+               $blog = new BLOG($blogid);
+
+               if (!$mem->canAlterItem($itemid))
+                       return _error(7,"Not allowed to alter item");
+
+               $old =& $manager->getItem($itemid,1,1);
+
+               $catid = $blog->getCategoryIdFromName($category);
+
+               $publish = 0;
+               if ($old['draft'] && $publish) {
+                       $wasdraft = 1;
+                       $publish = 1;
+               } else {
+                       $wasdraft = 0;
+               }
+
+               return _edititem($itemid, $username, $password, $catid, $old['title'], $old['body'], $old['more'], $wasdraft, $publish, $old['closed']);
+       }
+
+
+       function _mt_getPostCategories($itemid, $username, $password) {
+               global $manager;
+
+               // login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,"Could not log in");
+
+               // check if item exists
+               if (!$manager->existsItem($itemid,1,1))
+                       return _error(6,"No such item ($itemid)");
+
+               $blogid = getBlogIDFromItemID($itemid);
+               $blog = new BLOG($blogid);
+
+               if (!$mem->canAlterItem($itemid))
+                       return _error(7, 'You are not allowed to request this information');
+
+               $info =& $manager->getItem($itemid,1,1);
+               $catName = $blog->getCategoryName($info['catid']);
+
+               $struct = new xmlrpcval(
+                       array(
+                               'categoryId' => new xmlrpcval($catName, 'string'),
+                               'categoryName' => new xmlrpcval($catName, 'string'),
+                               'isPrimary'     => new xmlrpcval(1, 'boolean')
+                       ), 'struct'
+               );
+
+               return new xmlrpcresp(new xmlrpcval(array($struct), 'array'));
+
+       }
+
+       function _mt_publishPost($itemid, $username, $password) {
+               global $manager;
+
+               if (!$manager->existsItem($itemid,1,1))
+                       return _error(6,"No such item ($itemid)");
+
+               // get item data
+               $blogid = getBlogIDFromItemID($itemid);
+               $blog = new BLOG($blogid);
+               $old =& $manager->getItem($itemid,1,1);
+
+               return _edititem($itemid, $username, $password, $old['catid'], $old['title'], $old['body'], $old['more'], $old['draft'], 1, $old['closed']);
+       }
+
+
+       function _mt_categoryList($blogid, $username, $password) {
+               // 1. login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,"Could not log in");
+
+               // check if on team and blog exists
+               if (!BLOG::existsID($blogid))
+                       return _error(2,"No such blog ($blogid)");
+               if (!$mem->teamRights($blogid))
+                       return _error(3,"Not a team member");
+
+               $b = new BLOG($blogid);
+
+               $categorystruct = array();
+
+               $query =  "SELECT cname, cdesc, catid"
+                               . ' FROM '.sql_table('category')
+                               . " WHERE cblog=" . intval($blogid)
+                               . " ORDER BY cname";
+               $r = sql_query($query);
+
+               while ($obj = sql_fetch_object($r)) {
+
+                       $categorystruct[] = new xmlrpcval(
+                               array(
+                                       "categoryName" => new xmlrpcval($obj->cname,"string"),
+                                       "categoryId" => new xmlrpcval($obj->cname,"string")
+                               )
+                       ,'struct');
+
+               }
+
+
+               return new xmlrpcresp(new xmlrpcval( $categorystruct , "array"));
+
+       }
+
+       function _mt_getRecentPostTitles($blogid, $username, $password, $iAmount)
+       {
+               $blogid = intval($blogid);
+               $iAmount = intval($iAmount);
+
+               // 1. login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,"Could not log in");
+
+               // 2. check if allowed
+               if (!BLOG::existsID($blogid))
+                       return _error(2,"No such blog ($blogid)");
+               if (!$mem->teamRights($blogid))
+                       return _error(3,"Not a team member");
+               $iAmount = intval($iAmount);
+               if ($iAmount < 1)
+                       return _error(5,"Amount parameter must be positive");
+
+               // 3. create and return list of recent items
+               // Struct returned has dateCreated, userid, postid and title
+
+               $blog = new BLOG($blogid);
+
+               $structarray = array();         // the array in which the structs will be stored
+
+               $query = "SELECT inumber, ititle as title, itime, iauthor"
+                          .' FROM '.sql_table('item')
+                          ." WHERE iblog=$blogid"
+                          ." ORDER BY itime DESC"
+                          ." LIMIT $iAmount";
+               $r = sql_query($query);
+
+               while ($row = sql_fetch_assoc($r)) {
+
+                       $newstruct = new xmlrpcval(array(
+                               "dateCreated" => new xmlrpcval(iso8601_encode(strtotime($row['itime'])),"dateTime.iso8601"),
+                               "postid" => new xmlrpcval($row['inumber'],"string"),
+                               "title" => new xmlrpcval($row['title'],"string"),
+                               "userid" => new xmlrpcval($row['iauthor'],"string")
+                       ),'struct');
+
+                       array_push($structarray, $newstruct);
+               }
+
+               return new xmlrpcresp(new xmlrpcval( $structarray , "array"));
+
+       }
+
+
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/xmlrpc/api_nucleus.inc.php b/utf8/nucleus/xmlrpc/api_nucleus.inc.php
new file mode 100755 (executable)
index 0000000..4827d0c
--- /dev/null
@@ -0,0 +1,341 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * This file contains definitions for the functions in the Nucleus API
+ *
+ * NOTE: These functions are deprecated and will most likely be removed!
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: api_nucleus.inc.php,v 1.5 2006/07/17 20:03:45 kimitake Exp $
+ */
+
+       // nucleus.addItem
+       $f_nucleus_addItem_sig = array(array(
+                       // return type
+                       $xmlrpcString,  // itemid of the new item
+
+                       // params:
+                       $xmlrpcString,  // blogid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcString,  // title
+                       $xmlrpcString,  // body
+                       $xmlrpcString,  // extended part
+                       $xmlrpcBoolean, // publish boolean (set to false to create draft)
+                       $xmlrpcBoolean, // closed boolean (set to true to disable comments)
+
+               ));
+       $f_nucleus_addItem_doc = "Adds a new item to the given blog. Adds it as a draft when publish is false";
+       function f_nucleus_addItem($m) {
+               $blogid = _getScalar($m,0);
+               $username = _getScalar($m,1);
+               $password = _getScalar($m,2);
+               $title = _getScalar($m,3);
+               $body = _getScalar($m,4);
+               $more = _getScalar($m,5);
+               $publish = _getScalar($m,6);
+               $closed = _getScalar($m,7);
+
+               return _addItem($blogid, $username, $password, $title, $body, $more, $publish, $closed);
+       }
+
+       // nucleus.addDatedItem (the time of the item can be given here, for offline blogging)
+       $f_nucleus_addDatedItem_sig = array(array(
+                       // return type
+                       $xmlrpcString,  // itemid of the new item
+
+                       // params:
+                       $xmlrpcString,  // blogid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcString,  // title
+                       $xmlrpcString,  // body
+                       $xmlrpcString,  // extended part
+                       $xmlrpcBoolean, // publish boolean (set to false to create draft)
+                       $xmlrpcBoolean, // closed boolean (set to true to disable comments)
+                       $xmlrpcInt      // item time (unix timestamp)
+
+               ));
+       $f_nucleus_addDatedItem_doc = "Adds a new item to the given blog. Adds it as a draft when publish is false. The timestamp of the item needs to be given as a Unix timestamp";
+       function f_nucleus_addDatedItem($m) {
+               $blogid = _getScalar($m,0);
+               $username = _getScalar($m,1);
+               $password = _getScalar($m,2);
+               $title = _getScalar($m,3);
+               $body = _getScalar($m,4);
+               $more = _getScalar($m,5);
+               $publish = _getScalar($m,6);
+               $closed = _getScalar($m,7);
+               $timestamp = _getScalar($m,8);
+
+               // use '1' as $future param to make sure the date does not get erased
+               return _addDatedItem($blogid, $username, $password, $title, $body, $more, $publish, $closed, $timestamp, 1);
+       }
+
+       // nucleus.editItem
+       $f_nucleus_editItem_sig = array(array(
+                       // return type
+                       $xmlrpcBoolean, // true or false
+
+                       // params:
+                       $xmlrpcString,  // itemid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcString,  // title
+                       $xmlrpcString,  // body
+                       $xmlrpcString,  // extended part
+                       $xmlrpcBoolean, // publish boolean (set to false if you want a draft to stay draft)
+                       $xmlrpcBoolean, // closed boolean (set to true to disable comments)
+               ));
+       $f_nucleus_editItem_doc = "Edits an item of a blog";
+       function f_nucleus_editItem($m) {
+               global $manager;
+
+               $itemid = intval(_getScalar($m,0));
+               $username = _getScalar($m,1);
+               $password = _getScalar($m,2);
+               $title = _getScalar($m,3);
+               $content = _getScalar($m,4);
+               $more = _getScalar($m,5);
+               $publish = _getScalar($m,6);
+               $closed = _getScalar($m,7);
+
+               // get old title and extended part
+               if (!$manager->existsItem($itemid,1,1))
+                       return _error(6,"No such item ($itemid)");
+
+               $old =& $manager->getItem($itemid,1,1);
+               $wasdraft = ($old['draft']) ? 1 : 0;
+
+               return _edititem($itemid, $username, $password, $old['catid'], $title, $content, $more, $wasdraft, $publish, $closed);
+       }
+
+
+       // nucleus.getUsersBlogs
+       $f_nucleus_getUsersBlogs_sig = array(array(
+                       // return type
+                       $xmlrpcArray,   // array containing structs containing blog info
+
+                       // params:
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+               ));
+       $f_nucleus_getUsersBlogs_doc = "Returns a list of all the blogs where the given member is on the team";
+       function f_nucleus_getUsersBlogs($m) {
+               $username = _getScalar($m,0);
+               $password = _getScalar($m,1);
+
+               return _getUsersBlogs($username, $password);
+       }
+
+       // nucleus.getRecentItems
+       $f_nucleus_getRecentItems_sig = array(array(
+                       // return type
+                       $xmlrpcArray,   // array of strucs (representing items)
+
+                       // params
+                       $xmlrpcString,  // blogid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+                       $xmlrpcInt,     // amount of items to return (max = 20)
+               ));
+       $f_nucleus_getRecentItems_doc = "Returns a maximum of 20 recent items for a given webblog";
+       function f_nucleus_getRecentItems($m) {
+               $blogid = _getScalar($m, 0);
+               $username = _getScalar($m, 1);
+               $password = _getScalar($m, 2);
+               $amount = _getScalar($m, 3);
+
+               return _getRecentItems($blogid, $username, $password, $amount);
+       }
+
+       // nucleus.getItem
+       $f_nucleus_getItem_sig = array(array(
+                       // return type
+                       $xmlrpcStruct,  // A struct representing the item
+
+                       // params
+                       $xmlrpcString,  // itemid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+               ));
+       $f_nucleus_getItem_doc = "Returns an item";
+       function f_nucleus_getItem($m) {
+               $postid = _getScalar($m, 0);
+               $username = _getScalar($m, 1);
+               $password = _getScalar($m, 2);
+
+               return _getItem($postid, $username, $password);
+       }
+
+       // nucleus.deleteItem
+       $f_nucleus_deleteItem_sig = array(array(
+                       // return type
+                       $xmlrpcBoolean, // boolean (ok or not ok)
+
+                       // params
+                       $xmlrpcString,  // itemid
+                       $xmlrpcString,  // username
+                       $xmlrpcString,  // password
+               ));
+       $f_nucleus_deleteItem_doc = "Deletes an item";
+       function f_nucleus_deleteItem($m) {
+               $itemid = _getScalar($m,0);
+               $username = _getScalar($m, 1);
+               $password = _getScalar($m, 2);
+
+               return _deleteItem($itemid, $username, $password);
+       }
+
+
+       /**
+         * Returns a list of recent items (Nucleus Version)
+         * ($amount = max 20);
+         */
+       function _getRecentItems($blogid, $username, $password, $amount) {
+               $blogid = intval($blogid);
+               $amount = intval($amount);
+
+               // 1. login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,"Could not log in");
+
+               // 2. check if allowed
+               if (!BLOG::existsID($blogid))
+                       return _error(2,"No such blog ($blogid)");
+               if (!$mem->teamRights($blogid))
+                       return _error(3,"Not a team member");
+               $amount = intval($amount);
+               if (($amount < 1) or ($amount > 20))
+                       return _error(5,"Amount parameter must be in range 1..20");
+
+               // 3. create and return list of recent items
+               // Struct returned has dateCreated, userid, blogid and content
+
+               $structarray = array();         // the array in which the structs will be stored
+
+               $query = "SELECT ibody, iauthor, ibody, imore, ititle, iclosed, idraft, itime"
+                          .' FROM '.sql_table('item')
+                          ." WHERE iblog=$blogid"
+                          ." ORDER BY itime DESC"
+                          ." LIMIT $amount";
+               $r = sql_query($query);
+               while ($obj = sql_fetch_object($r)) {
+                       $newstruct = new xmlrpcval(array(
+                               "publishDate" => new xmlrpcval(iso8601_encode(strtotime($obj->itime)),"dateTime.iso8601"),
+                               "userid" => new xmlrpcval($obj->iauthor,"string"),
+                               "blogid" => new xmlrpcval($blogid,"string"),
+                               "title" => new xmlrpcval($obj->ititle,"string"),
+                               "body" => new xmlrpcval($obj->ibody,"string"),
+                               "more" => new xmlrpcval($obj->imore,"string"),
+                               "draft" => new xmlrpcval($obj->idraft,"boolean"),
+                               "closed" => new xmlrpcval($obj->iclosed,"boolean"),
+                       ),'struct');
+                       array_push($structarray, $newstruct);
+               }
+
+               return new xmlrpcresp(new xmlrpcval( $structarray , "array"));
+
+       }
+
+
+
+       /**
+         * Returns one item (Nucleus version)
+         */
+       function _getItem($itemid, $username, $password) {
+               global $manager;
+
+               // 1. login
+               $mem = new MEMBER();
+               if (!$mem->login($username, $password))
+                       return _error(1,"Could not log in");
+
+               // 2. check if allowed
+               if (!$manager->existsItem($itemid,1,1))
+                       return _error(6,"No such item ($itemid)");
+               $blogid = getBlogIDFromItemID($itemid);
+
+               if (!$mem->teamRights($blogid))
+                       return _error(3,"Not a team member");
+
+               // 3. return the item
+               // Structure returned has dateCreated, userid, blogid and content
+
+               $item =& $manager->getItem($itemid,1,1); // (also allow drafts and future items)
+
+               $blog = new BLOG($blogid);
+               if ($blog->convertBreaks())
+                       $item['body'] = removeBreaks($item['body']);
+
+               $newstruct = new xmlrpcval(array(
+                       "publishDate" => new xmlrpcval(iso8601_encode($item['timestamp']),"dateTime.iso8601"),
+                       "userid" => new xmlrpcval($item['authorid'],"string"),
+                       "blogid" => new xmlrpcval($blogid,"string"),
+                       "title" => new xmlrpcval($item['title'],"string"),
+                       "body" => new xmlrpcval($item['body'],"string"),
+                       "more" => new xmlrpcval($item['more'],"string"),
+                       "draft" => new xmlrpcval($item['draft'],"boolean"),
+                       "closed" => new xmlrpcval($item['closed'],"boolean"),
+               ),'struct');
+
+               return new xmlrpcresp($newstruct);
+
+
+       }
+
+
+       $functionDefs = array_merge($functionDefs,
+               array(
+                       "nucleus.addItem" =>
+                       array( "function" => "f_nucleus_addItem",
+                               "signature" => $f_nucleus_addItem_sig,
+                               "docstring" => $f_nucleus_addItem_doc),
+
+                       "nucleus.editItem" =>
+                       array( "function" => "f_nucleus_editItem",
+                               "signature" => $f_nucleus_editItem_sig,
+                               "docstring" => $f_nucleus_editItem_doc),
+
+                       "nucleus.addDatedItem" =>
+                       array( "function" => "f_nucleus_addDatedItem",
+                               "signature" => $f_nucleus_addDatedItem_sig,
+                               "docstring" => $f_nucleus_addDatedItem_doc),
+
+                       "nucleus.deleteItem" =>
+                       array( "function" => "f_nucleus_deleteItem",
+                               "signature" => $f_nucleus_deleteItem_sig,
+                               "docstring" => $f_nucleus_deleteItem_doc),
+
+                       "nucleus.getUsersBlogs" =>
+                       array( "function" => "f_nucleus_getUsersBlogs",
+                               "signature" => $f_nucleus_getUsersBlogs_sig,
+                               "docstring" => $f_nucleus_getUsersBlogs_doc),
+
+                       "nucleus.getRecentItems" =>
+                       array( "function" => "f_nucleus_getRecentItems",
+                               "signature" => $f_nucleus_getRecentItems_sig,
+                               "docstring" => $f_nucleus_getRecentItems_doc),
+
+                       "nucleus.getItem" =>
+                       array( "function" => "f_nucleus_getItem",
+                               "signature" => $f_nucleus_getItem_sig,
+                               "docstring" => $f_nucleus_getItem_doc)
+               )
+
+       );
+
+?>
\ No newline at end of file
diff --git a/utf8/nucleus/xmlrpc/index.html b/utf8/nucleus/xmlrpc/index.html
new file mode 100755 (executable)
index 0000000..1dd6105
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>Nothing Here</title>
+       <!--\r
+               Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+               Copyright (C) 2002-2010 The Nucleus Group\r
+\r
+               This program is free software; you can redistribute it and/or\r
+               modify it under the terms of the GNU General Public License\r
+               as published by the Free Software Foundation; either version 2\r
+               of the License, or (at your option) any later version.\r
+               (see nucleus/documentation/index.html#license for more info)\r
+\r
+               @license http://nucleuscms.org/license.txt GNU General Public License\r
+               @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+               @version $Id$\r
+       -->\r
+</head>
+<body>
+
+<h1>Nothing to see here</h1>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/utf8/nucleus/xmlrpc/server.php b/utf8/nucleus/xmlrpc/server.php
new file mode 100755 (executable)
index 0000000..6c80f72
--- /dev/null
@@ -0,0 +1,320 @@
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * This script is provides an XML-RPC [1] interface to Nucleus [2].
+ *
+ * At this time, the Blogger API [3], the metaWeblog API [4] and
+ * parts of the Movable Type API [5] are implemented
+ *
+ * This script uses the the 'XML-RPC for PHP v1.02' implementation [6]
+ * All other code was written by Wouter Demuynck [7]
+ *
+ * [1] http://www.xmlrpc.com/
+ * [2] http://nucleuscms.org/
+ * [3] http://plant.blogger.com/api/
+ * [4] http://www.xmlrpc.com/metaWeblogApi
+ * [5] http://www.movabletype.org/docs/mtmanual_programmatic.html
+ * [6] http://phpxmlrpc.sourceforge.net/
+ * [7] http://demuynck.org/
+ *
+ *
+ * The Blogger API: (more info in the documentation)
+ *
+ *     blogger.newPost
+ *     blogger.editPost
+ *     blogger.getUsersBlogs
+ *     blogger.deletePost
+ *     blogger.getRecentPosts
+ *     blogger.getPost
+ *     blogger.getUserInfo
+ *     blogger.getTemplate
+ *     blogger.setTemplate
+ *
+ *     Note: The getUserInfo response contains an empty 'lastname' and the full name as
+ *       'firstname'
+ * Note: Blogger API methods only affect the body field of items
+ *
+ * The metaWeblog API (more info in documentation)
+ *
+ * metaWeblog.newPost
+ * metaWeblog.getPost
+ * metaWeblog.editPost
+ * metaWeblog.getCategories
+ * metaWeblog.newMediaObject
+ * metaWeblog.getRecentPosts
+ *
+ * Note: metaWeblog API methods only affect the body and title fields of items.
+ *       the extended part is left untouched (and empty for new posts)
+ *
+ * The Movable Type API
+ *
+ * mt.supportedMethods
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * @version $NucleusJP: server.php,v 1.8.2.1 2007/09/07 07:12:42 kimitake Exp $
+ */
+$CONF = array();
+require("../../config.php");   // include Nucleus libs and code
+include($DIR_LIBS . "xmlrpc.inc.php");
+include($DIR_LIBS . "xmlrpcs.inc.php");
+
+/* define xmlrpc settings */
+$xmlrpc_internalencoding = _CHARSET;
+$xmlrpc_defencoding = 'UTF-8';
+
+/* definition of available methods */
+
+$functionDefs = array();
+
+// load server functions
+include('api_blogger.inc.php');
+include('api_metaweblog.inc.php');
+// include('api_nucleus.inc.php'); // uncomment if you still want to use the nucleus.* methods
+include('api_mt.inc.php');
+
+
+// create server
+$s = new xmlrpc_server( $functionDefs );
+
+
+/* ------------------------------ private functions ---------------------------------- */
+
+/**
+  * Adds an item to the given blog. Username and password are required to login
+  */
+function _addItem($blogid, $username, $password, $title, $body, $more, $publish, $closed, $catname = "") {
+       $blog = new BLOG($blogid);
+       $timestamp = $blog->getCorrectTime();
+       return _addDatedItem($blogid, $username, $password, $title, $body, $more, $publish, $closed, $timestamp, 0, $catname);
+}
+
+/**
+  * Adds item to blog, with time of item given
+  */
+function _addDatedItem($blogid, $username, $password, $title, $body, $more, $publish, $closed, $timestamp, $future, $catname = "") {
+       // 1. login
+       $mem = new MEMBER();
+
+       if (!$mem->login($username, $password))
+               return _error(1,"Could not log in");
+
+       // 2. check if allowed to add to blog
+       if (!BLOG::existsID($blogid))
+               return _error(2,"No such blog ($blogid)");
+       if (!$mem->teamRights($blogid))
+               return _error(3,"Not a team member");
+       if (!trim($body))
+               return _error(4,"Cannot add empty items!");
+
+       // 3. calculate missing vars
+       $blog = new BLOG($blogid);
+
+       // get category id (or id for default category when false category)
+       $catid = $blog->getCategoryIdFromName($catname);
+
+       if ($publish == 1)
+               $draft = 0;
+       else
+               $draft = 1;
+       if ($closed != 1)
+               $closed = 0;
+
+       // 4. add to blog
+       $itemid = $blog->additem($catid, $title, $body, $more, $blogid, $mem->getID(), $timestamp, $closed, $draft);
+
+       // [TODO] ping weblogs.com ?
+
+       return new xmlrpcresp(new xmlrpcval($itemid,"string"));
+}
+
+/**
+  * Updates an item. Username and password are required to login
+  */
+function _edititem($itemid, $username, $password, $catid, $title, $body, $more, $wasdraft, $publish, $closed) {
+       global $manager;
+
+       // 1. login
+       $mem = new MEMBER();
+       if (!$mem->login($username, $password))
+               return _error(1,"Could not log in");
+
+       // 2. check if allowed to add to blog
+       if (!$manager->existsItem($itemid,1,1))
+               return _error(6,"No such item ($itemid)");
+       if (!$mem->canAlterItem($itemid))
+               return _error(7,"Not allowed to alter item");
+
+       // 3. update item
+       ITEM::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, 0);
+
+       return new xmlrpcresp(new xmlrpcval(1,"boolean"));
+}
+
+/**
+  * Gives the list of blogs to which the user with given name and password has access
+  */
+function _getUsersBlogs($username, $password) {
+       // 1. Try to login
+       $mem = new MEMBER();
+       if (!$mem->login($username, $password))
+               return _error(1,"Could not log in");
+
+       // 2. Get list of blogs
+
+       $structarray = array();
+       $query =  "SELECT bnumber, bname, burl"
+                       . ' FROM '.sql_table('blog').', '.sql_table('team')
+                       . " WHERE tblog=bnumber and tmember=" . $mem->getID()
+                       . " ORDER BY bname";
+       $r = sql_query($query);
+
+       while ($obj = sql_fetch_object($r)) {
+               if ($obj->burl)
+                       $blogurl = $obj->burl;
+               else
+                       $blogurl = 'http://';
+
+               $newstruct = new xmlrpcval(array(
+                       "url" => new xmlrpcval($blogurl,"string"),
+                       "blogid" => new xmlrpcval($obj->bnumber,"string"),
+                       "blogName" => new xmlrpcval($obj->bname,"string")
+               ),'struct');
+               array_push($structarray, $newstruct);
+       }
+
+       return new xmlrpcresp(new xmlrpcval( $structarray , "array"));
+}
+
+
+function _getUserInfo($username, $password) {
+       // 1. login
+       $mem = new MEMBER();
+       if (!$mem->login($username, $password))
+               return _error(1,"Could not log in");
+
+       // 3. return the info
+       // Structure returned has nickname, userid, url, email, lastname, firstname
+
+       $newstruct = new xmlrpcval(array(
+               "nickname" => new xmlrpcval($mem->getDisplayName(),"string"),
+               "userid" => new xmlrpcval($mem->getID(),"string"),
+               "url" => new xmlrpcval($mem->getURL(),"string"),
+               "email" => new xmlrpcval($mem->getEmail(),"string"),
+               "lastname" => new xmlrpcval("","string"),
+               "firstname" => new xmlrpcval($mem->getRealName(),"string")
+       ),'struct');
+
+       return new xmlrpcresp($newstruct);
+
+
+}
+
+/**
+  * deletes an item
+  */
+function _deleteItem($itemid, $username, $password) {
+       global $manager;
+
+       // 1. login
+       $mem = new MEMBER();
+       if (!$mem->login($username, $password))
+               return _error(1,"Could not log in");
+
+       // 2. check if allowed
+       if (!$manager->existsItem($itemid,1,1))
+               return _error(6,"No such item ($itemid)");
+       $blogid = getBlogIDFromItemID($itemid);
+       if (!$mem->teamRights($blogid))
+               return _error(3,"Not a team member");
+
+       // delete the item
+       ITEM::delete($itemid);
+
+       return new xmlrpcresp(new xmlrpcval(1,"boolean"));
+}
+
+/**
+  * Returns a template
+  */
+function _getSkinPart($blogid, $username, $password, $type) {
+       // 1. login
+       $mem = new MEMBER();
+       if (!$mem->login($username, $password))
+               return _error(1,"Could not log in");
+
+       // 2. check if allowed
+       if (!BLOG::existsID($blogid))
+               return _error(2,"No such blog ($blogid)");
+       if (!$mem->teamRights($blogid))
+               return _error(3,"Not a team member");
+
+       // 3. return skin part
+       $blog = new BLOG($blogid);
+       $skin = new SKIN($blog->getDefaultSkin());
+       return new xmlrpcresp(new xmlrpcval($skin->getContent($type),"string"));
+
+}
+
+function _setSkinPart($blogid, $username, $password, $content, $type) {
+       // 1. login
+       $mem = new MEMBER();
+       if (!$mem->login($username, $password))
+               return _error(1,"Could not log in");
+
+       // 2. check if allowed
+       if (!BLOG::existsID($blogid))
+               return _error(2,"No such blog ($blogid)");
+       if (!$mem->teamRights($blogid))
+               return _error(3,"Not a team member");
+
+       // 3. update skin part
+       $blog = new BLOG($blogid);
+       $skin = new SKIN($blog->getDefaultSkin());
+       $skin->update($type, $content);
+
+       return new xmlrpcresp(new xmlrpcval(1,'boolean'));
+}
+
+/**
+  * Some convenience methods
+  */
+
+function _getScalar($m, $idx) {
+       $v = $m->getParam($idx);
+       return $v->scalarval();
+}
+
+function _getStructVal($struct, $key) {
+       $t = $struct->structmem($key);
+       if (!$t) 
+               return '';      // no such struct value
+       else
+               return $t->scalarval();
+}
+
+function _getArrayVal($a, $idx) {
+       $t = $a->arraymem($idx);
+       return $t->scalarval();
+}
+
+/**
+  * Returns an XML-RPC error response
+  * $err is the error number (>0, will be added to $xmlrpcerruser)
+  */
+function _error($err, $msg) {
+       global $xmlrpcerruser;
+       return new xmlrpcresp(0, $xmlrpcerruser + $err, $msg);
+}
+?>
\ No newline at end of file
diff --git a/utf8/readme.html b/utf8/readme.html
new file mode 100644 (file)
index 0000000..0563741
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+<title>Nucleus - Readme</title>
+<style type="text/css">
+<!--
+       @import url(nucleus/styles/manual.css);
+-->
+</style>
+<!--
+       Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+       Copyright (C) 2002-2010 The Nucleus Group
+       
+       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.
+       (see nucleus/documentation/index.html#license for more info)
+       
+       @license http://nucleuscms.org/license.txt GNU General Public License
+       @copyright Copyright (C) 2002-2010 The Nucleus Group
+       @version $Id$
+-->
+</head>
+<body>
+<h1>Readme</h1>
+
+<p>
+<a href="nucleus/documentation/index.html">Nucleus マニュアル</a>を参照して下さい。
+</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/utf8/robots.txt b/utf8/robots.txt
new file mode 100755 (executable)
index 0000000..032b921
--- /dev/null
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: action.php?
diff --git a/utf8/rsd.php b/utf8/rsd.php
new file mode 100755 (executable)
index 0000000..3649bc7
--- /dev/null
@@ -0,0 +1,28 @@
+<?php\r
+\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+
+/**\r
+ * RSD API\r
+ *\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id$\r
+ */\r
+\r
+// RSD file (http://archipelago.phrasewise.com/rsd)
+$CONF = array();
+include('./config.php');
+selectSkin('xml/rsd');
+selector();
+
+?>
\ No newline at end of file
diff --git a/utf8/skins/.htaccess b/utf8/skins/.htaccess
new file mode 100644 (file)
index 0000000..f7027bd
--- /dev/null
@@ -0,0 +1,4 @@
+<FilesMatch "\.(php|inc)$">\r
+Order allow,deny\r
+Deny from all\r
+</FilesMatch>
\ No newline at end of file
diff --git a/utf8/skins/atom/skinbackup.xml b/utf8/skins/atom/skinbackup.xml
new file mode 100755 (executable)
index 0000000..e73aea5
--- /dev/null
@@ -0,0 +1,53 @@
+<nucleusskin>
+       <meta>
+               <skin name="feeds/atom" />
+               <template name="feeds/atom/modified" />
+               <template name="feeds/atom/entries" />
+               <info>
+                       <![CDATA[Atom 1.0 weblog syndication]]>
+               </info>
+       </meta>
+
+       <skin name="feeds/atom" type="application/atom+xml" includeMode="normal" includePrefix="">
+               <description>Atom 1.0 weblog syndication</description>
+               <part name="index"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<feed xml:lang="ja" xmlns="http://www.w3.org/2005/Atom">
+       <title><%blogsetting(name)%></title>
+       <subtitle><%blogsetting(desc)%></subtitle>
+       <id><%blogsetting(url)%>:<%blogsetting(id)%></id>
+
+       <link rel="alternate" type="text/html" href="<%blogsetting(url)%>" />
+       <link rel="self" type="application/atom+xml" href="<%blogsetting(url)%><%self%>" />
+       <generator uri="http://nucleuscms.org/"><%version%></generator>
+       <updated><%blog(feeds/atom/modified,1)%></updated>
+
+       <%blog(feeds/atom/entries,10)%>
+</feed>]]></part>
+       </skin>
+
+
+       <template name="feeds/atom/modified">
+               <description>Atom feeds: Inserts last modification date</description>
+               <part name="ITEM"><![CDATA[<%date(utc)%>]]></part>
+       </template>
+
+
+       <template name="feeds/atom/entries">
+               <description>Atom feeds: Feed items</description>
+               <part name="ITEM"><![CDATA[<entry>
+ <title type="html"><![CDATA[<%title%>]]]]><![CDATA[></title>
+ <link rel="alternate" type="text/html" href="<%itemlink%>" />
+ <author>
+  <name><%author%></name>
+ </author>
+ <updated><%date(utc)%></updated>
+ <published><%date(iso8601)%></published>
+ <content type="html"><![CDATA[<%body%><%more%>]]]]><![CDATA[></content>
+ <id><%blogurl%>:<%blogid%>:<%itemid%></id>
+</entry>]]></part>
+               <part name="IMAGE_CODE"><![CDATA[<%image%>]]></part>
+               <part name="MEDIA_CODE"><![CDATA[<%media%>]]></part>
+               <part name="POPUP_CODE"><![CDATA[<%media%>]]></part>
+       </template>
+
+</nucleusskin>
diff --git a/utf8/skins/default/default_left.css b/utf8/skins/default/default_left.css
new file mode 100644 (file)
index 0000000..5b11117
--- /dev/null
@@ -0,0 +1,499 @@
+/*-------------------------------------------------
+  Nucleus CMS Stylesheet - bundled with version 3.4
+  Based on the Stanch skin by Ivan Fong
+  Mods by hcgtv and moraes and yama.kyms
+-------------------------------------------------*/
+
+/*-------------------------------------------------
+  General layout
+-------------------------------------------------*/
+body
+{
+       background: #505050 url(images/bg.gif);
+       color: #494949;
+       font-family: "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;
+       font-size: 12px;
+       padding: 15px 0;
+       margin: 0;
+}
+img
+{
+       border: 0;
+}
+form
+{
+       margin: 0;
+}
+
+/* Headings */
+h1,h2,h3,h4,h5,h6
+{
+    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;
+       font-weight: normal;
+       margin: 0;
+}
+
+/* Lists */
+ul
+{
+       list-style: none;
+       padding: 0;
+       margin: 0;
+}
+li
+{
+       background: url(images/arrow.gif) left 5px no-repeat;
+       padding: 0 0 0 10px;
+       margin: 0 20px;
+}
+
+/* Links */
+a:link, a:visited
+{
+       color: #635D45;
+       text-decoration: none;
+}
+a:hover, a:active
+{
+       color: black;
+}
+#header a:link, #header a:visited
+{
+       color: #474747;
+}
+#header a:hover, #header a:active
+{
+       color: #737373;
+}
+#copyrights a:link, #copyrights a:visited
+{
+       color: #474747;
+}
+#copyrights a:hover, #copyrights a:active
+{
+       color: #737373;
+}
+
+/* Basic classes */
+.hidden
+{
+       display: none;
+}
+.centerize
+{
+       text-align: center;
+}
+.clearing
+{
+       width: 784px;
+       height: 0;
+       clear: both;
+}
+
+/*-------------------------------------------------
+  Header
+-------------------------------------------------*/
+#header
+{
+       position: relative;
+       width: 784px;
+       height: 168px;
+       /* large header image is defined below */
+       /* background: white url(images/header.jpg) no-repeat; */
+       background: white;
+       border-width: 2px 2px 0;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: auto;
+}
+#header h1
+{
+       /* small header image specific lines */
+       height: 168px;
+       width: 772px;
+       background: white url(images/header_sm.jpg) repeat-x 0 6px;
+       margin: 0 6px;
+       /* end small header image specific lines */
+       font-size: 38px;
+       text-align: center;
+       line-height: 160px;
+       letter-spacing:5px;
+}
+
+/*-------------------------------------------------
+  Content wrappers
+-------------------------------------------------*/
+#mainwrapper
+{
+       width: 784px;
+       background: white;
+       border-width: 0 2px;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: auto;
+}
+#wrapper
+{
+       width: 784px;
+       background: white url(images/bgcontainer01.gif) repeat-y;
+       margin: auto;
+}
+
+/*-------------------------------------------------
+  Main content
+-------------------------------------------------*/
+#container
+{
+       width: 784px;
+       height: 1%;
+       overflow: visible;
+       float: right;
+       padding: 4px 0 0 0;
+       margin-left: -204px;
+}
+.content
+{
+       padding: 0;
+       margin: 7px 20px 30px 224px;
+}
+
+/*-------------------------------------------------
+  Item styles
+-------------------------------------------------*/
+.contenttitle h2
+{
+       clear: both;
+       background: url(images/dot.gif) bottom repeat-x;
+       font-size: 15px;
+       padding: 0 0 6px 0;
+       margin: 0;
+}
+.contentbody
+{
+       font-size:13px;
+       text-align: justify;
+       padding: 0 0 16px 0;
+       line-height:1.5;
+}
+
+/*-------------------------------------------------
+  Item info
+-------------------------------------------------*/
+.contentitemcategory
+{
+       background: url(images/bgcategory.gif) center left no-repeat;
+       font-size: 12px;
+       line-height: 12px;
+       padding: 0 10px 0 14px;
+}
+.contentitempostedby
+{
+       background: url(images/bgpostedby.gif) center left no-repeat;
+       font-size: 12px;
+       line-height: 12px;
+       padding: 0 10px 0 12px;
+}
+.contentitemcomments
+{
+       background: url(images/bgcomment.gif) center left no-repeat;
+       font-size: 12px;
+       line-height: 12px;
+       padding: 0 10px 0 13px;
+}
+.contentitemedit
+{
+       background: url(images/bgedit.gif) center left no-repeat;
+       font-size: 12px;
+       line-height: 12px;
+       padding: 0 10px 0 11px;
+}
+.contentitem
+{
+       padding: 3px 0 0 0;
+       margin: 0 0 16px 0;
+}
+.contentitem1
+{
+       display: inline;
+}
+.contentitem2
+{
+       display: inline;
+       background: url(images/dotv.gif) left repeat-y;
+       padding: 0 0 0 10px;
+}
+.contentitem3
+{
+       display: inline;
+       background: url(images/dotv.gif) left repeat-y;
+       padding: 0 0 0 10px;
+}
+.contentitem4
+{
+       display: inline;
+       padding: 0 0 0 10px;
+       background: url(images/dotv.gif) left repeat-y;
+}
+
+/*-------------------------------------------------
+  Comments
+-------------------------------------------------*/
+.itemcomment
+{
+       background: url(images/commentquote01.gif) no-repeat;
+       background-position: 6px 9px;
+       padding: 6px 42px;
+       border: 1px solid white;
+       margin: 10px 0 0 0;
+}
+.itemcomment:hover
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #CCCCCC;
+}
+.id1 /*This is to give the admin a special comment style, to distinguish him/her from the rest of the commentors*/
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #B3C492;
+}
+.id1:hover
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #B3C492;
+}
+.itemcomment h3
+{
+       font-size: 12px;
+}
+
+/*-------------------------------------------------
+  Menu
+-------------------------------------------------*/
+#sidebarcontainer
+{
+       float: left;
+       width: 204px;
+       padding: 2px 0 0 0;
+}
+.sidebar
+{
+       color: #21262A;
+       margin: 0 0 4px 6px;
+}
+
+/* Menu lists */
+.sidebardl
+{
+       padding: 0 0 10px 0;
+       margin: 0;
+}
+.sidebardl dt
+{
+       background: #E5E5E5 url(images/sidetitlebg.gif);
+       color: #3A3523;
+       font-size: 12px;
+       font-weight: bold;
+       letter-spacing:2px;
+    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", Arial, "Trebuchet MS", sans-serif;
+       padding: 4px 10px;
+}
+.sidebardl dd
+{
+       background: #EEEEEE;
+       padding: 2px 10px;
+       margin: 1px 0 0 0;
+}
+.sidebardl dd:hover
+{
+       background: #E7E7E7;
+       padding: 2px 10px;
+       margin: 1px 0 0 0;
+}
+.sidebardl dd a:link, .sidebardl dd a:visited
+{
+       background: url(images/arrow.gif) left center no-repeat;
+       padding: 0 0 0 10px;
+}
+
+/*-------------------------------------------------
+  Footer
+-------------------------------------------------*/
+#footer
+{
+       width: 784px;
+       background: #FCD21B;
+       text-align: center;
+       padding: 10px 0 10px 0;
+       border-width: 0px 2px 2px 2px;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: 0 auto;
+}
+
+#copyrights
+{
+       color: #474747;
+}
+
+/*-------------------------------------------------
+  Forms
+-------------------------------------------------*/
+.loginform, .searchform
+{
+       margin: 5px 0;
+}
+.commentform, .mailform
+{
+       margin-top: 10px;
+    padding: 10px;
+    background: #EEEEEE;
+    /* Rounded borders, for Mozilla browsers */
+    /* -moz-border-radius: 10px; */
+}
+.commentform img{
+    margin: 5px 0 0 0;
+}
+.formfield
+{
+       font-size: 12px;
+       background: white;
+       color: #494949;
+       border-top: 1px solid #868686;
+       border-left: 1px solid #868686;
+       border-bottom: 1px solid #D4D2CF;
+       border-right: 1px solid #D4D2CF;
+       margin: 1px 0 0 0;
+       padding:5px;
+       line-height:1.5;
+}
+.formbutton
+{
+       font-size: 12px;
+       background: white;
+       color: #494949;
+       border-top: 1px solid #D4D2CF;
+       border-left: 1px solid #D4D2CF;
+       border-bottom: 1px solid #868686;
+       border-right: 1px solid #868686;
+       margin: 1px 0 0 0;
+}
+.searchform .formfield
+{
+       width: 130px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.searchform .formbutton
+{
+       width: 60px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+.loginform .formfield
+{
+       width: 130px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.loginform .formbutton
+{
+       width: 60px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+.mainform .formfield
+{
+       width: 280px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.mailform .formbutton
+{
+       width: 100px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+#nucleus_cf_name, #nucleus_cf_mail
+{
+    width: 300px;
+    margin-right: 105px;
+    font-family: Arial, Trebuchet MS, Verdana, sans-serif;
+}
+.commentform textarea, .commentform .formfield, .mailform textarea, .mailform .formfield
+{
+    width: 300px;
+}
+.commentform .formbutton
+{
+       width: 100px;
+       height: 22px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+}
+.error
+{
+       color: red;
+       font-weight: bold;
+}
+
+textarea#nucleus_cf_body
+{
+       width:470px;
+}
+
+/*-------------------------------------------------
+  Miscelaneous
+-------------------------------------------------*/
+/* VBlog image onion skin shadow - From AListApart.com*/
+.wrap1, .wrap2, .wrap3
+{
+       display:inline-table;
+       /* \*/display:block;/**/
+}
+.wrap1
+{
+       float:left;
+       background:url(images/shadow.gif) right bottom no-repeat;
+       margin: 0 5px 3px 0;
+}
+.wrap2
+{
+       background:url(images/corner_br.gif) left bottom no-repeat;
+}
+.wrap3
+{
+       background:url(images/corner_tr.gif) right top no-repeat;
+       padding:0 5px 5px 0;
+}
+.wrap3 img
+{
+       display:block;
+       border: 3px solid white;
+}
+
+/* Search highlight color */
+.highlight
+{
+       background: #80ff80;
+}
+
+/* Leftbox and Rightbox toolbar buttons */
+.leftbox, .rightbox {
+       margin: 3px;
+       padding: 3px;
+       font-size: larger;
+       width: 20%;
+}
+.leftbox {
+       float: left;
+       border-right: 2px solid #ccc;
+}
+.rightbox {
+       float: right;
+       border-left: 2px solid #ccc;
+}
diff --git a/utf8/skins/default/default_right.css b/utf8/skins/default/default_right.css
new file mode 100644 (file)
index 0000000..76bd716
--- /dev/null
@@ -0,0 +1,499 @@
+/*-------------------------------------------------
+  Nucleus CMS Stylesheet - bundled with version 3.4
+  Based on the Stanch skin by Ivan Fong
+  Mods by hcgtv and moraes and yama.kyms
+-------------------------------------------------*/
+
+/*-------------------------------------------------
+  General layout
+-------------------------------------------------*/
+body
+{
+       background: #505050 url(images/bg.gif);
+       color: #494949;
+       font-family: "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;
+       font-size: 12px;
+       padding: 15px 0;
+       margin: 0;
+}
+img
+{
+       border: 0;
+}
+form
+{
+       margin: 0;
+}
+
+/* Headings */
+h1,h2,h3,h4,h5,h6
+{
+    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", "Trebuchet MS", Trebuchet, Arial, sans-serif;
+       font-weight: normal;
+       margin: 0;
+}
+
+/* Lists */
+ul
+{
+       list-style: none;
+       padding: 0;
+       margin: 0;
+}
+li
+{
+       background: url(images/arrow.gif) left 5px no-repeat;
+       padding: 0 0 0 10px;
+       margin: 0 20px;
+}
+
+/* Links */
+a:link, a:visited
+{
+       color: #635D45;
+       text-decoration: none;
+}
+a:hover, a:active
+{
+       color: black;
+}
+#header a:link, #header a:visited
+{
+       color: #474747;
+}
+#header a:hover, #header a:active
+{
+       color: #737373;
+}
+#copyrights a:link, #copyrights a:visited
+{
+       color: #474747;
+}
+#copyrights a:hover, #copyrights a:active
+{
+       color: #737373;
+}
+
+/* Basic classes */
+.hidden
+{
+       display: none;
+}
+.centerize
+{
+       text-align: center;
+}
+.clearing
+{
+       width: 784px;
+       height: 0;
+       clear: both;
+}
+
+/*-------------------------------------------------
+  Header
+-------------------------------------------------*/
+#header
+{
+       position: relative;
+       width: 784px;
+       height: 168px;
+       /* large header image is defined below */
+       /* background: white url(images/header.jpg) no-repeat; */
+       background: white;
+       border-width: 2px 2px 0;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: auto;
+}
+#header h1
+{
+       /* small header image specific lines */
+       height: 168px;
+       width: 772px;
+       background: white url(images/header_sm.jpg) repeat-x 0 6px;
+       margin: 0 6px;
+       /* end small header image specific lines */
+       font-size: 38px;
+       text-align: center;
+       line-height: 160px;
+       letter-spacing:5px;
+}
+
+/*-------------------------------------------------
+  Content wrappers
+-------------------------------------------------*/
+#mainwrapper
+{
+       width: 784px;
+       background: white;
+       border-width: 0 2px;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: auto;
+}
+#wrapper
+{
+       width: 784px;
+       background: white url(images/bgcontainer02.gif) repeat-y right;
+       margin: auto;
+}
+
+/*-------------------------------------------------
+  Main content
+-------------------------------------------------*/
+#container
+{
+       width: 784px;
+       height: 1%;
+       overflow: visible;
+       float: left;
+       padding: 4px 0 0 0;
+       margin-right: -204px;
+}
+.content
+{
+       padding: 0;
+       margin: 7px 224px 30px 20px;
+}
+
+/*-------------------------------------------------
+  Item styles
+-------------------------------------------------*/
+.contenttitle h2
+{
+       clear: both;
+       background: url(images/dot.gif) bottom repeat-x;
+       font-size: 15px;
+       padding: 0 0 6px 0;
+       margin: 0;
+}
+.contentbody
+{
+       font-size:13px;
+       text-align: justify;
+       padding: 0 0 16px 0;
+       line-height:1.5;
+}
+
+/*-------------------------------------------------
+  Item info
+-------------------------------------------------*/
+.contentitemcategory
+{
+       background: url(images/bgcategory.gif) center left no-repeat;
+       font-size: 12px;
+       line-height: 12px;
+       padding: 0 10px 0 14px;
+}
+.contentitempostedby
+{
+       background: url(images/bgpostedby.gif) center left no-repeat;
+       font-size: 12px;
+       line-height: 12px;
+       padding: 0 10px 0 12px;
+}
+.contentitemcomments
+{
+       background: url(images/bgcomment.gif) center left no-repeat;
+       font-size: 12px;
+       line-height: 12px;
+       padding: 0 10px 0 13px;
+}
+.contentitemedit
+{
+       background: url(images/bgedit.gif) center left no-repeat;
+       font-size: 12px;
+       line-height: 12px;
+       padding: 0 10px 0 11px;
+}
+.contentitem
+{
+       padding: 3px 0 0 0;
+       margin: 0 0 16px 0;
+}
+.contentitem1
+{
+       display: inline;
+}
+.contentitem2
+{
+       display: inline;
+       background: url(images/dotv.gif) left repeat-y;
+       padding: 0 0 0 10px;
+}
+.contentitem3
+{
+       display: inline;
+       background: url(images/dotv.gif) left repeat-y;
+       padding: 0 0 0 10px;
+}
+.contentitem4
+{
+       display: inline;
+       padding: 0 0 0 10px;
+       background: url(images/dotv.gif) left repeat-y;
+}
+
+/*-------------------------------------------------
+  Comments
+-------------------------------------------------*/
+.itemcomment
+{
+       background: url(images/commentquote01.gif) no-repeat;
+       background-position: 6px 9px;
+       padding: 6px 42px;
+       border: 1px solid white;
+       margin: 10px 0 0 0;
+}
+.itemcomment:hover
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #CCCCCC;
+}
+.id1 /*This is to give the admin a special comment style, to distinguish him/her from the rest of the commentors*/
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #B3C492;
+}
+.id1:hover
+{
+       background: #F9F9F9 url(images/commentquote02.gif) no-repeat;
+       background-position: 6px 9px;
+       border: 1px solid #B3C492;
+}
+.itemcomment h3
+{
+       font-size: 12px;
+}
+
+/*-------------------------------------------------
+  Menu
+-------------------------------------------------*/
+#sidebarcontainer
+{
+       float: right;
+       width: 204px;
+       padding: 2px 0 0 0;
+}
+.sidebar
+{
+       color: #21262A;
+       margin: 0 6px 4px 0;
+}
+
+/* Menu lists */
+.sidebardl
+{
+       padding: 0 0 10px 0;
+       margin: 0;
+}
+.sidebardl dt
+{
+       background: #E5E5E5 url(images/sidetitlebg.gif);
+       color: #3A3523;
+       font-size: 12px;
+       font-weight: bold;
+       letter-spacing:2px;
+    font-family: "Georgia", "Lucida Grande", "Lucida Sans Unicode", Arial, "Trebuchet MS", sans-serif;
+       padding: 4px 10px;
+}
+.sidebardl dd
+{
+       background: #EEEEEE;
+       padding: 2px 10px;
+       margin: 1px 0 0 0;
+}
+.sidebardl dd:hover
+{
+       background: #E7E7E7;
+       padding: 2px 10px;
+       margin: 1px 0 0 0;
+}
+.sidebardl dd a:link, .sidebardl dd a:visited
+{
+       background: url(images/arrow.gif) left center no-repeat;
+       padding: 0 0 0 10px;
+}
+
+/*-------------------------------------------------
+  Footer
+-------------------------------------------------*/
+#footer
+{
+       width: 784px;
+       background: #FCD21B;
+       text-align: center;
+       padding: 10px 0 10px 0;
+       border-width: 0px 2px 2px 2px;
+       border-style: solid;
+       border-color: #E0E0E0;
+       margin: 0 auto;
+}
+
+#copyrights
+{
+       color: #474747;
+}
+
+/*-------------------------------------------------
+  Forms
+-------------------------------------------------*/
+.loginform, .searchform
+{
+       margin: 5px 0;
+}
+.commentform, .mailform
+{
+       margin-top: 10px;
+    padding: 10px;
+    background: #EEEEEE;
+    /* Rounded borders, for Mozilla browsers */
+    /* -moz-border-radius: 10px; */
+}
+.commentform img{
+    margin: 5px 0 0 0;
+}
+.formfield
+{
+       font-size: 12px;
+       background: white;
+       color: #494949;
+       border-top: 1px solid #868686;
+       border-left: 1px solid #868686;
+       border-bottom: 1px solid #D4D2CF;
+       border-right: 1px solid #D4D2CF;
+       margin: 1px 0 0 0;
+       padding:5px;
+       line-height:1.5;
+}
+.formbutton
+{
+       font-size: 12px;
+       background: white;
+       color: #494949;
+       border-top: 1px solid #D4D2CF;
+       border-left: 1px solid #D4D2CF;
+       border-bottom: 1px solid #868686;
+       border-right: 1px solid #868686;
+       margin: 1px 0 0 0;
+}
+.searchform .formfield
+{
+       width: 130px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.searchform .formbutton
+{
+       width: 60px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+.loginform .formfield
+{
+       width: 130px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.loginform .formbutton
+{
+       width: 60px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+.mainform .formfield
+{
+       width: 280px;
+    font-family: Arial, Tahoma, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 0;
+       margin: 0 2px 2px 0;
+}
+.mailform .formbutton
+{
+       width: 100px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+       padding: 2px 2px;
+}
+#nucleus_cf_name, #nucleus_cf_mail
+{
+    width: 300px;
+    margin-right: 105px;
+    font-family: Arial, Trebuchet MS, Verdana, sans-serif;
+}
+.commentform textarea, .commentform .formfield, .mailform textarea, .mailform .formfield
+{
+    width: 300px;
+}
+.commentform .formbutton
+{
+       width: 100px;
+       height: 22px;
+    font-family: Tahoma, Arial, Trebuchet MS, Verdana, sans-serif;
+}
+.error
+{
+       color: red;
+       font-weight: bold;
+}
+
+textarea#nucleus_cf_body
+{
+       width:470px;
+}
+
+/*-------------------------------------------------
+  Miscelaneous
+-------------------------------------------------*/
+/* VBlog image onion skin shadow - From AListApart.com*/
+.wrap1, .wrap2, .wrap3
+{
+       display:inline-table;
+       /* \*/display:block;/**/
+}
+.wrap1
+{
+       float:left;
+       background:url(images/shadow.gif) right bottom no-repeat;
+       margin: 0 5px 3px 0;
+}
+.wrap2
+{
+       background:url(images/corner_br.gif) left bottom no-repeat;
+}
+.wrap3
+{
+       background:url(images/corner_tr.gif) right top no-repeat;
+       padding:0 5px 5px 0;
+}
+.wrap3 img
+{
+       display:block;
+       border: 3px solid white;
+}
+
+/* Search highlight color */
+.highlight
+{
+       background: #80ff80;
+}
+
+/* Leftbox and Rightbox toolbar buttons */
+.leftbox, .rightbox {
+       margin: 3px;
+       padding: 3px;
+       font-size: larger;
+       width: 20%;
+}
+.leftbox {
+       float: left;
+       border-right: 2px solid #ccc;
+}
+.rightbox {
+       float: right;
+       border-left: 2px solid #ccc;
+}
diff --git a/utf8/skins/default/favicon.ico b/utf8/skins/default/favicon.ico
new file mode 100644 (file)
index 0000000..f04fcc4
Binary files /dev/null and b/utf8/skins/default/favicon.ico differ
diff --git a/utf8/skins/default/images/arrow.gif b/utf8/skins/default/images/arrow.gif
new file mode 100644 (file)
index 0000000..529db30
Binary files /dev/null and b/utf8/skins/default/images/arrow.gif differ
diff --git a/utf8/skins/default/images/bg.gif b/utf8/skins/default/images/bg.gif
new file mode 100644 (file)
index 0000000..da46510
Binary files /dev/null and b/utf8/skins/default/images/bg.gif differ
diff --git a/utf8/skins/default/images/bgcategory.gif b/utf8/skins/default/images/bgcategory.gif
new file mode 100644 (file)
index 0000000..343961f
Binary files /dev/null and b/utf8/skins/default/images/bgcategory.gif differ
diff --git a/utf8/skins/default/images/bgcomment.gif b/utf8/skins/default/images/bgcomment.gif
new file mode 100644 (file)
index 0000000..602bcf3
Binary files /dev/null and b/utf8/skins/default/images/bgcomment.gif differ
diff --git a/utf8/skins/default/images/bgcontainer01.gif b/utf8/skins/default/images/bgcontainer01.gif
new file mode 100644 (file)
index 0000000..a923bba
Binary files /dev/null and b/utf8/skins/default/images/bgcontainer01.gif differ
diff --git a/utf8/skins/default/images/bgcontainer02.gif b/utf8/skins/default/images/bgcontainer02.gif
new file mode 100644 (file)
index 0000000..47ff5b6
Binary files /dev/null and b/utf8/skins/default/images/bgcontainer02.gif differ
diff --git a/utf8/skins/default/images/bgedit.gif b/utf8/skins/default/images/bgedit.gif
new file mode 100644 (file)
index 0000000..2599ce9
Binary files /dev/null and b/utf8/skins/default/images/bgedit.gif differ
diff --git a/utf8/skins/default/images/bgpostedby.gif b/utf8/skins/default/images/bgpostedby.gif
new file mode 100644 (file)
index 0000000..ee367a2
Binary files /dev/null and b/utf8/skins/default/images/bgpostedby.gif differ
diff --git a/utf8/skins/default/images/commentquote01.gif b/utf8/skins/default/images/commentquote01.gif
new file mode 100644 (file)
index 0000000..5effd26
Binary files /dev/null and b/utf8/skins/default/images/commentquote01.gif differ
diff --git a/utf8/skins/default/images/commentquote02.gif b/utf8/skins/default/images/commentquote02.gif
new file mode 100644 (file)
index 0000000..3d8531c
Binary files /dev/null and b/utf8/skins/default/images/commentquote02.gif differ
diff --git a/utf8/skins/default/images/corner_br.gif b/utf8/skins/default/images/corner_br.gif
new file mode 100644 (file)
index 0000000..3c90eae
Binary files /dev/null and b/utf8/skins/default/images/corner_br.gif differ
diff --git a/utf8/skins/default/images/corner_tr.gif b/utf8/skins/default/images/corner_tr.gif
new file mode 100644 (file)
index 0000000..04505ae
Binary files /dev/null and b/utf8/skins/default/images/corner_tr.gif differ
diff --git a/utf8/skins/default/images/dot.gif b/utf8/skins/default/images/dot.gif
new file mode 100644 (file)
index 0000000..14a2426
Binary files /dev/null and b/utf8/skins/default/images/dot.gif differ
diff --git a/utf8/skins/default/images/dotv.gif b/utf8/skins/default/images/dotv.gif
new file mode 100644 (file)
index 0000000..7168124
Binary files /dev/null and b/utf8/skins/default/images/dotv.gif differ
diff --git a/utf8/skins/default/images/header.jpg b/utf8/skins/default/images/header.jpg
new file mode 100644 (file)
index 0000000..0f90054
Binary files /dev/null and b/utf8/skins/default/images/header.jpg differ
diff --git a/utf8/skins/default/images/header_sm.jpg b/utf8/skins/default/images/header_sm.jpg
new file mode 100644 (file)
index 0000000..f979efd
Binary files /dev/null and b/utf8/skins/default/images/header_sm.jpg differ
diff --git a/utf8/skins/default/images/nucleus.gif b/utf8/skins/default/images/nucleus.gif
new file mode 100644 (file)
index 0000000..1cdf680
Binary files /dev/null and b/utf8/skins/default/images/nucleus.gif differ
diff --git a/utf8/skins/default/images/shadow.gif b/utf8/skins/default/images/shadow.gif
new file mode 100644 (file)
index 0000000..d8b6f7d
Binary files /dev/null and b/utf8/skins/default/images/shadow.gif differ
diff --git a/utf8/skins/default/images/sidetitlebg.gif b/utf8/skins/default/images/sidetitlebg.gif
new file mode 100644 (file)
index 0000000..ff434e8
Binary files /dev/null and b/utf8/skins/default/images/sidetitlebg.gif differ
diff --git a/utf8/skins/default/inc/additemform.inc b/utf8/skins/default/inc/additemform.inc
new file mode 100644 (file)
index 0000000..1680177
--- /dev/null
@@ -0,0 +1,9 @@
+<%if(loggedin)%>\r
+<div id="edit" style="display:none;">\r
+<div class="contenttitle">\r
+<h2>新規投稿</h2></div>\r
+<div class="contentbody">\r
+<%additemform%></div>\r
+</div>\r
+<%endif%>\r
+\r
diff --git a/utf8/skins/default/inc/benchmark.inc b/utf8/skins/default/inc/benchmark.inc
new file mode 100644 (file)
index 0000000..0c01c8d
--- /dev/null
@@ -0,0 +1,34 @@
+<?php\r
+\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2010 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ */\r
+\r
+/**\r
+ * Nucleus Benchmark\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group\r
+ * @version $Id: benchmark.inc 904 2009-02-06 16:26:06Z shizuki $\r
+ */\r
+\r
+\r
+if (!function_exists('getmtime'))\r
+{\r
+    function getmtime()\r
+    {\r
+        $a = explode (' ',microtime());\r
+        return(double) $a[0] + $a[1];\r
+    }\r
+}\r
+\r
+// For benchmarking\r
+global $StartTime;\r
+$StartTime = getmtime();\r
+?>\r
diff --git a/utf8/skins/default/inc/footer.inc b/utf8/skins/default/inc/footer.inc
new file mode 100644 (file)
index 0000000..3e078e4
--- /dev/null
@@ -0,0 +1,6 @@
+<div id="copyrights">\r
+       <small>Copyright | <a href="http://nucleuscms.org"><%version%></a> | \r
+       <a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0 Strict</a> | \r
+       <a href="http://jigsaw.w3.org/css-validator/">Valid CSS</a> | \r
+       <a href="#top">ページの先頭に戻る</a></small>\r
+</div>\r
diff --git a/utf8/skins/default/inc/head.inc b/utf8/skins/default/inc/head.inc
new file mode 100644 (file)
index 0000000..9d60155
--- /dev/null
@@ -0,0 +1,26 @@
+<meta http-equiv="Content-Type" content="text/html; charset=<%charset%>" />\r
+<%phpinclude(inc/benchmark.inc)%>\r
+\r
+<!-- meta information for search engines -->\r
+<meta name="name" content="<%blogsetting(name)%>" />\r
+<meta name="description" content="<%blogsetting(desc)%>" />\r
+\r
+<!-- site stylesheet (site colors and layout definitions) -->\r
+<link rel="stylesheet" type="text/css" href="<%skinfile(default_left.css)%>" />\r
+\r
+<!-- site stylesheet ADDED (some adjustment) -->\r
+<link rel="stylesheet" type="text/css" href="<%skinfile(jlocal.css)%>" />\r
+\r
+<!-- tooltips & stylesheet (activated by title="" on links) -->\r
+<link rel="stylesheet" type="text/css" href="<%skinfile(nicetitle.css)%>" />\r
+<script type="text/javascript" src="<%skinfile(nicetitle.js)%>"></script>\r
+\r
+<!-- ATOM support --> \r
+<link rel="alternate" type="application/atom+xml" title="ATOM" href="atom.php" /> \r
+\r
+<!-- RSS 2.0 feed -->\r
+<link rel="alternate" type="application/rss+xml" title="RSS" href="<%sitevar(url)%>xml-rss2.php" />\r
+\r
+<!-- favorite icon -->\r
+<link rel="shortcut icon" href="<%skinfile(favicon.ico)%>" />\r
+<link rel="icon" href="<%skinfile(favicon.ico)%>" />\r
diff --git a/utf8/skins/default/inc/header.inc b/utf8/skins/default/inc/header.inc
new file mode 100644 (file)
index 0000000..c70cf6e
--- /dev/null
@@ -0,0 +1,12 @@
+<!-- page header -->\r
+<div id="header"><a name="top"></a>\r
+<h1>\r
+       <%if(skintype,error)%>\r
+               <a href="<%sitevar(url)%>"><%sitevar(name)%></a>\r
+       <%elseif(skintype,member)%>\r
+               <a href="<%sitevar(url)%>"><%sitevar(name)%></a>\r
+       <%else%>\r
+               <a href="<%blogsetting(url)%>"><%blogsetting(name)%></a>\r
+       <%endif%>\r
+</h1>\r
+</div>\r
diff --git a/utf8/skins/default/inc/linklist.inc b/utf8/skins/default/inc/linklist.inc
new file mode 100644 (file)
index 0000000..927d6ce
--- /dev/null
@@ -0,0 +1,10 @@
+<dd><a href="http://nucleuscms.org" title="Nucleus CMS Home">nucleuscms.org(本家サイト)</a></dd>\r
+<dd><a href="http://japan.nucleuscms.org/" title="Nucleus CMS Japan Home">nucleuscms 日本公式</a></dd>\r
+<dd><a href="http://japan.nucleuscms.org/documentation/" title="Nucleus CMS Documentation">Nucleus管理マニュアル</a></dd>\r
+<dd><a href="http://japan.nucleuscms.org/bb/" title="Nucleus CMS Support Forum">Nucleus日本公式フォーラム</a></dd>\r
+<dd><a href="http://japan.nucleuscms.org/wiki/" title="Nucleus CMS Wiki">Nucleus日本公式wiki</a></dd>\r
+<dd><a href="http://skins.nucleuscms.org/" title="Nucleus CMS Skins">skins.nucleuscms.org</a></dd>\r
+<dd><a href="http://japan.nucleuscms.org/wiki/plugins" title="Nucleus CMS Plugins">Nucleusプラグイン紹介</a></dd>\r
+<dd><a href="http://japan.nucleuscms.org/documentation/devdocs/plugins.html" title="Nucleus CMS Plugins">プラグインを自作</a></dd>\r
+<dd><a href="http://dev.nucleuscms.org/" title="Nucleus Developer Network">dev.nucleuscms.org</a></dd>\r
+\r
diff --git a/utf8/skins/default/inc/navigation.inc b/utf8/skins/default/inc/navigation.inc
new file mode 100644 (file)
index 0000000..f317340
--- /dev/null
@@ -0,0 +1,59 @@
+<!-- navigation & page titles -->\r
+<%if(skintype,index)%>\r
+<!-- index: page title and extra navigational links -->\r
+<title><%blogsetting(name)%></title>\r
+<link rel="bookmark" title="Nucleus" href="http://nucleuscms.org/" />\r
+<link rel="archives" title="Archives" href="<%archivelink%>" />\r
+<link rel="top" title="Today" href="<%todaylink%>" />\r
+\r
+<%elseif(skintype,item)%>\r
+<!-- item: page title and extra navigational links -->\r
+<title><%itemtitle(attribute)%> &raquo; <%blogsetting(name)%></title>\r
+<link rel="archives" title="過去ログ" href="<%archivelink%>" />\r
+<link rel="top" title="今日の投稿" href="<%sitevar(url)%>" />\r
+<link rel="next" href="<%nextlink%>" title="次の記事" />\r
+<link rel="prev" href="<%prevlink%>" title="前の記事" />\r
+<link rel="up" href="<%todaylink%>" title="今日の投稿" />\r
+<meta name="robots" content="all,noodp,noydir" />\r
+\r
+<%elseif(skintype,archive)%>\r
+<!-- archive: page title and extra navigational links -->\r
+<title><%blogsetting(name)%> &raquo; 過去ログ</title>\r
+<link rel="archives" title="Archives" href="<%archivelink%>" />\r
+<link rel="top" title="Today" href="<%sitevar(url)%>" />\r
+<link rel="up" href="<%todaylink%>" title="Today" />\r
+<meta name="robots" content="all,noodp,noydir,NOINDEX,NOFOLLOW" />\r
+\r
+<%elseif(skintype,archivelist)%>\r
+<!-- archivelist: page title and extra navigational links -->\r
+<title><%blogsetting(name)%> &raquo; 過去ログリスト</title>\r
+<link rel="archives" title="Archives" href="<%archivelink%>" />\r
+<link rel="top" title="Today" href="<%sitevar(url)%>" />\r
+<link rel="up" href="<%todaylink%>" title="Today" />\r
+<meta name="robots" content="all,noodp,noydir,NOINDEX,NOFOLLOW" />\r
+\r
+<%elseif(skintype,error)%>\r
+<!-- error: page title and extra navigational links -->\r
+<title><%sitevar(name)%> &raquo; エラー!</title>\r
+<link rel="top" title="Today" href="<%todaylink%>" />\r
+<link rel="up" href="<%todaylink%>" title="Today" />\r
+<meta name="robots" content="all,noodp,noydir,NOINDEX,NOFOLLOW" />\r
+\r
+<%elseif(skintype,member)%>\r
+<!-- member: page title and extra navigational links -->\r
+<title><%blogsetting(name)%> &raquo; メンバー詳細</title>\r
+<link rel="top" title="Today" href="<%todaylink%>" />\r
+<link rel="up" href="<%todaylink%>" title="Today" />\r
+<meta name="robots" content="all,noodp,noydir,NOINDEX,NOFOLLOW" />\r
+\r
+<%elseif(skintype,search)%>\r
+<!-- search: page title and extra navigational links -->\r
+<title><%blogsetting(name)%> &raquo; 検索</title>\r
+<link rel="archives" title="過去ログ" href="<%archivelink%>" />\r
+<link rel="top" title="Today" href="<%sitevar(url)%>" />\r
+<link rel="up" href="<%todaylink%>" title="Today" />\r
+<%endif%>\r
+\r
+<%if(loggedin)%>\r
+<script type="text/javascript" src="<%adminurl%>javascript/edit.js"></script>\r
+<%endif%>\r
diff --git a/utf8/skins/default/inc/show_benchmark.inc b/utf8/skins/default/inc/show_benchmark.inc
new file mode 100644 (file)
index 0000000..5a991c4
--- /dev/null
@@ -0,0 +1,15 @@
+<?php\r
+if (!function_exists('getmtime'))\r
+{\r
+  function getmtime()\r
+  {\r
+    $a = explode (' ', microtime());\r
+    return(double) $a[0] + $a[1];\r
+  }\r
+}\r
+\r
+  global $StartTime, $SQLCount;\r
+  $loadtime = getmtime() - $StartTime;\r
+  $var = mb_convert_encoding("%.3f 秒/%d クエリ", _CHARSET, 'UTF-8');\r
+  printf($var, $loadtime, $SQLCount);\r
+?>\r
diff --git a/utf8/skins/default/inc/sidebar.inc b/utf8/skins/default/inc/sidebar.inc
new file mode 100644 (file)
index 0000000..96a2b61
--- /dev/null
@@ -0,0 +1,111 @@
+<!-- page menu -->\r
+<div class="sidebar">\r
+<dl class="sidebardl">\r
+<dt>ナビゲーション</dt>\r
+\r
+<%if(skintype,archive)%>\r
+<!-- archive: navigation -->\r
+<dd><a href="<%prevlink%>" title="前の月">前の<%archivetype%></a></dd>\r
+<dd><a href="<%nextlink%>" title="次の月">次の<%archivetype%></a></dd>\r
+<dd><a href="<%todaylink%>" title="今日の登録">最新の投稿</a></dd>\r
+<dd><a href="<%archivelink%>" title="過去の投稿">過去の投稿</a></dd>\r
+\r
+<%elseif(skintype,archivelist)%>\r
+<!-- archivelist: navigation -->\r
+<dd><a href="<%todaylink%>" title="最新の投稿">最新の投稿</a></dd>\r
+<dd><a href="<%archivelink%>" title="過去の投稿">過去の投稿</a></dd>\r
+\r
+<%elseif(skintype,error)%>\r
+<!-- error: navigation -->\r
+<dd><a href="<%todaylink%>" title="最新の投稿">最新の投稿</a></dd>\r
+\r
+<%elseif(skintype,index)%>\r
+<!-- index: navigation -->\r
+<dd><a href="<%todaylink%>" title="最新の投稿">最新の投稿</a></dd>\r
+<dd><a href="<%archivelink%>" title="過去の投稿">過去の投稿</a></dd>\r
+\r
+<!-- item: navigation -->\r
+<%elseif(skintype,item)%>\r
+<%if(previtem)%><dd><a href="<%prevlink%>" title="前の投稿">前の投稿</a></dd><%endif%>\r
+<%if(nextitem)%><dd><a href="<%nextlink%>" title="次の投稿">次の投稿</a></dd><%endif%>\r
+<dd><a href="<%todaylink%>" title="最新順の投稿一覧">最新順の投稿一覧</a></dd>\r
+<dd><a href="<%archivelink%>" title="過去の投稿">過去の投稿一覧</a></dd>\r
+\r
+<!-- member: navigation -->\r
+<%elseif(skintype,member)%>\r
+<dd><a href="<%todaylink%>" title="最新の投稿">最新の投稿</a></dd>\r
+\r
+<!-- search: navigation -->\r
+<%elseif(skintype,search)%>\r
+<dd><a href="<%todaylink%>" title="最新の投稿">最新の投稿</a></dd>\r
+<dd><a href="<%archivelink%>" title="過去の投稿">過去の投稿</a></dd>\r
+<%endif%>\r
+\r
+<%if(loggedin)%>\r
+<!-- admin link, only visible if logged in -->\r
+<%if(skintype,index)%>\r
+<dd><a href="javascript:showedit();">クイック投稿</a></dd>\r
+<%endif%>\r
+<dd><a href="<%addlink%>" onclick="<%addpopupcode%>" title="ブログに記事を投稿(新規投稿ウィンドウが開きます)">新規投稿(ポップアップ)</a></dd>\r
+<dd><a href="<%adminurl%>" title="管理画面">管理画面</a></dd>\r
+<%endif%>\r
+</dl>\r
+</div>\r
+\r
+<%if(skintype,error)%>\r
+<%elseifnot(skintype,member)%>\r
+<!-- category list, not on error or member page -->\r
+<div class="sidebar">\r
+<dl class="sidebardl">\r
+<dt>カテゴリ</dt>\r
+<%categorylist(default/categorylist)%>\r
+</dl>\r
+</div>\r
+<%endif%>\r
+\r
+<!-- bloglist-->\r
+<div class="sidebar">\r
+<dl class="sidebardl">\r
+<dt>Blogs</dt>\r
+<%bloglist(default/bloglist)%>\r
+</dl>\r
+</div>\r
+\r
+<!-- search form -->\r
+<div class="sidebar">\r
+<dl class="sidebardl">\r
+<dt>検索</dt>\r
+<dd><%searchform%></dd>\r
+</dl>\r
+</div>\r
+\r
+<!-- login form -->\r
+<div class="sidebar">\r
+<dl class="sidebardl">\r
+<dt>ログイン</dt>\r
+<dd><%loginform%></dd>\r
+</dl>\r
+</div>\r
+\r
+<!-- links -->\r
+<div class="sidebar">\r
+<dl class="sidebardl">\r
+<dt>リンク</dt>\r
+<%parsedinclude(inc/linklist.inc)%>\r
+</dl>\r
+</div>\r
+\r
+<!-- Powered by -->\r
+<div class="sidebar">\r
+<div class="sidebardl centerize">\r
+<%nucleusbutton(images/nucleus.gif,85,31)%>\r
+</div>\r
+</div>\r
+\r
+<!-- benchimark -->\r
+<div class="sidebar">\r
+<dl class="sidebardl">\r
+<dt>ページ生成時間</dt>\r
+<dd><%phpinclude(inc/show_benchmark.inc)%></dd>\r
+</dl>\r
+</div>\r
diff --git a/utf8/skins/default/jlocal.css b/utf8/skins/default/jlocal.css
new file mode 100644 (file)
index 0000000..bc5966b
--- /dev/null
@@ -0,0 +1,17 @@
+/*-------------------------------------------------\r
+  the CSS piece for Nucleus Jp-local by Buzzlyhan and yamamoto\r
+-------------------------------------------------*/\r
+\r
+.contentbody{\r
+\r
+       line-height:1.6em;\r
+}\r
+\r
+#nucleus_cf_body,\r
+#nucleus_cf_name,\r
+#nucleus_cf_mail,\r
+#nucleus_cf_email,\r
+.formfield,\r
+.formbutton{\r
+       display:block;\r
+}\r
diff --git a/utf8/skins/default/nicetitle.css b/utf8/skins/default/nicetitle.css
new file mode 100644 (file)
index 0000000..47ed54c
--- /dev/null
@@ -0,0 +1,32 @@
+/*Nice Titles*/
+div.nicetitle {
+       font-weight: bold;
+       color: #3C3C3C;
+    font-size: 12px;
+       text-align: left;
+       background: white;
+       position: absolute;
+       left: 0;
+       top: 0;
+       border: 1px solid #999;
+       padding: 5px;
+       opacity: 0.9;
+       width: 25em;
+       z-index: 20;
+       max-width: 50%;
+
+}
+div.nicetitle p{
+       margin: 0;
+       line-height: 120%;
+       letter-spacing:1px;
+}
+div.nicetitle p.destination {
+       font-weight: normal;
+       font-size: 12px;
+       color: #5E7743;
+       letter-spacing:0;
+}
+div.nicetitle p span.accesskey {
+       color: #FF7200;
+}
\ No newline at end of file
diff --git a/utf8/skins/default/nicetitle.js b/utf8/skins/default/nicetitle.js
new file mode 100644 (file)
index 0000000..3661cbb
--- /dev/null
@@ -0,0 +1,217 @@
+addEvent(window, "load", makeNiceTitles);\r
+\r
+var XHTMLNS = "http://www.w3.org/1999/xhtml";\r
+var CURRENT_NICE_TITLE;\r
+var browser = new Browser();\r
+\r
+function makeNiceTitles() {\r
+    if (!document.createElement || !document.getElementsByTagName) return;\r
+    // add namespace methods to HTML DOM; this makes the script work in both\r
+    // HTML and XML contexts.\r
+    if(!document.createElementNS)\r
+    {\r
+        document.createElementNS = function(ns,elt) {\r
+            return document.createElement(elt);\r
+        }\r
+    }\r
+\r
+    if( !document.links )\r
+    {\r
+        document.links = document.getElementsByTagName("a");\r
+    }\r
+    for (var ti=0;ti<document.links.length;ti++) {\r
+        var lnk = document.links[ti];\r
+        if (lnk.title) {\r
+            lnk.setAttribute("nicetitle",lnk.title);\r
+            lnk.removeAttribute("title");\r
+            addEvent(lnk,"mouseover",showNiceTitle);\r
+            addEvent(lnk,"mouseout",hideNiceTitle);\r
+            addEvent(lnk,"focus",showNiceTitle);\r
+            addEvent(lnk,"blur",hideNiceTitle);\r
+        }\r
+    }\r
+    var instags = document.getElementsByTagName("ins");\r
+    if (instags) {\r
+    for (var ti=0;ti<instags.length;ti++) {\r
+        var instag = instags[ti];\r
+        if (instag.dateTime) {\r
+            var strDate = instag.dateTime;\r
+            var dtIns = new Date(strDate.substring(0,4),parseInt(strDate.substring(4,6)-1),strDate.substring(6,8),strDate.substring(9,11),strDate.substring(11,13),strDate.substring(13,15));\r
+            instag.setAttribute("nicetitle","Added on "+dtIns.toString());\r
+            addEvent(instag,"mouseover",showNiceTitle);\r
+            addEvent(instag,"mouseout",hideNiceTitle);\r
+            addEvent(instag,"focus",showNiceTitle);\r
+            addEvent(instag,"blur",hideNiceTitle);\r
+        }\r
+    }\r
+    }\r
+}\r
+\r
+function findPosition( oLink ) {\r
+  if( oLink.offsetParent ) {\r
+    for( var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent ) {\r
+      posX += oLink.offsetLeft;\r
+      posY += oLink.offsetTop;\r
+    }\r
+    return [ posX, posY ];\r
+  } else {\r
+    return [ oLink.x, oLink.y ];\r
+  }\r
+}\r
+\r
+function showNiceTitle(e) {\r
+    if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE);\r
+    if (!document.getElementsByTagName) return;\r
+    if (window.event && window.event.srcElement) {\r
+        lnk = window.event.srcElement\r
+    } else if (e && e.target) {\r
+        lnk = e.target\r
+    }\r
+    if (!lnk) return;\r
+    if (lnk.nodeName.toUpperCase() != 'A') {\r
+        // lnk is not actually the link -- ascend parents until we hit a link\r
+        lnk = getParent(lnk,"A");\r
+    }\r
+    if (!lnk) return;\r
+    nicetitle = lnk.getAttribute("nicetitle");\r
+    \r
+    var d = document.createElementNS(XHTMLNS,"div");\r
+    d.className = "nicetitle";\r
+    tnt = document.createTextNode(nicetitle);\r
+    pat = document.createElementNS(XHTMLNS,"p");\r
+    pat.className = "titletext";\r
+    pat.appendChild(tnt);\r
+    d.appendChild(pat);\r
+    if (lnk.href) {\r
+        tnd = document.createTextNode(lnk.href);\r
+        pad = document.createElementNS(XHTMLNS,"p");\r
+        pad.className = "destination";\r
+        pad.appendChild(tnd);\r
+        d.appendChild(pad);\r
+    }\r
+    \r
+    STD_WIDTH = 300;\r
+    if (lnk.href) {\r
+        h = lnk.href.length;\r
+    } else { h = nicetitle.length; }\r
+    if (nicetitle.length) {\r
+      t = nicetitle.length;\r
+    }\r
+    h_pixels = h*6; t_pixels = t*10;\r
+    \r
+    if (h_pixels > STD_WIDTH) {\r
+        w = h_pixels;\r
+    } else if ((STD_WIDTH>t_pixels) && (t_pixels>h_pixels)) {\r
+        w = t_pixels;\r
+    } else if ((STD_WIDTH>t_pixels) && (h_pixels>t_pixels)) {\r
+        w = h_pixels;\r
+    } else {\r
+        w = STD_WIDTH;\r
+    }\r
+        \r
+    d.style.width = w + 'px';    \r
+\r
+    /*\r
+    mx = lnk.offsetLeft;\r
+    my = lnk.offsetTop;\r
+    */\r
+    mpos = findPosition(lnk);\r
+    mx = mpos[0];\r
+    my = mpos[1];\r
+    //xy = getMousePosition(e);\r
+    //mx = xy[0]; my = xy[1];\r
+    \r
+    d.style.left = (mx+15) + 'px';\r
+    d.style.top = (my+35) + 'px';\r
+    if (window.innerWidth && ((mx+w) > window.innerWidth)) {\r
+        d.style.left = (window.innerWidth - w - 25) + "px";\r
+    }\r
+    if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth)) {\r
+        d.style.left = (document.body.scrollWidth - w - 25) + "px";\r
+    }\r
+    \r
+    document.getElementsByTagName("body")[0].appendChild(d);\r
+    \r
+    CURRENT_NICE_TITLE = d;\r
+}\r
+\r
+function hideNiceTitle(e) {\r
+    if (!document.getElementsByTagName) return;\r
+    if (CURRENT_NICE_TITLE) {\r
+        document.getElementsByTagName("body")[0].removeChild(CURRENT_NICE_TITLE);\r
+        CURRENT_NICE_TITLE = null;\r
+    }\r
+}\r
+\r
+// Add an eventListener to browsers that can do it somehow.\r
+// Originally by the amazing Scott Andrew.\r
+function addEvent(obj, evType, fn){\r
+  if (obj.addEventListener){\r
+    obj.addEventListener(evType, fn, false);\r
+    return true;\r
+  } else if (obj.attachEvent){\r
+       var r = obj.attachEvent("on"+evType, fn);\r
+    return r;\r
+  } else {\r
+       return false;\r
+  }\r
+}\r
+\r
+function getParent(el, pTagName) {\r
+       if (el == null) return null;\r
+       else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())        // Gecko bug, supposed to be uppercase\r
+               return el;\r
+       else\r
+               return getParent(el.parentNode, pTagName);\r
+}\r
+\r
+function getMousePosition(event) {\r
+  if (browser.isIE) {\r
+    x = window.event.clientX + document.documentElement.scrollLeft\r
+      + document.body.scrollLeft;\r
+    y = window.event.clientY + document.documentElement.scrollTop\r
+      + document.body.scrollTop;\r
+  }\r
+  if (browser.isNS) {\r
+    x = event.clientX + window.scrollX;\r
+    y = event.clientY + window.scrollY;\r
+  }\r
+  return [x,y];\r
+}\r
+\r
+// Determine browser and version.\r
+\r
+function Browser() {\r
+// blah, browser detect, but mouse-position stuff doesn't work any other way\r
+  var ua, s, i;\r
+\r
+  this.isIE    = false;\r
+  this.isNS    = false;\r
+  this.version = null;\r
+\r
+  ua = navigator.userAgent;\r
+\r
+  s = "MSIE";\r
+  if ((i = ua.indexOf(s)) >= 0) {\r
+    this.isIE = true;\r
+    this.version = parseFloat(ua.substr(i + s.length));\r
+    return;\r
+  }\r
+\r
+  s = "Netscape6/";\r
+  if ((i = ua.indexOf(s)) >= 0) {\r
+    this.isNS = true;\r
+    this.version = parseFloat(ua.substr(i + s.length));\r
+    return;\r
+  }\r
+\r
+  // Treat any other "Gecko" browser as NS 6.1.\r
+\r
+  s = "Gecko";\r
+  if ((i = ua.indexOf(s)) >= 0) {\r
+    this.isNS = true;\r
+    this.version = 6.1;\r
+    return;\r
+  }\r
+}\r
+\r
diff --git a/utf8/skins/default/preview-large.png b/utf8/skins/default/preview-large.png
new file mode 100644 (file)
index 0000000..d21326b
Binary files /dev/null and b/utf8/skins/default/preview-large.png differ
diff --git a/utf8/skins/default/preview.png b/utf8/skins/default/preview.png
new file mode 100644 (file)
index 0000000..441da35
Binary files /dev/null and b/utf8/skins/default/preview.png differ
diff --git a/utf8/skins/default/readme.html b/utf8/skins/default/readme.html
new file mode 100644 (file)
index 0000000..d1feae6
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Nucleus CMS 3.51 - default skin</title>
+<link rel="stylesheet" type="text/css" href="../../nucleus/styles/manual.css" />
+
+</head>
+
+<body>
+<h1>Nucleus CMS 3.51 - 標準スキン(日本語版)</h1>
+<p>Default Nucleus CMS 3.51 skin based on the Stanch skin contributed by <a href="http://www.stanch.net/">Stanch</a> with assistance from <a href="http://roelg.nl/">roel</a>.</p>
+<p>Default skin's skin/templates/includes tweaked by <a href="http://nupusi.com/">hcgtv</a>, CSS color scheme by <a href="http://smalltalking.com/">moraes</a>.</p>
+<p>This skin has been tested on major modern browsers, such as Firefox 1.0, Internet Explorer 6.0, Opera 7.54 and Netscape 7.2. The skin is coded using valid XHTML 1.0 and valid CSS.</p>
+<p>If you want drop shadow effect for your images when you blog, you have to add 3 div's surrounding the image. Start with &lt;div class="wrap1"&gt;, followed by &lt;div class="wrap2"&gt;, and then &lt;div class="wrap3"&gt;. Remember to close them with &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;. Please note also that the drop shadow has float:left style applied to it.</p>
+<p>On the comments page, you will notice that the owner (Nucleus administrator) has a different kind of styling to his/her comments, as opposed to the comments made by visitors. This is made possible using CSS. I have included short comments in the CSS file, I'm sure it is easy to understand, in case you want to remove this styling or you want to add styling for different members.</p>
+
+<h2>Defaultスキンファイル</h2>
+<ul>
+<li>default_left.css - <span xml:lang="ja" class="CRHTML_TXN" lang="ja">左側メニューCSSコード、head.incで変更できます。</span></li>
+<li>default_right.css - <span xml:lang="ja" class="CRHTML_TXN" lang="ja">右側メニューCSSコード、head.incで初期に設定されているCSSファイルです。</span></li>
+<li>skinbackup.xml - <span xml:lang="ja" class="CRHTML_TXN" lang="ja">デフォルトスキンのバックアップです。読込/書出より読み込むことができます。</span></li>
+<li>/images - <span xml:lang="ja" class="CRHTML_TXN" lang="ja">イメージ、 背景、ヘッダ、フッタ、その他イメージ</span></li>
+</ul>
+
+<p>このスキンは以下のファイルを読込み組み立てられます。</p>
+<ul>
+<li>head.inc - html ヘッダー</li>
+<li>navigation.inc - ナビゲーション、ページタイトル</li>
+<li>header.inc - ページヘッダー</li>
+<li>sidebar.inc - ページメニュー</li>
+<li>footer.inc - ページフッター</li>
+</ul>
+
+<p>その他のファイル:</p>
+<ul>
+<li>nicetitles.js - linkタグのtitle=""属性によって動作するツールチップのjavascriptコード</li>
+<li>nicetitle.css - ツールチップの色とレイアウト設定</li>
+<li>jlocal.css - 日本語スタイリングのためのCSSファイル</li>
+<li>favicon.ico - <span xml:lang="ja" class="CRHTML_TXN" lang="ja">サンプルのお気に入りアイコン、サイトのルートディレクトリへコピー</span></li>
+</ul>
+
+<p>ファイルのメンテナンスのために<a href="http://japan.nucleuscms.org/wiki/plugins:skinfiles">NP_SkinFiles</a>が含まれます。</p>
+<p>注意:NP_SkinFiles使用のためには /skins/default ディレクトリのパーミッションを777に、/skins/default ディレクトリ内のincファイルのパーミッションを666に設定してください。</p>
+<p>Tooltips courtesy of <a href="http://neo.dzygn.com/code/nicetitles">NiceTitles</a></p>
+
+<h1>Nucleus CMS 3.3 - to stop the flow of tears</h1>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/utf8/skins/default/skinbackup.xml b/utf8/skins/default/skinbackup.xml
new file mode 100644 (file)
index 0000000..f5f74da
--- /dev/null
@@ -0,0 +1,817 @@
+<nucleusskin>
+       <meta>
+               <skin name="default" />
+               <template name="default/index" />
+               <template name="default/item" />
+               <template name="default/categorylist" />
+               <template name="default/archivelist" />
+               <template name="default/commentlist" />
+               <template name="default/searchlist" />
+               <template name="default/bloglist" />
+               <info><![CDATA[日本語版デフォルトスキン データベースバージョン。
+*.inc ファイルをスペシャルスキンパーツ化したバージョンです。
+<%parsedinclude%>でスペシャルスキンパーツを読み込んで、スキン内のパーツとして使用できます。
+*.incファイルを使用したバージョンは、同じディレクトリにある「skinbackup.xml.org」をリネームして読み込むことで使用できるようになります。]]></info>
+       </meta>
+
+
+       <skin name="default" type="text/html" includeMode="skindir" includePrefix="default/">
+               <description>Nucleus CMS default skin (日本語版)</description>
+               <part name="additemform"><![CDATA[<%if(loggedin)%>
+<div id="edit" style="display:none;">
+<div class="contenttitle">
+<h2>新規投稿</h2></div>
+<div class="contentbody">
+<%additemform%></div>
+</div>
+<%endif%>]]></part>
+
+               <part name="archive"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(head)%>
+<%parsedinclude(navigation)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(header)%>
+<!-- begin wrapper divs -->
+<div id="mainwrapper"><div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<div class="contenttitle">
+<h2>過去の投稿</h2>
+</div>
+<%archivedate(%Y年%m月)%> の投稿一覧です。
+</div>
+<div class="content">
+<%archive(default/index)%>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">Sidebar</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(sidebar)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div></div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(footer)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="archivelist"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(head)%>
+<%parsedinclude(navigation)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(header)%>
+<!-- begin wrapper divs -->
+<div id="mainwrapper">
+<div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<div class="contenttitle">
+<h2>過去の投稿</h2>
+</div>
+<dl>
+<dt>月別の投稿</dt>
+<%archivelist(default/archivelist)%>
+</dl>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(sidebar)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div>
+</div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(footer)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="error"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(head)%>
+<%parsedinclude(navigation)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(header)%>
+
+<!-- begin wrapper divs -->
+<div id="mainwrapper">
+<div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<div class="contenttitle">
+<h2>エラーです</h2>
+</div>
+<%errormessage%><br /><br />
+<a href="<%referer%>">戻る</a>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(sidebar)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div>
+</div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(footer)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="footer"><![CDATA[<div id="copyrights">
+       <small>Copyright | <a href="http://nucleuscms.org"><%version%></a> | 
+       <a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0 Strict</a> | 
+       <a href="http://jigsaw.w3.org/css-validator/">Valid CSS</a> | 
+       <a href="#top">ページの先頭に戻る</a></small>
+</div>]]></part>
+
+               <part name="head"><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=<%charset%>" />
+<%phpinclude(benchmark)%>
+
+<!-- meta information for search engines -->
+<meta name="generator" content="<%version%>" />
+<meta name="name" content="<%blogsetting(name)%>" />
+<meta name="description" content="<%blogsetting(desc)%>" />
+
+<!-- prevent caching (削除してもかまいません) -->
+<meta http-equiv="Pragma" content="no-cache" />
+<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
+<meta http-equiv="Expires" content="-1" />
+
+<!-- site stylesheet (site colors and layout definitions:サイドバー左用) -->
+<link rel="stylesheet" type="text/css" href="<%skinfile(default_left.css)%>" title="left bar" />
+<!-- site stylesheet (site colors and layout definitions:サイドバー右用) -->
+<link rel="alternate stylesheet" type="text/css" href="<%skinfile(default_right.css)%>" title="right bar" />
+
+<!-- site stylesheet ADDED (some adjustment) -->
+<link rel="stylesheet" type="text/css" href="<%skinfile(jlocal.css)%>" />
+
+<!-- tooltips & stylesheet (activated by title="" on links) -->
+<link rel="stylesheet" type="text/css" href="<%skinfile(nicetitle.css)%>" />
+<script type="text/javascript" src="<%skinfile(nicetitle.js)%>"></script>
+
+<!-- ATOM support --> 
+<link rel="alternate" type="application/atom+xml" title="ATOM" href="atom.php" /> 
+
+<!-- RSS 2.0 feed -->
+<link rel="alternate" type="application/rss+xml" title="RSS" href="<%sitevar(url)%>xml-rss2.php" />
+
+<!-- favorite icon -->
+<link rel="shortcut icon" href="<%skinfile(favicon.ico)%>" />
+<link rel="icon" href="<%skinfile(favicon.ico)%>" />]]></part>
+
+               <part name="header"><![CDATA[<!-- page header -->
+<div id="header"><a name="top"></a>
+<h1>
+       <%if(skintype,error)%>
+               <a href="<%sitevar(url)%>"><%sitevar(name)%></a>
+       <%elseif(skintype,member)%>
+               <a href="<%sitevar(url)%>"><%sitevar(name)%></a>
+       <%else%>
+               <a href="<%blogsetting(url)%>"><%blogsetting(name)%></a>
+       <%endif%>
+</h1>
+</div>]]></part>
+
+               <part name="imagepopup"><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title><%imagetext%></title>
+<style type="text/css">
+img { border: none; }
+body { margin: 0px; }
+</style>
+</head>
+
+<!-- image content -->
+<body onblur="window.close()">
+<a href="javascript:window.close();"><%image%></a>
+</body>
+
+</html>]]></part>
+
+               <part name="index"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(head)%>
+<%parsedinclude(navigation)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(header)%>
+
+<!-- begin wrapper divs -->
+<div id="mainwrapper"><div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<%parsedinclude(additemform)%>
+<%blog(default/index,10)%>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(sidebar)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div></div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(footer)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="item"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(head)%>
+<%parsedinclude(navigation)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(header)%>
+
+<!-- begin wrapper divs -->
+<div id="mainwrapper"><div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<%item(default/item)%>
+</div>
+
+<%comments(default/commentlist)%>
+
+<div class="content">
+<div class="contenttitle">
+<h2>コメントを書く</h2>
+</div>
+<%commentform%>
+</div>
+
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(sidebar)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div></div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(footer)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="linklist"><![CDATA[<dd><a href="http://nucleuscms.org" title="Nucleus CMS Home">nucleuscms.org(本家サイト)</a></dd>
+<dd><a href="http://japan.nucleuscms.org/" title="Nucleus CMS Japan Home">nucleuscms 日本公式</a></dd>
+<dd><a href="http://japan.nucleuscms.org/documentation/" title="Nucleus CMS Documentation">Nucleus管理マニュアル</a></dd>
+<dd><a href="http://japan.nucleuscms.org/bb/" title="Nucleus CMS Support Forum">Nucleus日本公式フォーラム</a></dd>
+<dd><a href="http://japan.nucleuscms.org/wiki/" title="Nucleus CMS Wiki">Nucleus日本公式wiki</a></dd>
+<dd><a href="http://skins.nucleuscms.org/" title="Nucleus CMS Skins">skins.nucleuscms.org</a></dd>
+<dd><a href="http://japan.nucleuscms.org/wiki/plugins" title="Nucleus CMS Plugins">Nucleusプラグイン紹介</a></dd>
+<dd><a href="http://japan.nucleuscms.org/documentation/devdocs/plugins.html" title="Nucleus CMS Plugins">プラグインを自作</a></dd>
+<dd><a href="http://dev.nucleuscms.org/" title="Nucleus Developer Network">dev.nucleuscms.org</a></dd>]]></part>
+
+               <part name="member"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(head)%>
+<%parsedinclude(navigation)%>
+</head>
+
+<!-- page header -->
+<%parsedinclude(header)%>
+<!-- begin wrapper divs -->
+<div id="mainwrapper">
+<div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<div class="contenttitle">
+<h2>投稿者「<%member(name)%>」の情報</h2>
+</div>
+本名: <%member(realname)%>
+<br /><br />
+WEBサイト: <a href="<%member(url)%>"><%member(url)%></a>
+</div>
+<div class="content">
+<div class="contenttitle">
+<h2>メッセージを送る</h2>
+</div>
+<%membermailform%>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(sidebar)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div>
+</div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(footer)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="navigation"><![CDATA[<!-- navigation & page titles -->
+<%if(skintype,index)%>
+<!-- index: page title and extra navigational links -->
+<title><%blogsetting(name)%></title>
+<link rel="bookmark" title="Nucleus" href="http://nucleuscms.org/" />
+<link rel="archives" title="Archives" href="<%archivelink%>" />
+<link rel="top" title="Today" href="<%todaylink%>" />
+
+<%elseif(skintype,item)%>
+<!-- item: page title and extra navigational links -->
+<title><%itemtitle(attribute)%> &raquo; <%blogsetting(name)%></title>
+<link rel="archives" title="過去ログ" href="<%archivelink%>" />
+<link rel="top" title="今日の投稿" href="<%sitevar(url)%>" />
+<link rel="next" href="<%nextlink%>" title="次の記事" />
+<link rel="prev" href="<%prevlink%>" title="前の記事" />
+<link rel="up" href="<%todaylink%>" title="今日の投稿" />
+<meta name="robots" content="all,noodp,noydir" />
+
+<%elseif(skintype,archive)%>
+<!-- archive: page title and extra navigational links -->
+<title><%blogsetting(name)%> &raquo; 過去ログ</title>
+<link rel="archives" title="Archives" href="<%archivelink%>" />
+<link rel="top" title="Today" href="<%sitevar(url)%>" />
+<link rel="up" href="<%todaylink%>" title="Today" />
+<meta name="robots" content="all,noodp,noydir,NOINDEX,NOFOLLOW" />
+
+<%elseif(skintype,archivelist)%>
+<!-- archivelist: page title and extra navigational links -->
+<title><%blogsetting(name)%> &raquo; 過去ログリスト</title>
+<link rel="archives" title="Archives" href="<%archivelink%>" />
+<link rel="top" title="Today" href="<%sitevar(url)%>" />
+<link rel="up" href="<%todaylink%>" title="Today" />
+<meta name="robots" content="all,noodp,noydir,NOINDEX,NOFOLLOW" />
+
+<%elseif(skintype,error)%>
+<!-- error: page title and extra navigational links -->
+<title><%sitevar(name)%> &raquo; エラー!</title>
+<link rel="top" title="Today" href="<%todaylink%>" />
+<link rel="up" href="<%todaylink%>" title="Today" />
+<meta name="robots" content="all,noodp,noydir,NOINDEX,NOFOLLOW" />
+
+<%elseif(skintype,member)%>
+<!-- member: page title and extra navigational links -->
+<title><%blogsetting(name)%> &raquo; メンバー詳細</title>
+<link rel="top" title="Today" href="<%todaylink%>" />
+<link rel="up" href="<%todaylink%>" title="Today" />
+<meta name="robots" content="all,noodp,noydir,NOINDEX,NOFOLLOW" />
+
+<%elseif(skintype,search)%>
+<!-- search: page title and extra navigational links -->
+<title><%blogsetting(name)%> &raquo; 検索</title>
+<link rel="archives" title="過去ログ" href="<%archivelink%>" />
+<link rel="top" title="Today" href="<%sitevar(url)%>" />
+<link rel="up" href="<%todaylink%>" title="Today" />
+<%endif%>
+
+<%if(loggedin)%>
+<script type="text/javascript" src="<%adminurl%>javascript/edit.js"></script>
+<%endif%>]]></part>
+
+               <part name="search"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(head)%>
+<%parsedinclude(navigation)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(header)%>
+<!-- begin wrapper divs -->
+<div id="mainwrapper">
+<div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<div class="contenttitle">
+<h2>検索結果</h2>
+</div>
+<%searchform%>
+</div>
+<div class="content">
+<%searchresults(default/searchlist)%>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(sidebar)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div>
+</div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(footer)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="sidebar"><![CDATA[<!-- page menu -->
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>ナビゲーション</dt>
+
+<%if(skintype,archive)%>
+<!-- archive: navigation -->
+<dd><a href="<%prevlink%>" title="前の月">前の<%archivetype%></a></dd>
+<dd><a href="<%nextlink%>" title="次の月">次の<%archivetype%></a></dd>
+<dd><a href="<%todaylink%>" title="今日の登録">最新の投稿</a></dd>
+<dd><a href="<%archivelink%>" title="過去の投稿">過去の投稿</a></dd>
+
+<%elseif(skintype,archivelist)%>
+<!-- archivelist: navigation -->
+<dd><a href="<%todaylink%>" title="最新の投稿">最新の投稿</a></dd>
+<dd><a href="<%archivelink%>" title="過去の投稿">過去の投稿</a></dd>
+
+<%elseif(skintype,error)%>
+<!-- error: navigation -->
+<dd><a href="<%todaylink%>" title="最新の投稿">最新の投稿</a></dd>
+
+<%elseif(skintype,index)%>
+<!-- index: navigation -->
+<dd><a href="<%todaylink%>" title="最新の投稿">最新の投稿</a></dd>
+<dd><a href="<%archivelink%>" title="過去の投稿">過去の投稿</a></dd>
+
+<!-- item: navigation -->
+<%elseif(skintype,item)%>
+<%if(previtem)%><dd><a href="<%prevlink%>" title="前の投稿">前の投稿</a></dd><%endif%>
+<%if(nextitem)%><dd><a href="<%nextlink%>" title="次の投稿">次の投稿</a></dd><%endif%>
+<dd><a href="<%todaylink%>" title="最新順の投稿一覧">最新順の投稿一覧</a></dd>
+<dd><a href="<%archivelink%>" title="過去の投稿">過去の投稿一覧</a></dd>
+
+<!-- member: navigation -->
+<%elseif(skintype,member)%>
+<dd><a href="<%todaylink%>" title="最新の投稿">最新の投稿</a></dd>
+
+<!-- search: navigation -->
+<%elseif(skintype,search)%>
+<dd><a href="<%todaylink%>" title="最新の投稿">最新の投稿</a></dd>
+<dd><a href="<%archivelink%>" title="過去の投稿">過去の投稿</a></dd>
+<%endif%>
+
+<%if(loggedin)%>
+<!-- admin link, only visible if logged in -->
+<%if(skintype,index)%>
+<dd><a href="javascript:showedit();">クイック投稿</a></dd>
+<%endif%>
+<dd><a href="<%addlink%>" onclick="<%addpopupcode%>" title="ブログに記事を投稿(新規投稿ウィンドウが開きます)">新規投稿(ポップアップ)</a></dd>
+<dd><a href="<%adminurl%>" title="管理画面">管理画面</a></dd>
+<%endif%>
+</dl>
+</div>
+
+<%if(skintype,error)%>
+<%elseifnot(skintype,member)%>
+<!-- category list, not on error or member page -->
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>カテゴリ</dt>
+<%categorylist(default/categorylist)%>
+</dl>
+</div>
+<%endif%>
+
+<!-- bloglist-->
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>Blogs</dt>
+<%bloglist(default/bloglist)%>
+</dl>
+</div>
+
+<!-- search form -->
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>検索</dt>
+<dd><%searchform%></dd>
+</dl>
+</div>
+
+<!-- login form -->
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>ログイン</dt>
+<dd><%loginform%></dd>
+</dl>
+</div>
+
+<!-- links -->
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>リンク</dt>
+<%parsedinclude(linklist)%>
+</dl>
+</div>
+
+<!-- Powered by -->
+<div class="sidebar">
+<div class="sidebardl centerize">
+<%nucleusbutton(images/nucleus.gif,85,31)%>
+</div>
+</div>
+
+<!-- benchimark -->
+<div class="sidebar">
+<dl class="sidebardl">
+<dt>ページ生成時間</dt>
+<dd><%phpinclude(inc/show_benchmark.inc)%></dd>
+</dl>
+</div>]]></part>
+
+       </skin>
+
+
+       <template name="default/index">
+               <description>defaultスキン用 index テンプレート</description>
+               <part name="COMMENTS_NONE"><![CDATA[<div class="contentitem3">
+<small class="contentitemcomments">
+<a href="<%itemlink%>#c" rel="bookmark" title="&#39;<%itemtitle(attribute)%>&#39; にコメントをつける">コメントを書く</a>
+</small>
+</div>]]></part>
+
+               <part name="COMMENTS_TOOMUCH"><![CDATA[<div class="contentitem3">
+<small class="contentitemcomments">
+<a href="<%itemlink%>#c" rel="bookmark" title="&#39;<%itemtitle(attribute)%>&#39; にコメントを書く">コメント数 <%commentcount%></a>
+</small>
+</div>]]></part>
+
+               <part name="EDITLINK"><![CDATA[<div class="contentitem4">
+<small class="contentitemedit">
+<a href="<%editlink%>" title="投稿を編集" onclick="<%editpopupcode%>" >投稿を編集</a>
+</small>
+</div>]]></part>
+
+               <part name="IMAGE_CODE"><![CDATA[<%image%>]]></part>
+
+               <part name="ITEM"><![CDATA[<div class="contenttitle">
+<h2><a href="<%itemlink%>" title="投稿を読む: <%title(attribute)%>"><%title%> (<%date(%Y/%m/%d)%>)</a></h2>
+</div>
+<div class="contentitem">
+<div class="contentitem1">
+<small class="contentitemcategory">
+カテゴリー: <a href="<%categorylink%>" title="カテゴリー: <%Category%>"><%Category%></a>
+</small>
+</div>
+<div class="contentitem2">
+<small class="contentitempostedby">
+投稿者: <a href="<%authorlink%>" title="投稿者: <%author%>"><%author%></a>
+</small>
+</div>
+<%comments%>
+<%edit%>
+</div>
+<div class="contentbody">
+<%body%>
+<%morelink%>
+</div>]]></part>
+
+               <part name="MEDIA_CODE"><![CDATA[<%media%>]]></part>
+
+               <part name="MORELINK"><![CDATA[<p>&raquo;
+<a href="<%itemlink%>#more" title="&#39;<%title%>&#39; の続きを読む">続きを読む</a>
+</p>]]></part>
+
+               <part name="POPUP_CODE"><![CDATA[<%popuplink%>]]></part>
+
+       </template>
+
+
+       <template name="default/item">
+               <description>defaultスキン用 itemテンプレート</description>
+               <part name="EDITLINK"><![CDATA[<div class="contentitem4">
+<small class="contentitemedit">
+<a href="<%editlink%>" title="投稿を編集" onclick="<%editpopupcode%>" >投稿を編集</a>
+</small>
+</div>]]></part>
+
+               <part name="IMAGE_CODE"><![CDATA[<%image%>]]></part>
+
+               <part name="ITEM"><![CDATA[<div class="contenttitle">
+<h2><%title%> (<%date(%Y/%m/%d)%>)</h2>
+</div>
+<div class="contentitem">
+<div class="contentitem1">
+<small class="contentitemcategory">
+カテゴリー: <a href="<%categorylink%>" title="カテゴリー: <%category%>"><%category%></a>
+</small>
+</div>
+<div class="contentitem2">
+<small class="contentitempostedby">
+投稿者: <a href="<%authorlink%>" title="投稿者: <%author%>"><%author%></a>
+</small>
+</div>
+<%edit%>
+</div>
+<div class="contentbody">
+<%body%><br /><br />
+<a name="more"></a><%more%>
+</div>]]></part>
+
+               <part name="MEDIA_CODE"><![CDATA[<%media%>]]></part>
+
+               <part name="POPUP_CODE"><![CDATA[<%popuplink%>]]></part>
+
+       </template>
+
+
+       <template name="default/categorylist">
+               <description>defaultスキン用カテゴリーリスト(サイドバー)</description>
+               <part name="CATLIST_HEADER"><![CDATA[<dd>
+<a href="<%blogurl%>" title="全てのカテゴリー">全てのカテゴリー</a>
+</dd>]]></part>
+
+               <part name="CATLIST_LISTITEM"><![CDATA[<dd>
+<a href="<%catlink%>" title="カテゴリー: <%catname%>"><%catname%></a>
+</dd>]]></part>
+
+       </template>
+
+
+       <template name="default/archivelist">
+               <description>defaultスキン用アーカイブリスト(月別アーカイブの一覧)</description>
+               <part name="ARCHIVELIST_LISTITEM"><![CDATA[<dd>
+<a href="<%archivelink%>" title="過去の投稿 %Y年%m月">%Y年%m月</a>
+</dd>]]></part>
+
+       </template>
+
+
+       <template name="default/commentlist">
+               <description>defaultスキン用コメントリスト(個別アイテム内)</description>
+               <part name="COMMENTS_BODY"><![CDATA[<div class="itemcomment id<%memberid%>">
+<h3><a href="<%userlinkraw%>"
+title="<%user%>さんにメールを送るかサイトを訪れる。">
+<%user%></a>さんのコメント</h3>
+<div class="commentbody">
+<%body%>
+</div>
+<div class="commentinfo">
+<%date%> <%time%>
+</div>
+</div>
+]]></part>
+
+               <part name="COMMENTS_FOOTER"><![CDATA[</div>
+
+]]></part>
+
+               <part name="COMMENTS_HEADER"><![CDATA[<a name="c"></a>
+<div class="content">
+<div class="contenttitle">
+<h2>コメント一覧</h2>
+</div>
+
+]]></part>
+
+               <part name="COMMENTS_NONE"><![CDATA[<a name="c"></a>
+
+]]></part>
+
+       </template>
+
+
+       <template name="default/searchlist">
+               <description>defaultスキン用検索結果一覧テンプレート</description>
+               <part name="COMMENTS_NONE"><![CDATA[<div class="contentitem3">
+<small class="contentitemcomments">
+<a href="<%itemlink%>#c" rel="bookmark" title="&#39;<%itemtitle(attribute)%>&#39; にコメントをつける">コメントを書く</a>
+</small>
+</div>]]></part>
+
+               <part name="COMMENTS_TOOMUCH"><![CDATA[<div class="contentitem3">
+<small class="contentitemcomments">
+<a href="<%itemlink%>#c" rel="bookmark" title="&#39;<%itemtitle(attribute)%>&#39; にコメントを書く">コメント数 <%commentcount%></a>
+</small>
+</div>]]></part>
+
+               <part name="EDITLINK"><![CDATA[<div class="contentitem4">
+<small class="contentitemedit">
+<a href="<%editlink%>" title="投稿を編集" onclick="<%editpopupcode%>" >投稿を編集</a>
+</small>
+</div>]]></part>
+
+               <part name="IMAGE_CODE"><![CDATA[<%image%>]]></part>
+
+               <part name="ITEM"><![CDATA[<div class="contenttitle">
+<h2><a href="<%itemlink%>" title="投稿を読む: <%title(attribute)%>"><%title%> (<%date(%Y/%m/%d)%>)</a></h2>
+</div>
+<div class="contentitem">
+<div class="contentitem1">
+<small class="contentitemcategory">
+カテゴリー: <a href="<%categorylink%>" title="カテゴリー: <%Category%>"><%Category%></a>
+</small>
+</div>
+<div class="contentitem2">
+<small class="contentitempostedby">
+投稿者: <a href="<%authorlink%>" title="投稿者: <%author%>"><%author%></a>
+</small>
+</div>
+<%comments%>
+<%edit%>
+</div>
+<div class="contentbody">
+<%body%>
+<%morelink%>
+</div>]]></part>
+
+               <part name="MEDIA_CODE"><![CDATA[<%media%>]]></part>
+
+               <part name="MORELINK"><![CDATA[<p>&raquo;
+<a href="<%itemlink%>#more" title="&#39;<%title%>&#39; の続きを読む">続きを読む</a>
+</p>]]></part>
+
+               <part name="POPUP_CODE"><![CDATA[<%popuplink%>]]></part>
+
+               <part name="SEARCH_HIGHLIGHT"><![CDATA[<span class='highlight'>\0</span>]]></part>
+
+               <part name="SEARCH_NOTHINGFOUND"><![CDATA[キーワード<b><%query%></b>は見つかりませんでした。]]></part>
+
+       </template>
+
+
+       <template name="default/bloglist">
+               <description>defaultスキン用ブログリスト(サイドバー)</description>
+               <part name="BLOGLIST_LISTITEM"><![CDATA[<dd>
+<a href="<%bloglink%>" title="ブログ: <%blogname%>"><%blogname%></a>
+</dd>]]></part>
+
+       </template>
+
+
+</nucleusskin>
\ No newline at end of file
diff --git a/utf8/skins/default/skinbackup.xml.org b/utf8/skins/default/skinbackup.xml.org
new file mode 100644 (file)
index 0000000..d44b219
--- /dev/null
@@ -0,0 +1,568 @@
+<nucleusskin>
+       <meta>
+               <skin name="default" />
+               <template name="default/index" />
+               <template name="default/item" />
+               <template name="default/categorylist" />
+               <template name="default/archivelist" />
+               <template name="default/commentlist" />
+               <template name="default/searchlist" />
+               <template name="default/bloglist" />
+               <info><![CDATA[Nucleus CMS default skin (日本語版)]]></info>
+       </meta>
+
+
+       <skin name="default" type="text/html" includeMode="skindir" includePrefix="default/">
+               <description>Nucleus CMS default skin (日本語版)</description>
+               <part name="archive"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(inc/head.inc)%>
+<%parsedinclude(inc/navigation.inc)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(inc/header.inc)%>
+<!-- begin wrapper divs -->
+<div id="mainwrapper"><div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<div class="contenttitle">
+<h2>過去の投稿</h2>
+</div>
+<%archivedate(%Y年%m月)%> の投稿一覧です。
+</div>
+<div class="content">
+<%archive(default/index)%>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">Sidebar</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(inc/sidebar.inc)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div></div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(inc/footer.inc)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="archivelist"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(inc/head.inc)%>
+<%parsedinclude(inc/navigation.inc)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(inc/header.inc)%>
+<!-- begin wrapper divs -->
+<div id="mainwrapper">
+<div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<div class="contenttitle">
+<h2>過去の投稿</h2>
+</div>
+<dl>
+<dt>月別の投稿</dt>
+<%archivelist(default/archivelist)%>
+</dl>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(inc/sidebar.inc)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div>
+</div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(inc/footer.inc)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="error"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(inc/head.inc)%>
+<%parsedinclude(inc/navigation.inc)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(inc/header.inc)%>
+
+<!-- begin wrapper divs -->
+<div id="mainwrapper">
+<div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<div class="contenttitle">
+<h2>エラーです</h2>
+</div>
+<%errormessage%><br /><br />
+<a href="<%referer%>">戻る</a>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(inc/sidebar.inc)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div>
+</div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(inc/footer.inc)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="imagepopup"><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title><%imagetext%></title>
+<style type="text/css">
+img { border: none; }
+body { margin: 0px; }
+</style>
+</head>
+
+<!-- image content -->
+<body onblur="window.close()">
+<a href="javascript:window.close();"><%image%></a>
+</body>
+
+</html>]]></part>
+
+               <part name="index"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(inc/head.inc)%>
+<%parsedinclude(inc/navigation.inc)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(inc/header.inc)%>
+
+<!-- begin wrapper divs -->
+<div id="mainwrapper"><div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<%parsedinclude(inc/additemform.inc)%>
+<%blog(default/index,10)%>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(inc/sidebar.inc)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div></div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(inc/footer.inc)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="item"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(inc/head.inc)%>
+<%parsedinclude(inc/navigation.inc)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(inc/header.inc)%>
+
+<!-- begin wrapper divs -->
+<div id="mainwrapper"><div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<%item(default/item)%>
+</div>
+
+<%comments(default/commentlist)%>
+
+<div class="content">
+<div class="contenttitle">
+<h2>コメントを書く</h2>
+</div>
+<%commentform%>
+</div>
+
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(inc/sidebar.inc)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div></div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(inc/footer.inc)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="member"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(inc/head.inc)%>
+<%parsedinclude(inc/navigation.inc)%>
+</head>
+
+<!-- page header -->
+<%parsedinclude(inc/header.inc)%>
+<!-- begin wrapper divs -->
+<div id="mainwrapper">
+<div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<div class="contenttitle">
+<h2>投稿者「<%member(name)%>」の情報</h2>
+</div>
+本名: <%member(realname)%>
+<br /><br />
+WEBサイト: <a href="<%member(url)%>"><%member(url)%></a>
+</div>
+<div class="content">
+<div class="contenttitle">
+<h2>メッセージを送る</h2>
+</div>
+<%membermailform%>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(inc/sidebar.inc)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div>
+</div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(inc/footer.inc)%>
+</div>
+
+</body>
+</html>]]></part>
+
+               <part name="search"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-JP" lang="ja-JP">
+<head>
+<%parsedinclude(inc/head.inc)%>
+<%parsedinclude(inc/navigation.inc)%>
+</head>
+<body>
+<!-- page header -->
+<%parsedinclude(inc/header.inc)%>
+<!-- begin wrapper divs -->
+<div id="mainwrapper">
+<div id="wrapper">
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+<div class="contenttitle">
+<h2>検索結果</h2>
+</div>
+<%searchform%>
+</div>
+<div class="content">
+<%searchresults(default/searchlist)%>
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">サイドバー</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(inc/sidebar.inc)%>
+</div>
+
+<div class="clearing">&nbsp;</div>
+</div>
+</div>
+<!-- end wrapper divs -->
+
+<!-- page footer, copyrights, etc. -->
+<div id="footer">
+<%parsedinclude(inc/footer.inc)%>
+</div>
+
+</body>
+</html>]]></part>
+
+       </skin>
+
+
+       <template name="default/index">
+               <description>defaultスキン用 index テンプレート</description>
+               <part name="COMMENTS_NONE"><![CDATA[<div class="contentitem3">
+<small class="contentitemcomments">
+<a href="<%itemlink%>#c" rel="bookmark" title="&#39;<%itemtitle(attribute)%>&#39; にコメントをつける">コメントを書く</a>
+</small>
+</div>]]></part>
+
+               <part name="COMMENTS_TOOMUCH"><![CDATA[<div class="contentitem3">
+<small class="contentitemcomments">
+<a href="<%itemlink%>#c" rel="bookmark" title="&#39;<%itemtitle(attribute)%>&#39; にコメントを書く">コメント数 <%commentcount%></a>
+</small>
+</div>]]></part>
+
+               <part name="EDITLINK"><![CDATA[<div class="contentitem4">
+<small class="contentitemedit">
+<a href="<%editlink%>" title="投稿を編集" onclick="<%editpopupcode%>" >投稿を編集</a>
+</small>
+</div>]]></part>
+
+               <part name="IMAGE_CODE"><![CDATA[<%image%>]]></part>
+
+               <part name="ITEM"><![CDATA[<div class="contenttitle">
+<h2><a href="<%itemlink%>" title="投稿を読む: <%title(attribute)%>"><%title%> (<%date(%Y/%m/%d)%>)</a></h2>
+</div>
+<div class="contentitem">
+<div class="contentitem1">
+<small class="contentitemcategory">
+カテゴリー: <a href="<%categorylink%>" title="カテゴリー: <%Category%>"><%Category%></a>
+</small>
+</div>
+<div class="contentitem2">
+<small class="contentitempostedby">
+投稿者: <a href="<%authorlink%>" title="投稿者: <%author%>"><%author%></a>
+</small>
+</div>
+<%comments%>
+<%edit%>
+</div>
+<div class="contentbody">
+<%body%>
+<%morelink%>
+</div>]]></part>
+
+               <part name="MEDIA_CODE"><![CDATA[<%media%>]]></part>
+
+               <part name="MORELINK"><![CDATA[<p>&raquo;
+<a href="<%itemlink%>#more" title="&#39;<%title%>&#39; の続きを読む">続きを読む</a>
+</p>]]></part>
+
+               <part name="POPUP_CODE"><![CDATA[<%popuplink%>]]></part>
+
+       </template>
+
+
+       <template name="default/item">
+               <description>defaultスキン用 itemテンプレート</description>
+               <part name="EDITLINK"><![CDATA[<div class="contentitem4">
+<small class="contentitemedit">
+<a href="<%editlink%>" title="投稿を編集" onclick="<%editpopupcode%>" >投稿を編集</a>
+</small>
+</div>]]></part>
+
+               <part name="IMAGE_CODE"><![CDATA[<%image%>]]></part>
+
+               <part name="ITEM"><![CDATA[<div class="contenttitle">
+<h2><%title%> (<%date(%Y/%m/%d)%>)</h2>
+</div>
+<div class="contentitem">
+<div class="contentitem1">
+<small class="contentitemcategory">
+カテゴリー: <a href="<%categorylink%>" title="カテゴリー: <%category%>"><%category%></a>
+</small>
+</div>
+<div class="contentitem2">
+<small class="contentitempostedby">
+投稿者: <a href="<%authorlink%>" title="投稿者: <%author%>"><%author%></a>
+</small>
+</div>
+<%edit%>
+</div>
+<div class="contentbody">
+<%body%><br /><br />
+<a name="more"></a><%more%>
+</div>]]></part>
+
+               <part name="MEDIA_CODE"><![CDATA[<%media%>]]></part>
+
+               <part name="POPUP_CODE"><![CDATA[<%popuplink%>]]></part>
+
+       </template>
+
+
+       <template name="default/categorylist">
+               <description>defaultスキン用カテゴリーリスト(サイドバー)</description>
+               <part name="CATLIST_HEADER"><![CDATA[<dd>
+<a href="<%blogurl%>" title="全てのカテゴリー">全てのカテゴリー</a>
+</dd>]]></part>
+
+               <part name="CATLIST_LISTITEM"><![CDATA[<dd>
+<a href="<%catlink%>" title="カテゴリー: <%catname%>"><%catname%></a>
+</dd>]]></part>
+
+       </template>
+
+
+       <template name="default/archivelist">
+               <description>defaultスキン用アーカイブリスト(月別アーカイブの一覧)</description>
+               <part name="ARCHIVELIST_LISTITEM"><![CDATA[<dd>
+<a href="<%archivelink%>" title="過去の投稿 %Y年%m月">%Y年%m月</a>
+</dd>]]></part>
+
+       </template>
+
+
+       <template name="default/commentlist">
+               <description>defaultスキン用コメントリスト(個別アイテム内)</description>
+               <part name="COMMENTS_BODY"><![CDATA[<div class="itemcomment id<%memberid%>">
+<h3><a href="<%userlinkraw%>"
+title="<%user%>さんにメールを送るかサイトを訪れる。">
+<%user%></a>さんのコメント</h3>
+<div class="commentbody">
+<%body%>
+</div>
+<div class="commentinfo">
+<%date%> <%time%>
+</div>
+</div>
+]]></part>
+
+               <part name="COMMENTS_FOOTER"><![CDATA[</div>
+
+]]></part>
+
+               <part name="COMMENTS_HEADER"><![CDATA[<a name="c"></a>
+<div class="content">
+<div class="contenttitle">
+<h2>コメント一覧</h2>
+</div>
+
+]]></part>
+
+               <part name="COMMENTS_NONE"><![CDATA[<a name="c"></a>
+
+]]></part>
+
+       </template>
+
+
+       <template name="default/searchlist">
+               <description>defaultスキン用検索結果一覧テンプレート</description>
+               <part name="COMMENTS_NONE"><![CDATA[<div class="contentitem3">
+<small class="contentitemcomments">
+<a href="<%itemlink%>#c" rel="bookmark" title="&#39;<%itemtitle(attribute)%>&#39; にコメントをつける">コメントを書く</a>
+</small>
+</div>]]></part>
+
+               <part name="COMMENTS_TOOMUCH"><![CDATA[<div class="contentitem3">
+<small class="contentitemcomments">
+<a href="<%itemlink%>#c" rel="bookmark" title="&#39;<%itemtitle(attribute)%>&#39; にコメントを書く">コメント数 <%commentcount%></a>
+</small>
+</div>]]></part>
+
+               <part name="EDITLINK"><![CDATA[<div class="contentitem4">
+<small class="contentitemedit">
+<a href="<%editlink%>" title="投稿を編集" onclick="<%editpopupcode%>" >投稿を編集</a>
+</small>
+</div>]]></part>
+
+               <part name="IMAGE_CODE"><![CDATA[<%image%>]]></part>
+
+               <part name="ITEM"><![CDATA[<div class="contenttitle">
+<h2><a href="<%itemlink%>" title="投稿を読む: <%title(attribute)%>"><%title%> (<%date(%Y/%m/%d)%>)</a></h2>
+</div>
+<div class="contentitem">
+<div class="contentitem1">
+<small class="contentitemcategory">
+カテゴリー: <a href="<%categorylink%>" title="カテゴリー: <%Category%>"><%Category%></a>
+</small>
+</div>
+<div class="contentitem2">
+<small class="contentitempostedby">
+投稿者: <a href="<%authorlink%>" title="投稿者: <%author%>"><%author%></a>
+</small>
+</div>
+<%comments%>
+<%edit%>
+</div>
+<div class="contentbody">
+<%body%>
+<%morelink%>
+</div>]]></part>
+
+               <part name="MEDIA_CODE"><![CDATA[<%media%>]]></part>
+
+               <part name="MORELINK"><![CDATA[<p>&raquo;
+<a href="<%itemlink%>#more" title="&#39;<%title%>&#39; の続きを読む">続きを読む</a>
+</p>]]></part>
+
+               <part name="POPUP_CODE"><![CDATA[<%popuplink%>]]></part>
+
+               <part name="SEARCH_HIGHLIGHT"><![CDATA[<span class='highlight'>\0</span>]]></part>
+
+               <part name="SEARCH_NOTHINGFOUND"><![CDATA[キーワード<b><%query%></b>は見つかりませんでした。]]></part>
+
+       </template>
+
+
+       <template name="default/bloglist">
+               <description>defaultスキン用ブログリスト(サイドバー)</description>
+               <part name="BLOGLIST_LISTITEM"><![CDATA[<dd>
+<a href="<%bloglink%>" title="ブログ: <%blogname%>"><%blogname%></a>
+</dd>]]></part>
+
+       </template>
+
+
+</nucleusskin>
\ No newline at end of file
diff --git a/utf8/skins/readme.txt b/utf8/skins/readme.txt
new file mode 100755 (executable)
index 0000000..073d092
--- /dev/null
@@ -0,0 +1,12 @@
+Nucleus skins ディレクトリ
+-----------------------
+
+注意:このディレクトリ内(サブディレクトリを含む)にある、skinbackup.xml や skindata.xml 等のファイルを直接編集することは避けてください。
+         これらのファイルはユーザーに配布する為に、Nucleusの機能を使用して作成されています。
+
+         スキンを編集する時は、Nucleusの管理エリアで左のメニューから「スキン編集」を選択し、スキン編集画面へと進んでください。
+
+注意:このディレクトリの.htaccessファイルは、ディレクトリ内(サブディレクトリを含む)の .inc ファイルや .php ファイルに外部から直接アクセス
+         することを禁止する為のものです。
+         サーバの設定によっては、.htaccessに記述された内容が、意図したとおりに動作しないことがあります。
+         スキンの表示が壊れている時は、.htaccess ファイルを修正することで直ることがあります。
\ No newline at end of file
diff --git a/utf8/skins/rsd/skinbackup.xml b/utf8/skins/rsd/skinbackup.xml
new file mode 100755 (executable)
index 0000000..5799d6f
--- /dev/null
@@ -0,0 +1,27 @@
+<nucleusskin>
+       <meta>
+               <skin name="xml/rsd" />
+               <info><![CDATA[RSD (Really Simple Discovery) information for weblog clients]]></info>
+       </meta>
+
+       <skin name="xml/rsd" type="text/xml" includeMode="normal" includePrefix="">
+               <description>RSD (Really Simple Discovery) information for weblog clients</description>
+               <part name="index"><![CDATA[<?xml version="1.0"?>
+<rsd version="1.0">
+ <service>
+  <engineName><%version%></engineName>
+  <engineLink>http://nucleuscms.org/</engineLink>
+  <homepageLink><%sitevar(url)%></homepageLink>
+  <apis>
+   <api name="MetaWeblog" preferred="true" apiLink="<%adminurl%>xmlrpc/server.php" blogID="<%blogsetting(id)%>">
+    <docs>http://nucleuscms.org/documentation/devdocs/xmlrpc.html</docs>
+   </api>
+   <api name="Blogger" preferred="false" apiLink="<%adminurl%>xmlrpc/server.php" blogID="<%blogsetting(id)%>">
+    <docs>http://nucleuscms.org/documentation/devdocs/xmlrpc.html</docs>
+   </api>
+  </apis>
+ </service>
+</rsd>]]></part>
+       </skin>
+
+</nucleusskin>
diff --git a/utf8/skins/rss2.0/skinbackup.xml b/utf8/skins/rss2.0/skinbackup.xml
new file mode 100755 (executable)
index 0000000..5def2b2
--- /dev/null
@@ -0,0 +1,50 @@
+<nucleusskin>
+       <meta>
+               <skin name="feeds/rss20" />
+               <template name="feeds/rss20" />
+               <info><![CDATA[RSS 2.0 syndication of weblogs]]></info>
+       </meta>
+
+       <skin name="feeds/rss20" type="text/xml" includeMode="normal" includePrefix="">
+               <description>RSS 2.0 syndication of weblogs</description>
+               <part name="index"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0">
+  <channel>
+    <title><%blogsetting(name)%></title>
+    <link><%blogsetting(url)%></link>
+    <description><%blogsetting(desc)%></description>
+    <language>ja</language>
+    <generator><%version%></generator>
+    <copyright>&#169;</copyright>
+    <category>Weblog</category>
+    <docs>http://backend.userland.com/rss</docs>
+    <image>
+      <url><%adminurl%>nucleus2.gif</url>
+      <title><%blogsetting(name)%></title>
+      <link><%blogsetting(url)%></link>
+    </image>
+    <%blog(feeds/rss20,10)%>
+  </channel>
+</rss>]]></part>
+       </skin>
+
+       <template name="feeds/rss20">
+               <description>Used for RSS 2.0 syndication of your blog</description>
+               <part name="EDITLINK"><![CDATA[<a href="<%editlink%>" onclick="<%editpopupcode%>">edit</a>]]></part>
+               <part name="FORMAT_DATE"><![CDATA[%Y-%m-%d]]></part>
+               <part name="FORMAT_TIME"><![CDATA[%H:%M:%S]]></part>
+               <part name="ITEM"><![CDATA[<item>
+<title><![CDATA[<%title(xml)%>]]]]><![CDATA[></title>
+<link><%itemlink%></link>
+<description><![CDATA[<%body%><%more%>]]]]><![CDATA[></description>
+<category><%category%></category>
+<comments><%itemlink%></comments>
+<pubDate><%date(rfc822)%></pubDate>
+</item>]]></part>
+
+               <part name="IMAGE_CODE"><![CDATA[<%image%>]]></part>
+               <part name="MEDIA_CODE"><![CDATA[<%media%>]]></part>
+               <part name="POPUP_CODE"><![CDATA[<%media%>]]></part>
+
+       </template>
+</nucleusskin>
diff --git a/utf8/xml-rss2.php b/utf8/xml-rss2.php
new file mode 100755 (executable)
index 0000000..8ef8924
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2010 The Nucleus Group
+ *
+ * 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.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * Nucleus RSS syndication channel skin
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2010 The Nucleus Group
+ * @version $Id$
+ * $NucleusJP: xml-rss2.php,v 1.7 2006/07/17 19:59:46 kimitake Exp $
+ */
+
+header('Pragma: no-cache');
+
+$CONF = array();
+$CONF['Self'] = 'xml-rss2.php';
+
+include('./config.php');
+
+if (!$CONF['DisableSite']) {
+
+       // get feed into $feed
+       ob_start();
+       selectSkin('feeds/rss20');
+       selector();
+       $feed = ob_get_contents();
+       ob_end_clean();
+
+       // create ETAG (hash of feed)
+       // (HTTP_IF_NONE_MATCH has quotes around it)
+       $eTag = '"' . md5($feed) . '"';
+       header('Etag: ' . $eTag);
+
+       // compare Etag to what we got
+       if ($eTag == serverVar('HTTP_IF_NONE_MATCH') ) {
+               header('HTTP/1.0 304 Not Modified');
+               header('Content-Length: 0');
+       } else {
+               if (strtolower(_CHARSET) != 'utf-8') {
+                   $feed = mb_convert_encoding($feed, "UTF-8", _CHARSET);
+               }
+               header("Content-Type: application/xml");
+               // dump feed
+               echo $feed;
+       }
+
+} else {
+       // output empty RSS file...
+       // (because site is disabled)
+
+       echo '<' . '?xml version="1.0" encoding="' . _CHARSET . '"?' . '>';
+
+       ?>
+       <rss version="2.0">
+               <channel>
+                       <title><?php echo htmlspecialchars($CONF['SiteName']); ?></title>
+                       <link><?php echo htmlspecialchars($CONF['IndexURL']); ?></link>
+                       <description></description>
+                       <docs>http://backend.userland.com/rss</docs>
+               </channel>
+       </rss>
+       <?php
+}
+
+?>
\ No newline at end of file