Merge branch 'MDL-46063_master' of git://github.com/schach/moodle
authorDan Poltawski <dan@moodle.com>
Tue, 1 Jul 2014 16:29:14 +0000 (17:29 +0100)
committerDan Poltawski <dan@moodle.com>
Tue, 1 Jul 2014 16:29:14 +0000 (17:29 +0100)
150 files changed:
admin/cli/install.php
admin/roles/override.php
admin/tool/log/classes/helper/buffered_writer.php
admin/tool/log/store/database/tests/store_test.php
admin/tool/log/store/standard/tests/store_test.php
admin/tool/uploaduser/index.php
auth/cas/auth.php
auth/email/auth.php
auth/ldap/auth.php
auth/ldap/tests/plugin_test.php
backup/util/dbops/backup_controller_dbops.class.php
backup/util/helper/backup_cron_helper.class.php
badges/badge.php
badges/external.php
cache/stores/memcache/addinstanceform.php
cache/stores/memcache/lang/en/cachestore_memcache.php
cache/stores/memcache/lib.php
cache/stores/memcache/settings.php
cache/stores/memcache/tests/memcache_test.php
cache/stores/memcached/addinstanceform.php
cache/stores/memcached/lang/en/cachestore_memcached.php
cache/stores/memcached/lib.php
cache/stores/memcached/settings.php
cache/stores/memcached/tests/memcached_test.php
install.php
lib/authlib.php
lib/classes/event/user_created.php
lib/classes/event/user_updated.php
lib/classes/plugin_manager.php
lib/classes/session/manager.php
lib/db/install.xml
lib/db/upgrade.php
lib/dragmath/COPYRIGHT.html [deleted file]
lib/dragmath/README.html [deleted file]
lib/dragmath/Version History.html [deleted file]
lib/dragmath/applet/Config.xml [deleted file]
lib/dragmath/applet/Display/MainApplet.class [deleted file]
lib/dragmath/applet/DragMath.jar [deleted file]
lib/dragmath/applet/formats/ASCIIMathML.xml [deleted file]
lib/dragmath/applet/formats/Latex.xml [deleted file]
lib/dragmath/applet/formats/Maple.xml [deleted file]
lib/dragmath/applet/formats/MathML.xml [deleted file]
lib/dragmath/applet/formats/Maxima.xml [deleted file]
lib/dragmath/applet/formats/MoodleTex.xml [deleted file]
lib/dragmath/applet/formats/Tex.xml [deleted file]
lib/dragmath/applet/lang/ca.xml [deleted file]
lib/dragmath/applet/lang/cz.xml [deleted file]
lib/dragmath/applet/lang/de.xml [deleted file]
lib/dragmath/applet/lang/en.xml [deleted file]
lib/dragmath/applet/lang/es.xml [deleted file]
lib/dragmath/applet/lang/fa.xml [deleted file]
lib/dragmath/applet/lang/fi.xml [deleted file]
lib/dragmath/applet/lang/fr.xml [deleted file]
lib/dragmath/applet/lang/it.xml [deleted file]
lib/dragmath/applet/lang/nl.xml [deleted file]
lib/dragmath/applet/lang/no.xml [deleted file]
lib/dragmath/applet/lang/pl.xml [deleted file]
lib/dragmath/applet/lang/pt-br.xml [deleted file]
lib/dragmath/applet/lang/ru.xml [deleted file]
lib/dragmath/applet/lang/sv.xml [deleted file]
lib/dragmath/applet/lib/AbsoluteLayout.jar [deleted file]
lib/dragmath/applet/lib/jdom.jar [deleted file]
lib/dragmath/applet/lib/jep.jar [deleted file]
lib/dragmath/applet/lib/swing-layout-1.0.jar [deleted file]
lib/dragmath/doc/about.html [deleted file]
lib/dragmath/doc/acknowledgments.html [deleted file]
lib/dragmath/doc/browser.html [deleted file]
lib/dragmath/doc/complex.html [deleted file]
lib/dragmath/doc/cvs.html [deleted file]
lib/dragmath/doc/editing.html [deleted file]
lib/dragmath/doc/img/plus.jpg [deleted file]
lib/dragmath/doc/img/sin on box.jpg [deleted file]
lib/dragmath/doc/img/sin on plus.jpg [deleted file]
lib/dragmath/doc/img/sin.jpg [deleted file]
lib/dragmath/doc/index.html [deleted file]
lib/dragmath/doc/integrations.html [deleted file]
lib/dragmath/doc/language.html [deleted file]
lib/dragmath/doc/navframe.html [deleted file]
lib/dragmath/doc/newformat.html [deleted file]
lib/dragmath/doc/newobject.html [deleted file]
lib/dragmath/doc/options.html [deleted file]
lib/dragmath/doc/parameters.html [deleted file]
lib/dragmath/doc/simple.html [deleted file]
lib/dragmath/readme_moodle.txt [deleted file]
lib/editor/tinymce/db/upgrade.php
lib/editor/tinymce/plugins/dragmath/dragmath.php [deleted file]
lib/editor/tinymce/plugins/dragmath/lang/en/tinymce_dragmath.php [deleted file]
lib/editor/tinymce/plugins/dragmath/lib.php [deleted file]
lib/editor/tinymce/plugins/dragmath/pix/icon.png [deleted file]
lib/editor/tinymce/plugins/dragmath/settings.php [deleted file]
lib/editor/tinymce/plugins/dragmath/tinymce/editor_plugin.js [deleted file]
lib/editor/tinymce/plugins/dragmath/tinymce/img/dragmath.png [deleted file]
lib/editor/tinymce/plugins/dragmath/tinymce/js/dragmath.js [deleted file]
lib/editor/tinymce/plugins/dragmath/version.php [deleted file]
lib/editor/tinymce/upgrade.txt
lib/editor/tinymce/version.php
lib/moodlelib.php
lib/outputfactories.php
lib/outputrenderers.php
lib/phpunit/classes/util.php
lib/phpunit/tests/advanced_test.php
lib/sessionlib.php
lib/setup.php
lib/tests/behat/behat_hooks.php
lib/tests/fixtures/test_renderer_factory.php [new file with mode: 0644]
lib/tests/moodlelib_test.php
lib/tests/outputfactories_test.php [new file with mode: 0644]
lib/tests/session_manager_test.php
lib/tests/sessionlib_test.php [new file with mode: 0644]
lib/thirdpartylibs.xml
lib/upgrade.txt
login/change_password.php
login/lib.php
mod/assign/lib.php
mod/assign/tests/lib_test.php
mod/data/lib.php
mod/data/rsslib.php
mod/glossary/deleteentry.php
mod/glossary/rsslib.php
mod/quiz/attemptlib.php
mod/quiz/editlib.php
mod/quiz/review.php
mod/quiz/tests/attempt_test.php [new file with mode: 0644]
mod/survey/report.php
question/classes/bank/action_column_base.php [new file with mode: 0644]
question/classes/bank/checkbox_column.php [new file with mode: 0644]
question/classes/bank/column_base.php [new file with mode: 0644]
question/classes/bank/copy_action_column.php [new file with mode: 0644]
question/classes/bank/creator_name_column.php [new file with mode: 0644]
question/classes/bank/delete_action_column.php [new file with mode: 0644]
question/classes/bank/edit_action_column.php [new file with mode: 0644]
question/classes/bank/modifier_name_column.php [new file with mode: 0644]
question/classes/bank/preview_action_column.php [new file with mode: 0644]
question/classes/bank/question_name_column.php [new file with mode: 0644]
question/classes/bank/question_text_row.php [new file with mode: 0644]
question/classes/bank/question_type_column.php [new file with mode: 0644]
question/classes/bank/row_base.php [new file with mode: 0644]
question/classes/bank/search/category_condition.php
question/classes/bank/view.php [new file with mode: 0644]
question/edit.php
question/editlib.php
question/upgrade.txt
report/log/classes/table_log.php
theme/bootstrapbase/renderers/core_renderer.php
user/edit.php
user/editadvanced.php
user/externallib.php
user/lib.php
user/tests/userlib_test.php
version.php

index df61269..9bb207a 100644 (file)
@@ -201,17 +201,9 @@ if (defined('COMPONENT_CLASSLOADER')) {
 require($CFG->dirroot.'/version.php');
 $CFG->target_release = $release;
 
-$_SESSION = array();
-$_SESSION['SESSION'] = new stdClass();
-$_SESSION['SESSION']->lang = $CFG->lang;
-$_SESSION['USER'] = new stdClass();
-$_SESSION['USER']->id = 0;
-$_SESSION['USER']->mnethostid = 1;
-
+\core\session\manager::init_empty_session();
 global $SESSION;
 global $USER;
-$SESSION = &$_SESSION['SESSION'];
-$USER    = &$_SESSION['USER'];
 
 global $COURSE;
 $COURSE = new stdClass();
index ab80e69..1583fab 100644 (file)
@@ -139,7 +139,6 @@ if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey()) {
         array(
             'context' => $context,
             'objectid' => $roleid,
-            'courseid' => $courseid
         )
     );
 
index be588be..96cfd0c 100644 (file)
@@ -72,7 +72,7 @@ trait buffered_writer {
         $entry['other'] = serialize($entry['other']);
         $entry['origin'] = $PAGE->requestorigin;
         $entry['ip'] = $PAGE->requestip;
-        $entry['realuserid'] = \core\session\manager::is_loggedinas() ? $_SESSION['USER']->realuser : null;
+        $entry['realuserid'] = \core\session\manager::is_loggedinas() ? $GLOBALS['USER']->realuser : null;
 
         $this->buffer[] = $entry;
         $this->count++;
index 48e1b39..6157cac 100644 (file)
@@ -130,8 +130,7 @@ class logstore_database_store_testcase extends advanced_testcase {
             array('context' => context_module::instance($module2->cmid), 'other' => array('sample' => 6, 'xx' => 9)));
         $event2->trigger();
 
-        $_SESSION['SESSION'] = new \stdClass();
-        $this->setUser(0);
+        \core\session\manager::init_empty_session();
         $this->assertFalse(\core\session\manager::is_loggedinas());
 
         $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC');
index 5d25a2e..08d70d4 100644 (file)
@@ -95,8 +95,7 @@ class logstore_standard_store_testcase extends advanced_testcase {
         $event2->trigger();
         logstore_standard_restore::hack_executing(0);
 
-        $_SESSION['SESSION'] = new \stdClass();
-        $this->setUser(0);
+        \core\session\manager::init_empty_session();
         $this->assertFalse(\core\session\manager::is_loggedinas());
 
         $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC');
index a45cb47..b50156f 100644 (file)
@@ -669,7 +669,7 @@ if ($formdata = $mform2->is_cancelled()) {
 
             if ($doupdate or $existinguser->password !== $oldpw) {
                 // We want only users that were really updated.
-                user_update_user($existinguser, false);
+                user_update_user($existinguser, false, false);
 
                 $upt->track('status', $struserupdated);
                 $usersupdated++;
@@ -687,6 +687,9 @@ if ($formdata = $mform2->is_cancelled()) {
                     }
                 }
 
+                // Trigger event.
+                \core\event\user_updated::create_from_userid($existinguser->id)->trigger();
+
             } else {
                 // no user information changed
                 $upt->track('status', $struseruptodate);
@@ -800,7 +803,7 @@ if ($formdata = $mform2->is_cancelled()) {
                 $upt->track('password', '-', 'normal', false);
             }
 
-            $user->id = user_create_user($user, false);
+            $user->id = user_create_user($user, false, false);
             $upt->track('username', html_writer::link(new moodle_url('/user/profile.php', array('id'=>$user->id)), s($user->username)), 'normal', false);
 
             // pre-process custom profile menu fields data from csv file
@@ -815,6 +818,9 @@ if ($formdata = $mform2->is_cancelled()) {
                 set_user_preference('create_password', 1, $user);
             }
 
+            // Trigger event.
+            \core\event\user_created::create_from_userid($user->id)->trigger();
+
             $upt->track('status', $struseradded);
             $upt->track('id', $user->id, 'normal', false);
             $usersnew++;
index ff06a3a..6615b75 100644 (file)
@@ -162,19 +162,6 @@ class auth_plugin_cas extends auth_plugin_ldap {
         }
     }
 
-    /**
-     * Logout from the CAS
-     *
-     */
-    function prelogout_hook() {
-        global $CFG;
-
-        if (!empty($this->config->logoutcas)) {
-            $backurl = $CFG->wwwroot;
-            $this->connectCAS();
-            phpCAS::logoutWithURL($backurl);
-        }
-    }
 
     /**
      * Connect to the CAS (clientcas connection or proxycas connection)
@@ -510,4 +497,22 @@ class auth_plugin_cas extends auth_plugin_ldap {
             }
         }
     }
+
+    /**
+     * Post logout hook.
+     *
+     * Note: this method replace the prelogout_hook method to avoid redirect to CAS logout
+     * before the event userlogout being triggered.
+     *
+     * @param stdClass $user clone of USER object object before the user session was terminated
+     */
+    public function postlogout_hook($user) {
+        global $CFG;
+        // Only redirect to CAS logout if the user is logged as a CAS user.
+        if (!empty($this->config->logoutcas) && $user->auth == $this->authtype) {
+            $backurl = $CFG->wwwroot;
+            $this->connectCAS();
+            phpCAS::logoutWithRedirectService($backurl);
+        }
+    }
 }
index b071e32..2c36eab 100644 (file)
@@ -94,11 +94,14 @@ class auth_plugin_email extends auth_plugin_base {
             $user->calendartype = $CFG->calendartype;
         }
 
-        $user->id = user_create_user($user, false);
+        $user->id = user_create_user($user, false, false);
 
         // Save any custom profile field information.
         profile_save_data($user);
 
+        // Trigger event.
+        \core\event\user_created::create_from_userid($user->id)->trigger();
+
         if (! send_confirmation_email($user)) {
             print_error('auth_emailnoemail','auth_email');
         }
index 9004e26..cc1374e 100644 (file)
@@ -551,7 +551,7 @@ class auth_plugin_ldap extends auth_plugin_base {
             print_error('auth_ldap_create_error', 'auth_ldap');
         }
 
-        $user->id = user_create_user($user, false);
+        $user->id = user_create_user($user, false, false);
 
         // Save any custom profile field information
         profile_save_data($user);
@@ -564,6 +564,8 @@ class auth_plugin_ldap extends auth_plugin_base {
 
         $user = $DB->get_record('user', array('id'=>$user->id));
 
+        \core\event\user_created::create_from_userid($user->id)->trigger();
+
         if (! send_confirmation_email($user)) {
             print_error('noemail', 'auth_ldap');
         }
@@ -1027,7 +1029,7 @@ class auth_plugin_ldap extends auth_plugin_base {
                         }
                     }
                 }
-                user_update_user($newuser, false);
+                user_update_user($newuser, false, false);
             }
         } else {
             return false;
index 13cdcc0..7f0855e 100644 (file)
@@ -279,6 +279,143 @@ class auth_ldap_plugin_testcase extends advanced_testcase {
         $this->assertEventLegacyLogData($expectedlog, $event);
     }
 
+    /**
+     * Test logging in via LDAP calls a user_loggedin event.
+     */
+    public function test_ldap_user_signup() {
+        global $CFG, $DB;
+
+        // User to create.
+        $user = array(
+            'username' => 'usersignuptest1',
+            'password' => 'Moodle2014!',
+            'idnumber' => 'idsignuptest1',
+            'firstname' => 'First Name User Test 1',
+            'lastname' => 'Last Name User Test 1',
+            'middlename' => 'Middle Name User Test 1',
+            'lastnamephonetic' => '最後のお名前のテスト一号',
+            'firstnamephonetic' => 'お名前のテスト一号',
+            'alternatename' => 'Alternate Name User Test 1',
+            'email' => 'usersignuptest1@email.com',
+            'description' => 'This is a description for user 1',
+            'city' => 'Perth',
+            'country' => 'au',
+            'mnethostid' => $CFG->mnet_localhost_id,
+            'auth' => 'ldap'
+            );
+
+        if (!extension_loaded('ldap')) {
+            $this->markTestSkipped('LDAP extension is not loaded.');
+        }
+
+        $this->resetAfterTest();
+
+        require_once($CFG->dirroot.'/auth/ldap/auth.php');
+        require_once($CFG->libdir.'/ldaplib.php');
+
+        if (!defined('TEST_AUTH_LDAP_HOST_URL') or !defined('TEST_AUTH_LDAP_BIND_DN') or !defined('TEST_AUTH_LDAP_BIND_PW') or !defined('TEST_AUTH_LDAP_DOMAIN')) {
+            $this->markTestSkipped('External LDAP test server not configured.');
+        }
+
+        // Make sure we can connect the server.
+        $debuginfo = '';
+        if (!$connection = ldap_connect_moodle(TEST_AUTH_LDAP_HOST_URL, 3, 'rfc2307', TEST_AUTH_LDAP_BIND_DN, TEST_AUTH_LDAP_BIND_PW, LDAP_DEREF_NEVER, $debuginfo, false)) {
+            $this->markTestSkipped('Can not connect to LDAP test server: '.$debuginfo);
+        }
+
+        $this->enable_plugin();
+
+        // Create new empty test container.
+        $topdn = 'dc=moodletest,'.TEST_AUTH_LDAP_DOMAIN;
+
+        $this->recursive_delete($connection, TEST_AUTH_LDAP_DOMAIN, 'dc=moodletest');
+
+        $o = array();
+        $o['objectClass'] = array('dcObject', 'organizationalUnit');
+        $o['dc']         = 'moodletest';
+        $o['ou']         = 'MOODLETEST';
+        if (!ldap_add($connection, 'dc=moodletest,'.TEST_AUTH_LDAP_DOMAIN, $o)) {
+            $this->markTestSkipped('Can not create test LDAP container.');
+        }
+
+        // Create a few users.
+        $o = array();
+        $o['objectClass'] = array('organizationalUnit');
+        $o['ou']          = 'users';
+        ldap_add($connection, 'ou='.$o['ou'].','.$topdn, $o);
+
+        // Configure the plugin a bit.
+        set_config('host_url', TEST_AUTH_LDAP_HOST_URL, 'auth/ldap');
+        set_config('start_tls', 0, 'auth/ldap');
+        set_config('ldap_version', 3, 'auth/ldap');
+        set_config('ldapencoding', 'utf-8', 'auth/ldap');
+        set_config('pagesize', '2', 'auth/ldap');
+        set_config('bind_dn', TEST_AUTH_LDAP_BIND_DN, 'auth/ldap');
+        set_config('bind_pw', TEST_AUTH_LDAP_BIND_PW, 'auth/ldap');
+        set_config('user_type', 'rfc2307', 'auth/ldap');
+        set_config('contexts', 'ou=users,'.$topdn, 'auth/ldap');
+        set_config('search_sub', 0, 'auth/ldap');
+        set_config('opt_deref', LDAP_DEREF_NEVER, 'auth/ldap');
+        set_config('user_attribute', 'cn', 'auth/ldap');
+        set_config('memberattribute', 'memberuid', 'auth/ldap');
+        set_config('memberattribute_isdn', 0, 'auth/ldap');
+        set_config('creators', 'cn=creators,'.$topdn, 'auth/ldap');
+        set_config('removeuser', AUTH_REMOVEUSER_KEEP, 'auth/ldap');
+
+        set_config('field_map_email', 'mail', 'auth/ldap');
+        set_config('field_updatelocal_email', 'oncreate', 'auth/ldap');
+        set_config('field_updateremote_email', '0', 'auth/ldap');
+        set_config('field_lock_email', 'unlocked', 'auth/ldap');
+
+        set_config('field_map_firstname', 'givenName', 'auth/ldap');
+        set_config('field_updatelocal_firstname', 'oncreate', 'auth/ldap');
+        set_config('field_updateremote_firstname', '0', 'auth/ldap');
+        set_config('field_lock_firstname', 'unlocked', 'auth/ldap');
+
+        set_config('field_map_lastname', 'sn', 'auth/ldap');
+        set_config('field_updatelocal_lastname', 'oncreate', 'auth/ldap');
+        set_config('field_updateremote_lastname', '0', 'auth/ldap');
+        set_config('field_lock_lastname', 'unlocked', 'auth/ldap');
+        set_config('passtype', 'md5', 'auth/ldap');
+        set_config('create_context', 'ou=users,'.$topdn, 'auth/ldap');
+
+        $this->assertEquals(2, $DB->count_records('user'));
+        $this->assertEquals(0, $DB->count_records('role_assignments'));
+
+        /** @var auth_plugin_ldap $auth */
+        $auth = get_auth_plugin('ldap');
+
+        $sink = $this->redirectEvents();
+        $auth->user_signup((object)$user, false);
+        $this->assertDebuggingCalled('Not sending email due to $CFG->noemailever config setting');
+        $events = $sink->get_events();
+        $sink->close();
+
+        // Verify 2 events get generated.
+        $this->assertCount(2, $events);
+
+        // Get record from db.
+        $dbuser = $DB->get_record('user', array('username' => $user['username']));
+        $user['id'] = $dbuser->id;
+
+        // Last event is user_created.
+        $event = array_pop($events);
+        $this->assertInstanceOf('\core\event\user_created', $event);
+        $this->assertEquals($user['id'], $event->objectid);
+        $this->assertEquals('user_created', $event->get_legacy_eventname());
+        $this->assertEquals(context_user::instance($user['id']), $event->get_context());
+        $expectedlogdata = array(SITEID, 'user', 'add', '/view.php?id='.$event->objectid, fullname($dbuser));
+        $this->assertEventLegacyLogData($expectedlogdata, $event);
+
+        // First event is user_password_updated.
+        $event = array_pop($events);
+        $this->assertInstanceOf('\core\event\user_password_updated', $event);
+        $this->assertEventContextNotUsed($event);
+
+        // Delete user which we just created.
+        ldap_delete($connection, 'cn='.$user['username'].',ou=users,'.$topdn);
+    }
+
     protected function create_ldap_user($connection, $topdn, $i) {
         $o = array();
         $o['objectClass']   = array('inetOrgPerson', 'organizationalPerson', 'person', 'posixAccount');
index a6cfb55..41ff9d3 100644 (file)
@@ -547,7 +547,8 @@ abstract class backup_controller_dbops extends backup_dbops {
                 self::apply_general_config_defaults($controller);
                 break;
             case backup::MODE_AUTOMATED:
-                // TODO: Move the loading from automatic stuff to here
+                // Load the automated defaults.
+                self::apply_auto_config_defaults($controller);
                 break;
             default:
                 // Nothing to do for other modes (IMPORT/HUB...). Some day we
@@ -555,6 +556,43 @@ abstract class backup_controller_dbops extends backup_dbops {
         }
     }
 
+    /**
+     * Sets the controller settings default values from the automated backup config.
+     *
+     * @param backup_controller $controller
+     */
+    private static function apply_auto_config_defaults(backup_controller $controller) {
+        $settings = array(
+            // Config name                   => Setting name.
+            'backup_auto_users'              => 'users',
+            'backup_auto_role_assignments'   => 'role_assignments',
+            'backup_auto_activities'         => 'activities',
+            'backup_auto_blocks'             => 'blocks',
+            'backup_auto_filters'            => 'filters',
+            'backup_auto_comments'           => 'comments',
+            'backup_auto_badges'             => 'badges',
+            'backup_auto_userscompletion'    => 'userscompletion',
+            'backup_auto_logs'               => 'logs',
+            'backup_auto_histories'          => 'grade_histories',
+            'backup_auto_questionbank'       => 'questionbank'
+        );
+        $plan = $controller->get_plan();
+        foreach ($settings as $config => $settingname) {
+            $value = get_config('backup', $config);
+            if ($value === false) {
+                // The setting is not set.
+                $controller->log('Could not find a value for the config ' . $config, BACKUP::LOG_DEBUG);
+                continue;
+            }
+            if ($plan->setting_exists($settingname)) {
+                $setting = $plan->get_setting($settingname);
+                $setting->set_value($value);
+            } else {
+                $controller->log('Unknown setting: ' . $settingname, BACKUP::LOG_DEBUG);
+            }
+        }
+    }
+
     /**
      * Sets the controller settings default values from the backup config.
      *
@@ -583,6 +621,7 @@ abstract class backup_controller_dbops extends backup_dbops {
                 // Ignore this because the config has not been set. get_config
                 // returns false if a setting doesn't exist, '0' is returned when
                 // the configuration is set to false.
+                $controller->log('Could not find a value for the config ' . $config, BACKUP::LOG_DEBUG);
                 continue;
             }
             $locked = (get_config('backup', $config.'_locked') == true);
@@ -594,6 +633,8 @@ abstract class backup_controller_dbops extends backup_dbops {
                         $setting->set_status(base_setting::LOCKED_BY_CONFIG);
                     }
                 }
+            } else {
+                $controller->log('Unknown setting: ' . $setting, BACKUP::LOG_DEBUG);
             }
         }
     }
index b964b67..434059b 100644 (file)
@@ -381,27 +381,6 @@ abstract class backup_cron_automated_helper {
 
         try {
 
-            $settings = array(
-                'users' => 'backup_auto_users',
-                'role_assignments' => 'backup_auto_role_assignments',
-                'activities' => 'backup_auto_activities',
-                'blocks' => 'backup_auto_blocks',
-                'filters' => 'backup_auto_filters',
-                'comments' => 'backup_auto_comments',
-                'badges' => 'backup_auto_badges',
-                'completion_information' => 'backup_auto_userscompletion',
-                'logs' => 'backup_auto_logs',
-                'histories' => 'backup_auto_histories',
-                'questionbank' => 'backup_auto_questionbank'
-            );
-            foreach ($settings as $setting => $configsetting) {
-                if ($bc->get_plan()->setting_exists($setting)) {
-                    if (isset($config->{$configsetting})) {
-                        $bc->get_plan()->get_setting($setting)->set_value($config->{$configsetting});
-                    }
-                }
-            }
-
             // Set the default filename.
             $format = $bc->get_format();
             $type = $bc->get_type();
index c2f7a63..29f8cb4 100644 (file)
@@ -52,7 +52,16 @@ $PAGE->set_title(get_string('issuedbadge', 'badges'));
 if (isloggedin()) {
     $PAGE->set_heading($badge->badgeclass['name']);
     $PAGE->navbar->add($badge->badgeclass['name']);
-    $url = new moodle_url('/badges/mybadges.php');
+    if ($badge->recipient->id == $USER->id) {
+        $url = new moodle_url('/badges/mybadges.php');
+    } else {
+        $url = new moodle_url($CFG->wwwroot);
+    }
+    navigation_node::override_active_url($url);
+} else {
+    $PAGE->set_heading($badge->badgeclass['name']);
+    $PAGE->navbar->add($badge->badgeclass['name']);
+    $url = new moodle_url($CFG->wwwroot);
     navigation_node::override_active_url($url);
 }
 
index f18883b..1a9cee8 100644 (file)
@@ -82,6 +82,14 @@ $badge = new external_badge($badge, $userid);
 
 $PAGE->set_pagelayout('base');
 $PAGE->set_title(get_string('issuedbadge', 'badges'));
+$PAGE->set_heading(s($badge->issued->assertion->badge->name));
+$PAGE->navbar->add(s($badge->issued->assertion->badge->name));
+if (isloggedin() && $USER->id == $userid) {
+    $url = new moodle_url('/badges/mybadges.php');
+} else {
+    $url = new moodle_url($CFG->wwwroot);
+}
+navigation_node::override_active_url($url);
 
 echo $OUTPUT->header();
 
index eb7c999..9f8dc6c 100644 (file)
@@ -52,5 +52,49 @@ class cachestore_memcache_addinstance_form extends cachestore_addinstance_form {
         $form->setType('prefix', PARAM_TEXT); // We set to text but we have a rule to limit to alphanumext.
         $form->setDefault('prefix', 'mdl_');
         $form->addRule('prefix', get_string('prefixinvalid', 'cachestore_memcache'), 'regex', '#^[a-zA-Z0-9\-_]+$#');
+
+        $form->addElement('header', 'clusteredheader', get_string('clustered', 'cachestore_memcache'));
+
+        $form->addElement('checkbox', 'clustered', get_string('clustered', 'cachestore_memcache'));
+        $form->setDefault('checkbox', false);
+        $form->addHelpButton('clustered', 'clustered', 'cachestore_memcache');
+
+        $form->addElement('textarea', 'setservers', get_string('setservers', 'cachestore_memcache'),
+                array('cols' => 75, 'rows' => 5));
+        $form->addHelpButton('setservers', 'setservers', 'cachestore_memcache');
+        $form->disabledIf('setservers', 'clustered');
+        $form->setType('setservers', PARAM_RAW);
+    }
+
+    /**
+     * Perform minimal validation on the settings form.
+     *
+     * @param array $data
+     * @param array $files
+     */
+    public function validation($data, $files) {
+        $errors = parent::validation($data, $files);
+
+        if (isset($data['clustered']) && ($data['clustered'] == 1)) {
+            // Set servers is required with in cluster mode.
+            if (!isset($data['setservers']) || empty(trim($data['setservers']))) {
+                $errors['setservers'] = get_string('required');
+            }
+
+            $validservers = false;
+            if (isset($data['servers'])) {
+                $servers = trim($data['servers']);
+                $servers = explode("\n", $servers);
+                if (count($servers) === 1) {
+                    $validservers = true;
+                }
+            }
+
+            if (!$validservers) {
+                $errors['servers'] = get_string('serversclusterinvalid', 'cachestore_memcache');
+            }
+        }
+
+        return $errors;
     }
 }
\ No newline at end of file
index fb87d28..78d3947 100644 (file)
 
 defined('MOODLE_INTERNAL') || die();
 
+$string['clustered'] = 'Enable clustered servers';
+$string['clustered_help'] = 'This is used to allow read-one, set-multi functionality.
+
+The intended use case is to create an improved store for load-balanced configurations. The store will fetch from one server (usually localhost), but set to many (all the servers in the load-balance pool). For caches with very high read to set ratios, this saves a significant amount of network overhead.
+
+When this setting is enabled, the server listed above will be used for fetching.';
+$string['clusteredheader'] = 'Split servers';
 $string['pluginname'] = 'Memcache';
 $string['prefix'] = 'Key prefix';
 $string['prefix_help'] = 'This prefix is used for all key names on the memcache server.
@@ -42,6 +49,20 @@ For example:
 server.url.com
 ipaddress:port
 servername:port:weight
+</pre>
+
+If *Enable clustered servers* is enabled below, there must be only one server listed here. This would usually be a name that always resolves to the local manchine, like 127.0.0.1 or localhost.';
+$string['serversclusterinvalid'] = 'Exactly one server is required when clustering is enabled.';
+$string['setservers'] = 'Set Servers';
+$string['setservers_help'] = 'This is the list of servers that will updated when data is modified in the cache. Generally the fully qualified name of each server in the pool.
+It **must** include the server listed in *Servers* above, even if by a different hostname.
+Servers should be defined one per line and consist of a server address and optionally a port.
+If no port is provided then the default port (11211) is used.
+
+For example:
+<pre>
+server.url.com
+ipaddress:port
 </pre>';
 $string['testservers'] = 'Test servers';
 $string['testservers_desc'] = 'The test servers get used for unit tests and for performance tests. It is entirely optional to set up test servers. Servers should be defined one per line and consist of a server address and optionally a port and weight.
index 42db75b..3a7da5f 100644 (file)
@@ -87,6 +87,24 @@ class cachestore_memcache extends cache_store implements cache_is_configurable {
      */
     protected $definition;
 
+    /**
+     * Set to true when this store is clustered.
+     * @var bool
+     */
+    protected $clustered = false;
+
+    /**
+     * Array of servers to set when in clustered mode.
+     * @var array
+     */
+    protected $setservers = array();
+
+    /**
+     * The an array of memcache connections for the set servers, once established.
+     * @var array
+     */
+    protected $setconnections = array();
+
     /**
      * Default prefix for key names.
      * @var string
@@ -123,6 +141,30 @@ class cachestore_memcache extends cache_store implements cache_is_configurable {
             }
             $this->servers[] = $server;
         }
+
+        $this->clustered = array_key_exists('clustered', $configuration) ? (bool)$configuration['clustered'] : false;
+
+        if ($this->clustered) {
+            if (!array_key_exists('setservers', $configuration) || (count($configuration['setservers']) < 1)) {
+                // Can't setup clustering without set servers.
+                return;
+            }
+            if (count($this->servers) !== 1) {
+                // Can only setup cluster with exactly 1 get server.
+                return;
+            }
+            foreach ($configuration['setservers'] as $server) {
+                // We do not use weights (3rd part) on these servers.
+                if (!is_array($server)) {
+                    $server = explode(':', $server, 3);
+                }
+                if (!array_key_exists(1, $server)) {
+                    $server[1] = 11211;
+                }
+                $this->setservers[] = $server;
+            }
+        }
+
         if (empty($configuration['prefix'])) {
             $this->prefix = self::DEFAULT_PREFIX;
         } else {
@@ -133,6 +175,16 @@ class cachestore_memcache extends cache_store implements cache_is_configurable {
         foreach ($this->servers as $server) {
             $this->connection->addServer($server[0], (int) $server[1], true, (int) $server[2]);
         }
+
+        if ($this->clustered) {
+            foreach ($this->setservers as $setserver) {
+                // Since we will have a number of them with the same name, append server and port.
+                $connection = new Memcache;
+                $connection->addServer($setserver[0], $setserver[1]);
+                $this->setconnections[] = $connection;
+            }
+        }
+
         // Test the connection to the pool of servers.
         $this->isready = @$this->connection->set($this->parse_key('ping'), 'ping', MEMCACHE_COMPRESSED, 1);
     }
@@ -280,6 +332,15 @@ class cachestore_memcache extends cache_store implements cache_is_configurable {
      * @return bool True if the operation was a success false otherwise.
      */
     public function set($key, $data) {
+        if ($this->clustered) {
+            $status = true;
+            foreach ($this->setconnections as $connection) {
+                $status = $connection->set($this->parse_key($key), $data, MEMCACHE_COMPRESSED, $this->definition->get_ttl())
+                        && $status;
+            }
+            return $status;
+        }
+
         return $this->connection->set($this->parse_key($key), $data, MEMCACHE_COMPRESSED, $this->definition->get_ttl());
     }
 
@@ -294,7 +355,7 @@ class cachestore_memcache extends cache_store implements cache_is_configurable {
     public function set_many(array $keyvaluearray) {
         $count = 0;
         foreach ($keyvaluearray as $pair) {
-            if ($this->connection->set($this->parse_key($pair['key']), $pair['value'], MEMCACHE_COMPRESSED, $this->definition->get_ttl())) {
+            if ($this->set($pair['key'], $pair['value'])) {
                 $count++;
             }
         }
@@ -308,6 +369,14 @@ class cachestore_memcache extends cache_store implements cache_is_configurable {
      * @return bool Returns true if the operation was a success, false otherwise.
      */
     public function delete($key) {
+        if ($this->clustered) {
+            $status = true;
+            foreach ($this->setconnections as $connection) {
+                $status = $connection->delete($this->parse_key($key)) && $status;
+            }
+            return $status;
+        }
+
         return $this->connection->delete($this->parse_key($key));
     }
 
@@ -334,7 +403,13 @@ class cachestore_memcache extends cache_store implements cache_is_configurable {
      */
     public function purge() {
         if ($this->isready) {
-            $this->connection->flush();
+            if ($this->clustered) {
+                foreach ($this->setconnections as $connection) {
+                    $connection->flush();
+                }
+            } else {
+                $this->connection->flush();
+            }
         }
 
         return true;
@@ -358,9 +433,33 @@ class cachestore_memcache extends cache_store implements cache_is_configurable {
             }
             $servers[] = explode(':', $line, 3);
         }
+
+        $clustered = false;
+        if (isset($data->clustered)) {
+            $clustered = true;
+        }
+
+        $lines = explode("\n", $data->setservers);
+        $setservers = array();
+        foreach ($lines as $line) {
+            // Trim surrounding colons and default whitespace.
+            $line = trim(trim($line), ":");
+            if ($line === '') {
+                continue;
+            }
+            $setserver = explode(':', $line, 3);
+            // We don't use weights, so display a debug message.
+            if (count($setserver) > 2) {
+                debugging('Memcache Set Server '.$setserver[0].' has too many parameters.');
+            }
+            $setservers[] = $setserver;
+        }
+
         return array(
             'servers' => $servers,
             'prefix' => $data->prefix,
+            'clustered' => $clustered,
+            'setservers' => $setservers
         );
     }
 
@@ -384,6 +483,16 @@ class cachestore_memcache extends cache_store implements cache_is_configurable {
         } else {
             $data['prefix'] = self::DEFAULT_PREFIX;
         }
+        if (isset($config['clustered'])) {
+            $data['clustered'] = (bool)$config['clustered'];
+        }
+        if (!empty($config['setservers'])) {
+            $servers = array();
+            foreach ($config['setservers'] as $server) {
+                $servers[] = join(":", $server);
+            }
+            $data['setservers'] = join("\n", $servers);
+        }
 
         $editform->set_data($data);
     }
@@ -423,6 +532,12 @@ class cachestore_memcache extends cache_store implements cache_is_configurable {
 
         $configuration = array();
         $configuration['servers'] = explode("\n", $config->testservers);
+        if (!empty($config->testclustered)) {
+            $configuration['clustered'] = $config->testclustered;
+        }
+        if (!empty($config->testsetservers)) {
+            $configuration['setservers'] = explode("\n", $config->testsetservers);
+        }
 
         $store = new cachestore_memcache('Test memcache', $configuration);
         $store->initialise($definition);
index f8229c5..26d8984 100644 (file)
@@ -30,4 +30,4 @@ $settings->add(new admin_setting_configtextarea(
         'cachestore_memcache/testservers',
         new lang_string('testservers', 'cachestore_memcache'),
         new lang_string('testservers_desc', 'cachestore_memcache'),
-        '', PARAM_RAW, 60, 3));
\ No newline at end of file
+        '', PARAM_RAW, 60, 3));
index 62b52f4..63d366c 100644 (file)
@@ -54,6 +54,8 @@ class cachestore_memcache_test extends cachestore_tests {
      * Tests the valid keys to ensure they work.
      */
     public function test_valid_keys() {
+        $this->resetAfterTest(true);
+
         $definition = cache_definition::load_adhoc(cache_store::MODE_APPLICATION, 'cachestore_memcache', 'phpunit_test');
         $instance = cachestore_memcache::initialise_unit_test_instance($definition);
 
@@ -69,15 +71,197 @@ class cachestore_memcache_test extends cachestore_tests {
             // Underscores.
             'a_1', '1_a', '_a1', 'a1_'
         );
+
+        // Set some keys.
         foreach ($keys as $key) {
             $this->assertTrue($instance->set($key, $key), "Failed to set key `$key`");
         }
+
+        // Get some keys.
         foreach ($keys as $key) {
             $this->assertEquals($key, $instance->get($key), "Failed to get key `$key`");
         }
+
+        // Try get many.
         $values = $instance->get_many($keys);
         foreach ($values as $key => $value) {
             $this->assertEquals($key, $value);
         }
+
+        // Reset a key.
+        $this->assertTrue($instance->set($keys[0], 'New'), "Failed to reset key `$key`");
+        $this->assertEquals('New', $instance->get($keys[0]), "Failed to get reset key `$key`");
+
+        // Delete and check that we can't retrieve.
+        foreach ($keys as $key) {
+            $this->assertTrue($instance->delete($key), "Failed to delete key `$key`");
+            $this->assertFalse($instance->get($key), "Retrieved deleted key `$key`");
+        }
+
+        // Try set many, and check that count is correct.
+        $many = array();
+        foreach ($keys as $key) {
+            $many[] = array('key' => $key, 'value' => $key);
+        }
+        $returncount = $instance->set_many($many);
+        $this->assertEquals(count($many), $returncount, 'Set many count didn\'t match');
+
+        // Check keys retrieved with get_many.
+        $values = $instance->get_many($keys);
+        foreach ($keys as $key) {
+            $this->assertTrue(isset($values[$key]), "Failed to get_many key `$key`");
+            $this->assertEquals($key, $values[$key], "Failed to match get_many key `$key`");
+        }
+
+        // Delete many, make sure count matches.
+        $returncount = $instance->delete_many($keys);
+        $this->assertEquals(count($many), $returncount, 'Delete many count didn\'t match');
+
+        // Check that each key was deleted.
+        foreach ($keys as $key) {
+            $this->assertFalse($instance->get($key), "Retrieved many deleted key `$key`");
+        }
+
+        // Set the keys again.
+        $returncount = $instance->set_many($many);
+        $this->assertEquals(count($many), $returncount, 'Set many count didn\'t match');
+
+        // Purge.
+        $this->assertTrue($instance->purge(), 'Failure to purge');
+
+        // Delete and check that we can't retrieve.
+        foreach ($keys as $key) {
+            $this->assertFalse($instance->get($key), "Retrieved purged key `$key`");
+        }
+    }
+
+    /**
+     * Tests the clustering feature.
+     */
+    public function test_clustered() {
+        $this->resetAfterTest(true);
+
+        if (!defined('TEST_CACHESTORE_MEMCACHE_TESTSERVERS')) {
+            $this->markTestSkipped();
+        }
+
+        $testservers = explode("\n", trim(TEST_CACHESTORE_MEMCACHE_TESTSERVERS));
+
+        if (count($testservers) < 2) {
+            $this->markTestSkipped();
+        }
+
+        // User the first server as our primary.
+        set_config('testservers', $testservers[0], 'cachestore_memcache');
+        set_config('testsetservers', TEST_CACHESTORE_MEMCACHE_TESTSERVERS, 'cachestore_memcache');
+        set_config('testclustered', true, 'cachestore_memcache');
+
+        // First and instance that we can use to test the second server.
+        $definition = cache_definition::load_adhoc(cache_store::MODE_APPLICATION, 'cachestore_memcache', 'phpunit_test');
+        $instance = cachestore_memcache::initialise_test_instance($definition);
+
+        if (!$instance) {
+            $this->markTestSkipped();
+        }
+
+        // Now we are going to setup a connection to each independent server.
+        set_config('testclustered', false, 'cachestore_memcache');
+        set_config('testsetservers', '', 'cachestore_memcache');
+        $checkinstances = array();
+        foreach ($testservers as $testserver) {
+            set_config('testservers', $testserver, 'cachestore_memcache');
+            $checkinstance = cachestore_memcache::initialise_test_instance($definition);
+            if (!$checkinstance) {
+                $this->markTestSkipped();
+            }
+            $checkinstances[] = $checkinstance;
+        }
+
+        $keys = array(
+            // Alphanumeric.
+            'abc', 'ABC', '123', 'aB1', '1aB',
+            // Hyphens.
+            'a-1', '1-a', '-a1', 'a1-',
+            // Underscores.
+            'a_1', '1_a', '_a1', 'a1_'
+        );
+
+        // Set each key.
+        foreach ($keys as $key) {
+            $this->assertTrue($instance->set($key, $key), "Failed to set key `$key`");
+        }
+
+        // Check each key.
+        foreach ($keys as $key) {
+            $this->assertEquals($key, $instance->get($key), "Failed to get key `$key`");
+            foreach ($checkinstances as $id => $checkinstance) {
+                $this->assertEquals($key, $checkinstance->get($key), "Failed to get key `$key` from server $id");
+            }
+        }
+
+        // Reset a key.
+        $this->assertTrue($instance->set($keys[0], 'New'), "Failed to reset key `$key`");
+        $this->assertEquals('New', $instance->get($keys[0]), "Failed to get reset key `$key`");
+        foreach ($checkinstances as $id => $checkinstance) {
+            $this->assertEquals('New', $checkinstance->get($keys[0]), "Failed to get reset key `$key` from server $id");
+        }
+
+        // Delete and check that we can't retrieve.
+        foreach ($keys as $key) {
+            $this->assertTrue($instance->delete($key), "Failed to delete key `$key`");
+            $this->assertFalse($instance->get($key), "Retrieved deleted key `$key`");
+            foreach ($checkinstances as $id => $checkinstance) {
+                $this->assertFalse($checkinstance->get($key), "Retrieved deleted key `$key` from server $id");
+            }
+        }
+
+        // Try set many, and check that count is correct.
+        $many = array();
+        foreach ($keys as $key) {
+            $many[] = array('key' => $key, 'value' => $key);
+        }
+        $returncount = $instance->set_many($many);
+        $this->assertEquals(count($many), $returncount, 'Set many count didn\'t match');
+
+        // Check keys retrieved with get_many.
+        $values = $instance->get_many($keys);
+        foreach ($keys as $key) {
+            $this->assertTrue(isset($values[$key]), "Failed to get_many key `$key`");
+            $this->assertEquals($key, $values[$key], "Failed to match get_many key `$key`");
+        }
+        foreach ($checkinstances as $id => $checkinstance) {
+            $values = $checkinstance->get_many($keys);
+            foreach ($keys as $key) {
+                $this->assertTrue(isset($values[$key]), "Failed to get_many key `$key` from server $id");
+                $this->assertEquals($key, $values[$key], "Failed to get_many key `$key` from server $id");
+            }
+        }
+
+        // Delete many, make sure count matches.
+        $returncount = $instance->delete_many($keys);
+        $this->assertEquals(count($many), $returncount, 'Delete many count didn\'t match');
+
+        // Check that each key was deleted.
+        foreach ($keys as $key) {
+            $this->assertFalse($instance->get($key), "Retrieved many deleted key `$key`");
+            foreach ($checkinstances as $id => $checkinstance) {
+                $this->assertFalse($checkinstance->get($key), "Retrieved many deleted key `$key` from server $id");
+            }
+        }
+
+        // Set the keys again.
+        $returncount = $instance->set_many($many);
+        $this->assertEquals(count($many), $returncount, 'Set many count didn\'t match');
+
+        // Purge.
+        $this->assertTrue($instance->purge(), 'Failure to purge');
+
+        // Delete and check that we can't retrieve.
+        foreach ($keys as $key) {
+            $this->assertFalse($instance->get($key), "Retrieved purged key `$key`");
+            foreach ($checkinstances as $id => $checkinstance) {
+                $this->assertFalse($checkinstance->get($key), "Retrieved purged key `$key` from server 2");
+            }
+        }
     }
 }
index c833a18..7a277cf 100644 (file)
@@ -74,5 +74,49 @@ class cachestore_memcached_addinstance_form extends cachestore_addinstance_form
         $form->addHelpButton('bufferwrites', 'bufferwrites', 'cachestore_memcached');
         $form->setDefault('bufferwrites', 0);
         $form->setType('bufferwrites', PARAM_BOOL);
+
+        $form->addElement('header', 'clusteredheader', get_string('clustered', 'cachestore_memcached'));
+
+        $form->addElement('checkbox', 'clustered', get_string('clustered', 'cachestore_memcached'));
+        $form->setDefault('checkbox', false);
+        $form->addHelpButton('clustered', 'clustered', 'cachestore_memcached');
+
+        $form->addElement('textarea', 'setservers', get_string('setservers', 'cachestore_memcached'),
+                array('cols' => 75, 'rows' => 5));
+        $form->addHelpButton('setservers', 'setservers', 'cachestore_memcached');
+        $form->disabledIf('setservers', 'clustered');
+        $form->setType('setservers', PARAM_RAW);
+    }
+
+    /**
+     * Perform minimal validation on the settings form.
+     *
+     * @param array $data
+     * @param array $files
+     */
+    public function validation($data, $files) {
+        $errors = parent::validation($data, $files);
+
+        if (isset($data['clustered']) && ($data['clustered'] == 1)) {
+            // Set servers is required with in cluster mode.
+            if (!isset($data['setservers']) || empty(trim($data['setservers']))) {
+                $errors['setservers'] = get_string('required');
+            }
+
+            $validservers = false;
+            if (isset($data['servers'])) {
+                $servers = trim($data['servers']);
+                $servers = explode("\n", $servers);
+                if (count($servers) === 1) {
+                    $validservers = true;
+                }
+            }
+
+            if (!$validservers) {
+                $errors['servers'] = get_string('serversclusterinvalid', 'cachestore_memcached');
+            }
+        }
+
+        return $errors;
     }
 }
index 87713f6..5d35c1c 100644 (file)
@@ -28,6 +28,13 @@ defined('MOODLE_INTERNAL') || die();
 
 $string['bufferwrites'] = 'Buffer writes';
 $string['bufferwrites_help'] = 'Enables or disables buffered I/O. Enabling buffered I/O causes storage commands to "buffer" instead of being sent. Any action that retrieves data causes this buffer to be sent to the remote connection. Quitting the connection or closing down the connection will also cause the buffered data to be pushed to the remote connection.';
+$string['clustered'] = 'Enable clustered servers';
+$string['clustered_help'] = 'This is used to allow read-one, set-multi functionality.
+
+The intended use case is to create an improved store for load-balanced configurations. The store will fetch from one server (usually localhost), but set to many (all the servers in the load-balance pool). For caches with very high read to set ratios, this saves a significant amount of network overhead.
+
+When this setting is enabled, the server listed above will be used for fetching.';
+$string['clusteredheader'] = 'Split servers';
 $string['hash'] = 'Hash method';
 $string['hash_help'] = 'Specifies the hashing algorithm used for the item keys. Each hash algorithm has its advantages and its disadvantages. Go with the default if you don\'t know or don\'t care.';
 $string['hash_default'] = 'Default (one-at-a-time)';
@@ -56,6 +63,20 @@ For example:
 server.url.com
 ipaddress:port
 servername:port:weight
+</pre>
+
+If *Enable clustered servers* is enabled below, there must be only one server listed here. This would usually be a name that always resolves to the local manchine, like 127.0.0.1 or localhost.';
+$string['serversclusterinvalid'] = 'Exactly one server is required when clustering is enabled.';
+$string['setservers'] = 'Set Servers';
+$string['setservers_help'] = 'This is the list of servers that will updated when data is modified in the cache. Generally the fully qualified name of each server in the pool.
+It **must** include the server listed in *Servers* above, even if by a different hostname.
+Servers should be defined one per line and consist of a server address and optionally a port.
+If no port is provided then the default port (11211) is used.
+
+For example:
+<pre>
+server.url.com
+ipaddress:port
 </pre>';
 $string['testservers'] = 'Test servers';
 $string['testservers_desc'] = 'The test servers get used for unit tests and for performance tests. It is entirely optional to set up test servers. Servers should be defined one per line and consist of a server address and optionally a port and weight.
index 1570a70..284f3c8 100644 (file)
@@ -86,6 +86,24 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
      */
     protected $definition;
 
+    /**
+     * Set to true when this store is clustered.
+     * @var bool
+     */
+    protected $clustered = false;
+
+    /**
+     * Array of servers to set when in clustered mode.
+     * @var array
+     */
+    protected $setservers = array();
+
+    /**
+     * The an array of memcache connections for the set servers, once established.
+     * @var array
+     */
+    protected $setconnections = array();
+
     /**
      * Constructs the store instance.
      *
@@ -127,6 +145,30 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
             }
             $this->servers[] = $server;
         }
+
+        $this->clustered = array_key_exists('clustered', $configuration) ? (bool)$configuration['clustered'] : false;
+
+        if ($this->clustered) {
+            if (!array_key_exists('setservers', $configuration) || (count($configuration['setservers']) < 1)) {
+                // Can't setup clustering without set servers.
+                return;
+            }
+            if (count($this->servers) !== 1) {
+                // Can only setup cluster with exactly 1 get server.
+                return;
+            }
+            foreach ($configuration['setservers'] as $server) {
+                // We do not use weights (3rd part) on these servers.
+                if (!is_array($server)) {
+                    $server = explode(':', $server, 3);
+                }
+                if (!array_key_exists(1, $server)) {
+                    $server[1] = 11211;
+                }
+                $this->setservers[] = $server;
+            }
+        }
+
         $this->options[Memcached::OPT_COMPRESSION] = $compression;
         $this->options[Memcached::OPT_SERIALIZER] = $serialiser;
         $this->options[Memcached::OPT_PREFIX_KEY] = $prefix;
@@ -141,7 +183,20 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
             }
             $this->connection->addServers($this->servers);
         }
-        // Test the connection to the pool of servers.
+
+        if ($this->clustered) {
+            foreach ($this->setservers as $setserver) {
+                // Since we will have a number of them with the same name, append server and port.
+                $connection = new Memcached(crc32($this->name.$setserver[0].$setserver[1]));
+                foreach ($this->options as $key => $value) {
+                    $connection->setOption($key, $value);
+                }
+                $connection->addServer($setserver[0], $setserver[1]);
+                $this->setconnections[] = $connection;
+            }
+        }
+
+        // Test the connection to the main connection.
         $this->isready = @$this->connection->set("ping", 'ping', 1);
     }
 
@@ -267,6 +322,14 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
      * @return bool True if the operation was a success false otherwise.
      */
     public function set($key, $data) {
+        if ($this->clustered) {
+            $status = true;
+            foreach ($this->setconnections as $connection) {
+                $status = $connection->set($key, $data, $this->definition->get_ttl()) && $status;
+            }
+            return $status;
+        }
+
         return $this->connection->set($key, $data, $this->definition->get_ttl());
     }
 
@@ -283,7 +346,17 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
         foreach ($keyvaluearray as $pair) {
             $pairs[$pair['key']] = $pair['value'];
         }
-        if ($this->connection->setMulti($pairs, $this->definition->get_ttl())) {
+
+        $status = true;
+        if ($this->clustered) {
+            foreach ($this->setconnections as $connection) {
+                $status = $connection->setMulti($pairs, $this->definition->get_ttl()) && $status;
+            }
+        } else {
+            $status = $this->connection->setMulti($pairs, $this->definition->get_ttl());
+        }
+
+        if ($status) {
             return count($keyvaluearray);
         }
         return 0;
@@ -296,6 +369,14 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
      * @return bool Returns true if the operation was a success, false otherwise.
      */
     public function delete($key) {
+        if ($this->clustered) {
+            $status = true;
+            foreach ($this->setconnections as $connection) {
+                $status = $connection->delete($key) && $status;
+            }
+            return $status;
+        }
+
         return $this->connection->delete($key);
     }
 
@@ -306,9 +387,29 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
      * @return int The number of items successfully deleted.
      */
     public function delete_many(array $keys) {
+        if ($this->clustered) {
+            // Get the minimum deleted from any of the connections.
+            $count = count($keys);
+            foreach ($this->setconnections as $connection) {
+                $count = min($this->delete_many_connection($connection, $keys), $count);
+            }
+            return $count;
+        }
+
+        return $this->delete_many_connection($this->connection, $keys);
+    }
+
+    /**
+     * Deletes several keys from the cache in a single action for a specific connection.
+     *
+     * @param Memcached $connection The connection to work on.
+     * @param array $keys The keys to delete
+     * @return int The number of items successfully deleted.
+     */
+    protected function delete_many_connection(Memcached $connection, array $keys) {
         $count = 0;
         foreach ($keys as $key) {
-            if ($this->connection->delete($key)) {
+            if ($connection->delete($key)) {
                 $count++;
             }
         }
@@ -322,7 +423,13 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
      */
     public function purge() {
         if ($this->isready) {
-            $this->connection->flush();
+            if ($this->clustered) {
+                foreach ($this->setconnections as $connection) {
+                    $connection->flush();
+                }
+            } else {
+                $this->connection->flush();
+            }
         }
 
         return true;
@@ -382,6 +489,28 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
             }
             $servers[] = explode(':', $line, 3);
         }
+
+        $clustered = false;
+        if (isset($data->clustered)) {
+            $clustered = true;
+        }
+
+        $lines = explode("\n", $data->setservers);
+        $setservers = array();
+        foreach ($lines as $line) {
+            // Trim surrounding colons and default whitespace.
+            $line = trim(trim($line), ":");
+            if ($line === '') {
+                continue;
+            }
+            $setserver = explode(':', $line, 3);
+            // We don't use weights, so display a debug message.
+            if (count($setserver) > 2) {
+                debugging('Memcached Set Server '.$setserver[0].' has too many parameters.');
+            }
+            $setservers[] = $setserver;
+        }
+
         return array(
             'servers' => $servers,
             'compression' => $data->compression,
@@ -389,6 +518,8 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
             'prefix' => $data->prefix,
             'hash' => $data->hash,
             'bufferwrites' => $data->bufferwrites,
+            'clustered' => $clustered,
+            'setservers' => $setservers
         );
     }
 
@@ -422,6 +553,16 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
         if (isset($config['bufferwrites'])) {
             $data['bufferwrites'] = (bool)$config['bufferwrites'];
         }
+        if (isset($config['clustered'])) {
+            $data['clustered'] = (bool)$config['clustered'];
+        }
+        if (!empty($config['setservers'])) {
+            $servers = array();
+            foreach ($config['setservers'] as $server) {
+                $servers[] = join(":", $server);
+            }
+            $data['setservers'] = join("\n", $servers);
+        }
         $editform->set_data($data);
     }
 
@@ -464,7 +605,7 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
         }
 
         $configuration = array();
-        $configuration['servers'] = $config->testservers;
+        $configuration['servers'] = explode("\n", $config->testservers);
         if (!empty($config->testcompression)) {
             $configuration['compression'] = $config->testcompression;
         }
@@ -480,8 +621,19 @@ class cachestore_memcached extends cache_store implements cache_is_configurable
         if (!empty($config->testbufferwrites)) {
             $configuration['bufferwrites'] = $config->testbufferwrites;
         }
+        if (!empty($config->testclustered)) {
+            $configuration['clustered'] = $config->testclustered;
+        }
+        if (!empty($config->testsetservers)) {
+            $configuration['setservers'] = explode("\n", $config->testsetservers);
+        }
+        if (!empty($config->testname)) {
+            $name = $config->testname;
+        } else {
+            $name = 'Test memcached';
+        }
 
-        $store = new cachestore_memcached('Test memcached', $configuration);
+        $store = new cachestore_memcached($name, $configuration);
         $store->initialise($definition);
 
         return $store;
index 0cc146d..e4eebe4 100644 (file)
@@ -30,4 +30,4 @@ $settings->add(new admin_setting_configtextarea(
         'cachestore_memcached/testservers',
         new lang_string('testservers', 'cachestore_memcached'),
         new lang_string('testservers_desc', 'cachestore_memcached'),
-        '', PARAM_RAW, 60, 3));
\ No newline at end of file
+        '', PARAM_RAW, 60, 3));
index a6c3496..506e583 100644 (file)
@@ -54,6 +54,8 @@ class cachestore_memcached_test extends cachestore_tests {
      * Tests the valid keys to ensure they work.
      */
     public function test_valid_keys() {
+        $this->resetAfterTest(true);
+
         $definition = cache_definition::load_adhoc(cache_store::MODE_APPLICATION, 'cachestore_memcached', 'phpunit_test');
         $instance = cachestore_memcached::initialise_unit_test_instance($definition);
 
@@ -69,15 +71,203 @@ class cachestore_memcached_test extends cachestore_tests {
             // Underscores.
             'a_1', '1_a', '_a1', 'a1_'
         );
+
+        // Set some keys.
         foreach ($keys as $key) {
             $this->assertTrue($instance->set($key, $key), "Failed to set key `$key`");
         }
+
+        // Get some keys.
         foreach ($keys as $key) {
             $this->assertEquals($key, $instance->get($key), "Failed to get key `$key`");
         }
+
+        // Try get many.
         $values = $instance->get_many($keys);
         foreach ($values as $key => $value) {
             $this->assertEquals($key, $value);
         }
+
+        // Reset a key.
+        $this->assertTrue($instance->set($keys[0], 'New'), "Failed to reset key `$key`");
+        $this->assertEquals('New', $instance->get($keys[0]), "Failed to get reset key `$key`");
+
+        // Delete and check that we can't retrieve.
+        foreach ($keys as $key) {
+            $this->assertTrue($instance->delete($key), "Failed to delete key `$key`");
+            $this->assertFalse($instance->get($key), "Retrieved deleted key `$key`");
+        }
+
+        // Try set many, and check that count is correct.
+        $many = array();
+        foreach ($keys as $key) {
+            $many[] = array('key' => $key, 'value' => $key);
+        }
+        $returncount = $instance->set_many($many);
+        $this->assertEquals(count($many), $returncount, 'Set many count didn\'t match');
+
+        // Check keys retrieved with get_many.
+        $values = $instance->get_many($keys);
+        foreach ($keys as $key) {
+            $this->assertTrue(isset($values[$key]), "Failed to get_many key `$key`");
+            $this->assertEquals($key, $values[$key], "Failed to match get_many key `$key`");
+        }
+
+        // Delete many, make sure count matches.
+        $returncount = $instance->delete_many($keys);
+        $this->assertEquals(count($many), $returncount, 'Delete many count didn\'t match');
+
+        // Check that each key was deleted.
+        foreach ($keys as $key) {
+            $this->assertFalse($instance->get($key), "Retrieved many deleted key `$key`");
+        }
+
+        // Set the keys again.
+        $returncount = $instance->set_many($many);
+        $this->assertEquals(count($many), $returncount, 'Set many count didn\'t match');
+
+        // Purge.
+        $this->assertTrue($instance->purge(), 'Failure to purge');
+
+        // Delete and check that we can't retrieve.
+        foreach ($keys as $key) {
+            $this->assertFalse($instance->get($key), "Retrieved purged key `$key`");
+        }
+    }
+
+    /**
+     * Tests the clustering feature.
+     */
+    public function test_clustered() {
+        $this->resetAfterTest(true);
+
+        if (!defined('TEST_CACHESTORE_MEMCACHED_TESTSERVERS')) {
+            $this->markTestSkipped();
+        }
+
+        $testservers = explode("\n", trim(TEST_CACHESTORE_MEMCACHED_TESTSERVERS));
+
+        if (count($testservers) < 2) {
+            $this->markTestSkipped();
+        }
+
+        // Use the first server as our primary.
+        // We need to set a prefix for all, otherwise it uses the name, which will not match between connections.
+        set_config('testprefix', 'pre', 'cachestore_memcached');
+        // We need to set a name, otherwise we get a reused connection.
+        set_config('testname', 'cluster', 'cachestore_memcached');
+        set_config('testservers', $testservers[0], 'cachestore_memcached');
+        set_config('testsetservers', TEST_CACHESTORE_MEMCACHED_TESTSERVERS, 'cachestore_memcached');
+        set_config('testclustered', true, 'cachestore_memcached');
+
+        // First and instance that we can use to test the second server.
+        $definition = cache_definition::load_adhoc(cache_store::MODE_APPLICATION, 'cachestore_memcached', 'phpunit_test');
+        $instance = cachestore_memcached::initialise_test_instance($definition);
+
+        if (!$instance) {
+            $this->markTestSkipped();
+        }
+
+        // Now we are going to setup a connection to each independent server.
+        set_config('testclustered', false, 'cachestore_memcached');
+        set_config('testsetservers', '', 'cachestore_memcached');
+        $checkinstances = array();
+        foreach ($testservers as $testserver) {
+            // We need to set a name, otherwise we get a reused connection.
+            set_config('testname', $testserver, 'cachestore_memcached');
+            set_config('testservers', $testserver, 'cachestore_memcached');
+            $checkinstance = cachestore_memcached::initialise_test_instance($definition);
+            if (!$checkinstance) {
+                $this->markTestSkipped();
+            }
+            $checkinstances[] = $checkinstance;
+        }
+
+        $keys = array(
+            // Alphanumeric.
+            'abc', 'ABC', '123', 'aB1', '1aB',
+            // Hyphens.
+            'a-1', '1-a', '-a1', 'a1-',
+            // Underscores.
+            'a_1', '1_a', '_a1', 'a1_'
+        );
+
+        // Set each key.
+        foreach ($keys as $key) {
+            $this->assertTrue($instance->set($key, $key), "Failed to set key `$key`");
+        }
+
+        // Check each key.
+        foreach ($keys as $key) {
+            $this->assertEquals($key, $instance->get($key), "Failed to get key `$key`");
+            foreach ($checkinstances as $id => $checkinstance) {
+                $this->assertEquals($key, $checkinstance->get($key), "Failed to get key `$key` from server $id");
+            }
+        }
+
+        // Reset a key.
+        $this->assertTrue($instance->set($keys[0], 'New'), "Failed to reset key `$key`");
+        $this->assertEquals('New', $instance->get($keys[0]), "Failed to get reset key `$key`");
+        foreach ($checkinstances as $id => $checkinstance) {
+            $this->assertEquals('New', $checkinstance->get($keys[0]), "Failed to get reset key `$key` from server $id");
+        }
+
+        // Delete and check that we can't retrieve.
+        foreach ($keys as $key) {
+            $this->assertTrue($instance->delete($key), "Failed to delete key `$key`");
+            $this->assertFalse($instance->get($key), "Retrieved deleted key `$key`");
+            foreach ($checkinstances as $id => $checkinstance) {
+                $this->assertFalse($checkinstance->get($key), "Retrieved deleted key `$key` from server $id");
+            }
+        }
+
+        // Try set many, and check that count is correct.
+        $many = array();
+        foreach ($keys as $key) {
+            $many[] = array('key' => $key, 'value' => $key);
+        }
+        $returncount = $instance->set_many($many);
+        $this->assertEquals(count($many), $returncount, 'Set many count didn\'t match');
+
+        // Check keys retrieved with get_many.
+        $values = $instance->get_many($keys);
+        foreach ($keys as $key) {
+            $this->assertTrue(isset($values[$key]), "Failed to get_many key `$key`");
+            $this->assertEquals($key, $values[$key], "Failed to match get_many key `$key`");
+        }
+        foreach ($checkinstances as $id => $checkinstance) {
+            $values = $checkinstance->get_many($keys);
+            foreach ($keys as $key) {
+                $this->assertTrue(isset($values[$key]), "Failed to get_many key `$key` from server $id");
+                $this->assertEquals($key, $values[$key], "Failed to get_many key `$key` from server $id");
+            }
+        }
+
+        // Delete many, make sure count matches.
+        $returncount = $instance->delete_many($keys);
+        $this->assertEquals(count($many), $returncount, 'Delete many count didn\'t match');
+
+        // Check that each key was deleted.
+        foreach ($keys as $key) {
+            $this->assertFalse($instance->get($key), "Retrieved many deleted key `$key`");
+            foreach ($checkinstances as $id => $checkinstance) {
+                $this->assertFalse($checkinstance->get($key), "Retrieved many deleted key `$key` from server $id");
+            }
+        }
+
+        // Set the keys again.
+        $returncount = $instance->set_many($many);
+        $this->assertEquals(count($many), $returncount, 'Set many count didn\'t match');
+
+        // Purge.
+        $this->assertTrue($instance->purge(), 'Failure to purge');
+
+        // Delete and check that we can't retrieve.
+        foreach ($keys as $key) {
+            $this->assertFalse($instance->get($key), "Retrieved purged key `$key`");
+            foreach ($checkinstances as $id => $checkinstance) {
+                $this->assertFalse($checkinstance->get($key), "Retrieved purged key `$key` from server 2");
+            }
+        }
     }
 }
index 6bad4ac..5416beb 100644 (file)
@@ -229,17 +229,9 @@ if (defined('COMPONENT_CLASSLOADER')) {
 require('version.php');
 $CFG->target_release = $release;
 
-$_SESSION = array();
-$_SESSION['SESSION'] = new stdClass();
-$_SESSION['SESSION']->lang = $CFG->lang;
-$_SESSION['USER'] = new stdClass();
-$_SESSION['USER']->id = 0;
-$_SESSION['USER']->mnethostid = 1;
-
+\core\session\manager::init_empty_session();
 global $SESSION;
 global $USER;
-$SESSION = &$_SESSION['SESSION'];
-$USER    = &$_SESSION['USER'];
 
 global $COURSE;
 $COURSE = new stdClass();
index 2be318e..6740fe2 100644 (file)
@@ -566,6 +566,16 @@ class auth_plugin_base {
 
         return $this->customfields;
     }
+
+    /**
+     * Post logout hook.
+     *
+     * This method is used after moodle logout by auth classes to execute server logout.
+     *
+     * @param stdClass $user clone of USER object before the user session was terminated
+     */
+    public function postlogout_hook($user) {
+    }
 }
 
 /**
index b716179..d6aa439 100644 (file)
@@ -113,4 +113,24 @@ class user_created extends base {
             $this->relateduserid = $this->objectid;
         }
     }
+
+    /**
+     * Create instance of event.
+     *
+     * @since Moodle 2.6.4, 2.7.1
+     *
+     * @param int $userid id of user
+     * @return user_created
+     */
+    public static function create_from_userid($userid) {
+        $data = array(
+            'objectid' => $userid,
+            'relateduserid' => $userid,
+            'context' => \context_user::instance($userid)
+        );
+
+        // Create user_created event.
+        $event = self::create($data);
+        return $event;
+    }
 }
index a8ef5c5..1e5e27a 100644 (file)
@@ -113,4 +113,24 @@ class user_updated extends base {
             $this->relateduserid = $this->objectid;
         }
     }
+
+    /**
+     * Create instance of event.
+     *
+     * @since Moodle 2.6.4, 2.7.1
+     *
+     * @param int $userid id of user
+     * @return user_updated
+     */
+    public static function create_from_userid($userid) {
+        $data = array(
+            'objectid' => $userid,
+            'relateduserid' => $userid,
+            'context' => \context_user::instance($userid)
+        );
+
+        // Create user_updated event.
+        $event = self::create($data);
+        return $event;
+    }
 }
index 78e32ab..e45f623 100644 (file)
@@ -908,6 +908,7 @@ class core_plugin_manager {
         $plugins = array(
             'qformat' => array('blackboard'),
             'enrol' => array('authorize'),
+            'tinymce' => array('dragmath'),
             'tool' => array('bloglevelupgrade', 'qeupgradehelper'),
             'theme' => array('mymobile', 'afterburner', 'anomaly', 'arialist', 'binarius', 'boxxie', 'brick', 'formal_white',
                 'formfactor', 'fusion', 'leatherbound', 'magazine', 'nimble', 'nonzero', 'overlay', 'serenity', 'sky_high',
@@ -1121,7 +1122,7 @@ class core_plugin_manager {
             ),
 
             'tinymce' => array(
-                'ctrlhelp', 'dragmath', 'managefiles', 'moodleemoticon', 'moodleimage',
+                'ctrlhelp', 'managefiles', 'moodleemoticon', 'moodleimage',
                 'moodlemedia', 'moodlenolink', 'pdw', 'spellchecker', 'wrap'
             ),
 
index 314f9ed..e0d8bc0 100644 (file)
@@ -79,6 +79,16 @@ class manager {
             self::initialise_user_session($newsid);
             self::check_security();
 
+            // Link global $USER and $SESSION,
+            // this is tricky because PHP does not allow references to references
+            // and global keyword uses internally once reference to the $GLOBALS array.
+            // The solution is to use the $GLOBALS['USER'] and $GLOBALS['$SESSION']
+            // as the main storage of data and put references to $_SESSION.
+            $GLOBALS['USER'] = $_SESSION['USER'];
+            $_SESSION['USER'] =& $GLOBALS['USER'];
+            $GLOBALS['SESSION'] = $_SESSION['SESSION'];
+            $_SESSION['SESSION'] =& $GLOBALS['SESSION'];
+
         } catch (\Exception $ex) {
             @session_write_close();
             self::init_empty_session();
@@ -139,31 +149,29 @@ class manager {
 
     /**
      * Empty current session, fill it with not-logged-in user info.
+     *
+     * This is intended for installation scripts, unit tests and other
+     * special areas. Do NOT use for logout and session termination
+     * in normal requests!
      */
-    protected static function init_empty_session() {
+    public static function init_empty_session() {
         global $CFG;
 
-        // Session not used at all.
-        $_SESSION = array();
-        $_SESSION['SESSION']  = new \stdClass();
-        $_SESSION['USER']     = new \stdClass();
-        $_SESSION['USER']->id = 0;
+        $GLOBALS['SESSION'] = new \stdClass();
+
+        $GLOBALS['USER'] = new \stdClass();
+        $GLOBALS['USER']->id = 0;
         if (isset($CFG->mnet_localhost_id)) {
-            $_SESSION['USER']->mnethostid = $CFG->mnet_localhost_id;
+            $GLOBALS['USER']->mnethostid = $CFG->mnet_localhost_id;
         } else {
             // Not installed yet, the future host id will be most probably 1.
-            $_SESSION['USER']->mnethostid = 1;
+            $GLOBALS['USER']->mnethostid = 1;
         }
 
-        if (PHPUNIT_TEST or defined('BEHAT_TEST')) {
-            // Phpunit tests and behat init use reversed reference,
-            // the reason is we can not point global to $_SESSION outside of global scope.
-            global $USER, $SESSION;
-            $USER = $_SESSION['USER'];
-            $SESSION = $_SESSION['SESSION'];
-            $_SESSION['USER'] =& $USER;
-            $_SESSION['SESSION'] =& $SESSION;
-        }
+        // Link global $USER and $SESSION.
+        $_SESSION = array();
+        $_SESSION['USER'] =& $GLOBALS['USER'];
+        $_SESSION['SESSION'] =& $GLOBALS['SESSION'];
     }
 
     /**
@@ -249,9 +257,11 @@ class manager {
     }
 
     /**
-     * Initialise $USER and $SESSION objects, handles google access
+     * Initialise $_SESSION, handles google access
      * and sets up not-logged-in user properly.
      *
+     * WARNING: $USER and $SESSION are set up later, do not use them yet!
+     *
      * @param bool $newsid is this a new session in first http request?
      */
     protected static function initialise_user_session($newsid) {
@@ -416,6 +426,8 @@ class manager {
 
     /**
      * Do various session security checks.
+     *
+     * WARNING: $USER and $SESSION are set up later, do not use them yet!
      */
     protected static function check_security() {
         global $CFG;
@@ -489,7 +501,7 @@ class manager {
         session_regenerate_id(true);
         $DB->delete_records('sessions', array('sid'=>$sid));
         self::init_empty_session();
-        self::add_session_record($_SESSION['USER']->id);
+        self::add_session_record($_SESSION['USER']->id); // Do not use $USER here because it may not be set up yet.
         session_write_close();
         self::$sessionactive = false;
     }
@@ -590,22 +602,19 @@ class manager {
      * @param \stdClass $user record
      */
     public static function set_user(\stdClass $user) {
-        $_SESSION['USER'] = $user;
-        unset($_SESSION['USER']->description); // Conserve memory.
-        unset($_SESSION['USER']->password);    // Improve security.
-        if (isset($_SESSION['USER']->lang)) {
+        $GLOBALS['USER'] = $user;
+        unset($GLOBALS['USER']->description); // Conserve memory.
+        unset($GLOBALS['USER']->password);    // Improve security.
+        if (isset($GLOBALS['USER']->lang)) {
             // Make sure it is a valid lang pack name.
-            $_SESSION['USER']->lang = clean_param($_SESSION['USER']->lang, PARAM_LANG);
+            $GLOBALS['USER']->lang = clean_param($GLOBALS['USER']->lang, PARAM_LANG);
         }
-        sesskey(); // Init session key.
 
-        if (PHPUNIT_TEST or defined('BEHAT_TEST')) {
-            // Phpunit tests and behat init use reversed reference,
-            // the reason is we can not point global to $_SESSION outside of global scope.
-            global $USER;
-            $USER = $_SESSION['USER'];
-            $_SESSION['USER'] =& $USER;
-        }
+        // Relink session with global $USER just in case it got unlinked somehow.
+        $_SESSION['USER'] =& $GLOBALS['USER'];
+
+        // Init session key.
+        sesskey();
     }
 
     /**
@@ -697,7 +706,7 @@ class manager {
      * @return bool
      */
     public static function is_loggedinas() {
-        return !empty($_SESSION['USER']->realuser);
+        return !empty($GLOBALS['USER']->realuser);
     }
 
     /**
@@ -708,7 +717,7 @@ class manager {
         if (self::is_loggedinas()) {
             return $_SESSION['REALUSER'];
         } else {
-            return $_SESSION['USER'];
+            return $GLOBALS['USER'];
         }
     }
 
@@ -725,12 +734,14 @@ class manager {
             return;
         }
 
-        // Switch to fresh new $SESSION.
-        $_SESSION['REALSESSION'] = $_SESSION['SESSION'];
-        $_SESSION['SESSION']     = new \stdClass();
+        // Switch to fresh new $_SESSION.
+        $_SESSION = array();
+        $_SESSION['REALSESSION'] = clone($GLOBALS['SESSION']);
+        $GLOBALS['SESSION'] = new \stdClass();
+        $_SESSION['SESSION'] =& $GLOBALS['SESSION'];
 
         // Create the new $USER object with all details and reload needed capabilities.
-        $_SESSION['REALUSER'] = $_SESSION['USER'];
+        $_SESSION['REALUSER'] = clone($GLOBALS['USER']);
         $user = get_complete_user_data('id', $userid);
         $user->realuser       = $_SESSION['REALUSER']->id;
         $user->loginascontext = $context;
index 518e851..7fcd96e 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="lib/db" VERSION="20140324" COMMENT="XMLDB file for core Moodle tables"
+<XMLDB PATH="lib/db" VERSION="20140627" COMMENT="XMLDB file for core Moodle tables"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="../../lib/xmldb/xmldb.xsd"
 >
         <KEY NAME="repositoryid" TYPE="foreign" FIELDS="repositoryid" REFTABLE="repository_instances" REFFIELDS="id"/>
       </KEYS>
       <INDEXES>
-        <INDEX NAME="uq_external_file" UNIQUE="true" FIELDS="repositoryid, referencehash" COMMENT="The combination of repositoryid and reference field is supposed to be a unique identification of an external file. Because the reference is a TEXT field, we can't use to compose the index. So we use the referencehash instead and the file API is responsible to keep it up-to-date"/>
+        <INDEX NAME="uq_external_file" UNIQUE="true" FIELDS="referencehash, repositoryid" COMMENT="The combination of repositoryid and reference field is supposed to be a unique identification of an external file. Because the reference is a TEXT field, we can't use to compose the index. So we use the referencehash instead and the file API is responsible to keep it up-to-date"/>
       </INDEXES>
     </TABLE>
     <TABLE NAME="repository" COMMENT="This table contains one entry for every configured external repository instance.">
index bb90953..acb4ade 100644 (file)
@@ -3676,5 +3676,36 @@ function xmldb_main_upgrade($oldversion) {
         upgrade_main_savepoint(true, 2014061000.00);
     }
 
+    if ($oldversion < 2014062600.01) {
+        // We only want to delete DragMath if the directory no longer exists. If the directory
+        // is present then it means it has been restored, so do not perform the uninstall.
+        if (!check_dir_exists($CFG->libdir . '/editor/tinymce/plugins/dragmath', false)) {
+            // Purge DragMath plugin which is incompatible with GNU GPL license.
+            unset_all_config_for_plugin('tinymce_dragmath');
+        }
+
+        // Main savepoint reached.
+        upgrade_main_savepoint(true, 2014062600.01);
+    }
+
+    // Switch the order of the fields in the files_reference index, to improve the performance of search_references.
+    if ($oldversion < 2014070100.00) {
+        $table = new xmldb_table('files_reference');
+        $index = new xmldb_index('uq_external_file', XMLDB_INDEX_UNIQUE, array('repositoryid', 'referencehash'));
+        if ($dbman->index_exists($table, $index)) {
+            $dbman->drop_index($table, $index);
+        }
+        upgrade_main_savepoint(true, 2014070100.00);
+    }
+
+    if ($oldversion < 2014070101.00) {
+        $table = new xmldb_table('files_reference');
+        $index = new xmldb_index('uq_external_file', XMLDB_INDEX_UNIQUE, array('referencehash', 'repositoryid'));
+        if (!$dbman->index_exists($table, $index)) {
+            $dbman->add_index($table, $index);
+        }
+        upgrade_main_savepoint(true, 2014070101.00);
+    }
+
     return true;
 }
diff --git a/lib/dragmath/COPYRIGHT.html b/lib/dragmath/COPYRIGHT.html
deleted file mode 100644 (file)
index 5edfc55..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>
-<head>
-<title>DragMath Documentation - License</title>
-</head>
-<body>
-
-<span style=" color: #000099; font-size: x-large; font-family: Arial;"><strong>DragMath Copyright Information</strong></span>
-
-<span style=" font-size: small; font-family: Arial;">
-<p>
-    DragMath 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 3 of the License, or
-    (at your option) any later version.
-</p>
-<p>
-    DragMath 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.
-</p>
-<p>
-    You should have received a copy of the GNU General Public License
-    along with DragMath. If not, see <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a> .
-</p>
-<hr></hr>
-<br>
-<p>
-All source code in this package is written by <a href="http://www.alexbillingsley.co.uk">Alex Billingsley</a> except the libraries used. The copyright information for the libaries is included below:</p>
-<p>
-<h4>JDOM<br>  <a href="http://www.jdom.org">http://www.jdom.org</a></h4>
-JDOM is available under an Apache-style open source license, with the acknowledgment clause removed. This license is among the least restrictive license available, enabling developers to use JDOM in creating new products without requiring them to release their own products as open source. This is the license model used by the Apache Project, which created the Apache server. The license is available at the top of every source file and in LICENSE.txt in the root of the distribution.
-</p>
-<br>
-<p>
-<h4>JEP<br><a href="https://sourceforge.net/projects/jep/">https://sourceforge.net/projects/jep/</a></h4>
-JEP is licensed under the GNU General Public License (GPL) v3 (<a href="http://www.gnu.org/licenses/gpl-3.0.txt">http://www.gnu.org/licenses/gpl-3.0.txt</a>)</p>
-<p>
-<br>
-<h4>glyFX Common Toolbar Set Icons<br>   <a href="http://www.glyfx.com">http://www.glyfx.com</a></h4>
-Icons used in software, license found at; <a href="http://www.glyfx.com/license-toolbar.html">http://www.glyfx.com/license-toolbar.html</a></p>
-</span>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/lib/dragmath/README.html b/lib/dragmath/README.html
deleted file mode 100644 (file)
index 24c0e76..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<html>
-<head>
-<title>DragMath - README</title>
-</head>
-<script type="text/javascript">
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-<script type="text/javascript">
-try {
-var pageTracker = _gat._getTracker("UA-6643167-1");
-pageTracker._trackPageview();
-} catch(err) {}</script>
-<body>
-<span style=" color: #000099; font-size: x-large; font-family: Arial;"><strong>
-DragMath README
-</strong></span>
-<span style=" font-size: small; font-family: Arial;">  
-<p>
-<font size=3>
-<p>
-<br>
-This is an open-source drag and drop equation editor written in Java. Once an expression is created the user can convert it into a variety of different linear syntax for mathematics, including MathML, LaTeX, Maple, Maxima or any user defined style.
-</p>
-DragMath Website:<a href="www.dragmath.bham.ac.uk">www.dragmath.bham.ac.uk</a><br>
-SoureForge.net Project:<a href="http://sourceforge.net/projects/dragmath">http://sourceforge.net/projects/dragmath</a>
-</p>
-<br>
-<p>
-<b>Package Contents:</b>
-</p>
-<br>
-<dl>
-
-<dt><b><a href="README.html"><b>README.html</b></a></b>
-<dd>This file</dd>
-</dt>
-<br>
-<dt><b><a href="LICENSE-gpl.txt"><b>LICENSE-gpl.txt</b></a></b>
-<dd>License Agreement</dd>
-</dt>
-<br>
-<dt><b><a href="COPYRIGHT.html"><b>COPYRIGHT.html</b></a></b>
-<dd>Copyright Information</dd>
-</dt>
-<br>
-<dt><b><a href="Version History.html"><b>Version History.html</b></a></b>
-<dd>History of changes to each version</dd>
-</dt>
-<br>
-<dt><b><a href="DragMath Demonstration.html"><b>DragMath Demonstration.html</b></a></b>
-<dd>DragMath demonstration</dd>
-</dt>
-<br><br>
-<dt><b>doc/</b>
-<dd><a href="doc/index.html">Documentation</a></dd>
-</dt>
-<br>
-<br>
-<dt><b>applet/</b>
-<dl>
-<dt><b>formats/</b>
-<dd>Export formats</dd>
-</dt>
-<dt><b>lang/</b>
-<dd>Language files</dd>
-</dt>
-</dl>
-</dt>
-</dl>
-
-</font>
-</span>
-</body>
-</html>
\ No newline at end of file
diff --git a/lib/dragmath/Version History.html b/lib/dragmath/Version History.html
deleted file mode 100644 (file)
index 71e5296..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-<html>
-<head>
-<title>DragMath - Version History</title>
-</head>
-<script type="text/javascript">
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-<script type="text/javascript">
-try {
-var pageTracker = _gat._getTracker("UA-6643167-1");
-pageTracker._trackPageview();
-} catch(err) {}</script>
-<body>
-<span style=" color: #000099; font-size: x-large; font-family: Arial;"><strong>
-<p>
-DragMath - Version History
-</p>
-</strong></span>
-<span style=" font-size: small; font-family: Arial;">
-<font size=3>
-<br>
-
-<b>DragMath 0.7.8.2 released 09/05/2010</b>
-<p>
-New Features:
-</p>
-<ol>
-<li>Released under GPL Version 3</li>
-</ol>
-Bugs fixed:
-</p>
-<ol>
-<li>Following operators not parsed correctly, ==, <=, >=, subset</li>
-</ol>
-<br>
-
-<b>DragMath 0.7.8.1 released 09/07/2009</b>
-<p>
-New Languages:
-</p>
-<ol>
-<li>Finnish</li>
-</ol>
-Bugs fixed:
-</p>
-<ol>
-<li>Error with library file locations (not fixed in 0.7.8)</li>
-<li>Error with XML Parser</li>
-</ol>
-<br>
-
-<b>DragMath 0.7.8 released 06/06/2009</b>
-<p>
-New Languages:
-</p>
-<ol>
-<li>Persian</li>
-</ol>
-<p>
-Bugs fixed:
-</p>
-<ol>
-<li>Error with library file locations</li>
-</ol>
-<br>
-
-<b>DragMath 0.7.7 released 19/02/2009</b>
-<p>
-New Features:
-</p>
-<ol>
-<li>Turn implicit multiplication on/off</li>
-<li>Turn decimal numbers on/off</li>
-<li>Italian language file</li>
-</ol>
-<br>
-
-<b>DragMath 0.7.6 released 03/11/2008</b>
-<p>
-Bugs fixed:
-</p>
-<ol>
-<li>Problem parsing equations containing decimal places</li>
-</ol>
-<br>
-
-
-<b>DragMath 0.7.5 released 26/10/2008</b>
-<p>
-Bugs fixed:
-</p>
-<ol>
-<li>Problem parsing 2(a-b) and similar equations</li>
-</ol>
-<br>
-
-<b>DragMath 0.7.4 released 20/10/2008</b>
-<p>
-New Features:
-</p>
-<ol>
-<li>Show/Hide Menu</li>
-<li>Show/Hide Toolbar</li>
-<li>Customise Toolbar</li>
-</ol>
-<br>
-
-<b>DragMath 0.7.3 released 31/07/2008</b>
-<p>
-Bugs fixed:
-</p>
-<ol>
-<li>Infinity not working</li>
-<li>Lambda not correct in output files</li>
-<li>Improvements to French language file</li>
-</ol>
-<br>
-
-<b>DragMath 0.7.2 released 04/04/2008</b>
-<p>
-New Features:
-</p>
-<ol>
-<li>MoodleTex format file</li>
-<li>ASCIIMathML format file</li>
-</ol>
-New languages:
-</p>
-<ol>
-<li>Norwegian</li>
-</ol>
-Bugs fixed:
-</p>
-<ol>
-<li>Unary minus not working with infinity</li>
-</ol>
-<br>
-
-<b>DragMath 0.7.1 released 28/02/2008</b>
-<p>
-New Features:
-</p>
-<ol>
-<li>Export to image</li>
-</ol>
-New languages:
-</p>
-<ol>
-<li>Portuguese (Brazilian)</li>
-</ol>
-<br
-
-<b>DragMath 0.7.0 released 07/02/2008</b>
-<p>
-New Features:
-</p>
-<ol>
-<li>Arrows tab</li>
-<li>Additonal operators in operator tab</li>
-<li>Partial differential</li>
-</ol>
-New languages:
-</p>
-<ol>
-<li>Catalan</li>
-</ol>
-<br>
-
-<b>DragMath 0.6.3 released 10/01/2008</b>
-<p>
-New languages:
-</p>
-<ol>
-<li>German</li>
-<li>Dutch</li>
-</ol>
-<br>
-
-<b>DragMath 0.6.2 released 23/12/2007</b>
-<p>
-New languages:
-</p>
-<ol>
-<li>Russian</li>
-<li>French</li>
-</ol>
-Bugs fixed:
-<ol>
-<li>� sign not working</li>
-</ol>
-<br>
-
-<b>DragMath 0.6.1 released 18/12/2007</b>
-<p>
-New Features:
-</p>
-<ol>
-<li>Not Equal operator</li>
-</ol>
-New languages:
-<ol>
-<li>Polish</li>
-<li>Czech (completed)</li>
-</ol>
-<br>
-
-<b>DragMath 0.6.0 released 12/12/2007</b>
-<p>
-New Features:
-</p>
-<ol>
-<li>Multi-level Undo and Redo</li>
-<li>Plus-Minus operator</li>
-<li>Ability to select operator in workspace and replace with any other operator</li>
-<li>New menu bar - consisting of new features, Clear Workspace, Set language, Set export format, Load Documentation</li>
-<li>Additions to parser</li>
-</ol>
-
-New languages:
-<ol>
-<li>Spanish</li>
-<li>Swedish (In progress)</li>
-<li>Czech (In progress)</li>
-</ol>
-
-
-Bugs fixed:
-<ol>
-<li>Greek letters not parsed correctly</li>
-<li>Brackets being added causing applet to crash</li>
-<li>Multi-language support not working</li>
-</ol>
-<br>
-
-
-<b>DragMath 0.5.0 released 20/09/2007</b>
-<p>
-New Features:
-</p>
-<ol>
-<li>Support for Java Runtime Environment (JRE) 1.4 or higher</li>
-<li>Save/Load expressions to .drgm files</li>
-<li>Parameter to open applet with an expression</li>
-</ol>
-<br>
-
-
-</font>
-</span>
-</body>
-</html> 
\ No newline at end of file
diff --git a/lib/dragmath/applet/Config.xml b/lib/dragmath/applet/Config.xml
deleted file mode 100644 (file)
index f8a448c..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Document   : Config.xml
-    Created on : 13 December 2007, 19:28
-    Author     : Alex Billingsley
-    Description:
-        Purpose of the document follows.
--->
-
-<Config>
-    <Languages>
-        <Lang displayName="Català" fileName="ca"></Lang>
-        <Lang displayName="čeština" fileName="cz"></Lang>
-        <Lang displayName="Deutsch" fileName="de"></Lang>
-        <Lang displayName="English" fileName="en"></Lang>
-        <Lang displayName="Español" fileName="es"></Lang>
-        <Lang displayName="français" fileName="fr"></Lang>
-        <Lang displayName="italiano" fileName="it"></Lang> 
-        <Lang displayName="Nederlands" fileName="nl"></Lang>
-        <Lang displayName="Norsk" fileName="no"></Lang>
-        <Lang displayName="polski" fileName="pl"></Lang>
-        <Lang displayName="Pyccĸий" fileName="ru"></Lang>
-        <Lang displayName="suomi" fileName="fi"></Lang>
-        <Lang displayName="svenska" fileName="sv"></Lang>
-        <Lang displayName="português brasileiro" fileName="pt-br"></Lang>
-        <Lang displayName="فارسی" fileName="fa"></Lang>
-    </Languages>
-    
-    <Formats>
-        <Format displayName="LaTeX" fileName="Latex"></Format>
-        <Format displayName="Maple" fileName="Maple"></Format>
-        <Format displayName="MathML" fileName="MathML"></Format>
-        <Format displayName="Maxima" fileName="Maxima"></Format>
-        <Format displayName="MoodleTex" fileName="MoodleTex"></Format>
-        <Format displayName="ASCIIMathML" fileName="ASCIIMathML"></Format>
-    </Formats>
-</Config>
diff --git a/lib/dragmath/applet/Display/MainApplet.class b/lib/dragmath/applet/Display/MainApplet.class
deleted file mode 100644 (file)
index c74e630..0000000
Binary files a/lib/dragmath/applet/Display/MainApplet.class and /dev/null differ
diff --git a/lib/dragmath/applet/DragMath.jar b/lib/dragmath/applet/DragMath.jar
deleted file mode 100644 (file)
index cd95ab7..0000000
Binary files a/lib/dragmath/applet/DragMath.jar and /dev/null differ
diff --git a/lib/dragmath/applet/formats/ASCIIMathML.xml b/lib/dragmath/applet/formats/ASCIIMathML.xml
deleted file mode 100644 (file)
index 59d3788..0000000
+++ /dev/null
@@ -1,543 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<Syntax>
-    <name AutoBrackets="false">ASCIIMathML</name>
-    
-    <Initial>
-        <output1>`</output1>
-        <output2>`</output2>
-    </Initial>
-    <Text>
-        <output1></output1>
-        <output2></output2>
-    </Text>
-    <Variable>
-        <output1></output1>
-        <output2></output2>
-    </Variable>
-    <RealNumber>
-        <output1></output1>
-        <output2></output2>
-    </RealNumber>
-    
-    
-    
-    <!--  Nary Operators   -->
-    <Add>
-        <output>+</output>
-    </Add>
-
-    <Multiply>
-        <output> * </output>
-    </Multiply>
-
-    <Multiply2>
-        <output> xx </output>
-    </Multiply2>
-    <Equals>
-        <output>=</output>
-    </Equals>
-    <Union>
-        <output> uu </output>
-    </Union>
-    <Intersection>
-        <output> nn </output>
-    </Intersection>
-    <Comma>
-        <output>,</output>
-    </Comma>
-    <Equiv>
-        <output> -= </output>
-    </Equiv>
-    
-    
-    
-    <!--  Functions   -->
-    <UMinus>
-        <output1>-</output1>
-        <output2></output2>
-    </UMinus>
-    <Factorial brackets="false">
-        <output1>(</output1>
-        <output2>)!</output2>
-    </Factorial>
-    <NaturalLogarithm>
-        <output1> ln </output1>
-        <output2></output2>
-    </NaturalLogarithm>
-    <Logarithm>
-        <output1> log </output1>
-        <output2></output2>
-    </Logarithm>
-    <Sine>
-        <output1> sin </output1>
-        <output2></output2>
-    </Sine>
-    <Cosine>
-        <output1> cos </output1>
-        <output2></output2>
-    </Cosine>
-    <Tangent>
-        <output1> tan </output1>
-        <output2></output2>
-    </Tangent>
-    <ArcSine>
-        <output1> sin^{-1} </output1>
-        <output2></output2>
-    </ArcSine>
-    <ArcCosine>
-        <output1> cos^{-1} </output1>
-        <output2></output2>
-    </ArcCosine>
-    <ArcTangent>
-        <output1> tan^{-1} </output1>
-        <output2></output2>
-    </ArcTangent>
-    <SineH>
-        <output1> sinh </output1>
-        <output2></output2>
-    </SineH>
-    <CosineH>
-        <output1> cosh </output1>
-        <output2></output2>
-    </CosineH>
-    <TanH>
-        <output1> tanh </output1>
-        <output2></output2>
-    </TanH>
-    <ArcSineH>
-        <output1> sinh^{-1} </output1>
-        <output2></output2>
-    </ArcSineH>
-    <ArcCosineH>
-        <output1> cosh^{-1} </output1>
-        <output2></output2>
-    </ArcCosineH>
-    <ArcTanH>
-        <output1> tanh^{-1} </output1>
-        <output2></output2>
-    </ArcTanH>
-    <SquareRoot brackets="false">
-        <output1> sqrt{</output1>
-        <output2>} </output2>
-    </SquareRoot>
-    <Exp brackets="false">
-        <output1> e^{</output1>
-        <output2>} </output2>
-    </Exp>
-    <Max>
-        <output1>max</output1>
-        <output2></output2>
-    </Max>
-    <Min>
-        <output1>min</output1>
-        <output2></output2>
-    </Min>
-    <Determinant>
-        <output1>det</output1>
-        <output2></output2>
-    </Determinant>
-    <Trace>
-        <output1>Tr</output1>
-        <output2></output2>
-    </Trace>
-    
-    
-    
-    <!--  Binary Operators  -->
-    <NotEqual>
-        <output1></output1>
-        <output2> != </output2>
-        <output3></output3>
-    </NotEqual>
-    <PlusMinus>
-        <output1></output1>
-        <output2> +- </output2>
-        <output3></output3>
-    </PlusMinus> 
-    <Assignment>
-        <output1></output1>
-        <output2>:=</output2>
-        <output3></output3>
-    </Assignment>
-    <Subtract>
-        <output1></output1>
-        <output2>-</output2>
-        <output3></output3>
-    </Subtract>
-    <Divide brackets="false">
-        <output1> (</output1>
-        <output2>)/(</output2>
-        <output3>) </output3>
-    </Divide>
-    <Divide2>       
-        <output1></output1>
-        <output2> -: </output2>
-        <output3></output3>
-    </Divide2>
-    <LessThan>
-        <output1></output1>
-        <output2><![CDATA[<]]></output2>
-        <output3></output3>
-    </LessThan>    
-    <GreaterThan>
-        <output1></output1>
-        <output2>></output2>
-        <output3></output3>
-    </GreaterThan>    
-    <LTEQ>
-        <output1></output1>
-        <output2><![CDATA[<=]]></output2>
-        <output3></output3>
-    </LTEQ>    
-    <GTEQ>
-        <output1></output1>
-        <output2><![CDATA[>=]]></output2>
-        <output3></output3>
-    </GTEQ>    
-    <Subset>
-        <output1></output1>
-        <output2> sub </output2>
-        <output3></output3>
-    </Subset>    
-    <SubsetEq>
-        <output1></output1>
-        <output2> sube </output2>
-        <output3></output3>
-    </SubsetEq>    
-    <NSubset>
-        <output1></output1>
-        <output2> \not\subset </output2>
-        <output3></output3>
-    </NSubset> 
-    <NSubsetEq>
-        <output1></output1>
-        <output2> \not\subseteq </output2>
-        <output3></output3>
-    </NSubsetEq>  
-    <Power>
-        <output1></output1>
-        <output2>^{</output2>
-        <output3>}</output3>
-    </Power>
-    <Subscript>
-        <output1></output1>
-        <output2>_{</output2>
-        <output3>}</output3>
-    </Subscript>  
-    <NthRoot reverse="true" brackets="false">
-        <output1> root(</output1>
-        <output2>)(</output2>
-        <output3>) </output3>
-    </NthRoot> 
-    <Function>
-        <output1></output1>
-        <output2>(</output2>
-        <output3>)</output3>
-    </Function>
-    <LeftArrow>
-        <output1></output1>
-        <output2> larr </output2>
-        <output3></output3>
-    </LeftArrow> 
-    <RightArrow>
-        <output1></output1>
-        <output2> rarr </output2>
-        <output3></output3>
-    </RightArrow> 
-    <UpArrow>
-        <output1></output1>
-        <output2> uarr </output2>
-        <output3></output3>
-    </UpArrow> 
-    <DownArrow>
-        <output1></output1>
-        <output2> darr </output2>
-        <output3></output3>
-    </DownArrow> 
-    <LeftDblArrow>
-        <output1></output1>
-        <output2> lArr </output2>
-        <output3></output3>
-    </LeftDblArrow> 
-    <RightDblArrow>
-        <output1></output1>
-        <output2> rArr </output2>
-        <output3></output3>
-    </RightDblArrow> 
-    <LeftRightArrow>
-        <output1></output1>
-        <output2> harr </output2>
-        <output3></output3>
-    </LeftRightArrow> 
-    <LeftRightDblArrow>
-        <output1></output1>
-        <output2> hArr </output2>
-        <output3></output3>
-    </LeftRightDblArrow>   
-    <NorthEastArrow>
-        <output1></output1>
-        <output2> \nearrow </output2>
-        <output3></output3>
-    </NorthEastArrow>          
-    <SouthEastArrow>
-        <output1></output1>
-        <output2> \searrow </output2>
-        <output3></output3>
-    </SouthEastArrow>    
-    <NorthWestArrow>        
-        <output1></output1>
-        <output2> \nwarrow </output2>
-        <output3></output3>
-    </NorthWestArrow>     
-    <SouthWestArrow>
-        <output1></output1>
-        <output2> \swarrow </output2>
-        <output3></output3>
-    </SouthWestArrow>     
-    
-    <Exists>
-        <output1></output1>
-        <output2> EE </output2>
-        <output3></output3>
-    </Exists>
-    <ForAll>
-        <output1></output1>
-        <output2> AA </output2>
-        <output3></output3>
-    </ForAll>
-    <IsIn>        
-        <output1></output1>
-        <output2> in </output2>
-        <output3></output3>
-    </IsIn>
-    <NotExists>
-        <output1></output1>
-        <output2> \not\exists </output2>
-        <output3></output3>
-    </NotExists>
-    <NotIn>
-        <output1></output1>
-        <output2> !in </output2>
-        <output3></output3>
-    </NotIn>
-    <SimEq>
-        <output1></output1>
-        <output2> \simeq </output2>
-        <output3></output3>
-    </SimEq>
-    <Or>       
-        <output1></output1>
-        <output2> vv </output2>
-        <output3></output3>
-    </Or>
-    <And>
-        <output1></output1>
-        <output2> ^^ </output2>
-        <output3></output3>
-    </And>
-    <Not>
-        <output1></output1>
-        <output2> not </output2>
-        <output3></output3>
-    </Not>
-    
-    
-    <!--  Nary Functions   -->
-    <Integral>
-        <output1> int </output1>
-        <output2>d</output2>
-        <output3></output3>
-    </Integral>
-    <Differential order="1,0">
-        <output1> d/(d</output1>
-        <output2>)</output2>
-        <output3></output3>
-    </Differential>
-    <PartialDifferential order="1,0">
-        <output1> del/(del </output1>
-        <output2>)</output2>
-        <output3></output3>
-    </PartialDifferential>
-    <Sum order="1,2,3,0">
-        <output1> sum_(</output1>
-        <output2>=</output2>
-        <output3>)^(</output3>
-        <output4>)</output4>
-        <output5></output5>
-    </Sum>
-    <Product order="1,2,3,0">
-        <output1> prod_(</output1>
-        <output2>=</output2>
-        <output3>)^(</output3>
-        <output4>)</output4>
-        <output5></output5>
-    </Product>
-    <Limit order="1,2,0">
-        <output1> lim_(</output1>
-        <output2>-></output2>
-        <output3>)</output3>
-        <output4></output4>
-    </Limit>
-    <Evaluate>
-        <output1></output1>
-        <output2>\left|_{{</output2>
-        <output3>}={</output3>
-        <output4>}}</output4>
-    </Evaluate>
-    <DefiniteIntegral order="2,3,0,1">
-        <output1> int_{</output1>
-        <output2>}^{</output2>
-        <output3>}</output3>
-        <output4>d</output4>
-        <output5></output5>
-    </DefiniteIntegral>
-    
-    
-    
-    <!--  Matrix   -->
-    <Matrix>
-        <matrixStart> [ </matrixStart>
-        <rowStart>[</rowStart>
-        <elementStart></elementStart>
-        <elementEnd></elementEnd>
-        <elementSeparator>,</elementSeparator>
-        <rowEnd>]</rowEnd>
-        <rowSeparator>,</rowSeparator>
-        <matrixEnd> ] </matrixEnd>
-    </Matrix>
-    
-    
-    
-    <!--  Grouping  -->
-    <BracketsRnd>
-        <output1>(</output1>
-        <output2>)</output2>
-    </BracketsRnd>
-    <BracketsCurl>
-        <output1>{</output1>
-        <output2>}</output2>
-    </BracketsCurl>
-    <BracketsSq>
-        <output1>[</output1>
-        <output2>]</output2>
-    </BracketsSq>
-    <Abs>
-        <output1>|\</output1>
-        <output2>|</output2>
-    </Abs>
-    
-    
-    
-    <!--  Symbols   -->
-    <Infinity>
-        <output>oo</output>
-    </Infinity>
-    
-    
-    <Γ>
-        <output> Gamma </output>
-    </Γ>
-    <Δ>
-        <output> Delta </output>
-    </Δ>
-    <Θ>
-        <output> Theta </output>
-    </Θ>
-    <Λ>
-        <output> Lambda </output>
-    </Λ>
-    <Ξ>
-        <output> Xi </output>
-    </Ξ>
-    <Π>
-        <output> Pi </output>
-    </Π>
-    <Σ>
-        <output> Sigma </output>
-    </Σ>
-    <Υ>
-        <output> Upsilon </output>
-    </Υ>
-    <Φ>
-        <output> Phi </output>
-    </Φ>
-    <Ψ>
-        <output> Psi </output>
-    </Ψ>
-    <Ω>
-        <output> Omega </output>
-    </Ω>
-    
-    
-    <α>
-        <output> alpha </output>
-    </α>
-    <β>
-        <output> beta </output>
-    </β>
-    <γ>
-        <output> gamma </output>
-    </γ>
-    <δ>
-        <output> delta </output>
-    </δ>
-    <ε>
-        <output> epsilon </output>
-    </ε>
-    <ζ>
-        <output> zeta </output>
-    </ζ>
-    <η>
-        <output> eta </output>
-    </η>
-    <θ>
-        <output> theta </output>
-    </θ>
-    <ι>
-        <output> iota </output>
-    </ι>
-    <κ>
-        <output> kappa </output>
-    </κ>
-    <λ>
-        <output> lambda </output>
-    </λ>
-    <μ>
-        <output> mu </output>
-    </μ>
-    <ν>
-        <output> nu </output>
-    </ν>
-    <ξ>
-        <output> xi </output>
-    </ξ>
-    <π>
-        <output> pi </output>
-    </π>
-    <ρ>
-        <output> rho </output>
-    </ρ>
-    <σ>
-        <output> sigma </output>
-    </σ>
-    <τ>
-        <output> tau </output>
-    </τ>
-    <υ>
-        <output> upsilon </output>
-    </υ>
-    <φ>
-        <output> phi </output>
-    </φ>
-    <χ>
-        <output> chi </output>
-    </χ>
-    <ψ>
-        <output> psi </output>
-    </ψ> 
-    <ω>
-        <output> omega </output>
-    </ω>
-    
-</Syntax>
diff --git a/lib/dragmath/applet/formats/Latex.xml b/lib/dragmath/applet/formats/Latex.xml
deleted file mode 100644 (file)
index 8aadd48..0000000
+++ /dev/null
@@ -1,541 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<Syntax>
-    <name AutoBrackets="false">Latex</name>
-    
-    <Initial>
-        <output1></output1>
-        <output2></output2>
-    </Initial>
-    <Text>
-        <output1></output1>
-        <output2></output2>
-    </Text>
-    <Variable>
-        <output1></output1>
-        <output2></output2>
-    </Variable>
-    <RealNumber>
-        <output1></output1>
-        <output2></output2>
-    </RealNumber>
-    
-    
-    
-    <!--  Nary Operators   -->
-    <Add>
-        <output>+</output>
-    </Add>
-    <Multiply>
-        <output> \cdot </output>
-    </Multiply>
-    <Multiply2>
-        <output> \times </output>
-    </Multiply2>
-    <Equals>
-        <output>=</output>
-    </Equals>
-    <Union>
-        <output> \cup </output>
-    </Union>
-    <Intersection>
-        <output> \cap </output>
-    </Intersection>
-    <Comma>
-        <output>,</output>
-    </Comma>
-    <Equiv>
-        <output> \equiv </output>
-    </Equiv>
-    
-    
-    
-    <!--  Functions   -->
-    <UMinus>
-        <output1>-</output1>
-        <output2></output2>
-    </UMinus>
-    <Factorial brackets="false">
-        <output1>{</output1>
-        <output2>}!</output2>
-    </Factorial>
-    <NaturalLogarithm>
-        <output1> \ln </output1>
-        <output2></output2>
-    </NaturalLogarithm>
-    <Logarithm>
-        <output1> \log </output1>
-        <output2></output2>
-    </Logarithm>
-    <Sine>
-        <output1> \sin </output1>
-        <output2></output2>
-    </Sine>
-    <Cosine>
-        <output1> \cos </output1>
-        <output2></output2>
-    </Cosine>
-    <Tangent>
-        <output1> \tan </output1>
-        <output2></output2>
-    </Tangent>
-    <ArcSine>
-        <output1> \sin^{-1} </output1>
-        <output2></output2>
-    </ArcSine>
-    <ArcCosine>
-        <output1> \cos^{-1} </output1>
-        <output2></output2>
-    </ArcCosine>
-    <ArcTangent>
-        <output1> \tan^{-1} </output1>
-        <output2></output2>
-    </ArcTangent>
-    <SineH>
-        <output1> \sinh </output1>
-        <output2></output2>
-    </SineH>
-    <CosineH>
-        <output1> \cosh </output1>
-        <output2></output2>
-    </CosineH>
-    <TanH>
-        <output1> \tanh </output1>
-        <output2></output2>
-    </TanH>
-    <ArcSineH>
-        <output1> \sinh^{-1} </output1>
-        <output2></output2>
-    </ArcSineH>
-    <ArcCosineH>
-        <output1> \cosh^{-1} </output1>
-        <output2></output2>
-    </ArcCosineH>
-    <ArcTanH>
-        <output1> \tanh^{-1} </output1>
-        <output2></output2>
-    </ArcTanH>
-    <SquareRoot brackets="false">
-        <output1> \sqrt{</output1>
-        <output2>} </output2>
-    </SquareRoot>
-    <Exp brackets="false">
-        <output1> e^{</output1>
-        <output2>} </output2>
-    </Exp>
-    <Max>
-        <output1>\max</output1>
-        <output2></output2>
-    </Max>
-    <Min>
-        <output1>\min</output1>
-        <output2></output2>
-    </Min>
-    <Determinant>
-        <output1>\det</output1>
-        <output2></output2>
-    </Determinant>
-    <Trace>
-        <output1>Tr</output1>
-        <output2></output2>
-    </Trace>
-    
-    
-    
-    <!--  Binary Operators  -->
-    <NotEqual>
-        <output1></output1>
-        <output2> \neq </output2>
-        <output3></output3>
-    </NotEqual>
-    <PlusMinus>
-        <output1></output1>
-        <output2> \pm </output2>
-        <output3></output3>
-    </PlusMinus> 
-    <Assignment>
-        <output1></output1>
-        <output2>:=</output2>
-        <output3></output3>
-    </Assignment>
-    <Subtract>
-        <output1></output1>
-        <output2>-</output2>
-        <output3></output3>
-    </Subtract>
-    <Divide brackets="false">
-        <output1> \frac{</output1>
-        <output2>}{</output2>
-        <output3>} </output3>
-    </Divide>
-    <Divide2>       
-        <output1></output1>
-        <output2> \div </output2>
-        <output3></output3>
-    </Divide2>
-    <LessThan>
-        <output1></output1>
-        <output2><![CDATA[<]]></output2>
-        <output3></output3>
-    </LessThan>    
-    <GreaterThan>
-        <output1></output1>
-        <output2>></output2>
-        <output3></output3>
-    </GreaterThan>    
-    <LTEQ>
-        <output1></output1>
-        <output2> \le </output2>
-        <output3></output3>
-    </LTEQ>    
-    <GTEQ>
-        <output1></output1>
-        <output2> \ge </output2>
-        <output3></output3>
-    </GTEQ>    
-    <Subset>
-        <output1></output1>
-        <output2> \subset </output2>
-        <output3></output3>
-    </Subset>    
-    <SubsetEq>
-        <output1></output1>
-        <output2> \subseteq </output2>
-        <output3></output3>
-    </SubsetEq>    
-    <NSubset>
-        <output1></output1>
-        <output2> \not\subset </output2>
-        <output3></output3>
-    </NSubset> 
-    <NSubsetEq>
-        <output1></output1>
-        <output2> \not\subseteq </output2>
-        <output3></output3>
-    </NSubsetEq>  
-    <Power>
-        <output1></output1>
-        <output2>^{</output2>
-        <output3>}</output3>
-    </Power>
-    <Subscript>
-        <output1></output1>
-        <output2>_{</output2>
-        <output3>}</output3>
-    </Subscript>  
-    <NthRoot reverse="true" brackets="false">
-        <output1> \sqrt[</output1>
-        <output2>]{</output2>
-        <output3>} </output3>
-    </NthRoot> 
-    <Function>
-        <output1></output1>
-        <output2>\left(</output2>
-        <output3>\right)</output3>
-    </Function>
-    <LeftArrow>
-        <output1></output1>
-        <output2> \leftarrow </output2>
-        <output3></output3>
-    </LeftArrow> 
-    <RightArrow>
-        <output1></output1>
-        <output2> \rightarrow </output2>
-        <output3></output3>
-    </RightArrow> 
-    <UpArrow>
-        <output1></output1>
-        <output2> \uparrow </output2>
-        <output3></output3>
-    </UpArrow> 
-    <DownArrow>
-        <output1></output1>
-        <output2> \downarrow </output2>
-        <output3></output3>
-    </DownArrow> 
-    <LeftDblArrow>
-        <output1></output1>
-        <output2> \Leftarrow </output2>
-        <output3></output3>
-    </LeftDblArrow> 
-    <RightDblArrow>
-        <output1></output1>
-        <output2> \Rightarrow </output2>
-        <output3></output3>
-    </RightDblArrow> 
-    <LeftRightArrow>
-        <output1></output1>
-        <output2> \leftrightarrow </output2>
-        <output3></output3>
-    </LeftRightArrow> 
-    <LeftRightDblArrow>
-        <output1></output1>
-        <output2> \Leftrightarrow </output2>
-        <output3></output3>
-    </LeftRightDblArrow>   
-    <NorthEastArrow>
-        <output1></output1>
-        <output2> \nearrow </output2>
-        <output3></output3>
-    </NorthEastArrow>          
-    <SouthEastArrow>
-        <output1></output1>
-        <output2> \searrow </output2>
-        <output3></output3>
-    </SouthEastArrow>    
-    <NorthWestArrow>        
-        <output1></output1>
-        <output2> \nwarrow </output2>
-        <output3></output3>
-    </NorthWestArrow>     
-    <SouthWestArrow>
-        <output1></output1>
-        <output2> \swarrow </output2>
-        <output3></output3>
-    </SouthWestArrow>     
-    
-    <Exists>
-        <output1></output1>
-        <output2> \exists </output2>
-        <output3></output3>
-    </Exists>
-    <ForAll>
-        <output1></output1>
-        <output2> \forall </output2>
-        <output3></output3>
-    </ForAll>
-    <IsIn>        
-        <output1></output1>
-        <output2> \epsilon </output2>
-        <output3></output3>
-    </IsIn>
-    <NotExists>
-        <output1></output1>
-        <output2> \not\exists </output2>
-        <output3></output3>
-    </NotExists>
-    <NotIn>
-        <output1></output1>
-        <output2> \not\epsilon </output2>
-        <output3></output3>
-    </NotIn>
-    <SimEq>
-        <output1></output1>
-        <output2> \simeq </output2>
-        <output3></output3>
-    </SimEq>
-    <Or>       
-        <output1></output1>
-        <output2> \vee </output2>
-        <output3></output3>
-    </Or>
-    <And>
-        <output1></output1>
-        <output2> \wedge </output2>
-        <output3></output3>
-    </And>
-    <Not>
-        <output1></output1>
-        <output2> \neg </output2>
-        <output3></output3>
-    </Not>
-    
-    
-    <!--  Nary Functions   -->
-    <Integral>
-        <output1> \int </output1>
-        <output2>\,d</output2>
-        <output3></output3>
-    </Integral>
-    <Differential order="1,0">
-        <output1> \frac{d}{d</output1>
-        <output2>}</output2>
-        <output3></output3>
-    </Differential>
-    <PartialDifferential order="1,0">
-        <output1> \frac{\partial}{\partial </output1>
-        <output2>}</output2>
-        <output3></output3>
-    </PartialDifferential>
-    <Sum order="1,2,3,0">
-        <output1> \sum_{{</output1>
-        <output2>}={</output2>
-        <output3>}}^{</output3>
-        <output4>}</output4>
-        <output5></output5>
-    </Sum>
-    <Product order="1,2,3,0">
-        <output1> \prod_{{</output1>
-        <output2>}={</output2>
-        <output3>}}^{</output3>
-        <output4>}</output4>
-        <output5></output5>
-    </Product>
-    <Limit order="1,2,0">
-        <output1> \lim_{</output1>
-        <output2>\to</output2>
-        <output3>}</output3>
-        <output4></output4>
-    </Limit>
-    <Evaluate>
-        <output1></output1>
-        <output2>\left|_{{</output2>
-        <output3>}={</output3>
-        <output4>}}</output4>
-    </Evaluate>
-    <DefiniteIntegral order="2,3,0,1">
-        <output1> \int_{</output1>
-        <output2>}^{</output2>
-        <output3>}</output3>
-        <output4>\,d</output4>
-        <output5></output5>
-    </DefiniteIntegral>
-    
-    
-    
-    <!--  Matrix   -->
-    <Matrix>
-        <matrixStart> \left( \begin{array}{ccc} </matrixStart>
-        <rowStart></rowStart>
-        <elementStart></elementStart>
-        <elementEnd></elementEnd>
-        <elementSeparator><![CDATA[ & ]]></elementSeparator>
-        <rowEnd>\\</rowEnd>
-        <rowSeparator></rowSeparator>
-        <matrixEnd> \end{array} \right) </matrixEnd>
-    </Matrix>
-    
-    
-    
-    <!--  Grouping  -->
-    <BracketsRnd>
-        <output1>\left(</output1>
-        <output2>\right)</output2>
-    </BracketsRnd>
-    <BracketsCurl>
-        <output1>\{</output1>
-        <output2>\}</output2>
-    </BracketsCurl>
-    <BracketsSq>
-        <output1>\left[</output1>
-        <output2>\right]</output2>
-    </BracketsSq>
-    <Abs>
-        <output1>\left|</output1>
-        <output2>\right|</output2>
-    </Abs>
-    
-    
-    
-    <!--  Symbols   -->
-    <Infinity>
-        <output>\infty</output>
-    </Infinity>
-    
-    
-    <Γ>
-        <output> \Gamma </output>
-    </Γ>
-    <Δ>
-        <output> \Delta </output>
-    </Δ>
-    <Θ>
-        <output> \Theta </output>
-    </Θ>
-    <Λ>
-        <output> \Lambda </output>
-    </Λ>
-    <Ξ>
-        <output> \Xi </output>
-    </Ξ>
-    <Π>
-        <output> \Pi </output>
-    </Π>
-    <Σ>
-        <output> \Sigma </output>
-    </Σ>
-    <Υ>
-        <output> \Upsilon </output>
-    </Υ>
-    <Φ>
-        <output> \Phi </output>
-    </Φ>
-    <Ψ>
-        <output> \Psi </output>
-    </Ψ>
-    <Ω>
-        <output> \Omega </output>
-    </Ω>
-    
-    
-    <α>
-        <output> \alpha </output>
-    </α>
-    <β>
-        <output> \beta </output>
-    </β>
-    <γ>
-        <output> \gamma </output>
-    </γ>
-    <δ>
-        <output> \delta </output>
-    </δ>
-    <ε>
-        <output> \epsilon </output>
-    </ε>
-    <ζ>
-        <output> \zeta </output>
-    </ζ>
-    <η>
-        <output> \eta </output>
-    </η>
-    <θ>
-        <output> \theta </output>
-    </θ>
-    <ι>
-        <output> \iota </output>
-    </ι>
-    <κ>
-        <output> \kappa </output>
-    </κ>
-    <λ>
-        <output> \lambda </output>
-    </λ>
-    <μ>
-        <output> \mu </output>
-    </μ>
-    <ν>
-        <output> \nu </output>
-    </ν>
-    <ξ>
-        <output> \xi </output>
-    </ξ>
-    <π>
-        <output> \pi </output>
-    </π>
-    <ρ>
-        <output> \rho </output>
-    </ρ>
-    <σ>
-        <output> \sigma </output>
-    </σ>
-    <τ>
-        <output> \tau </output>
-    </τ>
-    <υ>
-        <output> \upsilon </output>
-    </υ>
-    <φ>
-        <output> \phi </output>
-    </φ>
-    <χ>
-        <output> \chi </output>
-    </χ>
-    <ψ>
-        <output> \psi </output>
-    </ψ> 
-    <ω>
-        <output> \omega </output>
-    </ω>
-    
-</Syntax>
diff --git a/lib/dragmath/applet/formats/Maple.xml b/lib/dragmath/applet/formats/Maple.xml
deleted file mode 100644 (file)
index edfd179..0000000
+++ /dev/null
@@ -1,540 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<Syntax>
-    <name AutoBrackets="true">Maple</name>
-    
-    <Initial>
-        <output1></output1>
-        <output2></output2>
-    </Initial>
-    <Text>
-        <output1></output1>
-        <output2></output2>
-    </Text>
-    <Variable>
-        <output1></output1>
-        <output2></output2>
-    </Variable>
-    <RealNumber>
-        <output1></output1>
-        <output2></output2>
-    </RealNumber>
-    
-    
-    <!--  Nary Operators   --> 
-    <Add>
-        <output>+</output>
-    </Add>
-    <Multiply>
-        <output>*</output>
-    </Multiply>
-    <Multiply2>
-        <output>*</output>
-    </Multiply2>
-    <Equals>
-        <output>=</output>
-    </Equals>
-    <Union>
-        <output> union </output>
-    </Union>
-    <Intersection>
-        <output> intersect </output>
-    </Intersection>
-    <Comma>
-        <output>,</output>
-    </Comma>
-    <Equiv>
-        <output>≡</output>
-    </Equiv>
-    
-    
-    
-    <!--  Functions   --> 
-    <UMinus>
-        <output1>-</output1>
-        <output2></output2>
-    </UMinus>
-    <Factorial>
-        <output1>factorial</output1>
-        <output2></output2>
-    </Factorial>
-    <NaturalLogarithm>
-        <output1>ln</output1>
-        <output2></output2>
-    </NaturalLogarithm>
-    <Logarithm>
-        <output1>log</output1>
-        <output2></output2>
-    </Logarithm>
-    <Sine>
-        <output1>sin</output1>
-        <output2></output2>
-    </Sine>
-    <Cosine>
-        <output1>cos</output1>
-        <output2></output2>
-    </Cosine>
-    <Tangent>
-        <output1>tan</output1>
-        <output2></output2>
-    </Tangent>
-    <ArcSine>
-        <output1>arcsin</output1>
-        <output2></output2>
-    </ArcSine>
-    <ArcCosine>
-        <output1>arccos</output1>
-        <output2></output2>
-    </ArcCosine>
-    <ArcTangent>
-        <output1>arctan</output1>
-        <output2></output2>
-    </ArcTangent>
-    <SineH>
-        <output1>sinh</output1>
-        <output2></output2>
-    </SineH>
-    <CosineH>
-        <output1>cosh</output1>
-        <output2></output2>
-    </CosineH>
-    <TanH>
-        <output1>tanh</output1>
-        <output2></output2>
-    </TanH>
-    <ArcSineH>
-        <output1>arcsinh</output1>
-        <output2></output2>
-    </ArcSineH>
-    <ArcCosineH>
-        <output1>arccosh</output1>
-        <output2></output2>
-    </ArcCosineH>
-    <ArcTanH>
-        <output1>arctanh</output1>
-        <output2></output2>
-    </ArcTanH>
-    <SquareRoot>
-        <output1>sqrt</output1>
-        <output2></output2>
-    </SquareRoot>
-    <Exp>
-        <output1>exp</output1>
-        <output2></output2>
-    </Exp>
-    <Max>
-        <output1>max</output1>
-        <output2></output2>
-    </Max>
-    <Min>
-        <output1>min</output1>
-        <output2></output2>
-    </Min>
-    <Determinant>
-        <output1>det</output1>
-        <output2></output2>
-    </Determinant>
-    <Trace>
-        <output1>trace</output1>
-        <output2></output2>
-    </Trace>
-    
-    
-    
-    <!--  Binary Operators   --> 
-    <NotEqual>
-        <output1></output1>
-        <output2>≠</output2>
-        <output3></output3>
-    </NotEqual>
-    <PlusMinus>
-        <output1></output1>
-        <output2>±</output2>
-        <output3></output3>
-    </PlusMinus>
-    <Assignment>
-        <output1></output1>
-        <output2>:=</output2>
-        <output3></output3>
-    </Assignment>
-    <Subtract>
-        <output1></output1>
-        <output2>-</output2>
-        <output3></output3>
-    </Subtract>
-    <Divide>
-        <output1></output1>
-        <output2>/</output2>
-        <output3></output3>
-    </Divide>   
-    <Divide2>
-        <output1></output1>
-        <output2>/</output2>
-        <output3></output3>
-    </Divide2>   
-    <LessThan>
-        <output1></output1>
-        <output2><![CDATA[<]]></output2>
-        <output3></output3>
-    </LessThan>    
-    <GreaterThan>
-        <output1></output1>
-        <output2>></output2>
-        <output3></output3>
-    </GreaterThan>    
-    <LTEQ>
-        <output1></output1>
-        <output2><![CDATA[<=]]></output2>
-        <output3></output3>
-    </LTEQ>    
-    <GTEQ>
-        <output1></output1>
-        <output2>>=</output2>
-        <output3></output3>
-    </GTEQ>    
-    <Subset>
-        <output1>`subset`(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </Subset>    
-    <SubsetEq>
-        <output1>`subset`(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </SubsetEq>    
-    <NSubset>
-        <output1>not `subset`(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </NSubset> 
-    <NSubsetEq>
-        <output1>not `subset`(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </NSubsetEq>  
-    <Power>
-        <output1></output1>
-        <output2>^</output2>
-        <output3></output3>
-    </Power>
-    <Subscript>
-        <output1></output1>
-        <output2>[</output2>
-        <output3>]</output3>
-    </Subscript>  
-    <NthRoot>
-        <output1>surd(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </NthRoot>
-    <Function>
-        <output1></output1>
-        <output2>(</output2>
-        <output3>)</output3>
-    </Function>
-    <LeftArrow>
-        <output1></output1>
-        <output2>←</output2>
-        <output3></output3>
-    </LeftArrow> 
-    <RightArrow>
-        <output1></output1>
-        <output2>→</output2>
-        <output3></output3>
-    </RightArrow> 
-    <UpArrow>
-        <output1></output1>
-        <output2>↑</output2>
-        <output3></output3>
-    </UpArrow> 
-    <DownArrow>
-        <output1></output1>
-        <output2>↓</output2>
-        <output3></output3>
-    </DownArrow> 
-    <LeftDblArrow>
-        <output1></output1>
-        <output2>⇐</output2>
-        <output3></output3>
-    </LeftDblArrow> 
-    <RightDblArrow>
-        <output1></output1>
-        <output2>⇒</output2>
-        <output3></output3>
-    </RightDblArrow> 
-    <LeftRightArrow>
-        <output1></output1>
-        <output2>↔</output2>
-        <output3></output3>
-    </LeftRightArrow> 
-    <LeftRightDblArrow>
-        <output1></output1>
-        <output2>⇔</output2>
-        <output3></output3>
-    </LeftRightDblArrow>   
-    <NorthEastArrow>
-        <output1></output1>
-        <output2>↗</output2>
-        <output3></output3>
-    </NorthEastArrow>          
-    <SouthEastArrow>
-        <output1></output1>
-        <output2>↘</output2>
-        <output3></output3>
-    </SouthEastArrow>    
-    <NorthWestArrow>        
-        <output1></output1>
-        <output2>↖</output2>
-        <output3></output3>
-    </NorthWestArrow>     
-    <SouthWestArrow>
-        <output1></output1>
-        <output2>↙</output2>
-        <output3></output3>
-    </SouthWestArrow>     
-    
-    <Exists>
-        <output1></output1>
-        <output2>∃</output2>
-        <output3></output3>
-    </Exists>
-    <ForAll>
-        <output1></output1>
-        <output2>∀</output2>
-        <output3></output3>
-    </ForAll>
-    <IsIn>        
-        <output1></output1>
-        <output2>∈</output2>
-        <output3></output3>
-    </IsIn>
-    <NotExists>
-        <output1></output1>
-        <output2>∄</output2>
-        <output3></output3>
-    </NotExists>
-    <NotIn>
-        <output1></output1>
-        <output2>∉</output2>
-        <output3></output3>
-    </NotIn>
-    <SimEq>
-        <output1></output1>
-        <output2>≃</output2>
-        <output3></output3>
-    </SimEq>
-    <Or>       
-        <output1></output1>
-        <output2>∨</output2>
-        <output3></output3>
-    </Or>
-    <And>
-        <output1></output1>
-        <output2>∧</output2>
-        <output3></output3>
-    </And>
-    <Not>
-        <output1></output1>
-        <output2>¬</output2>
-        <output3></output3>
-    </Not>
-    
-    
-    <!--  Nary Functions   --> 
-    <Integral>
-        <output1>int(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </Integral>
-    <Differential>
-        <output1>diff(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </Differential>
-    <PartialDifferential>
-        <output1>diff(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </PartialDifferential>
-    <Sum>
-        <output1>sum(</output1>
-        <output2>,</output2>
-        <output3>=</output3>
-        <output4>..</output4>
-        <output5>)</output5>
-    </Sum>
-    <Product>
-        <output1>product(</output1>
-        <output2>,</output2>
-        <output3>=</output3>
-        <output4>..</output4>
-        <output5>)</output5>
-    </Product>
-    <Limit>
-        <output1>limit(</output1>
-        <output2>,</output2>
-        <output3>=</output3>
-        <output4>)</output4>
-    </Limit>
-    <Evaluate order="2,3,1">
-        <output1>subs(</output1>
-        <output2>=</output2>
-        <output3>,</output3>
-        <output4>)</output4>
-    </Evaluate>
-    <DefiniteIntegral>
-        <output1>int(</output1>
-        <output2>,</output2>
-        <output3>=</output3>
-        <output4>..</output4>
-        <output5>)</output5>
-    </DefiniteIntegral>
-    
-    
-    
-    <!--  Matrix   --> 
-    <Matrix>
-        <matrixStart>Matrix([</matrixStart>
-        <rowStart>[</rowStart>
-        <elementStart></elementStart>
-        <elementEnd></elementEnd>
-        <elementSeparator>,</elementSeparator>
-        <rowEnd>]</rowEnd>
-        <rowSeparator>,</rowSeparator>
-        <matrixEnd>])</matrixEnd>
-    </Matrix>
-    
-    
-    
-    <!--  Grouping   --> 
-    <BracketsRnd>
-        <output1>(</output1>
-        <output2>)</output2>
-    </BracketsRnd>
-    <BracketsCurl>
-        <output1>{</output1>
-        <output2>}</output2>
-    </BracketsCurl>
-    <BracketsSq>
-        <output1>[</output1>
-        <output2>]</output2>
-    </BracketsSq>
-    <Abs>
-        <output1>abs(</output1>
-        <output2>)</output2>
-    </Abs>
-    
-    
-    
-    <!--  Symbols  --> 
-    <Infinity>
-        <output>infinity</output>
-    </Infinity>
-
-    
-    <Γ>
-        <output> Gamma </output>
-    </Γ>
-    <Δ>
-        <output> Delta </output>
-    </Δ>
-    <Θ>
-        <output> Theta </output>
-    </Θ>
-    <Λ>
-        <output> Lambda </output>
-    </Λ>
-    <Ξ>
-        <output> Xi </output>
-    </Ξ>
-    <Π>
-        <output> PI </output>
-    </Π>
-    <Σ>
-        <output> Sigma </output>
-    </Σ>
-    <Υ>
-        <output> Upsilon </output>
-    </Υ>
-    <Φ>
-        <output> Phi </output>
-    </Φ>
-    <Ψ>
-        <output> Psi </output>
-    </Ψ>
-    <Ω>
-        <output> Omega </output>
-    </Ω>
-    
-    
-    <α>
-        <output> alpha </output>
-    </α>
-    <β>
-        <output> beta </output>
-    </β>
-    <γ>
-        <output> gamma </output>
-    </γ>
-    <δ>
-        <output> delta </output>
-    </δ>
-    <ε>
-        <output> epsilon </output>
-    </ε>
-    <ζ>
-        <output> zeta </output>
-    </ζ>
-    <η>
-        <output> eta </output>
-    </η>
-    <θ>
-        <output> theta </output>
-    </θ>
-    <ι>
-        <output> iota </output>
-    </ι>
-    <κ>
-        <output> kappa </output>
-    </κ>
-    <λ>
-        <output> lambda </output>
-    </λ>
-    <μ>
-        <output> mu </output>
-    </μ>
-    <ν>
-        <output> nu </output>
-    </ν>
-    <ξ>
-        <output> xi </output>
-    </ξ>
-    <π>
-        <output> Pi </output>
-    </π>
-    <ρ>
-        <output> rho </output>
-    </ρ>
-    <σ>
-        <output> sigma </output>
-    </σ>
-    <τ>
-        <output> tau </output>
-    </τ>
-    <υ>
-        <output> upsilon </output>
-    </υ>
-    <φ>
-        <output> phi </output>
-    </φ>
-    <χ>
-        <output> chi </output>
-    </χ>
-    <ψ>
-        <output> psi </output>
-    </ψ> 
-    <ω>
-        <output> omega </output>
-    </ω>
-    
-</Syntax>
diff --git a/lib/dragmath/applet/formats/MathML.xml b/lib/dragmath/applet/formats/MathML.xml
deleted file mode 100644 (file)
index 606f38e..0000000
+++ /dev/null
@@ -1,540 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<Syntax>
-    <name AutoBrackets="false">MathML</name>
-    
-    <Initial> 
-        <output1><![CDATA[ <math xmlns="http://www.w3.org/1998/Math/MathML"> ]]></output1>
-        <output2><![CDATA[</math>]]></output2>
-    </Initial>
-    <Text>
-        <output1><![CDATA[<mtext>]]></output1>
-        <output2><![CDATA[</mtext>]]></output2>
-    </Text>
-    <Variable>
-        <output1><![CDATA[<mi>]]></output1>
-        <output2><![CDATA[</mi>]]></output2>
-    </Variable>
-    <RealNumber>
-        <output1><![CDATA[<mn>]]></output1>
-        <output2><![CDATA[</mn>]]></output2>
-    </RealNumber>
-    
-    
-    
-    <!--  Nary Operators   -->
-    <Add>
-        <output><![CDATA[<mo> &plus; </mo>]]></output>           
-    </Add>
-    <Multiply>
-        <output><![CDATA[<mo> &sdot; </mo>]]></output>
-    </Multiply>  
-    <Multiply2>
-        <output><![CDATA[<mo> &times; </mo>]]></output>
-    </Multiply2>
-    <Equals>
-        <output><![CDATA[<mo> &equals; </mo>]]></output>
-    </Equals>
-    <Union>
-        <output><![CDATA[<mo> &Union; </mo>]]></output>
-    </Union>
-    <Intersection>
-        <output><![CDATA[<mo> &Intersection; </mo>]]></output>
-    </Intersection>
-    <Comma>
-        <output><![CDATA[<mo> &comma; </mo>]]></output>
-    </Comma>
-    <Equiv>
-        <output><![CDATA[ <mo> &equiv; </mo>]]></output>
-    </Equiv>
-    
-    
-    
-    <!--  Functions   -->
-    <UMinus>
-        <output1><![CDATA[<mo> &minus; </mo]]></output1>
-        <output2></output2>
-    </UMinus>   
-    <Factorial brackets="false">
-        <output1><![CDATA[<mrow>]]></output1>
-        <output2><![CDATA[<mo>!</mo></mrow>]]></output2>
-    </Factorial>
-    <NaturalLogarithm>
-        <output1><![CDATA[<mi> ln </mi>]]></output1>
-        <output2></output2>
-    </NaturalLogarithm>
-    <Logarithm>
-        <output1><![CDATA[<mi> log </mi>]]></output1>
-        <output2></output2>
-    </Logarithm>
-    <Sine>
-        <output1><![CDATA[<mi> sin </mi>]]></output1>
-        <output2></output2>
-    </Sine>
-    <Cosine>
-        <output1><![CDATA[<mi> cos </mi>]]></output1>
-        <output2></output2>
-    </Cosine>
-    <Tangent>
-        <output1><![CDATA[<mi> tan </mi>]]></output1>
-        <output2></output2>
-    </Tangent>
-    <ArcSine>
-        <output1><![CDATA[ <msup> <mrow><mi>sin</mi></mrow><mrow><mn>-1</mn></mrow></msup> ]]></output1>
-        <output2></output2>
-    </ArcSine>
-    <ArcCosine>
-        <output1><![CDATA[ <msup> <mrow><mi>cos</mi></mrow><mrow><mn>-1</mn></mrow></msup> ]]></output1>
-        <output2></output2>
-    </ArcCosine>
-    <ArcTangent>
-        <output1><![CDATA[ <msup> <mrow><mi>tan</mi></mrow><mrow><mn>-1</mn></mrow></msup> ]]></output1>
-        <output2></output2>
-    </ArcTangent>
-    <SineH>
-        <output1><![CDATA[<mi> sinh </mi>]]></output1>
-        <output2></output2>
-    </SineH>
-    <CosineH>
-        <output1><![CDATA[<mi> cosh </mi>]]></output1>
-        <output2></output2>
-    </CosineH>
-    <TanH>
-        <output1><![CDATA[<mi> tanh </mi>]]></output1>
-        <output2></output2>
-    </TanH>
-    <ArcSineH>
-        <output1><![CDATA[ <msup> <mrow><mi>sinh</mi></mrow><mrow><mn>-1</mn></mrow></msup> ]]></output1>
-        <output2></output2>
-    </ArcSineH>
-    <ArcCosineH>
-        <output1><![CDATA[ <msup> <mrow><mi>cosh</mi></mrow><mrow><mn>-1</mn></mrow></msup> ]]></output1>
-        <output2></output2>
-    </ArcCosineH>
-    <ArcTanH>
-        <output1><![CDATA[ <msup> <mrow><mi>tanh</mi></mrow><mrow><mn>-1</mn></mrow></msup> ]]></output1>
-        <output2></output2>
-    </ArcTanH>
-    <SquareRoot brackets="false">
-        <output1><![CDATA[<msqrt> <mrow>]]></output1>
-        <output2><![CDATA[</mrow> </msqrt>]]></output2>
-    </SquareRoot>
-    <Exp brackets="false">
-        <output1><![CDATA[ <msup> <mrow><mtext>e</mtext></mrow> <mrow>]]></output1>
-        <output2><![CDATA[</mrow> </msup>]]></output2>
-    </Exp>
-    <Max>
-        <output1><![CDATA[<mi> max </mi>]]></output1>
-        <output2></output2>
-    </Max>
-    <Min>
-        <output1><![CDATA[<mi> min </mi>]]></output1>
-        <output2></output2>
-    </Min>
-    <Determinant>
-        <output1><![CDATA[<mi> det </mi>]]></output1>
-        <output2></output2>
-    </Determinant>
-    <Trace>
-        <output1><![CDATA[<mi> trace </mi>]]></output1>
-        <output2></output2>
-    </Trace>
-    
-    
-    
-    <!--  Binary Operators   -->
-    <NotEqual>
-        <output1></output1>
-        <output2><![CDATA[<mo> &ne; </mo>]]></output2>
-        <output3></output3>
-    </NotEqual>
-    <PlusMinus>
-        <output1></output1>
-        <output2><![CDATA[<mo> &PlusMinus; </mo>]]></output2>
-        <output3></output3>
-    </PlusMinus>
-    <Assignment>
-        <output1></output1>
-        <output2><![CDATA[<mo> &Assign; </mo>]]></output2>
-        <output3></output3>
-    </Assignment>
-    <Subtract>
-        <output1></output1>
-        <output2><![CDATA[<mo> &minus; </mo>]]></output2>
-        <output3></output3>
-    </Subtract>
-    <Divide brackets="false">
-        <output1><![CDATA[<mfrac> <mrow>]]></output1>
-        <output2><![CDATA[</mrow> <mrow>]]></output2>
-        <output3><![CDATA[</mrow> </mfrac>]]></output3>
-    </Divide>
-    <Divide2>       
-        <output1></output1>
-        <output2><![CDATA[<mo> &divide; </mo>]]></output2>
-        <output3></output3>
-    </Divide2>
-    <LessThan>
-        <output1></output1>
-        <output2><![CDATA[<mo> &lt; </mo>]]></output2>
-        <output3></output3>
-    </LessThan>   
-    <GreaterThan>
-        <output1></output1>
-        <output2><![CDATA[<mo> &gt; </mo>]]></output2>
-        <output3></output3>
-    </GreaterThan>  
-    <LTEQ>
-        <output1></output1>
-        <output2><![CDATA[<mo> &leq; </mo>]]></output2>
-        <output3></output3>
-    </LTEQ> 
-    <GTEQ>
-        <output1></output1>
-        <output2><![CDATA[<mo> &geq; </mo>]]></output2>
-        <output3></output3>
-    </GTEQ> 
-    <Subset>
-        <output1></output1>
-        <output2><![CDATA[<mo> &subset; </mo>]]></output2>
-        <output3></output3>
-    </Subset>  
-    <SubsetEq>
-        <output1></output1>
-        <output2><![CDATA[<mo> &subseteq; </mo>]]></output2>
-        <output3></output3>
-    </SubsetEq>  
-    <NSubset>
-        <output1></output1>
-        <output2><![CDATA[<mo> &nsub; </mo>  ]]></output2>
-        <output3></output3>
-    </NSubset> 
-    <NSubsetEq>
-        <output1></output1>
-        <output2><![CDATA[<mo> &nsubseteq; </mo>]]></output2>
-        <output3></output3>
-    </NSubsetEq> 
-    <Power>
-        <output1><![CDATA[<msup> <mrow>]]></output1>
-        <output2><![CDATA[</mrow> <mrow>]]></output2>
-        <output3><![CDATA[</mrow> </msup>]]></output3>
-    </Power>
-    <Subscript>
-        <output1><![CDATA[<msub> <mrow>]]></output1>
-        <output2><![CDATA[ </mrow> <mrow> ]]></output2>
-        <output3><![CDATA[ </mrow> </msub>]]></output3>
-    </Subscript> 
-    <NthRoot brackets="false">
-        <output1><![CDATA[<mroot> <mrow>]]></output1>
-        <output2><![CDATA[</mrow> <mrow>]]></output2>
-        <output3><![CDATA[</mrow> </mroot>]]></output3>
-    </NthRoot>  
-    <Function>
-        <output1><![CDATA[<mrow>]]></output1>
-        <output2><![CDATA[</mrow> <mfenced> <mrow>]]></output2>
-        <output3><![CDATA[</mrow> </mfenced>]]></output3>
-    </Function>
-    
-    
-    <!--  Nary Functions   -->
-    <Integral>
-        <output1><![CDATA[<mrow><mo>&int;</mo> <mrow>]]></output1>
-        <output2><![CDATA[</mrow> <mo>&DifferentialD;</mo> <mrow>]]></output2>
-        <output3><![CDATA[</mrow> </mrow>]]></output3>
-    </Integral>
-    <Differential order="1,0">
-        <output1><![CDATA[<mrow> <mfrac> <mrow><mo>&DifferentialD;</mo></mrow> <mrow><mo>&DifferentialD;</mo>]]></output1>
-        <output2><![CDATA[</mrow> </mfrac> <mrow>]]></output2>
-        <output3><![CDATA[</mrow> </mrow>]]></output3>
-    </Differential>
-    <PartialDifferential order="1,0">
-        <output1><![CDATA[<mrow> <mfrac> <mrow><mo>&part;</mo></mrow> <mrow><mo>&part;</mo>]]></output1>
-        <output2><![CDATA[</mrow> </mfrac> <mrow>]]></output2>
-        <output3><![CDATA[</mrow> </mrow>]]></output3>
-    </PartialDifferential>
-    <Sum order="1,2,3,0">
-        <output1><![CDATA[<mrow> <munderover> <mo>&sum;</mo> <mrow>]]></output1>
-        <output2><![CDATA[ <mo> &equals; </mo>]]></output2>
-        <output3><![CDATA[</mrow> <mrow>]]></output3>
-        <output4><![CDATA[</mrow> </munderover> <mrow>]]></output4>
-        <output5><![CDATA[</mrow> </mrow>]]></output5>
-    </Sum>
-    <Product order="1,2,3,0">
-        <output1><![CDATA[<mrow> <munderover> <mo>&prod;</mo> <mrow>]]></output1>
-        <output2><![CDATA[<mo> &equals; </mo>]]></output2>
-        <output3><![CDATA[</mrow> <mrow>]]></output3>
-        <output4><![CDATA[</mrow> </munderover> <mrow>]]></output4>
-        <output5><![CDATA[</mrow> </mrow>]]></output5>
-    </Product>
-    <Limit order="1,2,0">
-        <output1><![CDATA[<mrow> <munder> <mrow> <mi>lim</mi> </mrow> <mrow>]]></output1>
-        <output2><![CDATA[ <mo>&rarr;</mo> ]]></output2>
-        <output3><![CDATA[</mrow> </munder> <mrow>]]></output3>
-        <output4><![CDATA[</mrow> </mrow>]]></output4>
-    </Limit>
-    <Evaluate>
-        <output1></output1>
-        <output2><![CDATA[<msub> <mrow> <mi>|</mi> </mrow> <mrow>]]></output2>
-        <output3><![CDATA[ <mo> &equals; </mo>]]></output3>
-        <output4><![CDATA[ </mrow> </msub>]]></output4>
-    </Evaluate>
-    <DefiniteIntegral order="2,3,0,1">
-        <output1><![CDATA[<mrow> <msubsup> <mo>&int;</mo> <mrow>]]></output1>
-        <output2><![CDATA[</mrow> <mrow>]]></output2>
-        <output3><![CDATA[</mrow>  </msubsup> <mrow>]]></output3>
-        <output4><![CDATA[</mrow> <mo>&DifferentialD;</mo> <mrow>]]></output4>
-        <output5><![CDATA[</mrow> </mrow>]]></output5>
-    </DefiniteIntegral>
-    <LeftArrow>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &larr; </mo>]]></output2>
-        <output3></output3>
-    </LeftArrow> 
-    <RightArrow>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &rarr; </mo>]]></output2>
-        <output3></output3>
-    </RightArrow> 
-    <UpArrow>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &uarr; </mo>]]></output2>
-        <output3></output3>
-    </UpArrow> 
-    <DownArrow>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &darr; </mo>]]></output2>
-        <output3></output3>
-    </DownArrow> 
-    <LeftDblArrow>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &lArr; </mo>]]></output2>
-        <output3></output3>
-    </LeftDblArrow> 
-    <RightDblArrow>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &rArr; </mo>]]></output2>
-        <output3></output3>
-    </RightDblArrow> 
-    <LeftRightArrow>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &harr; </mo>]]></output2>
-        <output3></output3>
-    </LeftRightArrow> 
-    <LeftRightDblArrow>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &hArr; </mo>]]></output2>
-        <output3></output3>
-    </LeftRightDblArrow>   
-    <NorthEastArrow>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &nearr; </mo>]]></output2>
-        <output3></output3>
-    </NorthEastArrow>          
-    <SouthEastArrow>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &searr; </mo>]]></output2>
-        <output3></output3>
-    </SouthEastArrow>    
-    <NorthWestArrow>        
-        <output1></output1>
-        <output2><![CDATA[ <mo> &nwarr; </mo>]]></output2>
-        <output3></output3>
-    </NorthWestArrow>     
-    <SouthWestArrow>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &swarr; </mo>]]></output2>
-        <output3></output3>
-    </SouthWestArrow>     
-    
-    <Exists>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &exist; </mo>]]></output2>
-        <output3></output3>
-    </Exists>
-    <ForAll>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &forall; </mo>]]></output2>
-        <output3></output3>
-    </ForAll>
-    <IsIn>        
-        <output1></output1>
-        <output2><![CDATA[ <mo> &isin; </mo>]]></output2>
-        <output3></output3>
-    </IsIn>
-    <NotExists>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &nexists; </mo>]]></output2>
-        <output3></output3>
-    </NotExists>
-    <NotIn>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &notin; </mo>]]></output2>
-        <output3></output3>
-    </NotIn>
-    <SimEq>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &simeq; </mo>]]></output2>
-        <output3></output3>
-    </SimEq>
-    <Or>       
-        <output1></output1>
-        <output2><![CDATA[ <mo> &or; </mo>]]></output2>
-        <output3></output3>
-    </Or>
-    <And>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &and; </mo>]]></output2>
-        <output3></output3>
-    </And>
-    <Not>
-        <output1></output1>
-        <output2><![CDATA[ <mo> &not; </mo>]]></output2>
-        <output3></output3>
-    </Not>
-    
-    
-    
-    <!--  Grouping   -->
-    <BracketsRnd>
-        <output1><![CDATA[<mfenced> <mrow>]]></output1>
-        <output2><![CDATA[</mrow> </mfenced>]]></output2>
-    </BracketsRnd>
-    <BracketsCurl>
-        <output1><![CDATA[<mfenced open="{" close="}"><mrow>]]></output1>
-        <output2><![CDATA[</mrow></mfenced>]]></output2>
-    </BracketsCurl>
-    <BracketsSq>
-        <output1><![CDATA[<mfenced open="[" close="]"><mrow>]]></output1>
-        <output2><![CDATA[</mrow></mfenced>]]></output2>
-    </BracketsSq>
-    <Abs>
-        <output1><![CDATA[<mfenced open="|" close="|"><mrow>]]></output1>
-        <output2><![CDATA[</mrow></mfenced>]]></output2>
-    </Abs>
-    
-    
-    
-    <!--  Matrix   -->
-    <Matrix>
-        <matrixStart><![CDATA[<mfenced open="[" close="]"><mtable>]]></matrixStart>
-        <rowStart><![CDATA[<mtr>]]></rowStart>
-        <elementStart><![CDATA[<mtd>]]></elementStart>
-        <elementEnd><![CDATA[</mtd>]]></elementEnd>
-        <elementSeparator></elementSeparator>
-        <rowEnd><![CDATA[</mtr>]]></rowEnd>
-        <rowSeparator></rowSeparator>
-        <matrixEnd><![CDATA[</mtable></mfenced>]]></matrixEnd>
-    </Matrix>
-    
-    
-    
-    <!--  Symbols   -->
-    <Infinity>
-        <output><![CDATA[<mi> &infin; </mi>]]></output>
-    </Infinity>
-
-    
-    <Γ>
-        <output> <![CDATA[<mi> &Gamma; </mi>]]> </output>
-    </Γ>
-    <Δ>
-        <output> <![CDATA[<mi> &Delta; </mi>]]> </output>
-    </Δ>
-    <Θ>
-        <output> <![CDATA[<mi> &Theta; </mi>]]> </output>
-    </Θ>
-    <Λ>
-        <output> <![CDATA[<mi> &Lambda; </mi>]]> </output>
-    </Λ>
-    <Ξ>
-        <output> <![CDATA[<mi> &Xi; </mi>]]> </output>
-    </Ξ>
-    <Π>
-        <output> <![CDATA[<mi> &Pi; </mi>]]> </output>
-    </Π>
-    <Σ>
-        <output> <![CDATA[<mi> &Sigma; </mi>]]> </output>
-    </Σ>
-    <Υ>
-        <output> <![CDATA[<mi> &Upsilon; </mi>]]> </output>
-    </Υ>
-    <Φ>
-        <output> <![CDATA[<mi> &Phi; </mi>]]> </output>
-    </Φ>
-    <Ψ>
-        <output> <![CDATA[<mi> &Psi; </mi>]]> </output>
-    </Ψ>
-    <Ω>
-        <output> <![CDATA[<mi> &Omega; </mi>]]> </output>
-    </Ω>
-    
-    
-    <α>
-        <output> <![CDATA[<mi> &alpha; </mi>]]> </output>
-    </α>
-    <β>
-        <output> <![CDATA[<mi> &beta; </mi>]]> </output>
-    </β>
-    <γ>
-        <output> <![CDATA[<mi> &gamma; </mi>]]> </output>
-    </γ>
-    <δ>
-        <output> <![CDATA[<mi> &delta; </mi>]]> </output>
-    </δ>
-    <ε>
-        <output> <![CDATA[<mi> &epsi; </mi>]]> </output>
-    </ε>
-    <ζ>
-        <output> <![CDATA[<mi> &zeta; </mi>]]> </output>
-    </ζ>
-    <η>
-        <output> <![CDATA[<mi> &eta; </mi>]]> </output>
-    </η>
-    <θ>
-        <output> <![CDATA[<mi> &theta; </mi>]]> </output>
-    </θ>
-    <ι>
-        <output> <![CDATA[<mi> &iota; </mi>]]> </output>
-    </ι>
-    <κ>
-        <output> <![CDATA[<mi> &kappa; </mi>]]> </output>
-    </κ>
-    <λ>
-        <output> <![CDATA[<mi> &lambda; </mi>]]> </output>
-    </λ>
-    <μ>
-        <output> <![CDATA[<mi> &mu; </mi>]]> </output>
-    </μ>
-    <ν>
-        <output> <![CDATA[<mi> &nu; </mi>]]> </output>
-    </ν>
-    <ξ>
-        <output> <![CDATA[<mi> &xi; </mi>]]> </output>
-    </ξ>
-    <π>
-        <output> <![CDATA[<mi> &pi; </mi>]]> </output>
-    </π>
-    <ρ>
-        <output> <![CDATA[<mi> &rho; </mi>]]> </output>
-    </ρ>
-    <σ>
-        <output> <![CDATA[<mi> &sigma; </mi>]]> </output>
-    </σ>
-    <τ>
-        <output> <![CDATA[<mi> &tau; </mi>]]> </output>
-    </τ>
-    <υ>
-        <output> <![CDATA[<mi> &upsilon; </mi>]]> </output>
-    </υ>
-    <φ>
-        <output> <![CDATA[<mi> &phi; </mi>]]> </output>
-    </φ>
-    <χ>
-        <output> <![CDATA[<mi> &chi; </mi>]]> </output>
-    </χ>
-    <ψ>
-        <output> <![CDATA[<mi> &psi; </mi>]]> </output>
-    </ψ> 
-    <ω>
-        <output> <![CDATA[<mi> &omega; </mi>]]> </output>
-    </ω>
-</Syntax>
diff --git a/lib/dragmath/applet/formats/Maxima.xml b/lib/dragmath/applet/formats/Maxima.xml
deleted file mode 100644 (file)
index cbf5863..0000000
+++ /dev/null
@@ -1,544 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<Syntax>
-    <name AutoBrackets="true">Maxima</name>
-    
-    <Initial>
-        <output1></output1>
-        <output2></output2>
-    </Initial>
-    <Text>
-        <output1></output1>
-        <output2></output2>
-    </Text>
-    <Variable>
-        <output1></output1>
-        <output2></output2>
-    </Variable>
-    <RealNumber>
-        <output1></output1>
-        <output2></output2>
-    </RealNumber>
-    
-    
-    
-    <!--  Nary Operators   -->
-    <Add>
-        <output>+</output>
-    </Add>
-    <Multiply>
-        <output>*</output>
-    </Multiply>
-    <Multiply2>
-        <output>*</output>
-    </Multiply2>
-    <Equals>
-        <output>=</output>
-    </Equals>
-    <Union>
-        <initial>union(</initial>
-        <output>,</output>
-        <final>)</final>
-    </Union>
-    <Intersection>
-        <initial>intersection(</initial>
-        <output>,</output>
-        <final>)</final>
-    </Intersection>
-    <Comma>
-        <output>,</output>
-    </Comma>
-    <Equiv>
-        <output>≡</output>
-    </Equiv>
-    
-    
-    
-    <!--  Functions   -->
-    <UMinus>
-        <output1>-</output1>
-        <output2></output2>
-    </UMinus>
-    <Factorial brackets="false">
-        <output1>(</output1>
-        <output2>)!</output2>
-    </Factorial>
-    <NaturalLogarithm>
-        <output1>log</output1>
-        <output2></output2>
-    </NaturalLogarithm>
-    <Logarithm>
-        <output1>log10</output1>
-        <output2></output2>
-    </Logarithm>
-    <Sine>
-        <output1>sin</output1>
-        <output2></output2>
-    </Sine>
-    <Cosine>
-        <output1>cos</output1>
-        <output2></output2>
-    </Cosine>
-    <Tangent>
-        <output1>tan</output1>
-        <output2></output2>
-    </Tangent>
-    <ArcSine>
-        <output1>asin</output1>
-        <output2></output2>
-    </ArcSine>
-    <ArcCosine>
-        <output1>acos</output1>
-        <output2></output2>
-    </ArcCosine>
-    <ArcTangent>
-        <output1>atan</output1>
-        <output2></output2>
-    </ArcTangent>
-    <SineH>
-        <output1>sinh</output1>
-        <output2></output2>
-    </SineH>
-    <CosineH>
-        <output1>cosh</output1>
-        <output2></output2>
-    </CosineH>
-    <TanH>
-        <output1>tanh</output1>
-        <output2></output2>
-    </TanH>
-    <ArcSineH>
-        <output1>asinh</output1>
-        <output2></output2>
-    </ArcSineH>
-    <ArcCosineH>
-        <output1>acosh</output1>
-        <output2></output2>
-    </ArcCosineH>
-    <ArcTanH>
-        <output1>atanh</output1>
-        <output2></output2>
-    </ArcTanH>
-    <SquareRoot>
-        <output1>sqrt</output1>
-        <output2></output2>
-    </SquareRoot>
-    <Exp>
-        <output1>exp</output1>
-        <output2></output2>
-    </Exp>
-    <Max>
-        <output1>max</output1>
-        <output2></output2>
-    </Max>
-    <Min>
-        <output1>min</output1>
-        <output2></output2>
-    </Min>
-    <Determinant>
-        <output1>det</output1>
-        <output2></output2>
-    </Determinant>
-    <Trace>
-        <output1>trace</output1>
-        <output2></output2>
-    </Trace>
-    
-    
-    
-    <!--  Binary Operators   -->
-    <NotEqual>
-        <output1></output1>
-        <output2>≠</output2>
-        <output3></output3>
-    </NotEqual>
-    <PlusMinus>
-        <output1></output1>
-        <output2>±</output2>
-        <output3></output3>
-    </PlusMinus>
-    <Assignment>
-        <output1></output1>
-        <output2>:</output2>
-        <output3></output3>
-    </Assignment>
-    <Subtract>
-        <output1></output1>
-        <output2>-</output2>
-        <output3></output3>
-    </Subtract>
-    <Divide>
-        <output1></output1>
-        <output2>/</output2>
-        <output3></output3>
-    </Divide>    
-    <Divide2>
-        <output1></output1>
-        <output2>/</output2>
-        <output3></output3>
-    </Divide2> 
-    <LessThan>
-        <output1></output1>
-        <output2><![CDATA[<]]></output2>
-        <output3></output3>
-    </LessThan>    
-    <GreaterThan>
-        <output1></output1>
-        <output2>></output2>
-        <output3></output3>
-    </GreaterThan>    
-    <LTEQ>
-        <output1></output1>
-        <output2><![CDATA[<=]]></output2>
-        <output3></output3>
-    </LTEQ>    
-    <GTEQ>
-        <output1></output1>
-        <output2>>=</output2>
-        <output3></output3>
-    </GTEQ>    
-    <Subset>
-        <output1>subsetp(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </Subset>    
-    <SubsetEq>
-        <output1>subsetp(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </SubsetEq>    
-    <NSubset>
-        <output1>not(subsetp(</output1>
-        <output2>,</output2>
-        <output3>))</output3>
-    </NSubset> 
-    <NSubsetEq>
-        <output1>not(subsetp(</output1>
-        <output2>,</output2>
-        <output3>))</output3>
-    </NSubsetEq>  
-    <Power>
-        <output1></output1>
-        <output2>^</output2>
-        <output3></output3>
-    </Power>
-    <Subscript>
-        <output1></output1>
-        <output2>[</output2>
-        <output3>]</output3>
-    </Subscript>  
-    <NthRoot>
-        <output1>(</output1>
-        <output2>)^(1/(</output2>
-        <output3>))</output3>
-    </NthRoot>  
-    <Function>
-        <output1></output1>
-        <output2>(</output2>
-        <output3>)</output3>
-    </Function>
-    <LeftArrow>
-        <output1></output1>
-        <output2>←</output2>
-        <output3></output3>
-    </LeftArrow> 
-    <RightArrow>
-        <output1></output1>
-        <output2>→</output2>
-        <output3></output3>
-    </RightArrow> 
-    <UpArrow>
-        <output1></output1>
-        <output2>↑</output2>
-        <output3></output3>
-    </UpArrow> 
-    <DownArrow>
-        <output1></output1>
-        <output2>↓</output2>
-        <output3></output3>
-    </DownArrow> 
-    <LeftDblArrow>
-        <output1></output1>
-        <output2>⇐</output2>
-        <output3></output3>
-    </LeftDblArrow> 
-    <RightDblArrow>
-        <output1></output1>
-        <output2>⇒</output2>
-        <output3></output3>
-    </RightDblArrow> 
-    <LeftRightArrow>
-        <output1></output1>
-        <output2>↔</output2>
-        <output3></output3>
-    </LeftRightArrow> 
-    <LeftRightDblArrow>
-        <output1></output1>
-        <output2>⇔</output2>
-        <output3></output3>
-    </LeftRightDblArrow>   
-    <NorthEastArrow>
-        <output1></output1>
-        <output2>↗</output2>
-        <output3></output3>
-    </NorthEastArrow>          
-    <SouthEastArrow>
-        <output1></output1>
-        <output2>↘</output2>
-        <output3></output3>
-    </SouthEastArrow>    
-    <NorthWestArrow>        
-        <output1></output1>
-        <output2>↖</output2>
-        <output3></output3>
-    </NorthWestArrow>     
-    <SouthWestArrow>
-        <output1></output1>
-        <output2>↙</output2>
-        <output3></output3>
-    </SouthWestArrow>     
-    
-    <Exists>
-        <output1></output1>
-        <output2>∃</output2>
-        <output3></output3>
-    </Exists>
-    <ForAll>
-        <output1></output1>
-        <output2>∀</output2>
-        <output3></output3>
-    </ForAll>
-    <IsIn>        
-        <output1></output1>
-        <output2>∈</output2>
-        <output3></output3>
-    </IsIn>
-    <NotExists>
-        <output1></output1>
-        <output2>∄</output2>
-        <output3></output3>
-    </NotExists>
-    <NotIn>
-        <output1></output1>
-        <output2>∉</output2>
-        <output3></output3>
-    </NotIn>
-    <SimEq>
-        <output1></output1>
-        <output2>≃</output2>
-        <output3></output3>
-    </SimEq>
-    <Or>       
-        <output1></output1>
-        <output2>∨</output2>
-        <output3></output3>
-    </Or>
-    <And>
-        <output1></output1>
-        <output2>∧</output2>
-        <output3></output3>
-    </And>
-    <Not>
-        <output1></output1>
-        <output2>¬</output2>
-        <output3></output3>
-    </Not>
-    
-    
-    <!--  Nary Functions   -->
-    <Integral>
-        <output1> integrate(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </Integral>
-    <Differential>
-        <output1>diff(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </Differential>
-    <PartialDifferential>
-        <output1>diff(</output1>
-        <output2>,</output2>
-        <output3>)</output3>
-    </PartialDifferential>
-    <Sum>
-        <output1>sum(</output1>
-        <output2>,</output2>
-        <output3>,</output3>
-        <output4>,</output4>
-        <output5>);</output5>
-    </Sum>
-    <Product>
-        <output1>product(</output1>
-        <output2>,</output2>
-        <output3>,</output3>
-        <output4>,</output4>
-        <output5>);</output5>
-    </Product>
-    <Limit>
-        <output1>limit(</output1>
-        <output2>,</output2>
-        <output3>=</output3>
-        <output4>);</output4>
-    </Limit>
-    <Evaluate order="1,2,0">
-        <output1>subst(</output1>
-        <output2>=</output2>
-        <output3>,</output3>
-        <output4>)</output4>
-    </Evaluate>
-    <DefiniteIntegral>
-        <output1>integrate(</output1>
-        <output2>,</output2>
-        <output3>,</output3>
-        <output4>,</output4>
-        <output5>)</output5>
-    </DefiniteIntegral>
-    
-    
-    
-    <!--  Matrix   -->
-    <Matrix>
-        <matrixStart>matrix(</matrixStart>
-        <rowStart>[</rowStart>
-        <elementStart></elementStart>
-        <elementEnd></elementEnd>
-        <elementSeparator>,</elementSeparator>
-        <rowEnd>]</rowEnd>
-        <rowSeparator>,</rowSeparator>
-        <matrixEnd>)</matrixEnd>
-    </Matrix>
-    
-    
-    
-    <!--  Grouping   -->
-    <BracketsRnd>
-        <output1>(</output1>
-        <output2>)</output2>
-    </BracketsRnd>
-    <BracketsCurl>
-        <output1>{</output1>
-        <output2>}</output2>
-    </BracketsCurl>
-    <BracketsSq>
-        <output1>[</output1>
-        <output2>]</output2>
-    </BracketsSq>
-    <Abs>
-        <output1>abs(</output1>
-        <output2>)</output2>
-    </Abs>
-    
-    
-    
-    <!--  Symbols   -->
-    <Infinity>
-        <output>infinity</output>
-    </Infinity>
-    
-    <Γ>
-        <output> Gamma </output>
-    </Γ>
-    <Δ>
-        <output> Delta </output>
-    </Δ>
-    <Θ>
-        <output> Theta </output>
-    </Θ>
-    <Λ>
-        <output> Lambda </output>
-    </Λ>
-    <Ξ>
-        <output> Xi </output>
-    </Ξ>
-    <Π>
-        <output> Pi </output>
-    </Π>
-    <Σ>
-        <output> Sigma </output>
-    </Σ>
-    <Υ>
-        <output> Upsilon </output>
-    </Υ>
-    <Φ>
-        <output> Phi </output>
-    </Φ>
-    <Ψ>
-        <output> Psi </output>
-    </Ψ>
-    <Ω>
-        <output> Omega </output>
-    </Ω>
-    
-    
-    <α>
-        <output> alpha </output>
-    </α>
-    <β>
-        <output> beta </output>
-    </β>
-    <γ>
-        <output> %gamma </output>
-    </γ>
-    <δ>
-        <output> delta </output>
-    </δ>
-    <ε>
-        <output> epsilon </output>
-    </ε>
-    <ζ>
-        <output> zeta </output>
-    </ζ>
-    <η>
-        <output> eta </output>
-    </η>
-    <θ>
-        <output> theta </output>
-    </θ>
-    <ι>
-        <output> iota </output>
-    </ι>
-    <κ>
-        <output> kappa </output>
-    </κ>
-    <λ>
-        <output> lambda </output>
-    </λ>
-    <μ>
-        <output> mu </output>
-    </μ>
-    <ν>
-        <output> nu </output>
-    </ν>
-    <ξ>
-        <output> xi </output>
-    </ξ>
-    <π>
-        <output> %pi </output>
-    </π>
-    <ρ>
-        <output> rho </output>
-    </ρ>
-    <σ>
-        <output> sigma </output>
-    </σ>
-    <τ>
-        <output> tau </output>
-    </τ>
-    <υ>
-        <output> upsilon </output>
-    </υ>
-    <φ>
-        <output> phi </output>
-    </φ>
-    <χ>
-        <output> chi </output>
-    </χ>
-    <ψ>
-        <output> psi </output>
-    </ψ> 
-    <ω>
-        <output> omega </output>
-    </ω>
-    
-</Syntax>
diff --git a/lib/dragmath/applet/formats/MoodleTex.xml b/lib/dragmath/applet/formats/MoodleTex.xml
deleted file mode 100644 (file)
index 4490914..0000000
+++ /dev/null
@@ -1,541 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<Syntax>
-    <name AutoBrackets="false">MoodleTex</name>
-    
-    <Initial>
-        <output1>$$</output1>
-        <output2>$$</output2>
-    </Initial>
-    <Text>
-        <output1></output1>
-        <output2></output2>
-    </Text>
-    <Variable>
-        <output1></output1>
-        <output2></output2>
-    </Variable>
-    <RealNumber>
-        <output1></output1>
-        <output2></output2>
-    </RealNumber>
-    
-    
-    
-    <!--  Nary Operators   -->
-    <Add>
-        <output>+</output>
-    </Add>
-    <Multiply>
-        <output> \cdot </output>
-    </Multiply>
-    <Multiply2>
-        <output> \times </output>
-    </Multiply2>
-    <Equals>
-        <output>=</output>
-    </Equals>
-    <Union>
-        <output> \cup </output>
-    </Union>
-    <Intersection>
-        <output> \cap </output>
-    </Intersection>
-    <Comma>
-        <output>,</output>
-    </Comma>
-    <Equiv>
-        <output> \equiv </output>
-    </Equiv>
-    
-    
-    
-    <!--  Functions   -->
-    <UMinus>
-        <output1>-</output1>
-        <output2></output2>
-    </UMinus>
-    <Factorial brackets="false">
-        <output1>{</output1>
-        <output2>}!</output2>
-    </Factorial>
-    <NaturalLogarithm>
-        <output1> \ln </output1>
-        <output2></output2>
-    </NaturalLogarithm>
-    <Logarithm>
-        <output1> \log </output1>
-        <output2></output2>
-    </Logarithm>
-    <Sine>
-        <output1> \sin </output1>
-        <output2></output2>
-    </Sine>
-    <Cosine>
-        <output1> \cos </output1>
-        <output2></output2>
-    </Cosine>
-    <Tangent>
-        <output1> \tan </output1>
-        <output2></output2>
-    </Tangent>
-    <ArcSine>
-        <output1> \sin^{-1} </output1>
-        <output2></output2>
-    </ArcSine>
-    <ArcCosine>
-        <output1> \cos^{-1} </output1>
-        <output2></output2>
-    </ArcCosine>
-    <ArcTangent>
-        <output1> \tan^{-1} </output1>
-        <output2></output2>
-    </ArcTangent>
-    <SineH>
-        <output1> \sinh </output1>
-        <output2></output2>
-    </SineH>
-    <CosineH>
-        <output1> \cosh </output1>
-        <output2></output2>
-    </CosineH>
-    <TanH>
-        <output1> \tanh </output1>
-        <output2></output2>
-    </TanH>
-    <ArcSineH>
-        <output1> \sinh^{-1} </output1>
-        <output2></output2>
-    </ArcSineH>
-    <ArcCosineH>
-        <output1> \cosh^{-1} </output1>
-        <output2></output2>
-    </ArcCosineH>
-    <ArcTanH>
-        <output1> \tanh^{-1} </output1>
-        <output2></output2>
-    </ArcTanH>
-    <SquareRoot brackets="false">
-        <output1> \sqrt{</output1>
-        <output2>} </output2>
-    </SquareRoot>
-    <Exp brackets="false">
-        <output1> e^{</output1>
-        <output2>} </output2>
-    </Exp>
-    <Max>
-        <output1>\max</output1>
-        <output2></output2>
-    </Max>
-    <Min>
-        <output1>\min</output1>
-        <output2></output2>
-    </Min>
-    <Determinant>
-        <output1>\det</output1>
-        <output2></output2>
-    </Determinant>
-    <Trace>
-        <output1>Tr</output1>
-        <output2></output2>
-    </Trace>
-    
-    
-    
-    <!--  Binary Operators  -->
-    <NotEqual>
-        <output1></output1>
-        <output2> \neq </output2>
-        <output3></output3>
-    </NotEqual>
-    <PlusMinus>
-        <output1></output1>
-        <output2> \pm </output2>
-        <output3></output3>
-    </PlusMinus> 
-    <Assignment>
-        <output1></output1>
-        <output2>:=</output2>
-        <output3></output3>
-    </Assignment>
-    <Subtract>
-        <output1></output1>
-        <output2>-</output2>
-        <output3></output3>
-    </Subtract>
-    <Divide brackets="false">
-        <output1> \frac{</output1>
-        <output2>}{</output2>
-        <output3>} </output3>
-    </Divide>
-    <Divide2>       
-        <output1></output1>
-        <output2> \div </output2>
-        <output3></output3>
-    </Divide2>
-    <LessThan>
-        <output1></output1>
-        <output2><![CDATA[<]]></output2>
-        <output3></output3>
-    </LessThan>    
-    <GreaterThan>
-        <output1></output1>
-        <output2>></output2>
-        <output3></output3>
-    </GreaterThan>    
-    <LTEQ>
-        <output1></output1>
-        <output2> \le </output2>
-        <output3></output3>
-    </LTEQ>    
-    <GTEQ>
-        <output1></output1>
-        <output2> \ge </output2>
-        <output3></output3>
-    </GTEQ>    
-    <Subset>
-        <output1></output1>
-        <output2> \subset </output2>
-        <output3></output3>
-    </Subset>    
-    <SubsetEq>
-        <output1></output1>
-        <output2> \subseteq </output2>
-        <output3></output3>
-    </SubsetEq>    
-    <NSubset>
-        <output1></output1>
-        <output2> \not\subset </output2>
-        <output3></output3>
-    </NSubset> 
-    <NSubsetEq>
-        <output1></output1>
-        <output2> \not\subseteq </output2>
-        <output3></output3>
-    </NSubsetEq>  
-    <Power>
-        <output1></output1>
-        <output2>^{</output2>
-        <output3>}</output3>
-    </Power>
-    <Subscript>
-        <output1></output1>
-        <output2>_{</output2>
-        <output3>}</output3>
-    </Subscript>  
-    <NthRoot reverse="true" brackets="false">
-        <output1> \sqrt[</output1>
-        <output2>]{</output2>
-        <output3>} </output3>
-    </NthRoot> 
-    <Function>
-        <output1></output1>
-        <output2>\left(</output2>
-        <output3>\right)</output3>
-    </Function>
-    <LeftArrow>
-        <output1></output1>
-        <output2> \leftarrow </output2>
-        <output3></output3>
-    </LeftArrow> 
-    <RightArrow>
-        <output1></output1>
-        <output2> \rightarrow </output2>
-        <output3></output3>
-    </RightArrow> 
-    <UpArrow>
-        <output1></output1>
-        <output2> \uparrow </output2>
-        <output3></output3>
-    </UpArrow> 
-    <DownArrow>
-        <output1></output1>
-        <output2> \downarrow </output2>
-        <output3></output3>
-    </DownArrow> 
-    <LeftDblArrow>
-        <output1></output1>
-        <output2> \Leftarrow </output2>
-        <output3></output3>
-    </LeftDblArrow> 
-    <RightDblArrow>
-        <output1></output1>
-        <output2> \Rightarrow </output2>
-        <output3></output3>
-    </RightDblArrow> 
-    <LeftRightArrow>
-        <output1></output1>
-        <output2> \leftrightarrow </output2>
-        <output3></output3>
-    </LeftRightArrow> 
-    <LeftRightDblArrow>
-        <output1></output1>
-        <output2> \Leftrightarrow </output2>
-        <output3></output3>
-    </LeftRightDblArrow>   
-    <NorthEastArrow>
-        <output1></output1>
-        <output2> \nearrow </output2>
-        <output3></output3>
-    </NorthEastArrow>          
-    <SouthEastArrow>
-        <output1></output1>
-        <output2> \searrow </output2>
-        <output3></output3>
-    </SouthEastArrow>    
-    <NorthWestArrow>        
-        <output1></output1>
-        <output2> \nwarrow </output2>
-        <output3></output3>
-    </NorthWestArrow>     
-    <SouthWestArrow>
-        <output1></output1>
-        <output2> \swarrow </output2>
-        <output3></output3>
-    </SouthWestArrow>     
-    
-    <Exists>
-        <output1></output1>
-        <output2> \exists </output2>
-        <output3></output3>
-    </Exists>
-    <ForAll>
-        <output1></output1>
-        <output2> \forall </output2>
-        <output3></output3>
-    </ForAll>
-    <IsIn>        
-        <output1></output1>
-        <output2> \epsilon </output2>
-        <output3></output3>
-    </IsIn>
-    <NotExists>
-        <output1></output1>
-        <output2> \not\exists </output2>
-        <output3></output3>
-    </NotExists>
-    <NotIn>
-        <output1></output1>
-        <output2> \not\epsilon </output2>
-        <output3></output3>
-    </NotIn>
-    <SimEq>
-        <output1></output1>
-        <output2> \simeq </output2>
-        <output3></output3>
-    </SimEq>
-    <Or>       
-        <output1></output1>
-        <output2> \vee </output2>
-        <output3></output3>
-    </Or>
-    <And>
-        <output1></output1>
-        <output2> \wedge </output2>
-        <output3></output3>
-    </And>
-    <Not>
-        <output1></output1>
-        <output2> \neg </output2>
-        <output3></output3>
-    </Not>
-    
-    
-    <!--  Nary Functions   -->
-    <Integral>
-        <output1> \int </output1>
-        <output2>\,d</output2>
-        <output3></output3>
-    </Integral>
-    <Differential order="1,0">
-        <output1> \frac{d}{d</output1>
-        <output2>}</output2>
-        <output3></output3>
-    </Differential>
-    <PartialDifferential order="1,0">
-        <output1> \frac{\partial}{\partial </output1>
-        <output2>}</output2>
-        <output3></output3>
-    </PartialDifferential>
-    <Sum order="1,2,3,0">
-        <output1> \sum_{{</output1>
-        <output2>}={</output2>
-        <output3>}}^{</output3>
-        <output4>}</output4>
-        <output5></output5>
-    </Sum>
-    <Product order="1,2,3,0">
-        <output1> \prod_{{</output1>
-        <output2>}={</output2>
-        <output3>}}^{</output3>
-        <output4>}</output4>
-        <output5></output5>
-    </Product>
-    <Limit order="1,2,0">
-        <output1> \lim_{</output1>
-        <output2>\to</output2>
-        <output3>}</output3>
-        <output4></output4>
-    </Limit>
-    <Evaluate>
-        <output1></output1>
-        <output2>\left|_{{</output2>
-        <output3>}={</output3>
-        <output4>}}</output4>
-    </Evaluate>
-    <DefiniteIntegral order="2,3,0,1">
-        <output1> \int_{</output1>
-        <output2>}^{</output2>
-        <output3>}</output3>
-        <output4>\,d</output4>
-        <output5></output5>
-    </DefiniteIntegral>
-    
-    
-    
-    <!--  Matrix   -->
-    <Matrix>
-        <matrixStart> \left( \begin{array}{ccc} </matrixStart>
-        <rowStart></rowStart>
-        <elementStart></elementStart>
-        <elementEnd></elementEnd>
-        <elementSeparator><![CDATA[ & ]]></elementSeparator>
-        <rowEnd>\\</rowEnd>
-        <rowSeparator></rowSeparator>
-        <matrixEnd> \end{array} \right) </matrixEnd>
-    </Matrix>
-    
-    
-    
-    <!--  Grouping  -->
-    <BracketsRnd>
-        <output1>\left(</output1>
-        <output2>\right)</output2>
-    </BracketsRnd>
-    <BracketsCurl>
-        <output1>\{</output1>
-        <output2>\}</output2>
-    </BracketsCurl>
-    <BracketsSq>
-        <output1>\left[</output1>
-        <output2>\right]</output2>
-    </BracketsSq>
-    <Abs>
-        <output1>\left|</output1>
-        <output2>\right|</output2>
-    </Abs>
-    
-    
-    
-    <!--  Symbols   -->
-    <Infinity>
-        <output>\infty</output>
-    </Infinity>
-    
-    
-    <Γ>
-        <output> \Gamma </output>
-    </Γ>
-    <Δ>
-        <output> \Delta </output>
-    </Δ>
-    <Θ>
-        <output> \Theta </output>
-    </Θ>
-    <Λ>
-        <output> \Lambda </output>
-    </Λ>
-    <Ξ>
-        <output> \Xi </output>
-    </Ξ>
-    <Π>
-        <output> \Pi </output>
-    </Π>
-    <Σ>
-        <output> \Sigma </output>
-    </Σ>
-    <Υ>
-        <output> \Upsilon </output>
-    </Υ>
-    <Φ>
-        <output> \Phi </output>
-    </Φ>
-    <Ψ>
-        <output> \Psi </output>
-    </Ψ>
-    <Ω>
-        <output> \Omega </output>
-    </Ω>
-    
-    
-    <α>
-        <output> \alpha </output>
-    </α>
-    <β>
-        <output> \beta </output>
-    </β>
-    <γ>
-        <output> \gamma </output>
-    </γ>
-    <δ>
-        <output> \delta </output>
-    </δ>
-    <ε>
-        <output> \epsilon </output>
-    </ε>
-    <ζ>
-        <output> \zeta </output>
-    </ζ>
-    <η>
-        <output> \eta </output>
-    </η>
-    <θ>
-        <output> \theta </output>
-    </θ>
-    <ι>
-        <output> \iota </output>
-    </ι>
-    <κ>
-        <output> \kappa </output>
-    </κ>
-    <λ>
-        <output> \lambda </output>
-    </λ>
-    <μ>
-        <output> \mu </output>
-    </μ>
-    <ν>
-        <output> \nu </output>
-    </ν>
-    <ξ>
-        <output> \xi </output>
-    </ξ>
-    <π>
-        <output> \pi </output>
-    </π>
-    <ρ>
-        <output> \rho </output>
-    </ρ>
-    <σ>
-        <output> \sigma </output>
-    </σ>
-    <τ>
-        <output> \tau </output>
-    </τ>
-    <υ>
-        <output> \upsilon </output>
-    </υ>
-    <φ>
-        <output> \phi </output>
-    </φ>
-    <χ>
-        <output> \chi </output>
-    </χ>
-    <ψ>
-        <output> \psi </output>
-    </ψ> 
-    <ω>
-        <output> \omega </output>
-    </ω>
-    
-</Syntax>
diff --git a/lib/dragmath/applet/formats/Tex.xml b/lib/dragmath/applet/formats/Tex.xml
deleted file mode 100644 (file)
index 4ddf9ea..0000000
+++ /dev/null
@@ -1,541 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<Syntax>
-    <name AutoBrackets="false">Tex</name>
-    
-    <Initial>
-        <output1></output1>
-        <output2></output2>
-    </Initial>
-    <Text>
-        <output1></output1>
-        <output2></output2>
-    </Text>
-    <Variable>
-        <output1></output1>
-        <output2></output2>
-    </Variable>
-    <RealNumber>
-        <output1></output1>
-        <output2></output2>
-    </RealNumber>
-    
-    
-    
-    <!--  Nary Operators   -->
-    <Add>
-        <output>+</output>
-    </Add>
-    <Multiply>
-        <output> \cdot </output>
-    </Multiply>
-    <Multiply2>
-        <output> \times </output>
-    </Multiply2>
-    <Equals>
-        <output>=</output>
-    </Equals>
-    <Union>
-        <output> \cup </output>
-    </Union>
-    <Intersection>
-        <output> \cap </output>
-    </Intersection>
-    <Comma>
-        <output>,</output>
-    </Comma>
-    <Equiv>
-        <output> \equiv </output>
-    </Equiv>
-    
-    
-    
-    <!--  Functions   -->
-    <UMinus>
-        <output1>-</output1>
-        <output2></output2>
-    </UMinus>
-    <Factorial brackets="false">
-        <output1>{</output1>
-        <output2>}!</output2>
-    </Factorial>
-    <NaturalLogarithm>
-        <output1> \ln </output1>
-        <output2></output2>
-    </NaturalLogarithm>
-    <Logarithm>
-        <output1> \log </output1>
-        <output2></output2>
-    </Logarithm>
-    <Sine>
-        <output1> \sin </output1>
-        <output2></output2>
-    </Sine>
-    <Cosine>
-        <output1> \cos </output1>
-        <output2></output2>
-    </Cosine>
-    <Tangent>
-        <output1> \tan </output1>
-        <output2></output2>
-    </Tangent>
-    <ArcSine>
-        <output1> \sin^{-1} </output1>
-        <output2></output2>
-    </ArcSine>
-    <ArcCosine>
-        <output1> \cos^{-1} </output1>
-        <output2></output2>
-    </ArcCosine>
-    <ArcTangent>
-        <output1> \tan^{-1} </output1>
-        <output2></output2>
-    </ArcTangent>
-    <SineH>
-        <output1> \sinh </output1>
-        <output2></output2>
-    </SineH>
-    <CosineH>
-        <output1> \cosh </output1>
-        <output2></output2>
-    </CosineH>
-    <TanH>
-        <output1> \tanh </output1>
-        <output2></output2>
-    </TanH>
-    <ArcSineH>
-        <output1> \sinh^{-1} </output1>
-        <output2></output2>
-    </ArcSineH>
-    <ArcCosineH>
-        <output1> \cosh^{-1} </output1>
-        <output2></output2>
-    </ArcCosineH>
-    <ArcTanH>
-        <output1> \tanh^{-1} </output1>
-        <output2></output2>
-    </ArcTanH>
-    <SquareRoot brackets="false">
-        <output1> \sqrt{</output1>
-        <output2>} </output2>
-    </SquareRoot>
-    <Exp brackets="false">
-        <output1> e^{</output1>
-        <output2>} </output2>
-    </Exp>
-    <Max>
-        <output1>\max</output1>
-        <output2></output2>
-    </Max>
-    <Min>
-        <output1>\min</output1>
-        <output2></output2>
-    </Min>
-    <Determinant>
-        <output1>\det</output1>
-        <output2></output2>
-    </Determinant>
-    <Trace>
-        <output1>Tr</output1>
-        <output2></output2>
-    </Trace>
-    
-    
-    
-    <!--  Binary Operators  -->
-    <NotEqual>
-        <output1></output1>
-        <output2> \neq </output2>
-        <output3></output3>
-    </NotEqual>
-    <PlusMinus>
-        <output1></output1>
-        <output2> \pm </output2>
-        <output3></output3>
-    </PlusMinus> 
-    <Assignment>
-        <output1></output1>
-        <output2>:=</output2>
-        <output3></output3>
-    </Assignment>
-    <Subtract>
-        <output1></output1>
-        <output2>-</output2>
-        <output3></output3>
-    </Subtract>
-    <Divide brackets="false">
-        <output1> \frac{</output1>
-        <output2>}{</output2>
-        <output3>} </output3>
-    </Divide>
-    <Divide2>       
-        <output1></output1>
-        <output2> \div </output2>
-        <output3></output3>
-    </Divide2>
-    <LessThan>
-        <output1></output1>
-        <output2><![CDATA[<]]></output2>
-        <output3></output3>
-    </LessThan>    
-    <GreaterThan>
-        <output1></output1>
-        <output2>></output2>
-        <output3></output3>
-    </GreaterThan>    
-    <LTEQ>
-        <output1></output1>
-        <output2> \le </output2>
-        <output3></output3>
-    </LTEQ>    
-    <GTEQ>
-        <output1></output1>
-        <output2> \ge </output2>
-        <output3></output3>
-    </GTEQ>    
-    <Subset>
-        <output1></output1>
-        <output2> \subset </output2>
-        <output3></output3>
-    </Subset>    
-    <SubsetEq>
-        <output1></output1>
-        <output2> \subseteq </output2>
-        <output3></output3>
-    </SubsetEq>    
-    <NSubset>
-        <output1></output1>
-        <output2> \not\subset </output2>
-        <output3></output3>
-    </NSubset> 
-    <NSubsetEq>
-        <output1></output1>
-        <output2> \not\subseteq </output2>
-        <output3></output3>
-    </NSubsetEq>  
-    <Power>
-        <output1></output1>
-        <output2>^{</output2>
-        <output3>}</output3>
-    </Power>
-    <Subscript>
-        <output1></output1>
-        <output2>_{</output2>
-        <output3>}</output3>
-    </Subscript>  
-    <NthRoot reverse="true" brackets="false">
-        <output1> \root </output1>
-        <output2> \of {</output2>
-        <output3>}</output3>
-    </NthRoot> 
-    <Function>
-        <output1></output1>
-        <output2>\left(</output2>
-        <output3>\right)</output3>
-    </Function>
-    <LeftArrow>
-        <output1></output1>
-        <output2> \leftarrow </output2>
-        <output3></output3>
-    </LeftArrow> 
-    <RightArrow>
-        <output1></output1>
-        <output2> \rightarrow </output2>
-        <output3></output3>
-    </RightArrow> 
-    <UpArrow>
-        <output1></output1>
-        <output2> \uparrow </output2>
-        <output3></output3>
-    </UpArrow> 
-    <DownArrow>
-        <output1></output1>
-        <output2> \downarrow </output2>
-        <output3></output3>
-    </DownArrow> 
-    <LeftDblArrow>
-        <output1></output1>
-        <output2> \Leftarrow </output2>
-        <output3></output3>
-    </LeftDblArrow> 
-    <RightDblArrow>
-        <output1></output1>
-        <output2> \Rightarrow </output2>
-        <output3></output3>
-    </RightDblArrow> 
-    <LeftRightArrow>
-        <output1></output1>
-        <output2> \leftrightarrow </output2>
-        <output3></output3>
-    </LeftRightArrow> 
-    <LeftRightDblArrow>
-        <output1></output1>
-        <output2> \Leftrightarrow </output2>
-        <output3></output3>
-    </LeftRightDblArrow>   
-    <NorthEastArrow>
-        <output1></output1>
-        <output2> \nearrow </output2>
-        <output3></output3>
-    </NorthEastArrow>          
-    <SouthEastArrow>
-        <output1></output1>
-        <output2> \searrow </output2>
-        <output3></output3>
-    </SouthEastArrow>    
-    <NorthWestArrow>        
-        <output1></output1>
-        <output2> \nwarrow </output2>
-        <output3></output3>
-    </NorthWestArrow>     
-    <SouthWestArrow>
-        <output1></output1>
-        <output2> \swarrow </output2>
-        <output3></output3>
-    </SouthWestArrow>     
-    
-    <Exists>
-        <output1></output1>
-        <output2> \exists </output2>
-        <output3></output3>
-    </Exists>
-    <ForAll>
-        <output1></output1>
-        <output2> \forall </output2>
-        <output3></output3>
-    </ForAll>
-    <IsIn>        
-        <output1></output1>
-        <output2> \epsilon </output2>
-        <output3></output3>
-    </IsIn>
-    <NotExists>
-        <output1></output1>
-        <output2> \not\exists </output2>
-        <output3></output3>
-    </NotExists>
-    <NotIn>
-        <output1></output1>
-        <output2> \not\epsilon </output2>
-        <output3></output3>
-    </NotIn>
-    <SimEq>
-        <output1></output1>
-        <output2> \simeq </output2>
-        <output3></output3>
-    </SimEq>
-    <Or>       
-        <output1></output1>
-        <output2> \vee </output2>
-        <output3></output3>
-    </Or>
-    <And>
-        <output1></output1>
-        <output2> \wedge </output2>
-        <output3></output3>
-    </And>
-    <Not>
-        <output1></output1>
-        <output2> \neg </output2>
-        <output3></output3>
-    </Not>
-    
-    
-    <!--  Nary Functions   -->
-    <Integral>
-        <output1> \int </output1>
-        <output2>\,d</output2>
-        <output3></output3>
-    </Integral>
-    <Differential order="1,0">
-        <output1> \frac{d}{d</output1>
-        <output2>}</output2>
-        <output3></output3>
-    </Differential>
-    <PartialDifferential order="1,0">
-        <output1> \frac{\partial}{\partial </output1>
-        <output2>}</output2>
-        <output3></output3>
-    </PartialDifferential>
-    <Sum order="1,2,3,0">
-        <output1> \sum_{{</output1>
-        <output2>}={</output2>
-        <output3>}}^{</output3>
-        <output4>}</output4>
-        <output5></output5>
-    </Sum>
-    <Product order="1,2,3,0">
-        <output1> \prod_{{</output1>
-        <output2>}={</output2>
-        <output3>}}^{</output3>
-        <output4>}</output4>
-        <output5></output5>
-    </Product>
-    <Limit order="1,2,0">
-        <output1> \lim_{</output1>
-        <output2>\to</output2>
-        <output3>}</output3>
-        <output4></output4>
-    </Limit>
-    <Evaluate>
-        <output1></output1>
-        <output2>\left|_{{</output2>
-        <output3>}={</output3>
-        <output4>}}</output4>
-    </Evaluate>
-    <DefiniteIntegral order="2,3,0,1">
-        <output1> \int_{</output1>
-        <output2>}^{</output2>
-        <output3>}</output3>
-        <output4>\,d</output4>
-        <output5></output5>
-    </DefiniteIntegral>
-    
-    
-    
-    <!--  Matrix   -->
-    <Matrix>
-        <matrixStart> \pmatrix{</matrixStart>
-        <rowStart></rowStart>
-        <elementStart></elementStart>
-        <elementEnd></elementEnd>
-        <elementSeparator><![CDATA[ & ]]></elementSeparator>
-        <rowEnd></rowEnd>
-        <rowSeparator>\cr</rowSeparator>
-        <matrixEnd>} </matrixEnd>
-    </Matrix>
-    
-    
-    
-    <!--  Grouping  -->
-    <BracketsRnd>
-        <output1>\left(</output1>
-        <output2>\right)</output2>
-    </BracketsRnd>
-    <BracketsCurl>
-        <output1>\{</output1>
-        <output2>\}</output2>
-    </BracketsCurl>
-    <BracketsSq>
-        <output1>\left[</output1>
-        <output2>\right]</output2>
-    </BracketsSq>
-    <Abs>
-        <output1>\left|</output1>
-        <output2>\right|</output2>
-    </Abs>
-    
-    
-    
-    <!--  Symbols   -->
-    <Infinity>
-        <output>\infty</output>
-    </Infinity>
-    
-    
-    <Γ>
-        <output> \Gamma </output>
-    </Γ>
-    <Δ>
-        <output> \Delta </output>
-    </Δ>
-    <Θ>
-        <output> \Theta </output>
-    </Θ>
-    <Λ>
-        <output> \Lambda </output>
-    </Λ>
-    <Ξ>
-        <output> \Xi </output>
-    </Ξ>
-    <Π>
-        <output> \Pi </output>
-    </Π>
-    <Σ>
-        <output> \Sigma </output>
-    </Σ>
-    <Υ>
-        <output> \Upsilon </output>
-    </Υ>
-    <Φ>
-        <output> \Phi </output>
-    </Φ>
-    <Ψ>
-        <output> \Psi </output>
-    </Ψ>
-    <Ω>
-        <output> \Omega </output>
-    </Ω>
-    
-    
-    <α>
-        <output> \alpha </output>
-    </α>
-    <β>
-        <output> \beta </output>
-    </β>
-    <γ>
-        <output> \gamma </output>
-    </γ>
-    <δ>
-        <output> \delta </output>
-    </δ>
-    <ε>
-        <output> \epsilon </output>
-    </ε>
-    <ζ>
-        <output> \zeta </output>
-    </ζ>
-    <η>
-        <output> \eta </output>
-    </η>
-    <θ>
-        <output> \theta </output>
-    </θ>
-    <ι>
-        <output> \iota </output>
-    </ι>
-    <κ>
-        <output> \kappa </output>
-    </κ>
-    <λ>
-        <output> \lambda </output>
-    </λ>
-    <μ>
-        <output> \mu </output>
-    </μ>
-    <ν>
-        <output> \nu </output>
-    </ν>
-    <ξ>
-        <output> \xi </output>
-    </ξ>
-    <π>
-        <output> \pi </output>
-    </π>
-    <ρ>
-        <output> \rho </output>
-    </ρ>
-    <σ>
-        <output> \sigma </output>
-    </σ>
-    <τ>
-        <output> \tau </output>
-    </τ>
-    <υ>
-        <output> \upsilon </output>
-    </υ>
-    <φ>
-        <output> \phi </output>
-    </φ>
-    <χ>
-        <output> \chi </output>
-    </χ>
-    <ψ>
-        <output> \psi </output>
-    </ψ> 
-    <ω>
-        <output> \omega </output>
-    </ω>
-    
-</Syntax>
diff --git a/lib/dragmath/applet/lang/ca.xml b/lib/dragmath/applet/lang/ca.xml
deleted file mode 100644 (file)
index 8cc9376..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Document   : ca.xml
-    Created on : 17 December 2007, 15:13
-    Author     : Joan Queralt i Gil i Daniel Ureña Zafra
-    Description:
-        Versió catalana de la interfície de DragMath. Es pot, per tant millorar.
--->
-
-<Language>
-    
-    <!--  Error Messages   --> 
-    <ReadingFile>Error llegint el fitxer: Comproveu-ne la validesa</ReadingFile> 
-    <ReadingFile2>Error carregant el fitxer amb format: </ReadingFile2> 
-    <LoadingExp>Error carregant l'expressió desada</LoadingExp>
-    <SavingExp>Error desant l'expressió</SavingExp>
-    <Cut>No es pot retallar la selecció: </Cut>
-    <Copy>No es pot copiar la selecció: </Copy>
-    <Tree>No es pot mostrar l'arbre: </Tree>
-    <Action>No s'ha pogut completar l'acció: </Action>
-    <AddMatrix>No es pot afegir la Matriu a aquesta posició</AddMatrix>
-    <Operator>Manca un operador en aquesta posició</Operator>
-    <Argument>Manca un argument o operador en aquesta posició</Argument>
-    <Image>Error: Cannot export to image. Check internet connection and access to http://www.mathtran.org</Image>
-    
-    <!--  Status Bar Messages   --> 
-    <ParseExp>L'expressió no pot ser analitzada</ParseExp>
-    <LoadExpression>DragMath - Escull una expressió per ser carregada</LoadExpression>
-    <SaveExpression>DragMath - Escull un lloc on desar l'expressió</SaveExpression>
-    <EnterRows>Introduïu el nombre de files de la matriu</EnterRows>
-    <EnterColumns>Introduïu el nombre de columnes de la matriu</EnterColumns>
-    <MatrixDim>Dimensions de la matriu</MatrixDim>
-    <NoCut>No hi ha res seleccionat per retallar</NoCut>
-    <NoPaste>No hi ha res per enganxar</NoPaste>
-    <NoBox>No hi ha cap quadre seleccionat per enganxar-hi</NoBox>
-    <NoCopy>No hi ha res seleccionat per copiar</NoCopy>
-    <Copied>Copiat</Copied>
-    <ReadingData>S'ha produït un error al llegir les dades de sortida</ReadingData>
-    <Clipboard>S'ha copiat l'expressió al porta-retalls</Clipboard>
-    <NoExpression>No hi ha cap expressió per convertir</NoExpression>
-    <NoFormat>Encara no s'ha carregat un fitxer amb format</NoFormat>
-    <ImageSize>Choose the image size 1-10 (Smallest-Largest)</ImageSize>
-    
-    <!--  Tooltips for buttons   -->
-    <Multiply>Multiplica</Multiply>
-    <Divide>Divideix</Divide>  
-    <Add>Suma</Add> 
-    <Subtract>Resta</Subtract>  
-    <Comma>Coma</Comma>  
-    <PlusMinus>Més-menys</PlusMinus>
-    <NotEqual>No es igual</NotEqual> 
-    <SquareRoot>Arrel Quadrada</SquareRoot>  
-    <NthRoot>Arrel n-éssima</NthRoot>  
-    <Power>Superíndex</Power>  
-    <Subscript>Subíndex</Subscript>  
-    <Matrix>Matriu</Matrix>  
-    <Integral>Integral</Integral>
-    <Differential>Diferencial</Differential>
-    <LessThan>Menor que</LessThan>  
-    <GreaterThan>Major que</GreaterThan>  
-    <LTEQ>Menor o igual que</LTEQ>  
-    <GTEQ>Major o igual que</GTEQ>
-    <Equals>Igual</Equals> 
-    <Union>Unió</Union>  
-    <Intersection>Intersecció</Intersection>  
-    <Subset>Subconjunt</Subset>  
-    <SubsetEq>Subconjunt o igual que</SubsetEq>  
-    <NSubset>No inclòs</NSubset>  
-    <NSubsetEq>No inclòs o igual que</NSubsetEq> 
-    <Sine>Sinus</Sine>  
-    <Cosine>Cosinus</Cosine>  
-    <Tangent>Tangent</Tangent>  
-    <ArcSine>Arcsinus</ArcSine>  
-    <ArcCosine>Arccosinus</ArcCosine>  
-    <ArcTangent>Arctangent</ArcTangent> 
-    <SineH>Sinus hiperbòlic</SineH>  
-    <CosineH>Cosinus hiperbòlic</CosineH>  
-    <TanH>Tangent hiperbòlica</TanH>  
-    <ArcSineH>Invers del sinus hiperbòlic</ArcSineH>  
-    <ArcCosineH>Invers del cosinus hiperbòlic</ArcCosineH>  
-    <ArcTanH>Invers de la tangent hiperbòlica</ArcTanH>  
-    <Logarithm>Logaritme</Logarithm>
-    <NaturalLogarithm>Logaritme neperià</NaturalLogarithm>  
-    <Exp>Exponencial</Exp>  
-    <UMinus>Menys</UMinus>  
-    <BracketsRnd>Parèntesis</BracketsRnd>  
-    <BracketsCurl>Claus</BracketsCurl>  
-    <BracketsSq>Claudàtors</BracketsSq>  
-    <Abs>Valor absolut</Abs> 
-    <Infinity>Infinit</Infinity>
-    <GreekLetter>Lletra grega</GreekLetter> 
-    <Factorial>Factorial</Factorial> 
-    <Max>Màxim del conjunt</Max> 
-    <Min>Mínim del conjunt</Min> 
-    <Assignment>Assignació</Assignment>
-    <Function>Funció general</Function> 
-    <Determinant>Determinant</Determinant>
-    <Trace>Traça</Trace>
-    <DefiniteIntegral>Integral definida</DefiniteIntegral>
-    <Product>Producte</Product>
-    <Sum>Suma</Sum>
-    <Limit>Límit</Limit>
-    <Evaluate>Avalua una expressió en un punt</Evaluate>
-    <LeftArrow>Fletxa esquerra</LeftArrow>             
-    <RightArrow>Fletxa dreta</RightArrow>              
-    <UpArrow>Fletxa amunt</UpArrow>            
-    <DownArrow>Fletxa avall</DownArrow>                
-    <LeftRightArrow>Fletxa esquerra-dreta</LeftRightArrow>             
-    <LeftDblArrow>Fletxa doble esquerra</LeftDblArrow>         
-    <RightDblArrow>Fletxa doble dreta</RightDblArrow>          
-    <LeftRightDblArrow>Fletxa doble esquerra-dreta</LeftRightDblArrow>         
-    <NorthEastArrow>Fletxa dreta-amunt</NorthEastArrow>                
-    <SouthEastArrow>Fletxa dreta-avall</SouthEastArrow>                
-    <NorthWestArrow>Fletxa esquerra-amun</NorthWestArrow>              
-    <SouthWestArrow>Fletxa esquerra-avall</SouthWestArrow>
-    <Multiply2>Multiplica</Multiply2>
-    <Divide2>Divideix</Divide2>
-    <Equiv>Equivalència</Equiv>
-    <Exists>Existeix</Exists>
-    <ForAll>Per a tot</ForAll>
-    <IsIn>Pertany</IsIn>
-    <NotExists>No existeix</NotExists>
-    <NotIn>No pertany</NotIn>
-    <SimEq>Semblant</SimEq>
-    <Or>Unió Lògica</Or>
-    <And>Intersecció lògica</And>
-    <Not>Negació lògica</Not>
-    <PartialDifferential>Partial Differential</PartialDifferential>
-    
-    <!--  Tooltips for command buttons   -->
-    <OpenButton>Carrega un format personalitzat de sortida</OpenButton>
-    <SaveButton>Desar fórmula a un fitxer</SaveButton>
-    <ExportButton>Exportar l'expressió al porta-retalls</ExportButton>    
-    <UndoButton>Desfés</UndoButton>
-    <RedoButton>Refés</RedoButton>
-    <CutButton>Retalla</CutButton>
-    <CopyButton>Còpia</CopyButton>
-    <PasteButton>Enganxa</PasteButton>
-    <ClearButton>Neteja tot l'àrea de treball</ClearButton>
-    <SelectButton>Selecciona tot l'àrea de treball</SelectButton>
-    <LoadFormatButton>Carrega un fitxer amb format exportat</LoadFormatButton>
-    <LoadLangButton>Carrega un fitxer d'idioma</LoadLangButton>
-    <ShowTreeButton>Mostra l'arbre de l'expressió</ShowTreeButton>
-    <OutlineButton>Mostra el contorn</OutlineButton>
-    <OnlineHelpButton>Carrega documents d'ajuda al navegador</OnlineHelpButton>
-    <AboutButton>Quant a DragMath</AboutButton>
-    
-    <!--  Menu   -->
-    <FileMenu>Fitxer</FileMenu>
-    <OpenMenu>Obrir...</OpenMenu>
-    <SaveAsMenu>Anomenar i desar...</SaveAsMenu>
-    <ExportMenu>Exportar al porta-retalls</ExportMenu>
-    <ImageMenu>Export to image</ImageMenu>
-    
-    <EditMenu>Edició</EditMenu>
-    <UndoMenu>Desfer</UndoMenu>
-    <RedoMenu>Refer</RedoMenu>
-    <CutMenu>Retallar</CutMenu>
-    <CopyMenu>Còpia</CopyMenu>
-    <PasteMenu>Enganxa</PasteMenu>
-    <ClearMenu>Neteja tot</ClearMenu>
-    <SelectMenu>Seleccionar tot</SelectMenu>
-    
-    <OptionsMenu>Opcions</OptionsMenu>
-    <SetExportMenu>Format d'Exportació</SetExportMenu>
-    <SetLanguageMenu>Idioma</SetLanguageMenu>
-    <MultMenu>Implicit Multiplication</MultMenu>
-    
-    <HelpMenu>Ajuda</HelpMenu>
-    <DebugMenu>Depuració</DebugMenu>
-    <TreeMenu>Mostrar arbre de l'expressió</TreeMenu>
-    <OutlineMenu>Mostrar contorn</OutlineMenu>
-    <OnlineHelpMenu>Ajuda en línia</OnlineHelpMenu>
-    <AboutMenu>Quant a DragMath</AboutMenu>
-    
-</Language>
diff --git a/lib/dragmath/applet/lang/cz.xml b/lib/dragmath/applet/lang/cz.xml
deleted file mode 100644 (file)
index 474e88b..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Document   : cz.xml
-    Created on : 30 July 2007, 15:43
-    Author     : Alex Billingsley 
-    Translator : Miroslava Tihlaříková
-    Description:
-        Purpose of the document follows.
--->
-
-<Language>
-    
-    <!--  Error Messages   --> 
-    <ReadingFile>Chyba při načítání souboru s formátem</ReadingFile> 
-    <ReadingFile2>Chyba při načítání souboru s formátem</ReadingFile2> 
-    <LoadingExp>Chyba při načítání uložených výrazů</LoadingExp>
-    <SavingExp>Chyba při ukládání výrazů</SavingExp>
-    <Cut>Nelze vyjmout výběr:</Cut>
-    <Copy>Nelze zkopírovat výrěr:</Copy>
-    <Tree>Nelze zobrazit strom:</Tree>
-    <Action>Akce nemůže být dokončena:</Action>
-    <AddMatrix>Sem nelze přidat matici</AddMatrix>
-    <Operator>Chybí operátor</Operator>
-    <Argument>Chybí proměnná či operátor (na vhodné pozici)</Argument>
-    <Image>Error: Cannot export to image. Check internet connection and access to http://www.mathtran.org</Image>
-    
-    <!--  Status Bar Messages   --> 
-    <ParseExp>Výraz nelze rozpoznat</ParseExp>
-    <LoadExpression>DragMath - Vyberte soubor s výrazem k načtení</LoadExpression>
-    <SaveExpression>DragMath - Vyberte umístění kam uložit výraz</SaveExpression>
-    <EnterRows>Zadejte počet řádků matice</EnterRows>
-    <EnterColumns>Zadejte počet sloupců matice</EnterColumns>
-    <MatrixDim>Rozměr matice</MatrixDim>
-    <NoCut>Nebylo vybráno nic na vyjmutí</NoCut>
-    <NoPaste>Nic na vložení</NoPaste>
-    <NoBox>Není vybráno políčko kam vkládat</NoBox>
-    <NoCopy>Není nic vybráno ke kopírování</NoCopy>
-    <Copied>Zkopírováno</Copied>
-    <ReadingData>Cyba při čtení výstupních dat</ReadingData>
-    <Clipboard>: výrazy uloženy do schránky</Clipboard>
-    <NoExpression>Žádné výrazy na konvertování</NoExpression>
-    <NoFormat>Ještě nebyl načten soubor s definicí formátu</NoFormat>
-    <ImageSize>Choose the image size 1-10 (Smallest-Largest)</ImageSize>
-    
-    <!--  Tooltips for buttons   -->
-    <Multiply>Součin</Multiply>
-    <Divide>Podíl</Divide>  
-    <Add>Součet</Add> 
-    <Subtract>Rozdíl</Subtract>  
-    <Comma>Desetinná čárka</Comma>  
-    <PlusMinus>Plus-Minus</PlusMinus>
-    <SquareRoot>Druhá odmocnina</SquareRoot>  
-    <NthRoot>N-tá odmocnina</NthRoot>  
-    <Power>Horní index nebo mocnina</Power>  
-    <Subscript>Dolní index</Subscript>  
-    <Matrix>Matice</Matrix>  
-    <Integral>Integrál</Integral>
-    <Differential>Derivace</Differential>
-    <LessThan>Menší než</LessThan>  
-    <GreaterThan>Větší než</GreaterThan>  
-    <LTEQ>Menší nebo rovno</LTEQ>  
-    <GTEQ>Větší nebo rovno</GTEQ>
-    <Equals>Rovno</Equals>
-    <NotEqual>Není rovno</NotEqual> 
-    <Union>Sjednocení</Union>  
-    <Intersection>Průnik</Intersection>  
-    <Subset>Vlastní podmnožina</Subset>  
-    <SubsetEq>Podmnožina</SubsetEq>  
-    <NSubset>Není vlastní podmnožinou</NSubset>  
-    <NSubsetEq>Není podmnožinou</NSubsetEq> 
-    <Sine>Sinus</Sine>  
-    <Cosine>Kosinus</Cosine>  
-    <Tangent>Tangens</Tangent>  
-    <ArcSine>Arkus sinus</ArcSine>  
-    <ArcCosine>Arkus kosinus</ArcCosine>  
-    <ArcTangent>Arkus tangens</ArcTangent> 
-    <SineH>Hyperbolický sinus</SineH>  
-    <CosineH>Hyperbolický kosinus</CosineH>  
-    <TanH>Hyperbolický tangens</TanH>  
-    <ArcSineH>Hyperbolický arkus sinus</ArcSineH>  
-    <ArcCosineH>Hyperbolický arkus kosinus</ArcCosineH>  
-    <ArcTanH>Hyperbolický arkus tangens</ArcTanH>  
-    <Logarithm>Logaritmus</Logarithm>
-    <NaturalLogarithm>Přirozený logaritmus</NaturalLogarithm>  
-    <Exp>Exponenciální funkce</Exp>  
-    <UMinus>Mínus</UMinus>  
-    <BracketsRnd>Kulaté závorky</BracketsRnd>  
-    <BracketsCurl>Složené závorky</BracketsCurl>  
-    <BracketsSq>Hranaté závorky</BracketsSq>  
-    <Abs>Absolutní hodnota</Abs> 
-    <Infinity>Nekonečno</Infinity>
-    <GreekLetter>Řecká písmena</GreekLetter> 
-    <Factorial>Faktoriál</Factorial> 
-    <Max>Maximum množiny </Max>
-    <Min>Minimum množiny</Min> 
-    <Assignment>Přiřazení</Assignment>
-    <Function>Uživatelem definovaná funkce</Function> 
-    <Determinant>Determinant</Determinant>
-    <Trace>Stopa</Trace>
-    <DefiniteIntegral>Určitý integrál</DefiniteIntegral>
-    <Product>Součin</Product>
-    <Sum>Suma</Sum>
-    <Limit>Limita</Limit>
-    <Evaluate>Hodnota výrazu v bodě</Evaluate>
-    <LeftArrow>Left arrow</LeftArrow> 
-    <RightArrow>Right arrow</RightArrow> 
-    <UpArrow>Up arrow</UpArrow> 
-    <DownArrow>Down arrow</DownArrow> 
-    <LeftDblArrow>Left double arrow</LeftDblArrow> 
-    <RightDblArrow>Right double arrow</RightDblArrow> 
-    <LeftRightArrow>Left-Right arrow</LeftRightArrow> 
-    <LeftRightDblArrow>Left-Right double arrow</LeftRightDblArrow> 
-    <NorthEastArrow>North-East arrow</NorthEastArrow>          
-    <SouthEastArrow>South-East arrow</SouthEastArrow>          
-    <NorthWestArrow>North-West arrow</NorthWestArrow>          
-    <SouthWestArrow>South-West arrow</SouthWestArrow>
-    <Multiply2>Multiplication</Multiply2>
-    <Divide2>Division</Divide2>
-    <Equiv>Equivalence</Equiv>
-    <Exists>There Exists</Exists>
-    <ForAll>For All</ForAll>
-    <IsIn>Element Of</IsIn>
-    <NotExists>There Does Not Exist</NotExists>
-    <NotIn>Not An Element Of</NotIn>
-    <SimEq>Asymptotically Equivalent To</SimEq>
-    <Or>Or</Or>
-    <And>And</And>
-    <Not>Not</Not>
-    <PartialDifferential>Partial Differential</PartialDifferential>
-    
-    
-    <!--  Tooltips for command buttons   -->
-    <OpenButton>Načíst výraz ze souboru</OpenButton>
-    <SaveButton>Uložit výraz do souboru</SaveButton>
-    <ExportButton>Exportovat výraz do schránky</ExportButton>
-    <UndoButton>Zpět</UndoButton>
-    <RedoButton>Opakovat</RedoButton>
-    <CutButton>Vyjmout</CutButton>
-    <CopyButton>Zkopírovat</CopyButton>
-    <PasteButton>Vložit</PasteButton>
-    <ClearButton>Vyčistit pracovní plochu</ClearButton>
-    <SelectButton>Vybrat celou pracovní plochu</SelectButton>
-    <LoadFormatButton>Nahrát formát pro export</LoadFormatButton>
-    <LoadLangButton>Nahrát soubor s jazykovym nastavením</LoadLangButton>
-    <ShowTreeButton>Zobrazit stromovou strukturu výrazů</ShowTreeButton>
-    <OutlineButton>Zobrazit obrysy výrazů na pracovní ploše</OutlineButton>
-    <OnlineHelpButton>Nahrát nápovědu ve webovém prohlížeči</OnlineHelpButton>
-    <AboutButton>O programu</AboutButton>
-    
-    <!--  Menu   -->
-    <FileMenu>Soubor</FileMenu>
-    <OpenMenu>Otevřít...</OpenMenu>
-    <SaveAsMenu>Uložit jako...</SaveAsMenu>
-    <ExportMenu>Exportovat do schránky</ExportMenu>
-    <ImageMenu>Export to image</ImageMenu>
-    
-    <EditMenu>Změnit</EditMenu>
-    <UndoMenu>Zpět</UndoMenu>
-    <RedoMenu>Opakovat</RedoMenu>
-    <CutMenu>Vyjmout</CutMenu>
-    <CopyMenu>Zkopírovat</CopyMenu>
-    <PasteMenu>Vložit</PasteMenu>
-    <ClearMenu>Vyčistit pracovní plochu</ClearMenu>
-    <SelectMenu>Vybrat vše</SelectMenu>
-    
-    <OptionsMenu>Možnosti</OptionsMenu>
-    <SetExportMenu>Nastavit formát pro export</SetExportMenu>
-    <SetLanguageMenu>Nastavit jazyk</SetLanguageMenu>
-    <MultMenu>Implicit Multiplication</MultMenu>
-    
-    <HelpMenu>Nápověda</HelpMenu>
-    <DebugMenu>Ladění</DebugMenu>
-    <TreeMenu>Zobrazit strukturu vzorce</TreeMenu>
-    <OutlineMenu>Zobrazit výstup</OutlineMenu>
-    <OnlineHelpMenu>Online nápověda</OnlineHelpMenu>
-    <AboutMenu>O programu</AboutMenu>
-    
-</Language>
-
-
diff --git a/lib/dragmath/applet/lang/de.xml b/lib/dragmath/applet/lang/de.xml
deleted file mode 100644 (file)
index 5ef6ae3..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Document   : de.xml
-    Created on : 02 January 2008, 22:00
-    Author     : Andy Tagliani e-instructor.de
-    Description: Purpose of the document follows.
--->
-
-<Language>
-    
-    <!--  Error Messages   --> 
-    <ReadingFile>Fehler beim Lesen des Dateiformats: Bitte auf Gültigkeit überprüfen</ReadingFile> 
-    <ReadingFile2>Fehler beim Laden der Datei: </ReadingFile2> 
-    <LoadingExp>Fehler beim Laden der Erweiterung</LoadingExp>
-    <SavingExp>Fehler beim Speichern der Erweiterung</SavingExp>
-    <Cut>Ausschneiden der Auswahl nicht möglich: </Cut>
-    <Copy>Kopieren der Auswahl nicht möglich: </Copy>
-    <Tree>Verzeichnisbaum kann nicht angezeigt werden: </Tree>
-    <Action>Aktion konnte nicht fertiggestellt werden: </Action>
-    <AddMatrix>Matrix konnte an der Stelle nicht hinzugefügt werden</AddMatrix>
-    <Operator>Operator fehlt an Position </Operator>
-    <Argument>Argument des Operators fehlt an Position </Argument>
-    <Image>Error: Cannot export to image. Check internet connection and access to http://www.mathtran.org</Image>
-    
-    <!--  Status Bar Messages   --> 
-    <ParseExp>Ausdruck kann mathematisch nicht bestimmt werden</ParseExp>
-    <LoadExpression>DragMath - Wählen Sie eine Datei im DragMath-Format zum Laden</LoadExpression>
-    <SaveExpression>DragMath - Wählen Sie einen Speicherort zum Speichern der Datei im DragMath-Format</SaveExpression>
-    <EnterRows>Geben Sie die Anzahl der Reihen der Matrix ein</EnterRows>
-    <EnterColumns>Geben Sie die Anzahl der Spalten der Matrix ein</EnterColumns>
-    <MatrixDim>Dimension der Matrix</MatrixDim>
-    <NoCut>Nichts zum Ausschneiden gewählt</NoCut>
-    <NoPaste>Nichts zum Kopieren gewählt</NoPaste>
-    <NoBox>Keine Box zum Hineinkopieren gewählt</NoBox>
-    <NoCopy>Nichts zum Kopieren ausgewählt</NoCopy>
-    <Copied>Kopiert</Copied>
-    <ReadingData>Fehler beim Lesen des Ausgabeformats</ReadingData>
-    <Clipboard>Format wurde in die Zwischenablage kopiert</Clipboard>
-    <NoExpression>Kein Format zum Konvertieren</NoExpression>
-    <NoFormat>Es wurde kein Dateiformat geladen</NoFormat>
-    <ImageSize>Choose the image size 1-10 (Smallest-Largest)</ImageSize>
-    
-    <!--  Tooltips for math buttons   -->
-    <Multiply>Multiplikation</Multiply>
-    <Divide>Division</Divide>  
-    <Add>Addition</Add> 
-    <Subtract>Subtraktion</Subtract>  
-    <Comma>Komma</Comma>
-    <PlusMinus>Plus-Minus</PlusMinus>
-    <SquareRoot>Quadratwurzel</SquareRoot>  
-    <NthRoot>n-te Wurzel</NthRoot>  
-    <Power>Hochgestellt</Power>  
-    <Subscript>Tiefgestellt</Subscript>  
-    <Matrix>Matrix</Matrix>  
-    <Integral>Integration</Integral>
-    <Differential>Differentation</Differential>
-    <LessThan>kleiner als</LessThan>  
-    <GreaterThan>größer als</GreaterThan>  
-    <LTEQ>kleiner als oder gleich</LTEQ>  
-    <GTEQ>größer als oder gleich</GTEQ>
-    <Equals>gleich</Equals>
-    <NotEqual>ungleich</NotEqual> 
-    <Union>Vereinigung</Union>  
-    <Intersection>Durchschnitt</Intersection>  
-    <Subset>Teilmenge</Subset>  
-    <SubsetEq>Echte Teilmenge</SubsetEq>  
-    <NSubset>Keine Teilmenge</NSubset>  
-    <NSubsetEq>Keine echte Teilmenge</NSubsetEq> 
-    <Sine>Sinus</Sine>  
-    <Cosine>Kosinus</Cosine>  
-    <Tangent>Tangens</Tangent>  
-    <ArcSine>Arkusinus</ArcSine>  
-    <ArcCosine>Arkuskosinus</ArcCosine>  
-    <ArcTangent>Arkustangens</ArcTangent> 
-    <SineH>Sinus Hyperbolicus</SineH>  
-    <CosineH>Kosinus Hyperbolicus</CosineH>  
-    <TanH>Tangens Hyperbolicus</TanH>  
-    <ArcSineH>Areasinus Hyperbolicus</ArcSineH>  
-    <ArcCosineH>Areakosinus Hyperbolicus</ArcCosineH>  
-    <ArcTanH>Areatangens Hyperbolicus</ArcTanH>  
-    <Logarithm>Logarithmus</Logarithm>
-    <NaturalLogarithm>Natürlicher Logarithmus</NaturalLogarithm>  
-    <Exp>Exponentialfunktion</Exp>  
-    <UMinus>Minus</UMinus>  
-    <BracketsRnd>Runde Klammern</BracketsRnd>  
-    <BracketsCurl>Geschwungene Klammern</BracketsCurl>  
-    <BracketsSq>Eckige Klammern</BracketsSq>  
-    <Abs>Betrag</Abs> 
-    <Infinity>Unendlich</Infinity>
-    <GreekLetter>Griechische Buchstaben</GreekLetter> 
-    <Factorial>Faktorisieren</Factorial> 
-    <Max>Maximum</Max> 
-    <Min>Minimum</Min> 
-    <Assignment>Aufgabe</Assignment>
-    <Function>Unbekannte Funktion</Function> 
-    <Determinant>Determinante</Determinant>
-    <Trace>Spur</Trace>
-    <DefiniteIntegral>Bestimmtes Integral</DefiniteIntegral>
-    <Product>Produkt</Product>
-    <Sum>Summe</Sum>
-    <Limit>Grenzwert</Limit>
-    <Evaluate>Ausdruck auswerten</Evaluate>
-    <LeftArrow>Links arrow</LeftArrow> 
-    <RightArrow>Recht arrow</RightArrow> 
-    <UpArrow>Bis arrow</UpArrow> 
-    <DownArrow>Down arrow</DownArrow> 
-    <LeftDblArrow>Links doppel arrow</LeftDblArrow> 
-    <RightDblArrow>Recht doppel arrow</RightDblArrow> 
-    <LeftRightArrow>Links-Recht arrow</LeftRightArrow> 
-    <LeftRightDblArrow>Links-Recht doppel arrow</LeftRightDblArrow>     
-    <NorthEastArrow>Nord-Ost Pfeil</NorthEastArrow>            
-    <SouthEastArrow>Süd-Ost Pfeil</SouthEastArrow>            
-    <NorthWestArrow>Nord-West Pfeil</NorthWestArrow>           
-    <SouthWestArrow>Süd-West Pfeil</SouthWestArrow>
-    <Multiply2>Multiplikation</Multiply2>
-    <Divide2>Division</Divide2>
-    <Equiv>Gleichwertigkeit</Equiv>
-    <Exists>Vorhanden</Exists>
-    <ForAll>Für alle</ForAll>
-    <IsIn>Ist in</IsIn>
-    <NotExists>Nicht vorhanden</NotExists>
-    <NotIn>Nicht in</NotIn>
-    <SimEq>Asymptotisch äquivalent zu</SimEq>
-    <Or>Oder</Or>
-    <And>Und</And>
-    <Not>Nicht</Not>
-    <PartialDifferential>Partial Differential</PartialDifferential>
-    
-    <!--  Tooltips for command buttons   -->
-    <OpenButton>Lade Format von Datei</OpenButton>
-    <SaveButton>Speichere Format als Datei</SaveButton>
-    <ExportButton>Exportiere Format in die Zwischenablage</ExportButton>
-    <UndoButton>Rückgägig</UndoButton>
-    <RedoButton>Wiederholen</RedoButton>
-    <CutButton>Ausschneiden</CutButton>
-    <CopyButton>Kopieren</CopyButton>
-    <PasteButton>Einfügen</PasteButton>
-    <ClearButton>Leere das gesamte Arbeitsfeld</ClearButton>
-    <SelectButton>Wähle das gesamte Arbeitsfeld</SelectButton>
-    <LoadFormatButton>Lade eine Formatdatei</LoadFormatButton>
-    <LoadLangButton>Lade eine Sprachdatei</LoadLangButton>
-    <ShowTreeButton>Zeige Baumstruktur eines Ausdrucks</ShowTreeButton>
-    <OutlineButton>Zeige außerhalb des Objektes im Arbeitsfeld</OutlineButton>
-    <OnlineHelpButton>Lade Hilfedateien im Browser</OnlineHelpButton>
-    <AboutButton>Über DragMath</AboutButton>
-    
-    <!--  Menu   -->
-    <FileMenu>Datei</FileMenu>
-    <OpenMenu>Öffnen...</OpenMenu>
-    <SaveAsMenu>Speichern als...</SaveAsMenu>
-    <ExportMenu>Exportiere in die Zwischenablage</ExportMenu>
-    <ImageMenu>Export to image</ImageMenu>
-    
-    <EditMenu>Bearbeiten</EditMenu>
-    <UndoMenu>Rückgängig</UndoMenu>
-    <RedoMenu>Wiederholen</RedoMenu>
-    <CutMenu>Ausschneiden</CutMenu>
-    <CopyMenu>Kopieren</CopyMenu>
-    <PasteMenu>Einfügen</PasteMenu>
-    <ClearMenu>Arbeitsfeld leeren</ClearMenu>
-    <SelectMenu>Alle auswählen</SelectMenu>
-    
-    <OptionsMenu>Optionen</OptionsMenu>
-    <SetExportMenu>Export-Format einstellen</SetExportMenu>
-    <SetLanguageMenu>Sprache einstellen</SetLanguageMenu>
-    <MultMenu>Implicit Multiplication</MultMenu>
-    
-    <HelpMenu>Hilfe</HelpMenu>
-    <DebugMenu>Debug</DebugMenu>
-    <TreeMenu>Zeige Ausdruck in Baumstruktur</TreeMenu>
-    <OutlineMenu>Zeige außerhalb</OutlineMenu>
-    <OnlineHelpMenu>Online-Hilfe</OnlineHelpMenu>
-    <AboutMenu>Über DragMath</AboutMenu>
-    
-</Language>
diff --git a/lib/dragmath/applet/lang/en.xml b/lib/dragmath/applet/lang/en.xml
deleted file mode 100644 (file)
index 54e9b93..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Document   : en.xml
-    Created on : 30 July 2007, 15:43
-    Author     : Alex Billingsley
-    Description:
-        Purpose of the document follows.
--->
-
-<Language>
-    
-    <!--  Error Messages   --> 
-    <ReadingFile>Error reading format file: Check file is valid</ReadingFile> 
-    <ReadingFile2>Error loading format file: </ReadingFile2> 
-    <LoadingExp>Error loading saved expression</LoadingExp>
-    <SavingExp>Error saving expression</SavingExp>
-    <Cut>Cannot cut selection: </Cut>
-    <Copy>Cannot copy selection: </Copy>
-    <Tree>Cannot display tree: </Tree>
-    <Action>Action could not be completed: </Action>
-    <AddMatrix>Cannot add Matrix at this location</AddMatrix>
-    <Operator>Operator missing at position </Operator>
-    <Argument>Argument of operator missing at position </Argument>
-    <Image>Error: Cannot export to image. Check internet connection and access to http://www.mathtran.org</Image>
-    
-    <!--  Status Bar Messages   --> 
-    <ParseExp>Expression could not be parsed</ParseExp>
-    <LoadExpression>DragMath - Choose an expression file to load</LoadExpression>
-    <SaveExpression>DragMath - Choose the location to save the expression</SaveExpression>
-    <EnterRows>Enter number of rows of matrix</EnterRows>
-    <EnterColumns>Enter number of columns of matrix</EnterColumns>
-    <MatrixDim>Matrix Dimensions</MatrixDim>
-    <NoCut>Nothing selected to cut</NoCut>
-    <NoPaste>Nothing to paste</NoPaste>
-    <NoBox>No box selected to paste into</NoBox>
-    <NoCopy>Nothing selected to copy</NoCopy>
-    <Copied>Copied</Copied>
-    <ReadingData>Error reading output data</ReadingData>
-    <Clipboard>Expression exported to clipboard</Clipboard>
-    <NoExpression>No expression to convert</NoExpression>
-    <NoFormat>No format file has been loaded yet</NoFormat>
-    <ImageSize>Choose the image size 1-10 (Smallest-Largest)</ImageSize>
-    
-    <!--  Tooltips for math buttons   -->
-    <Multiply>Multiplication</Multiply>
-    <Divide>Division</Divide>  
-    <Add>Addition</Add> 
-    <Subtract>Subtraction</Subtract>  
-    <Comma>Comma</Comma>
-    <PlusMinus>Plus-Minus</PlusMinus>
-    <SquareRoot>Square Root</SquareRoot>  
-    <NthRoot>N-th Root</NthRoot>  
-    <Power>Superscript</Power>  
-    <Subscript>Subscript</Subscript>  
-    <Matrix>Matrix</Matrix>  
-    <Integral>Integration</Integral>
-    <Differential>Differentiation</Differential>
-    <LessThan>Less Than</LessThan>  
-    <GreaterThan>Greater Than</GreaterThan>  
-    <LTEQ>Less Than or Equal To</LTEQ>  
-    <GTEQ>Greater Than or Equal To</GTEQ>
-    <Equals>Equals</Equals>
-    <NotEqual>Not Equal</NotEqual> 
-    <Union>Union</Union>  
-    <Intersection>Intersection</Intersection>  
-    <Subset>Subset</Subset>  
-    <SubsetEq>Subset or Equal To</SubsetEq>  
-    <NSubset>Not Subset</NSubset>  
-    <NSubsetEq>Not Subset or Equal To</NSubsetEq> 
-    <Sine>Sine</Sine>  
-    <Cosine>Cosine</Cosine>  
-    <Tangent>Tangent</Tangent>  
-    <ArcSine>Inverse Sine</ArcSine>  
-    <ArcCosine>Inverse Cosine</ArcCosine>  
-    <ArcTangent>Inverse Tangent</ArcTangent> 
-    <SineH>Hyperbolic Sine</SineH>  
-    <CosineH>Hyperbolic Cosine</CosineH>  
-    <TanH>Hyperbolic Tangent</TanH>  
-    <ArcSineH>Inverse Hyperbolic Sine</ArcSineH>  
-    <ArcCosineH>Inverse Hyperbolic Cosine</ArcCosineH>  
-    <ArcTanH>Inverse Hyperbolic Tangent</ArcTanH>  
-    <Logarithm>Logarithm</Logarithm>
-    <NaturalLogarithm>Natural Logarithm</NaturalLogarithm>  
-    <Exp>Exponential Function</Exp>  
-    <UMinus>Minus</UMinus>  
-    <BracketsRnd>Round Brackets</BracketsRnd>  
-    <BracketsCurl>Curly Brackets</BracketsCurl>  
-    <BracketsSq>Square Brackets</BracketsSq>  
-    <Abs>Absolute Value</Abs> 
-    <Infinity>Infinity</Infinity>
-    <GreekLetter>Greek letter</GreekLetter> 
-    <Factorial>Factorial</Factorial> 
-    <Max>Maximum of a set</Max> 
-    <Min>Minimum of a set</Min> 
-    <Assignment>Assignment</Assignment>
-    <Function>Unknown function</Function> 
-    <Determinant>Determinant</Determinant>
-    <Trace>Trace</Trace>
-    <DefiniteIntegral>Definite Integral</DefiniteIntegral>
-    <Product>Product</Product>
-    <Sum>Sum</Sum>
-    <Limit>Limit</Limit>
-    <Evaluate>Evaluate an expression at a point</Evaluate>
-    <LeftArrow>Left arrow</LeftArrow> 
-    <RightArrow>Right arrow</RightArrow> 
-    <UpArrow>Up arrow</UpArrow> 
-    <DownArrow>Down arrow</DownArrow> 
-    <LeftDblArrow>Left double arrow</LeftDblArrow> 
-    <RightDblArrow>Right double arrow</RightDblArrow> 
-    <LeftRightArrow>Left-Right arrow</LeftRightArrow> 
-    <LeftRightDblArrow>Left-Right double arrow</LeftRightDblArrow> 
-    <NorthEastArrow>North-East arrow</NorthEastArrow>          
-    <SouthEastArrow>South-East arrow</SouthEastArrow>          
-    <NorthWestArrow>North-West arrow</NorthWestArrow>          
-    <SouthWestArrow>South-West arrow</SouthWestArrow>
-    <Multiply2>Multiplication</Multiply2>
-    <Divide2>Division</Divide2>
-    <Equiv>Equivalence</Equiv>
-    <Exists>There Exists</Exists>
-    <ForAll>For All</ForAll>
-    <IsIn>Element Of</IsIn>
-    <NotExists>There Does Not Exist</NotExists>
-    <NotIn>Not An Element Of</NotIn>
-    <SimEq>Asymptotically Equivalent To</SimEq>
-    <Or>Or</Or>
-    <And>And</And>
-    <Not>Not</Not>
-    <PartialDifferential>Partial Differential</PartialDifferential>
-    
-    
-    <!--  Tooltips for command buttons   -->
-    <OpenButton>Load expression from file</OpenButton>
-    <SaveButton>Save expression to file</SaveButton>
-    <ExportButton>Export expression to clipboard</ExportButton>
-    <UndoButton>Undo</UndoButton>
-    <RedoButton>Redo</RedoButton>
-    <CutButton>Cut</CutButton>
-    <CopyButton>Copy</CopyButton>
-    <PasteButton>Paste</PasteButton>
-    <ClearButton>Clear the entire workspace</ClearButton>
-    <SelectButton>Select the entire workspace</SelectButton>
-    <LoadFormatButton>Load an export format file</LoadFormatButton>
-    <LoadLangButton>Load a language file</LoadLangButton>
-    <ShowTreeButton>Show tree structure of expression</ShowTreeButton>
-    <OutlineButton>Display outline of objects on workspace</OutlineButton>
-    <OnlineHelpButton>Loads help documents in web browser</OnlineHelpButton>
-    <AboutButton>About DragMath</AboutButton>
-    
-    <!--  Menu   -->
-    <FileMenu>File</FileMenu>
-    <OpenMenu>Open...</OpenMenu>
-    <SaveAsMenu>Save As...</SaveAsMenu>
-    <ExportMenu>Export to clipboard</ExportMenu>
-    <ImageMenu>Export to image</ImageMenu>
-    
-    <EditMenu>Edit</EditMenu>
-    <UndoMenu>Undo</UndoMenu>
-    <RedoMenu>Redo</RedoMenu>
-    <CutMenu>Cut</CutMenu>
-    <CopyMenu>Copy</CopyMenu>
-    <PasteMenu>Paste</PasteMenu>
-    <ClearMenu>Clear Workspace</ClearMenu>
-    <SelectMenu>Select All</SelectMenu>
-    
-    <OptionsMenu>Options</OptionsMenu>
-    <SetExportMenu>Set export format</SetExportMenu>
-    <SetLanguageMenu>Set language</SetLanguageMenu>
-    <MultMenu>Implicit Multiplication</MultMenu>
-    
-    <HelpMenu>Help</HelpMenu>
-    <DebugMenu>Debug</DebugMenu>
-    <TreeMenu>Show expression tree</TreeMenu>
-    <OutlineMenu>Show outline</OutlineMenu>
-    <OnlineHelpMenu>Online Help</OnlineHelpMenu>
-    <AboutMenu>About DragMath</AboutMenu>
-    
-</Language>
diff --git a/lib/dragmath/applet/lang/es.xml b/lib/dragmath/applet/lang/es.xml
deleted file mode 100644 (file)
index f47af86..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Document   : es.xml    
-    Created on : 12 December 2007, 9:36    
-    Author     : Francisco Rivas <taken2k4@gmail.com>    
-    Description: 
-        Purpose of the document follows.
--->
-
-<Language>
-    
-    <!--  Error Messages   --> 
-    <ReadingFile>Error leyendo el archivo: Verifique archivo</ReadingFile> 
-    <ReadingFile2>Error cargando el archivo con formato: </ReadingFile2> 
-    <LoadingExp>Error cargando expresión guardada</LoadingExp>
-    <SavingExp>Error guardando expresión</SavingExp>
-    <Cut>No se puede cortar selección: </Cut>
-    <Copy>No se puede copiar selección: </Copy>
-    <Tree>No se puede mostrar el árbol: </Tree>
-    <Action>Acción no puede ser completada: </Action>
-    <AddMatrix>No se puede agregar una matriz en este lugar</AddMatrix>
-    <Operator>Operador no encontrado en esta posición </Operator>
-    <Argument>Argumento del operador no encontrado </Argument>
-    <Image>Error: Cannot export to image. Check internet connection and access to http://www.mathtran.org</Image>
-    
-    <!--  Status Bar Messages   --> 
-    <ParseExp>Expresión no puede ser enviada</ParseExp>
-    <LoadExpression>DragMath - Seleccione un archivo de expresiones</LoadExpression>
-    <SaveExpression>DragMath - ¿Dónde desea guardar el archivo?</SaveExpression>
-    <EnterRows>Inserte el número de filas de la matriz</EnterRows>
-    <EnterColumns>Inserte el número de columnas de la matriz</EnterColumns>
-    <MatrixDim>Dimensiones de la matriz</MatrixDim>
-    <NoCut>No ha seleccionado nada para cortar</NoCut>
-    <NoPaste>Nada para pegar</NoPaste>
-    <NoBox>No ha seleccionado sitio para pegar</NoBox>
-    <NoCopy>No ha seleccionado nada para copiar</NoCopy>
-    <Copied>Copiado</Copied>
-    <ReadingData>Error leyendo datos de salida</ReadingData>
-    <Clipboard>Expresión exportada al portapapeles</Clipboard>
-    <NoExpression>No ha seleccionado expresión para convertir</NoExpression>
-    <NoFormat>No ha cargado un archivo con formato aún</NoFormat>
-    <ImageSize>Choose the image size 1-10 (Smallest-Largest)</ImageSize>
-    
-    <!--  Tooltips for math buttons   -->
-    <Multiply>Multiplicación</Multiply>
-    <Divide>Fracción</Divide>  
-    <Add>Adición</Add> 
-    <Subtract>Sustracción</Subtract>  
-    <Comma>Coma</Comma>
-    <PlusMinus>Mas-Menos</PlusMinus>
-    <SquareRoot>Raíz Cuadrada</SquareRoot>  
-    <NthRoot>N-ésima Raíz</NthRoot>  
-    <Power>SuperIndice</Power>  
-    <Subscript>SubIndice</Subscript>  
-    <Matrix>Matriz</Matrix>  
-    <Integral>Integración</Integral>
-    <Differential>Diferenciación</Differential>
-    <LessThan>Menor que</LessThan>  
-    <GreaterThan>Mayor que</GreaterThan>  
-    <LTEQ>Menor o Igual que</LTEQ>  
-    <GTEQ>Mayor o Igual que</GTEQ>
-    <Equals>Igual</Equals>
-    <NotEqual>No Igual</NotEqual> 
-    <Union>Unión</Union>  
-    <Intersection>Intersección</Intersection>  
-    <Subset>SubConjunto</Subset>  
-    <SubsetEq>SubConjunto o Igual que</SubsetEq>  
-    <NSubset>No SubConjunto</NSubset>  
-    <NSubsetEq>No es SubConjunto o Igual que</NSubsetEq> 
-    <Sine>Seno</Sine>  
-    <Cosine>Coseno</Cosine>  
-    <Tangent>Tangente</Tangent>  
-    <ArcSine>Inversa Seno</ArcSine>  
-    <ArcCosine>Inversa Coseno</ArcCosine>  
-    <ArcTangent>Inversa Tangente</ArcTangent> 
-    <SineH>Seno Hiperbólico</SineH>  
-    <CosineH>Coseno Hiperbólico</CosineH>  
-    <TanH>Tangente Hiperbólico</TanH>  
-    <ArcSineH>Seno Hiperbólico Inverso</ArcSineH>  
-    <ArcCosineH>Coseno Hiperbólico Inverso</ArcCosineH>  
-    <ArcTanH>Tangente Hiperbólica Inversa</ArcTanH>  
-    <Logarithm>Logaritmo</Logarithm>
-    <NaturalLogarithm>Logaritmo Natural</NaturalLogarithm>  
-    <Exp>Función Exponencial</Exp>  
-    <UMinus>Menos</UMinus>  
-    <BracketsRnd>Parentesis</BracketsRnd>  
-    <BracketsCurl>Llaves</BracketsCurl>  
-    <BracketsSq>Corchetes</BracketsSq>  
-    <Abs>Valor Absoluto</Abs> 
-    <Infinity>Infinito</Infinity>
-    <GreekLetter>Letras Griegas</GreekLetter> 
-    <Factorial>Factorial</Factorial> 
-    <Max>Máximo del Conjunto</Max> 
-    <Min>Minimo del Conjutno</Min> 
-    <Assignment>Asignación</Assignment>
-    <Function>Función Desconocida</Function> 
-    <Determinant>Determinante</Determinant>
-    <Trace>Ruta</Trace>
-    <DefiniteIntegral>Integral Definida</DefiniteIntegral>
-    <Product>Productoria</Product>
-    <Sum>Sumatoria</Sum>
-    <Limit>Limite</Limit>
-    <Evaluate>Evaluar una expresión en un punto</Evaluate>
-    <LeftArrow>Flecha izquierda</LeftArrow> 
-    <RightArrow>Flecha derecha</RightArrow> 
-    <UpArrow>Flecha arriba</UpArrow> 
-    <DownArrow>Flecha abajo</DownArrow> 
-    <LeftRightArrow>Flecha izquierda-dreta</LeftRightArrow> 
-    <LeftDblArrow>Flecha doble izquierda</LeftDblArrow> 
-    <RightDblArrow>Flecha doble derecha</RightDblArrow> 
-    <LeftRightDblArrow>Flecha doble izquierda-derecha</LeftRightDblArrow>  
-    <NorthEastArrow>Flecha derecha-arriba</NorthEastArrow>             
-    <SouthEastArrow>Flecha derecha-abajo</SouthEastArrow>              
-    <NorthWestArrow>Flecha izquierda-arriba</NorthWestArrow>           
-    <SouthWestArrow>Flecha izquierda-abajo</SouthWestArrow>   
-    <Multiply2>Multiplicación</Multiply2>
-    <Divide2>División</Divide2>
-    <Equiv>Equivalencia</Equiv>
-    <Exists>Existe</Exists>
-    <ForAll>Para todo</ForAll>
-    <IsIn>Pertenece</IsIn>
-    <NotExists>No existe</NotExists>
-    <NotIn>No pertenece</NotIn>
-    <SimEq>Parecido</SimEq>
-    <Or>Unión Lógica</Or>
-    <And>Intersección lógica</And>
-    <Not>Negación lógica</Not>
-    <PartialDifferential>Diferenciales Parciales</PartialDifferential>
-    
-    <!--  Tooltips for command buttons   -->
-    <OpenButton>Cargar una expresión de un archivo</OpenButton>
-    <SaveButton>Salvar una expresión a un archivo</SaveButton>
-    <ExportButton>Exportar la expresión al portapapeles</ExportButton>
-    <UndoButton>Deshacer</UndoButton>
-    <RedoButton>Rehacer</RedoButton>
-    <CutButton>Cortar</CutButton>
-    <CopyButton>Copiar</CopyButton>
-    <PasteButton>Pegar</PasteButton>
-    <ClearButton>Limpiar toda el área de trabajo</ClearButton>
-    <SelectButton>Seleccionar toda el área de trabajo</SelectButton>
-    <LoadFormatButton>Cargar archivo con formato exportado</LoadFormatButton>
-    <LoadLangButton>Cargar un archivo de lenguaje</LoadLangButton>
-    <ShowTreeButton>Mostrar la expresión como un árbol</ShowTreeButton>
-    <OutlineButton>Mostrar bordes de expresiones</OutlineButton>
-    <OnlineHelpButton>Cargar documentos de ayuda en el navegador</OnlineHelpButton>
-    <AboutButton>Acerca de DragMath</AboutButton>
-    
-    <!--  Menu   -->
-    <FileMenu>Archivo</FileMenu>
-    <OpenMenu>Abrir...</OpenMenu>
-    <SaveAsMenu>Salvar como...</SaveAsMenu>
-    <ExportMenu>Exportar al portapapeles</ExportMenu>
-    <ImageMenu>Export to image</ImageMenu>
-    
-    <EditMenu>Editar</EditMenu>
-    <UndoMenu>Deshacer</UndoMenu>
-    <RedoMenu>Rehacer</RedoMenu>
-    <CutMenu>Cortar</CutMenu>
-    <CopyMenu>Copiar</CopyMenu>
-    <PasteMenu>Pegar</PasteMenu>
-    <ClearMenu>Limpiar todo</ClearMenu>
-    <SelectMenu>Seleccionar todo</SelectMenu>
-    
-    <OptionsMenu>Opciones</OptionsMenu>
-    <SetExportMenu>Formato de Exportación</SetExportMenu>
-    <SetLanguageMenu>Lenguaje</SetLanguageMenu>
-    <MultMenu>Implicit Multiplication</MultMenu>
-    
-    <HelpMenu>Ayuda</HelpMenu>
-    <DebugMenu>Depurar</DebugMenu>
-    <TreeMenu>Mostrar árbol de expresión</TreeMenu>
-    <OutlineMenu>Mostrar bordes</OutlineMenu>
-    <OnlineHelpMenu>Ayuda en linea</OnlineHelpMenu>
-    <AboutMenu>Acerca de DragMath</AboutMenu>
-    
-</Language>
diff --git a/lib/dragmath/applet/lang/fa.xml b/lib/dragmath/applet/lang/fa.xml
deleted file mode 100644 (file)
index 26aada5..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Document   : fa.xml
-    Created on : 25 May 2009, 15:33
-    Author     : Shamim Rezaie, http://rezaie.info
-    Description:
-        Persian language file.
--->
-
-<Language>
-    
-    <!--  Error Messages   -->
-    <ReadingFile>خطا در خواندن فایل قالب: اعتبار فایل را بررسی نمائید</ReadingFile>
-    <ReadingFile2>خطا در بارگزاری فایل قالب: </ReadingFile2>
-    <LoadingExp>خطا در بارگزاری عبارت ذخیره شده</LoadingExp>
-    <SavingExp>خطا در ذخیرهٔ عبارت</SavingExp>
-    <Cut>قسمت انتخاب شده بریده نشد: </Cut>
-    <Copy>قسمت انتخاب شده کپی نشد: </Copy>
-    <Tree>نمی‌توان درخت را نمایش داد: </Tree>
-    <Action>کار مورد نظر کامل نشد: </Action>
-    <AddMatrix>نمی‌توان ماتریس را در محل اضافه نمود</AddMatrix>
-    <Operator>نبود عملگر در محل </Operator>
-    <Argument>نبود عملوند عملگر در محل </Argument>
-    <Image>را بررسی نمائید http://www.mathtran.org خطا: صدور به عکس انجام نشد. ارتباط اینترنت و دسترسی به</Image>
-    
-    <!--  Status Bar Messages   -->
-    <ParseExp>عبارت قابل تجزیه نیست</ParseExp>
-    <LoadExpression>DragMath - یک فایل عبارت را برای بارگزاری انتخاب نمائید</LoadExpression>
-    <SaveExpression>DragMath - محل ذخیرهٔ عبارت را انتخاب نمائید</SaveExpression>
-    <EnterRows>تعداد سطرهای ماتریس را وارد نمائید</EnterRows>
-    <EnterColumns>تعداد ستون‌های ماتریس را وارد نمائید</EnterColumns>
-    <MatrixDim>ابعاد ماتریس</MatrixDim>
-    <NoCut>چیزی برای برش انتخاب نشده است</NoCut>
-    <NoPaste>چیزی برای درج شدن وجود ندارد</NoPaste>
-    <NoBox>کادری برای درج شدن در آن انتخاب نشده است</NoBox>
-    <NoCopy>چیزی برای کپی شدن انتخاب نشده است</NoCopy>
-    <Copied>کپی شد</Copied>
-    <ReadingData>خطا هنگام خواندن اطلاعات خروجی</ReadingData>
-    <Clipboard>عبارت به حافظه صادر شد</Clipboard>
-    <NoExpression>عبارتی برای تبدیل وجود ندارد</NoExpression>
-    <NoFormat>هنوز فایل قالبی بارگزاری نشده است</NoFormat>
-    <ImageSize>اندازهٔ تصویر را انتخاب نمائید ۱-۱۰ (کوچک‌ترین-بزرگ‌ترین)</ImageSize>
-    
-    <!--  Tooltips for math buttons   -->
-    <Multiply>ضرب</Multiply>
-    <Divide>تقسیم</Divide>
-    <Add>جمع</Add>
-    <Subtract>تفریق</Subtract>
-    <Comma>کاما</Comma>
-    <PlusMinus>مثبت-منفی</PlusMinus>
-    <SquareRoot>ریشهٔ دوم</SquareRoot>
-    <NthRoot>ریشهٔ nام</NthRoot>
-    <Power>بالانویس</Power> 
-    <Subscript>پائین‌نویس</Subscript>
-    <Matrix>ماتریس</Matrix>
-    <Integral>انتگرال</Integral>
-    <Differential>دیفرانسیل</Differential>
-    <LessThan>کوچک‌تر</LessThan>
-    <GreaterThan>بزرگ‌تر</GreaterThan>
-    <LTEQ>کوچک‌تر مساوی</LTEQ>  
-    <GTEQ>بزرگ‌تر مساوی</GTEQ>
-    <Equals>مساوی</Equals>
-    <NotEqual>نامساوی</NotEqual>
-    <Union>اجتماع</Union>
-    <Intersection>اشتراک</Intersection>
-    <Subset>زیرمجموعه</Subset>
-    <SubsetEq>زیر مجموعه یا برابر</SubsetEq>
-    <NSubset>زیرمجموعه نیست</NSubset>
-    <NSubsetEq>زیرمجموعه یا برابر نیست</NSubsetEq>
-    <Sine>سینوس</Sine>
-    <Cosine>کسینوس</Cosine>
-    <Tangent>تانژانت</Tangent>
-    <ArcSine>سینوس معکوس</ArcSine>
-    <ArcCosine>کسینوس معکوس</ArcCosine>
-    <ArcTangent>تانژانت معکوس</ArcTangent>
-    <SineH>سینوس هیپربولیک</SineH>
-    <CosineH>کسینوس هیپربولیک</CosineH>
-    <TanH>تانژانت هیپربولیک</TanH>
-    <ArcSineH>سینوس معکوس هیپربولیک</ArcSineH>
-    <ArcCosineH>کسینوس معکوس هیپربولیک</ArcCosineH>
-    <ArcTanH>تانژانت معکوس هیپربولیک</ArcTanH>
-    <Logarithm>لگاریتم</Logarithm>
-    <NaturalLogarithm>لگاریتم طبیعی</NaturalLogarithm>
-    <Exp>تابع نمائی</Exp>
-    <UMinus>منفی</UMinus>
-    <BracketsRnd>پرانتز</BracketsRnd>
-    <BracketsCurl>آکولاد</BracketsCurl>
-    <BracketsSq>براکت</BracketsSq>
-    <Abs>قدر مطلق</Abs>
-    <Infinity>بی‌نهایت</Infinity>
-    <GreekLetter>حرف یونانی</GreekLetter>
-    <Factorial>فاکتوریل</Factorial>
-    <Max>ماکزیمم یک مجموعه</Max>
-    <Min>مینیمم یک مجموعه</Min>
-    <Assignment>تساوی</Assignment>
-    <Function>تابع نامعلوم</Function>
-    <Determinant>دترمینان</Determinant>
-    <Trace>تریس</Trace>
-    <DefiniteIntegral>انتگرال معین</DefiniteIntegral>
-    <Product>ضرب مکثر</Product>
-    <Sum>سیگما</Sum>
-    <Limit>حد</Limit>
-    <Evaluate>حاصل یک عبارت در یک نقطه</Evaluate>
-    <LeftArrow>پیکان چپ</LeftArrow>
-    <RightArrow>پیکان راست</RightArrow>
-    <UpArrow>پیکان بالا</UpArrow>
-    <DownArrow>پیکان پائین</DownArrow>
-    <LeftDblArrow>پیکان دوخطی چپ</LeftDblArrow>
-    <RightDblArrow>پیکان دوخطی راست</RightDblArrow>
-    <LeftRightArrow>پیکان چپ-راست</LeftRightArrow>
-    <LeftRightDblArrow>پیکان دوخطی چپ-راست</LeftRightDblArrow>
-    <NorthEastArrow>پیکان شمال شرقی</NorthEastArrow>
-    <SouthEastArrow>پیکان جنوب شرقی</SouthEastArrow>
-    <NorthWestArrow>پیکان شمال غربی</NorthWestArrow>
-    <SouthWestArrow>پیکان جنوب غربی</SouthWestArrow>
-    <Multiply2>ضرب</Multiply2>
-    <Divide2>خط کسری</Divide2>
-    <Equiv>هم‌ارزی</Equiv>
-    <Exists>وجود دارد</Exists>
-    <ForAll>بازای هر</ForAll>
-    <IsIn>عضویت</IsIn>
-    <NotExists>وجود ندارد</NotExists>
-    <NotIn>عدم عضویت</NotIn>
-    <SimEq>تقریباً معادل</SimEq>
-    <Or>یا</Or>
-    <And>و</And>
-    <Not>نقیض</Not>
-    <PartialDifferential>دیفرانسیل جزئی</PartialDifferential>
-    
-    
-    <!--  Tooltips for command buttons   -->
-    <OpenButton>دریافت عبارت از فایل</OpenButton>
-    <SaveButton>ذخیرهٔ عبارت در فایل</SaveButton>
-    <ExportButton>صدور عبارت به حافظه</ExportButton>
-    <UndoButton>خنثی کردن آخرین عمل</UndoButton>
-    <RedoButton>اجرای مجدد آخرین عمل</RedoButton>
-    <CutButton>برش</CutButton>
-    <CopyButton>کپی</CopyButton>
-    <PasteButton>درج از حافظه</PasteButton>
-    <ClearButton>پاک کردن کل فضای کاری</ClearButton>
-    <SelectButton>انتخاب کل فضای کاری</SelectButton>
-    <LoadFormatButton>بارگزاری یک فایل قالب صدور</LoadFormatButton>
-    <LoadLangButton>بارگزاری یک فایل ترجمه</LoadLangButton>
-    <ShowTreeButton>نمایش ساختار درختی عبارت</ShowTreeButton>
-    <OutlineButton>نمایش طرح کلی اشیاء در فضای کاری</OutlineButton>
-    <OnlineHelpButton>بارگزاری اسناد راهنما در مرورگر وب</OnlineHelpButton>
-    <AboutButton>دربارهٔ DragMath</AboutButton>
-    
-    <!--  Menu   -->
-    <FileMenu>پرونده</FileMenu>
-    <OpenMenu>باز کردن...</OpenMenu>
-    <SaveAsMenu>ذخیره بعنوان...</SaveAsMenu>
-    <ExportMenu>صدور به حافظه</ExportMenu>
-    <ImageMenu>صدور به عکس</ImageMenu>
-    
-    <EditMenu>ویرایش</EditMenu>
-    <UndoMenu>خنثی کردن آخرین عمل</UndoMenu>
-    <RedoMenu>اجرای مجدد آخرین عمل</RedoMenu>
-    <CutMenu>برش</CutMenu>
-    <CopyMenu>کپی</CopyMenu>
-    <PasteMenu>درج از حافظه</PasteMenu>
-    <ClearMenu>پاک کردن فضای کاری</ClearMenu>
-    <SelectMenu>انتخاب همه</SelectMenu>
-    
-    <OptionsMenu>اختیارات</OptionsMenu>
-    <SetExportMenu>تعیین قالب صدور</SetExportMenu>
-    <SetLanguageMenu>تعیین زبان</SetLanguageMenu>
-    <MultMenu>ضرب شدن به صورت ضمنی</MultMenu>
-    
-    <HelpMenu>راهنما</HelpMenu>
-    <DebugMenu>عیب یابی</DebugMenu>
-    <TreeMenu>نمایش درخت عبارت</TreeMenu>
-    <OutlineMenu>نمایش طرح کلی</OutlineMenu>
-    <OnlineHelpMenu>راهنمای برخط</OnlineHelpMenu>
-    <AboutMenu>دربارهٔ DragMath</AboutMenu>
-    
-</Language>
\ No newline at end of file
diff --git a/lib/dragmath/applet/lang/fi.xml b/lib/dragmath/applet/lang/fi.xml
deleted file mode 100644 (file)
index c091e24..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Document   : fi.xml
-    Created on : 8 July 2009, 15:15
-    Author     : Mauno Korpelainen
-    Description:
-        Purpose of the document follows.
--->
-
-<Language>
-    
-    <!--  Error Messages   --> 
-    <ReadingFile>Formaatin lukuvirhe: tarkista tiedosto</ReadingFile> 
-    <ReadingFile2>Virhe formaatissa: </ReadingFile2> 
-    <LoadingExp>Virhe kaavaa avattaessa</LoadingExp>
-    <SavingExp>Virhe kaavan tallennuksessa</SavingExp>
-    <Cut>Valintaa ei voi leikata: </Cut>
-    <Copy>Valintaa ei voi kopioida: </Copy>
-    <Tree>Polkua ei voi näyttää: </Tree>
-    <Action>Toimitoa ei voi suorittaa: </Action>
-    <AddMatrix>Matriisia ei voi lisätä</AddMatrix>
-    <Operator>Laskutoimitus puuttuu </Operator>
-    <Argument>Laskutoimituksen osa puuttuu </Argument>
-    <Image>Virhe: Kuvaa ei voi näyttää. Tarkista yhteys osoitteeseen http://www.mathtran.org</Image>
-    
-    <!--  Status Bar Messages   --> 
-    <ParseExp>Kaavaa ei voida näyttää</ParseExp>
-    <LoadExpression>Valitse avattavan tiedoston sijainti</LoadExpression>
-    <SaveExpression>Valitse tallennettavan tiedoston sijainti</SaveExpression>
-    <EnterRows>Matriisin rivien määrä</EnterRows>
-    <EnterColumns>Matriisin sarakkeiden määrä</EnterColumns>
-    <MatrixDim>Matriisin koko</MatrixDim>
-    <NoCut>Valitse leikattava osa</NoCut>
-    <NoPaste>Valiste liitettävä osa</NoPaste>
-    <NoBox>Valitse laatikko liitettävälle osalle</NoBox>
-    <NoCopy>Valitse kopioitava osa</NoCopy>
-    <Copied>Kopioitu</Copied>
-    <ReadingData>Virhe kaavan viennissä</ReadingData>
-    <Clipboard>Kaava vietiin leikepöydälle</Clipboard>
-    <NoExpression>Kaava puuttuu</NoExpression>
-    <NoFormat>Formaatti puuttuu</NoFormat>
-    <ImageSize>Valitse kuvan koko 1-10 (Pienin-Suurin)</ImageSize>
-    
-    <!--  Tooltips for math buttons   -->
-    <Multiply>Kertolasku</Multiply>
-    <Divide>Jakolasku</Divide>  
-    <Add>Yhteenlasku</Add> 
-    <Subtract>Vähennyslasku</Subtract>  
-    <Comma>Pilkku</Comma>
-    <PlusMinus>Plus-Miinus</PlusMinus>
-    <SquareRoot>Neliöjuuri</SquareRoot>  
-    <NthRoot>N:s juuri</NthRoot>  
-    <Power>Yläindeksi</Power>  
-    <Subscript>Alaindeksi</Subscript>  
-    <Matrix>Matriisi</Matrix>  
-    <Integral>Integraali</Integral>
-    <Differential>Derivaatta</Differential>
-    <LessThan>Pienempi kuin</LessThan>  
-    <GreaterThan>Suurempi kuin</GreaterThan>  
-    <LTEQ>Pienempi tai yhtäsuuri kuin</LTEQ>  
-    <GTEQ>Suurempi tai yhtä suuri kuin</GTEQ>
-    <Equals>Yhtäsuuri kuin</Equals>
-    <NotEqual>Erisuuri kuin</NotEqual> 
-    <Union>Yhdiste</Union>  
-    <Intersection>Leikkaus</Intersection>  
-    <Subset>Sisältyy aidosti joukkoon</Subset>  
-    <SubsetEq>Sisältyy joukkoon</SubsetEq>  
-    <NSubset>Ei sisälly aidosti joukkoon</NSubset>  
-    <NSubsetEq>Ei sisälly joukkoon</NSubsetEq> 
-    <Sine>Sini</Sine>  
-    <Cosine>Kosini</Cosine>  
-    <Tangent>Tangentti</Tangent>  
-    <ArcSine>Arkussini</ArcSine>  
-    <ArcCosine>Arkuskosini</ArcCosine>  
-    <ArcTangent>Arkustangentti</ArcTangent> 
-    <SineH>Hyperbolinen sini</SineH>  
-    <CosineH>Hyperbolinen kosini</CosineH>  
-    <TanH>Hyperbolinen tangentti</TanH>  
-    <ArcSineH>Hyperbolisen sinin käänteisfunktio</ArcSineH>  
-    <ArcCosineH>Hyperbolisen kosinin käänteisfunktio</ArcCosineH>  
-    <ArcTanH>Hyperbolisen tangentin käänteisfunktio</ArcTanH>  
-    <Logarithm>Logaritmi</Logarithm>
-    <NaturalLogarithm>Luonnollinen logaritmi</NaturalLogarithm>  
-    <Exp>Eksponenttifunktio</Exp>  
-    <UMinus>Miinus</UMinus>  
-    <BracketsRnd>Sulkeet</BracketsRnd>  
-    <BracketsCurl>Aaltosulkeet</BracketsCurl>  
-    <BracketsSq>Hakasulkeet</BracketsSq>  
-    <Abs>Itseisarvo</Abs> 
-    <Infinity>Ääretön</Infinity>
-    <GreekLetter>Kreikkalaiset symbolit</GreekLetter> 
-    <Factorial>Kertoma</Factorial> 
-    <Max>Maksimi</Max> 
-    <Min>Minimi</Min> 
-    <Assignment>Saa arvon</Assignment>
-    <Function>Funtio</Function> 
-    <Determinant>Determinantti</Determinant>
-    <Trace>Jälki</Trace>
-    <DefiniteIntegral>Määrätty intgraali</DefiniteIntegral>
-    <Product>Tulo</Product>
-    <Sum>Summa</Sum>
-    <Limit>Raja-arvo</Limit>
-    <Evaluate>Liitä lauseke</Evaluate>
-    <LeftArrow>Nuoli vasemmalle</LeftArrow> 
-    <RightArrow>Nuoli oikealle</RightArrow> 
-    <UpArrow>Nuoli ylös</UpArrow> 
-    <DownArrow>Nuoli alas</DownArrow> 
-    <LeftDblArrow>Kaksoisnuoli vasemmalle</LeftDblArrow> 
-    <RightDblArrow>Kaksoisnuoli oikealle</RightDblArrow> 
-    <LeftRightArrow>Vase-oikea nuoli</LeftRightArrow> 
-    <LeftRightDblArrow>Vasen-oikea kaksoisnuoli</LeftRightDblArrow> 
-    <NorthEastArrow>Nuoli koilliseen</NorthEastArrow>          
-    <SouthEastArrow>Nuoli kaakkoon</SouthEastArrow>            
-    <NorthWestArrow>Nuoli lounaaseen</NorthWestArrow>          
-    <SouthWestArrow>Nuoli luoteeseen</SouthWestArrow>
-    <Multiply2>kertolasku</Multiply2>
-    <Divide2>Jakolasku</Divide2>
-    <Equiv>Ekvivalentti</Equiv>
-    <Exists>On olemassa</Exists>
-    <ForAll>Kaikille</ForAll>
-    <IsIn>Sisältyy</IsIn>
-    <NotExists>Ei ole olemassa</NotExists>
-    <NotIn>Ei sisälly</NotIn>
-    <SimEq>Vastaa</SimEq>
-    <Or>Tai</Or>
-    <And>Ja</And>
-    <Not>Ei</Not>
-    <PartialDifferential>Osittaisderivaatta</PartialDifferential>
-    
-    
-    <!--  Tooltips for command buttons   -->
-    <OpenButton>Avaa kaava tiedostosta</OpenButton>
-    <SaveButton>Tallenna kaava tiedostoon</SaveButton>
-    <ExportButton>Vie kaava leikepöydälle</ExportButton>
-    <UndoButton>Kumoa</UndoButton>
-    <RedoButton>Toista</RedoButton>
-    <CutButton>Leikkaa</CutButton>
-    <CopyButton>Kopioi</CopyButton>
-    <PasteButton>Liitä</PasteButton>
-    <ClearButton>Poista kaavat</ClearButton>
-    <SelectButton>Valitse kaikki kaavat</SelectButton>
-    <LoadFormatButton>Valitse formaatti</LoadFormatButton>
-    <LoadLangButton>Valitse kieli</LoadLangButton>
-    <ShowTreeButton>Näytä kaavan polkurakenne</ShowTreeButton>
-    <OutlineButton>Näytä kaavan elementit</OutlineButton>
-    <OnlineHelpButton>Näytä ohjeet selaimessa</OnlineHelpButton>
-    <AboutButton>DragMath info</AboutButton>
-    
-    <!--  Menu   -->
-    <FileMenu>Tiedosto</FileMenu>
-    <OpenMenu>Avaa...</OpenMenu>
-    <SaveAsMenu>Tallenna nimellä...</SaveAsMenu>
-    <ExportMenu>Vie leikepöydälle</ExportMenu>
-    <ImageMenu>Vie kuvana</ImageMenu>
-    
-    <EditMenu>Muokkaa</EditMenu>
-    <UndoMenu>Kumoa</UndoMenu>
-    <RedoMenu>Toista</RedoMenu>
-    <CutMenu>Leikkaa</CutMenu>
-    <CopyMenu>Kopioi</CopyMenu>
-    <PasteMenu>Liitä</PasteMenu>
-    <ClearMenu>Poista kaavat</ClearMenu>
-    <SelectMenu>Valitse kaikki</SelectMenu>
-    
-    <OptionsMenu>Vaihtoehdot</OptionsMenu>
-    <SetExportMenu>Valitse formaatti</SetExportMenu>
-    <SetLanguageMenu>Valitse kieli</SetLanguageMenu>
-    <MultMenu>Poista kertomerkki</MultMenu>
-    
-    <HelpMenu>Ohje</HelpMenu>
-    <DebugMenu>Näytä tiedot</DebugMenu>
-    <TreeMenu>Näytä polkurakenne</TreeMenu>
-    <OutlineMenu>Näytä elementit</OutlineMenu>
-    <OnlineHelpMenu>Online ohje</OnlineHelpMenu>
-    <AboutMenu>DragMath info</AboutMenu>
-    
-</Language>
diff --git a/lib/dragmath/applet/lang/fr.xml b/lib/dragmath/applet/lang/fr.xml
deleted file mode 100644 (file)
index 7ecddcb..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Document   : fr.xml
-    Created on : 19 Decembre 2007, 10:54
-    Author     : Philippe Quattrociocchi
-    Description:
-        Purpose of the document follows.
--->
-
-<Language>
-    
-    <!--  Error Messages   --> 
-    <ReadingFile>Erreur de lecture du format de fichier: Vérifiez si le fichier est valide</ReadingFile>
-    <ReadingFile2>Erreur de lecture du fichier: </ReadingFile2>
-    <LoadingExp>Erreur lors du chargement des expressions</LoadingExp>
-    <SavingExp>Erreur lors de l'enregistrement des expressions</SavingExp>
-    <Cut>Découpe de la sélection impossible: </Cut>
-    <Copy>Copie de la sélection impossible: </Copy>
-    <Tree>Affichage de l'arbre impossible</Tree>
-    <Action>L'action n'a pas pu être terminée: </Action>
-    <AddMatrix>La matrice n'a pas pu être ajoutée à cette position</AddMatrix>
-    <Operator>L'opérateur est manquant à cette position</Operator>
-    <Argument>L'argument de l'opérateur est manquant à cette position</Argument>
-    <Image>Erreur: Impossible d'exporter l'image. Vérifiez votre connection internet et l'accès à http://www.mathtran.org</Image>
-    
-    <!--  Status Bar Messages   --> 
-    <ParseExp>L'expression n'a pas pu être analysée</ParseExp>
-    <LoadExpression>DragMath - Choisissez un fichier d'expression à lire</LoadExpression>
-    <SaveExpression>DragMath - Choisissez un endroit pour sauver l'expression</SaveExpression>
-    <EnterRows>Entrez le nombre de lignes de la matrice</EnterRows>
-    <EnterColumns>Entrez le nombre de colonnes de la matrice</EnterColumns>
-    <MatrixDim>Dimensions de la matrice</MatrixDim>
-    <NoCut>Pas de sélection à couper</NoCut>
-    <NoPaste>Rien à coller</NoPaste>
-    <NoBox>Pas de boîte sélectionné pour collage</NoBox>
-    <NoCopy>Pas de sélection à copier</NoCopy>
-    <Copied>Copié</Copied>
-    <ReadingData>Erreur lors de la lecture des données de sortie</ReadingData>
-    <Clipboard>Expression exportée dans le Presse-papiers</Clipboard>
-    <NoExpression>Aucune expression à convertir</NoExpression>
-    <NoFormat>Aucun format de fichier n'a encore été chargé</NoFormat>
-    <ImageSize>Choisissez la taille de l'image 1-10 (Min-Max)</ImageSize>
-    
-    <!--  Tooltips for math buttons   -->
-    <Multiply>Multiplication</Multiply>
-    <Divide>Division</Divide>
-    <Add>Addition</Add>
-    <Subtract>Soustraction</Subtract>
-    <Comma>Virgule</Comma>
-    <PlusMinus>Plus ou Moins</PlusMinus>
-    <SquareRoot>Racine Carrée</SquareRoot>
-    <NthRoot>Racine N</NthRoot>
-    <Power>Puissance</Power>
-    <Subscript>Indice</Subscript>
-    <Matrix>Matrice</Matrix>
-    <Integral>Integrale</Integral>
-    <Differential>Différenciation</Differential>
-    <LessThan>Inférieur à</LessThan>  
-    <GreaterThan>Supérieur à</GreaterThan>  
-    <LTEQ>Inférieur ou égal à</LTEQ>  
-    <GTEQ>Supérieur ou égal à</GTEQ>
-    <Equals>Egal</Equals>
-    <NotEqual>Différent</NotEqual> 
-    <Union>Union</Union>  
-    <Intersection>Intersection</Intersection>
-    <Subset>Inclus à</Subset>
-    <SubsetEq>Inclus ou égal à</SubsetEq>
-    <NSubset>N'est pas inclus à</NSubset>
-    <NSubsetEq>N'est pas inclus ou égal à</NSubsetEq>
-    <Sine>Sinus</Sine>
-    <Cosine>Cosinus</Cosine>
-    <Tangent>Tangente</Tangent>
-    <ArcSine>Sinus Inverse</ArcSine>
-    <ArcCosine>Cosinus Inverse</ArcCosine>
-    <ArcTangent>Tangente inverse</ArcTangent>
-    <SineH>Sinus hyperbolique</SineH>
-    <CosineH>Cosinus hyperbolique</CosineH>
-    <TanH>Tangente hyperbolique</TanH>
-    <ArcSineH>Sinus hyperbolique inverse</ArcSineH>  
-    <ArcCosineH>Cosinus hyperbolique inverse</ArcCosineH>  
-    <ArcTanH>Tangente hyperbolique inverse</ArcTanH>  
-    <Logarithm>Logarithme</Logarithm>
-    <NaturalLogarithm>Logarithme naturel</NaturalLogarithm>  
-    <Exp>Exposant</Exp>
-    <UMinus>Moins</UMinus>
-    <BracketsRnd>Parenthèses</BracketsRnd>
-    <BracketsCurl>Accolades</BracketsCurl>
-    <BracketsSq>Crochets</BracketsSq>
-    <Abs>Valeur absolue</Abs>
-    <Infinity>Infini</Infinity>
-    <GreekLetter>Lettres grecques</GreekLetter> 
-    <Factorial>Factorielle</Factorial> 
-    <Max>Maximum d'un ensemble</Max> 
-    <Min>Minimum d'un ensemble</Min> 
-    <Assignment>Définition</Assignment>
-    <Function>Fonction inconnue</Function> 
-    <Determinant>Déterminant</Determinant>
-    <Trace>Trace</Trace>
-    <DefiniteIntegral>Intégrale définie</DefiniteIntegral>
-    <Product>Produit</Product>
-    <Sum>Somme</Sum>
-    <Limit>Limite</Limit>
-    <Evaluate>Évaluer l'expression en un point</Evaluate>
-    <LeftArrow>Flèche Gauche</LeftArrow>
-    <RightArrow>Flèche Droite</RightArrow>
-    <UpArrow>Flèche Haut</UpArrow>
-    <DownArrow>Flèche Bas</DownArrow>
-    <LeftDblArrow>Flèche Gauche double</LeftDblArrow>
-    <RightDblArrow>Flèche Droite double</RightDblArrow>
-    <LeftRightArrow>Flèche Gauche-Droite</LeftRightArrow>
-    <LeftRightDblArrow>Flèche Gauche-Droite double</LeftRightDblArrow>
-    <NorthEastArrow>Flèche Nord-Est</NorthEastArrow>
-    <SouthEastArrow>Flèche Sud-Est</SouthEastArrow>
-    <NorthWestArrow>Flèche Nord-Ouest</NorthWestArrow>
-    <SouthWestArrow>Flèche Sud-Ouest</SouthWestArrow>
-    <LeftUpArrow>Flèche Gauche-Haut</LeftUpArrow>
-    <LeftDownArrow>Flèche Gauche-Droite</LeftDownArrow>
-    <RightUpArrow>Flèche Droite-Haut</RightUpArrow>
-    <RightDownArrow>Flèche Droite-Bas</RightDownArrow>
-    
-    <Multiply2>Multiplication</Multiply2>
-    <Divide2>Division</Divide2>
-    <Equiv>Equivalence</Equiv>
-    <Exists>Il existe</Exists>
-    <ForAll>Pour tous</ForAll>
-    <IsIn>Appartient à</IsIn>
-    <NotExists>Il n'existe pas</NotExists>
-    <NotIn>N'appartient pas à</NotIn>
-    <SimEq>Asymptotiquement équivalente à</SimEq>
-    <Or>Ou</Or>
-    <And>Et</And>
-    <Not>Non</Not>
-    <PartialDifferential>Dérivée partielle</PartialDifferential>
-    
-    
-    <!--  Tooltips for command buttons   -->
-    <OpenButton>Charger une expression à partir d'un fichier</OpenButton>
-    <SaveButton>Sauvegarde de l'expression dans un fichier</SaveButton>
-    <ExportButton>Exporter l'expression dans le presse-papier</ExportButton>
-    <UndoButton>Défaire</UndoButton>
-    <RedoButton>Refaire</RedoButton>
-    <CutButton>Couper</CutButton>
-    <CopyButton>Copier</CopyButton>
-    <PasteButton>Coller</PasteButton>
-    <ClearButton>Effacer Tout</ClearButton>
-    <SelectButton>Sélectionner Tout</SelectButton>
-    <LoadFormatButton>Charger un fichier de format d'expression</LoadFormatButton>
-    <LoadLangButton>Charger un fichier de langage</LoadLangButton>
-    <ShowTreeButton>Afficher l'arborescence de l'expression</ShowTreeButton>
-    <OutlineButton>Afficher la structure de l'expression</OutlineButton>
-    <OnlineHelpButton>Charger l'aide en ligne</OnlineHelpButton>
-    <AboutButton>A propos de DragMath</AboutButton>
-    
-    <!--  Menu   -->
-    <FileMenu>Fichier</FileMenu>
-    <OpenMenu>Ouvrir...</OpenMenu>
-    <SaveAsMenu>Enregistrer sous...</SaveAsMenu>
-    <ExportMenu>Exporter dans le presse-papier</ExportMenu>
-    <ImageMenu>Exporter l'image</ImageMenu>
-    
-    <EditMenu>Editer</EditMenu>
-    <UndoMenu>Défaire</UndoMenu>
-    <RedoMenu>Refaire</RedoMenu>
-    <CutMenu>Couper</CutMenu>
-    <CopyMenu>Copier</CopyMenu>
-    <PasteMenu>Coller</PasteMenu>
-    <ClearMenu>Effacer Tout</ClearMenu>
-    <SelectMenu>Sélectionner Tout</SelectMenu>
-    
-    <OptionsMenu>Options</OptionsMenu>
-    <SetExportMenu>Changer de format de sortie</SetExportMenu>
-    <SetLanguageMenu>Changer de langue</SetLanguageMenu>
-    <MultMenu>Implicit Multiplication</MultMenu>
-    
-    <HelpMenu>Aide</HelpMenu>
-    <DebugMenu>Debug</DebugMenu>
-    <TreeMenu>Afficher l'arborescence de l'expression</TreeMenu>
-    <OutlineMenu>Afficher la structure de l'expression</OutlineMenu>
-    <OnlineHelpMenu>Aide Online</OnlineHelpMenu>
-    <AboutMenu>A propos de DragMath</AboutMenu>
-    
-</Language>
-
-                
diff --git a/lib/dragmath/applet/lang/it.xml b/lib/dragmath/applet/lang/it.xml
deleted file mode 100644 (file)
index 5e9fa20..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-
-
-<!--
-
-    Document   : it.xml
-
-    Created on : 12 Dicembre 2008, 14:14
-
-    Author     : Antonio Guidetti
-
-    Description:
-
-        Purpose of the document follows.
-
--->
-
-
-
-<Language>
-
-    
-
-    <!--  Error Messages   --> 
-
-    <ReadingFile>Errore di lettura del formato del file: Controlla se il file è valido</ReadingFile> 
-
-    <ReadingFile2>Errore del formato del file nella fase di caricamento:  </ReadingFile2> 
-
-    <LoadingExp>Errore nel caricamento dell'espressione salvata: </LoadingExp>
-
-    <SavingExp>Errore nel salvataggio dell'espressione</SavingExp>
-
-    <Cut>Non posso tagliare la selezione: </Cut>
-
-    <Copy>Non posso copiare la selezione: </Copy>
-
-    <Tree>Non posso mostrare l'albero: </Tree>
-
-    <Action>L'azione non puo' essere completata: </Action>
-
-    <AddMatrix>Non posso aggiungere una Matrice in questa posizione </AddMatrix>
-
-    <Operator>Manca un operatore nella posizione </Operator>
-
-    <Argument>Manca l'argomento dell'operatore nella posizione </Argument>
-
-    <Image>Errore non posso esportare ad immagine. Controlla la connessione ad internet e l'accesso a http://www.mathtran.org</Image>
-
-    
-
-    <!--  Status Bar Messages   --> 
-
-    <ParseExp>L'espressione non può essere analizzata</ParseExp>
-
-    <LoadExpression>DragMath - Scegli un file contenente un'espressione da caricare</LoadExpression>
-
-    <SaveExpression>DragMath - Scegli un posto dove salvare l'espressione</SaveExpression>
-
-    <EnterRows>Immetti il numero di righe della matrice</EnterRows>
-
-    <EnterColumns>Imetti il numero di colonne della matrice</EnterColumns>
-
-    <MatrixDim>Dimensioni della matrice</MatrixDim>
-
-    <NoCut>Non hai selezionato nulla da tagliare</NoCut>
-
-    <NoPaste>Niente da incollare</NoPaste>
-
-    <NoBox>Nessuna casella selezionata dove possa incollare</NoBox>
-
-    <NoCopy>Non hai selezionato nulla da copiare</NoCopy>
-
-    <Copied>Copiato</Copied>
-
-    <ReadingData>Errore nella lettura dei dati prodotti</ReadingData>
-
-    <Clipboard>Espressione esportata negli appunti</Clipboard>
-
-    <NoExpression>Nessuna espressione da convertire</NoExpression>
-
-    <NoFormat>Non è stato caricato ancora alcun file che definisca il formato</NoFormat>
-
-    <ImageSize>Scegli la dimensione dell'immagine da 1 a 10 </ImageSize>
-
-    
-
-    <!--  Tooltips for math buttons   -->
-
-    <Multiply>Moltiplicazione</Multiply>
-
-    <Divide>Divisione</Divide>  
-
-    <Add>Addizione</Add> 
-
-    <Subtract>Sottrazione</Subtract>  
-
-    <Comma>Virgola</Comma>
-
-    <PlusMinus>Più-Meno</PlusMinus>
-
-    <SquareRoot>Radice quadrata</SquareRoot>  
-
-    <NthRoot>Radice ennesima</NthRoot>  
-
-    <Power>Esponente</Power>  
-
-    <Subscript>Pedice</Subscript>  
-
-    <Matrix>Matrice</Matrix>  
-
-    <Integral>Integrale</Integral>
-
-    <Differential>Derivata</Differential>
-
-    <LessThan>Minore di</LessThan>  
-
-    <GreaterThan>Maggiore di</GreaterThan>  
-
-    <LTEQ>Minore di o uguale a</LTEQ>  
-
-    <GTEQ>Più grande di o uguale a</GTEQ>
-
-    <Equals>Uguale</Equals>
-
-    <NotEqual>Diverso</NotEqual> 
-
-    <Union>Unione</Union>  
-
-    <Intersection>Intersezione</Intersection>  
-
-    <Subset>Sottoinsieme</Subset>  
-
-    <SubsetEq>Sottoinsieme o uguale a</SubsetEq>  
-
-    <NSubset>Non Sottoinsieme</NSubset>  
-
-    <NSubsetEq>Non Sottoinsieme o uguale a</NSubsetEq> 
-
-    <Sine>Seno</Sine>  
-
-    <Cosine>Coseno</Cosine>  
-
-    <Tangent>Tangente</Tangent>  
-
-    <ArcSine>Arcoseno</ArcSine>  
-
-    <ArcCosine>Arcocoseno</ArcCosine>  
-
-    <ArcTangent>Arcotangente</ArcTangent> 
-
-    <SineH>Seno Iperbolico</SineH>  
-
-    <CosineH>Coseno Iperbolico</CosineH>  
-
-    <TanH>Tangente iperbolica</TanH>  
-
-    <ArcSineH>Arcoseno iperbolico</ArcSineH>  
-
-    <ArcCosineH>Arcocoseno iperbolico</ArcCosineH>  
-
-    <ArcTanH>Arcotangente iperbolica</ArcTanH>  
-
-    <Logarithm>Logaritmo</Logarithm>
-
-    <NaturalLogarithm>Logaritmo naturale</NaturalLogarithm>  
-
-    <Exp>Funzione Esponenziale</Exp>  
-
-    <UMinus>Minus</UMinus>  
-
-    <BracketsRnd>Parentesi tonde</BracketsRnd>  
-
-    <BracketsCurl>Parentesi graffe</BracketsCurl>  
-
-    <BracketsSq>Parentesi quadre</BracketsSq>  
-
-    <Abs>Valore assoluto</Abs> 
-
-    <Infinity>Infinito</Infinity>
-
-    <GreekLetter>Lettera greca</GreekLetter> 
-
-    <Factorial>Fattoriale</Factorial> 
-
-    <Max>Massimo</Max> 
-
-    <Min>Minimo</Min> 
-
-    <Assignment>Assegna il valore</Assignment>
-
-    <Function>Funzione sconosciuta</Function> 
-
-    <Determinant>Determinante</Determinant>
-
-    <Trace>Trace</Trace>
-
-    <DefiniteIntegral>Integrale definito</DefiniteIntegral>
-
-    <Product>Prodotto</Product>
-
-    <Sum>Somma</Sum>
-
-    <Limit>Limite</Limit>
-
-    <Evaluate>Valuta un'espressione fino al punto</Evaluate>
-
-    <LeftArrow>Freccia a sinistra</LeftArrow> 
-
-    <RightArrow>Freccia a destra</RightArrow> 
-
-    <UpArrow>Freccia verso l'alto</UpArrow> 
-
-    <DownArrow>Freccia in giù</DownArrow> 
-
-    <LeftDblArrow>Doppia freccia a sinistra</LeftDblArrow> 
-
-    <RightDblArrow>Implica</RightDblArrow> 
-
-    <LeftRightArrow>Freccia a destra e sinistra</LeftRightArrow> 
-
-    <LeftRightDblArrow>Coimplica</LeftRightDblArrow> 
-
-    <NorthEastArrow>Freccia verso Nord-Est</NorthEastArrow>            
-
-    <SouthEastArrow>Freccia verso Sud-Est</SouthEastArrow>             
-
-    <NorthWestArrow>Freccia verso Nord-Ovest</NorthWestArrow>          
-
-    <SouthWestArrow>Freccia verso Sud-Ovest</SouthWestArrow>
-
-    <Multiply2>Multiplicazione</Multiply2>
-
-    <Divide2>Division</Divide2>
-
-    <Equiv>Equivalenza</Equiv>
-
-    <Exists>Esiste un</Exists>
-
-    <ForAll>Per ogni</ForAll>
-
-    <IsIn>Appartiene a</IsIn>
-
-    <NotExists>Non esiste</NotExists>
-
-    <NotIn>Non appartiene a</NotIn>
-
-    <SimEq>Asintoticamente equivalente a </SimEq>
-
-    <Or>Or</Or>
-
-    <And>And</And>
-
-    <Not>Not</Not>
-
-    <PartialDifferential>Equazione differenziale alle derivate parziali</PartialDifferential>
-
-    
-
-    
-
-    <!--  Tooltips for command buttons   -->
-
-    <OpenButton>Carica l'espressione dal file</OpenButton>
-
-    <SaveButton>Salva l'espressione el file</SaveButton>
-
-    <ExportButton>Esporta l'espressione negli appunti</ExportButton>
-
-    <UndoButton>Annulla</UndoButton>
-
-    <RedoButton>Ripeti</RedoButton>
-
-    <CutButton>Taglia</CutButton>
-
-    <CopyButton>Copia</CopyButton>
-
-    <PasteButton>Incolla</PasteButton>
-
-    <ClearButton>Clear the entire workspace</ClearButton>
-
-    <SelectButton>Seleziona tutto</SelectButton>
-
-    <LoadFormatButton>Formato del file da caricare e da esportare</LoadFormatButton>
-
-    <LoadLangButton>Carica un file della lingua</LoadLangButton>
-
-    <ShowTreeButton>Mostra la struttura ad albero dell'espressione</ShowTreeButton>
-
-    <OutlineButton>Display outline of objects on workspace</OutlineButton>
-
-    <OnlineHelpButton>Carica i file della guida nel navigatore internet</OnlineHelpButton>
-
-    <AboutButton>A proposito di DragMath</AboutButton>
-
-    
-
-    <!--  Menu   -->
-
-    <FileMenu>File</FileMenu>
-
-    <OpenMenu>Apri...</OpenMenu>
-
-    <SaveAsMenu>Salva come...</SaveAsMenu>
-
-    <ExportMenu>Esporta negli appunti</ExportMenu>
-
-    <ImageMenu>Esporta come immagine</ImageMenu>
-
-    
-
-    <EditMenu>Modifica</EditMenu>
-
-    <UndoMenu>Annulla</UndoMenu>
-
-    <RedoMenu>Ripeti</RedoMenu>
-
-    <CutMenu>Taglia</CutMenu>
-
-    <CopyMenu>Copia</CopyMenu>
-
-    <PasteMenu>Incolla</PasteMenu>
-
-    <ClearMenu>Cancella tutto</ClearMenu>
-
-    <SelectMenu>Seleziona Tutto</SelectMenu>
-
-    
-
-    <OptionsMenu>Opzioni</OptionsMenu>
-
-    <SetExportMenu>Imposta il formato di esportazione</SetExportMenu>
-
-    <SetLanguageMenu>Imposta la lingua</SetLanguageMenu>
-
-    <MultMenu>Implicit Multiplication</MultMenu>
-
-    <HelpMenu>Aiuto</HelpMenu>
-
-    <DebugMenu>Correggi</DebugMenu>
-
-    <TreeMenu>Mostra l'albero dell'espressione</TreeMenu>
-
-    <OutlineMenu>Mostra i bordi</OutlineMenu>
-
-    <OnlineHelpMenu>Aiuto da internet</OnlineHelpMenu>
-
-    <AboutMenu>A proposito di DragMath</AboutMenu>
-
-    
-
-</Language>
-
diff --git a/lib/dragmath/applet/lang/nl.xml b/lib/dragmath/applet/lang/nl.xml