From d326b0c67bb536d2296004c927e89ab8c4a548b5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9my=20Bobbio?= Date: Sat, 18 Jun 2011 17:00:48 +0200 Subject: [PATCH] Imported Upstream version 0.1 --- .htaccess | 8 + CHANGELOG | 41 +- INSTALL | 57 +- README | 9 +- SQL/mysql.update-0.1a.sql | 51 + SQL/postgres.update.sql | 5 +- UPGRADING | 11 + bin/msgimport | 123 + bin/quotaimg.php | 162 +- config/db.inc.php.dist | 6 +- config/main.inc.php.dist | 30 +- index.php | 30 +- installer/check.php | 156 + installer/client.js | 36 + installer/config.php | 517 + installer/images/add.png | Bin 0 -> 733 bytes installer/images/banner_bg.gif | Bin 0 -> 587 bytes installer/images/banner_logo.gif | Bin 0 -> 4345 bytes installer/images/banner_right.gif | Bin 0 -> 433 bytes installer/images/delete.png | Bin 0 -> 715 bytes installer/index.php | 73 + installer/rcube_install.php | 374 + installer/styles.css | 231 + installer/test.php | 324 + installer/welcome.html | 35 + program/include/main.inc | 466 +- program/include/rcmail_template.inc | 43 +- program/include/rcube_contacts.inc | 13 + program/include/rcube_db.inc | 23 +- program/include/rcube_html.inc | 16 +- program/include/rcube_imap.inc | 134 +- program/include/rcube_ldap.inc | 8 +- program/include/rcube_mdb2.inc | 12 +- program/include/rcube_shared.inc | 49 +- program/include/rcube_smtp.inc | 10 +- program/include/rcube_user.inc | 482 + program/include/session.inc | 11 +- program/js/app.js | 152 +- program/js/common.js | 100 +- program/js/editor.js | 13 +- program/js/editor_images.js | 20 + program/js/list.js | 48 +- program/js/tiny_mce/license.txt | 1008 +- .../js/tiny_mce/plugins/media/css/content.css | 52 +- .../js/tiny_mce/plugins/media/css/media.css | 136 +- .../tiny_mce/plugins/media/editor_plugin.js | 2 +- .../plugins/media/editor_plugin_src.js | 867 +- .../tiny_mce/plugins/media/jscripts/embed.js | 146 +- .../tiny_mce/plugins/media/jscripts/media.js | 1184 +- program/js/tiny_mce/plugins/media/langs/en.js | 186 +- program/js/tiny_mce/plugins/media/media.htm | 2 +- program/js/tiny_mce/plugins/readme.txt | 2 +- .../js/tiny_mce/plugins/table/css/cell.css | 32 +- program/js/tiny_mce/plugins/table/css/row.css | 50 +- .../js/tiny_mce/plugins/table/css/table.css | 26 +- program/js/tiny_mce/plugins/table/table.htm | 2 +- .../themes/advanced/css}/editor_popup.css | 0 .../themes/advanced/editor_template.js | 2 +- .../themes/advanced/editor_template_src.js | 3032 +-- program/js/tiny_mce/themes/advanced/image.htm | 200 +- program/js/tiny_mce/tiny_mce.js | 2 +- program/js/tiny_mce/tiny_mce_popup.js | 588 +- program/js/tiny_mce/tiny_mce_src.js | 15178 ++++++++-------- program/js/tiny_mce/utils/editable_selects.js | 122 +- program/js/tiny_mce/utils/form_utils.js | 420 +- program/js/tiny_mce/utils/mclayer.js | 420 +- program/js/tiny_mce/utils/mctabs.js | 148 +- program/js/tiny_mce/utils/validate.js | 438 +- program/lib/imap.inc | 2569 +-- program/lib/magic | 10810 +++++++++++ program/lib/rc_mail_mime.inc | 28 +- program/localization/am/labels.inc | 18 +- program/localization/am/messages.inc | 9 +- program/localization/ar/labels.inc | 18 +- program/localization/ar/messages.inc | 9 +- program/localization/bg/labels.inc | 370 +- program/localization/bg/messages.inc | 157 +- program/localization/bs_BA/labels.inc | 234 + program/localization/bs_BA/messages.inc | 70 + program/localization/ca/labels.inc | 12 +- program/localization/ca/messages.inc | 8 +- program/localization/cz/labels.inc | 15 +- program/localization/cz/messages.inc | 11 +- program/localization/da/labels.inc | 22 +- program/localization/da/messages.inc | 30 +- program/localization/de_CH/labels.inc | 13 +- program/localization/de_CH/messages.inc | 11 +- program/localization/de_DE/labels.inc | 20 +- program/localization/de_DE/messages.inc | 16 +- program/localization/el/labels.inc | 22 +- program/localization/el/messages.inc | 11 +- program/localization/en_GB/labels.inc | 263 +- program/localization/en_GB/messages.inc | 22 +- program/localization/en_US/labels.inc | 13 +- program/localization/en_US/messages.inc | 8 +- program/localization/eo/labels.inc | 281 +- program/localization/eo/messages.inc | 82 +- program/localization/es/labels.inc | 18 +- program/localization/es/messages.inc | 10 +- program/localization/et_EE/labels.inc | 12 +- program/localization/et_EE/messages.inc | 9 +- program/localization/eu/labels.inc | 4 +- program/localization/eu/messages.inc | 4 +- program/localization/fa/labels.inc | 375 +- program/localization/fa/messages.inc | 15 +- program/localization/fi/labels.inc | 20 +- program/localization/fi/messages.inc | 11 +- program/localization/fr/labels.inc | 20 +- program/localization/fr/messages.inc | 7 +- program/localization/ga_IE/labels.inc | 4 +- program/localization/ga_IE/messages.inc | 4 +- program/localization/ge/labels.inc | 237 + program/localization/ge/messages.inc | 78 + program/localization/gl/labels.inc | 12 +- program/localization/gl/messages.inc | 26 +- program/localization/he/labels.inc | 188 + program/localization/he/messages.inc | 79 + program/localization/hi/labels.inc | 239 + program/localization/hi/messages.inc | 72 + program/localization/hr/labels.inc | 34 +- program/localization/hr/messages.inc | 27 +- program/localization/hu/labels.inc | 18 +- program/localization/hu/messages.inc | 119 +- program/localization/id_ID/labels.inc | 192 + program/localization/id_ID/messages.inc | 82 + program/localization/index.inc | 143 +- program/localization/is/labels.inc | 220 + program/localization/is/messages.inc | 64 + program/localization/it/labels.inc | 12 +- program/localization/it/messages.inc | 8 +- program/localization/ja/labels.inc | 22 +- program/localization/ja/messages.inc | 18 +- program/localization/kr/labels.inc | 192 + program/localization/kr/messages.inc | 82 + program/localization/lt/labels.inc | 14 +- program/localization/lt/messages.inc | 12 +- program/localization/lv/labels.inc | 22 +- program/localization/lv/messages.inc | 11 +- program/localization/mk/labels.inc | 366 +- program/localization/mk/messages.inc | 153 +- program/localization/ms_MY/labels.inc | 2 +- program/localization/ms_MY/messages.inc | 4 +- program/localization/nb_NO/labels.inc | 53 +- program/localization/nb_NO/messages.inc | 22 +- program/localization/ne/labels.inc | 178 + program/localization/ne/messages.inc | 75 + program/localization/nl_BE/labels.inc | 192 + program/localization/nl_BE/messages.inc | 82 + program/localization/nl_NL/labels.inc | 20 +- program/localization/nl_NL/messages.inc | 11 +- program/localization/nn_NO/labels.inc | 174 + program/localization/nn_NO/messages.inc | 41 + program/localization/pl/labels.inc | 36 +- program/localization/pl/messages.inc | 16 +- program/localization/pt_BR/labels.inc | 263 +- program/localization/pt_BR/messages.inc | 28 +- program/localization/pt_PT/labels.inc | 12 +- program/localization/pt_PT/messages.inc | 8 +- program/localization/ro/labels.inc | 22 +- program/localization/ro/messages.inc | 17 +- program/localization/ru/labels.inc | 19 +- program/localization/ru/messages.inc | 10 +- program/localization/se/labels.inc | 45 +- program/localization/se/messages.inc | 34 +- program/localization/si/labels.inc | 366 +- program/localization/si/messages.inc | 152 +- program/localization/sk/labels.inc | 26 +- program/localization/sk/messages.inc | 15 +- program/localization/sl/labels.inc | 56 +- program/localization/sl/messages.inc | 33 +- program/localization/sq_AL/labels.inc | 192 + program/localization/sq_AL/messages.inc | 82 + program/localization/sr_cyrillic/labels.inc | 192 + program/localization/sr_cyrillic/messages.inc | 82 + program/localization/sr_latin/labels.inc | 217 + program/localization/sr_latin/messages.inc | 66 + program/localization/th_TH/labels.inc | 174 + program/localization/th_TH/messages.inc | 79 + program/localization/tr/labels.inc | 4 +- program/localization/tr/messages.inc | 4 +- program/localization/uk/labels.inc | 35 +- program/localization/uk/messages.inc | 5 +- program/localization/vn/labels.inc | 217 + program/localization/vn/messages.inc | 66 + program/localization/zh_CN/labels.inc | 9 +- program/localization/zh_CN/messages.inc | 9 +- program/localization/zh_TW/labels.inc | 28 +- program/localization/zh_TW/messages.inc | 11 +- program/steps/addressbook/func.inc | 7 +- program/steps/mail/check_recent.inc | 16 +- program/steps/mail/compose.inc | 310 +- program/steps/mail/folders.inc | 26 +- program/steps/mail/func.inc | 308 +- program/steps/mail/get.inc | 12 +- program/steps/mail/getunread.inc | 4 +- program/steps/mail/list.inc | 11 +- program/steps/mail/mark.inc | 4 +- program/steps/mail/move_del.inc | 6 +- program/steps/mail/rss.inc | 4 +- program/steps/mail/search.inc | 6 +- program/steps/mail/sendmail.inc | 174 +- program/steps/mail/sendmdn.inc | 40 + program/steps/mail/show.inc | 43 +- program/steps/mail/upload.inc | 70 +- program/steps/settings/delete_identity.inc | 20 +- program/steps/settings/edit_identity.inc | 12 +- program/steps/settings/func.inc | 36 +- program/steps/settings/manage_folders.inc | 43 +- program/steps/settings/save_identity.inc | 109 +- program/steps/settings/save_prefs.inc | 9 +- skins/default/common.css | 6 + skins/default/editor_content.css | 7 +- skins/default/images/buttons/markread_act.png | Bin 0 -> 1772 bytes skins/default/images/icons/edit.png | Bin 717 -> 0 bytes skins/default/images/icons/rename.png | Bin 0 -> 747 bytes skins/default/mail.css | 104 +- skins/default/settings.css | 44 +- skins/default/splitter.js | 4 +- skins/default/templates/addidentity.html | 2 +- skins/default/templates/compose.html | 6 +- skins/default/templates/editidentity.html | 2 +- skins/default/templates/identities.html | 2 +- skins/default/templates/login.html | 2 +- skins/default/templates/mail.html | 97 +- skins/default/templates/managefolders.html | 5 +- skins/default/templates/messagepart.html | 2 +- 226 files changed, 35233 insertions(+), 16335 deletions(-) create mode 100644 SQL/mysql.update-0.1a.sql create mode 100755 bin/msgimport create mode 100644 installer/check.php create mode 100644 installer/client.js create mode 100644 installer/config.php create mode 100755 installer/images/add.png create mode 100644 installer/images/banner_bg.gif create mode 100644 installer/images/banner_logo.gif create mode 100644 installer/images/banner_right.gif create mode 100755 installer/images/delete.png create mode 100644 installer/index.php create mode 100644 installer/rcube_install.php create mode 100644 installer/styles.css create mode 100644 installer/test.php create mode 100644 installer/welcome.html create mode 100644 program/include/rcube_user.inc create mode 100644 program/js/editor_images.js rename {skins/default => program/js/tiny_mce/themes/advanced/css}/editor_popup.css (100%) create mode 100644 program/lib/magic create mode 100644 program/localization/bs_BA/labels.inc create mode 100644 program/localization/bs_BA/messages.inc create mode 100755 program/localization/ge/labels.inc create mode 100755 program/localization/ge/messages.inc create mode 100644 program/localization/he/labels.inc create mode 100644 program/localization/he/messages.inc create mode 100644 program/localization/hi/labels.inc create mode 100644 program/localization/hi/messages.inc create mode 100644 program/localization/id_ID/labels.inc create mode 100644 program/localization/id_ID/messages.inc create mode 100644 program/localization/is/labels.inc create mode 100644 program/localization/is/messages.inc create mode 100644 program/localization/kr/labels.inc create mode 100644 program/localization/kr/messages.inc create mode 100644 program/localization/ne/labels.inc create mode 100644 program/localization/ne/messages.inc create mode 100644 program/localization/nl_BE/labels.inc create mode 100644 program/localization/nl_BE/messages.inc create mode 100644 program/localization/nn_NO/labels.inc create mode 100644 program/localization/nn_NO/messages.inc create mode 100644 program/localization/sq_AL/labels.inc create mode 100644 program/localization/sq_AL/messages.inc create mode 100644 program/localization/sr_cyrillic/labels.inc create mode 100644 program/localization/sr_cyrillic/messages.inc create mode 100644 program/localization/sr_latin/labels.inc create mode 100644 program/localization/sr_latin/messages.inc create mode 100644 program/localization/th_TH/labels.inc create mode 100644 program/localization/th_TH/messages.inc create mode 100644 program/localization/vn/labels.inc create mode 100644 program/localization/vn/messages.inc create mode 100644 program/steps/mail/sendmdn.inc create mode 100644 skins/default/images/buttons/markread_act.png delete mode 100644 skins/default/images/icons/edit.png create mode 100644 skins/default/images/icons/rename.png diff --git a/.htaccess b/.htaccess index b40b7ea..ae20a9a 100644 --- a/.htaccess +++ b/.htaccess @@ -7,6 +7,10 @@ AddType text/x-component .htc php_value error_log logs/errors php_value upload_max_filesize 5M php_value post_max_size 6M + php_value memory_limit 64M + php_value session.auto_start 0 + php_value zlib.output_compression 0 + php_value magic_quotes_gpc 0 @@ -15,6 +19,10 @@ AddType text/x-component .htc php_value error_log logs/errors php_value upload_max_filesize 5M php_value post_max_size 6M + php_value memory_limit 64M + php_value session.auto_start 0 + php_value zlib.output_compression 0 + php_value magic_quotes_gpc 0 diff --git a/CHANGELOG b/CHANGELOG index 96c8b26..dbf986d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,44 @@ CHANGELOG RoundCube Webmail --------------------------- +- Added interactive installer script +- Fix folder adding/renaming inspired by #1484800 +- Localize folder name in page title (#1484785) +- Fix code using wrong variable name (#1484018) +- Allow to send mail with BCC recipients only +- condense TinyMCE toolbar down to one line, removing table buttons (#1484747) +- Add function to mark the selected messages as read/unread (#1457360) +- Also do charset decoding as suggested in RFC 2231 (fix #1484321) +- Show message count in folder list and hint when creating a subfolder +- Distinguish ssl and tls for imap connections (#1484667) +- Added some charset aliases to fix typical mis-labelling (#1484565) +- Remember decision to display images for a certain message during session (#1484754) +- Truncate attachment filenames to 55 characters due to an IE bug (#1484757) +- Make sending of read receipts configurable +- Respect config when localize folder names (#1484707) +- Also respect receipt and priority settings when re-opening a draft message +- Remember search results (closes #1483883), patch by the_glu +- Add Received header on outgoing mail +- Upgrade to TinyMCE 2.1.3 +- Allow inserting image attachments into HTML messages while composing (#1484557) +- Implement Message-Disposition-Notification (Receipts) +- Fix overriding of session vars when register_globals is on (#1484670) +- Fix bug with case-sensitive folder names (#1484245) +- Don't create default folders by default +- Fixed some potential security risks (audited by Andris) +- Only show new messages if they match the current search (#1484176) +- Switch to/from when searcing in Sent folder (#1484555) +- Correctly read the References header (#1484646) +- Unset old cookie before sending a new value (#1484639) +- Correctly decode attachments when downloading them (#1484645 and #1484642) +- Suppress IE errors when clearing attachments form (#1484356) +- Log error when login fails due to auto_create_user turned off +- Filter linked/imported CSS files (closes #1484056) +- Improve message compose screen (closes #1484383) +- Select next row after removing one from list (#1484387) + +RELEASE 0.1-RC2 + - Enable drag-&-dropping of folders to a new parent and allow to create subfolders (#1457344) - Suppress IE errors when clearing attachments form (#1484356) - Set preferences field in user table to NULL (#1484386) @@ -50,7 +88,7 @@ CHANGELOG RoundCube Webmail - Prevent default events on subject links (#1484399) - Use HTTP-POST requests for actions that change state -RELEASE 0.1.-RC1 +RELEASE 0.1-RC1 - Use global filters and bind username/ for Ldap searches (#1484159) - Hide quota display if imap server does not support it @@ -153,4 +191,3 @@ RELEASE 0.1.-RC1 - Fixed some XSS and SQL injection issues - Fixed charset problems with folder renaming - diff --git a/INSTALL b/INSTALL index 5032e4a..ada9daa 100644 --- a/INSTALL +++ b/INSTALL @@ -1,26 +1,35 @@ +INTRODUCTION +============ + +This file describes the basic steps to install RoundCube Webmail on your +web server. For additional information, please also consult the project's +wiki page at http://trac.roundcube.net/wiki + REQUIREMENTS ============ -* The Apache Webserver +* The Apache or Lighttpd Webserver * .htaccess support allowing overrides for DirectoryIndex * PHP Version 4.3.1 or greater including - PCRE (perl compatible regular expression) - - Mcrypt (supporting Triple DES) - - libiconv + - Libiconv - Multibyte String (mbstring) - - Database driver for either MySQL, Postgres or SQLite + - Mcrypt (supporting Triple DES) + - Database driver for either MySQL, Postgres or SQLite * php.ini options: - error_reporting E_ALL & ~E_NOTICE (or lower) - file_uploads on (for attachment upload features) - memory_limit (increase as suitable to support large attachments) + - session.auto_start needs to be off/0 * The PEAR framework with the following packages installed - - DB (1.7.11) + - MDB2 - Mail_Mime (1.3.1) - Net_SMTP (1.2.10) * PHP compiled with Open SSL to connect to IMAPS and to use the spell checker * A MySQL or PostgreSQL database engine or the SQLite extension for PHP -* A database with permission to create tables +* One of the above databases with permission to create tables +* An SMTP server or PHP configured for mail delivery INSTALLATION @@ -32,10 +41,9 @@ INSTALLATION - /temp - /logs 3. Create a new database and a database user for RoundCube (see DATABASE SETUP) -4. Create database tables using the queries in file 'SQL/*.initial.sql' - (* stands for your database type) -5. Rename the files config/*.inc.php.dist to config/*.inc.php -6. Modify the files in config/* to suit your local environment +4. Point your browser to http:///url-to-roundcube/installer/ +5. Follow the instructions of the install script (or see MANUAL CONFINGURATION) +6. After creating and testing the configuration, remove the installer directory 7. Done! @@ -84,40 +92,39 @@ an example how you can setup the sqlite.db for roundcube: # sqlite -init SQL/sqlite.initial.sql sqlite.db Make sure your configuration points to the sqlite.db file and that the -webserver can write to the file. +webserver can write to the file and the directory containing the file. * PostgreSQL ------------ -To use RoundCube with PostgreSQL support you have to follow the next -simple steps, which have to be done with the postgres system user (or +To use RoundCube with PostgreSQL support you have to follow these +simple steps, which have to be done as the postgres system user (or which ever is the database superuser): -$ createuser roundcubemail -$ createdb -O roundcubemail roundcubemail +$ createuser roundcube +$ createdb -O roundcube roundcubemail $ psql roundcubemail roundcubemail =# ALTER USER roundcube WITH PASSWORD 'the_new_password'; -roundcubemail =# \c - roundcubemail +roundcubemail =# \c - roundcube roundcubemail => \i SQL/postgres.initial.sql -All this has been tested with PostgreSQL 8.0.x and 7.4.x. Older +All this has been tested with PostgreSQL 8.x and 7.4.x. Older versions don't have a -O option for the createdb, so if you are using that version you'll have to change ownership of the DB later. -CONFIGURATION -============= +MANUAL CONFIGURATION +==================== -Change the files in config/* according your to environment and your needs. -Details about the config paramaters can be found in the config files. +First of all, rename the files config/*.inc.php.dist to config/*.inc.php. +You can then change these files according to your environment and your needs. +Details about the config parameters can be found in the config files. +See http://trac.roundcube.net/wiki/Howto_Install for even more guidance. You can also modify the default .htaccess file. This is necessary to increase the allowed size of file attachments, for example: - php_value upload_max_filesize 2M - -To enable the experimental HTML editor you need to set the config -parameter 'enable_htmleditor' to true. + php_value upload_max_filesize 2M UPGRADING diff --git a/README b/README index da1bd2e..e06318c 100644 --- a/README +++ b/README @@ -1,5 +1,6 @@ RoundCube Webmail (http://roundcube.net) + Introduction: ------------- RoundCube Webmail is a browser-based multilingual IMAP client with an @@ -23,10 +24,10 @@ Installation: ------------- For detailed instructions on how to install RoundCube webmail on your server, please refer to the INSTALL document in the same directory as this document. -Please carefully read the REQUIREMENTS section of the INSTALL instructions. +Please carefully read the REQUIREMENTS section of the INSTALL instructions. -Licensing: +Licensing: ---------- This product is distributed under the GPL. Please read through the file LICENSE for more information about our license. @@ -64,8 +65,8 @@ program/include/rcube_shared.inc Contact: -------- For any bug reports or feature requests please refer to the tracking system -at trac.roundcube.net (http://trac.roundcube.net/trac.cgi/report) or -subscribe to our mailing list. See http://www.roundcube.net/?p=mailinglists +at trac.roundcube.net (http://trac.roundcube.net/wiki/Howto_ReportIssues) or +subscribe to our mailing list. See http://roundcube.net/support for details. You're always welcome to send a message to the project admin: diff --git a/SQL/mysql.update-0.1a.sql b/SQL/mysql.update-0.1a.sql new file mode 100644 index 0000000..60f22b3 --- /dev/null +++ b/SQL/mysql.update-0.1a.sql @@ -0,0 +1,51 @@ +-- RoundCube Webmail update script for MySQL databases +-- Updates from version 0.1-20051007 + + +ALTER TABLE `session` ADD `ip` VARCHAR(40) NOT NULL AFTER changed; +ALTER TABLE `users` ADD `alias` VARCHAR(128) NOT NULL AFTER mail_host; + + + +-- RoundCube Webmail update script for MySQL databases +-- Updates from version 0.1-20051021 + +ALTER TABLE `session` CHANGE `sess_id` `sess_id` VARCHAR(40) NOT NULL; + +ALTER TABLE `contacts` CHANGE `del` `del` TINYINT(1) NOT NULL; +ALTER TABLE `contacts` ADD `changed` DATETIME NOT NULL AFTER `user_id`; + +UPDATE `contacts` SET `del`=0 WHERE `del`=1; +UPDATE `contacts` SET `del`=1 WHERE `del`=2; + +ALTER TABLE `identities` CHANGE `default` `standard` TINYINT(1) NOT NULL; +ALTER TABLE `identities` CHANGE `del` `del` TINYINT(1) NOT NULL; + +UPDATE `identities` SET `del`=0 WHERE `del`=1; +UPDATE `identities` SET `del`=1 WHERE `del`=2; +UPDATE `identities` SET `standard`=0 WHERE `standard`=1; +UPDATE `identities` SET `standard`=1 WHERE `standard`=2; + +CREATE TABLE `messages` ( + `message_id` int(11) unsigned NOT NULL auto_increment, + `user_id` int(11) unsigned NOT NULL default '0', + `del` tinyint(1) NOT NULL default '0', + `cache_key` varchar(128) NOT NULL default '', + `created` datetime NOT NULL default '0000-00-00 00:00:00', + `idx` int(11) unsigned NOT NULL default '0', + `uid` int(11) unsigned NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `from` varchar(255) NOT NULL default '', + `to` varchar(255) NOT NULL default '', + `cc` varchar(255) NOT NULL default '', + `date` datetime NOT NULL default '0000-00-00 00:00:00', + `size` int(11) unsigned NOT NULL default '0', + `headers` text NOT NULL, + `structure` text, + PRIMARY KEY (`message_id`), + KEY `user_id` (`user_id`), + KEY `idx` (`idx`), + KEY `uid` (`uid`), + UNIQUE `uniqueness` (`cache_key`, `uid`) +) TYPE=MyISAM; + diff --git a/SQL/postgres.update.sql b/SQL/postgres.update.sql index 8f70548..0d63cf9 100644 --- a/SQL/postgres.update.sql +++ b/SQL/postgres.update.sql @@ -5,5 +5,8 @@ ALTER TABLE "messages" DROP body; ALTER TABLE "messages" ADD structure TEXT; ALTER TABLE "messages" ADD UNIQUE (user_id, cache_key, uid); -ALTER TABLE "identities" ADD html_signature integer DEFAULT 0 NOT NULL; +ALTER TABLE "identities" ADD html_signature INTEGER; +ALTER TABLE "identities" ALTER html_signature SET DEFAULT 0; +UPDATE identities SET html_signature = 0; +ALTER TABLE "identities" ALTER html_signature SET NOT NULL; diff --git a/UPGRADING b/UPGRADING index a88f92d..9d87a1e 100644 --- a/UPGRADING +++ b/UPGRADING @@ -4,9 +4,18 @@ UPDATE instructions Follow these instructions if upgrading from a previous version of RoundCube Webmail. +from version 0.1-rc2 +---------------------------------------- +* replace index.php +* replace all files in folder /bin/ +* replace all files in folder /program/ +* replace all files in folder /skins/default/ + + from version 0.1-rc1 ---------------------------------------- * replace index.php +* replace all files in folder /bin/ * replace all files in folder /program/ * replace all files in folder /skins/default/ * If you have LDAP servers configured you should re-configure @@ -16,6 +25,7 @@ from version 0.1-rc1 from version 0.1-beta2 ---------------------------------------- * replace index.php +* replace all files in folder /bin/ * replace all files in folder /program/ * replace all files in folder /skins/default/ * run all commands in SQL/[yourdbtype].update.sql or @@ -30,6 +40,7 @@ from version 0.1-beta2 form version 0.1-beta ---------------------------------------- * replace index.php +* replace all files in folder /bin/ * replace all files in folder /program/ * replace all files in folder /skins/default/ * run all commands in SQL/[yourdbtype].update.sql or diff --git a/bin/msgimport b/bin/msgimport new file mode 100755 index 0000000..0ed268f --- /dev/null +++ b/bin/msgimport @@ -0,0 +1,123 @@ +#!/usr/bin/php -qC + 'host', 'u' => 'user', 'p' => 'pass', 'f' => 'file')) + array('host' => 'localhost'); + +if ($_SERVER['argv'][1] == 'help') +{ + print_usage(); + exit; +} +else if (!($args['host'] && $args['file'])) +{ + print "Missing required parameters.\n"; + print_usage(); + exit; +} +else if (!is_file($args['file'])) +{ + print "Cannot read message file\n"; + exit; +} + +// prompt for username if not set +if (empty($args['user'])) +{ + //fwrite(STDOUT, "Please enter your name\n"); + echo "IMAP user: "; + $args['user'] = trim(fgets(STDIN)); +} + +// prompt for password +echo "Password: "; +$args['pass'] = trim(fgets(STDIN)); + +// clear password input +echo chr(8)."\rPassword: ".str_repeat("*", strlen($args['pass']))."\n"; + +// parse $host URL +$a_host = parse_url($args['host']); +if ($a_host['host']) +{ + $host = $a_host['host']; + $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE; + $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143); +} +else +{ + $host = $args['host']; + $imap_port = 143; +} + +// instantiate IMAP class +$IMAP = new rcube_imap(null); + +// try to connect to IMAP server +if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl)) +{ + print "IMAP login successful.\n"; + print "Uploading message...\n"; + + // upload message from file + if ($IMAP->save_message('INBOX', file_get_contents($args['file']))) + print "Message successfully added to INBOX.\n"; + else + print "Adding message failed!\n"; +} +else +{ + print "IMAP login failed.\n"; +} + +?> \ No newline at end of file diff --git a/bin/quotaimg.php b/bin/quotaimg.php index 5896eac..354f4eb 100644 --- a/bin/quotaimg.php +++ b/bin/quotaimg.php @@ -1,5 +1,4 @@ | +-----------------------------------------------------------------------+ - $Id: $ + $Id: $ */ -$used = ((isset($_GET['u']) && !empty($_GET['u'])) || $_GET['u']=='0')?(int)$_GET['u']:'??'; -$quota = ((isset($_GET['q']) && !empty($_GET['q'])) || $_GET['q']=='0')?(int)$_GET['q']:'??'; -$width = empty($_GET['w']) ? 100 : (int)$_GET['w']; +$used = ((isset($_GET['u']) && !empty($_GET['u'])) || $_GET['u']=='0')?(int)$_GET['u']:'??'; +$quota = ((isset($_GET['q']) && !empty($_GET['q'])) || $_GET['q']=='0')?(int)$_GET['q']:'??'; +$width = empty($_GET['w']) ? 100 : (int)$_GET['w']; $height = empty($_GET['h']) ? 14 : (int)$_GET['h']; +/** + * Quota display + * + * Modify the following few elements to change the display of the image. + * Modifiable attributes are: + * bool border :: Defines whether you want to show a border around it? + * bool unknown :: Leave default; Defines whether quota is "unknown" + * + * int height :: Defines height of the image + * int width :: Defines width of the image + * int font :: Changes the font size & font used in the GD library. + * Available values are from 1 to 5. + * int padding :: Changes the offset (in pixels) from the top of the image + * to where the top of the text will be aligned. User + * greater than 0 to ensure text is off the border. + * array limit :: Holds the integer values of in an associative array as + * to what defines the upper and lower levels for quota + * display. + * High - Quota is nearing capacity. + * Mid - Quota is around the middle + * Low - Currently not used. + * array color :: An associative array of strings of comma separated + * values (R,G,B) for use in color creation. Define the + * RGB values you'd like to use. A list of colors (and + * their RGB values) can be found here: + * http://www.december.com/html/spec/colorcodes.html + * + * @return void + * + * @param mixed $used The amount used, or ?? if unknown. + * @param mixed $total The total available, or ?? if unknown. + * @param int $width Width of the image. + * @param int $height Height of the image. + * + * @see rcube_imap::get_quota() + * @see iil_C_GetQuota() + * + * @todo Make colors a config option. + */ function genQuota($used, $total, $width, $height) { - /** - * Quota Display - * - * Modify the following few elements to change the display of the image. - * Modifiable attributes are: - * bool border :: Defines whether you want to show a border around it or not. - * bool unknown :: Leave default; Defines whether quota is "unknown" - * - * int height :: Defines height of the image - * int width :: Defines width of the image - * int font :: Changes the font size & font used in the GD library. - * Available values are from 1 to 5. - * int padding :: Changes the offset (in pixels) from the top of the image to - * where the top of the text will be aligned. User greater than - * 0 to ensure text is off the border. - * array limit :: Holds the integer values of in an associative array as to what - * defines the upper and lower levels for quota display. - * High - Quota is nearing capacity. - * Mid - Quota is around the middle - * Low - Currently not used. - * array color :: An associative array of strings of comma separated values (R,G,B) - * for use in color creation. Define the RGB values you'd like to - * use. A list of colors (and their RGB values) can be found here: - * http://www.december.com/html/spec/colorcodes.html - **/ - $unknown = false; - $border = 0; + $border = 0; - $font = 2; + $font = 2; $padding = 0; $limit['high'] = 70; - $limit['mid'] = 45; - $limit['low'] = 0; + $limit['mid'] = 45; + $limit['low'] = 0; // Fill Colors - $color['fill']['high'] = '215, 13, 13'; // Near quota fill color - $color['fill']['mid'] = '126, 192, 238';// Mid-area of quota fill color - $color['fill']['low'] = '147, 225, 100'; // Far from quota fill color + $color['fill']['high'] = '215, 13, 13'; // Near quota fill color + $color['fill']['mid'] = '126, 192, 238'; // Mid-area of quota fill color + $color['fill']['low'] = '147, 225, 100'; // Far from quota fill color // Background colors - $color['bg']['OL'] = '215, 13, 13'; // Over limit bbackground - $color['bg']['Unknown'] = '238, 99, 99';// Unknown background - $color['bg']['quota'] = '255, 255, 255';// Normal quota background + $color['bg']['OL'] = '215, 13, 13'; // Over limit bbackground + $color['bg']['Unknown'] = '238, 99, 99'; // Unknown background + $color['bg']['quota'] = '255, 255, 255'; // Normal quota background // Misc. Colors $color['border'] = '0, 0, 0'; - $color['text'] = '102, 102, 102'; + $color['text'] = '102, 102, 102'; - /**************************** + /************************************ ***** DO NOT EDIT BELOW HERE ***** - ****************************/ + ***********************************/ - if (ereg("^[^0-9?]*$", $used) || ereg("^[^0-9?]*$", $total)) + // @todo: Set to "??" instead? + if (ereg("^[^0-9?]*$", $used) || ereg("^[^0-9?]*$", $total)) { return false; + } - if (strpos($used, '?')!==false || strpos($total, '?')!==false && $used != 0) + if (strpos($used, '?') !== false || strpos($total, '?') !== false + && $used != 0) { $unknown = true; + } $im = imagecreate($width, $height); - if ($border) - { + if ($border) { list($r, $g, $b) = explode(',', $color['border']); + $borderc = imagecolorallocate($im, $r, $g, $b); + imageline($im, 0, 0, $width, 0, $borderc); imageline($im, 0, $height-$border, 0, 0, $borderc); imageline($im, $width-1, 0, $width-$border, $height, $borderc); @@ -102,46 +119,41 @@ function genQuota($used, $total, $width, $height) list($r, $g, $b) = explode(',', $color['text']); $text = imagecolorallocate($im, $r, $g, $b); - if ($unknown) - { + if ($unknown) { list($r, $g, $b) = explode(',', $color['bg']['Unknown']); $background = imagecolorallocate($im, $r, $g, $b); imagefilledrectangle($im, 0, 0, $width, $height, $background); $string = 'Unknown'; - $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1; + $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1; imagestring($im, $font, $mid, $padding, $string, $text); - } - else if ($used > $total) - { + } else if ($used > $total) { list($r, $g, $b) = explode(',', $color['bg']['OL']); + $background = imagecolorallocate($im, $r, $g, $b); + imagefilledrectangle($im, 0, 0, $width, $height, $background); $string = 'Over Limit'; - $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1; + $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1; imagestring($im, $font, $mid, $padding, $string, $text); - } - else - { + } else { list($r, $g, $b) = explode(',', $color['bg']['quota']); + $background = imagecolorallocate($im, $r, $b, $g); + imagefilledrectangle($im, 0, 0, $width, $height, $background); $quota = ($used==0)?0:(round($used/$total, 2)*100); - if ($quota >= $limit['high']) - { + if ($quota >= $limit['high']) { list($r, $g, $b) = explode(',', $color['fill']['high']); $fill = imagecolorallocate($im, $r, $g, $b); - } - elseif($quota >= $limit['mid']) - { + } elseif($quota >= $limit['mid']) { list($r, $g, $b) = explode(',', $color['fill']['mid']); $fill = imagecolorallocate($im, $r, $g, $b); - } - else // if($quota >= $limit['low']) - { + } else { + // if($quota >= $limit['low']) list($r, $g, $b) = explode(',', $color['fill']['low']); $fill = imagecolorallocate($im, $r, $g, $b); } @@ -149,21 +161,23 @@ function genQuota($used, $total, $width, $height) $quota_width = $quota / 100 * $width; imagefilledrectangle($im, $border, 0, $quota, $height-2*$border, $fill); - $string = $quota.'%'; - $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1; - imagestring($im, $font, $mid, $padding, $string, $text); // Print percent in black + $string = $quota . '%'; + $mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1; + // Print percent in black + imagestring($im, $font, $mid, $padding, $string, $text); } header('Content-Type: image/gif'); - header("Expires: ".gmdate("D, d M Y H:i:s", mktime()+86400)." GMT"); - header("Cache-Control: "); - header("Pragma: "); + + // @todo is harcoding GMT necessary? + header('Expires: ' . gmdate('D, d M Y H:i:s', mktime()+86400) . ' GMT'); + header('Cache-Control: '); + header('Pragma: '); imagegif($im); imagedestroy($im); } - genQuota($used, $quota, $width, $height); exit; -?> +?> \ No newline at end of file diff --git a/config/db.inc.php.dist b/config/db.inc.php.dist index e142dd7..442ef6e 100644 --- a/config/db.inc.php.dist +++ b/config/db.inc.php.dist @@ -5,7 +5,7 @@ | Configuration file for database access | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -16,7 +16,7 @@ $rcmail_config = array(); // PEAR database DSN for read/write operations // format is db_provider://user:password@host/databse -// currently supported db_providers: mysql, sqlite +// currently supported db_providers: mysql, mysqli, pgsql, sqlite, mssql $rcmail_config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail'; // postgres example: 'pgsql://roundcube:pass@localhost/roundcubemail'; @@ -27,7 +27,7 @@ $rcmail_config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail'; $rcmail_config['db_dsnr'] = ''; // database backend to use (only db or mdb2 are supported) -$rcmail_config['db_backend'] = 'db'; +$rcmail_config['db_backend'] = 'mdb2'; // maximum length of a query in bytes $rcmail_config['db_max_length'] = 512000; // 500K diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index 926b4e0..8475c81 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -5,7 +5,7 @@ | Main configuration file | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -130,7 +130,7 @@ $rcmail_config['date_long'] = 'd.m.Y H:i'; $rcmail_config['date_today'] = 'H:i'; // add this user-agent to message headers when sending -$rcmail_config['useragent'] = 'RoundCube Webmail/0.1-rc2'; +$rcmail_config['useragent'] = 'RoundCube Webmail/0.1'; // use this name to compose page titles $rcmail_config['product_name'] = 'RoundCube Webmail'; @@ -154,9 +154,12 @@ $rcmail_config['sent_mbox'] = 'Sent'; $rcmail_config['trash_mbox'] = 'Trash'; // display these folders separately in the mailbox list. -// these folders will automatically be created if they do not exist +// these folders will also be displayed with localized names $rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'); +// automatically create the above listed default folders on login +$rcmail_config['create_default_folders'] = FALSE; + // protect the default folders from renames, deletes, and subscription changes $rcmail_config['protect_default_folders'] = TRUE; @@ -173,6 +176,10 @@ $rcmail_config['read_when_deleted'] = TRUE; // false causes deleted messages to be permanantly removed if there is no Trash folder $rcmail_config['flag_for_deletion'] = TRUE; +// Behavior if a received message requests a message delivery notification (read receipt) +// 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask) +$rcmail_config['mdn_requests'] = 0; + // Make use of the built-in spell checker. It is based on GoogieSpell. // Since Google only accepts connections over https your PHP installatation // requires to be compiled with Open SSL support @@ -197,6 +204,9 @@ $rcmail_config['generic_message_footer'] = ''; // leave empty for auto-detection $rcmail_config['mail_header_delimiter'] = NULL; +// session domain: .example.org +$rcmail_config['session_domain'] = ''; + // in order to enable public ldap search, create a config array // like the Verisign example below. if you would like to test, // simply uncomment the Verisign example. @@ -217,13 +227,10 @@ $rcmail_config['mail_header_delimiter'] = NULL; * 'surname_field' => 'sn', // this field represents the contact's last name * 'firstname_field' => 'gn', // this field represents the contact's first name * 'scope' => 'sub', // search mode: sub|base|list - * 'filter' => '', // used for basic listing (if not empty) and will be &'d with search queries. ex: (status=act) + * 'filter' => '', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act * 'fuzzy_search' => true); // server allows wildcard search */ -// enable composing html formatted messages (experimental) -$rcmail_config['enable_htmleditor'] = FALSE; - // don't allow these settings to be overriden by the user $rcmail_config['dont_override'] = array(); @@ -248,6 +255,9 @@ $rcmail_config['dst_active'] = (bool)date('I'); // prefer displaying HTML messages $rcmail_config['prefer_html'] = TRUE; +// compose html formatted messages by default +$rcmail_config['htmleditor'] = FALSE; + // show pretty dates as standard $rcmail_config['prettydate'] = TRUE; @@ -260,8 +270,14 @@ $rcmail_config['message_sort_order'] = 'DESC'; // save compose message every 300 seconds (5min) $rcmail_config['draft_autosave'] = 300; +// default setting if preview pane is enabled +$rcmail_config['preview_pane'] = FALSE; + // don't let users set pagesize to more than this value if set $rcmail_config['max_pagesize'] = 200; +// mime magic database +$rcmail_config['mime_magic'] = '/usr/share/misc/magic'; + // end of config file ?> diff --git a/index.php b/index.php index fd12c11..b83ef45 100644 --- a/index.php +++ b/index.php @@ -2,7 +2,7 @@ /* +-----------------------------------------------------------------------+ | RoundCube Webmail IMAP Client | - | Version 0.1-rc2-dependent | + | Version 0.1-20080302 | | | | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | @@ -36,12 +36,12 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: index.php 903 2007-10-22 06:52:13Z thomasb $ + $Id: index.php 1162 2008-03-02 13:20:21Z thomasb $ */ // application constants -define('RCMAIL_VERSION', '0.1-rc2'); +define('RCMAIL_VERSION', '0.1-trunk'); define('RCMAIL_CHARSET', 'UTF-8'); define('JS_OBJECT_NAME', 'rcmail'); @@ -103,7 +103,7 @@ if (empty($_task) || !in_array($_task, $MAIN_TASKS)) if ($_action != 'get' && $_action != 'viewsource') { // use gzip compression if supported - if (function_exists('ob_gzhandler') && ini_get('zlib.output_compression')) + if (function_exists('ob_gzhandler') && !ini_get('zlib.output_compression')) ob_start('ob_gzhandler'); else ob_start(); @@ -196,7 +196,7 @@ else if ($_action != 'login' && $_SESSION['user_id'] && $_action != 'send') // log in to imap server -if (!empty($_SESSION['user_id']) && $_task=='mail') +if (!empty($USER->ID) && $_task=='mail') { $conn = $IMAP->connect($_SESSION['imap_host'], $_SESSION['username'], decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl']); if (!$conn) @@ -210,7 +210,7 @@ if (!empty($_SESSION['user_id']) && $_task=='mail') // not logged in -> set task to 'login -if (empty($_SESSION['user_id'])) +if (empty($USER->ID)) { if ($OUTPUT->ajax_call) $OUTPUT->remote_response("setTimeout(\"location.href='\"+this.env.comm_path+\"'\", 2000);"); @@ -238,8 +238,19 @@ if (!empty($_action)) // not logged in -> show login page -if (!$_SESSION['user_id']) +if (empty($USER->ID)) { + // check if installer is still active + if (is_file('./installer/index.php')) + $OUTPUT->add_footer(' +
+

Installer script is still accessible

+

The install script of your RoundCube installation is still stored in its default location!

+

Please remove the whole installer folder from the RoundCube directory because + these files may expose sensitive configuration data like server passwords and encryption keys + to the public. Make sure you cannot access the installer script from your browser.

+
'); + $OUTPUT->task = 'login'; $OUTPUT->send('login'); exit; @@ -274,13 +285,16 @@ if ($_task=='mail') if ($_action=='viewsource') include('program/steps/mail/viewsource.inc'); + if ($_action=='sendmdn') + include('program/steps/mail/sendmdn.inc'); + if ($_action=='send') include('program/steps/mail/sendmail.inc'); if ($_action=='upload') include('program/steps/mail/upload.inc'); - if ($_action=='compose' || $_action=='remove-attachment') + if ($_action=='compose' || $_action=='remove-attachment' || $_action=='display-attachment') include('program/steps/mail/compose.inc'); if ($_action=='addcontact') diff --git a/installer/check.php b/installer/check.php new file mode 100644 index 0000000..8352364 --- /dev/null +++ b/installer/check.php @@ -0,0 +1,156 @@ +
+ 'pcre', 'Session' => 'session', 'Sockets' => 'sockets'); + +$optional_php_exts = array('FileInfo' => 'fileinfo', 'Libiconv' => 'iconv', + 'Multibyte' => 'mbstring', 'OpenSSL' => 'openssl', 'Mcrypt' => 'mcrypt', 'GD' => 'gd'); + +$required_libs = array('PEAR' => 'PEAR.php', 'DB' => 'DB.php', 'MDB2' => 'MDB2.php', + 'Net_SMTP' => 'Net/SMTP.php', 'Mail_mime' => 'Mail/mime.php', 'iilConnection' => 'lib/imap.inc'); + +$supported_dbs = array('MySQL' => 'mysql', 'MySQLi' => 'mysqli', + 'PostgreSQL' => 'pgsql', 'SQLite (v2)' => 'sqlite'); + +$ini_checks = array('file_uploads' => 1, 'session.auto_start' => 0, + 'magic_quotes_gpc' => 0, 'magic_quotes_sybase' => 0); + +$source_urls = array( + 'Sockets' => 'http://www.php.net/manual/en/ref.sockets.php', + 'Session' => 'http://www.php.net/manual/en/ref.session.php', + 'PCRE' => 'http://www.php.net/manual/en/ref.pcre.php', + 'FileInfo' => 'http://www.php.net/manual/en/ref.fileinfo.php', + 'Libiconv' => 'http://www.php.net/manual/en/ref.iconv.php', + 'Multibyte' => 'http://www.php.net/manual/en/ref.mbstring.php', + 'Mcrypt' => 'http://www.php.net/manual/en/ref.mcrypt.php', + 'OpenSSL' => 'http://www.php.net/manual/en/ref.openssl.php', + 'GD' => 'http://www.php.net/manual/en/ref.image.php', + 'PEAR' => 'http://pear.php.net', + 'MDB2' => 'http://pear.php.net/package/MDB2', + 'Net_SMTP' => 'http://pear.php.net/package/Net_SMTP', + 'Mail_mime' => 'http://pear.php.net/package/Mail_mime' +); + +echo ''; +?> + +

Checking PHP version

+ 4.3) { + $RCI->pass('Version', 'PHP ' . phpversion() . ' detected'); +} +else { + $RCI->fail('Version', 'PHP Version 4.3.1 or greater is required'); +} + +?> + +

Checking PHP extensions

+

The following modules/extensions are required to run RoundCube:

+ $ext) { + if (extension_loaded($ext)) { + $RCI->pass($name); + } + else { + $_ext = $prefix . $ext . '.' . PHP_SHLIB_SUFFIX; + $msg = @dl($_ext) ? 'Could be loaded. Please add in php.ini' : ''; + $RCI->fail($name, $msg, $source_urls[$name]); + } + echo '
'; +} + +?> + +

These extensions are optional but recommended to get the best performance:

+ $ext) { + if (extension_loaded($ext)) { + $RCI->pass($name); + } + else { + $_ext = $prefix . $ext . '.' . PHP_SHLIB_SUFFIX; + $msg = @dl($_ext) ? 'Could be loaded. Please add in php.ini' : ''; + $RCI->na($name, $msg, $source_urls[$name]); + } + echo '
'; +} + +?> + + +

Checking available databases

+

Check which of the supported extensions are installed. At least one of them is required.

+ + $ext) { + if (extension_loaded($ext)) { + $RCI->pass($database); + } + else { + $_ext = $prefix . $ext . '.' . PHP_SHLIB_SUFFIX; + $msg = @dl($_ext) ? 'Could be loaded. Please add in php.ini' : 'Not installed'; + $RCI->na($database, $msg, $source_urls[$database]); + } + echo '
'; +} + +?> + + +

Check for required 3rd party libs

+

This also checks if the include path is set correctly.

+ + $file) { + @include_once $file; + if (class_exists($classname)) { + $RCI->pass($classname); + } + else if ($classname == 'DB' || ($classname == 'MDB2' && class_exists('DB'))) { + $RCI->na($classname, 'Use ' . ($classname == 'DB' ? 'MDB2' : 'DB') . ' instead'); + } + else { + $RCI->fail($classname, "Failed to load $file", $source_urls[$classname]); + } + echo "
"; +} + + +?> + +

Checking php.ini/.htaccess settings

+ + $val) { + $status = ini_get($var); + if ($status == $val) { + $RCI->pass($var); + } + else { + $RCI->fail($var, "is '$status', should be '$val'"); + } + echo '
'; +} +?> + +failures) { + echo '

Sorry but your webserver does not meet the requirements for RoundCube!
+ Please install the missing modules or fix the php.ini settings according to the above check results.
+ Hint: only checks showing NOT OK need to be fixed.

'; +} +echo '


failures ? 'disabled' : '') . ' />

'; + +?> + +
diff --git a/installer/client.js b/installer/client.js new file mode 100644 index 0000000..3121b26 --- /dev/null +++ b/installer/client.js @@ -0,0 +1,36 @@ + +function toggleblock(id, link) +{ + var block = document.getElementById(id); + + return false; +} + + +function addhostfield() +{ + var container = document.getElementById('defaulthostlist'); + var row = document.createElement('div'); + var input = document.createElement('input'); + var link = document.createElement('a'); + + input.name = '_default_host[]'; + input.size = '30'; + link.href = '#'; + link.onclick = function() { removehostfield(this.parentNode); return false }; + link.className = 'removelink'; + link.innerHTML = 'remove'; + + row.appendChild(input); + row.appendChild(link); + container.appendChild(row); +} + + +function removehostfield(row) +{ + var container = document.getElementById('defaulthostlist'); + container.removeChild(row); +} + + diff --git a/installer/config.php b/installer/config.php new file mode 100644 index 0000000..5b365a5 --- /dev/null +++ b/installer/config.php @@ -0,0 +1,517 @@ +
+ +load_defaults(); + +// register these boolean fields +$RCI->config_props = array( + 'ip_check' => 1, + 'enable_caching' => 1, + 'enable_spellcheck' => 1, + 'auto_create_user' => 1, + 'smtp_log' => 1, + 'prefer_html' => 1, + 'preview_pane' => 1, + 'htmleditor' => 1, +); + +if (!empty($_POST['submit'])) { + + echo '

Copy the following configurations and save them in two files (names above the text box)'; + echo ' within the config/ directory of your RoundCube installation.

'; + + $textbox = new textarea(array('rows' => 16, 'cols' => 60, 'class' => "configfile")); + + echo '
main.inc.php
'; + echo $textbox->show($RCI->create_config('main')); + + echo '
db.inc.php
'; + echo $textbox->show($RCI->create_config('db')); + + echo '

Of course there are more options to configure. + Have a look at the config files or visit Howto_Config to find out.

'; + + echo '

'; + + // echo ''; + echo "\n
\n"; +} + +?> +
+General configuration +
+ + +
product_name
+
+ '_product_name', 'size' => 30, 'id' => "cfgprodname")); +echo $input_prodname->show($RCI->getprop('product_name')); + +?> +
The name of your service (used to compose page titles)
+
+ +
skin_path
+
+ '_skin_path', 'size' => 30, 'id' => "cfgskinpath")); +echo $input_skinpath->show($RCI->getprop('skin_path')); + +?> +
Relative path to the skin folder
+
+ +
temp_dir
+
+ '_temp_dir', 'size' => 30, 'id' => "cfgtempdir")); +echo $input_tempdir->show($RCI->getprop('temp_dir')); + +?> +
Use this folder to store temp files (must be writebale for webserver)
+
+ +
log_dir
+
+ '_log_dir', 'size' => 30, 'id' => "cfglogdir")); +echo $input_logdir->show($RCI->getprop('log_dir')); + +?> +
Use this folder to store log files (must be writebale for webserver)
+
+ +
ip_check
+
+ '_ip_check', 'id' => "cfgipcheck")); +echo $check_ipcheck->show(intval($RCI->getprop('ip_check')), array('value' => 1)); + +?> +
+ +

This increases security but can cause sudden logouts when someone uses a proxy with changeing IPs.

+
+ +
des_key
+
+ '_des_key', 'size' => 30, 'id' => "cfgdeskey")); +echo $input_deskey->show($RCI->getprop('des_key')); + +?> +
This key is used to encrypt the users imap password before storing in the session record
+

It's a random generated string to ensure that every installation has it's own key. +If you enter it manually please provide a string of exactly 24 chars.

+
+ +
enable_caching
+
+ '_enable_caching', 'id' => "cfgcache")); +echo $check_caching->show(intval($RCI->getprop('enable_caching')), array('value' => 1)); + +?> +
+
+ +
enable_spellcheck
+
+ '_enable_spellcheck', 'id' => "cfgspellcheck")); +echo $check_caching->show(intval($RCI->getprop('enable_spellcheck')), array('value' => 1)); + +?> +
+ +

It is based on GoogieSpell what implies that the message content will be sent to Google in order to check the spelling.

+
+ +
mdn_requests
+
+ '_mdn_requests', 'id' => "cfgmdnreq")); +$select_mdnreq->add(array('ask the user', 'send automatically', 'ignore'), array(0, 1, 2)); +echo $select_mdnreq->show(intval($RCI->getprop('mdn_requests'))); + +?> +
Behavior if a received message requests a message delivery notification (read receipt)
+
+ +
+
+ +
+Database setup +
+
db_dsnw
+
+

Database settings for read/write operations:

+ 'mysql', 'MySQLi' => 'mysqli', + 'PgSQL' => 'pgsql', 'SQLite' => 'sqlite'); + +$select_dbtype = new select(array('name' => '_dbtype', 'id' => "cfgdbtype")); +foreach ($supported_dbs AS $database => $ext) { + if (extension_loaded($ext)) { + $select_dbtype->add($database, $ext); + } +} + +$input_dbhost = new textfield(array('name' => '_dbhost', 'size' => 20, 'id' => "cfgdbhost")); +$input_dbname = new textfield(array('name' => '_dbname', 'size' => 20, 'id' => "cfgdbname")); +$input_dbuser = new textfield(array('name' => '_dbuser', 'size' => 20, 'id' => "cfgdbuser")); +$input_dbpass = new textfield(array('name' => '_dbpass', 'size' => 20, 'id' => "cfgdbpass")); + +$dsnw = DB::parseDSN($RCI->getprop('db_dsnw')); + +echo $select_dbtype->show($RCI->is_post ? $_POST['_dbtype'] : $dsnw['phptype']); +echo '
'; +echo $input_dbhost->show($RCI->is_post ? $_POST['_dbhost'] : $dsnw['hostspec']); +echo '
'; +echo $input_dbname->show($RCI->is_post ? $_POST['_dbname'] : $dsnw['database']); +echo '
'; +echo $input_dbuser->show($RCI->is_post ? $_POST['_dbuser'] : $dsnw['username']); +echo '
'; +echo $input_dbpass->show($RCI->is_post ? $_POST['_dbpass'] : $dsnw['password']); +echo '
'; + +?> +
+ +
db_backend
+
+ '_db_backend', 'id' => "cfgdbba")); + +if (class_exists('DB')) + $select_dbba->add('DB', 'db'); +if (class_exists('MDB2')) + $select_dbba->add('MDB2', 'mdb2'); + +echo $select_dbba->show($RCI->getprop('db_backend')); + +?> +
PEAR Database backend to use
+
+ +
+
+ + +
+IMAP Settings +
+
default_host
+
+
The IMAP host(s) chosen to perform the log-in
+
+ '_default_host[]', 'size' => 30)); +$default_hosts = $RCI->get_hostlist(); + +if (empty($default_hosts)) + $default_hosts = array(''); + +$i = 0; +foreach ($default_hosts as $host) { + echo '
' . $text_imaphost->show($host); + if ($i++ > 0) + echo 'remove'; + echo '
'; +} + +?> +
+ + +

Leave blank to show a textbox at login. To use SSL/IMAPS connection, type ssl://hostname

+
+ +
default_port
+
+ '_default_port', 'size' => 6, 'id' => "cfgimapport")); +echo $text_imapport->show($RCI->getprop('default_port')); + +?> +
TCP port used for IMAP connections
+
+ +
username_domain
+
+ '_username_domain', 'size' => 30, 'id' => "cfguserdomain")); +echo $text_userdomain->show($RCI->getprop('username_domain')); + +?> +
Automatically add this domain to user names for login
+ +

Only for IMAP servers that require full e-mail addresses for login

+
+ +
auto_create_user
+
+ '_auto_create_user', 'id' => "cfgautocreate")); +echo $check_autocreate->show(intval($RCI->getprop('auto_create_user')), array('value' => 1)); + +?> +
+ +

A user is authenticated by the IMAP server but it requires a local record to store settings +and contacts. With this option enabled a new user record will automatically be created once the IMAP login succeeds.

+ +

If this option is disabled, the login only succeeds if there's a matching user-record in the local RoundCube database +what means that you have to create those records manually or disable this option after the first login.

+
+ +
sent_mbox
+
+ '_sent_mbox', 'size' => 20, 'id' => "cfgsentmbox")); +echo $text_sentmbox->show($RCI->getprop('sent_mbox')); + +?> +
Store sent messages is this folder
+ +

Leave blank if sent messages should not be stored

+
+ +
trash_mbox
+
+ '_trash_mbox', 'size' => 20, 'id' => "cfgtrashmbox")); +echo $text_trashmbox->show($RCI->getprop('trash_mbox')); + +?> +
Move messages to this folder when deleting them
+ +

Leave blank if they should be deleted directly

+
+ +
drafts_mbox
+
+ '_drafts_mbox', 'size' => 20, 'id' => "cfgdraftsmbox")); +echo $text_draftsmbox->show($RCI->getprop('drafts_mbox')); + +?> +
Store draft messages is this folder
+
+ +
+
+ + +
+SMTP Settings +
+
smtp_server
+
+ '_smtp_server', 'size' => 30, 'id' => "cfgsmtphost")); +echo $text_smtphost->show($RCI->getprop('smtp_server')); + +?> +
Use this host for sending mails
+ +

To use SSL connection, set ssl://smtp.host.com. If left blank, the PHP mail() function is used

+
+ +
smtp_port
+
+ '_smtp_port', 'size' => 6, 'id' => "cfgsmtpport")); +echo $text_smtpport->show($RCI->getprop('smtp_port')); + +?> +
SMTP port (default is 25; 465 for SSL)
+
+ +
smtp_user/smtp_pass
+
+ '_smtp_user', 'size' => 20, 'id' => "cfgsmtpuser")); +$text_smtppass = new textfield(array('name' => '_smtp_pass', 'size' => 20, 'id' => "cfgsmtppass")); +echo $text_smtpuser->show($RCI->getprop('smtp_user')); +echo $text_smtppass->show($RCI->getprop('smtp_pass')); + +?> +
SMTP username and password (if required)
+

+ '_smtp_user_u', 'id' => "cfgsmtpuseru")); +echo $check_smtpuser->show($RCI->getprop('smtp_user') == '%u' || $_POST['_smtp_user_u'] ? 1 : 0, array('value' => 1)); + +?> + +

+
+ +
smtp_log
+
+ '_smtp_log', 'id' => "cfgsmtplog")); +echo $check_smtplog->show(intval($RCI->getprop('smtp_log')), array('value' => 1)); + +?> +
+
+ +
+
+ + +
+Display settings & user prefs +
+ +
locale_string
+
+ '_locale_string', 'size' => 6, 'id' => "cfglocale")); +echo $input_locale->show($RCI->getprop('locale_string')); + +?> +
The default locale setting. This also defines the language of the login screen.
+

Enter a RFC1766 formatted locale name. Examples: en_US, de, de_CH, fr, pt_BR

+
+ +
pagesize *
+
+ '_pagesize', 'size' => 6, 'id' => "cfgpagesize")); +echo $input_pagesize->show($RCI->getprop('pagesize')); + +?> +
Show up to X items in list view.
+
+ +
prefer_html *
+
+ '_prefer_html', 'id' => "cfghtmlview", 'value' => 1)); +echo $check_htmlview->show(intval($RCI->getprop('prefer_html'))); + +?> +
+
+ +
preview_pane *
+
+ '_preview_pane', 'id' => "cfgprevpane", 'value' => 1)); +echo $check_prevpane->show(intval($RCI->getprop('preview_pane'))); + +?> +
+
+ +
htmleditor *
+
+ '_htmleditor', 'id' => "cfghtmlcompose", 'value' => 1)); +echo $check_htmlcomp->show(intval($RCI->getprop('htmleditor'))); + +?> +
+
+ +
draft_autosave *
+
+ + '_draft_autosave', 'id' => 'cfgautosave')); +$select_autosave->add('never', 0); +foreach (array(3, 5, 10) as $i => $min) + $select_autosave->add("$min min", $min*60); + +echo $select_autosave->show(intval($RCI->getprop('draft_autosave'))); + +?> +
+ +
+ +

*  These settings are defaults for the user preferences

+
+ +failures ? 'disabled' : '') . ' />

'; + +?> +
diff --git a/installer/images/add.png b/installer/images/add.png new file mode 100755 index 0000000000000000000000000000000000000000..6332fefea4be19eeadf211b0b202b272e8564898 GIT binary patch literal 733 zcmV<30wVp1P)9VHk(~TedF+gQSL8D5xnVSSWAVY>J9b+m>@{iq7_KE}go~11+5s4;8hc+i0Xa zI1j@EX5!S+Me6HNqKzU5YQwL;-W5$p%ZMKMeR<%zp69-~?<4?8|C8S?bklXr4v&Ov zb&06v2|-x?qB`90yn>Qi%Sh2^G4n)$ZdyvTPf9}1)_buUT7>`e2G&2VU@~Bb(o+Mz zi4)>IxlSY${Dj4k={-9RzU^W5g9|2V5RZ2ZulL9s2xQbZ@r6eP9Ra5u(s|C0Nj#&4>wTSkb?%#=9?@ z^oxDy-O@tyN{L@by(WWvQ3%CyEu8x{+#Jb4-h&K9Owi)2pgg+heWDyked|3R$$kL@A z#sp1v-r+=G4B8D6DqsDH0@7OztA7aT9qc1Py{()w`m``?Y0&gi2=ROcc-9+nU^I6< zT=e_Y=vSnG@?3Ue{BW5ONFttcE!R-R_W4O01|0-|K-YNXLo2`4Qv z`r1LxR6#yf3FB%T95gJnaKKivA~Z}S9A(ZxEDK}O3T04USJ P00000NkvXXu0mjf^IS-S literal 0 HcmV?d00001 diff --git a/installer/images/banner_bg.gif b/installer/images/banner_bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..9cef8a7c52912b495c9908d9367b3e4ed74ab120 GIT binary patch literal 587 zcmZ?wbhEHblw+`9xXQp_Zf6`Yik=A7#JKJoSK>%9UWa-T3TLS-q6tC z=H?a|8Ch9bnUs`dWo6~)=vYutP+VMGS67#lljGy#)6~?|-rj!k;>E12tk%|6PfySE z^z@pVnz*<)XJ_Y*jt)ORzm}Gk?(S}5W8?q-|1(ezDE?#t8>RyyL4IOj`|mKhz(Yr> z|HP7_lQ~xNFRUo>S{t?g#+tIzXDaqT*ii9Cb>{gOTdL0H?Y{qEM~&a~_IE$_)Scg- z{I8+0skxbtGlONxqrgMNt37ai%*|1bJpxR)4As_Sh#5MlKCRbSFBvMdd+gV z^&2*B+Pq~w-}W6lckSM@oooMrgNF_u+0S|W#K}{q&m0#%f8pY#%U8||UB7Yj*6lmj zMejd&_~`MI`%=$eynOZg&2!oJA3lEi{N+9S_a8rh{r>Zv|33pWmyE}U`|Zsf!dfvW zJ}5M`3n+Wd@%Wh7+$~|8b?3y#MGgH5&RsH|pB6Vx)(Bn|bMjM4<8*`MQ*%5&FYTCZ zQT*!8${uPKIqUAJuUReY6ApLD zdVkAq*qm{BRqW|+I*r>49-o@){av?Zcg5#dcTa!UYuMkw%q{2h<9);74q@%MGd~JC Vk55qcp6BzkaOvq8imZ$b)&Mnv1#AES literal 0 HcmV?d00001 diff --git a/installer/images/banner_logo.gif b/installer/images/banner_logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..a7dd1142621ad02bdb995206f48b2fc58935b512 GIT binary patch literal 4345 zcmWlYdpwhi1Bc(en_XS@8#zc(IwhA{rDBTN$R(9Z9npn2r9w-EgkHByhNZcLYVLC% zO&Dn|xyQm`NvtSK5el=g-#O18-#?$v=lSDnYk$bp%%dGJ1(pCHHzlQ`qa!9JCYeZl z`sB&f=g)meWLQ|(rAwC{KYo1k=FPly>qLWt&5ezp3km`Q15>@cSXiv9t1G{@wxXh< zKQJgJFp#CG**D-H%5 zPEL8<)Wl#gzIS#sHZ+_#aiXiUGbt&l=+vnKTieMmUw+Ncmz9>@xpU`DclV(~hZ-6h z5)%^_78Zm(JroMX&(H5`U7d@IOQ(hgjYdl*5M;~C2?+^Dj~VCge`b2R8iQ$Zc9yTL z@hU3YT3Q?(9cxup$z*Z|g%TVboRX3vaC1u{5c)8fnins`qod1F78QJXaJ~cI!tgc>CT)Z|jBb}RD z`zW;X_|v-??+=92^{~y}X*0ltP1otgWr{^YZetvS#MzGcz)V zhld;M>ayYRm-Tg3&!3Y>r2YH%@7=rC($W%wAUd5M9UcAl?c4L`&tJTFF(M-3_U+rZ zZrzHFjlFQ;f~TivczAeZWaNVf4~B+@Mg|9kLSeG1YG!8U)a2yc!a`?z`4TfwvuDr7-j6&Vf5ep_Xz+k2jm!SJ1)C160K@* zww;^R9D~<$$h51-ejTT==jup%g{PG^k@=21-lnq6QcX)_zO_B4E0ySZ(TkF!s9>VT z^RC^l*OGbXrvCRw_B_t<#}VQyxP0R`oPsNT-l|sE_>Go7Esh9o@`{Jb@t*aDdmL;c zRe!wjxf7Tj{^0n%BL9r$IA8-e=;x=ZK3%03fg3@tsco7bC$}s0lK)JZY^(t_v-3q2AVm|?EMxYw^B;F zZb+Xzz~p+-Hj9s>exDTnamgdEsk!!cs|FX=xH@`ppN|GYzH_z9)c@cU0*_00`SSNY zVqXw@lj7Lo7W?kBcLkOh`fSs|J&YT}-i=CojM=;1-BmojwT-Bhsiz3nortkUb{WCp zid|liHQ}SCYLD4Q6QYBrH*LPdgl!_pKJO@+?IKB?gFfzlspesWI-m}tA`>BjfY9O_ z{sw{E?WwGQYmnqpFN>QxS$QT z`Uoo$psf#dsU~kik`Vg0oc%vPgOCOic9i;6Nfw>pAl$Y2*SI8yc}S}e?_uY0%+$>h z-5c%IijUGp{C&et(J#W=@u2~+^$7TE0#5<=+sO^SmGB0yek-l{QuM8?TA6pOq~0Q! z3WkY~ckFD1+>!TfT7)P{C^H>)K#HbbypSug0`@Gib{*S5VM7$|M9Q_9T1lq?UXhY{ zw|SeI7*N4UebTLVZpeJ7Ksn>%c?5am#GK=u9FaY+O*2Flgn96UO-iGTjF}d-zcObm zBSQSk_8WJ5M(R3FK*tDws55^wpcbwv{i$gBsr8B|_xOFqXN)AJeT`C+W1v#ZwYgq0 z>fkra zFZ8KCH)k2l*}ODzYv@R|(W>qfNNsnGd=pdGB~o``*H`Dz+k;#DeZ@K(fbqk-{d zqygs*CVoh}T(uzXm3~+2hTkSHUcI=K{pHS81 z7BwG(wMWdU=sczC-NF11*krR|l{2&QQ)s($_1C~(*H;$`<I~ z>T94q!`*I+epfhEaThs>*_p_B6uI76*x#iIc39Q#c^F4Vl--Co8~CU`c9;$R(Jnxe zX2bCeHsa-yN~p_hghn^p;`F9C512TltqyK#Dnzp|hz)Ft9qGl}@bkZ#u)DnbEM<6v zMh$QWv4ySEq>EFM&Bl-wv+?p6yOzybb9Bv>Hp7(mmaU|@b+Q_p4WIDzaRn}@&1u@W zF-bvnYc7xmQ0B{E2(TyX)-lH%t)ceTef+t28Y4&hi8Rq!G?x(6?P=iiHW9%Xhd-!k zT4!x#cihnmvsG-hrA9+#vq=&4BcQy7*3X)Sfa*B3m&}-`2kKMEX37 zkae?FOeKw#)3h*Js?05v9nW;+n=h)&XWAzERjkn*i9*2)iw)_PjUqYY?) zwlW7I@WVTB6CRH;w&bY!u@hZ_e`bgk3rySWd;HUXW^z|zkb@mP0sNEjDhX<5Yhz;Y z@FSgC69EeNDvwlZ*VDX842K5^=xX{@&F$iFxHkJf)>*9V;sW1WeC5b)fB#1(@J)uJ zwTTJAyc{E4vN_c$HZg!l*nIA??U?5M>OPH@-@8IxlBmO{3l6;FB4Z19|%w zyfuA1`q_Ne6M0(riPX-4{2nn-DUDK@u|IY9lm9ap1+T4qasoMMFaCoBsi~kZ*go+Q z^sf41Q(+H?O%bS)?3_(( z-%C19BVGHJY9A*@_%+sj=w5@XOOBKW58-gclFf?iiGcT{+dm;w1nf&|-)nD!kBBb* zR4oz$cg^|dl_nN9aA%t>4mFDx7*YrydVls;fC)@xG)B?H$piBv@+C%SY((jf zKo$fxO-;{w8v6_&xEWL6RHI70_B-$H&Cv{x3`tvp}SbRSa6N(V@KliJ8B7b}T z{BPNizz<$@ojYlkCkp(fvensI-y#3?3&XzLZx+z1$~MvOQE5-LY5*IyN$s~N^yogK?2)32YgTOK{p-gpEq1Vg$g>vdk+R4sX2zdvaXs}a|zMm)foK(H~4T>R_EkI*^B z_4@HGwvnLw#-R{79A?^E+Y^`o?K{BMd8$xT@#qOEBJrcdF2;AG^BlBqcIB&6B7dOZ z=t7a(>Xgga@|*IRC{+7q31#xP#6K z0ui&(TvP~*POKB7ga~i*a756t`cHrKN?Xm>=9r1~6F=4xPrIzmr}c&yo~?*N=4{5Px)`L$}73FO}_f!(HJ4Pt;IOe z@`65d^jDOnKp8I%oodV0c`3It3O?qHG41yF{Rd824;XH{`+|vHuD;iB8Ha7ZYs^Ix z1dw1Gq@oHb_p4yNF-!X)OD?1?y;q-#)}q1J*@Y{6;wC2V%88(nC}M{+LQe=U<)Uq! zl&^{5PJ*ygpTjx>Zw<^M3-P$45JZ$l6te*%ecY%nOizrc6hs+Azzz;jMFibxfRW^$ ziz!GDE1eQWm~*kCLaebyw4M{rP8#8C3ZjKz8TY=g1WVvzQDUr-1W^nijp_IGxc7}E z*ikm%CBm8uBEnpv=#mII7i5U&334gj&sOfx=9_khmA?)#Ac!u>TdZw3%WJq4y%BG6e2h+rK@n^AOuyj0Ti2I&P1bw;>wxm zqfBO_6hJeX)kJW=5X+DPAQ#@R5obt)$8y1WRIEACO@)?(HgiM7GT)0HGSZUFi4XDe zTF~7+!QdTJp)f&CL{Q9F)@NAOR}c?1A_+olEE${+y1Xbt92bMv1hEG$0ng|G?n2~q zGV{=KGSv*M#N#NMxJn{O{i^hw%<^T!s6?<>h@^6{Xd*(3okC?|{mpQdc)wyUNQF`* zmsq|XDO$R)N~csqCRRlkMzP0PnIae(sZ^&lYHXS>l;We$O2MQ&-OiE=6td0IbI+vb zcPLO}SFdQ>PQAc!&kX4RB+cIOX zk(DjTNEb7O8364o#6}A<6l7VtTG^XP*;`z*w+3hHlh|@6xY2O-4p}x)D`%Gsfi7Yj zvRSjDn}J(1b~q_Vkso;9!R#jGTD#^R3eL4l&voGE+R0Q%v$;-Mc_&DD&aQdK_?Qeq zw#kEZd(99Y8RQXh2i*}AKIU|AzIS^5RerwDaK4``|2UscBNd!X&)YkTz)WTBB^QJY z7lg?QpdvUc8XM)xxgX4-r*j_gInjet3MZ!&7+Qr%q(YW!VM=ge+SNii8AcNpK9v=+ zwTiMyMY*m;`N2h;^r9kuQOR&o8L3E)N9Z|Wd9KATf{Sa?i~0QG`r+aRS+PK?q={70 z;#yK`fWHNx^0_75!zDek5}{UUAE|V}wRAAJRFqyi%r700mB2s3I5g}hQrU!S*_Yrl zNqX57zwG;P*^I1gR;zrTRQ}lkuSo;enB_8l`O0wlnyegH&jro72sbYBE*G7_#nzQ0 c8xeoAQFdw-1oH|tw+i*U6&ly9U@*Y^|1FC+o&W#< literal 0 HcmV?d00001 diff --git a/installer/images/banner_right.gif b/installer/images/banner_right.gif new file mode 100644 index 0000000000000000000000000000000000000000..3248668ac0f8ede8adbc5631eec5dc68270a9c5e GIT binary patch literal 433 zcmV;i0Z#r$Nk%w1VF~~^0M!5hR#sM1Q&V?$cYJ(&aBy&dfPiIXWj{YZSy@?vf`Uv; zOi@u$TU%RaXJ>3|Y-(z1etv#+b#+NeNn&DRPEJmFd3kelb4Er+US3{9Lqmv&h=+%V zg@uJZJv~7|K{`4*H#avmH8nFcGttq}tE;Q#=H~bJ_kDeRkdTnx-rk0WhPAb|)z#Jf z{QNvTJn!%C@$vD}($eDM;*ye*o12^0*VnhVw~vpHMMXuiv9ZR+#`^mDgoK2Pi;MsN z{{R30A^8LV00000EC2ui015y&000KgK%a0(EEC#q0b334wxx1%-x(5Q&P51C5T46_JvY0+p7R z5t*8s7M-4-1fim%4yC5252>oF4Xv)P2C=fU6ScOt7`eK;486X;2*JX`0L8|~0m;hC z3(d~Y6w%Vt3f0!v64~0@7v0|98R6pMI3DKb=K%-n?Cb&^@bU3EANBV206QT2{2(qY bK0*i_ctD2`5eN~UkTIkW2^%nq1OWg$I9Jky literal 0 HcmV?d00001 diff --git a/installer/images/delete.png b/installer/images/delete.png new file mode 100755 index 0000000000000000000000000000000000000000..08f249365afd29594b51210c6e21ba253897505d GIT binary patch literal 715 zcmV;+0yO=JP)C4}Mrzlg<+1Y8PEBfUp0jJpx4B>@E+cy3`^(Gw`Mf+2&yxZm<$to~Vpgvg&QKNR z_f#1(r6svZt%iF?s+n<8X?B&!h3g9Dbb8_=MX}!;HiQSAh`bp^WMl~Z-44teO7W_Y zV4thSL{h;rJY7!l3%5J4H1!tIzB`Dv+YxO(haWeausGZYkI8^hWj6mzo=L0{%;yxzh{5!Htr?51 zvG|W62MzC8BZ76hRpCyO2zOn<%e)K>NHge!-~)Ap33OdWw6hsLYbCxGNt0%wk_2z7 zfyYvXheSG)5HRK1VB~%mq7Dmurw#bi@hEcOr3&G1ZiF*$M=&9nB#VNf&Q^r$4G5kp zTURh&s)E0%5&hyVD}sp<72~zmAY`Y(9aqO6CXF%=zFHGzO-A&I(pE}v70YQxCPJ{Y z4L+?5-crdLn3ZRPEs!A4ehEY3ZRpL~w9>@aMN+{F4dI@v&>(QDHQum!mG~E^$OS8l z!7?%Uwib*ROP67Hw`ika)gX-(8Ia`-u_IEhxG7U<13kSsMW+$lbb2dUMm5p6pa}cjgA+U$^mJ^AjD?&bdi)8~y+Q002ovPDHLkV1g8IMc@Dc literal 0 HcmV?d00001 diff --git a/installer/index.php b/installer/index.php new file mode 100644 index 0000000..264cefc --- /dev/null +++ b/installer/index.php @@ -0,0 +1,73 @@ + + + +RoundCube Webmail Installer + + + + + + + + + +
+ +

RoundCube Webmail Installer

+ +load_config(); + +?> + +
    + $item) { + $j = $i + 1; + $link = ($RCI->step >= $j || $RCI->configured) ? '' . Q($item) . '' : Q($item); + printf('
  1. %s
  2. ', $j+1, $RCI->step > $j ? ' passed' : ($RCI->step == $j ? ' current' : ''), $link); + } +?> +
+ +step]) { + include $include_steps[$RCI->step]; +} +else { + header("HTTP/1.0 404 Not Found"); + echo '

Invalid step

'; +} + +?> +
+ + + + diff --git a/installer/rcube_install.php b/installer/rcube_install.php new file mode 100644 index 0000000..8caa79d --- /dev/null +++ b/installer/rcube_install.php @@ -0,0 +1,374 @@ +step = intval($_REQUEST['_step']); + $this->is_post = $_SERVER['REQUEST_METHOD'] == 'POST'; + } + + /** + * Singleton getter + */ + function get_instance() + { + static $inst; + + if (!$inst) + $inst = new rcube_install(); + + return $inst; + } + + /** + * Read the default config files and store properties + */ + function load_defaults() + { + $this->_load_config('.php.dist'); + } + + + /** + * Read the local config files and store properties + */ + function load_config() + { + $this->config = array(); + $this->_load_config('.php'); + $this->configured = !empty($this->config); + } + + /** + * Read the default config file and store properties + * @access private + */ + function _load_config($suffix) + { + @include '../config/main.inc' . $suffix; + if (is_array($rcmail_config)) { + $this->config += $rcmail_config; + } + + @include '../config/db.inc'. $suffix; + if (is_array($rcmail_config)) { + $this->config += $rcmail_config; + } + } + + + /** + * Getter for a certain config property + * + * @param string Property name + * @param string Default value + * @return string The property value + */ + function getprop($name, $default = '') + { + $value = $this->is_post && (isset($_POST["_$name"]) || $this->config_props[$name]) ? $_POST["_$name"] : $this->config[$name]; + + if ($name == 'des_key' && !isset($_REQUEST["_$name"])) + $value = rcube_install::random_key(24); + + return $value !== null && $value !== '' ? $value : $default; + } + + + /** + * Take the default config file and replace the parameters + * with the submitted form data + * + * @param string Which config file (either 'main' or 'db') + * @return string The complete config file content + */ + function create_config($which) + { + $out = file_get_contents("../config/{$which}.inc.php.dist"); + + if (!$out) + return '[Warning: could not read the template file]'; + + foreach ($this->config as $prop => $default) { + $value = (isset($_POST["_$prop"]) || $this->config_props[$prop]) ? $_POST["_$prop"] : $default; + + // convert some form data + if ($prop == 'debug_level' && is_array($value)) { + $val = 0; + foreach ($value as $i => $dbgval) + $val += intval($dbgval); + $value = $val; + } + else if ($prop == 'db_dsnw' && !empty($_POST['_dbtype'])) { + if ($_POST['_dbtype'] == 'sqlite') + $value = sprintf('%s://%s?mode=0646', $_POST['_dbtype'], $_POST['_dbname']{0} == '/' ? '/' . $_POST['_dbname'] : $_POST['_dbname']); + else + $value = sprintf('%s://%s:%s@%s/%s', $_POST['_dbtype'], $_POST['_dbuser'], $_POST['_dbpass'], $_POST['_dbhost'], $_POST['_dbname']); + } + else if ($prop == 'smtp_auth_type' && $value == '0') { + $value = ''; + } + else if ($prop == 'default_host' && is_array($value)) { + $value = rcube_install::_clean_array($value); + if (count($value) <= 1) + $value = $value[0]; + } + else if ($prop == 'smtp_user' && !empty($_POST['_smtp_user_u'])) { + $value = '%u'; + } + else if ($prop == 'smtp_pass' && !empty($_POST['_smtp_user_u'])) { + $value = '%p'; + } + else if (is_bool($default)) { + $value = (bool)$value; + } + else if (is_numeric($value)) { + $value = intval($value); + } + + // skip this property + if ($value == $default) + continue; + + // replace the matching line in config file + $out = preg_replace( + '/(\$rcmail_config\[\''.preg_quote($prop).'\'\])\s+=\s+(.+);/Uie', + "'\\1 = ' . var_export(\$value, true) . ';'", + $out); + } + + return $out; + } + + + /** + * Getter for the last error message + * + * @return string Error message or null if none exists + */ + function get_error() + { + return $this->last_error['message']; + } + + + /** + * Return a list with all imap hosts configured + * + * @return array Clean list with imap hosts + */ + function get_hostlist() + { + $default_hosts = (array)$this->getprop('default_host'); + $out = array(); + + foreach ($default_hosts as $key => $name) { + if (!empty($name)) + $out[] = is_numeric($key) ? $name : $key; + } + + return $out; + } + + + /** + * Display OK status + * + * @param string Test name + * @param string Confirm message + */ + function pass($name, $message = '') + { + echo Q($name) . ':  OK'; + $this->_showhint($message); + } + + + /** + * Display an error status and increase failure count + * + * @param string Test name + * @param string Error message + * @param string URL for details + */ + function fail($name, $message = '', $url = '') + { + $this->failures++; + + echo Q($name) . ':  NOT OK'; + $this->_showhint($message, $url); + } + + + /** + * Display warning status + * + * @param string Test name + * @param string Warning message + * @param string URL for details + */ + function na($name, $message = '', $url = '') + { + echo Q($name) . ':  NOT AVAILABLE'; + $this->_showhint($message, $url); + } + + + function _showhint($message, $url = '') + { + $hint = Q($message); + + if ($url) + $hint .= ($hint ? '; ' : '') . 'See ' . Q($url) . ''; + + if ($hint) + echo '(' . $hint . ')'; + } + + + function _clean_array($arr) + { + $out = array(); + + foreach (array_unique($arr) as $i => $val) + if (!empty($val)) + $out[] = $val; + + return $out; + } + + + /** + * Initialize the database with the according schema + * + * @param object rcube_db Database connection + * @return boolen True on success, False on error + */ + function init_db($DB) + { + $db_map = array('pgsql' => 'postgres', 'mysqli' => 'mysql'); + $engine = isset($db_map[$DB->db_provider]) ? $db_map[$DB->db_provider] : $DB->db_provider; + + // find out db version + if ($engine == 'mysql') { + $DB->query('SELECT VERSION() AS version'); + $sql_arr = $DB->fetch_assoc(); + $version = floatval($sql_arr['version']); + + if ($version >= 4.1) + $engine = 'mysql5'; + } + + // read schema file from /SQL/* + $fname = "../SQL/$engine.initial.sql"; + if ($lines = @file($fname, FILE_SKIP_EMPTY_LINES)) { + $buff = ''; + foreach ($lines as $i => $line) { + if (eregi('^--', $line)) + continue; + + $buff .= $line . "\n"; + if (eregi(';$', trim($line))) { + $DB->query($buff); + $buff = ''; + } + } + } + else { + $this->fail('DB Schema', "Cannot read the schema file: $fname"); + return false; + } + + if ($err = $this->get_error()) { + $this->fail('DB Schema', "Error creating database schema: $err"); + return false; + } + + return true; + } + + /** + * Handler for RoundCube errors + */ + function raise_error($p) + { + $this->last_error = $p; + } + + + /** + * Generarte a ramdom string to be used as encryption key + * + * @param int Key length + * @return string The generated random string + * @static + */ + function random_key($length) + { + $alpha = 'ABCDEFGHIJKLMNOPQERSTUVXYZabcdefghijklmnopqrtsuvwxyz0123456789+*%&?!$-_='; + $out = ''; + + for ($i=0; $i < $length; $i++) + $out .= $alpha{rand(0, strlen($alpha)-1)}; + + return $out; + } + +} + + +/** + * Shortcut function for htmlentities() + * + * @param string String to quote + * @return string The html-encoded string + */ +function Q($string) +{ + return htmlentities($string); +} + + +/** + * Fake rinternal error handler to catch errors + */ +function raise_error($p) +{ + $rci = rcube_install::get_instance(); + $rci->raise_error($p); +} + diff --git a/installer/styles.css b/installer/styles.css new file mode 100644 index 0000000..ed64ff0 --- /dev/null +++ b/installer/styles.css @@ -0,0 +1,231 @@ + +body { + margin: 1em 2em 2em 2em; + background-color: #fff; +} + +body, td, th, div, p { + font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; + font-size: small; + color: #000; +} + +#banner { + position: relative; +} + +#header { + position: relative; + height: 56px; + background: url('images/banner_bg.gif') top left repeat-x #fff; +} + +#header div.banner-logo { + position: absolute; + top: 0px; + left: 0px; + width: 200px; + height: 56px; +} + +#header div.banner-right { + position: absolute; + right: 0px; + top: 0px; + width: 10px; + height: 56px; +} + +#topnav { + position: absolute; + right: 20px; + bottom: 8px; + text-align: right; + color: #ebebeb; + font-size: smaller; +} + +#topnav a { + color: #ebebeb; + font-size: 11px; + text-decoration: none; +} + +#topnav a:hover { + text-decoration: underline; +} + +#content { + margin: 8px 20px; +} + +#footer { + margin: 2em 20px 1em 20px; + padding-top: 0.6em; + font-size: smaller; + text-align: center; + border-top: 1px dotted #999; +} + +#progress { + margin-bottom: 2em; + border: 1px solid #aaa; + background-color: #f9f9f9; +} + +#progress:after { + content: "."; + display: block; + height: 0; + font-size: 0; + clear: both; + visibility: hidden; +} + +#progress li { + float: left; + color: #999; + padding: 1em 5em 1em 0.2em; +} + +#progress li a { + color: #999; + text-decoration: none; +} + +#progress li a:hover { + text-decoration: underline; +} + +#progress li.current { + color: #000; + font-weight: bold; +} + +#progress li.passed, +#progress li.passed a, +#progress li.current a { + color: #333; +} + +fieldset { + margin-bottom: 1.5em; + border: 1px solid #aaa; + background-color: #f9f9f9; +} + +fieldset p.hint { + margin-top: 0.5em; +} + +legend { + font-size: 1.1em; + font-weight: bold; +} + +textarea.configfile { + background-color: #f9f9f9; + font-family: monospace; + font-size: 9pt; + width: 100%; + height: 30em; +} + +dt.propname { + font-family: monospace; + font-size: 9pt; + margin-top: 1em; + margin-bottom: 0.6em; +} + +dd div { + margin-top: 0.3em; +} + +dd label { + padding-left: 0.5em; +} + +th { + text-align: left; +} + +ul li { + margin: 0.3em 0 0.4em -1em; +} + +ul li ul li { + margin-bottom: 0.2em; +} + +h3 { + font-size: 1.1em; + margin-top: 1.5em; + margin-bottom: 0.6em; +} + +h4 { + margin-bottom: 0.2em; +} + +a.blocktoggle { + color: #666; + text-decoration: none; +} + +a.addlink { + color: #999; + font-size: 0.9em; + padding: 1px 0 1px 20px; + background: url('images/add.png') top left no-repeat; + text-decoration: none; +} + +a.removelink { + color: #999; + font-size: 0.9em; + padding: 1px 0 1px 24px; + background: url('images/delete.png') 4px 0 no-repeat; + text-decoration: none; +} + +.hint { + color: #666; + font-size: 0.95em; +} + +.success { + color: #006400; + font-weight: bold !important; +} + +.fail { + color: #ff0000 !important; + font-weight: bold !important; +} + +.na { + color: #f60; + font-weight: bold; +} + +.indent { + padding-left: 0.8em; +} + +.notice { + padding: 1em; + background-color: #f7fdcb; + border: 2px solid #c2d071; +} + +.warning { + padding: 1em; + background-color: #ef9398; + border: 2px solid #dc5757; +} + +.userconf { + color: #00c; + font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; +} diff --git a/installer/test.php b/installer/test.php new file mode 100644 index 0000000..7e99039 --- /dev/null +++ b/installer/test.php @@ -0,0 +1,324 @@ +
+ +

Check config files

+config)) { + $RCI->pass('main.inc.php'); +} +else if ($read_main) { + $RCI->fail('main.inc.php', 'Syntax error'); +} +else if (!$read_main) { + $RCI->fail('main.inc.php', 'Unable to read file. Did you create the config files?'); +} +echo '
'; + +if ($read_db && !empty($RCI->config['db_table_users'])) { + $RCI->pass('db.inc.php'); +} +else if ($read_db) { + $RCI->fail('db.inc.php', 'Syntax error'); +} +else if (!$read_db) { + $RCI->fail('db.inc.php', 'Unable to read file. Did you create the config files?'); +} + +?> + +

Check configured database settings

+config)) { + if (!empty($RCI->config['db_backend']) && !empty($RCI->config['db_dsnw'])) { + + echo 'Backend: '; + echo 'PEAR::' . strtoupper($RCI->config['db_backend']) . '
'; + + $_class = 'rcube_' . strtolower($RCI->config['db_backend']); + require_once 'include/' . $_class . '.inc'; + + $DB = new $_class($RCI->config['db_dsnw'], '', false); + $DB->db_connect('w'); + if (!($db_error_msg = $DB->is_error())) { + $RCI->pass('DSN (write)'); + echo '
'; + $db_working = true; + } + else { + $RCI->fail('DSN (write)', $db_error_msg); + echo '

Make sure that the configured database extists and that the user as write privileges
'; + echo 'DSN: ' . $RCI->config['db_dsnw'] . '

'; + if ($RCI->config['db_backend'] == 'mdb2') + echo '

There are known problems with MDB2 running on PHP 4. Try setting db_backend to \'db\' instead

'; + } + } + else { + $RCI->fail('DSN (write)', 'not set'); + } +} +else { + $RCI->fail('Config', 'Could not read config files'); +} + +// initialize db with schema found in /SQL/* +if ($db_working && $_POST['initdb']) { + if (!($success = $RCI->init_db($DB))) { + $db_working = false; + echo '

Please try to inizialize the database manually as described in the INSTALL guide. + Make sure that the configured database extists and that the user as write privileges

'; + } +} + +// test database +if ($db_working) { + $db_read = $DB->query("SELECT count(*) FROM {$RCI->config['db_table_users']}"); + if (!$db_read) { + $RCI->fail('DB Schema', "Database not initialized"); + $db_working = false; + echo '

'; + } + else { + $RCI->pass('DB Schema'); + } + echo '
'; +} + +// more database tests +if ($db_working) { + // write test + $db_write = $DB->query("INSERT INTO {$RCI->config['db_table_cache']} (session_id, cache_key, data, user_id) VALUES (?, ?, ?, 0)", '1234567890abcdef', 'test', 'test'); + $insert_id = $DB->insert_id($RCI->config['db_sequence_cache']); + + if ($db_write && $insert_id) { + $RCI->pass('DB Write'); + $DB->query("DELETE FROM {$RCI->config['db_table_cache']} WHERE cache_id=?", $insert_id); + } + else { + $RCI->fail('DB Write', $RCI->get_error()); + } + echo '
'; + + // check timezone settings + $tz_db = 'SELECT ' . $DB->unixtimestamp($DB->now()) . ' AS tz_db'; + $tz_db = $DB->query($tz_db); + $tz_db = $DB->fetch_assoc($tz_db); + $tz_db = (int) $tz_db['tz_db']; + $tz_local = (int) time(); + $tz_diff = $tz_local - $tz_db; + + // sometimes db and web servers are on separate hosts, so allow a 30 minutes delta + if (abs($tz_diff) > 1800) { + $RCI->fail('DB Time', "Database time differs {$td_ziff}s from PHP time"); + } + else { + $RCI->pass('DB Time'); + } +} + +?> + +

Test SMTP settings

+ +

+Server: getprop('smtp_server', 'PHP mail()'); ?>
+Port: getprop('smtp_port'); ?>
+ +getprop('smtp_server')) { + $user = $RCI->getprop('smtp_user', '(none)'); + $pass = $RCI->getprop('smtp_pass', '(none)'); + + if ($user == '%u') { + $user_field = new textfield(array('name' => '_user')); + $user = $user_field->show($_POST['_user']); + } + if ($pass == '%p') { + $pass_field = new passwordfield(array('name' => '_pass')); + $pass = $pass_field->show(); + } + + echo "User: $user
"; + echo "Password: $pass
"; +} + +$from_field = new textfield(array('name' => '_from', 'id' => 'sendmailfrom')); +$to_field = new textfield(array('name' => '_to', 'id' => 'sendmailto')); + +?> +

+ +Trying to send email...
'; + + if (preg_match('/^' . $RCI->email_pattern . '$/i', trim($_POST['_from'])) && + preg_match('/^' . $RCI->email_pattern . '$/i', trim($_POST['_to']))) { + + $headers = array( + 'From' => trim($_POST['_from']), + 'To' => trim($_POST['_to']), + 'Subject' => 'Test message from RoundCube', + ); + + $body = 'This is a test to confirm that RoundCube can send email.'; + $smtp_response = array(); + + // send mail using configured SMTP server + if ($RCI->getprop('smtp_server')) { + $CONFIG = $RCI->config; + + if (!empty($_POST['_user'])) + $CONFIG['smtp_user'] = $_POST['_user']; + if (!empty($_POST['_pass'])) + $CONFIG['smtp_pass'] = $_POST['_pass']; + + $mail_object = new rc_mail_mime(); + $send_headers = $mail_object->headers($headers); + + $status = smtp_mail($headers['From'], $headers['To'], + ($foo = $mail_object->txtHeaders($send_headers)), + $body, $smtp_response); + } + else { // use mail() + $header_str = 'From: ' . $headers['From']; + + if (ini_get('safe_mode')) + $status = mail($headers['To'], $headers['Subject'], $body, $header_str); + else + $status = mail($headers['To'], $headers['Subject'], $body, $header_str, '-f'.$headers['From']); + + if (!$status) + $smtp_response[] = 'Mail delivery with mail() failed. Check your error logs for details'; + } + + if ($status) { + $RCI->pass('SMTP send'); + } + else { + $RCI->fail('SMTP send', join('; ', $smtp_response)); + } + } + else { + $RCI->fail('SMTP send', 'Invalid sender or recipient'); + } +} + +echo '

'; + +?> + + + + + + + + + + + + +
show($_POST['_from']); ?>
show($_POST['_to']); ?>
+ +

+ + +

Test IMAP configuration

+ +get_hostlist(); +if (!empty($default_hosts)) { + $host_field = new select(array('name' => '_host', 'id' => 'imaphost')); + $host_field->add($default_hosts); +} +else { + $host_field = new textfield(array('name' => '_host', 'id' => 'imaphost')); +} + +$user_field = new textfield(array('name' => '_user', 'id' => 'imapuser')); +$pass_field = new passwordfield(array('name' => '_pass', 'id' => 'imappass')); + +?> + + + + + + + + + + + + + + + + + + + + +
show($_POST['_host']); ?>
Portgetprop('default_port'); ?>
show($_POST['_user']); ?>
show(); ?>
+ +Connecting to ' . Q($_POST['_host']) . '...
'; + + $a_host = parse_url($_POST['_host']); + if ($a_host['host']) { + $imap_host = $a_host['host']; + $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? $a_host['scheme'] : null; + $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : $CONFIG['default_port']); + } + else { + $imap_host = trim($_POST['_host']); + $imap_port = $RCI->getprop('default_port'); + } + + $imap = new rcube_imap(null); + if ($imap->connect($imap_host, $_POST['_user'], $_POST['_pass'], $imap_port, $imap_ssl)) { + $RCI->pass('IMAP connect', 'SORT capability: ' . ($imap->get_capability('SORT') ? 'yes' : 'no')); + $imap->close(); + } + else { + $RCI->fail('IMAP connect', $RCI->get_error()); + } +} + +?> + +

+ +
+ +
+ +

+ +After completing the installation and the final tests please remove the whole +installer folder from the document root of the webserver.
+
+ +These files may expose sensitive configuration data like server passwords and encryption keys +to the public. Make sure you cannot access this installer from your browser. + +

diff --git a/installer/welcome.html b/installer/welcome.html new file mode 100644 index 0000000..a0c88e5 --- /dev/null +++ b/installer/welcome.html @@ -0,0 +1,35 @@ +
+ + +

Welcome to the interactive install script for the RoundCube Webmail package

+

First let's check your local environment and find out if everything RoundCube needs is available.

+ +

The basic requirements are:

+
    +
  • PHP Version 4.3.1 or greater including +
      +
    • PCRE (perl compatible regular expression)
    • +
    • Session support
    • +
    • Sockets enabled
    • +
    • Libiconv (recommended)
    • +
    • OpenSSL (recommended)
    • +
    • FileInfo (optional)
    • +
    • Multibyte/mbstring (optional)
    • +
    • Mcrypt (optional)
    • +
    +
  • +
  • php.ini options: +
      +
    • error_reporting E_ALL & ~E_NOTICE (or lower)
    • +
    • file_uploads on (for attachment upload features)
    • +
    • session.auto_start needs to be off
    • +
    • magic_quotes_gpc off
    • +
    +
  • +
  • A MySQL or PostgreSQL database engine or the SQLite extension for PHP
  • +
  • An SMTP server (recommended) or PHP configured for mail delivery
  • +
+ + + +
diff --git a/program/include/main.inc b/program/include/main.inc index 55135eb..5af2379 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -5,7 +5,7 @@ | program/include/main.inc | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev, - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev, - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: main.inc 903 2007-10-22 06:52:13Z thomasb $ + $Id: main.inc 1145 2008-02-27 13:39:22Z thomasb $ */ @@ -27,10 +27,10 @@ */ require_once('lib/utf7.inc'); +require_once('include/rcube_user.inc'); require_once('include/rcube_shared.inc'); require_once('include/rcmail_template.inc'); - // define constannts for input reading define('RCUBE_INPUT_GET', 0x0101); define('RCUBE_INPUT_POST', 0x0102); @@ -46,7 +46,7 @@ define('RCUBE_INPUT_GPC', 0x0103); function rcmail_startup($task='mail') { global $sess_id, $sess_user_lang; - global $CONFIG, $INSTALL_PATH, $BROWSER, $OUTPUT, $_SESSION, $IMAP, $DB; + global $CONFIG, $INSTALL_PATH, $BROWSER, $OUTPUT, $_SESSION, $IMAP, $DB, $USER; // check client $BROWSER = rcube_browser(); @@ -54,6 +54,11 @@ function rcmail_startup($task='mail') // load configuration $CONFIG = rcmail_load_config(); + // set session domain + if (isset($CONFIG['session_domain']) && !empty($CONFIG['session_domain'])) { + ini_set('session.cookie_domain', $CONFIG['session_domain']); + } + // set session garbage collecting time according to session_lifetime if (!empty($CONFIG['session_lifetime'])) ini_set('session.gc_maxlifetime', ($CONFIG['session_lifetime']) * 120); @@ -85,10 +90,11 @@ function rcmail_startup($task='mail') // set session vars global $sess_user_lang = rcube_language_prop($_SESSION['user_lang']); + // create user object + $USER = new rcube_user($_SESSION['user_id']); // overwrite config with user preferences - if (is_array($_SESSION['user_prefs'])) - $CONFIG = array_merge($CONFIG, $_SESSION['user_prefs']); + $CONFIG = array_merge($CONFIG, (array)$USER->get_prefs()); // reset some session parameters when changing task @@ -231,7 +237,8 @@ function rcmail_authenticate_session() $valid = $CONFIG['ip_check'] ? $_SERVER['REMOTE_ADDR'] == $SESS_CLIENT_IP : true; // check session filetime - if (!empty($CONFIG['session_lifetime']) && isset($SESS_CHANGED) && $SESS_CHANGED + $CONFIG['session_lifetime']*60 < time()) + if (!empty($CONFIG['session_lifetime']) && isset($SESS_CHANGED) + && $SESS_CHANGED + $CONFIG['session_lifetime']*60 < time()) $valid = false; return $valid; @@ -319,21 +326,18 @@ function rcmail_shutdown() */ function rcmail_kill_session() { - // save user preferences - $a_user_prefs = $_SESSION['user_prefs']; - if (!is_array($a_user_prefs)) - $a_user_prefs = array(); - + global $USER; + if ((isset($_SESSION['sort_col']) && $_SESSION['sort_col']!=$a_user_prefs['message_sort_col']) || (isset($_SESSION['sort_order']) && $_SESSION['sort_order']!=$a_user_prefs['message_sort_order'])) { - $a_user_prefs['message_sort_col'] = $_SESSION['sort_col']; - $a_user_prefs['message_sort_order'] = $_SESSION['sort_order']; - rcmail_save_user_prefs($a_user_prefs); + $a_user_prefs = array('message_sort_col' => $_SESSION['sort_col'], 'message_sort_order' => $_SESSION['sort_order']); + $USER->save_prefs($a_user_prefs); } $_SESSION = array('user_lang' => $GLOBALS['sess_user_lang'], 'auth_time' => time(), 'temp' => true); setcookie('sessauth', '-del-', time()-60); + $USER->reset(); } @@ -374,7 +378,7 @@ function get_sequence_name($sequence) if (strlen($CONFIG[$config_key])) return $CONFIG[$config_key]; - return $table; + return $sequence; } @@ -529,7 +533,7 @@ function rcmail_autoselect_host() */ function rcmail_login($user, $pass, $host=NULL) { - global $CONFIG, $IMAP, $DB, $sess_user_lang; + global $CONFIG, $IMAP, $DB, $USER, $sess_user_lang; $user_id = NULL; if (!$host) @@ -560,7 +564,7 @@ function rcmail_login($user, $pass, $host=NULL) if ($a_host['host']) { $host = $a_host['host']; - $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE; + $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? $a_host['scheme'] : null; $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : $CONFIG['default_port']); } else @@ -581,58 +585,50 @@ function rcmail_login($user, $pass, $host=NULL) // try to resolve email address from virtuser table if (!empty($CONFIG['virtuser_file']) && strpos($user, '@')) - $user = rcmail_email2user($user); + $user = rcube_user::email2user($user); // lowercase username if it's an e-mail address (#1484473) if (strpos($user, '@')) $user = strtolower($user); // query if user already registered - $sql_result = $DB->query( - "SELECT user_id, username, language, preferences - FROM ".get_table_name('users')." - WHERE mail_host=? AND (username=? OR alias=?)", - $host, - $user, - $user); + if ($existing = rcube_user::query($user, $host)) + $USER = $existing; // user already registered -> overwrite username - if ($sql_arr = $DB->fetch_assoc($sql_result)) + if ($USER->ID) { - $user_id = $sql_arr['user_id']; - $user = $sql_arr['username']; + $user_id = $USER->ID; + $user = $USER->data['username']; } // exit if IMAP login failed if (!($imap_login = $IMAP->connect($host, $user, $pass, $imap_port, $imap_ssl))) - return FALSE; + return false; // user already registered - if ($user_id && !empty($sql_arr)) + if ($USER->ID) { // get user prefs - if (strlen($sql_arr['preferences'])) - { - $user_prefs = unserialize($sql_arr['preferences']); - $_SESSION['user_prefs'] = $user_prefs; - array_merge($CONFIG, $user_prefs); - } - + $CONFIG = array_merge($CONFIG, (array)$USER->get_prefs()); // set user specific language - if (strlen($sql_arr['language'])) - $sess_user_lang = $_SESSION['user_lang'] = $sql_arr['language']; + if (!empty($USER->data['language'])) + $sess_user_lang = $_SESSION['user_lang'] = $USER->data['language']; // update user's record - $DB->query("UPDATE ".get_table_name('users')." - SET last_login=".$DB->now()." - WHERE user_id=?", - $user_id); + $USER->touch(); } // create new system user else if ($CONFIG['auto_create_user']) { - $user_id = rcmail_create_user($user, $host); + if ($created = rcube_user::create($user, $host)) + { + $USER = $created; + + // get existing mailboxes + $a_mailboxes = $IMAP->list_mailboxes(); + } } else { @@ -644,13 +640,13 @@ function rcmail_login($user, $pass, $host=NULL) ), true, false); } - if ($user_id) + if ($USER->ID) { - $_SESSION['user_id'] = $user_id; + $_SESSION['user_id'] = $USER->ID; + $_SESSION['username'] = $USER->data['username']; $_SESSION['imap_host'] = $host; $_SESSION['imap_port'] = $imap_port; $_SESSION['imap_ssl'] = $imap_ssl; - $_SESSION['username'] = $user; $_SESSION['user_lang'] = $sess_user_lang; $_SESSION['password'] = encrypt_passwd($pass); $_SESSION['login_time'] = mktime(); @@ -658,7 +654,9 @@ function rcmail_login($user, $pass, $host=NULL) // force reloading complete list of subscribed mailboxes rcmail_set_imap_prop(); $IMAP->clear_cache('mailboxes'); - $IMAP->create_default_folders(); + + if ($CONFIG['create_default_folders']) + $IMAP->create_default_folders(); return TRUE; } @@ -667,83 +665,6 @@ function rcmail_login($user, $pass, $host=NULL) } -/** - * Create new entry in users and identities table - * - * @param string User name - * @param string IMAP host - * @return mixed New user ID or False on failure - */ -function rcmail_create_user($user, $host) -{ - global $DB, $CONFIG, $IMAP; - - $user_email = ''; - - // try to resolve user in virtusertable - if (!empty($CONFIG['virtuser_file']) && !strpos($user, '@')) - $user_email = rcmail_user2email($user); - - $DB->query("INSERT INTO ".get_table_name('users')." - (created, last_login, username, mail_host, alias, language) - VALUES (".$DB->now().", ".$DB->now().", ?, ?, ?, ?)", - strip_newlines($user), - strip_newlines($host), - strip_newlines($user_email), - $_SESSION['user_lang']); - - if ($user_id = $DB->insert_id(get_sequence_name('users'))) - { - $mail_domain = rcmail_mail_domain($host); - - if ($user_email=='') - $user_email = strpos($user, '@') ? $user : sprintf('%s@%s', $user, $mail_domain); - - $user_name = $user!=$user_email ? $user : ''; - - // try to resolve the e-mail address from the virtuser table - if (!empty($CONFIG['virtuser_query']) && - ($sql_result = $DB->query(preg_replace('/%u/', $DB->quote($user), $CONFIG['virtuser_query']))) && - ($DB->num_rows()>0)) - { - while ($sql_arr = $DB->fetch_array($sql_result)) - { - $DB->query("INSERT INTO ".get_table_name('identities')." - (user_id, del, standard, name, email) - VALUES (?, 0, 1, ?, ?)", - $user_id, - strip_newlines($user_name), - preg_replace('/^@/', $user . '@', $sql_arr[0])); - } - } - else - { - // also create new identity records - $DB->query("INSERT INTO ".get_table_name('identities')." - (user_id, del, standard, name, email) - VALUES (?, 0, 1, ?, ?)", - $user_id, - strip_newlines($user_name), - strip_newlines($user_email)); - } - - // get existing mailboxes - $a_mailboxes = $IMAP->list_mailboxes(); - } - else - { - raise_error(array( - 'code' => 500, - 'type' => 'php', - 'line' => __LINE__, - 'file' => __FILE__, - 'message' => "Failed to create new user"), TRUE, FALSE); - } - - return $user_id; -} - - /** * Load virtuser table in array * @@ -789,90 +710,6 @@ function rcmail_findinvirtual($pattern) } -/** - * Resolve username using a virtuser table - * - * @param string E-mail address to resolve - * @return string Resolved IMAP username - */ -function rcmail_email2user($email) - { - $user = $email; - $r = rcmail_findinvirtual("^$email"); - - for ($i=0; $i0) - { - $user = trim($arr[count($arr)-1]); - break; - } - } - - return $user; - } - - -/** - * Resolve e-mail address from virtuser table - * - * @param string User name - * @return string Resolved e-mail address - */ -function rcmail_user2email($user) - { - $email = ""; - $r = rcmail_findinvirtual("$user$"); - - for ($i=0; $i0) - { - $email = trim($arr[0]); - break; - } - } - - return $email; - } - - -/** - * Write the given user prefs to the user's record - * - * @param mixed User prefs to save - * @return boolean True on success, False on failure - */ -function rcmail_save_user_prefs($a_user_prefs) - { - global $DB, $CONFIG, $sess_user_lang; - - // merge (partial) prefs array with existing settings - $a_user_prefs += (array)$_SESSION['user_prefs']; - - $DB->query("UPDATE ".get_table_name('users')." - SET preferences=?, - language=? - WHERE user_id=?", - serialize($a_user_prefs), - $sess_user_lang, - $_SESSION['user_id']); - - if ($DB->affected_rows()) - { - $_SESSION['user_prefs'] = $a_user_prefs; - $CONFIG = array_merge($CONFIG, $a_user_prefs); - return TRUE; - } - - return FALSE; - } - - /** * Overwrite action variable * @@ -926,15 +763,30 @@ function show_message($message, $type='notice', $vars=NULL) * @return string Encryprted string */ function encrypt_passwd($pass) - { - $td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, ""); - $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); - mcrypt_generic_init($td, get_des_key(), $iv); - $cypher = mcrypt_generic($td, $pass); - mcrypt_generic_deinit($td); - mcrypt_module_close($td); - return base64_encode($cypher); +{ + if (function_exists('mcrypt_module_open') && ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, ""))) { + $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); + mcrypt_generic_init($td, get_des_key(), $iv); + $cypher = mcrypt_generic($td, $pass); + mcrypt_generic_deinit($td); + mcrypt_module_close($td); + } + else if (function_exists('des')) { + $cypher = des(get_des_key(), $pass, 1, 0, NULL); } + else { + $cypher = $pass; + + raise_error(array( + 'code' => 500, + 'type' => 'php', + 'file' => __FILE__, + 'message' => "Could not convert encrypt password. Make sure Mcrypt is installed or lib/des.inc is available" + ), true, false); + } + + return base64_encode($cypher); +} /** @@ -944,13 +796,21 @@ function encrypt_passwd($pass) * @return string Plain password */ function decrypt_passwd($cypher) - { - $td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, ""); - $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); - mcrypt_generic_init($td, get_des_key(), $iv); - $pass = mdecrypt_generic($td, base64_decode($cypher)); - mcrypt_generic_deinit($td); - mcrypt_module_close($td); +{ + if (function_exists('mcrypt_module_open') && ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, ""))) { + $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); + mcrypt_generic_init($td, get_des_key(), $iv); + $pass = mdecrypt_generic($td, base64_decode($cypher)); + mcrypt_generic_deinit($td); + mcrypt_module_close($td); + } + else if (function_exists('des')) { + $pass = des(get_des_key(), base64_decode($cypher), 0, 0, NULL); + } + else { + $pass = base64_decode($cypher); + } + return preg_replace('/\x00/', '', $pass); } @@ -1076,42 +936,83 @@ function rcmail_message_cache_gc() function rcube_charset_convert($str, $from, $to=NULL) { global $MBSTRING; + static $convert_warning = false; $from = strtoupper($from); $to = $to==NULL ? strtoupper(RCMAIL_CHARSET) : strtoupper($to); + $error = false; $conv = null; if ($from==$to || $str=='' || empty($from)) return $str; + + $aliases = array( + 'UNKNOWN-8BIT' => 'ISO-8859-15', + 'X-UNKNOWN' => 'ISO-8859-15', + 'X-USER-DEFINED' => 'ISO-8859-15', + 'ISO-8859-8-I' => 'ISO-8859-8', + 'KS_C_5601-1987' => 'EUC-KR', + 'GB2312' => 'GB18030' + ); // convert charset using iconv module if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7') { - $iconv_map = array('KS_C_5601-1987' => 'EUC-KR'); - return iconv(($iconv_map[$from] ? $iconv_map[$from] : $from), ($iconv_map[$to] ? $iconv_map[$to] : $to) . "//IGNORE", $str); + return iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str); } // convert charset using mbstring module if ($MBSTRING) { - $mb_map = array('UTF-7' => 'UTF7-IMAP', 'KS_C_5601-1987' => 'EUC-KR'); + $mb_map = $aliases + array('UTF-7' => 'UTF7-IMAP'); // return if convert succeeded if (($out = mb_convert_encoding($str, ($mb_map[$to] ? $mb_map[$to] : $to), ($mb_map[$from] ? $mb_map[$from] : $from))) != '') return $out; } + + + if (class_exists('utf8')) + $conv = new utf8(); // convert string to UTF-8 - if ($from=='UTF-7') + if ($from == 'UTF-7') $str = utf7_to_utf8($str); - else if (($from=='ISO-8859-1') && function_exists('utf8_encode')) + else if (($from == 'ISO-8859-1') && function_exists('utf8_encode')) $str = utf8_encode($str); + else if ($from != 'UTF-8' && $conv) + { + $conv->loadCharset($from); + $str = $conv->strToUtf8($str); + } + else if ($from != 'UTF-8') + $error = true; // encode string for output - if ($to=='UTF-7') + if ($to == 'UTF-7') return utf8_to_utf7($str); - else if ($to=='ISO-8859-1' && function_exists('utf8_decode')) + else if ($to == 'ISO-8859-1' && function_exists('utf8_decode')) return utf8_decode($str); + else if ($to != 'UTF-8' && $conv) + { + $conv->loadCharset($to); + return $conv->utf8ToStr($str); + } + else if ($to != 'UTF-8') + $error = true; + // report error + if ($error && !$convert_warning) + { + raise_error(array( + 'code' => 500, + 'type' => 'php', + 'file' => __FILE__, + 'message' => "Could not convert string charset. Make sure iconv is installed or lib/utf8.class is available" + ), true, false); + + $convert_warning = true; + } + // return UTF-8 string return $str; } @@ -1273,6 +1174,14 @@ function get_input_value($fname, $source, $allow_html=FALSE, $charset=NULL) return $value; } +/** + * Remove all non-ascii and non-word chars + * except . and - + */ +function asciiwords($str) +{ + return preg_replace('/[^a-z0-9.-_]/i', '', $str); +} /** * Remove single and double quotes from given string @@ -1426,7 +1335,7 @@ function rcmail_get_edit_field($col, $value, $attrib, $type='text') // use value from post if (!empty($_POST[$fname])) - $value = $_POST[$fname]; + $value = get_input_value($fname, RCUBE_INPUT_POST); $out = $input->show($value); @@ -1500,6 +1409,26 @@ function rcmail_mod_css_styles($source, $container_id, $base_url = '') return $styles; } +/** + * Try to autodetect operating system and find the correct line endings + * + * @return string The appropriate mail header delimiter + */ +function rcmail_header_delm() +{ + global $CONFIG; + + // use the configured delimiter for headers + if (!empty($CONFIG['mail_header_delimiter'])) + return $CONFIG['mail_header_delimiter']; + else if (strtolower(substr(PHP_OS, 0, 3)=='win')) + return "\r\n"; + else if (strtolower(substr(PHP_OS, 0, 3)=='mac')) + return "\r\n"; + else + return "\n"; +} + /** * Compose a valid attribute string for HTML tags @@ -1758,10 +1687,6 @@ function rcmail_mailbox_list($attrib) // get mailbox list $mbox_name = $IMAP->get_mailbox_name(); - // for these mailboxes we have localized labels - $special_mailboxes = array('inbox', 'sent', 'drafts', 'trash', 'junk'); - - // build the folders tree if (empty($a_mailboxes)) { @@ -1779,9 +1704,9 @@ function rcmail_mailbox_list($attrib) // var_dump($a_mailboxes); if ($type=='select') - $out .= rcmail_render_folder_tree_select($a_mailboxes, $special_mailboxes, $mbox_name, $attrib['maxlength']); + $out .= rcmail_render_folder_tree_select($a_mailboxes, $mbox_name, $attrib['maxlength']); else - $out .= rcmail_render_folder_tree_html($a_mailboxes, $special_mailboxes, $mbox_name, $attrib['maxlength']); + $out .= rcmail_render_folder_tree_html($a_mailboxes, $mbox_name, $attrib['maxlength']); // rcube_print_time($mboxlist_start, 'render_folder_tree()'); @@ -1831,7 +1756,7 @@ function rcmail_build_folder_tree(&$arrFolders, $folder, $delm='/', $path='') * Return html for a structured list <ul> for the mailbox tree * @access private */ -function rcmail_render_folder_tree_html(&$arrFolders, &$special, &$mbox_name, $maxlength, $nestLevel=0) +function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, $maxlength, $nestLevel=0) { global $COMM_PATH, $IMAP, $CONFIG, $OUTPUT; @@ -1842,9 +1767,8 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$special, &$mbox_name, $m $zebra_class = ($nestLevel*$idx)%2 ? 'even' : 'odd'; $title = ''; - $folder_lc = strtolower($folder['id']); - if (in_array($folder_lc, $special)) - $foldername = rcube_label($folder_lc); + if ($folder_class = rcmail_folder_classname($folder['id'])) + $foldername = rcube_label($folder_class); else { $foldername = $folder['name']; @@ -1852,7 +1776,7 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$special, &$mbox_name, $m // shorten the folder name to a given length if ($maxlength && $maxlength>1) { - $fname = abbrevate_string($foldername, $maxlength); + $fname = abbreviate_string($foldername, $maxlength); if ($fname != $foldername) $title = ' title="'.Q($foldername).'"'; $foldername = $fname; @@ -1865,7 +1789,7 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$special, &$mbox_name, $m // make folder name safe for ids and class names $folder_id = preg_replace('/[^A-Za-z0-9\-_]/', '', $folder['id']); - $class_name = preg_replace('/[^a-z0-9\-_]/', '', $folder_lc); + $class_name = preg_replace('/[^a-z0-9\-_]/', '', $folder_class ? $folder_class : strtolower($folder['id'])); // set special class for Sent, Drafts, Trash and Junk if ($folder['id']==$CONFIG['sent_mbox']) @@ -1901,7 +1825,7 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$special, &$mbox_name, $m Q($foldername)); if (!empty($folder['folders'])) - $out .= "\n
    \n" . rcmail_render_folder_tree_html($folder['folders'], $special, $mbox_name, $maxlength, $nestLevel+1) . "
\n"; + $out .= "\n
    \n" . rcmail_render_folder_tree_html($folder['folders'], $mbox_name, $maxlength, $nestLevel+1) . "
\n"; $out .= "\n"; $idx++; @@ -1915,7 +1839,7 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$special, &$mbox_name, $m * Return html for a flat list '; - html += ''; - - for (var i=0; i' + tinyMCEMediaList[i][0] + ''; - - html += ''; - - return html; - } - - return ""; -} - -function getType(v) { - var fo, i, c, el, x, f = document.forms[0]; - - fo = tinyMCE.getParam("media_types", "flash=swf;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';'); - - // YouTube - if (v.indexOf('http://www.youtube.com/watch?v=') == 0) { - f.width.value = '425'; - f.height.value = '350'; - f.src.value = 'http://www.youtube.com/v/' + v.substring('http://www.youtube.com/watch?v='.length); - return 'flash'; - } - - // Google video - if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) { - f.width.value = '425'; - f.height.value = '326'; - f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en'; - return 'flash'; - } - - for (i=0; i 0 ? s.substring(0, s.length - 1) : s; - - return s; -} - -function setBool(pl, p, n) { - if (typeof(pl[n]) == "undefined") - return; - - document.forms[0].elements[p + "_" + n].checked = pl[n]; -} - -function setStr(pl, p, n) { - var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n]; - - if (typeof(pl[n]) == "undefined") - return; - - if (e.type == "text") - e.value = pl[n]; - else - selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]); -} - -function getBool(p, n, d, tv, fv) { - var v = document.forms[0].elements[p + "_" + n].checked; - - tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'"; - fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'"; - - return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ','); -} - -function getStr(p, n, d) { - var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; - var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; - - return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',"); -} - -function getInt(p, n, d) { - var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; - var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; - - return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ","); -} - -function jsEncode(s) { - s = s.replace(new RegExp('\\\\', 'g'), '\\\\'); - s = s.replace(new RegExp('"', 'g'), '\\"'); - s = s.replace(new RegExp("'", 'g'), "\\'"); - - return s; -} - -function generatePreview(c) { - var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh; - - p.innerHTML = ''; - - nw = parseInt(f.width.value); - nh = parseInt(f.height.value); - - if (f.width.value != "" && f.height.value != "") { - if (f.constrain.checked) { - if (c == 'width' && oldWidth != 0) { - wp = nw / oldWidth; - nh = Math.round(wp * nh); - f.height.value = nh; - } else if (c == 'height' && oldHeight != 0) { - hp = nh / oldHeight; - nw = Math.round(hp * nw); - f.width.value = nw; - } - } - } - - if (f.width.value != "") - oldWidth = nw; - - if (f.height.value != "") - oldHeight = nh; - - // After constrain - pl = serializeParameters(); - - switch (f.media_type.options[f.media_type.selectedIndex].value) { - case "flash": - cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; - codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'; - type = 'application/x-shockwave-flash'; - break; - - case "shockwave": - cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000'; - codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0'; - type = 'application/x-director'; - break; - - case "qt": - cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'; - codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0'; - type = 'video/quicktime'; - break; - - case "wmp": - cls = tinyMCE.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6'; - codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; - type = 'application/x-mplayer2'; - break; - - case "rmp": - cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA'; - codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; - type = 'audio/x-pn-realaudio-plugin'; - break; - } - - if (pl == '') { - p.innerHTML = ''; - return; - } - - pl = eval('x={' + pl + '};'); - - if (!pl.src) { - p.innerHTML = ''; - return; - } - - pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src); - pl.width = !pl.width ? 100 : pl.width; - pl.height = !pl.height ? 100 : pl.height; - pl.id = !pl.id ? 'obj' : pl.id; - pl.name = !pl.name ? 'eobj' : pl.name; - pl.align = !pl.align ? '' : pl.align; - - h += ''; - - for (n in pl) { - h += ''; - - // Add extra url parameter if it's an absolute URL - if (n == 'src' && pl[n].indexOf('://') != -1) - h += ''; - } - - h += ''); +} + +function init() { + var pl = "", f, val; + var type = "flash", fe, i; + + tinyMCEPopup.resizeToInnerSize(); + f = document.forms[0] + + fe = tinyMCE.selectedInstance.getFocusElement(); + if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) { + pl = "x={" + fe.title + "};"; + + switch (tinyMCE.getAttrib(fe, 'class')) { + case 'mceItemFlash': + type = 'flash'; + break; + + case 'mceItemShockWave': + type = 'shockwave'; + break; + + case 'mceItemWindowsMedia': + type = 'wmp'; + break; + + case 'mceItemQuickTime': + type = 'qt'; + break; + + case 'mceItemRealMedia': + type = 'rmp'; + break; + } + + document.forms[0].insert.value = tinyMCE.getLang('lang_update', 'Insert', true); + } + + document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media'); + document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + + var html = getMediaListHTML('filebrowser','src','media','media'); + if (html == "") + document.getElementById("linklistrow").style.display = 'none'; + else + document.getElementById("linklistcontainer").innerHTML = html; + + // Resize some elements + if (isVisible('filebrowsercontainer')) + document.getElementById('src').style.width = '230px'; + + // Setup form + if (pl != "") { + pl = eval(pl); + + switch (type) { + case "flash": + setBool(pl, 'flash', 'play'); + setBool(pl, 'flash', 'loop'); + setBool(pl, 'flash', 'menu'); + setBool(pl, 'flash', 'swliveconnect'); + setStr(pl, 'flash', 'quality'); + setStr(pl, 'flash', 'scale'); + setStr(pl, 'flash', 'salign'); + setStr(pl, 'flash', 'wmode'); + setStr(pl, 'flash', 'base'); + setStr(pl, 'flash', 'flashvars'); + break; + + case "qt": + setBool(pl, 'qt', 'loop'); + setBool(pl, 'qt', 'autoplay'); + setBool(pl, 'qt', 'cache'); + setBool(pl, 'qt', 'controller'); + setBool(pl, 'qt', 'correction'); + setBool(pl, 'qt', 'enablejavascript'); + setBool(pl, 'qt', 'kioskmode'); + setBool(pl, 'qt', 'autohref'); + setBool(pl, 'qt', 'playeveryframe'); + setBool(pl, 'qt', 'tarsetcache'); + setStr(pl, 'qt', 'scale'); + setStr(pl, 'qt', 'starttime'); + setStr(pl, 'qt', 'endtime'); + setStr(pl, 'qt', 'tarset'); + setStr(pl, 'qt', 'qtsrcchokespeed'); + setStr(pl, 'qt', 'volume'); + setStr(pl, 'qt', 'qtsrc'); + break; + + case "shockwave": + setBool(pl, 'shockwave', 'sound'); + setBool(pl, 'shockwave', 'progress'); + setBool(pl, 'shockwave', 'autostart'); + setBool(pl, 'shockwave', 'swliveconnect'); + setStr(pl, 'shockwave', 'swvolume'); + setStr(pl, 'shockwave', 'swstretchstyle'); + setStr(pl, 'shockwave', 'swstretchhalign'); + setStr(pl, 'shockwave', 'swstretchvalign'); + break; + + case "wmp": + setBool(pl, 'wmp', 'autostart'); + setBool(pl, 'wmp', 'enabled'); + setBool(pl, 'wmp', 'enablecontextmenu'); + setBool(pl, 'wmp', 'fullscreen'); + setBool(pl, 'wmp', 'invokeurls'); + setBool(pl, 'wmp', 'mute'); + setBool(pl, 'wmp', 'stretchtofit'); + setBool(pl, 'wmp', 'windowlessvideo'); + setStr(pl, 'wmp', 'balance'); + setStr(pl, 'wmp', 'baseurl'); + setStr(pl, 'wmp', 'captioningid'); + setStr(pl, 'wmp', 'currentmarker'); + setStr(pl, 'wmp', 'currentposition'); + setStr(pl, 'wmp', 'defaultframe'); + setStr(pl, 'wmp', 'playcount'); + setStr(pl, 'wmp', 'rate'); + setStr(pl, 'wmp', 'uimode'); + setStr(pl, 'wmp', 'volume'); + break; + + case "rmp": + setBool(pl, 'rmp', 'autostart'); + setBool(pl, 'rmp', 'loop'); + setBool(pl, 'rmp', 'autogotourl'); + setBool(pl, 'rmp', 'center'); + setBool(pl, 'rmp', 'imagestatus'); + setBool(pl, 'rmp', 'maintainaspect'); + setBool(pl, 'rmp', 'nojava'); + setBool(pl, 'rmp', 'prefetch'); + setBool(pl, 'rmp', 'shuffle'); + setStr(pl, 'rmp', 'console'); + setStr(pl, 'rmp', 'controls'); + setStr(pl, 'rmp', 'numloop'); + setStr(pl, 'rmp', 'scriptcallbacks'); + break; + } + + setStr(pl, null, 'src'); + setStr(pl, null, 'id'); + setStr(pl, null, 'name'); + setStr(pl, null, 'vspace'); + setStr(pl, null, 'hspace'); + setStr(pl, null, 'bgcolor'); + setStr(pl, null, 'align'); + setStr(pl, null, 'width'); + setStr(pl, null, 'height'); + + if ((val = tinyMCE.getAttrib(fe, "width")) != "") + pl.width = f.width.value = val; + + if ((val = tinyMCE.getAttrib(fe, "height")) != "") + pl.height = f.height.value = val; + + oldWidth = pl.width ? parseInt(pl.width) : 0; + oldHeight = pl.height ? parseInt(pl.height) : 0; + } else + oldWidth = oldHeight = 0; + + selectByValue(f, 'media_type', type); + changedType(type); + updateColor('bgcolor_pick', 'bgcolor'); + + TinyMCE_EditableSelects.init(); + generatePreview(); +} + +function insertMedia() { + var fe, f = document.forms[0], h; + + if (!AutoValidator.validate(f)) { + alert(tinyMCE.getLang('lang_invalid_data')); + return false; + } + + f.width.value = f.width.value == "" ? 100 : f.width.value; + f.height.value = f.height.value == "" ? 100 : f.height.value; + + fe = tinyMCE.selectedInstance.getFocusElement(); + if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) { + switch (f.media_type.options[f.media_type.selectedIndex].value) { + case "flash": + fe.className = "mceItemFlash"; + break; + + case "shockwave": + fe.className = "mceItemShockWave"; + break; + + case "qt": + fe.className = "mceItemQuickTime"; + break; + + case "wmp": + fe.className = "mceItemWindowsMedia"; + break; + + case "rmp": + fe.className = "mceItemRealMedia"; + break; + } + + if (fe.width != f.width.value || fe.height != f.height.height) + tinyMCE.selectedInstance.repaint(); + + fe.title = serializeParameters(); + fe.width = f.width.value; + fe.height = f.height.value; + fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : ''); + fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : ''); + fe.align = f.align.options[f.align.selectedIndex].value; + } else { + h = ' 0) { + var html = ""; + + html += ''; + + return html; + } + + return ""; +} + +function getType(v) { + var fo, i, c, el, x, f = document.forms[0]; + + fo = tinyMCE.getParam("media_types", "flash=swf;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';'); + + // YouTube + if (v.indexOf('http://www.youtube.com/watch?v=') == 0 || v.indexOf('http://youtube.com/watch?v=') == 0) { + f.width.value = '425'; + f.height.value = '350'; + + v = v.replace('http://youtube.com/watch?v=', ''); + v = v.replace('http://www.youtube.com/watch?v=', ''); + + f.src.value = 'http://www.youtube.com/v/' + v; + return 'flash'; + } + + // Google video + if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) { + f.width.value = '425'; + f.height.value = '326'; + f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en'; + return 'flash'; + } + + for (i=0; i 0 ? s.substring(0, s.length - 1) : s; + + return s; +} + +function setBool(pl, p, n) { + if (typeof(pl[n]) == "undefined") + return; + + document.forms[0].elements[p + "_" + n].checked = pl[n]; +} + +function setStr(pl, p, n) { + var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n]; + + if (typeof(pl[n]) == "undefined") + return; + + if (e.type == "text") + e.value = pl[n]; + else + selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]); +} + +function getBool(p, n, d, tv, fv) { + var v = document.forms[0].elements[p + "_" + n].checked; + + tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'"; + fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'"; + + return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ','); +} + +function getStr(p, n, d) { + var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; + var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; + + return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',"); +} + +function getInt(p, n, d) { + var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; + var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; + + return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ","); +} + +function jsEncode(s) { + s = s.replace(new RegExp('\\\\', 'g'), '\\\\'); + s = s.replace(new RegExp('"', 'g'), '\\"'); + s = s.replace(new RegExp("'", 'g'), "\\'"); + + return s; +} + +function generatePreview(c) { + var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh; + + p.innerHTML = ''; + + nw = parseInt(f.width.value); + nh = parseInt(f.height.value); + + if (f.width.value != "" && f.height.value != "") { + if (f.constrain.checked) { + if (c == 'width' && oldWidth != 0) { + wp = nw / oldWidth; + nh = Math.round(wp * nh); + f.height.value = nh; + } else if (c == 'height' && oldHeight != 0) { + hp = nh / oldHeight; + nw = Math.round(hp * nw); + f.width.value = nw; + } + } + } + + if (f.width.value != "") + oldWidth = nw; + + if (f.height.value != "") + oldHeight = nh; + + // After constrain + pl = serializeParameters(); + + switch (f.media_type.options[f.media_type.selectedIndex].value) { + case "flash": + cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; + codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'; + type = 'application/x-shockwave-flash'; + break; + + case "shockwave": + cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000'; + codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0'; + type = 'application/x-director'; + break; + + case "qt": + cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'; + codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0'; + type = 'video/quicktime'; + break; + + case "wmp": + cls = tinyMCE.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6'; + codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; + type = 'application/x-mplayer2'; + break; + + case "rmp": + cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA'; + codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; + type = 'audio/x-pn-realaudio-plugin'; + break; + } + + if (pl == '') { + p.innerHTML = ''; + return; + } + + pl = eval('x={' + pl + '};'); + + if (!pl.src) { + p.innerHTML = ''; + return; + } + + pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src); + pl.width = !pl.width ? 100 : pl.width; + pl.height = !pl.height ? 100 : pl.height; + pl.id = !pl.id ? 'obj' : pl.id; + pl.name = !pl.name ? 'eobj' : pl.name; + pl.align = !pl.align ? '' : pl.align; + + h += ''; + + for (n in pl) { + h += ''; + + // Add extra url parameter if it's an absolute URL + if (n == 'src' && pl[n].indexOf('://') != -1) + h += ''; + } + + h += ' - + diff --git a/program/js/tiny_mce/plugins/readme.txt b/program/js/tiny_mce/plugins/readme.txt index b694fdb..9192b26 100644 --- a/program/js/tiny_mce/plugins/readme.txt +++ b/program/js/tiny_mce/plugins/readme.txt @@ -1 +1 @@ -This is the location you place TinyMCE plugins. +This is the location you place TinyMCE plugins. diff --git a/program/js/tiny_mce/plugins/table/css/cell.css b/program/js/tiny_mce/plugins/table/css/cell.css index a067ecd..a47cc1a 100644 --- a/program/js/tiny_mce/plugins/table/css/cell.css +++ b/program/js/tiny_mce/plugins/table/css/cell.css @@ -1,17 +1,17 @@ -/* CSS file for cell dialog in the table plugin */ - -.panel_wrapper div.current { - height: 200px; -} - -.advfield { - width: 200px; -} - -#action { - margin-bottom: 3px; -} - -#class { - width: 150px; +/* CSS file for cell dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#class { + width: 150px; } \ No newline at end of file diff --git a/program/js/tiny_mce/plugins/table/css/row.css b/program/js/tiny_mce/plugins/table/css/row.css index 1f7755d..0e397db 100644 --- a/program/js/tiny_mce/plugins/table/css/row.css +++ b/program/js/tiny_mce/plugins/table/css/row.css @@ -1,25 +1,25 @@ -/* CSS file for row dialog in the table plugin */ - -.panel_wrapper div.current { - height: 200px; -} - -.advfield { - width: 200px; -} - -#action { - margin-bottom: 3px; -} - -#rowtype,#align,#valign,#class,#height { - width: 150px; -} - -#height { - width: 50px; -} - -.col2 { - padding-left: 20px; -} +/* CSS file for row dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#rowtype,#align,#valign,#class,#height { + width: 150px; +} + +#height { + width: 50px; +} + +.col2 { + padding-left: 20px; +} diff --git a/program/js/tiny_mce/plugins/table/css/table.css b/program/js/tiny_mce/plugins/table/css/table.css index 804f766..82bb548 100644 --- a/program/js/tiny_mce/plugins/table/css/table.css +++ b/program/js/tiny_mce/plugins/table/css/table.css @@ -1,13 +1,13 @@ -/* CSS file for table dialog in the table plugin */ - -.panel_wrapper div.current { - height: 220px; -} - -.advfield { - width: 200px; -} - -#class { - width: 150px; -} +/* CSS file for table dialog in the table plugin */ + +.panel_wrapper div.current { + height: 220px; +} + +.advfield { + width: 200px; +} + +#class { + width: 150px; +} diff --git a/program/js/tiny_mce/plugins/table/table.htm b/program/js/tiny_mce/plugins/table/table.htm index 6c722db..f484187 100644 --- a/program/js/tiny_mce/plugins/table/table.htm +++ b/program/js/tiny_mce/plugins/table/table.htm @@ -62,7 +62,7 @@ - + diff --git a/skins/default/editor_popup.css b/program/js/tiny_mce/themes/advanced/css/editor_popup.css similarity index 100% rename from skins/default/editor_popup.css rename to program/js/tiny_mce/themes/advanced/css/editor_popup.css diff --git a/program/js/tiny_mce/themes/advanced/editor_template.js b/program/js/tiny_mce/themes/advanced/editor_template.js index 6e781d7..7697f19 100644 --- a/program/js/tiny_mce/themes/advanced/editor_template.js +++ b/program/js/tiny_mce/themes/advanced/editor_template.js @@ -1 +1 @@ -tinyMCE.importThemeLanguagePack('advanced');var TinyMCE_AdvancedTheme={_defColors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",_autoImportCSSClasses:true,_resizer:{},_buttons:[['bold','{$lang_bold_img}','lang_bold_desc','Bold'],['italic','{$lang_italic_img}','lang_italic_desc','Italic'],['underline','{$lang_underline_img}','lang_underline_desc','Underline'],['strikethrough','strikethrough.gif','lang_striketrough_desc','Strikethrough'],['justifyleft','justifyleft.gif','lang_justifyleft_desc','JustifyLeft'],['justifycenter','justifycenter.gif','lang_justifycenter_desc','JustifyCenter'],['justifyright','justifyright.gif','lang_justifyright_desc','JustifyRight'],['justifyfull','justifyfull.gif','lang_justifyfull_desc','JustifyFull'],['bullist','bullist.gif','lang_bullist_desc','InsertUnorderedList'],['numlist','numlist.gif','lang_numlist_desc','InsertOrderedList'],['outdent','outdent.gif','lang_outdent_desc','Outdent'],['indent','indent.gif','lang_indent_desc','Indent'],['cut','cut.gif','lang_cut_desc','Cut'],['copy','copy.gif','lang_copy_desc','Copy'],['paste','paste.gif','lang_paste_desc','Paste'],['undo','undo.gif','lang_undo_desc','Undo'],['redo','redo.gif','lang_redo_desc','Redo'],['link','link.gif','lang_link_desc','mceLink',true],['unlink','unlink.gif','lang_unlink_desc','unlink'],['image','image.gif','lang_image_desc','mceImage',true],['cleanup','cleanup.gif','lang_cleanup_desc','mceCleanup'],['help','help.gif','lang_help_desc','mceHelp'],['code','code.gif','lang_theme_code_desc','mceCodeEditor'],['hr','hr.gif','lang_theme_hr_desc','inserthorizontalrule'],['removeformat','removeformat.gif','lang_theme_removeformat_desc','removeformat'],['sub','sub.gif','lang_theme_sub_desc','subscript'],['sup','sup.gif','lang_theme_sup_desc','superscript'],['forecolor','forecolor.gif','lang_theme_forecolor_desc','forecolor',true],['forecolorpicker','forecolor.gif','lang_theme_forecolor_desc','forecolorpicker',true],['backcolor','backcolor.gif','lang_theme_backcolor_desc','HiliteColor',true],['backcolorpicker','backcolor.gif','lang_theme_backcolor_desc','backcolorpicker',true],['charmap','charmap.gif','lang_theme_charmap_desc','mceCharMap'],['visualaid','visualaid.gif','lang_theme_visualaid_desc','mceToggleVisualAid'],['anchor','anchor.gif','lang_theme_anchor_desc','mceInsertAnchor'],['newdocument','newdocument.gif','lang_newdocument_desc','mceNewDocument']],_buttonMap:'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table',getControlHTML:function(button_name){var i,x,but;for(i=0;i4?but[4]:false),(but.length>5?but[5]:null));if(but[0]==button_name)return tinyMCE.getButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null))}switch(button_name){case"formatselect":var html='';return html;case"styleselect":return'';case"fontselect":var fontHTML='';return fontHTML;case"fontsizeselect":return'';case"|":case"separator":return'';case"spacer":return'';case"rowseparator":return'
'}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case'mceHelp':tinyMCE.openWindow({file:'about.htm',width:480,height:380},{tinymce_version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion,tinymce_releasedate:tinyMCE.releaseDate,inline:"yes"});return true;case"mceLink":var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();var selectedText="";if(tinyMCE.isMSIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=inst.getSel().toString();if(!tinyMCE.linkElement){if((tinyMCE.selectedElement.nodeName.toLowerCase()!="img")&&(selectedText.length<=0))return true}var href="",target="",title="",onclick="",action="insert",style_class="";if(tinyMCE.selectedElement.nodeName.toLowerCase()=="a")tinyMCE.linkElement=tinyMCE.selectedElement;if(tinyMCE.linkElement!=null&&tinyMCE.getAttrib(tinyMCE.linkElement,'href')=="")tinyMCE.linkElement=null;if(tinyMCE.linkElement){href=tinyMCE.getAttrib(tinyMCE.linkElement,'href');target=tinyMCE.getAttrib(tinyMCE.linkElement,'target');title=tinyMCE.getAttrib(tinyMCE.linkElement,'title');onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');style_class=tinyMCE.getAttrib(tinyMCE.linkElement,'class');if(onclick=="")onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');onclick=tinyMCE.cleanupEventStr(onclick);href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);");mceRealHref=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_href');if(mceRealHref!=""){href=mceRealHref;if(tinyMCE.getParam('convert_urls'))href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);")}action="update"}var template=new Array();template['file']='link.htm';template['width']=310;template['height']=200;template['width']+=tinyMCE.getLang('lang_insert_link_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_link_delta_height',0);if(inst.settings['insertlink_callback']){var returnVal=eval(inst.settings['insertlink_callback']+"(href, target, title, onclick, action, style_class);");if(returnVal&&returnVal['href'])TinyMCE_AdvancedTheme._insertLink(returnVal['href'],returnVal['target'],returnVal['title'],returnVal['onclick'],returnVal['style_class'])}else{tinyMCE.openWindow(template,{href:href,target:target,title:title,onclick:onclick,action:action,className:style_class,inline:"yes"})}return true;case"mceImage":var src="",alt="",border="",hspace="",vspace="",width="",height="",align="";var title="",onmouseover="",onmouseout="",action="insert";var img=tinyMCE.imgElement;var inst=tinyMCE.getInstanceById(editor_id);if(tinyMCE.selectedElement!=null&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){img=tinyMCE.selectedElement;tinyMCE.imgElement=img}if(img){if(tinyMCE.getAttrib(img,'name').indexOf('mce_')==0)return true;src=tinyMCE.getAttrib(img,'src');alt=tinyMCE.getAttrib(img,'alt');if(alt=="")alt=tinyMCE.getAttrib(img,'title');if(tinyMCE.isGecko){var w=img.style.width;if(w!=null&&w!="")img.setAttribute("width",w);var h=img.style.height;if(h!=null&&h!="")img.setAttribute("height",h)}border=tinyMCE.getAttrib(img,'border');hspace=tinyMCE.getAttrib(img,'hspace');vspace=tinyMCE.getAttrib(img,'vspace');width=tinyMCE.getAttrib(img,'width');height=tinyMCE.getAttrib(img,'height');align=tinyMCE.getAttrib(img,'align');onmouseover=tinyMCE.getAttrib(img,'onmouseover');onmouseout=tinyMCE.getAttrib(img,'onmouseout');title=tinyMCE.getAttrib(img,'title');if(tinyMCE.isMSIE){width=img.attributes['width'].specified?width:"";height=img.attributes['height'].specified?height:""}src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);");mceRealSrc=tinyMCE.getAttrib(img,'mce_src');if(mceRealSrc!=""){src=mceRealSrc;if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);")}action="update"}var template=new Array();template['file']='image.htm?src={$src}';template['width']=355;template['height']=265+(tinyMCE.isMSIE?25:0);template['width']+=tinyMCE.getLang('lang_insert_image_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_image_delta_height',0);if(inst.settings['insertimage_callback']){var returnVal=eval(inst.settings['insertimage_callback']+"(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");if(returnVal&&returnVal['src'])TinyMCE_AdvancedTheme._insertImage(returnVal['src'],returnVal['alt'],returnVal['border'],returnVal['hspace'],returnVal['vspace'],returnVal['width'],returnVal['height'],returnVal['align'],returnVal['title'],returnVal['onmouseover'],returnVal['onmouseout'])}else tinyMCE.openWindow(template,{src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout,action:action,inline:"yes"});return true;case"forecolor":var fcp=new TinyMCE_Layer(editor_id+'_fcPreview',false),p,img,elm;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!fcp.exists()){fcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=fcp.getElement();elm._editor_id=editor_id;elm._command="forecolor";elm._switchId=editor_id+"_forecolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_forecolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));fcp.moveTo(p.absLeft,p.absTop);fcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).foreColor;fcp.show();return false;case"forecolorpicker":this._pickColor(editor_id,'forecolor');return true;case"forecolorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_fcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_text_colors','forecolor'));tinyMCE.switchClass(editor_id+'_forecolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_forecolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"HiliteColor":var bcp=new TinyMCE_Layer(editor_id+'_bcPreview',false),p,img;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!bcp.exists()){bcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=bcp.getElement();elm._editor_id=editor_id;elm._command="HiliteColor";elm._switchId=editor_id+"_backcolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_backcolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));bcp.moveTo(p.absLeft,p.absTop);bcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).backColor;bcp.show();return false;case"HiliteColorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_bcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_background_colors','HiliteColor'));tinyMCE.switchClass(editor_id+'_backcolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_backcolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"backcolorpicker":this._pickColor(editor_id,'HiliteColor');return true;case"mceColorPicker":if(user_interface){var template=[];if(!value['callback']&&!value['color'])value['color']=value['document'].getElementById(value['element_id']).value;template['file']='color_picker.htm';template['width']=380;template['height']=250;template['close_previous']="no";template['width']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height',0);if(typeof(value['store_selection'])=="undefined")value['store_selection']=true;tinyMCE.lastColorPickerValue=value;tinyMCE.openWindow(template,{editor_id:editor_id,mce_store_selection:value['store_selection'],inline:"yes",command:"mceColorPicker",input_color:value['color']})}else{var savedVal=tinyMCE.lastColorPickerValue,elm;if(savedVal['callback']){savedVal['callback'](value);return true}elm=savedVal['document'].getElementById(savedVal['element_id']);elm.value=value;if(elm.onchange!=null&&elm.onchange!='')eval('elm.onchange();')}return true;case"mceCodeEditor":var template=new Array();template['file']='source_editor.htm';template['width']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_width",720));template['height']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_height",580));tinyMCE.openWindow(template,{editor_id:editor_id,resizable:"yes",scrollbars:"no",inline:"yes"});return true;case"mceCharMap":var template=new Array();template['file']='charmap.htm';template['width']=550+(tinyMCE.isOpera?40:0);template['height']=250;template['width']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceInsertAnchor":var template=new Array();template['file']='anchor.htm';template['width']=320;template['height']=90+(tinyMCE.isNS7?30:0);template['width']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceNewDocument":if(confirm(tinyMCE.getLang('lang_newdocument')))tinyMCE.execInstanceCommand(editor_id,'mceSetContent',false,' ');return true}return false},getEditorTemplate:function(settings,editorId){function removeFromArray(in_array,remove_array){var outArray=new Array(),skip;for(var i=0;i 

';var layoutManager=tinyMCE.getParam("theme_advanced_layout_manager","SimpleLayout");var styleSelectHTML='';if(settings['theme_advanced_styles']){var stylesAr=settings['theme_advanced_styles'].split(';');for(var i=0;i'+key+''}TinyMCE_AdvancedTheme._autoImportCSSClasses=false}switch(layoutManager){case"SimpleLayout":var toolbarHTML="";var toolbarLocation=tinyMCE.getParam("theme_advanced_toolbar_location","bottom");var toolbarAlign=tinyMCE.getParam("theme_advanced_toolbar_align","center");var pathLocation=tinyMCE.getParam("theme_advanced_path_location","none");var statusbarLocation=tinyMCE.getParam("theme_advanced_statusbar_location",pathLocation);var defVals={theme_advanced_buttons1:"bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,separator,sub,sup,separator,charmap"};toolbarHTML+='0){toolbarHTML+="
";deltaHeight-=23}}toolbarHTML+='
';template['html']='';if(toolbarLocation=="top")template['html']+='';if(statusbarLocation=="top"){template['html']+='';deltaHeight-=23}template['html']+='';if(toolbarLocation=="bottom")template['html']+='';if(toolbarLocation=="external"){var bod=document.body;var elm=document.createElement("div");toolbarHTML=tinyMCE.replaceVar(toolbarHTML,'style_select_options',styleSelectHTML);toolbarHTML=tinyMCE.applyTemplate(toolbarHTML,{editor_id:editorId});elm.className="mceToolbarExternal";elm.id=editorId+"_toolbar";elm.innerHTML='
'+toolbarHTML+'
'+statusbarHTML+'
'+toolbarHTML+'
'+toolbarHTML+'
';bod.appendChild(elm);deltaHeight=0;tinyMCE.getInstanceById(editorId).toolbarElement=elm;}else{tinyMCE.getInstanceById(editorId).toolbarElement=null}if(statusbarLocation=="bottom"){template['html']+=''+statusbarHTML+'';deltaHeight-=23}template['html']+='';break;case"RowLayout":template['html']='';var containers=tinyMCE.getParam("theme_advanced_containers","",true,",");var defaultContainerCSS=tinyMCE.getParam("theme_advanced_containers_default_class","container");var defaultContainerAlign=tinyMCE.getParam("theme_advanced_containers_default_align","center");for(var i=0;i';else if(containers[i]=="mceElementpath"||containers[i]=="mceStatusbar"){var pathClass="mceStatusbar";if(i==containers.length-1){pathClass="mceStatusbarBottom"}else if(i==0){pathClass="mceStatusbar"}else{deltaHeight-=2}template['html']+='';deltaHeight-=22}else{var curContainer=tinyMCE.getParam("theme_advanced_container_"+containers[i],"",true,',');var curContainerHTML="";var curAlign=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align",defaultContainerAlign);var curCSS=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class",defaultContainerCSS);curContainer=removeFromArray(curContainer,tinyMCE.getParam("theme_advanced_disable","",true,','));for(var j=0;j0){curContainerHTML+="
";deltaHeight-=23}template['html']+='
'}}template['html']+='
'+statusbarHTML+'
'+curContainerHTML+'
';break;case"CustomLayout":var customLayout=tinyMCE.getParam("theme_advanced_custom_layout","");if(customLayout!=""&&eval("typeof("+customLayout+")")!="undefined"){template=eval(customLayout+"(template);")}break}if(resizing)template['html']+='';template['html']=tinyMCE.replaceVar(template['html'],'style_select_options',styleSelectHTML);if(!template['delta_width'])template['delta_width']=0;if(!template['delta_height'])template['delta_height']=deltaHeight;return template},initInstance:function(inst){if(tinyMCE.getParam("theme_advanced_resizing",false)){if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var w=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_width");var h=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_height");TinyMCE_AdvancedTheme._resizeTo(inst,w,h,tinyMCE.getParam("theme_advanced_resize_horizontal",true))}}inst.addShortcut('ctrl','k','lang_link_desc','mceLink')},removeInstance:function(inst){new TinyMCE_Layer(inst.editorId+'_fcMenu').remove();new TinyMCE_Layer(inst.editorId+'_bcMenu').remove()},hideInstance:function(inst){TinyMCE_AdvancedTheme._hideMenus(inst.editorId)},_handleMenuEvent:function(e){var te=tinyMCE.isMSIE?window.event.srcElement:e.target;tinyMCE._menuButtonEvent(e.type=="mouseover"?"over":"out",document.getElementById(te._switchId));if(e.type=="click")tinyMCE.execInstanceCommand(te._editor_id,te._command)},_hideMenus:function(id){var fcml=new TinyMCE_Layer(id+'_fcMenu'),bcml=new TinyMCE_Layer(id+'_bcMenu');if(fcml.exists()&&fcml.isVisible()){tinyMCE.switchClass(id+'_forecolor','mceMenuButton');fcml.hide()}if(bcml.exists()&&bcml.isVisible()){tinyMCE.switchClass(id+'_backcolor','mceMenuButton');bcml.hide()}},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection,setup_content){var alignNode,breakOut,classNode;function selectByValue(select_elm,value,first_index){first_index=typeof(first_index)=="undefined"?false:true;if(select_elm){for(var i=0;i=0;i--){var nodeName=path[i].nodeName.toLowerCase();var nodeData="";if(nodeName.indexOf("html:")==0)nodeName=nodeName.substring(5);if(nodeName=="b"){nodeName="strong"}if(nodeName=="i"){nodeName="em"}if(nodeName=="span"){var cn=tinyMCE.getAttrib(path[i],"class");if(cn!=""&&cn.indexOf('mceItem')==-1)nodeData+="class: "+cn+" ";var st=tinyMCE.getAttrib(path[i],"style");if(st!=""){st=tinyMCE.serializeStyle(tinyMCE.parseStyle(st));nodeData+="style: "+tinyMCE.xmlEncode(st)+" "}}if(nodeName=="font"){if(tinyMCE.getParam("convert_fonts_to_spans"))nodeName="span";var face=tinyMCE.getAttrib(path[i],"face");if(face!="")nodeData+="font: "+tinyMCE.xmlEncode(face)+" ";var size=tinyMCE.getAttrib(path[i],"size");if(size!="")nodeData+="size: "+tinyMCE.xmlEncode(size)+" ";var color=tinyMCE.getAttrib(path[i],"color");if(color!="")nodeData+="color: "+tinyMCE.xmlEncode(color)+" "}if(tinyMCE.getAttrib(path[i],'id')!=""){nodeData+="id: "+path[i].getAttribute('id')+" "}var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1)nodeData+="class: "+className+" ";if(tinyMCE.getAttrib(path[i],'src')!=""){var src=tinyMCE.getAttrib(path[i],"mce_src");if(src=="")src=tinyMCE.getAttrib(path[i],"src");nodeData+="src: "+tinyMCE.xmlEncode(src)+" "}if(path[i].nodeName=='A'&&tinyMCE.getAttrib(path[i],'href')!=""){var href=tinyMCE.getAttrib(path[i],"mce_href");if(href=="")href=tinyMCE.getAttrib(path[i],"href");nodeData+="href: "+tinyMCE.xmlEncode(href)+" "}className=tinyMCE.getAttrib(path[i],"class");if((nodeName=="img"||nodeName=="span")&&className.indexOf('mceItem')!=-1){nodeName=className.replace(/mceItem([a-z]+)/gi,'$1').toLowerCase();nodeData=path[i].getAttribute('title')}if(nodeName=="a"&&(anchor=tinyMCE.getAttrib(path[i],"name"))!=""){nodeName="a";nodeName+="#"+tinyMCE.xmlEncode(anchor);nodeData=""}if(tinyMCE.getAttrib(path[i],'name').indexOf("mce_")!=0){var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1){nodeName+="."+className}}var cmd='tinyMCE.execInstanceCommand(\''+editor_id+'\',\'mceSelectNodeDepth\',false,\''+i+'\');';html+=''+nodeName+'';if(i>0){html+=" » "}}pathElm.innerHTML=''+tinyMCE.getLang('lang_theme_path')+": "+html+' '}tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyright','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClass(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClass(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClass(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_numlist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sub','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sup','mceButtonNormal');tinyMCE.switchClass(editor_id+'_anchor','mceButtonNormal');tinyMCE.switchClass(editor_id+'_link','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_unlink','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_outdent','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_image','mceButtonNormal');tinyMCE.switchClass(editor_id+'_hr','mceButtonNormal');if(node.nodeName=="A"&&tinyMCE.getAttrib(node,"class").indexOf('mceItemAnchor')!=-1)tinyMCE.switchClass(editor_id+'_anchor','mceButtonSelected');var anchorLink=tinyMCE.getParentElement(node,"a","href");if(anchorLink||any_selection){tinyMCE.switchClass(editor_id+'_link',anchorLink?'mceButtonSelected':'mceButtonNormal');tinyMCE.switchClass(editor_id+'_unlink',anchorLink?'mceButtonSelected':'mceButtonNormal')}tinyMCE.switchClass(editor_id+'_visualaid',visual_aid?'mceButtonSelected':'mceButtonNormal');if(undo_levels!=-1){tinyMCE.switchClass(editor_id+'_undo','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_redo','mceButtonDisabled')}if(tinyMCE.getParentElement(node,"li,blockquote"))tinyMCE.switchClass(editor_id+'_outdent','mceButtonNormal');if(undo_index!=-1&&(undo_index0))tinyMCE.switchClass(editor_id+'_redo','mceButtonNormal');if(undo_index!=-1&&(undo_index>0&&undo_levels>0))tinyMCE.switchClass(editor_id+'_undo','mceButtonNormal');var selectElm=document.getElementById(editor_id+"_styleSelect");if(selectElm){TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);classNode=node;breakOut=false;var index=0;do{if(classNode&&classNode.className){for(var i=0;i");else selectByValue(selectElm,"")}var selectElm=document.getElementById(editor_id+"_fontNameSelect");if(selectElm){if(!tinyMCE.isSafari&&!(tinyMCE.isMSIE&&!tinyMCE.isOpera)){var face=inst.queryCommandValue('FontName');face=face==null||face==""?"":face;selectByValue(selectElm,face,face!="")}else{var elm=tinyMCE.getParentElement(node,"font","face");if(elm){var family=tinyMCE.getAttrib(elm,"face");if(family=='')family=''+elm.style.fontFamily;if(!selectByValue(selectElm,family,family!=""))selectByValue(selectElm,"")}else selectByValue(selectElm,"")}}var selectElm=document.getElementById(editor_id+"_fontSizeSelect");if(selectElm){if(!tinyMCE.isSafari&&!tinyMCE.isOpera){var size=inst.queryCommandValue('FontSize');selectByValue(selectElm,size==null||size==""?"0":size)}else{var elm=tinyMCE.getParentElement(node,"font","size");if(elm){var size=tinyMCE.getAttrib(elm,"size");if(size==''){var sizes=new Array('','8px','10px','12px','14px','18px','24px','36px');size=''+elm.style.fontSize;for(var i=0;i0)selectElm.setAttribute('cssImported','true')}},_setCookie:function(name,value,expires,path,domain,secure){var curCookie=name+"="+escape(value)+((expires)?"; expires="+expires.toGMTString():"")+((path)?"; path="+escape(path):"")+((domain)?"; domain="+domain:"")+((secure)?"; secure":"");document.cookie=curCookie},_getCookie:function(name){var dc=document.cookie;var prefix=name+"=";var begin=dc.indexOf("; "+prefix);if(begin==-1){begin=dc.indexOf(prefix);if(begin!=0)return null}else begin+=2;var end=document.cookie.indexOf(";",begin);if(end==-1)end=dc.length;return unescape(dc.substring(begin+prefix.length,end))},_resizeTo:function(inst,w,h,set_w){var editorContainer=document.getElementById(inst.editorId+'_parent');var tableElm=editorContainer.firstChild;var iframe=inst.iframeElement;if(w==null||w=="null"){set_w=false;w=0}if(h==null||h=="null")return;w=parseInt(w);h=parseInt(h);if(tinyMCE.isGecko){w+=2;h+=2}var dx=w-tableElm.clientWidth;var dy=h-tableElm.clientHeight;w=w<1?30:w;h=h<1?30:h;if(set_w)tableElm.style.width=w+"px";tableElm.style.height=h+"px";iw=iframe.clientWidth+dx;ih=iframe.clientHeight+dy;iw=iw<1?30:iw;ih=ih<1?30:ih;if(tinyMCE.isGecko){iw-=2;ih-=2}if(set_w)iframe.style.width=iw+"px";iframe.style.height=ih+"px";if(set_w){var tableBodyElm=tableElm.firstChild;var minIframeWidth=tableBodyElm.scrollWidth;if(inst.iframeElement.clientWidth';for(i=0;i';if((i+1)%8==0)h+=''}h+='';if(tinyMCE.getParam("theme_advanced_more_colors",true))h+=''+tinyMCE.getLang('lang_more_colors')+'';return h},_pickColor:function(id,cm){var inputColor,inst=tinyMCE.selectedInstance;if(cm=='forecolor'&&inst)inputColor=inst.foreColor;if((cm=='backcolor'||cm=='HiliteColor')&&inst)inputColor=inst.backColor;tinyMCE.execCommand('mceColorPicker',true,{color:inputColor,callback:function(c){tinyMCE.execInstanceCommand(id,cm,false,c)}})},_insertImage:function(src,alt,border,hspace,vspace,width,height,align,title,onmouseover,onmouseout){tinyMCE.execCommand("mceInsertContent",false,tinyMCE.createTagHTML('img',{src:tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'],src),mce_src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout}))},_insertLink:function(href,target,title,onclick,style_class){tinyMCE.execCommand('mceBeginUndoLevel');if(tinyMCE.selectedInstance&&tinyMCE.selectedElement&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){var doc=tinyMCE.selectedInstance.getDoc();var linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");var newLink=false;if(!linkElement){linkElement=doc.createElement("a");newLink=true}var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(linkElement,'href',thref);tinyMCE.setAttrib(linkElement,'mce_href',mhref);tinyMCE.setAttrib(linkElement,'target',target);tinyMCE.setAttrib(linkElement,'title',title);tinyMCE.setAttrib(linkElement,'onclick',onclick);tinyMCE.setAttrib(linkElement,'class',style_class);if(newLink){linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));tinyMCE.selectedElement.parentNode.replaceChild(linkElement,tinyMCE.selectedElement)}return}if(!tinyMCE.linkElement&&tinyMCE.selectedInstance){if(tinyMCE.isSafari){tinyMCE.execCommand("mceInsertContent",false,''+tinyMCE.selectedInstance.selection.getSelectedHTML()+'')}else tinyMCE.selectedInstance.contentDocument.execCommand("createlink",false,tinyMCE.uniqueURL);tinyMCE.linkElement=tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);var elementArray=tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);for(var i=0;i4?but[4]:false),(but.length>5?but[5]:null));if(but[0]==button_name)return tinyMCE.getButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null))}switch(button_name){case"formatselect":var html='';return html;case"styleselect":return'';case"fontselect":var fontHTML='';return fontHTML;case"fontsizeselect":return'';case"|":case"separator":return'';case"spacer":return'';case"rowseparator":return'
'}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case'mceHelp':tinyMCE.openWindow({file:'about.htm',width:480,height:380},{tinymce_version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion,tinymce_releasedate:tinyMCE.releaseDate,inline:"yes"});return true;case"mceLink":var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();var selectedText="";if(tinyMCE.isMSIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=inst.getSel().toString();if(!tinyMCE.linkElement){if((tinyMCE.selectedElement.nodeName.toLowerCase()!="img")&&(selectedText.length<=0))return true}var href="",target="",title="",onclick="",action="insert",style_class="";if(tinyMCE.selectedElement.nodeName.toLowerCase()=="a")tinyMCE.linkElement=tinyMCE.selectedElement;if(tinyMCE.linkElement!=null&&tinyMCE.getAttrib(tinyMCE.linkElement,'href')=="")tinyMCE.linkElement=null;if(tinyMCE.linkElement){href=tinyMCE.getAttrib(tinyMCE.linkElement,'href');target=tinyMCE.getAttrib(tinyMCE.linkElement,'target');title=tinyMCE.getAttrib(tinyMCE.linkElement,'title');onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');style_class=tinyMCE.getAttrib(tinyMCE.linkElement,'class');if(onclick=="")onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');onclick=tinyMCE.cleanupEventStr(onclick);href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);");mceRealHref=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_href');if(mceRealHref!=""){href=mceRealHref;if(tinyMCE.getParam('convert_urls'))href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);")}action="update"}var template=new Array();template['file']='link.htm';template['width']=310;template['height']=200;template['width']+=tinyMCE.getLang('lang_insert_link_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_link_delta_height',0);if(inst.settings['insertlink_callback']){var returnVal=eval(inst.settings['insertlink_callback']+"(href, target, title, onclick, action, style_class);");if(returnVal&&returnVal['href'])TinyMCE_AdvancedTheme._insertLink(returnVal['href'],returnVal['target'],returnVal['title'],returnVal['onclick'],returnVal['style_class'])}else{tinyMCE.openWindow(template,{href:href,target:target,title:title,onclick:onclick,action:action,className:style_class,inline:"yes"})}return true;case"mceImage":var src="",alt="",border="",hspace="",vspace="",width="",height="",align="";var title="",onmouseover="",onmouseout="",action="insert";var img=tinyMCE.imgElement;var inst=tinyMCE.getInstanceById(editor_id);if(tinyMCE.selectedElement!=null&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){img=tinyMCE.selectedElement;tinyMCE.imgElement=img}if(img){if(tinyMCE.getAttrib(img,'name').indexOf('mce_')==0)return true;src=tinyMCE.getAttrib(img,'src');alt=tinyMCE.getAttrib(img,'alt');if(alt=="")alt=tinyMCE.getAttrib(img,'title');if(tinyMCE.isGecko){var w=img.style.width;if(w!=null&&w!="")img.setAttribute("width",w);var h=img.style.height;if(h!=null&&h!="")img.setAttribute("height",h)}border=tinyMCE.getAttrib(img,'border');hspace=tinyMCE.getAttrib(img,'hspace');vspace=tinyMCE.getAttrib(img,'vspace');width=tinyMCE.getAttrib(img,'width');height=tinyMCE.getAttrib(img,'height');align=tinyMCE.getAttrib(img,'align');onmouseover=tinyMCE.getAttrib(img,'onmouseover');onmouseout=tinyMCE.getAttrib(img,'onmouseout');title=tinyMCE.getAttrib(img,'title');if(tinyMCE.isMSIE){width=img.attributes['width'].specified?width:"";height=img.attributes['height'].specified?height:""}src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);");mceRealSrc=tinyMCE.getAttrib(img,'mce_src');if(mceRealSrc!=""){src=mceRealSrc;if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);")}action="update"}var template=new Array();template['file']='image.htm?src={$src}';template['width']=355;template['height']=265+(tinyMCE.isMSIE?25:0);template['width']+=tinyMCE.getLang('lang_insert_image_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_image_delta_height',0);if(inst.settings['insertimage_callback']){var returnVal=eval(inst.settings['insertimage_callback']+"(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");if(returnVal&&returnVal['src'])TinyMCE_AdvancedTheme._insertImage(returnVal['src'],returnVal['alt'],returnVal['border'],returnVal['hspace'],returnVal['vspace'],returnVal['width'],returnVal['height'],returnVal['align'],returnVal['title'],returnVal['onmouseover'],returnVal['onmouseout'])}else tinyMCE.openWindow(template,{src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout,action:action,inline:"yes"});return true;case"forecolor":var fcp=new TinyMCE_Layer(editor_id+'_fcPreview',false),p,img,elm;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!fcp.exists()){fcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=fcp.getElement();elm._editor_id=editor_id;elm._command="forecolor";elm._switchId=editor_id+"_forecolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_forecolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));fcp.moveTo(p.absLeft,p.absTop);fcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).foreColor;fcp.show();return false;case"forecolorpicker":this._pickColor(editor_id,'forecolor');return true;case"forecolorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_fcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_text_colors','forecolor'));tinyMCE.switchClass(editor_id+'_forecolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_forecolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"HiliteColor":var bcp=new TinyMCE_Layer(editor_id+'_bcPreview',false),p,img;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!bcp.exists()){bcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=bcp.getElement();elm._editor_id=editor_id;elm._command="HiliteColor";elm._switchId=editor_id+"_backcolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_backcolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));bcp.moveTo(p.absLeft,p.absTop);bcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).backColor;bcp.show();return false;case"HiliteColorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_bcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_background_colors','HiliteColor'));tinyMCE.switchClass(editor_id+'_backcolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_backcolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"backcolorpicker":this._pickColor(editor_id,'HiliteColor');return true;case"mceColorPicker":if(user_interface){var template=[];if(!value['callback']&&!value['color'])value['color']=value['document'].getElementById(value['element_id']).value;template['file']='color_picker.htm';template['width']=380;template['height']=250;template['close_previous']="no";template['width']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height',0);if(typeof(value['store_selection'])=="undefined")value['store_selection']=true;tinyMCE.lastColorPickerValue=value;tinyMCE.openWindow(template,{editor_id:editor_id,mce_store_selection:value['store_selection'],inline:"yes",command:"mceColorPicker",input_color:value['color']})}else{var savedVal=tinyMCE.lastColorPickerValue,elm;if(savedVal['callback']){savedVal['callback'](value);return true}elm=savedVal['document'].getElementById(savedVal['element_id']);elm.value=value;if(elm.onchange!=null&&elm.onchange!='')eval('elm.onchange();')}return true;case"mceCodeEditor":var template=new Array();template['file']='source_editor.htm';template['width']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_width",720));template['height']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_height",580));tinyMCE.openWindow(template,{editor_id:editor_id,resizable:"yes",scrollbars:"no",inline:"yes"});return true;case"mceCharMap":var template=new Array();template['file']='charmap.htm';template['width']=550+(tinyMCE.isOpera?40:0);template['height']=250;template['width']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceInsertAnchor":var template=new Array();template['file']='anchor.htm';template['width']=320;template['height']=90+(tinyMCE.isNS7?30:0);template['width']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceNewDocument":if(confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_newdocument'))))tinyMCE.execInstanceCommand(editor_id,'mceSetContent',false,' ');return true}return false},getEditorTemplate:function(settings,editorId){function removeFromArray(in_array,remove_array){var outArray=new Array(),skip;for(var i=0;i 

';var layoutManager=tinyMCE.getParam("theme_advanced_layout_manager","SimpleLayout");var styleSelectHTML='';if(settings['theme_advanced_styles']){var stylesAr=settings['theme_advanced_styles'].split(';');for(var i=0;i'+key+''}TinyMCE_AdvancedTheme._autoImportCSSClasses=false}switch(layoutManager){case"SimpleLayout":var toolbarHTML="";var toolbarLocation=tinyMCE.getParam("theme_advanced_toolbar_location","bottom");var toolbarAlign=tinyMCE.getParam("theme_advanced_toolbar_align","center");var pathLocation=tinyMCE.getParam("theme_advanced_path_location","none");var statusbarLocation=tinyMCE.getParam("theme_advanced_statusbar_location",pathLocation);var defVals={theme_advanced_buttons1:"bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,separator,sub,sup,separator,charmap"};toolbarHTML+='0){toolbarHTML+="
";deltaHeight-=23}}toolbarHTML+='
';template['html']='';if(toolbarLocation=="top")template['html']+='';if(statusbarLocation=="top"){template['html']+='';deltaHeight-=23}template['html']+='';if(toolbarLocation=="bottom")template['html']+='';if(toolbarLocation=="external"){var bod=document.body;var elm=document.createElement("div");toolbarHTML=tinyMCE.replaceVar(toolbarHTML,'style_select_options',styleSelectHTML);toolbarHTML=tinyMCE.applyTemplate(toolbarHTML,{editor_id:editorId});elm.className="mceToolbarExternal";elm.id=editorId+"_toolbar";elm.innerHTML='
'+toolbarHTML+'
'+statusbarHTML+'
'+toolbarHTML+'
'+toolbarHTML+'
';bod.appendChild(elm);deltaHeight=0;tinyMCE.getInstanceById(editorId).toolbarElement=elm;}else{tinyMCE.getInstanceById(editorId).toolbarElement=null}if(statusbarLocation=="bottom"){template['html']+=''+statusbarHTML+'';deltaHeight-=23}template['html']+='';break;case"RowLayout":template['html']='';var containers=tinyMCE.getParam("theme_advanced_containers","",true,",");var defaultContainerCSS=tinyMCE.getParam("theme_advanced_containers_default_class","container");var defaultContainerAlign=tinyMCE.getParam("theme_advanced_containers_default_align","center");for(var i=0;i';else if(containers[i]=="mceElementpath"||containers[i]=="mceStatusbar"){var pathClass="mceStatusbar";if(i==containers.length-1){pathClass="mceStatusbarBottom"}else if(i==0){pathClass="mceStatusbar"}else{deltaHeight-=2}template['html']+='';deltaHeight-=22}else{var curContainer=tinyMCE.getParam("theme_advanced_container_"+containers[i],"",true,',');var curContainerHTML="";var curAlign=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align",defaultContainerAlign);var curCSS=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class",defaultContainerCSS);curContainer=removeFromArray(curContainer,tinyMCE.getParam("theme_advanced_disable","",true,','));for(var j=0;j0){curContainerHTML+="
";deltaHeight-=23}template['html']+='
'}}template['html']+='
'+statusbarHTML+'
'+curContainerHTML+'
';break;case"CustomLayout":var customLayout=tinyMCE.getParam("theme_advanced_custom_layout","");if(customLayout!=""&&eval("typeof("+customLayout+")")!="undefined"){template=eval(customLayout+"(template);")}break}if(resizing)template['html']+='';template['html']=tinyMCE.replaceVar(template['html'],'style_select_options',styleSelectHTML);if(!template['delta_width'])template['delta_width']=0;if(!template['delta_height'])template['delta_height']=deltaHeight;return template},initInstance:function(inst){if(tinyMCE.getParam("theme_advanced_resizing",false)){if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var w=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_width");var h=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_height");TinyMCE_AdvancedTheme._resizeTo(inst,w,h,tinyMCE.getParam("theme_advanced_resize_horizontal",true))}}inst.addShortcut('ctrl','k','lang_link_desc','mceLink')},removeInstance:function(inst){new TinyMCE_Layer(inst.editorId+'_fcMenu').remove();new TinyMCE_Layer(inst.editorId+'_bcMenu').remove()},hideInstance:function(inst){TinyMCE_AdvancedTheme._hideMenus(inst.editorId)},_handleMenuEvent:function(e){var te=tinyMCE.isMSIE?window.event.srcElement:e.target;tinyMCE._menuButtonEvent(e.type=="mouseover"?"over":"out",document.getElementById(te._switchId));if(e.type=="click")tinyMCE.execInstanceCommand(te._editor_id,te._command)},_hideMenus:function(id){var fcml=new TinyMCE_Layer(id+'_fcMenu'),bcml=new TinyMCE_Layer(id+'_bcMenu');if(fcml.exists()&&fcml.isVisible()){tinyMCE.switchClass(id+'_forecolor','mceMenuButton');fcml.hide()}if(bcml.exists()&&bcml.isVisible()){tinyMCE.switchClass(id+'_backcolor','mceMenuButton');bcml.hide()}},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection,setup_content){var alignNode,breakOut,classNode;function selectByValue(select_elm,value,first_index){first_index=typeof(first_index)=="undefined"?false:true;if(select_elm){for(var i=0;i=0;i--){var nodeName=path[i].nodeName.toLowerCase();var nodeData="";if(nodeName.indexOf("html:")==0)nodeName=nodeName.substring(5);if(nodeName=="b"){nodeName="strong"}if(nodeName=="i"){nodeName="em"}if(nodeName=="span"){var cn=tinyMCE.getAttrib(path[i],"class");if(cn!=""&&cn.indexOf('mceItem')==-1)nodeData+="class: "+cn+" ";var st=tinyMCE.getAttrib(path[i],"style");if(st!=""){st=tinyMCE.serializeStyle(tinyMCE.parseStyle(st));nodeData+="style: "+tinyMCE.xmlEncode(st)+" "}}if(nodeName=="font"){if(tinyMCE.getParam("convert_fonts_to_spans"))nodeName="span";var face=tinyMCE.getAttrib(path[i],"face");if(face!="")nodeData+="font: "+tinyMCE.xmlEncode(face)+" ";var size=tinyMCE.getAttrib(path[i],"size");if(size!="")nodeData+="size: "+tinyMCE.xmlEncode(size)+" ";var color=tinyMCE.getAttrib(path[i],"color");if(color!="")nodeData+="color: "+tinyMCE.xmlEncode(color)+" "}if(tinyMCE.getAttrib(path[i],'id')!=""){nodeData+="id: "+path[i].getAttribute('id')+" "}var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1)nodeData+="class: "+className+" ";if(tinyMCE.getAttrib(path[i],'src')!=""){var src=tinyMCE.getAttrib(path[i],"mce_src");if(src=="")src=tinyMCE.getAttrib(path[i],"src");nodeData+="src: "+tinyMCE.xmlEncode(src)+" "}if(path[i].nodeName=='A'&&tinyMCE.getAttrib(path[i],'href')!=""){var href=tinyMCE.getAttrib(path[i],"mce_href");if(href=="")href=tinyMCE.getAttrib(path[i],"href");nodeData+="href: "+tinyMCE.xmlEncode(href)+" "}className=tinyMCE.getAttrib(path[i],"class");if((nodeName=="img"||nodeName=="span")&&className.indexOf('mceItem')!=-1){nodeName=className.replace(/mceItem([a-z]+)/gi,'$1').toLowerCase();nodeData=path[i].getAttribute('title')}if(nodeName=="a"&&(anchor=tinyMCE.getAttrib(path[i],"name"))!=""){nodeName="a";nodeName+="#"+tinyMCE.xmlEncode(anchor);nodeData=""}if(tinyMCE.getAttrib(path[i],'name').indexOf("mce_")!=0){var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1){nodeName+="."+className}}var cmd='tinyMCE.execInstanceCommand(\''+editor_id+'\',\'mceSelectNodeDepth\',false,\''+i+'\');';html+=''+nodeName+'';if(i>0){html+=" » "}}pathElm.innerHTML=''+tinyMCE.getLang('lang_theme_path')+": "+html+' '}tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyright','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClass(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClass(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClass(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_numlist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sub','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sup','mceButtonNormal');tinyMCE.switchClass(editor_id+'_anchor','mceButtonNormal');tinyMCE.switchClass(editor_id+'_link','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_unlink','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_outdent','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_image','mceButtonNormal');tinyMCE.switchClass(editor_id+'_hr','mceButtonNormal');if(node.nodeName=="A"&&tinyMCE.getAttrib(node,"class").indexOf('mceItemAnchor')!=-1)tinyMCE.switchClass(editor_id+'_anchor','mceButtonSelected');var anchorLink=tinyMCE.getParentElement(node,"a","href");if(anchorLink||any_selection){tinyMCE.switchClass(editor_id+'_link',anchorLink?'mceButtonSelected':'mceButtonNormal');tinyMCE.switchClass(editor_id+'_unlink',anchorLink?'mceButtonSelected':'mceButtonNormal')}tinyMCE.switchClass(editor_id+'_visualaid',visual_aid?'mceButtonSelected':'mceButtonNormal');if(undo_levels!=-1){tinyMCE.switchClass(editor_id+'_undo','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_redo','mceButtonDisabled')}if(tinyMCE.getParentElement(node,"li,blockquote"))tinyMCE.switchClass(editor_id+'_outdent','mceButtonNormal');if(undo_index!=-1&&(undo_index0))tinyMCE.switchClass(editor_id+'_redo','mceButtonNormal');if(undo_index!=-1&&(undo_index>0&&undo_levels>0))tinyMCE.switchClass(editor_id+'_undo','mceButtonNormal');var selectElm=document.getElementById(editor_id+"_styleSelect");if(selectElm){TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);classNode=node;breakOut=false;var index=0;do{if(classNode&&classNode.className){for(var i=0;i");else selectByValue(selectElm,"")}var selectElm=document.getElementById(editor_id+"_fontNameSelect");if(selectElm){if(!tinyMCE.isSafari&&!(tinyMCE.isMSIE&&!tinyMCE.isOpera)){var face=inst.queryCommandValue('FontName');face=face==null||face==""?"":face;selectByValue(selectElm,face,face!="")}else{var elm=tinyMCE.getParentElement(node,"font","face");if(elm){var family=tinyMCE.getAttrib(elm,"face");if(family=='')family=''+elm.style.fontFamily;if(!selectByValue(selectElm,family,family!=""))selectByValue(selectElm,"")}else selectByValue(selectElm,"")}}var selectElm=document.getElementById(editor_id+"_fontSizeSelect");if(selectElm){if(!tinyMCE.isSafari&&!tinyMCE.isOpera){var size=inst.queryCommandValue('FontSize');selectByValue(selectElm,size==null||size==""?"0":size)}else{var elm=tinyMCE.getParentElement(node,"font","size");if(elm){var size=tinyMCE.getAttrib(elm,"size");if(size==''){var sizes=new Array('','8px','10px','12px','14px','18px','24px','36px');size=''+elm.style.fontSize;for(var i=0;i0)selectElm.setAttribute('cssImported','true')}},_setCookie:function(name,value,expires,path,domain,secure){var curCookie=name+"="+escape(value)+((expires)?"; expires="+expires.toGMTString():"")+((path)?"; path="+escape(path):"")+((domain)?"; domain="+domain:"")+((secure)?"; secure":"");document.cookie=curCookie},_getCookie:function(name){var dc=document.cookie;var prefix=name+"=";var begin=dc.indexOf("; "+prefix);if(begin==-1){begin=dc.indexOf(prefix);if(begin!=0)return null}else begin+=2;var end=document.cookie.indexOf(";",begin);if(end==-1)end=dc.length;return unescape(dc.substring(begin+prefix.length,end))},_resizeTo:function(inst,w,h,set_w){var editorContainer=document.getElementById(inst.editorId+'_parent');var tableElm=editorContainer.firstChild;var iframe=inst.iframeElement;if(w==null||w=="null"){set_w=false;w=0}if(h==null||h=="null")return;w=parseInt(w);h=parseInt(h);if(tinyMCE.isGecko){w+=2;h+=2}var dx=w-tableElm.clientWidth;var dy=h-tableElm.clientHeight;w=w<1?30:w;h=h<1?30:h;if(set_w)tableElm.style.width=w+"px";tableElm.style.height=h+"px";iw=iframe.clientWidth+dx;ih=iframe.clientHeight+dy;iw=iw<1?30:iw;ih=ih<1?30:ih;if(tinyMCE.isGecko){iw-=2;ih-=2}if(set_w)iframe.style.width=iw+"px";iframe.style.height=ih+"px";if(set_w){var tableBodyElm=tableElm.firstChild;var minIframeWidth=tableBodyElm.scrollWidth;if(inst.iframeElement.clientWidth';for(i=0;i';if((i+1)%8==0)h+=''}h+='';if(tinyMCE.getParam("theme_advanced_more_colors",true))h+=''+tinyMCE.getLang('lang_more_colors')+'';return h},_pickColor:function(id,cm){var inputColor,inst=tinyMCE.selectedInstance;if(cm=='forecolor'&&inst)inputColor=inst.foreColor;if((cm=='backcolor'||cm=='HiliteColor')&&inst)inputColor=inst.backColor;tinyMCE.execCommand('mceColorPicker',true,{color:inputColor,callback:function(c){tinyMCE.execInstanceCommand(id,cm,false,c)}})},_insertImage:function(src,alt,border,hspace,vspace,width,height,align,title,onmouseover,onmouseout){tinyMCE.execCommand("mceInsertContent",false,tinyMCE.createTagHTML('img',{src:tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'],src),mce_src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout}))},_insertLink:function(href,target,title,onclick,style_class){tinyMCE.execCommand('mceBeginUndoLevel');if(tinyMCE.selectedInstance&&tinyMCE.selectedElement&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){var doc=tinyMCE.selectedInstance.getDoc();var linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");var newLink=false;if(!linkElement){linkElement=doc.createElement("a");newLink=true}var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(linkElement,'href',thref);tinyMCE.setAttrib(linkElement,'mce_href',mhref);tinyMCE.setAttrib(linkElement,'target',target);tinyMCE.setAttrib(linkElement,'title',title);tinyMCE.setAttrib(linkElement,'onclick',onclick);tinyMCE.setAttrib(linkElement,'class',style_class);if(newLink){linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));tinyMCE.selectedElement.parentNode.replaceChild(linkElement,tinyMCE.selectedElement)}return}if(!tinyMCE.linkElement&&tinyMCE.selectedInstance){if(tinyMCE.isSafari){tinyMCE.execCommand("mceInsertContent",false,''+tinyMCE.selectedInstance.selection.getSelectedHTML()+'')}else tinyMCE.selectedInstance.contentDocument.execCommand("createlink",false,tinyMCE.uniqueURL);tinyMCE.linkElement=tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);var elementArray=tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);for(var i=0;i 4 ? but[4] : false), (but.length > 5 ? but[5] : null)); - - if (but[0] == button_name) - return tinyMCE.getButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null)); - } - - // Custom controlls other than buttons - switch (button_name) { - case "formatselect": - var html = ''; - - return html; - - case "styleselect": - return ''; - - case "fontselect": - var fontHTML = ''; - return fontHTML; - - case "fontsizeselect": - return ''; - - case "|": - case "separator": - return ''; - - case "spacer": - return ''; - - case "rowseparator": - return '
'; - } - - return ""; - }, - - /** - * Theme specific execcommand handling. - */ - execCommand : function(editor_id, element, command, user_interface, value) { - switch (command) { - case 'mceHelp': - tinyMCE.openWindow({ - file : 'about.htm', - width : 480, - height : 380 - }, { - tinymce_version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion, - tinymce_releasedate : tinyMCE.releaseDate, - inline : "yes" - }); - return true; - - case "mceLink": - var inst = tinyMCE.getInstanceById(editor_id); - var doc = inst.getDoc(); - var selectedText = ""; - - if (tinyMCE.isMSIE) { - var rng = doc.selection.createRange(); - selectedText = rng.text; - } else - selectedText = inst.getSel().toString(); - - if (!tinyMCE.linkElement) { - if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0)) - return true; - } - - var href = "", target = "", title = "", onclick = "", action = "insert", style_class = ""; - - if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a") - tinyMCE.linkElement = tinyMCE.selectedElement; - - // Is anchor not a link - if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "") - tinyMCE.linkElement = null; - - if (tinyMCE.linkElement) { - href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href'); - target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target'); - title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title'); - onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); - style_class = tinyMCE.getAttrib(tinyMCE.linkElement, 'class'); - - // Try old onclick to if copy/pasted content - if (onclick == "") - onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); - - onclick = tinyMCE.cleanupEventStr(onclick); - - href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); - - // Use mce_href if defined - mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_href'); - if (mceRealHref != "") { - href = mceRealHref; - - if (tinyMCE.getParam('convert_urls')) - href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); - } - - action = "update"; - } - - var template = new Array(); - - template['file'] = 'link.htm'; - template['width'] = 310; - template['height'] = 200; - - // Language specific width and height addons - template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0); - - if (inst.settings['insertlink_callback']) { - var returnVal = eval(inst.settings['insertlink_callback'] + "(href, target, title, onclick, action, style_class);"); - if (returnVal && returnVal['href']) - TinyMCE_AdvancedTheme._insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick'], returnVal['style_class']); - } else { - tinyMCE.openWindow(template, {href : href, target : target, title : title, onclick : onclick, action : action, className : style_class, inline : "yes"}); - } - - return true; - - case "mceImage": - var src = "", alt = "", border = "", hspace = "", vspace = "", width = "", height = "", align = ""; - var title = "", onmouseover = "", onmouseout = "", action = "insert"; - var img = tinyMCE.imgElement; - var inst = tinyMCE.getInstanceById(editor_id); - - if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { - img = tinyMCE.selectedElement; - tinyMCE.imgElement = img; - } - - if (img) { - // Is it a internal MCE visual aid image, then skip this one. - if (tinyMCE.getAttrib(img, 'name').indexOf('mce_') == 0) - return true; - - src = tinyMCE.getAttrib(img, 'src'); - alt = tinyMCE.getAttrib(img, 'alt'); - - // Try polling out the title - if (alt == "") - alt = tinyMCE.getAttrib(img, 'title'); - - // Fix width/height attributes if the styles is specified - if (tinyMCE.isGecko) { - var w = img.style.width; - if (w != null && w != "") - img.setAttribute("width", w); - - var h = img.style.height; - if (h != null && h != "") - img.setAttribute("height", h); - } - - border = tinyMCE.getAttrib(img, 'border'); - hspace = tinyMCE.getAttrib(img, 'hspace'); - vspace = tinyMCE.getAttrib(img, 'vspace'); - width = tinyMCE.getAttrib(img, 'width'); - height = tinyMCE.getAttrib(img, 'height'); - align = tinyMCE.getAttrib(img, 'align'); - onmouseover = tinyMCE.getAttrib(img, 'onmouseover'); - onmouseout = tinyMCE.getAttrib(img, 'onmouseout'); - title = tinyMCE.getAttrib(img, 'title'); - - // Is realy specified? - if (tinyMCE.isMSIE) { - width = img.attributes['width'].specified ? width : ""; - height = img.attributes['height'].specified ? height : ""; - } - - //onmouseover = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover)); - //onmouseout = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout)); - - src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); - - // Use mce_src if defined - mceRealSrc = tinyMCE.getAttrib(img, 'mce_src'); - if (mceRealSrc != "") { - src = mceRealSrc; - - if (tinyMCE.getParam('convert_urls')) - src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); - } - - //if (onmouseover != "") - // onmouseover = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, img, true);"); - - //if (onmouseout != "") - // onmouseout = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, img, true);"); - - action = "update"; - } - - var template = new Array(); - - template['file'] = 'image.htm?src={$src}'; - template['width'] = 355; - template['height'] = 265 + (tinyMCE.isMSIE ? 25 : 0); - - // Language specific width and height addons - template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0); - - if (inst.settings['insertimage_callback']) { - var returnVal = eval(inst.settings['insertimage_callback'] + "(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);"); - if (returnVal && returnVal['src']) - TinyMCE_AdvancedTheme._insertImage(returnVal['src'], returnVal['alt'], returnVal['border'], returnVal['hspace'], returnVal['vspace'], returnVal['width'], returnVal['height'], returnVal['align'], returnVal['title'], returnVal['onmouseover'], returnVal['onmouseout']); - } else - tinyMCE.openWindow(template, {src : src, alt : alt, border : border, hspace : hspace, vspace : vspace, width : width, height : height, align : align, title : title, onmouseover : onmouseover, onmouseout : onmouseout, action : action, inline : "yes"}); - - return true; - - case "forecolor": - var fcp = new TinyMCE_Layer(editor_id + '_fcPreview', false), p, img, elm; - - TinyMCE_AdvancedTheme._hideMenus(editor_id); - - if (!fcp.exists()) { - fcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar')); - elm = fcp.getElement(); - elm._editor_id = editor_id; - elm._command = "forecolor"; - elm._switchId = editor_id + "_forecolor"; - tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent); - tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent); - tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent); - } - - img = tinyMCE.selectNodes(document.getElementById(editor_id + "_forecolor"), function(n) {return n.nodeName == "IMG";})[0]; - p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar')); - - fcp.moveTo(p.absLeft, p.absTop); - fcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).foreColor; - fcp.show(); - - return false; - - case "forecolorpicker": - this._pickColor(editor_id, 'forecolor'); - return true; - - case "forecolorMenu": - TinyMCE_AdvancedTheme._hideMenus(editor_id); - - // Create color layer - var ml = new TinyMCE_Layer(editor_id + '_fcMenu'); - - if (!ml.exists()) - ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_text_colors', 'forecolor')); - - tinyMCE.switchClass(editor_id + '_forecolor', 'mceMenuButtonFocus'); - ml.moveRelativeTo(document.getElementById(editor_id + "_forecolor"), 'bl'); - - ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1); - - if (tinyMCE.isOpera) - ml.moveBy(0, -2); - - ml.show(); - return true; - - case "HiliteColor": - var bcp = new TinyMCE_Layer(editor_id + '_bcPreview', false), p, img; - - TinyMCE_AdvancedTheme._hideMenus(editor_id); - - if (!bcp.exists()) { - bcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar')); - elm = bcp.getElement(); - elm._editor_id = editor_id; - elm._command = "HiliteColor"; - elm._switchId = editor_id + "_backcolor"; - tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent); - tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent); - tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent); - } - - img = tinyMCE.selectNodes(document.getElementById(editor_id + "_backcolor"), function(n) {return n.nodeName == "IMG";})[0]; - p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar')); - - bcp.moveTo(p.absLeft, p.absTop); - bcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).backColor; - bcp.show(); - - return false; - - case "HiliteColorMenu": - TinyMCE_AdvancedTheme._hideMenus(editor_id); - - // Create color layer - var ml = new TinyMCE_Layer(editor_id + '_bcMenu'); - - if (!ml.exists()) - ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_background_colors', 'HiliteColor')); - - tinyMCE.switchClass(editor_id + '_backcolor', 'mceMenuButtonFocus'); - ml.moveRelativeTo(document.getElementById(editor_id + "_backcolor"), 'bl'); - - ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1); - - if (tinyMCE.isOpera) - ml.moveBy(0, -2); - - ml.show(); - return true; - - case "backcolorpicker": - this._pickColor(editor_id, 'HiliteColor'); - return true; - - case "mceColorPicker": - if (user_interface) { - var template = []; - - if (!value['callback'] && !value['color']) - value['color'] = value['document'].getElementById(value['element_id']).value; - - template['file'] = 'color_picker.htm'; - template['width'] = 380; - template['height'] = 250; - template['close_previous'] = "no"; - - template['width'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height', 0); - - if (typeof(value['store_selection']) == "undefined") - value['store_selection'] = true; - - tinyMCE.lastColorPickerValue = value; - tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : value['color']}); - } else { - var savedVal = tinyMCE.lastColorPickerValue, elm; - - if (savedVal['callback']) { - savedVal['callback'](value); - return true; - } - - elm = savedVal['document'].getElementById(savedVal['element_id']); - elm.value = value; - - if (elm.onchange != null && elm.onchange != '') - eval('elm.onchange();'); - } - return true; - - case "mceCodeEditor": - var template = new Array(); - - template['file'] = 'source_editor.htm'; - template['width'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_width", 720)); - template['height'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_height", 580)); - - tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no", inline : "yes"}); - return true; - - case "mceCharMap": - var template = new Array(); - - template['file'] = 'charmap.htm'; - template['width'] = 550 + (tinyMCE.isOpera ? 40 : 0); - template['height'] = 250; - - template['width'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_height', 0); - - tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); - return true; - - case "mceInsertAnchor": - var template = new Array(); - - template['file'] = 'anchor.htm'; - template['width'] = 320; - template['height'] = 90 + (tinyMCE.isNS7 ? 30 : 0); - - template['width'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_height', 0); - - tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); - return true; - - case "mceNewDocument": - if (confirm(tinyMCE.getLang('lang_newdocument'))) - tinyMCE.execInstanceCommand(editor_id, 'mceSetContent', false, ' '); - - return true; - } - - return false; - }, - - /** - * Editor instance template function. - */ - getEditorTemplate : function(settings, editorId) { - function removeFromArray(in_array, remove_array) { - var outArray = new Array(), skip; - - for (var i=0; i 

'; - var layoutManager = tinyMCE.getParam("theme_advanced_layout_manager", "SimpleLayout"); - - // Setup style select options -- MOVED UP FOR EXTERNAL TOOLBAR COMPATABILITY! - var styleSelectHTML = ''; - if (settings['theme_advanced_styles']) { - var stylesAr = settings['theme_advanced_styles'].split(';'); - - for (var i=0; i' + key + ''; - } - - TinyMCE_AdvancedTheme._autoImportCSSClasses = false; - } - - switch(layoutManager) { - case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)... - var toolbarHTML = ""; - var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom"); - var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center"); - var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); // Compatiblity - var statusbarLocation = tinyMCE.getParam("theme_advanced_statusbar_location", pathLocation); - var defVals = { - theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect", - theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code", - theme_advanced_buttons3 : "hr,removeformat,visualaid,separator,sub,sup,separator,charmap" - }; - - // Add accessibility control - toolbarHTML += ' 0) { - toolbarHTML += "
"; - deltaHeight -= 23; - } - } - - // Add accessibility control - toolbarHTML += '
'; - - // Setup template html - template['html'] = ''; - - if (toolbarLocation == "top") - template['html'] += ''; - - if (statusbarLocation == "top") { - template['html'] += ''; - deltaHeight -= 23; - } - - template['html'] += ''; - - if (toolbarLocation == "bottom") - template['html'] += ''; - - // External toolbar changes - if (toolbarLocation == "external") { - var bod = document.body; - var elm = document.createElement ("div"); - - toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML); - toolbarHTML = tinyMCE.applyTemplate(toolbarHTML, {editor_id : editorId}); - - elm.className = "mceToolbarExternal"; - elm.id = editorId+"_toolbar"; - elm.innerHTML = '
' + toolbarHTML + '
' + statusbarHTML + '
' + toolbarHTML + '
'+toolbarHTML+'
'; - bod.appendChild (elm); - // bod.style.marginTop = elm.offsetHeight + "px"; - - deltaHeight = 0; - tinyMCE.getInstanceById(editorId).toolbarElement = elm; - - //template['html'] = '
'+toolbarHTML+'
' + template["html"]; - } else { - tinyMCE.getInstanceById(editorId).toolbarElement = null; - } - - if (statusbarLocation == "bottom") { - template['html'] += '' + statusbarHTML + ''; - deltaHeight -= 23; - } - - template['html'] += ''; - //"SimpleLayout" - break; - - case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom. - template['html'] = ''; - - var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ","); - var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container"); - var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center"); - - //Render Containers: - for (var i = 0; i < containers.length; i++) - { - if (containers[i] == "mceEditor") //Exceptions for mceEditor and ... - template['html'] += ''; - else if (containers[i] == "mceElementpath" || containers[i] == "mceStatusbar") // ... mceElementpath: - { - var pathClass = "mceStatusbar"; - - if (i == containers.length-1) - { - pathClass = "mceStatusbarBottom"; - } - else if (i == 0) - { - pathClass = "mceStatusbar"; - } - else - { - deltaHeight-=2; - } - - template['html'] += ''; - deltaHeight -= 22; - } else { // Render normal Container - var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ','); - var curContainerHTML = ""; - var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign); - var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS); - - curContainer = removeFromArray(curContainer, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); - - for (var j=0; j 0) { - curContainerHTML += "
"; - deltaHeight -= 23; - } - - template['html'] += '
'; - } - } - - template['html'] += '
' + statusbarHTML + '
' + curContainerHTML + '
'; - //RowLayout - break; - - case "CustomLayout" : //User defined layout callback... - var customLayout = tinyMCE.getParam("theme_advanced_custom_layout",""); - - if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") { - template = eval(customLayout + "(template);"); - } - break; - } - - if (resizing) - template['html'] += ''; - - template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML); - - // Set to default values - if (!template['delta_width']) - template['delta_width'] = 0; - - if (!template['delta_height']) - template['delta_height'] = deltaHeight; - - return template; - }, - - initInstance : function(inst) { - if (tinyMCE.getParam("theme_advanced_resizing", false)) { - if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { - var w = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_width"); - var h = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_height"); - - TinyMCE_AdvancedTheme._resizeTo(inst, w, h, tinyMCE.getParam("theme_advanced_resize_horizontal", true)); - } - } - - inst.addShortcut('ctrl', 'k', 'lang_link_desc', 'mceLink'); - }, - - removeInstance : function(inst) { - new TinyMCE_Layer(inst.editorId + '_fcMenu').remove(); - new TinyMCE_Layer(inst.editorId + '_bcMenu').remove(); - }, - - hideInstance : function(inst) { - TinyMCE_AdvancedTheme._hideMenus(inst.editorId); - }, - - _handleMenuEvent : function(e) { - var te = tinyMCE.isMSIE ? window.event.srcElement : e.target; - tinyMCE._menuButtonEvent(e.type == "mouseover" ? "over" : "out", document.getElementById(te._switchId)); - - if (e.type == "click") - tinyMCE.execInstanceCommand(te._editor_id, te._command); - }, - - _hideMenus : function(id) { - var fcml = new TinyMCE_Layer(id + '_fcMenu'), bcml = new TinyMCE_Layer(id + '_bcMenu'); - - if (fcml.exists() && fcml.isVisible()) { - tinyMCE.switchClass(id + '_forecolor', 'mceMenuButton'); - fcml.hide(); - } - - if (bcml.exists() && bcml.isVisible()) { - tinyMCE.switchClass(id + '_backcolor', 'mceMenuButton'); - bcml.hide(); - } - }, - - /** - * Node change handler. - */ - handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection, setup_content) { - var alignNode, breakOut, classNode; - - function selectByValue(select_elm, value, first_index) { - first_index = typeof(first_index) == "undefined" ? false : true; - - if (select_elm) { - for (var i=0; i=0; i--) { - var nodeName = path[i].nodeName.toLowerCase(); - var nodeData = ""; - - if (nodeName.indexOf("html:") == 0) - nodeName = nodeName.substring(5); - - if (nodeName == "b") { - nodeName = "strong"; - } - - if (nodeName == "i") { - nodeName = "em"; - } - - if (nodeName == "span") { - var cn = tinyMCE.getAttrib(path[i], "class"); - if (cn != "" && cn.indexOf('mceItem') == -1) - nodeData += "class: " + cn + " "; - - var st = tinyMCE.getAttrib(path[i], "style"); - if (st != "") { - st = tinyMCE.serializeStyle(tinyMCE.parseStyle(st)); - nodeData += "style: " + tinyMCE.xmlEncode(st) + " "; - } - } - - if (nodeName == "font") { - if (tinyMCE.getParam("convert_fonts_to_spans")) - nodeName = "span"; - - var face = tinyMCE.getAttrib(path[i], "face"); - if (face != "") - nodeData += "font: " + tinyMCE.xmlEncode(face) + " "; - - var size = tinyMCE.getAttrib(path[i], "size"); - if (size != "") - nodeData += "size: " + tinyMCE.xmlEncode(size) + " "; - - var color = tinyMCE.getAttrib(path[i], "color"); - if (color != "") - nodeData += "color: " + tinyMCE.xmlEncode(color) + " "; - } - - if (tinyMCE.getAttrib(path[i], 'id') != "") { - nodeData += "id: " + path[i].getAttribute('id') + " "; - } - - var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); - if (className != "" && className.indexOf('mceItem') == -1) - nodeData += "class: " + className + " "; - - if (tinyMCE.getAttrib(path[i], 'src') != "") { - var src = tinyMCE.getAttrib(path[i], "mce_src"); - - if (src == "") - src = tinyMCE.getAttrib(path[i], "src"); - - nodeData += "src: " + tinyMCE.xmlEncode(src) + " "; - } - - if (path[i].nodeName == 'A' && tinyMCE.getAttrib(path[i], 'href') != "") { - var href = tinyMCE.getAttrib(path[i], "mce_href"); - - if (href == "") - href = tinyMCE.getAttrib(path[i], "href"); - - nodeData += "href: " + tinyMCE.xmlEncode(href) + " "; - } - - className = tinyMCE.getAttrib(path[i], "class"); - if ((nodeName == "img" || nodeName == "span") && className.indexOf('mceItem') != -1) { - nodeName = className.replace(/mceItem([a-z]+)/gi, '$1').toLowerCase(); - nodeData = path[i].getAttribute('title'); - } - - if (nodeName == "a" && (anchor = tinyMCE.getAttrib(path[i], "name")) != "") { - nodeName = "a"; - nodeName += "#" + tinyMCE.xmlEncode(anchor); - nodeData = ""; - } - - if (tinyMCE.getAttrib(path[i], 'name').indexOf("mce_") != 0) { - var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); - if (className != "" && className.indexOf('mceItem') == -1) { - nodeName += "." + className; - } - } - - var cmd = 'tinyMCE.execInstanceCommand(\'' + editor_id + '\',\'mceSelectNodeDepth\',false,\'' + i + '\');'; - html += '' + nodeName + ''; - - if (i > 0) { - html += " » "; - } - } - - pathElm.innerHTML = '' + tinyMCE.getLang('lang_theme_path') + ": " + html + ' '; - } - - // Reset old states - tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_bold', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_italic', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_underline', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_sub', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_sup', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_link', 'mceButtonDisabled'); - tinyMCE.switchClass(editor_id + '_unlink', 'mceButtonDisabled'); - tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonDisabled'); - tinyMCE.switchClass(editor_id + '_image', 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_hr', 'mceButtonNormal'); - - if (node.nodeName == "A" && tinyMCE.getAttrib(node, "class").indexOf('mceItemAnchor') != -1) - tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonSelected'); - - // Get link - var anchorLink = tinyMCE.getParentElement(node, "a", "href"); - - if (anchorLink || any_selection) { - tinyMCE.switchClass(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); - tinyMCE.switchClass(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); - } - - // Handle visual aid - tinyMCE.switchClass(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal'); - - if (undo_levels != -1) { - tinyMCE.switchClass(editor_id + '_undo', 'mceButtonDisabled'); - tinyMCE.switchClass(editor_id + '_redo', 'mceButtonDisabled'); - } - - // Within li, blockquote - if (tinyMCE.getParentElement(node, "li,blockquote")) - tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonNormal'); - - // Has redo levels - if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0)) - tinyMCE.switchClass(editor_id + '_redo', 'mceButtonNormal'); - - // Has undo levels - if (undo_index != -1 && (undo_index > 0 && undo_levels > 0)) - tinyMCE.switchClass(editor_id + '_undo', 'mceButtonNormal'); - - // Select class in select box - var selectElm = document.getElementById(editor_id + "_styleSelect"); - - if (selectElm) { - TinyMCE_AdvancedTheme._setupCSSClasses(editor_id); - - classNode = node; - breakOut = false; - var index = 0; - - do { - if (classNode && classNode.className) { - for (var i=0; i"); - else - selectByValue(selectElm, ""); - } - - // Select fontselect - var selectElm = document.getElementById(editor_id + "_fontNameSelect"); - if (selectElm) { - if (!tinyMCE.isSafari && !(tinyMCE.isMSIE && !tinyMCE.isOpera)) { - var face = inst.queryCommandValue('FontName'); - - face = face == null || face == "" ? "" : face; - - selectByValue(selectElm, face, face != ""); - } else { - var elm = tinyMCE.getParentElement(node, "font", "face"); - - if (elm) { - var family = tinyMCE.getAttrib(elm, "face"); - - if (family == '') - family = '' + elm.style.fontFamily; - - if (!selectByValue(selectElm, family, family != "")) - selectByValue(selectElm, ""); - } else - selectByValue(selectElm, ""); - } - } - - // Select fontsize - var selectElm = document.getElementById(editor_id + "_fontSizeSelect"); - if (selectElm) { - if (!tinyMCE.isSafari && !tinyMCE.isOpera) { - var size = inst.queryCommandValue('FontSize'); - selectByValue(selectElm, size == null || size == "" ? "0" : size); - } else { - var elm = tinyMCE.getParentElement(node, "font", "size"); - if (elm) { - var size = tinyMCE.getAttrib(elm, "size"); - - if (size == '') { - var sizes = new Array('', '8px', '10px', '12px', '14px', '18px', '24px', '36px'); - - size = '' + elm.style.fontSize; - - for (var i=0; i 0) - selectElm.setAttribute('cssImported', 'true'); - } - }, - - _setCookie : function(name, value, expires, path, domain, secure) { - var curCookie = name + "=" + escape(value) + - ((expires) ? "; expires=" + expires.toGMTString() : "") + - ((path) ? "; path=" + escape(path) : "") + - ((domain) ? "; domain=" + domain : "") + - ((secure) ? "; secure" : ""); - - document.cookie = curCookie; - }, - - _getCookie : function(name) { - var dc = document.cookie; - var prefix = name + "="; - var begin = dc.indexOf("; " + prefix); - - if (begin == -1) { - begin = dc.indexOf(prefix); - - if (begin != 0) - return null; - } else - begin += 2; - - var end = document.cookie.indexOf(";", begin); - - if (end == -1) - end = dc.length; - - return unescape(dc.substring(begin + prefix.length, end)); - }, - - _resizeTo : function(inst, w, h, set_w) { - var editorContainer = document.getElementById(inst.editorId + '_parent'); - var tableElm = editorContainer.firstChild; - var iframe = inst.iframeElement; - - if (w == null || w == "null") { - set_w = false; - w = 0; - } - - if (h == null || h == "null") - return; - - w = parseInt(w); - h = parseInt(h); - - if (tinyMCE.isGecko) { - w += 2; - h += 2; - } - - var dx = w - tableElm.clientWidth; - var dy = h - tableElm.clientHeight; - - w = w < 1 ? 30 : w; - h = h < 1 ? 30 : h; - - if (set_w) - tableElm.style.width = w + "px"; - - tableElm.style.height = h + "px"; - - iw = iframe.clientWidth + dx; - ih = iframe.clientHeight + dy; - - iw = iw < 1 ? 30 : iw; - ih = ih < 1 ? 30 : ih; - - if (tinyMCE.isGecko) { - iw -= 2; - ih -= 2; - } - - if (set_w) - iframe.style.width = iw + "px"; - - iframe.style.height = ih + "px"; - - // Is it to small, make it bigger again - if (set_w) { - var tableBodyElm = tableElm.firstChild; - var minIframeWidth = tableBodyElm.scrollWidth; - if (inst.iframeElement.clientWidth < minIframeWidth) { - dx = minIframeWidth - inst.iframeElement.clientWidth; - - inst.iframeElement.style.width = (iw + dx) + "px"; - } - } - - // Remove pesky table controls - inst.useCSS = false; - }, - - /** - * Handles resizing events. - */ - _resizeEventHandler : function(e) { - var resizer = TinyMCE_AdvancedTheme._resizer; - - // Do nothing - if (!resizer.resizing) - return; - - e = typeof(e) == "undefined" ? window.event : e; - - var dx = e.screenX - resizer.downX; - var dy = e.screenY - resizer.downY; - var resizeBox = resizer.resizeBox; - var editorId = resizer.editorId; - - switch (e.type) { - case "mousemove": - var w, h; - - w = resizer.width + dx; - h = resizer.height + dy; - - w = w < 1 ? 1 : w; - h = h < 1 ? 1 : h; - - if (resizer.horizontal) - resizeBox.style.width = w + "px"; - - resizeBox.style.height = h + "px"; - break; - - case "mouseup": - TinyMCE_AdvancedTheme._setResizing(e, editorId, false); - TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId), resizer.width + dx, resizer.height + dy, resizer.horizontal); - - // Expire in a month - if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { - var expires = new Date(); - expires.setTime(expires.getTime() + 3600000 * 24 * 30); - - // Set the cookies - TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_width", "" + (resizer.horizontal ? resizer.width + dx : ""), expires); - TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_height", "" + (resizer.height + dy), expires); - } - break; - } - }, - - /** - * Starts/stops the editor resizing. - */ - _setResizing : function(e, editor_id, state) { - e = typeof(e) == "undefined" ? window.event : e; - - var resizer = TinyMCE_AdvancedTheme._resizer; - var editorContainer = document.getElementById(editor_id + '_parent'); - var editorArea = document.getElementById(editor_id + '_parent').firstChild; - var resizeBox = document.getElementById(editor_id + '_resize_box'); - var inst = tinyMCE.getInstanceById(editor_id); - - if (state) { - // Place box over editor area - var width = editorArea.clientWidth; - var height = editorArea.clientHeight; - - resizeBox.style.width = width + "px"; - resizeBox.style.height = height + "px"; - - resizer.iframeWidth = inst.iframeElement.clientWidth; - resizer.iframeHeight = inst.iframeElement.clientHeight; - - // Hide editor and show resize box - editorArea.style.display = "none"; - resizeBox.style.display = "block"; - - // Add event handlers, only once - if (!resizer.eventHandlers) { - if (tinyMCE.isMSIE) - tinyMCE.addEvent(document, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); - else - tinyMCE.addEvent(window, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); - - tinyMCE.addEvent(document, "mouseup", TinyMCE_AdvancedTheme._resizeEventHandler); - - resizer.eventHandlers = true; - } - - resizer.resizing = true; - resizer.downX = e.screenX; - resizer.downY = e.screenY; - resizer.width = parseInt(resizeBox.style.width); - resizer.height = parseInt(resizeBox.style.height); - resizer.editorId = editor_id; - resizer.resizeBox = resizeBox; - resizer.horizontal = tinyMCE.getParam("theme_advanced_resize_horizontal", true); - } else { - resizer.resizing = false; - resizeBox.style.display = "none"; - editorArea.style.display = tinyMCE.isMSIE && !tinyMCE.isOpera ? "block" : "table"; - tinyMCE.execCommand('mceResetDesignMode'); - } - }, - - _getColorHTML : function(id, n, cm) { - var i, h, cl; - - h = ''; - cl = tinyMCE.getParam(n, TinyMCE_AdvancedTheme._defColors).split(','); - - h += ''; - for (i=0; i'; - - if ((i+1) % 8 == 0) - h += ''; - } - - h += '
'; - - if (tinyMCE.getParam("theme_advanced_more_colors", true)) - h += '' + tinyMCE.getLang('lang_more_colors') + ''; - - return h; - }, - - _pickColor : function(id, cm) { - var inputColor, inst = tinyMCE.selectedInstance; - - if (cm == 'forecolor' && inst) - inputColor = inst.foreColor; - - if ((cm == 'backcolor' || cm == 'HiliteColor') && inst) - inputColor = inst.backColor; - - tinyMCE.execCommand('mceColorPicker', true, {color : inputColor, callback : function(c) { - tinyMCE.execInstanceCommand(id, cm, false, c); - }}); - }, - - _insertImage : function(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout) { - tinyMCE.execCommand("mceInsertContent", false, tinyMCE.createTagHTML('img', { - src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], src), // Force absolute - mce_src : src, - alt : alt, - border : border, - hspace : hspace, - vspace : vspace, - width : width, - height : height, - align : align, - title : title, - onmouseover : onmouseover, - onmouseout : onmouseout - })); - }, - - _insertLink : function(href, target, title, onclick, style_class) { - tinyMCE.execCommand('mceBeginUndoLevel'); - - if (tinyMCE.selectedInstance && tinyMCE.selectedElement && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { - var doc = tinyMCE.selectedInstance.getDoc(); - var linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a"); - var newLink = false; - - if (!linkElement) { - linkElement = doc.createElement("a"); - newLink = true; - } - - var mhref = href; - var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, linkElement);"); - mhref = tinyMCE.getParam('convert_urls') ? href : mhref; - - tinyMCE.setAttrib(linkElement, 'href', thref); - tinyMCE.setAttrib(linkElement, 'mce_href', mhref); - tinyMCE.setAttrib(linkElement, 'target', target); - tinyMCE.setAttrib(linkElement, 'title', title); - tinyMCE.setAttrib(linkElement, 'onclick', onclick); - tinyMCE.setAttrib(linkElement, 'class', style_class); - - if (newLink) { - linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true)); - tinyMCE.selectedElement.parentNode.replaceChild(linkElement, tinyMCE.selectedElement); - } - - return; - } - - if (!tinyMCE.linkElement && tinyMCE.selectedInstance) { - if (tinyMCE.isSafari) { - tinyMCE.execCommand("mceInsertContent", false, '' + tinyMCE.selectedInstance.selection.getSelectedHTML() + ''); - } else - tinyMCE.selectedInstance.contentDocument.execCommand("createlink", false, tinyMCE.uniqueURL); - - tinyMCE.linkElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); - - var elementArray = tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); - - for (var i=0; i 4 ? but[4] : false), (but.length > 5 ? but[5] : null)); + + if (but[0] == button_name) + return tinyMCE.getButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null)); + } + + // Custom controlls other than buttons + switch (button_name) { + case "formatselect": + var html = ''; + + return html; + + case "styleselect": + return ''; + + case "fontselect": + var fontHTML = ''; + return fontHTML; + + case "fontsizeselect": + return ''; + + case "|": + case "separator": + return ''; + + case "spacer": + return ''; + + case "rowseparator": + return '
'; + } + + return ""; + }, + + /** + * Theme specific execcommand handling. + */ + execCommand : function(editor_id, element, command, user_interface, value) { + switch (command) { + case 'mceHelp': + tinyMCE.openWindow({ + file : 'about.htm', + width : 480, + height : 380 + }, { + tinymce_version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion, + tinymce_releasedate : tinyMCE.releaseDate, + inline : "yes" + }); + return true; + + case "mceLink": + var inst = tinyMCE.getInstanceById(editor_id); + var doc = inst.getDoc(); + var selectedText = ""; + + if (tinyMCE.isMSIE) { + var rng = doc.selection.createRange(); + selectedText = rng.text; + } else + selectedText = inst.getSel().toString(); + + if (!tinyMCE.linkElement) { + if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0)) + return true; + } + + var href = "", target = "", title = "", onclick = "", action = "insert", style_class = ""; + + if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a") + tinyMCE.linkElement = tinyMCE.selectedElement; + + // Is anchor not a link + if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "") + tinyMCE.linkElement = null; + + if (tinyMCE.linkElement) { + href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href'); + target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target'); + title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title'); + onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); + style_class = tinyMCE.getAttrib(tinyMCE.linkElement, 'class'); + + // Try old onclick to if copy/pasted content + if (onclick == "") + onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); + + onclick = tinyMCE.cleanupEventStr(onclick); + + href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); + + // Use mce_href if defined + mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_href'); + if (mceRealHref != "") { + href = mceRealHref; + + if (tinyMCE.getParam('convert_urls')) + href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); + } + + action = "update"; + } + + var template = new Array(); + + template['file'] = 'link.htm'; + template['width'] = 310; + template['height'] = 200; + + // Language specific width and height addons + template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0); + + if (inst.settings['insertlink_callback']) { + var returnVal = eval(inst.settings['insertlink_callback'] + "(href, target, title, onclick, action, style_class);"); + if (returnVal && returnVal['href']) + TinyMCE_AdvancedTheme._insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick'], returnVal['style_class']); + } else { + tinyMCE.openWindow(template, {href : href, target : target, title : title, onclick : onclick, action : action, className : style_class, inline : "yes"}); + } + + return true; + + case "mceImage": + var src = "", alt = "", border = "", hspace = "", vspace = "", width = "", height = "", align = ""; + var title = "", onmouseover = "", onmouseout = "", action = "insert"; + var img = tinyMCE.imgElement; + var inst = tinyMCE.getInstanceById(editor_id); + + if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { + img = tinyMCE.selectedElement; + tinyMCE.imgElement = img; + } + + if (img) { + // Is it a internal MCE visual aid image, then skip this one. + if (tinyMCE.getAttrib(img, 'name').indexOf('mce_') == 0) + return true; + + src = tinyMCE.getAttrib(img, 'src'); + alt = tinyMCE.getAttrib(img, 'alt'); + + // Try polling out the title + if (alt == "") + alt = tinyMCE.getAttrib(img, 'title'); + + // Fix width/height attributes if the styles is specified + if (tinyMCE.isGecko) { + var w = img.style.width; + if (w != null && w != "") + img.setAttribute("width", w); + + var h = img.style.height; + if (h != null && h != "") + img.setAttribute("height", h); + } + + border = tinyMCE.getAttrib(img, 'border'); + hspace = tinyMCE.getAttrib(img, 'hspace'); + vspace = tinyMCE.getAttrib(img, 'vspace'); + width = tinyMCE.getAttrib(img, 'width'); + height = tinyMCE.getAttrib(img, 'height'); + align = tinyMCE.getAttrib(img, 'align'); + onmouseover = tinyMCE.getAttrib(img, 'onmouseover'); + onmouseout = tinyMCE.getAttrib(img, 'onmouseout'); + title = tinyMCE.getAttrib(img, 'title'); + + // Is realy specified? + if (tinyMCE.isMSIE) { + width = img.attributes['width'].specified ? width : ""; + height = img.attributes['height'].specified ? height : ""; + } + + //onmouseover = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover)); + //onmouseout = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout)); + + src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); + + // Use mce_src if defined + mceRealSrc = tinyMCE.getAttrib(img, 'mce_src'); + if (mceRealSrc != "") { + src = mceRealSrc; + + if (tinyMCE.getParam('convert_urls')) + src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); + } + + //if (onmouseover != "") + // onmouseover = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, img, true);"); + + //if (onmouseout != "") + // onmouseout = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, img, true);"); + + action = "update"; + } + + var template = new Array(); + + template['file'] = 'image.htm?src={$src}'; + template['width'] = 355; + template['height'] = 265 + (tinyMCE.isMSIE ? 25 : 0); + + // Language specific width and height addons + template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0); + + if (inst.settings['insertimage_callback']) { + var returnVal = eval(inst.settings['insertimage_callback'] + "(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);"); + if (returnVal && returnVal['src']) + TinyMCE_AdvancedTheme._insertImage(returnVal['src'], returnVal['alt'], returnVal['border'], returnVal['hspace'], returnVal['vspace'], returnVal['width'], returnVal['height'], returnVal['align'], returnVal['title'], returnVal['onmouseover'], returnVal['onmouseout']); + } else + tinyMCE.openWindow(template, {src : src, alt : alt, border : border, hspace : hspace, vspace : vspace, width : width, height : height, align : align, title : title, onmouseover : onmouseover, onmouseout : onmouseout, action : action, inline : "yes"}); + + return true; + + case "forecolor": + var fcp = new TinyMCE_Layer(editor_id + '_fcPreview', false), p, img, elm; + + TinyMCE_AdvancedTheme._hideMenus(editor_id); + + if (!fcp.exists()) { + fcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar')); + elm = fcp.getElement(); + elm._editor_id = editor_id; + elm._command = "forecolor"; + elm._switchId = editor_id + "_forecolor"; + tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent); + tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent); + tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent); + } + + img = tinyMCE.selectNodes(document.getElementById(editor_id + "_forecolor"), function(n) {return n.nodeName == "IMG";})[0]; + p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar')); + + fcp.moveTo(p.absLeft, p.absTop); + fcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).foreColor; + fcp.show(); + + return false; + + case "forecolorpicker": + this._pickColor(editor_id, 'forecolor'); + return true; + + case "forecolorMenu": + TinyMCE_AdvancedTheme._hideMenus(editor_id); + + // Create color layer + var ml = new TinyMCE_Layer(editor_id + '_fcMenu'); + + if (!ml.exists()) + ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_text_colors', 'forecolor')); + + tinyMCE.switchClass(editor_id + '_forecolor', 'mceMenuButtonFocus'); + ml.moveRelativeTo(document.getElementById(editor_id + "_forecolor"), 'bl'); + + ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1); + + if (tinyMCE.isOpera) + ml.moveBy(0, -2); + + ml.show(); + return true; + + case "HiliteColor": + var bcp = new TinyMCE_Layer(editor_id + '_bcPreview', false), p, img; + + TinyMCE_AdvancedTheme._hideMenus(editor_id); + + if (!bcp.exists()) { + bcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar')); + elm = bcp.getElement(); + elm._editor_id = editor_id; + elm._command = "HiliteColor"; + elm._switchId = editor_id + "_backcolor"; + tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent); + tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent); + tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent); + } + + img = tinyMCE.selectNodes(document.getElementById(editor_id + "_backcolor"), function(n) {return n.nodeName == "IMG";})[0]; + p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar')); + + bcp.moveTo(p.absLeft, p.absTop); + bcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).backColor; + bcp.show(); + + return false; + + case "HiliteColorMenu": + TinyMCE_AdvancedTheme._hideMenus(editor_id); + + // Create color layer + var ml = new TinyMCE_Layer(editor_id + '_bcMenu'); + + if (!ml.exists()) + ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_background_colors', 'HiliteColor')); + + tinyMCE.switchClass(editor_id + '_backcolor', 'mceMenuButtonFocus'); + ml.moveRelativeTo(document.getElementById(editor_id + "_backcolor"), 'bl'); + + ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1); + + if (tinyMCE.isOpera) + ml.moveBy(0, -2); + + ml.show(); + return true; + + case "backcolorpicker": + this._pickColor(editor_id, 'HiliteColor'); + return true; + + case "mceColorPicker": + if (user_interface) { + var template = []; + + if (!value['callback'] && !value['color']) + value['color'] = value['document'].getElementById(value['element_id']).value; + + template['file'] = 'color_picker.htm'; + template['width'] = 380; + template['height'] = 250; + template['close_previous'] = "no"; + + template['width'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height', 0); + + if (typeof(value['store_selection']) == "undefined") + value['store_selection'] = true; + + tinyMCE.lastColorPickerValue = value; + tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : value['color']}); + } else { + var savedVal = tinyMCE.lastColorPickerValue, elm; + + if (savedVal['callback']) { + savedVal['callback'](value); + return true; + } + + elm = savedVal['document'].getElementById(savedVal['element_id']); + elm.value = value; + + if (elm.onchange != null && elm.onchange != '') + eval('elm.onchange();'); + } + return true; + + case "mceCodeEditor": + var template = new Array(); + + template['file'] = 'source_editor.htm'; + template['width'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_width", 720)); + template['height'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_height", 580)); + + tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no", inline : "yes"}); + return true; + + case "mceCharMap": + var template = new Array(); + + template['file'] = 'charmap.htm'; + template['width'] = 550 + (tinyMCE.isOpera ? 40 : 0); + template['height'] = 250; + + template['width'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_height', 0); + + tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); + return true; + + case "mceInsertAnchor": + var template = new Array(); + + template['file'] = 'anchor.htm'; + template['width'] = 320; + template['height'] = 90 + (tinyMCE.isNS7 ? 30 : 0); + + template['width'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_height', 0); + + tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); + return true; + + case "mceNewDocument": + if (confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_newdocument')))) + tinyMCE.execInstanceCommand(editor_id, 'mceSetContent', false, ' '); + + return true; + } + + return false; + }, + + /** + * Editor instance template function. + */ + getEditorTemplate : function(settings, editorId) { + function removeFromArray(in_array, remove_array) { + var outArray = new Array(), skip; + + for (var i=0; i 

'; + var layoutManager = tinyMCE.getParam("theme_advanced_layout_manager", "SimpleLayout"); + + // Setup style select options -- MOVED UP FOR EXTERNAL TOOLBAR COMPATABILITY! + var styleSelectHTML = ''; + if (settings['theme_advanced_styles']) { + var stylesAr = settings['theme_advanced_styles'].split(';'); + + for (var i=0; i' + key + ''; + } + + TinyMCE_AdvancedTheme._autoImportCSSClasses = false; + } + + switch(layoutManager) { + case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)... + var toolbarHTML = ""; + var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom"); + var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center"); + var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); // Compatiblity + var statusbarLocation = tinyMCE.getParam("theme_advanced_statusbar_location", pathLocation); + var defVals = { + theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect", + theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code", + theme_advanced_buttons3 : "hr,removeformat,visualaid,separator,sub,sup,separator,charmap" + }; + + // Add accessibility control + toolbarHTML += ' 0) { + toolbarHTML += "
"; + deltaHeight -= 23; + } + } + + // Add accessibility control + toolbarHTML += '
'; + + // Setup template html + template['html'] = ''; + + if (toolbarLocation == "top") + template['html'] += ''; + + if (statusbarLocation == "top") { + template['html'] += ''; + deltaHeight -= 23; + } + + template['html'] += ''; + + if (toolbarLocation == "bottom") + template['html'] += ''; + + // External toolbar changes + if (toolbarLocation == "external") { + var bod = document.body; + var elm = document.createElement ("div"); + + toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML); + toolbarHTML = tinyMCE.applyTemplate(toolbarHTML, {editor_id : editorId}); + + elm.className = "mceToolbarExternal"; + elm.id = editorId+"_toolbar"; + elm.innerHTML = '
' + toolbarHTML + '
' + statusbarHTML + '
' + toolbarHTML + '
'+toolbarHTML+'
'; + bod.appendChild (elm); + // bod.style.marginTop = elm.offsetHeight + "px"; + + deltaHeight = 0; + tinyMCE.getInstanceById(editorId).toolbarElement = elm; + + //template['html'] = '
'+toolbarHTML+'
' + template["html"]; + } else { + tinyMCE.getInstanceById(editorId).toolbarElement = null; + } + + if (statusbarLocation == "bottom") { + template['html'] += '' + statusbarHTML + ''; + deltaHeight -= 23; + } + + template['html'] += ''; + //"SimpleLayout" + break; + + case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom. + template['html'] = ''; + + var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ","); + var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container"); + var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center"); + + //Render Containers: + for (var i = 0; i < containers.length; i++) + { + if (containers[i] == "mceEditor") //Exceptions for mceEditor and ... + template['html'] += ''; + else if (containers[i] == "mceElementpath" || containers[i] == "mceStatusbar") // ... mceElementpath: + { + var pathClass = "mceStatusbar"; + + if (i == containers.length-1) + { + pathClass = "mceStatusbarBottom"; + } + else if (i == 0) + { + pathClass = "mceStatusbar"; + } + else + { + deltaHeight-=2; + } + + template['html'] += ''; + deltaHeight -= 22; + } else { // Render normal Container + var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ','); + var curContainerHTML = ""; + var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign); + var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS); + + curContainer = removeFromArray(curContainer, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); + + for (var j=0; j 0) { + curContainerHTML += "
"; + deltaHeight -= 23; + } + + template['html'] += '
'; + } + } + + template['html'] += '
' + statusbarHTML + '
' + curContainerHTML + '
'; + //RowLayout + break; + + case "CustomLayout" : //User defined layout callback... + var customLayout = tinyMCE.getParam("theme_advanced_custom_layout",""); + + if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") { + template = eval(customLayout + "(template);"); + } + break; + } + + if (resizing) + template['html'] += ''; + + template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML); + + // Set to default values + if (!template['delta_width']) + template['delta_width'] = 0; + + if (!template['delta_height']) + template['delta_height'] = deltaHeight; + + return template; + }, + + initInstance : function(inst) { + if (tinyMCE.getParam("theme_advanced_resizing", false)) { + if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { + var w = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_width"); + var h = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_height"); + + TinyMCE_AdvancedTheme._resizeTo(inst, w, h, tinyMCE.getParam("theme_advanced_resize_horizontal", true)); + } + } + + inst.addShortcut('ctrl', 'k', 'lang_link_desc', 'mceLink'); + }, + + removeInstance : function(inst) { + new TinyMCE_Layer(inst.editorId + '_fcMenu').remove(); + new TinyMCE_Layer(inst.editorId + '_bcMenu').remove(); + }, + + hideInstance : function(inst) { + TinyMCE_AdvancedTheme._hideMenus(inst.editorId); + }, + + _handleMenuEvent : function(e) { + var te = tinyMCE.isMSIE ? window.event.srcElement : e.target; + tinyMCE._menuButtonEvent(e.type == "mouseover" ? "over" : "out", document.getElementById(te._switchId)); + + if (e.type == "click") + tinyMCE.execInstanceCommand(te._editor_id, te._command); + }, + + _hideMenus : function(id) { + var fcml = new TinyMCE_Layer(id + '_fcMenu'), bcml = new TinyMCE_Layer(id + '_bcMenu'); + + if (fcml.exists() && fcml.isVisible()) { + tinyMCE.switchClass(id + '_forecolor', 'mceMenuButton'); + fcml.hide(); + } + + if (bcml.exists() && bcml.isVisible()) { + tinyMCE.switchClass(id + '_backcolor', 'mceMenuButton'); + bcml.hide(); + } + }, + + /** + * Node change handler. + */ + handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection, setup_content) { + var alignNode, breakOut, classNode; + + function selectByValue(select_elm, value, first_index) { + first_index = typeof(first_index) == "undefined" ? false : true; + + if (select_elm) { + for (var i=0; i=0; i--) { + var nodeName = path[i].nodeName.toLowerCase(); + var nodeData = ""; + + if (nodeName.indexOf("html:") == 0) + nodeName = nodeName.substring(5); + + if (nodeName == "b") { + nodeName = "strong"; + } + + if (nodeName == "i") { + nodeName = "em"; + } + + if (nodeName == "span") { + var cn = tinyMCE.getAttrib(path[i], "class"); + if (cn != "" && cn.indexOf('mceItem') == -1) + nodeData += "class: " + cn + " "; + + var st = tinyMCE.getAttrib(path[i], "style"); + if (st != "") { + st = tinyMCE.serializeStyle(tinyMCE.parseStyle(st)); + nodeData += "style: " + tinyMCE.xmlEncode(st) + " "; + } + } + + if (nodeName == "font") { + if (tinyMCE.getParam("convert_fonts_to_spans")) + nodeName = "span"; + + var face = tinyMCE.getAttrib(path[i], "face"); + if (face != "") + nodeData += "font: " + tinyMCE.xmlEncode(face) + " "; + + var size = tinyMCE.getAttrib(path[i], "size"); + if (size != "") + nodeData += "size: " + tinyMCE.xmlEncode(size) + " "; + + var color = tinyMCE.getAttrib(path[i], "color"); + if (color != "") + nodeData += "color: " + tinyMCE.xmlEncode(color) + " "; + } + + if (tinyMCE.getAttrib(path[i], 'id') != "") { + nodeData += "id: " + path[i].getAttribute('id') + " "; + } + + var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); + if (className != "" && className.indexOf('mceItem') == -1) + nodeData += "class: " + className + " "; + + if (tinyMCE.getAttrib(path[i], 'src') != "") { + var src = tinyMCE.getAttrib(path[i], "mce_src"); + + if (src == "") + src = tinyMCE.getAttrib(path[i], "src"); + + nodeData += "src: " + tinyMCE.xmlEncode(src) + " "; + } + + if (path[i].nodeName == 'A' && tinyMCE.getAttrib(path[i], 'href') != "") { + var href = tinyMCE.getAttrib(path[i], "mce_href"); + + if (href == "") + href = tinyMCE.getAttrib(path[i], "href"); + + nodeData += "href: " + tinyMCE.xmlEncode(href) + " "; + } + + className = tinyMCE.getAttrib(path[i], "class"); + if ((nodeName == "img" || nodeName == "span") && className.indexOf('mceItem') != -1) { + nodeName = className.replace(/mceItem([a-z]+)/gi, '$1').toLowerCase(); + nodeData = path[i].getAttribute('title'); + } + + if (nodeName == "a" && (anchor = tinyMCE.getAttrib(path[i], "name")) != "") { + nodeName = "a"; + nodeName += "#" + tinyMCE.xmlEncode(anchor); + nodeData = ""; + } + + if (tinyMCE.getAttrib(path[i], 'name').indexOf("mce_") != 0) { + var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); + if (className != "" && className.indexOf('mceItem') == -1) { + nodeName += "." + className; + } + } + + var cmd = 'tinyMCE.execInstanceCommand(\'' + editor_id + '\',\'mceSelectNodeDepth\',false,\'' + i + '\');'; + html += '' + nodeName + ''; + + if (i > 0) { + html += " » "; + } + } + + pathElm.innerHTML = '' + tinyMCE.getLang('lang_theme_path') + ": " + html + ' '; + } + + // Reset old states + tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_bold', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_italic', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_underline', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_sub', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_sup', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_link', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_unlink', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_image', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_hr', 'mceButtonNormal'); + + if (node.nodeName == "A" && tinyMCE.getAttrib(node, "class").indexOf('mceItemAnchor') != -1) + tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonSelected'); + + // Get link + var anchorLink = tinyMCE.getParentElement(node, "a", "href"); + + if (anchorLink || any_selection) { + tinyMCE.switchClass(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); + } + + // Handle visual aid + tinyMCE.switchClass(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal'); + + if (undo_levels != -1) { + tinyMCE.switchClass(editor_id + '_undo', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_redo', 'mceButtonDisabled'); + } + + // Within li, blockquote + if (tinyMCE.getParentElement(node, "li,blockquote")) + tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonNormal'); + + // Has redo levels + if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0)) + tinyMCE.switchClass(editor_id + '_redo', 'mceButtonNormal'); + + // Has undo levels + if (undo_index != -1 && (undo_index > 0 && undo_levels > 0)) + tinyMCE.switchClass(editor_id + '_undo', 'mceButtonNormal'); + + // Select class in select box + var selectElm = document.getElementById(editor_id + "_styleSelect"); + + if (selectElm) { + TinyMCE_AdvancedTheme._setupCSSClasses(editor_id); + + classNode = node; + breakOut = false; + var index = 0; + + do { + if (classNode && classNode.className) { + for (var i=0; i"); + else + selectByValue(selectElm, ""); + } + + // Select fontselect + var selectElm = document.getElementById(editor_id + "_fontNameSelect"); + if (selectElm) { + if (!tinyMCE.isSafari && !(tinyMCE.isMSIE && !tinyMCE.isOpera)) { + var face = inst.queryCommandValue('FontName'); + + face = face == null || face == "" ? "" : face; + + selectByValue(selectElm, face, face != ""); + } else { + var elm = tinyMCE.getParentElement(node, "font", "face"); + + if (elm) { + var family = tinyMCE.getAttrib(elm, "face"); + + if (family == '') + family = '' + elm.style.fontFamily; + + if (!selectByValue(selectElm, family, family != "")) + selectByValue(selectElm, ""); + } else + selectByValue(selectElm, ""); + } + } + + // Select fontsize + var selectElm = document.getElementById(editor_id + "_fontSizeSelect"); + if (selectElm) { + if (!tinyMCE.isSafari && !tinyMCE.isOpera) { + var size = inst.queryCommandValue('FontSize'); + selectByValue(selectElm, size == null || size == "" ? "0" : size); + } else { + var elm = tinyMCE.getParentElement(node, "font", "size"); + if (elm) { + var size = tinyMCE.getAttrib(elm, "size"); + + if (size == '') { + var sizes = new Array('', '8px', '10px', '12px', '14px', '18px', '24px', '36px'); + + size = '' + elm.style.fontSize; + + for (var i=0; i 0) + selectElm.setAttribute('cssImported', 'true'); + } + }, + + _setCookie : function(name, value, expires, path, domain, secure) { + var curCookie = name + "=" + escape(value) + + ((expires) ? "; expires=" + expires.toGMTString() : "") + + ((path) ? "; path=" + escape(path) : "") + + ((domain) ? "; domain=" + domain : "") + + ((secure) ? "; secure" : ""); + + document.cookie = curCookie; + }, + + _getCookie : function(name) { + var dc = document.cookie; + var prefix = name + "="; + var begin = dc.indexOf("; " + prefix); + + if (begin == -1) { + begin = dc.indexOf(prefix); + + if (begin != 0) + return null; + } else + begin += 2; + + var end = document.cookie.indexOf(";", begin); + + if (end == -1) + end = dc.length; + + return unescape(dc.substring(begin + prefix.length, end)); + }, + + _resizeTo : function(inst, w, h, set_w) { + var editorContainer = document.getElementById(inst.editorId + '_parent'); + var tableElm = editorContainer.firstChild; + var iframe = inst.iframeElement; + + if (w == null || w == "null") { + set_w = false; + w = 0; + } + + if (h == null || h == "null") + return; + + w = parseInt(w); + h = parseInt(h); + + if (tinyMCE.isGecko) { + w += 2; + h += 2; + } + + var dx = w - tableElm.clientWidth; + var dy = h - tableElm.clientHeight; + + w = w < 1 ? 30 : w; + h = h < 1 ? 30 : h; + + if (set_w) + tableElm.style.width = w + "px"; + + tableElm.style.height = h + "px"; + + iw = iframe.clientWidth + dx; + ih = iframe.clientHeight + dy; + + iw = iw < 1 ? 30 : iw; + ih = ih < 1 ? 30 : ih; + + if (tinyMCE.isGecko) { + iw -= 2; + ih -= 2; + } + + if (set_w) + iframe.style.width = iw + "px"; + + iframe.style.height = ih + "px"; + + // Is it to small, make it bigger again + if (set_w) { + var tableBodyElm = tableElm.firstChild; + var minIframeWidth = tableBodyElm.scrollWidth; + if (inst.iframeElement.clientWidth < minIframeWidth) { + dx = minIframeWidth - inst.iframeElement.clientWidth; + + inst.iframeElement.style.width = (iw + dx) + "px"; + } + } + + // Remove pesky table controls + inst.useCSS = false; + }, + + /** + * Handles resizing events. + */ + _resizeEventHandler : function(e) { + var resizer = TinyMCE_AdvancedTheme._resizer; + + // Do nothing + if (!resizer.resizing) + return; + + e = typeof(e) == "undefined" ? window.event : e; + + var dx = e.screenX - resizer.downX; + var dy = e.screenY - resizer.downY; + var resizeBox = resizer.resizeBox; + var editorId = resizer.editorId; + + switch (e.type) { + case "mousemove": + var w, h; + + w = resizer.width + dx; + h = resizer.height + dy; + + w = w < 1 ? 1 : w; + h = h < 1 ? 1 : h; + + if (resizer.horizontal) + resizeBox.style.width = w + "px"; + + resizeBox.style.height = h + "px"; + break; + + case "mouseup": + TinyMCE_AdvancedTheme._setResizing(e, editorId, false); + TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId), resizer.width + dx, resizer.height + dy, resizer.horizontal); + + // Expire in a month + if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { + var expires = new Date(); + expires.setTime(expires.getTime() + 3600000 * 24 * 30); + + // Set the cookies + TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_width", "" + (resizer.horizontal ? resizer.width + dx : ""), expires); + TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_height", "" + (resizer.height + dy), expires); + } + break; + } + }, + + /** + * Starts/stops the editor resizing. + */ + _setResizing : function(e, editor_id, state) { + e = typeof(e) == "undefined" ? window.event : e; + + var resizer = TinyMCE_AdvancedTheme._resizer; + var editorContainer = document.getElementById(editor_id + '_parent'); + var editorArea = document.getElementById(editor_id + '_parent').firstChild; + var resizeBox = document.getElementById(editor_id + '_resize_box'); + var inst = tinyMCE.getInstanceById(editor_id); + + if (state) { + // Place box over editor area + var width = editorArea.clientWidth; + var height = editorArea.clientHeight; + + resizeBox.style.width = width + "px"; + resizeBox.style.height = height + "px"; + + resizer.iframeWidth = inst.iframeElement.clientWidth; + resizer.iframeHeight = inst.iframeElement.clientHeight; + + // Hide editor and show resize box + editorArea.style.display = "none"; + resizeBox.style.display = "block"; + + // Add event handlers, only once + if (!resizer.eventHandlers) { + if (tinyMCE.isMSIE) + tinyMCE.addEvent(document, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); + else + tinyMCE.addEvent(window, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); + + tinyMCE.addEvent(document, "mouseup", TinyMCE_AdvancedTheme._resizeEventHandler); + + resizer.eventHandlers = true; + } + + resizer.resizing = true; + resizer.downX = e.screenX; + resizer.downY = e.screenY; + resizer.width = parseInt(resizeBox.style.width); + resizer.height = parseInt(resizeBox.style.height); + resizer.editorId = editor_id; + resizer.resizeBox = resizeBox; + resizer.horizontal = tinyMCE.getParam("theme_advanced_resize_horizontal", true); + } else { + resizer.resizing = false; + resizeBox.style.display = "none"; + editorArea.style.display = tinyMCE.isMSIE && !tinyMCE.isOpera ? "block" : "table"; + tinyMCE.execCommand('mceResetDesignMode'); + } + }, + + _getColorHTML : function(id, n, cm) { + var i, h, cl; + + h = ''; + cl = tinyMCE.getParam(n, TinyMCE_AdvancedTheme._defColors).split(','); + + h += ''; + for (i=0; i'; + + if ((i+1) % 8 == 0) + h += ''; + } + + h += '
'; + + if (tinyMCE.getParam("theme_advanced_more_colors", true)) + h += '' + tinyMCE.getLang('lang_more_colors') + ''; + + return h; + }, + + _pickColor : function(id, cm) { + var inputColor, inst = tinyMCE.selectedInstance; + + if (cm == 'forecolor' && inst) + inputColor = inst.foreColor; + + if ((cm == 'backcolor' || cm == 'HiliteColor') && inst) + inputColor = inst.backColor; + + tinyMCE.execCommand('mceColorPicker', true, {color : inputColor, callback : function(c) { + tinyMCE.execInstanceCommand(id, cm, false, c); + }}); + }, + + _insertImage : function(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout) { + tinyMCE.execCommand("mceInsertContent", false, tinyMCE.createTagHTML('img', { + src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, src), // Force absolute + mce_src : src, + alt : alt, + border : border, + hspace : hspace, + vspace : vspace, + width : width, + height : height, + align : align, + title : title, + onmouseover : onmouseover, + onmouseout : onmouseout + })); + }, + + _insertLink : function(href, target, title, onclick, style_class) { + tinyMCE.execCommand('mceBeginUndoLevel'); + + if (tinyMCE.selectedInstance && tinyMCE.selectedElement && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { + var doc = tinyMCE.selectedInstance.getDoc(); + var linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a"); + var newLink = false; + + if (!linkElement) { + linkElement = doc.createElement("a"); + newLink = true; + } + + var mhref = href; + var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, linkElement);"); + mhref = tinyMCE.getParam('convert_urls') ? href : mhref; + + tinyMCE.setAttrib(linkElement, 'href', thref); + tinyMCE.setAttrib(linkElement, 'mce_href', mhref); + tinyMCE.setAttrib(linkElement, 'target', target); + tinyMCE.setAttrib(linkElement, 'title', title); + tinyMCE.setAttrib(linkElement, 'onclick', onclick); + tinyMCE.setAttrib(linkElement, 'class', style_class); + + if (newLink) { + linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true)); + tinyMCE.selectedElement.parentNode.replaceChild(linkElement, tinyMCE.selectedElement); + } + + return; + } + + if (!tinyMCE.linkElement && tinyMCE.selectedInstance) { + if (tinyMCE.isSafari) { + tinyMCE.execCommand("mceInsertContent", false, '' + tinyMCE.selectedInstance.selection.getSelectedHTML() + ''); + } else + tinyMCE.selectedInstance.contentDocument.execCommand("createlink", false, tinyMCE.uniqueURL); + + tinyMCE.linkElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); + + var elementArray = tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); + + for (var i=0; i - - {$lang_insert_image_title} - - - - - - - -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
 
- x -
-
-
- -
-
- -
- -
- -
-
-
- - + + + {$lang_insert_image_title} + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+ x +
+
+
+ +
+
+ +
+ +
+ +
+
+
+ + diff --git a/program/js/tiny_mce/tiny_mce.js b/program/js/tiny_mce/tiny_mce.js index ef60480..71e62a0 100644 --- a/program/js/tiny_mce/tiny_mce.js +++ b/program/js/tiny_mce/tiny_mce.js @@ -1 +1 @@ -function TinyMCE_Engine(){var ua;this.majorVersion="2";this.minorVersion="1.1.1";this.releaseDate="2007-05-14";this.instances=[];this.switchClassCache=[];this.windowArgs=[];this.loadedFiles=[];this.pendingFiles=[];this.loadingIndex=0;this.configs=[];this.currentConfig=0;this.eventHandlers=[];this.log=[];this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.settings=[];ua=navigator.userAgent;this.isMSIE=(navigator.appName=="Microsoft Internet Explorer");this.isMSIE5=this.isMSIE&&(ua.indexOf('MSIE 5')!=-1);this.isMSIE5_0=this.isMSIE&&(ua.indexOf('MSIE 5.0')!=-1);this.isMSIE7=this.isMSIE&&(ua.indexOf('MSIE 7')!=-1);this.isGecko=ua.indexOf('Gecko')!=-1;this.isSafari=ua.indexOf('Safari')!=-1;this.isOpera=window['opera']&&opera.buildNumber?true:false;this.isMac=ua.indexOf('Mac')!=-1;this.isNS7=ua.indexOf('Netscape/7')!=-1;this.isNS71=ua.indexOf('Netscape/7.1')!=-1;this.dialogCounter=0;this.plugins=[];this.themes=[];this.menus=[];this.loadedPlugins=[];this.buttonMap=[];this.isLoaded=false;if(this.isOpera){this.isMSIE=true;this.isGecko=false;this.isSafari=false}this.isIE=this.isMSIE;this.isRealIE=this.isMSIE&&!this.isOpera;this.idCounter=0};TinyMCE_Engine.prototype={init:function(settings){var theme,nl,baseHREF="",i,cssPath,entities,h,p,src,elements=[],head;if(this.isMSIE5_0)return;this.settings=settings;if(typeof(document.execCommand)=='undefined')return;if(!tinyMCE.baseURL){head=document.getElementsByTagName('head')[0];if(head){for(i=0,nl=head.getElementsByTagName('script');i');this._def("font_size_classes",'');this._def("font_size_style_values",'xx-small,x-small,small,medium,large,x-large,xx-large',true);this._def("event_elements",'a,img',true);this._def("convert_urls",true);this._def("table_inline_editing",false);this._def("object_resizing",true);this._def("custom_shortcuts",true);this._def("convert_on_click",false);this._def("content_css",'');this._def("fix_list_elements",true);this._def("fix_table_elements",false);this._def("strict_loading_mode",document.contentType=='application/xhtml+xml');this._def("hidden_tab_class",'');this._def("display_tab_class",'');this._def("gecko_spellcheck",false);this._def("hide_selects_on_submit",true);this._def("forced_root_block",false);this._def("remove_trailing_nbsp",false);if(this.isMSIE&&!this.isOpera)this.settings.strict_loading_mode=false;if(this.isMSIE&&this.settings.browsers.indexOf('msie')==-1)return;if(this.isGecko&&this.settings.browsers.indexOf('gecko')==-1)return;if(this.isSafari&&this.settings.browsers.indexOf('safari')==-1)return;if(this.isOpera&&this.settings.browsers.indexOf('opera')==-1)return;baseHREF=tinyMCE.settings.document_base_url;h=document.location.href;p=h.indexOf('://');if(p>0&&document.location.protocol!="file:"){p=h.indexOf('/',p+3);h=h.substring(0,p);if(baseHREF.indexOf('://')==-1)baseHREF=h+baseHREF;tinyMCE.settings.document_base_url=baseHREF;tinyMCE.settings.document_base_prefix=h}if(baseHREF.indexOf('?')!=-1)baseHREF=baseHREF.substring(0,baseHREF.indexOf('?'));this.settings.base_href=baseHREF.substring(0,baseHREF.lastIndexOf('/'))+"/";theme=this.settings.theme;this.inlineStrict='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';this.inlineTransitional='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';this.blockElms='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';this.blockRegExp=new RegExp("^("+this.blockElms+")$","i");this.posKeyCodes=[13,45,36,35,33,34,37,38,39,40];this.uniqueURL='javascript:void(091039730);';this.uniqueTag='';this.callbacks=['onInit','getInfo','getEditorTemplate','setupContent','onChange','onPageLoad','handleNodeChange','initInstance','execCommand','getControlHTML','handleEvent','cleanup','removeInstance'];this.settings.theme_href=tinyMCE.baseURL+"/themes/"+theme;if(!tinyMCE.isIE||tinyMCE.isOpera)this.settings.force_br_newlines=false;if(tinyMCE.getParam("popups_css",false)){cssPath=tinyMCE.getParam("popups_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.popups_css=this.documentBasePath+"/"+cssPath;else this.settings.popups_css=cssPath}else this.settings.popups_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_popup.css";if(tinyMCE.getParam("editor_css",false)){cssPath=tinyMCE.getParam("editor_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.editor_css=this.documentBasePath+"/"+cssPath;else this.settings.editor_css=cssPath}else{if(this.settings.editor_css!=='')this.settings.editor_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_ui.css"}if(this.configs.length==0){if(typeof(TinyMCECompressed)=="undefined"){tinyMCE.addEvent(window,"DOMContentLoaded",TinyMCE_Engine.prototype.onLoad);if(tinyMCE.isRealIE){if(document.body)tinyMCE.addEvent(document.body,"readystatechange",TinyMCE_Engine.prototype.onLoad);else tinyMCE.addEvent(document,"readystatechange",TinyMCE_Engine.prototype.onLoad)}tinyMCE.addEvent(window,"load",TinyMCE_Engine.prototype.onLoad);tinyMCE._addUnloadEvents()}}this.loadScript(tinyMCE.baseURL+'/themes/'+this.settings.theme+'/editor_template'+tinyMCE.srcMode+'.js');this.loadScript(tinyMCE.baseURL+'/langs/'+this.settings.language+'.js');this.loadCSS(this.settings.editor_css);p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i&"]','g')},_addUnloadEvents:function(){var st=tinyMCE.settings.add_unload_trigger;if(tinyMCE.isIE){if(st){tinyMCE.addEvent(window,"unload",TinyMCE_Engine.prototype.unloadHandler);tinyMCE.addEvent(window.document,"beforeunload",TinyMCE_Engine.prototype.unloadHandler)}}else{if(st)tinyMCE.addEvent(window,"unload",function(){tinyMCE.triggerSave(true,true)})}},_def:function(key,def_val,t){var v=tinyMCE.getParam(key,def_val);v=t?v.replace(/\s+/g,""):v;this.settings[key]=v},hasPlugin:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},addPlugin:function(n,p){var op=this.plugins[n];p.baseURL=op?op.baseURL:tinyMCE.baseURL+"/plugins/"+n;this.plugins[n]=p;this.loadNextScript()},setPluginBaseURL:function(n,u){var op=this.plugins[n];if(op)op.baseURL=u;else this.plugins[n]={baseURL:u}},loadPlugin:function(n,u){u=u.indexOf('.js')!=-1?u.substring(0,u.lastIndexOf('/')):u;u=u.charAt(u.length-1)=='/'?u.substring(0,u.length-1):u;this.plugins[n]={baseURL:u};this.loadScript(u+"/editor_plugin"+(tinyMCE.srcMode?'_src':'')+".js")},hasTheme:function(n){return typeof(this.themes[n])!="undefined"&&this.themes[n]!=null},addTheme:function(n,t){this.themes[n]=t;this.loadNextScript()},addMenu:function(n,m){this.menus[n]=m},hasMenu:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},loadScript:function(url){var i;for(i=0;i');this.loadedFiles[this.loadedFiles.length]=url},loadNextScript:function(){var d=document,se;if(!tinyMCE.settings.strict_loading_mode)return;if(this.loadingIndex0){for(i=0,lflen=this.loadedFiles.length;i');this.loadedFiles[this.loadedFiles.length]=ar[x]}}}},importCSS:function(doc,css){var css_ary=css.replace(/\s+/,'').split(',');var csslen,elm,headArr,x,css_file;for(x=0,csslen=css_ary.length;x0){if(css_file.indexOf('://')==-1&&css_file.charAt(0)!='/')css_file=this.documentBasePath+"/"+css_file;if(typeof(doc.createStyleSheet)=="undefined"){elm=doc.createElement("link");elm.rel="stylesheet";elm.href=css_file;if((headArr=doc.getElementsByTagName("head"))!=null&&headArr.length>0)headArr[0].appendChild(elm)}else doc.createStyleSheet(css_file)}}},confirmAdd:function(e,settings){var elm=tinyMCE.isIE?event.srcElement:e.target;var elementId=elm.name?elm.name:elm.id;tinyMCE.settings=settings;if(tinyMCE.settings.convert_on_click||(!elm.getAttribute('mce_noask')&&confirm(tinyMCELang.lang_edit_confirm)))tinyMCE.addMCEControl(elm,elementId);elm.setAttribute('mce_noask','true')},updateContent:function(form_element_name){var formElement,n,inst,doc;formElement=document.getElementById(form_element_name);for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();if(inst.formElement==formElement){doc=inst.getDoc();tinyMCE._setHTML(doc,inst.formElement.value);if(!tinyMCE.isIE)doc.body.innerHTML=tinyMCE._cleanupHTML(inst,doc,this.settings,doc.body,inst.visualAid)}}},addMCEControl:function(replace_element,form_element_name,target_document){var id="mce_editor_"+tinyMCE.idCounter++;var inst=new TinyMCE_Control(tinyMCE.settings);inst.editorId=id;this.instances[id]=inst;inst._onAdd(replace_element,form_element_name,target_document)},removeInstance:function(ti){var t=[],n,i;for(n in tinyMCE.instances){i=tinyMCE.instances[n];if(tinyMCE.isInstance(i)&&ti!=i)t[n]=i}tinyMCE.instances=t;n=[];t=tinyMCE.undoLevels;for(i=0;i0){tinyMCE.nextUndoRedoAction='Undo';inst=this.undoLevels[--this.undoIndex];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Undo')}}else inst.execCommand('Undo');return true;case"Redo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex<=this.undoLevels.length-1){tinyMCE.nextUndoRedoAction='Redo';inst=this.undoLevels[this.undoIndex++];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Redo')}}else inst.execCommand('Redo');return true;case'mceFocus':inst=tinyMCE.getInstanceById(value);if(inst)inst.getWin().focus();return;case"mceAddControl":case"mceAddEditor":tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceAddFrameControl":tinyMCE.addMCEControl(tinyMCE._getElementById(value.element,value.document),value.element,value.document);return;case"mceRemoveControl":case"mceRemoveEditor":tinyMCE.removeMCEControl(value);return;case"mceToggleEditor":inst=tinyMCE.getInstanceById(value);if(inst){pe=document.getElementById(inst.editorId+'_parent');te=inst.oldTargetElement;if(typeof(inst.enabled)=='undefined')inst.enabled=true;inst.enabled=!inst.enabled;if(!inst.enabled){pe.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')te.value=inst.getHTML();else te.innerHTML=inst.getHTML();te.style.display=inst.oldTargetDisplay;tinyMCE.dispatchCallback(inst,'hide_instance_callback','hideInstance',inst)}else{pe.style.display='block';te.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')inst.setHTML(te.value);else inst.setHTML(te.innerHTML);inst.useCSS=false;tinyMCE.dispatchCallback(inst,'show_instance_callback','showInstance',inst)}}else tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceResetDesignMode":if(tinyMCE.isGecko){for(n in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[n]))continue;try{tinyMCE.instances[n].getDoc().designMode="off";tinyMCE.instances[n].getDoc().designMode="on";tinyMCE.instances[n].useCSS=false}catch(e){}}}return}if(inst){inst.execCommand(command,user_interface,value)}else if(tinyMCE.settings.focus_alert)alert(tinyMCELang.lang_focus_alert)},_createIFrame:function(replace_element,doc,win){var iframe,id=replace_element.getAttribute("id");var aw,ah;if(typeof(doc)=="undefined")doc=document;if(typeof(win)=="undefined")win=window;iframe=doc.createElement("iframe");aw=""+tinyMCE.settings.area_width;ah=""+tinyMCE.settings.area_height;if(aw.indexOf('%')==-1){aw=parseInt(aw);aw=(isNaN(aw)||aw<0)?300:aw;aw=aw+"px"}if(ah.indexOf('%')==-1){ah=parseInt(ah);ah=(isNaN(ah)||ah<0)?240:ah;ah=ah+"px"}iframe.setAttribute("id",id);iframe.setAttribute("name",id);iframe.setAttribute("class","mceEditorIframe");iframe.setAttribute("border","0");iframe.setAttribute("frameBorder","0");iframe.setAttribute("marginWidth","0");iframe.setAttribute("marginHeight","0");iframe.setAttribute("leftMargin","0");iframe.setAttribute("topMargin","0");iframe.setAttribute("width",aw);iframe.setAttribute("height",ah);iframe.setAttribute("allowtransparency","true");iframe.className='mceEditorIframe';if(tinyMCE.settings.auto_resize)iframe.setAttribute("scrolling","no");if(tinyMCE.isRealIE)iframe.setAttribute("src",this.settings.default_document);iframe.style.width=aw;iframe.style.height=ah;if(tinyMCE.settings.strict_loading_mode)iframe.style.marginBottom='-5px';if(tinyMCE.isRealIE)replace_element.outerHTML=iframe.outerHTML;else replace_element.parentNode.replaceChild(iframe,replace_element);if(tinyMCE.isRealIE)return win.frames[id];else return iframe},setupContent:function(editor_id){var inst=tinyMCE.instances[editor_id],i,doc=inst.getDoc(),head=doc.getElementsByTagName('head').item(0);var content=inst.startContent,contentElement,body;if(tinyMCE.settings.strict_loading_mode){content=content.replace(/</g,'<');content=content.replace(/>/g,'>');content=content.replace(/"/g,'"');content=content.replace(/&/g,'&')}tinyMCE.selectedInstance=inst;inst.switchSettings();if(!tinyMCE.isIE&&tinyMCE.getParam("setupcontent_reload",false)&&doc.title!="blank_page"){try{doc.location.href=tinyMCE.baseURL+"/blank.htm"}catch(ex){}window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",1000);return}if(!head||!doc.body){window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",10);return}tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/themes/"+inst.settings.theme+"/css/editor_content.css");tinyMCE.importCSS(inst.getDoc(),inst.settings.content_css);tinyMCE.dispatchCallback(inst,'init_instance_callback','initInstance',inst);if(tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')){inst.addShortcut('ctrl','z','lang_undo_desc','Undo');inst.addShortcut('ctrl','y','lang_redo_desc','Redo')}for(i=1;i<=6;i++)inst.addShortcut('ctrl',''+i,'','FormatBlock',false,'');inst.addShortcut('ctrl','7','','FormatBlock',false,'

');inst.addShortcut('ctrl','8','','FormatBlock',false,'

');inst.addShortcut('ctrl','9','','FormatBlock',false,'
');if(tinyMCE.isGecko){inst.addShortcut('ctrl','b','lang_bold_desc','Bold');inst.addShortcut('ctrl','i','lang_italic_desc','Italic');inst.addShortcut('ctrl','u','lang_underline_desc','Underline')}if(tinyMCE.getParam("convert_fonts_to_spans"))inst.getBody().setAttribute('id','mceSpanFonts');if(tinyMCE.settings.nowrap)doc.body.style.whiteSpace="nowrap";doc.body.dir=this.settings.directionality;doc.editorId=editor_id;if(!tinyMCE.isIE)doc.documentElement.editorId=editor_id;inst.setBaseHREF(tinyMCE.settings.base_href);if(tinyMCE.settings.convert_newlines_to_brs){content=tinyMCE.regexpReplace(content,"\r\n","
","gi");content=tinyMCE.regexpReplace(content,"\r","
","gi");content=tinyMCE.regexpReplace(content,"\n","
","gi")}content=tinyMCE.storeAwayURLs(content);content=tinyMCE._customCleanup(inst,"insert_to_editor",content);if(tinyMCE.isIE){window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["'+editor_id+'"].getDoc(), "'+editor_id+'");}catch(e){}',500);if(tinyMCE.settings.force_br_newlines)doc.styleSheets[0].addRule("p","margin: 0;");body=inst.getBody();body.editorId=editor_id}content=tinyMCE.cleanupHTMLCode(content);if(!tinyMCE.isIE){contentElement=inst.getDoc().createElement("body");doc=inst.getDoc();contentElement.innerHTML=content;if(tinyMCE.settings.cleanup_on_startup)tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,doc,this.settings,contentElement));else tinyMCE.setInnerHTML(inst.getBody(),content);tinyMCE.convertAllRelativeURLs(inst.getBody())}else{if(tinyMCE.settings.cleanup_on_startup){tinyMCE._setHTML(inst.getDoc(),content);try{tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,inst.contentDocument,this.settings,inst.getBody()))}catch(e){}}else tinyMCE._setHTML(inst.getDoc(),content)}tinyMCE.handleVisualAid(inst.getBody(),true,tinyMCE.settings.visual,inst);tinyMCE.dispatchCallback(inst,'setupcontent_callback','setupContent',editor_id,inst.getBody(),inst.getDoc());if(!tinyMCE.isIE)tinyMCE.addEventHandlers(inst);if(tinyMCE.isIE){tinyMCE.addEvent(inst.getBody(),"blur",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(inst.getBody(),"beforedeactivate",TinyMCE_Engine.prototype._eventPatch);if(!tinyMCE.isOpera){tinyMCE.addEvent(doc.body,"mousemove",TinyMCE_Engine.prototype.onMouseMove);tinyMCE.addEvent(doc.body,"beforepaste",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(doc.body,"drop",TinyMCE_Engine.prototype._eventPatch)}}inst.select();tinyMCE.selectedElement=inst.contentWindow.document.body;tinyMCE._customCleanup(inst,"insert_to_editor_dom",inst.getBody());tinyMCE._customCleanup(inst,"setup_content_dom",inst.getBody());tinyMCE._setEventsEnabled(inst.getBody(),false);tinyMCE.cleanupAnchors(inst.getDoc());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(inst.getDoc());inst.startContent=tinyMCE.trim(inst.getBody().innerHTML);inst.undoRedo.add({content:inst.startContent});if(tinyMCE.isGecko){tinyMCE.selectNodes(inst.getBody(),function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}if(tinyMCE.isGecko)inst.getBody().spellcheck=tinyMCE.getParam("gecko_spellcheck");tinyMCE._removeInternal(inst.getBody());inst.select();tinyMCE.triggerNodeChange(false,true)},storeAwayURLs:function(s){if(!s.match(/(mce_src|mce_href)/gi,s)){s=s.replace(new RegExp('src\\s*=\\s*\"([^ >\"]*)\"','gi'),'src="$1" mce_src="$1"');s=s.replace(new RegExp('href\\s*=\\s*\"([^ >\"]*)\"','gi'),'href="$1" mce_href="$1"')}return s},_removeInternal:function(n){if(tinyMCE.isGecko){tinyMCE.selectNodes(n,function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}},removeTinyMCEFormElements:function(form_obj){var i,elementId;if(!tinyMCE.getParam('hide_selects_on_submit'))return;if(typeof(form_obj)=="undefined"||form_obj==null)return;if(form_obj.nodeName!="FORM"){if(form_obj.form)form_obj=form_obj.form;else form_obj=tinyMCE.getParentElement(form_obj,"form")}if(form_obj==null)return;for(i=0;i");rng.collapse(false);rng.select();tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange(false);return false}}if(e.keyCode==8||e.keyCode==46){tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(e.target,"a");tinyMCE.imgElement=tinyMCE.getParentElement(e.target,"img");tinyMCE.triggerNodeChange(false)}return false;case"keyup":case"keydown":tinyMCE.hideMenus();tinyMCE.hasMouseMoved=false;if(inst&&inst.handleShortcut(e))return false;inst._fixRootBlocks();if(inst.settings.remove_trailing_nbsp)inst._fixTrailingNbsp();if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();inst=tinyMCE.selectedInstance;if(tinyMCE.isGecko&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");e.preventDefault();return false}}tinyMCE.selectedElement=null;tinyMCE.selectedNode=null;elm=tinyMCE.selectedInstance.getFocusElement();tinyMCE.linkElement=tinyMCE.getParentElement(elm,"a");tinyMCE.imgElement=tinyMCE.getParentElement(elm,"img");tinyMCE.selectedElement=elm;if(tinyMCE.isGecko&&e.type=="keyup"&&e.keyCode==9)tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(),true,tinyMCE.settings.visual,tinyMCE.selectedInstance);if(tinyMCE.isIE&&e.type=="keydown"&&e.keyCode==13)tinyMCE.enterKeyElement=tinyMCE.selectedInstance.getFocusElement();if(tinyMCE.isIE&&e.type=="keyup"&&e.keyCode==13){elm=tinyMCE.enterKeyElement;if(elm){var re=new RegExp('^HR|IMG|BR$','g');var dre=new RegExp('^H[1-6]$','g');if(!elm.hasChildNodes()&&!re.test(elm.nodeName)){if(dre.test(elm.nodeName))elm.innerHTML="  ";else elm.innerHTML=" "}}}keys=tinyMCE.posKeyCodes;var posKey=false;for(i=0;i';h+='{$'+lang+'}';h+=''}else{h+='';h+='{$'+lang+'}';h+=''}return h},getMenuButtonHTML:function(id,lang,img,mcmd,cmd,ui,val){var h='',m,x;mcmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+mcmd+'\');';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=tinyMCE.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);if(tinyMCE.isRealIE)h+='';else h+='';h+='';h+='';h+='';h+=''}else{if(tinyMCE.isRealIE)h+='';else h+='';h+='';h+='';h+='';h+=''}return h},_menuButtonEvent:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'')},addButtonMap:function(m){var i,a=m.replace(/\s+/,'').split(',');for(i=0;i0);if(tinyMCE.settings.custom_undo_redo){undoIndex=inst.undoRedo.undoIndex;undoLevels=inst.undoRedo.undoLevels.length}tinyMCE.dispatchCallback(inst,'handle_node_change_callback','handleNodeChange',editorId,elm,undoIndex,undoLevels,inst.visualAid,anySelection,setup_content)}if(this.selectedInstance&&(typeof(focus)=="undefined"||focus))this.selectedInstance.contentWindow.focus()},_customCleanup:function(inst,type,content){var pl,po,i,customCleanup;customCleanup=tinyMCE.settings.cleanup_callback;if(customCleanup!='')content=tinyMCE.resolveDots(tinyMCE.settings.cleanup_callback,window)(type,content,inst);po=tinyMCE.themes[tinyMCE.settings.theme];if(po&&po.cleanup)content=po.cleanup(type,content,inst);pl=inst.plugins;for(i=0;i0)className+=" ";className+=classNames[i]}return className},handleVisualAid:function(el,deep,state,inst,skip_dispatch){var i,x,y,tableElement,anchorName,oldW,oldH,bo,cn;if(!el)return;if(!skip_dispatch)tinyMCE.dispatchCallback(inst,'handle_visual_aid_callback','handleVisualAid',el,deep,state,inst);tableElement=null;switch(el.nodeName){case"TABLE":oldW=el.style.width;oldH=el.style.height;bo=tinyMCE.getAttrib(el,"border");bo=bo==''||bo=="0"?true:false;tinyMCE.setAttrib(el,"class",tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el,"class"),state&&bo));el.style.width=oldW;el.style.height=oldH;for(y=0;y0)return inst.cssClasses;if(!doc)return;styles=doc.styleSheets;if(styles&&styles.length>0){for(x=0;x'+tinyMCE.replaceVar(v,"pluginurl",o.baseURL)+'';return tinyMCE.replaceVar(v,"pluginurl",o.baseURL)}}o=tinyMCE.themes[tinyMCE.settings.theme];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return''+v+'';return v}return''},evalFunc:function(f,idx,a,o){o=!o?window:o;f=typeof(f)=='function'?f:o[f];return f.apply(o,Array.prototype.slice.call(a,idx))},dispatchCallback:function(i,p,n){return this.callFunc(i,p,n,0,this.dispatchCallback.arguments)},executeCallback:function(i,p,n){return this.callFunc(i,p,n,1,this.executeCallback.arguments)},execCommandCallback:function(i,p,n){return this.callFunc(i,p,n,2,this.execCommandCallback.arguments)},callFunc:function(ins,p,n,m,a){var l,i,on,o,s,v;s=m==2;l=tinyMCE.getParam(p,'');if(l!==''&&(v=tinyMCE.evalFunc(l,3,a))==s&&m>0)return true;if(ins!=null){for(i=0,l=ins.plugins;i0)return true}}l=tinyMCE.themes;for(on in l){o=l[on];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}return false},resolveDots:function(s,o){var i;if(typeof(s)=='string'){for(i=0,s=s.split('.');i':return'>'}return c}):s},add:function(c,m){var n;for(n in m)c.prototype[n]=m[n]},extend:function(p,np){var o={},n;o.parent=p;for(n in p)o[n]=p[n];for(n in np)o[n]=np[n];return o},hideMenus:function(){var e=tinyMCE.lastSelectedMenuBtn;if(tinyMCE.lastMenu){tinyMCE.lastMenu.hide();tinyMCE.lastMenu=null}if(e){tinyMCE.switchClass(e,tinyMCE.lastMenuBtnClass);tinyMCE.lastSelectedMenuBtn=null}}};var TinyMCE=TinyMCE_Engine;var tinyMCE=new TinyMCE_Engine();var tinyMCELang={};function TinyMCE_Control(settings){var t,i,tos,fu,p,x,fn,fu,pn,s=settings;this.undoRedoLevel=true;this.isTinyMCE_Control=true;this.enabled=true;this.settings=s;this.settings.theme=tinyMCE.getParam("theme","default");this.settings.width=tinyMCE.getParam("width",-1);this.settings.height=tinyMCE.getParam("height",-1);this.selection=new TinyMCE_Selection(this);this.undoRedo=new TinyMCE_UndoRedo(this);this.cleanup=new TinyMCE_Cleanup();this.shortcuts=[];this.hasMouseMoved=false;this.foreColor=this.backColor="#999999";this.data={};this.cssClasses=[];this.cleanup.init({valid_elements:s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,entities:s.entities,entity_encoding:s.entity_encoding,debug:s.cleanup_debug,indent:s.apply_source_formatting,invalid_elements:s.invalid_elements,verify_html:s.verify_html,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans});t=this.settings.theme;if(!tinyMCE.hasTheme(t)){fn=tinyMCE.callbacks;tos={};for(i=0;i0){for(i=0;i1&&tinyMCE.currentConfig!=this.settings.index){tinyMCE.settings=this.settings;tinyMCE.currentConfig=this.settings.index}},select:function(){var oldInst=tinyMCE.selectedInstance;if(oldInst!=this){if(oldInst)oldInst.execCommand('mceEndTyping');tinyMCE.dispatchCallback(this,'select_instance_callback','selectInstance',this,oldInst);tinyMCE.selectedInstance=this}},getBody:function(){return this.contentBody?this.contentBody:this.getDoc().body},getDoc:function(){return this.contentWindow.document},getWin:function(){return this.contentWindow},getContainerWin:function(){return this.containerWindow?this.containerWindow:window},getViewPort:function(){return tinyMCE.getViewPort(this.getWin())},getParentNode:function(n,f){return tinyMCE.getParentNode(n,f,this.getBody())},getParentElement:function(n,na,f){return tinyMCE.getParentElement(n,na,f,this.getBody())},getParentBlockElement:function(n){return tinyMCE.getParentBlockElement(n,this.getBody())},resizeToContent:function(){var d=this.getDoc(),b=d.body,de=d.documentElement;this.iframeElement.style.height=(tinyMCE.isRealIE)?b.scrollHeight:de.offsetHeight+'px'},addShortcut:function(m,k,d,cmd,ui,va){var n=typeof(k)=="number",ie=tinyMCE.isIE,c,sc,i,scl=this.shortcuts;if(!tinyMCE.getParam('custom_shortcuts'))return false;m=m.toLowerCase();k=ie&&!n?k.toUpperCase():k;c=n?null:k.charCodeAt(0);d=d&&d.indexOf('lang_')==0?tinyMCE.getLang(d):d;sc={alt:m.indexOf('alt')!=-1,ctrl:m.indexOf('ctrl')!=-1,shift:m.indexOf('shift')!=-1,charCode:c,keyCode:n?k:(ie?c:null),desc:d,cmd:cmd,ui:ui,val:va};for(i=0;i1&&/(^\u00a0|\u00a0$)/.test(v)){e.firstChild.nodeValue=v.replace(/(^\u00a0|\u00a0$)/,'');s.selectNode(e.firstChild,true,false,false);}}},_setUseCSS:function(b){var d=this.getDoc();try{d.execCommand("useCSS",false,!b)}catch(ex){}try{d.execCommand("styleWithCSS",false,b)}catch(ex){}if(!tinyMCE.getParam("table_inline_editing"))try{d.execCommand('enableInlineTableEditing',false,"false")}catch(ex){}if(!tinyMCE.getParam("object_resizing"))try{d.execCommand('enableObjectResizing',false,"false")}catch(ex){}},execCommand:function(command,user_interface,value){var i,x,z,align,img,div,doc=this.getDoc(),win=this.getWin(),focusElm=this.getFocusElement();if(!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel','gi').test(command))this.undoBookmark=null;if(!tinyMCE.isIE&&!this.useCSS){this._setUseCSS(false);this.useCSS=true}this.contentDocument=doc;if(!/mceStartTyping|mceEndTyping/.test(command)){if(tinyMCE.execCommandCallback(this,'execcommand_callback','execCommand',this.editorId,this.getBody(),command,user_interface,value))return}if(focusElm&&focusElm.nodeName=="IMG"){align=focusElm.getAttribute('align');img=command=="JustifyCenter"?focusElm.cloneNode(false):focusElm;switch(command){case"JustifyLeft":if(align=='left')img.removeAttribute('align');else img.setAttribute('align','left');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyCenter":img.removeAttribute('align');div=tinyMCE.getParentElement(focusElm,"div");if(div&&div.style.textAlign=="center"){if(div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div)}else{div=this.getDoc().createElement("div");div.style.textAlign='center';div.appendChild(img);focusElm.parentNode.replaceChild(div,focusElm)}this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyRight":if(align=='right')img.removeAttribute('align');else img.setAttribute('align','right');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return}}if(tinyMCE.settings.force_br_newlines){var alignValue="";if(doc.selection.type!="Control"){switch(command){case"JustifyLeft":alignValue="left";break;case"JustifyCenter":alignValue="center";break;case"JustifyFull":alignValue="justify";break;case"JustifyRight":alignValue="right";break}if(alignValue!==''){var rng=doc.selection.createRange();if((divElm=tinyMCE.getParentElement(rng.parentElement(),"div"))!=null)divElm.setAttribute("align",alignValue);else if(rng.pasteHTML&&rng.htmlText.length>0)rng.pasteHTML('
'+rng.htmlText+"
");tinyMCE.triggerNodeChange();return}}}switch(command){case"mceRepaint":this.repaint();return true;case"unlink":if(tinyMCE.isGecko&&this.getSel().isCollapsed){focusElm=tinyMCE.getParentElement(focusElm,'A');if(focusElm)this.selection.selectNode(focusElm,false)}this.getDoc().execCommand(command,user_interface,value);tinyMCE.isGecko&&this.getSel().collapseToEnd();tinyMCE.triggerNodeChange();return true;case"InsertUnorderedList":case"InsertOrderedList":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"Strikethrough":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"mceSelectNode":this.selection.selectNode(value);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=value;break;case"FormatBlock":if(value==null||value==''){var elm=tinyMCE.getParentElement(this.getFocusElement(),"p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");if(elm)this.execCommand("mceRemoveNode",false,elm)}else{if(!this.cleanup.isValid(value))return true;if(tinyMCE.isGecko&&new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>','gi').test(value))value=value.replace(/[^a-z]/gi,'');if(tinyMCE.isIE&&new RegExp('blockquote|code|samp','gi').test(value)){var b=this.selection.getBookmark();this.getDoc().execCommand("FormatBlock",false,'

');tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()),value);this.selection.moveToBookmark(b)}else this.getDoc().execCommand("FormatBlock",false,value)}tinyMCE.triggerNodeChange();break;case"mceRemoveNode":if(!value)value=tinyMCE.getParentElement(this.getFocusElement());if(tinyMCE.isIE){value.outerHTML=value.innerHTML}else{var rng=value.ownerDocument.createRange();rng.setStartBefore(value);rng.setEndAfter(value);rng.deleteContents();rng.insertNode(rng.createContextualFragment(value.innerHTML))}tinyMCE.triggerNodeChange();break;case"mceSelectNodeDepth":var parentNode=this.getFocusElement();for(i=0;parentNode;i++){if(parentNode.nodeName.toLowerCase()=="body")break;if(parentNode.nodeName.toLowerCase()=="#text"){i--;parentNode=parentNode.parentNode;continue}if(i==value){this.selection.selectNode(parentNode,false);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=parentNode;return}parentNode=parentNode.parentNode}break;case"mceSetStyleInfo":case"SetStyleInfo":var rng=this.getRng();var sel=this.getSel();var scmd=value.command;var sname=value.name;var svalue=value.value==null?'':value.value;var wrapper=value.wrapper?value.wrapper:"span";var parentElm=null;var invalidRe=new RegExp("^BODY|HTML$","g");var invalidParentsRe=tinyMCE.settings.merge_styles_invalid_parents!==''?new RegExp(tinyMCE.settings.merge_styles_invalid_parents,"gi"):null;if(tinyMCE.isIE){if(rng.item)parentElm=rng.item(0);else{var pelm=rng.parentElement();var prng=doc.selection.createRange();prng.moveToElementText(pelm);if(rng.htmlText==prng.htmlText||rng.boundingWidth==0){if(invalidParentsRe==null||!invalidParentsRe.test(pelm.nodeName))parentElm=pelm}}}else{var felm=this.getFocusElement();if(sel.isCollapsed||(new RegExp('td|tr|tbody|table|img','gi').test(felm.nodeName)&&sel.anchorNode==felm.parentNode))parentElm=felm}if(parentElm&&!invalidRe.test(parentElm.nodeName)){if(scmd=="setstyle")tinyMCE.setStyleAttrib(parentElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(parentElm,sname,svalue);if(scmd=="removeformat"){parentElm.style.cssText='';tinyMCE.setAttrib(parentElm,'class','')}var ch=tinyMCE.getNodeTree(parentElm,[],1);for(z=0;z=0;i--){var elm=nodes[i];var isNew=tinyMCE.getAttrib(elm,"mce_new")=="true";elm.removeAttribute("mce_new");if(elm.childNodes&&elm.childNodes.length==1&&elm.childNodes[0].nodeType==1){this._mergeElements(scmd,elm,elm.childNodes[0],isNew);continue}if(elm.parentNode.childNodes.length==1&&!invalidRe.test(elm.nodeName)&&!invalidRe.test(elm.parentNode.nodeName)){if(invalidParentsRe==null||!invalidParentsRe.test(elm.parentNode.nodeName))this._mergeElements(scmd,elm.parentNode,elm,false)}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i],isEmpty=true;var tmp=doc.createElement("body");tmp.appendChild(elm.cloneNode(false));tmp.innerHTML=tmp.innerHTML.replace(new RegExp('style=""|class=""','gi'),'');if(new RegExp('','gi').test(tmp.innerHTML)){for(x=0;x0){value=tinyMCE.replaceVar(value,"selection",selectedText);tinyMCE.execCommand('mceInsertContent',false,value)}this._addBogusBR();tinyMCE.triggerNodeChange();break;case"mceSetAttribute":if(typeof(value)=='object'){var targetElms=(typeof(value.targets)=="undefined")?"p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address":value.targets;var targetNode=tinyMCE.getParentElement(this.getFocusElement(),targetElms);if(targetNode){targetNode.setAttribute(value.name,value.value);tinyMCE.triggerNodeChange()}}break;case"mceSetCSSClass":this.execCommand("mceSetStyleInfo",false,{command:"setattrib",name:"class",value:value});break;case"mceInsertRawHTML":var key='tiny_mce_marker';this.execCommand('mceBeginUndoLevel');this.execCommand('mceInsertContent',false,key);var scrollX=this.getBody().scrollLeft+this.getDoc().documentElement.scrollLeft;var scrollY=this.getBody().scrollTop+this.getDoc().documentElement.scrollTop;var html=this.getBody().innerHTML;if((pos=html.indexOf(key))!=-1)tinyMCE.setInnerHTML(this.getBody(),html.substring(0,pos)+value+html.substring(pos+key.length));this.contentWindow.scrollTo(scrollX,scrollY);this.execCommand('mceEndUndoLevel');break;case"mceInsertContent":if(!value)value='';var insertHTMLFailed=false;if(tinyMCE.isGecko||tinyMCE.isOpera){try{if(value.indexOf('<')==-1&&!value.match(/(&| |<|>)/g)){var r=this.getRng();var n=this.getDoc().createTextNode(tinyMCE.entityDecode(value));var s=this.getSel();var r2=r.cloneRange();s.removeAllRanges();r.deleteContents();r.insertNode(n);r2.selectNode(n);r2.collapse(false);s.removeAllRanges();s.addRange(r2)}else{value=tinyMCE.fixGeckoBaseHREFBug(1,this.getDoc(),value);this.getDoc().execCommand('inserthtml',false,value);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}}catch(ex){insertHTMLFailed=true}if(!insertHTMLFailed){tinyMCE.triggerNodeChange();return}}if(!tinyMCE.isIE){var isHTML=value.indexOf('<')!=-1;var sel=this.getSel();var rng=this.getRng();if(isHTML){if(tinyMCE.isSafari){var tmpRng=this.getDoc().createRange();tmpRng.setStart(this.getBody(),0);tmpRng.setEnd(this.getBody(),0);value=tmpRng.createContextualFragment(value)}else value=rng.createContextualFragment(value)}else{value=doc.createTextNode(tinyMCE.entityDecode(value))}if(tinyMCE.isSafari&&!isHTML){this.execCommand('InsertText',false,value.nodeValue);tinyMCE.triggerNodeChange();return true}else if(tinyMCE.isSafari&&isHTML){rng.deleteContents();rng.insertNode(value);tinyMCE.triggerNodeChange();return true}rng.deleteContents();if(rng.startContainer.nodeType==3){var node=rng.startContainer.splitText(rng.startOffset);node.parentNode.insertBefore(value,node)}else rng.insertNode(value);if(!isHTML){sel.selectAllChildren(doc.body);sel.removeAllRanges();var rng=doc.createRange();rng.selectNode(value);rng.collapse(false);sel.addRange(rng)}else rng.collapse(false);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}else{var rng=doc.selection.createRange(),tmpRng=null;var c=value.indexOf('"}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i';return h},_serializeAttribute:function(n,r,an){var av='',t,os=this.settings.on_save;if(os&&(an.indexOf('mce_')==0||an.indexOf('_moz')==0))return'';if(os&&this.mceAttribs[an])av=this._getAttrib(n,this.mceAttribs[an]);if(av.length==0)av=this._getAttrib(n,an);if(av.length==0&&r.defaultAttribs&&(t=r.defaultAttribs[an])){av=t;if(av=="mce_empty")return" "+an+'=""'}if(r.forceAttribs&&(t=r.forceAttribs[an]))av=t;if(os&&av.length!=0&&/^(src|href|longdesc)$/.test(an))av=this._urlConverter(this,n,av);if(av.length!=0&&r.validAttribValues&&r.validAttribValues[an]&&!r.validAttribValues[an].test(av))return"";if(av.length!=0&&av=="{$uid}")av="uid_"+(this.idCount++);if(av.length!=0){if(an.indexOf('on')!=0)av=this.xmlEncode(av,1);return" "+an+"="+'"'+av+'"'}return""},formatHTML:function(h){var s=this.settings,p='',i=0,li=0,o='',l;h=h.replace(/]*)>(.*?)<\/pre>/gi,function(a,b,c){c=c.replace(//gi,'\n');return''+c+''});h=h.replace(/\r/g,'');h='\n'+h;h=h.replace(new RegExp('\\n\\s+','gi'),'\n');h=h.replace(this.nlBeforeRe,'\n<$1$2>');h=h.replace(this.nlAfterRe,'<$1$2>\n');h=h.replace(this.nlBeforeAfterRe,'\n<$1$2$3>\n');h+='\n';while((i=h.indexOf('\n',i+1))!=-1){if((l=h.substring(li+1,i)).length!=0){if(this.ouRe.test(l)&&p.length>=s.indent_levels)p=p.substring(s.indent_levels);o+=p+l+'\n';if(this.inRe.test(l))p+=this.inStr}li=i}return o},xmlEncode:function(s){var cl=this,re=this.xmlEncodeRe;if(!this.entitiesDone)this._setupEntities();switch(this.settings.entity_encoding){case"raw":return tinyMCE.xmlEncode(s);case"named":return s.replace(re,function(c){var b=cl.entities[c.charCodeAt(0)];return b?'&'+b+';':c});case"numeric":return s.replace(re,function(c){return'&#'+c.charCodeAt(0)+';'})}return s},split:function(re,s){var i,l,o=[],c=s.split(re);for(i=0,l=c.length;i':'>'+h+'';return o},createTag:function(d,tn,a,h){var o=d.createElement(tn),n;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)tinyMCE.setAttrib(o,n,a[n])}}if(h)o.innerHTML=h;return o},getElementByAttributeValue:function(n,e,a,v){return(n=this.getElementsByAttributeValue(n,e,a,v)).length==0?null:n[0]},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i]*)>/gi,'');h=h.replace(/]*)>/gi,'');h=h.replace(/]*)>/gi,'');h=h.replace(/]*)>/gi,'');h=h.replace(/<\/strong>/gi,'');h=h.replace(/<\/em>/gi,'')}if(tinyMCE.isRealIE){h=h.replace(/\s\/>/g,'>');h=h.replace(/]*)>\u00A0?<\/p>/gi,' 

');h=h.replace(/]*)>\s* \s*<\/p>/gi,' 

');h=h.replace(/]*)>\s+<\/p>/gi,' 

');e.innerHTML=tinyMCE.uniqueTag+h;e.firstChild.removeNode(true);nl=e.getElementsByTagName("p");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.nodeName=='P'&&!n.hasChildNodes()&&!n.mce_keep)n.parentNode.removeChild(n)}}else{h=this.fixGeckoBaseHREFBug(1,e,h);e.innerHTML=h;this.fixGeckoBaseHREFBug(2,e,h)}},getOuterHTML:function(e){var d;if(tinyMCE.isIE)return e.outerHTML;d=e.ownerDocument.createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML},setOuterHTML:function(e,h,d){var d=typeof(d)=="undefined"?e.ownerDocument:d,i,nl,t;if(tinyMCE.isIE&&e.nodeType==1)e.outerHTML=h;else{t=d.createElement("body");t.innerHTML=h;for(i=0,nl=t.childNodes;i-1;i--){if(ar[i].specified&&ar[i].nodeValue)ne.setAttribute(ar[i].nodeName.toLowerCase(),ar[i].nodeValue)}ar=e.childNodes;for(i=0;i=strTok2.length){for(i=0;i=strTok2.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(strTok1.length=strTok1.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(breakPoint==1)return targetURL.path;for(i=0;i<(strTok1.length-(breakPoint-1));i++)outPath+="../";for(i=breakPoint-1;i=0;i--){if(baseURLParts[i].length==0)continue;newBaseURLParts[newBaseURLParts.length]=baseURLParts[i]}baseURLParts=newBaseURLParts.reverse();newRelURLParts=[];numBack=0;for(i=relURLParts.length-1;i>=0;i--){if(relURLParts[i].length==0||relURLParts[i]==".")continue;if(relURLParts[i]=='..'){numBack++;continue}if(numBack>0){numBack--;continue}newRelURLParts[newRelURLParts.length]=relURLParts[i]}relURLParts=newRelURLParts.reverse();len=baseURLParts.length-numBack;absPath=(len<=0?"":"/")+baseURLParts.slice(0,len).join('/')+"/"+relURLParts.join('/');start="";end="";relURL.protocol=baseURL.protocol;relURL.host=baseURL.host;relURL.port=baseURL.port;if(relURL.path.charAt(relURL.path.length-1)=="/")absPath+="/";relURL.path=absPath;return this.serializeURL(relURL)},convertURL:function(url,node,on_save){var dl=document.location,start,portPart,urlParts,baseUrlParts,tmpUrlParts,curl;var prot=dl.protocol,host=dl.hostname,port=dl.port;if(prot=="file:")return url;url=tinyMCE.regexpReplace(url,'(http|https):///','/');if(url.indexOf('mailto:')!=-1||url.indexOf('javascript:')!=-1||/^[ \t\r\n\+]*[#\?]/.test(url))return url;if(!tinyMCE.isIE&&!on_save&&url.indexOf("://")==-1&&url.charAt(0)!='/')return tinyMCE.settings.base_href+url;if(on_save&&tinyMCE.getParam('relative_urls')){curl=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(curl.charAt(0)=='/')curl=tinyMCE.settings.document_base_prefix+curl;urlParts=tinyMCE.parseURL(curl);tmpUrlParts=tinyMCE.parseURL(tinyMCE.settings.document_base_url);if(urlParts.host==tmpUrlParts.host&&(urlParts.port==tmpUrlParts.port))return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url,curl)}if(!tinyMCE.getParam('relative_urls')){urlParts=tinyMCE.parseURL(url);baseUrlParts=tinyMCE.parseURL(tinyMCE.settings.base_href);url=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(urlParts.anchor&&urlParts.path==baseUrlParts.path)return"#"+urlParts.anchor}if(tinyMCE.getParam('remove_script_host')){start="";portPart="";if(port!=='')portPart=":"+port;start=prot+"//"+host+portPart+"/";if(url.indexOf(start)==0)url=url.substring(start.length-1)}return url},convertAllRelativeURLs:function(body){var i,elms,src,href,mhref,msrc;elms=body.getElementsByTagName("img");for(i=0;ibookmark.index){try{rng.addElement(nl[bookmark.index])}catch(ex){}}}else{try{if(bookmark.start<0)return true;rng=inst.getSel().createRange();rng.moveToElementText(inst.getBody());rng.collapse(true);rng.moveStart('character',bookmark.start);rng.moveEnd('character',bookmark.length)}catch(ex){return true}}rng.select();win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}if(tinyMCE.isGecko||tinyMCE.isOpera){if(!sel)return false;if(bookmark.rng){sel.removeAllRanges();sel.addRange(bookmark.rng)}if(bookmark.start!=-1&&bookmark.end!=-1){try{sd=this._getTextPos(b,bookmark.start,bookmark.end);rng=doc.createRange();rng.setStart(sd.startNode,sd.startOffset);rng.setEnd(sd.endNode,sd.endOffset);sel.removeAllRanges();sel.addRange(rng);if(!tinyMCE.isOpera)win.focus()}catch(ex){}}win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}return false},_getPosText:function(r,sn,en){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d}p+=n.nodeValue?n.nodeValue.length:0}return null},_getTextPos:function(r,sp,ep){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){p+=n.nodeValue?n.nodeValue.length:0;if(p>=sp&&!d.startNode){d.startNode=n;d.startOffset=sp-(p-n.nodeValue.length)}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-n.nodeValue.length);return d}}return null},selectNode:function(node,collapse,select_text_node,to_start){var inst=this.instance,sel,rng,nodes;if(!node)return;if(typeof(collapse)=="undefined")collapse=true;if(typeof(select_text_node)=="undefined")select_text_node=false;if(typeof(to_start)=="undefined")to_start=true;if(inst.settings.auto_resize)inst.resizeToContent();if(tinyMCE.isRealIE){rng=inst.getDoc().body.createTextRange();try{rng.moveToElementText(node);if(collapse)rng.collapse(to_start);rng.select()}catch(e){}}else{sel=this.getSel();if(!sel)return;if(tinyMCE.isSafari){sel.setBaseAndExtent(node,0,node,node.innerText.length);if(collapse){if(to_start)sel.collapseToStart();else sel.collapseToEnd()}this.scrollToNode(node);return}rng=inst.getDoc().createRange();if(select_text_node){nodes=tinyMCE.getNodeTree(node,[],3);if(nodes.length>0)rng.selectNodeContents(nodes[0]);else rng.selectNodeContents(node)}else rng.selectNode(node);if(collapse){if(!to_start&&node.nodeType==3){rng.setStart(node,node.nodeValue.length);rng.setEnd(node,node.nodeValue.length)}else rng.collapse(to_start)}sel.removeAllRanges();sel.addRange(rng)}this.scrollToNode(node);tinyMCE.selectedElement=null;if(node.nodeType==1)tinyMCE.selectedElement=node},scrollToNode:function(node){var inst=this.instance,w=inst.getWin(),vp=inst.getViewPort(),pos=tinyMCE.getAbsPosition(node),cvp,p,cwin;if(pos.absLeftvp.left+vp.width||pos.absTopvp.top+(vp.height-25))w.scrollTo(pos.absLeft,pos.absTop-vp.height+25);if(inst.settings.auto_resize){cwin=inst.getContainerWin();cvp=tinyMCE.getViewPort(cwin);p=this.getAbsPosition(node);if(p.absLeftcvp.left+cvp.width||p.absTopcvp.top+cvp.height)cwin.scrollTo(p.absLeft,p.absTop-cvp.height+25)}},getAbsPosition:function(n){var pos=tinyMCE.getAbsPosition(n),ipos=tinyMCE.getAbsPosition(this.instance.iframeElement);return{absLeft:ipos.absLeft+pos.absLeft,absTop:ipos.absTop+pos.absTop}},getSel:function(){var inst=this.instance;if(tinyMCE.isRealIE)return inst.getDoc().selection;return inst.contentWindow.getSelection()},getRng:function(){var s=this.getSel();if(s==null)return null;if(tinyMCE.isRealIE)return s.createRange();if(tinyMCE.isSafari&&!s.getRangeAt)return''+window.getSelection();if(s.rangeCount>0)return s.getRangeAt(0);return null},isCollapsed:function(){var r=this.getRng();if(r.item)return false;return r.boundingWidth==0||this.getSel().isCollapsed},collapse:function(b){var r=this.getRng(),s=this.getSel();if(r.select){r.collapse(b);r.select()}else{if(b)s.collapseToStart();else s.collapseToEnd()}},getFocusElement:function(){var inst=this.instance,doc,rng,sel,elm;if(tinyMCE.isRealIE){doc=inst.getDoc();rng=doc.selection.createRange();elm=rng.item?rng.item(0):rng.parentElement()}else{if(!tinyMCE.isSafari&&inst.isHidden())return inst.getBody();sel=this.getSel();rng=this.getRng();if(!sel||!rng)return null;elm=rng.commonAncestorContainer;if(!rng.collapsed){if(rng.startContainer==rng.endContainer){if(rng.startOffset-rng.endOffset<2){if(rng.startContainer.hasChildNodes())elm=rng.startContainer.childNodes[rng.startOffset]}}}elm=tinyMCE.getParentElement(elm);}return elm}};function TinyMCE_UndoRedo(inst){this.instance=inst;this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.undoRedo=true};TinyMCE_UndoRedo.prototype={add:function(l){var b,customUndoLevels,newHTML,inst=this.instance,i,ul,ur;if(l){this.undoLevels[this.undoLevels.length]=l;return true}if(this.typingUndoIndex!=-1){this.undoIndex=this.typingUndoIndex;if(tinyMCE.typingUndoIndex!=-1)tinyMCE.undoIndex=tinyMCE.typingUndoIndex}newHTML=tinyMCE.trim(inst.getBody().innerHTML);if(this.undoLevels[this.undoIndex]&&newHTML!=this.undoLevels[this.undoIndex].content){inst.isNotDirty=false;tinyMCE.dispatchCallback(inst,'onchange_callback','onChange',inst);customUndoLevels=tinyMCE.settings.custom_undo_redo_levels;if(customUndoLevels!=-1&&this.undoLevels.length>customUndoLevels){for(i=0;i0){this.undoIndex--;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}},redo:function(){var inst=this.instance;tinyMCE.execCommand("mceEndTyping");if(this.undoIndex<(this.undoLevels.length-1)){this.undoIndex++;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}tinyMCE.triggerNodeChange()}};var TinyMCE_ForceParagraphs={_insertPara:function(inst,e){var doc=inst.getDoc(),sel=inst.getSel(),body=inst.getBody(),win=inst.contentWindow,rng=sel.getRangeAt(0);var rootElm=doc.documentElement,blockName="P",startNode,endNode,startBlock,endBlock;var rngBefore,rngAfter,direct,startNode,startOffset,endNode,endOffset,b=tinyMCE.isOpera?inst.selection.getBookmark():null;var paraBefore,paraAfter,startChop,endChop,contents,i;function isEmpty(para){var nodes;function isEmptyHTML(html){return html.replace(new RegExp('[ \t\r\n]+','g'),'').toLowerCase()==''}if(para.getElementsByTagName("img").length>0)return false;if(para.getElementsByTagName("table").length>0)return false;if(para.getElementsByTagName("hr").length>0)return false;nodes=tinyMCE.getNodeTree(para,[],3);for(i=0;i <"+blockName+"> ";paraAfter=body.childNodes[1]}inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true}if(startChop.nodeName==blockName)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);rngBefore.setEnd(startNode,startOffset);paraBefore.appendChild(rngBefore.cloneContents());rngAfter.setEndAfter(endChop);rngAfter.setStart(endNode,endOffset);contents=rngAfter.cloneContents();if(contents.firstChild&&contents.firstChild.nodeName==blockName){paraAfter.innerHTML=contents.firstChild.innerHTML}else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML=" ";if(isEmpty(paraAfter))paraAfter.innerHTML=" ";rng=doc.createRange();if(!startChop.previousSibling&&startChop.parentNode.nodeName.toUpperCase()==blockName){rng.setStartBefore(startChop.parentNode)}else{if(rngBefore.startContainer.nodeName.toUpperCase()==blockName&&rngBefore.startOffset==0)rng.setStartBefore(rngBefore.startContainer);else rng.setStart(rngBefore.startContainer,rngBefore.startOffset)}if(!endChop.nextSibling&&endChop.parentNode.nodeName.toUpperCase()==blockName)rng.setEndAfter(endChop.parentNode);else rng.setEnd(rngAfter.endContainer,rngAfter.endOffset);rng.deleteContents();if(tinyMCE.isOpera){rng.insertNode(paraBefore);rng.insertNode(paraAfter)}else{rng.insertNode(paraAfter);rng.insertNode(paraBefore)}paraAfter.normalize();paraBefore.normalize();inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true},_handleBackSpace:function(inst){var r=inst.getRng(),sn=r.startContainer,nv,s=false;if(sn&&sn.nextSibling&&sn.nextSibling.nodeName=="BR"&&sn.parentNode.nodeName!="BODY"){nv=sn.nodeValue;if(nv!=null&&r.startOffset==nv.length)sn.nextSibling.parentNode.removeChild(sn.nextSibling)}if(inst.settings.auto_resize)inst.resizeToContent();return s}};function TinyMCE_Layer(id,bm){this.id=id;this.blockerElement=null;this.events=false;this.element=null;this.blockMode=typeof(bm)!='undefined'?bm:true;this.doc=document};TinyMCE_Layer.prototype={moveRelativeTo:function(re,p){var rep=this.getAbsPosition(re),e=this.getElement(),x,y;var w=parseInt(re.offsetWidth),h=parseInt(re.offsetHeight);var ew=parseInt(e.offsetWidth),eh=parseInt(e.offsetHeight);switch(p){case"tl":x=rep.absLeft;y=rep.absTop;break;case"tr":x=rep.absLeft+w;y=rep.absTop;break;case"bl":x=rep.absLeft;y=rep.absTop+h;break;case"br":x=rep.absLeft+w;y=rep.absTop+h;break;case"cc":x=rep.absLeft+(w/ 2) - (ew /2);y=rep.absTop+(h/ 2) - (eh /2);break}this.moveTo(x,y)},moveBy:function(x,y){var e=this.getElement();this.moveTo(parseInt(e.style.left)+x,parseInt(e.style.top)+y)},moveTo:function(x,y){var e=this.getElement();e.style.left=x+"px";e.style.top=y+"px";this.updateBlocker()},resizeBy:function(w,h){var e=this.getElement();this.resizeTo(parseInt(e.style.width)+w,parseInt(e.style.height)+h)},resizeTo:function(w,h){var e=this.getElement();if(w!=null)e.style.width=w+"px";if(h!=null)e.style.height=h+"px";this.updateBlocker()},show:function(){var el=this.getElement();if(el){el.style.display='block';this.updateBlocker()}},hide:function(){var el=this.getElement();if(el){el.style.display='none';this.updateBlocker()}},isVisible:function(){return this.getElement().style.display=='block'},getElement:function(){if(!this.element)this.element=this.doc.getElementById(this.id);return this.element},setBlockMode:function(s){this.blockMode=s},updateBlocker:function(){var e,b,x,y,w,h;b=this.getBlocker();if(b){if(this.blockMode){e=this.getElement();x=this.parseInt(e.style.left);y=this.parseInt(e.style.top);w=this.parseInt(e.offsetWidth);h=this.parseInt(e.offsetHeight);b.style.left=x+'px';b.style.top=y+'px';b.style.width=w+'px';b.style.height=h+'px';b.style.display=e.style.display}else b.style.display='none'}},getBlocker:function(){var d,b;if(!this.blockerElement&&this.blockMode){d=this.doc;b=d.getElementById(this.id+"_blocker");if(!b){b=d.createElement("iframe");b.setAttribute('id',this.id+"_blocker");b.style.cssText='display: none; position: absolute; left: 0; top: 0';b.src='javascript:false;';b.frameBorder='0';b.scrolling='no';d.body.appendChild(b)}this.blockerElement=b}return this.blockerElement},getAbsPosition:function(n){var p={absLeft:0,absTop:0};while(n){p.absLeft+=n.offsetLeft;p.absTop+=n.offsetTop;n=n.offsetParent}return p},create:function(n,c,p,h){var d=this.doc,e=d.createElement(n);e.setAttribute('id',this.id);if(c)e.className=c;if(!p)p=d.body;if(h)e.innerHTML=h;p.appendChild(e);return this.element=e},exists:function(){return this.doc.getElementById(this.id)!=null},parseInt:function(s){if(s==null||s=='')return 0;return parseInt(s)},remove:function(){var e=this.getElement(),b=this.getBlocker();if(e)e.parentNode.removeChild(e);if(b)b.parentNode.removeChild(b)}};function TinyMCE_Menu(){var id;if(typeof(tinyMCE.menuCounter)=="undefined")tinyMCE.menuCounter=0;id="mc_menu_"+tinyMCE.menuCounter++;TinyMCE_Layer.call(this,id,true);this.id=id;this.items=[];this.needsUpdate=true};TinyMCE_Menu.prototype=tinyMCE.extend(TinyMCE_Layer.prototype,{init:function(s){var n;this.settings={separator_class:'mceMenuSeparator',title_class:'mceMenuTitle',disabled_class:'mceMenuDisabled',menu_class:'mceMenu',drop_menu:true};for(n in s)this.settings[n]=s[n];this.create('div',this.settings.menu_class)},clear:function(){this.items=[]},addTitle:function(t){this.add({type:'title',text:t})},addDisabled:function(t){this.add({type:'disabled',text:t})},addSeparator:function(){this.add({type:'separator'})},addItem:function(t,js){this.add({text:t,js:js})},add:function(mi){this.items[this.items.length]=mi;this.needsUpdate=true},update:function(){var e=this.getElement(),h='',i,t,m=this.items,s=this.settings;if(this.settings.drop_menu)h+='';h+='';for(i=0;i'}h+='
';break;case'title':h+='
'+t+'';break;case'disabled':h+='
'+t+'';break;default:h+='
'+t+''}h+='
';e.innerHTML=h;this.needsUpdate=false;this.updateBlocker()},show:function(){var nl,i;if(tinyMCE.lastMenu==this)return;if(this.needsUpdate)this.update();if(tinyMCE.lastMenu&&tinyMCE.lastMenu!=this)tinyMCE.lastMenu.hide();TinyMCE_Layer.prototype.show.call(this);if(!tinyMCE.isOpera){}tinyMCE.lastMenu=this}});tinyMCE.add(TinyMCE_Engine,{debug:function(){var m="",a,i,l=tinyMCE.log.length;for(i=0,a=this.debug.arguments;i');this._def("font_size_classes",'');this._def("font_size_style_values",'xx-small,x-small,small,medium,large,x-large,xx-large',true);this._def("event_elements",'a,img',true);this._def("convert_urls",true);this._def("table_inline_editing",false);this._def("object_resizing",true);this._def("custom_shortcuts",true);this._def("convert_on_click",false);this._def("content_css",'');this._def("fix_list_elements",true);this._def("fix_table_elements",false);this._def("strict_loading_mode",document.contentType=='application/xhtml+xml');this._def("hidden_tab_class",'');this._def("display_tab_class",'');this._def("gecko_spellcheck",false);this._def("hide_selects_on_submit",true);this._def("forced_root_block",false);this._def("remove_trailing_nbsp",false);this._def("save_on_tinymce_forms",false);if(this.isMSIE&&!this.isOpera)this.settings.strict_loading_mode=false;if(this.isMSIE&&this.settings.browsers.indexOf('msie')==-1)return;if(this.isGecko&&this.settings.browsers.indexOf('gecko')==-1)return;if(this.isSafari&&this.settings.browsers.indexOf('safari')==-1)return;if(this.isOpera&&this.settings.browsers.indexOf('opera')==-1)return;baseHREF=tinyMCE.settings.document_base_url;h=document.location.href;p=h.indexOf('://');if(p>0&&document.location.protocol!="file:"){p=h.indexOf('/',p+3);h=h.substring(0,p);if(baseHREF.indexOf('://')==-1)baseHREF=h+baseHREF;tinyMCE.settings.document_base_url=baseHREF;tinyMCE.settings.document_base_prefix=h}if(baseHREF.indexOf('?')!=-1)baseHREF=baseHREF.substring(0,baseHREF.indexOf('?'));this.settings.base_href=baseHREF.substring(0,baseHREF.lastIndexOf('/'))+"/";theme=this.settings.theme;this.inlineStrict='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';this.inlineTransitional='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';this.blockElms='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';this.blockRegExp=new RegExp("^("+this.blockElms+")$","i");this.posKeyCodes=[13,45,36,35,33,34,37,38,39,40];this.uniqueURL='javascript:void(091039730);';this.uniqueTag='';this.callbacks=['onInit','getInfo','getEditorTemplate','setupContent','onChange','onPageLoad','handleNodeChange','initInstance','execCommand','getControlHTML','handleEvent','cleanup','removeInstance'];this.settings.theme_href=tinyMCE.baseURL+"/themes/"+theme;if(!tinyMCE.isIE||tinyMCE.isOpera)this.settings.force_br_newlines=false;if(tinyMCE.getParam("popups_css",false)){cssPath=tinyMCE.getParam("popups_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.popups_css=this.documentBasePath+"/"+cssPath;else this.settings.popups_css=cssPath}else this.settings.popups_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_popup.css";if(tinyMCE.getParam("editor_css",false)){cssPath=tinyMCE.getParam("editor_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.editor_css=this.documentBasePath+"/"+cssPath;else this.settings.editor_css=cssPath}else{if(this.settings.editor_css!=='')this.settings.editor_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_ui.css"}if(this.configs.length==0){if(typeof(TinyMCECompressed)=="undefined"){tinyMCE.addEvent(window,"DOMContentLoaded",TinyMCE_Engine.prototype.onLoad);if(tinyMCE.isRealIE){if(document.body)tinyMCE.addEvent(document.body,"readystatechange",TinyMCE_Engine.prototype.onLoad);else tinyMCE.addEvent(document,"readystatechange",TinyMCE_Engine.prototype.onLoad)}tinyMCE.addEvent(window,"load",TinyMCE_Engine.prototype.onLoad);tinyMCE._addUnloadEvents()}}this.loadScript(tinyMCE.baseURL+'/themes/'+this.settings.theme+'/editor_template'+tinyMCE.srcMode+'.js');this.loadScript(tinyMCE.baseURL+'/langs/'+this.settings.language+'.js');this.loadCSS(this.settings.editor_css);p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i&"]','g')},_addUnloadEvents:function(){var st=tinyMCE.settings.add_unload_trigger;if(tinyMCE.isIE){if(st){tinyMCE.addEvent(window,"unload",TinyMCE_Engine.prototype.unloadHandler);tinyMCE.addEvent(window.document,"beforeunload",TinyMCE_Engine.prototype.unloadHandler)}}else{if(st)tinyMCE.addEvent(window,"unload",function(){tinyMCE.triggerSave(true,true)})}},_def:function(key,def_val,t){var v=tinyMCE.getParam(key,def_val);v=t?v.replace(/\s+/g,""):v;this.settings[key]=v},hasPlugin:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},addPlugin:function(n,p){var op=this.plugins[n];p.baseURL=op?op.baseURL:tinyMCE.baseURL+"/plugins/"+n;this.plugins[n]=p;this.loadNextScript()},setPluginBaseURL:function(n,u){var op=this.plugins[n];if(op)op.baseURL=u;else this.plugins[n]={baseURL:u}},loadPlugin:function(n,u){u=u.indexOf('.js')!=-1?u.substring(0,u.lastIndexOf('/')):u;u=u.charAt(u.length-1)=='/'?u.substring(0,u.length-1):u;this.plugins[n]={baseURL:u};this.loadScript(u+"/editor_plugin"+(tinyMCE.srcMode?'_src':'')+".js")},hasTheme:function(n){return typeof(this.themes[n])!="undefined"&&this.themes[n]!=null},addTheme:function(n,t){this.themes[n]=t;this.loadNextScript()},addMenu:function(n,m){this.menus[n]=m},hasMenu:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},loadScript:function(url){var i;for(i=0;i');this.loadedFiles[this.loadedFiles.length]=url},loadNextScript:function(){var d=document,se;if(!tinyMCE.settings.strict_loading_mode)return;if(this.loadingIndex0){for(i=0,lflen=this.loadedFiles.length;i');this.loadedFiles[this.loadedFiles.length]=ar[x]}}}},importCSS:function(doc,css){var css_ary=css.replace(/\s+/,'').split(',');var csslen,elm,headArr,x,css_file;for(x=0,csslen=css_ary.length;x0){if(css_file.indexOf('://')==-1&&css_file.charAt(0)!='/')css_file=this.documentBasePath+"/"+css_file;if(typeof(doc.createStyleSheet)=="undefined"){elm=doc.createElement("link");elm.rel="stylesheet";elm.href=css_file;if((headArr=doc.getElementsByTagName("head"))!=null&&headArr.length>0)headArr[0].appendChild(elm)}else doc.createStyleSheet(css_file)}}},confirmAdd:function(e,settings){var elm=tinyMCE.isIE?event.srcElement:e.target;var elementId=elm.name?elm.name:elm.id;tinyMCE.settings=settings;if(tinyMCE.settings.convert_on_click||(!elm.getAttribute('mce_noask')&&confirm(tinyMCELang.lang_edit_confirm)))tinyMCE.addMCEControl(elm,elementId);elm.setAttribute('mce_noask','true')},updateContent:function(form_element_name){var formElement,n,inst,doc;formElement=document.getElementById(form_element_name);for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();if(inst.formElement==formElement){doc=inst.getDoc();tinyMCE._setHTML(doc,inst.formElement.value);if(!tinyMCE.isIE)doc.body.innerHTML=tinyMCE._cleanupHTML(inst,doc,this.settings,doc.body,inst.visualAid)}}},addMCEControl:function(replace_element,form_element_name,target_document){var id="mce_editor_"+tinyMCE.idCounter++;var inst=new TinyMCE_Control(tinyMCE.settings);inst.editorId=id;this.instances[id]=inst;inst._onAdd(replace_element,form_element_name,target_document)},removeInstance:function(ti){var t=[],n,i;for(n in tinyMCE.instances){i=tinyMCE.instances[n];if(tinyMCE.isInstance(i)&&ti!=i)t[n]=i}tinyMCE.instances=t;n=[];t=tinyMCE.undoLevels;for(i=0;i0){tinyMCE.nextUndoRedoAction='Undo';inst=this.undoLevels[--this.undoIndex];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Undo')}}else inst.execCommand('Undo');return true;case"Redo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex<=this.undoLevels.length-1){tinyMCE.nextUndoRedoAction='Redo';inst=this.undoLevels[this.undoIndex++];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Redo')}}else inst.execCommand('Redo');return true;case'mceFocus':inst=tinyMCE.getInstanceById(value);if(inst)inst.getWin().focus();return;case"mceAddControl":case"mceAddEditor":tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceAddFrameControl":tinyMCE.addMCEControl(tinyMCE._getElementById(value.element,value.document),value.element,value.document);return;case"mceRemoveControl":case"mceRemoveEditor":tinyMCE.removeMCEControl(value);return;case"mceToggleEditor":inst=tinyMCE.getInstanceById(value);if(inst){pe=document.getElementById(inst.editorId+'_parent');te=inst.oldTargetElement;if(typeof(inst.enabled)=='undefined')inst.enabled=true;inst.enabled=!inst.enabled;if(!inst.enabled){pe.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')te.value=inst.getHTML();else te.innerHTML=inst.getHTML();te.style.display=inst.oldTargetDisplay;tinyMCE.dispatchCallback(inst,'hide_instance_callback','hideInstance',inst)}else{pe.style.display='block';te.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')inst.setHTML(te.value);else inst.setHTML(te.innerHTML);inst.useCSS=false;tinyMCE.dispatchCallback(inst,'show_instance_callback','showInstance',inst)}}else tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceResetDesignMode":if(tinyMCE.isGecko){for(n in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[n]))continue;try{tinyMCE.instances[n].getDoc().designMode="off";tinyMCE.instances[n].getDoc().designMode="on";tinyMCE.instances[n].useCSS=false}catch(e){}}}return}if(inst){inst.execCommand(command,user_interface,value)}else if(tinyMCE.settings.focus_alert)alert(tinyMCELang.lang_focus_alert)},_createIFrame:function(replace_element,doc,win){var iframe,id=replace_element.getAttribute("id");var aw,ah;if(typeof(doc)=="undefined")doc=document;if(typeof(win)=="undefined")win=window;iframe=doc.createElement("iframe");aw=""+tinyMCE.settings.area_width;ah=""+tinyMCE.settings.area_height;if(aw.indexOf('%')==-1){aw=parseInt(aw);aw=(isNaN(aw)||aw<0)?300:aw;aw=aw+"px"}if(ah.indexOf('%')==-1){ah=parseInt(ah);ah=(isNaN(ah)||ah<0)?240:ah;ah=ah+"px"}iframe.setAttribute("id",id);iframe.setAttribute("name",id);iframe.setAttribute("class","mceEditorIframe");iframe.setAttribute("border","0");iframe.setAttribute("frameBorder","0");iframe.setAttribute("marginWidth","0");iframe.setAttribute("marginHeight","0");iframe.setAttribute("leftMargin","0");iframe.setAttribute("topMargin","0");iframe.setAttribute("width",aw);iframe.setAttribute("height",ah);iframe.setAttribute("allowtransparency","true");iframe.className='mceEditorIframe';if(tinyMCE.settings.auto_resize)iframe.setAttribute("scrolling","no");if(tinyMCE.isRealIE)iframe.setAttribute("src",this.settings.default_document);iframe.style.width=aw;iframe.style.height=ah;if(tinyMCE.settings.strict_loading_mode)iframe.style.marginBottom='-5px';if(tinyMCE.isRealIE)replace_element.outerHTML=iframe.outerHTML;else replace_element.parentNode.replaceChild(iframe,replace_element);if(tinyMCE.isRealIE)return win.frames[id];else return iframe},setupContent:function(editor_id){var inst=tinyMCE.instances[editor_id],i,doc=inst.getDoc(),head=doc.getElementsByTagName('head').item(0);var content=inst.startContent,contentElement,body;if(tinyMCE.settings.strict_loading_mode){content=content.replace(/</g,'<');content=content.replace(/>/g,'>');content=content.replace(/"/g,'"');content=content.replace(/&/g,'&')}tinyMCE.selectedInstance=inst;inst.switchSettings();if(!tinyMCE.isIE&&tinyMCE.getParam("setupcontent_reload",false)&&doc.title!="blank_page"){try{doc.location.href=tinyMCE.baseURL+"/blank.htm"}catch(ex){}window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",1000);return}if(!head||!doc.body){window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",10);return}tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/themes/"+inst.settings.theme+"/css/editor_content.css");tinyMCE.importCSS(inst.getDoc(),inst.settings.content_css);tinyMCE.dispatchCallback(inst,'init_instance_callback','initInstance',inst);if(tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')){inst.addShortcut('ctrl','z','lang_undo_desc','Undo');inst.addShortcut('ctrl','y','lang_redo_desc','Redo')}for(i=1;i<=6;i++)inst.addShortcut('ctrl',''+i,'','FormatBlock',false,'');inst.addShortcut('ctrl','7','','FormatBlock',false,'

');inst.addShortcut('ctrl','8','','FormatBlock',false,'

');inst.addShortcut('ctrl','9','','FormatBlock',false,'
');if(tinyMCE.isGecko){inst.addShortcut('ctrl','b','lang_bold_desc','Bold');inst.addShortcut('ctrl','i','lang_italic_desc','Italic');inst.addShortcut('ctrl','u','lang_underline_desc','Underline')}if(tinyMCE.getParam("convert_fonts_to_spans"))inst.getBody().setAttribute('id','mceSpanFonts');if(tinyMCE.settings.nowrap)doc.body.style.whiteSpace="nowrap";doc.body.dir=this.settings.directionality;doc.editorId=editor_id;if(!tinyMCE.isIE)doc.documentElement.editorId=editor_id;inst.setBaseHREF(tinyMCE.settings.base_href);if(tinyMCE.settings.convert_newlines_to_brs){content=tinyMCE.regexpReplace(content,"\r\n","
","gi");content=tinyMCE.regexpReplace(content,"\r","
","gi");content=tinyMCE.regexpReplace(content,"\n","
","gi")}content=tinyMCE.storeAwayURLs(content);content=tinyMCE._customCleanup(inst,"insert_to_editor",content);if(tinyMCE.isIE){window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["'+editor_id+'"].getDoc(), "'+editor_id+'");}catch(e){}',500);if(tinyMCE.settings.force_br_newlines)doc.styleSheets[0].addRule("p","margin: 0;");body=inst.getBody();body.editorId=editor_id}content=tinyMCE.cleanupHTMLCode(content);if(!tinyMCE.isIE){contentElement=inst.getDoc().createElement("body");doc=inst.getDoc();contentElement.innerHTML=content;if(tinyMCE.settings.cleanup_on_startup)tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,doc,this.settings,contentElement));else tinyMCE.setInnerHTML(inst.getBody(),content);tinyMCE.convertAllRelativeURLs(inst.getBody())}else{if(tinyMCE.settings.cleanup_on_startup){tinyMCE._setHTML(inst.getDoc(),content);try{tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,inst.contentDocument,this.settings,inst.getBody()))}catch(e){}}else tinyMCE._setHTML(inst.getDoc(),content)}tinyMCE.handleVisualAid(inst.getBody(),true,tinyMCE.settings.visual,inst);tinyMCE.dispatchCallback(inst,'setupcontent_callback','setupContent',editor_id,inst.getBody(),inst.getDoc());if(!tinyMCE.isIE)tinyMCE.addEventHandlers(inst);if(tinyMCE.isIE){tinyMCE.addEvent(inst.getBody(),"blur",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(inst.getBody(),"beforedeactivate",TinyMCE_Engine.prototype._eventPatch);if(!tinyMCE.isOpera){tinyMCE.addEvent(doc.body,"mousemove",TinyMCE_Engine.prototype.onMouseMove);tinyMCE.addEvent(doc.body,"beforepaste",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(doc.body,"drop",TinyMCE_Engine.prototype._eventPatch)}}inst.select();tinyMCE.selectedElement=inst.contentWindow.document.body;tinyMCE._customCleanup(inst,"insert_to_editor_dom",inst.getBody());tinyMCE._customCleanup(inst,"setup_content_dom",inst.getBody());tinyMCE._setEventsEnabled(inst.getBody(),false);tinyMCE.cleanupAnchors(inst.getDoc());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(inst.getDoc());inst.startContent=tinyMCE.trim(inst.getBody().innerHTML);inst.undoRedo.add({content:inst.startContent});if(tinyMCE.isGecko){tinyMCE.selectNodes(inst.getBody(),function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}if(tinyMCE.isGecko)inst.getBody().spellcheck=tinyMCE.getParam("gecko_spellcheck");tinyMCE._removeInternal(inst.getBody());inst.select();tinyMCE.triggerNodeChange(false,true)},storeAwayURLs:function(s){if(!s.match(/(mce_src|mce_href)/gi,s)){s=s.replace(new RegExp('src\\s*=\\s*[\"\']([^ >\"]*)[\"\']','gi'),'src="$1" mce_src="$1"');s=s.replace(new RegExp('href\\s*=\\s*[\"\']([^ >\"]*)[\"\']','gi'),'href="$1" mce_href="$1"')}return s},_removeInternal:function(n){if(tinyMCE.isGecko){tinyMCE.selectNodes(n,function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}},removeTinyMCEFormElements:function(form_obj){var i,elementId;if(!tinyMCE.getParam('hide_selects_on_submit'))return;if(typeof(form_obj)=="undefined"||form_obj==null)return;if(form_obj.nodeName!="FORM"){if(form_obj.form)form_obj=form_obj.form;else form_obj=tinyMCE.getParentElement(form_obj,"form")}if(form_obj==null)return;for(i=0;i");rng.collapse(false);rng.select();tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange(false);return false}}if(e.keyCode==8||e.keyCode==46){tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(e.target,"a");tinyMCE.imgElement=tinyMCE.getParentElement(e.target,"img");tinyMCE.triggerNodeChange(false)}return false;case"keyup":case"keydown":tinyMCE.hideMenus();tinyMCE.hasMouseMoved=false;if(inst&&inst.handleShortcut(e))return false;inst._fixRootBlocks();if(inst.settings.remove_trailing_nbsp)inst._fixTrailingNbsp();if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();inst=tinyMCE.selectedInstance;if(tinyMCE.isGecko&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");e.preventDefault();return false}}tinyMCE.selectedElement=null;tinyMCE.selectedNode=null;elm=tinyMCE.selectedInstance.getFocusElement();tinyMCE.linkElement=tinyMCE.getParentElement(elm,"a");tinyMCE.imgElement=tinyMCE.getParentElement(elm,"img");tinyMCE.selectedElement=elm;if(tinyMCE.isGecko&&e.type=="keyup"&&e.keyCode==9)tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(),true,tinyMCE.settings.visual,tinyMCE.selectedInstance);if(tinyMCE.isIE&&e.type=="keydown"&&e.keyCode==13)tinyMCE.enterKeyElement=tinyMCE.selectedInstance.getFocusElement();if(tinyMCE.isIE&&e.type=="keyup"&&e.keyCode==13){elm=tinyMCE.enterKeyElement;if(elm){var re=new RegExp('^HR|IMG|BR$','g');var dre=new RegExp('^H[1-6]$','g');if(!elm.hasChildNodes()&&!re.test(elm.nodeName)){if(dre.test(elm.nodeName))elm.innerHTML="  ";else elm.innerHTML=" "}}}keys=tinyMCE.posKeyCodes;var posKey=false;for(i=0;i';h+='{$'+lang+'}';h+=''}else{h+='';h+='{$'+lang+'}';h+=''}return h},getMenuButtonHTML:function(id,lang,img,mcmd,cmd,ui,val){var h='',m,x;mcmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+mcmd+'\');';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=tinyMCE.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);if(tinyMCE.isRealIE)h+='';else h+='';h+='';h+='';h+='';h+=''}else{if(tinyMCE.isRealIE)h+='';else h+='';h+='';h+='';h+='';h+=''}return h},_menuButtonEvent:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'')},addButtonMap:function(m){var i,a=m.replace(/\s+/,'').split(',');for(i=0;i0)className+=" ";className+=classNames[i]}return className},handleVisualAid:function(el,deep,state,inst,skip_dispatch){var i,x,y,tableElement,anchorName,oldW,oldH,bo,cn;if(!el)return;if(!skip_dispatch)tinyMCE.dispatchCallback(inst,'handle_visual_aid_callback','handleVisualAid',el,deep,state,inst);tableElement=null;switch(el.nodeName){case"TABLE":oldW=el.style.width;oldH=el.style.height;bo=tinyMCE.getAttrib(el,"border");bo=bo==''||bo=="0"?true:false;tinyMCE.setAttrib(el,"class",tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el,"class"),state&&bo));el.style.width=oldW;el.style.height=oldH;for(y=0;y0)return inst.cssClasses;if(!doc)return;styles=doc.styleSheets;if(styles&&styles.length>0){for(x=0;x'+tinyMCE.replaceVar(v,"pluginurl",o.baseURL)+'';return tinyMCE.replaceVar(v,"pluginurl",o.baseURL)}}o=tinyMCE.themes[tinyMCE.settings.theme];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return''+v+'';return v}return''},evalFunc:function(f,idx,a,o){o=!o?window:o;f=typeof(f)=='function'?f:o[f];return f.apply(o,Array.prototype.slice.call(a,idx))},dispatchCallback:function(i,p,n){return this.callFunc(i,p,n,0,this.dispatchCallback.arguments)},executeCallback:function(i,p,n){return this.callFunc(i,p,n,1,this.executeCallback.arguments)},execCommandCallback:function(i,p,n){return this.callFunc(i,p,n,2,this.execCommandCallback.arguments)},callFunc:function(ins,p,n,m,a){var l,i,on,o,s,v;s=m==2;l=tinyMCE.getParam(p,'');if(l!==''&&(v=tinyMCE.evalFunc(l,3,a))==s&&m>0)return true;if(ins!=null){for(i=0,l=ins.plugins;i0)return true}}l=tinyMCE.themes;for(on in l){o=l[on];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}return false},resolveDots:function(s,o){var i;if(typeof(s)=='string'){for(i=0,s=s.split('.');i':return'>'}return c}):s},add:function(c,m){var n;for(n in m){if(m.hasOwnProperty(n))c.prototype[n]=m[n]}},extend:function(p,np){var o={},n;o.parent=p;for(n in p){if(p.hasOwnProperty(n))o[n]=p[n]}for(n in np){if(np.hasOwnProperty(n))o[n]=np[n]}return o},hideMenus:function(){var e=tinyMCE.lastSelectedMenuBtn;if(tinyMCE.lastMenu){tinyMCE.lastMenu.hide();tinyMCE.lastMenu=null}if(e){tinyMCE.switchClass(e,tinyMCE.lastMenuBtnClass);tinyMCE.lastSelectedMenuBtn=null}}};var TinyMCE=TinyMCE_Engine;var tinyMCE=new TinyMCE_Engine();var tinyMCELang={};function TinyMCE_Control(settings){var t,i,tos,fu,p,x,fn,fu,pn,s=settings;this.undoRedoLevel=true;this.isTinyMCE_Control=true;this.enabled=true;this.settings=s;this.settings.theme=tinyMCE.getParam("theme","default");this.settings.width=tinyMCE.getParam("width",-1);this.settings.height=tinyMCE.getParam("height",-1);this.selection=new TinyMCE_Selection(this);this.undoRedo=new TinyMCE_UndoRedo(this);this.cleanup=new TinyMCE_Cleanup();this.shortcuts=[];this.hasMouseMoved=false;this.foreColor=this.backColor="#999999";this.data={};this.cssClasses=[];this.cleanup.init({valid_elements:s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,entities:s.entities,entity_encoding:s.entity_encoding,debug:s.cleanup_debug,indent:s.apply_source_formatting,invalid_elements:s.invalid_elements,verify_html:s.verify_html,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans});t=this.settings.theme;if(!tinyMCE.hasTheme(t)){fn=tinyMCE.callbacks;tos={};for(i=0;i0){for(i=0;i1&&tinyMCE.currentConfig!=this.settings.index){tinyMCE.settings=this.settings;tinyMCE.currentConfig=this.settings.index}},select:function(){var oldInst=tinyMCE.selectedInstance;if(oldInst!=this){if(oldInst)oldInst.execCommand('mceEndTyping');tinyMCE.dispatchCallback(this,'select_instance_callback','selectInstance',this,oldInst);tinyMCE.selectedInstance=this}},getBody:function(){return this.contentBody?this.contentBody:this.getDoc().body},getDoc:function(){return this.contentWindow.document},getWin:function(){return this.contentWindow},getContainerWin:function(){return this.containerWindow?this.containerWindow:window},getViewPort:function(){return tinyMCE.getViewPort(this.getWin())},getParentNode:function(n,f){return tinyMCE.getParentNode(n,f,this.getBody())},getParentElement:function(n,na,f){return tinyMCE.getParentElement(n,na,f,this.getBody())},getParentBlockElement:function(n){return tinyMCE.getParentBlockElement(n,this.getBody())},resizeToContent:function(){var d=this.getDoc(),b=d.body,de=d.documentElement;this.iframeElement.style.height=(tinyMCE.isRealIE)?b.scrollHeight:de.offsetHeight+'px'},addShortcut:function(m,k,d,cmd,ui,va){var n=typeof(k)=="number",ie=tinyMCE.isIE,c,sc,i,scl=this.shortcuts;if(!tinyMCE.getParam('custom_shortcuts'))return false;m=m.toLowerCase();k=ie&&!n?k.toUpperCase():k;c=n?null:k.charCodeAt(0);d=d&&d.indexOf('lang_')==0?tinyMCE.getLang(d):d;sc={alt:m.indexOf('alt')!=-1,ctrl:m.indexOf('ctrl')!=-1,shift:m.indexOf('shift')!=-1,charCode:c,keyCode:n?k:(ie?c:null),desc:d,cmd:cmd,ui:ui,val:va};for(i=0;i1&&/(^\u00a0|\u00a0$)/.test(v)){e.firstChild.nodeValue=v.replace(/(^\u00a0|\u00a0$)/,'');s.selectNode(e.firstChild,true,false,false);}}},_setUseCSS:function(b){var d=this.getDoc();try{d.execCommand("useCSS",false,!b)}catch(ex){}try{d.execCommand("styleWithCSS",false,b)}catch(ex){}if(!tinyMCE.getParam("table_inline_editing"))try{d.execCommand('enableInlineTableEditing',false,"false")}catch(ex){}if(!tinyMCE.getParam("object_resizing"))try{d.execCommand('enableObjectResizing',false,"false")}catch(ex){}},execCommand:function(command,user_interface,value){var i,x,z,align,img,div,doc=this.getDoc(),win=this.getWin(),focusElm=this.getFocusElement();if(!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel','gi').test(command))this.undoBookmark=null;if(!tinyMCE.isIE&&!this.useCSS){this._setUseCSS(false);this.useCSS=true}this.contentDocument=doc;if(!/mceStartTyping|mceEndTyping/.test(command)){if(tinyMCE.execCommandCallback(this,'execcommand_callback','execCommand',this.editorId,this.getBody(),command,user_interface,value))return}if(focusElm&&focusElm.nodeName=="IMG"){align=focusElm.getAttribute('align');img=command=="JustifyCenter"?focusElm.cloneNode(false):focusElm;switch(command){case"JustifyLeft":if(align=='left'){img.setAttribute('align','');img.removeAttribute('align')}else img.setAttribute('align','left');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyCenter":img.setAttribute('align','');img.removeAttribute('align');div=tinyMCE.getParentElement(focusElm,"div");if(div&&div.style.textAlign=="center"){if(div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div)}else{div=this.getDoc().createElement("div");div.style.textAlign='center';div.appendChild(img);focusElm.parentNode.replaceChild(div,focusElm)}this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyRight":if(align=='right'){img.setAttribute('align','');img.removeAttribute('align')}else img.setAttribute('align','right');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return}}if(tinyMCE.settings.force_br_newlines){var alignValue="";if(doc.selection.type!="Control"){switch(command){case"JustifyLeft":alignValue="left";break;case"JustifyCenter":alignValue="center";break;case"JustifyFull":alignValue="justify";break;case"JustifyRight":alignValue="right";break}if(alignValue!==''){var rng=doc.selection.createRange();if((divElm=tinyMCE.getParentElement(rng.parentElement(),"div"))!=null)divElm.setAttribute("align",alignValue);else if(rng.pasteHTML&&rng.htmlText.length>0)rng.pasteHTML('
'+rng.htmlText+"
");tinyMCE.triggerNodeChange();return}}}switch(command){case"mceRepaint":this.repaint();return true;case"JustifyLeft":case"JustifyCenter":case"JustifyFull":case"JustifyRight":var el=tinyMCE.getParentNode(focusElm,function(n){return tinyMCE.getAttrib(n,'align')});if(el){el.setAttribute('align','');el.removeAttribute('align')}else this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();return true;case"unlink":if(tinyMCE.isGecko&&this.getSel().isCollapsed){focusElm=tinyMCE.getParentElement(focusElm,'A');if(focusElm)this.selection.selectNode(focusElm,false)}this.getDoc().execCommand(command,user_interface,value);tinyMCE.isGecko&&this.getSel().collapseToEnd();tinyMCE.triggerNodeChange();return true;case"InsertUnorderedList":case"InsertOrderedList":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"Strikethrough":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"mceSelectNode":this.selection.selectNode(value);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=value;break;case"FormatBlock":if(value==null||value==''){var elm=tinyMCE.getParentElement(this.getFocusElement(),"p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");if(elm)this.execCommand("mceRemoveNode",false,elm)}else{if(!this.cleanup.isValid(value))return true;if(tinyMCE.isGecko&&new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>','gi').test(value))value=value.replace(/[^a-z]/gi,'');if(tinyMCE.isIE&&new RegExp('blockquote|code|samp','gi').test(value)){var b=this.selection.getBookmark();this.getDoc().execCommand("FormatBlock",false,'

');tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()),value);this.selection.moveToBookmark(b)}else this.getDoc().execCommand("FormatBlock",false,value)}tinyMCE.triggerNodeChange();break;case"mceRemoveNode":if(!value)value=tinyMCE.getParentElement(this.getFocusElement());if(tinyMCE.isIE){value.outerHTML=value.innerHTML}else{var rng=value.ownerDocument.createRange();rng.setStartBefore(value);rng.setEndAfter(value);rng.deleteContents();rng.insertNode(rng.createContextualFragment(value.innerHTML))}tinyMCE.triggerNodeChange();break;case"mceSelectNodeDepth":var parentNode=this.getFocusElement();for(i=0;parentNode;i++){if(parentNode.nodeName.toLowerCase()=="body")break;if(parentNode.nodeName.toLowerCase()=="#text"){i--;parentNode=parentNode.parentNode;continue}if(i==value){this.selection.selectNode(parentNode,false);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=parentNode;return}parentNode=parentNode.parentNode}break;case"mceSetStyleInfo":case"SetStyleInfo":var rng=this.getRng();var sel=this.getSel();var scmd=value.command;var sname=value.name;var svalue=value.value==null?'':value.value;var wrapper=value.wrapper?value.wrapper:"span";var parentElm=null;var invalidRe=new RegExp("^BODY|HTML$","g");var invalidParentsRe=tinyMCE.settings.merge_styles_invalid_parents!==''?new RegExp(tinyMCE.settings.merge_styles_invalid_parents,"gi"):null;if(tinyMCE.isIE){if(rng.item)parentElm=rng.item(0);else{var pelm=rng.parentElement();var prng=doc.selection.createRange();prng.moveToElementText(pelm);if(rng.htmlText==prng.htmlText||rng.boundingWidth==0){if(invalidParentsRe==null||!invalidParentsRe.test(pelm.nodeName))parentElm=pelm}}}else{var felm=this.getFocusElement();if(sel.isCollapsed||(new RegExp('td|tr|tbody|table|img','gi').test(felm.nodeName)&&sel.anchorNode==felm.parentNode))parentElm=felm}if(parentElm&&!invalidRe.test(parentElm.nodeName)){if(scmd=="setstyle")tinyMCE.setStyleAttrib(parentElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(parentElm,sname,svalue);if(scmd=="removeformat"){parentElm.style.cssText='';tinyMCE.setAttrib(parentElm,'class','')}var ch=tinyMCE.getNodeTree(parentElm,[],1);for(z=0;z=0;i--){var elm=nodes[i];var isNew=tinyMCE.getAttrib(elm,"mce_new")=="true";elm.removeAttribute("mce_new");if(elm.childNodes&&elm.childNodes.length==1&&elm.childNodes[0].nodeType==1){this._mergeElements(scmd,elm,elm.childNodes[0],isNew);continue}if(elm.parentNode.childNodes.length==1&&!invalidRe.test(elm.nodeName)&&!invalidRe.test(elm.parentNode.nodeName)){if(invalidParentsRe==null||!invalidParentsRe.test(elm.parentNode.nodeName))this._mergeElements(scmd,elm.parentNode,elm,false)}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i],isEmpty=true;var tmp=doc.createElement("body");tmp.appendChild(elm.cloneNode(false));tmp.innerHTML=tmp.innerHTML.replace(new RegExp('style=""|class=""','gi'),'');if(new RegExp('','gi').test(tmp.innerHTML)){for(x=0;x0){value=tinyMCE.replaceVar(value,"selection",selectedText);tinyMCE.execCommand('mceInsertContent',false,value)}this._addBogusBR();tinyMCE.triggerNodeChange();break;case"mceSetAttribute":if(typeof(value)=='object'){var targetElms=(typeof(value.targets)=="undefined")?"p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address":value.targets;var targetNode=tinyMCE.getParentElement(this.getFocusElement(),targetElms);if(targetNode){targetNode.setAttribute(value.name,value.value);tinyMCE.triggerNodeChange()}}break;case"mceSetCSSClass":this.execCommand("mceSetStyleInfo",false,{command:"setattrib",name:"class",value:value});break;case"mceInsertRawHTML":var key='tiny_mce_marker';this.execCommand('mceBeginUndoLevel');this.execCommand('mceInsertContent',false,key);var scrollX=this.getBody().scrollLeft+this.getDoc().documentElement.scrollLeft;var scrollY=this.getBody().scrollTop+this.getDoc().documentElement.scrollTop;var html=this.getBody().innerHTML;if((pos=html.indexOf(key))!=-1)tinyMCE.setInnerHTML(this.getBody(),html.substring(0,pos)+value+html.substring(pos+key.length));this.contentWindow.scrollTo(scrollX,scrollY);this.execCommand('mceEndUndoLevel');break;case"mceInsertContent":if(!value)value='';var insertHTMLFailed=false;if(tinyMCE.isGecko||tinyMCE.isOpera){try{if(value.indexOf('<')==-1&&!value.match(/(&| |<|>)/g)){var r=this.getRng();var n=this.getDoc().createTextNode(tinyMCE.entityDecode(value));var s=this.getSel();var r2=r.cloneRange();s.removeAllRanges();r.deleteContents();r.insertNode(n);r2.selectNode(n);r2.collapse(false);s.removeAllRanges();s.addRange(r2)}else{value=tinyMCE.fixGeckoBaseHREFBug(1,this.getDoc(),value);this.getDoc().execCommand('inserthtml',false,value);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}}catch(ex){insertHTMLFailed=true}if(!insertHTMLFailed){tinyMCE.triggerNodeChange();return}}if(!tinyMCE.isIE){var isHTML=value.indexOf('<')!=-1;var sel=this.getSel();var rng=this.getRng();if(isHTML){if(tinyMCE.isSafari){var tmpRng=this.getDoc().createRange();tmpRng.setStart(this.getBody(),0);tmpRng.setEnd(this.getBody(),0);value=tmpRng.createContextualFragment(value)}else value=rng.createContextualFragment(value)}else{value=doc.createTextNode(tinyMCE.entityDecode(value))}if(tinyMCE.isSafari&&!isHTML){this.execCommand('InsertText',false,value.nodeValue);tinyMCE.triggerNodeChange();return true}else if(tinyMCE.isSafari&&isHTML){rng.deleteContents();rng.insertNode(value);tinyMCE.triggerNodeChange();return true}rng.deleteContents();if(rng.startContainer.nodeType==3){var node=rng.startContainer.splitText(rng.startOffset);node.parentNode.insertBefore(value,node)}else rng.insertNode(value);if(!isHTML){sel.selectAllChildren(doc.body);sel.removeAllRanges();var rng=doc.createRange();rng.selectNode(value);rng.collapse(false);sel.addRange(rng)}else rng.collapse(false);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}else{var rng=doc.selection.createRange(),tmpRng=null;var c=value.indexOf('"}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i';return h},_serializeAttribute:function(n,r,an){var av='',t,os=this.settings.on_save;if(os&&(an.indexOf('mce_')==0||an.indexOf('_moz')==0))return'';if(os&&this.mceAttribs[an])av=this._getAttrib(n,this.mceAttribs[an]);if(av.length==0)av=this._getAttrib(n,an);if(av.length==0&&r.defaultAttribs&&(t=r.defaultAttribs[an])){av=t;if(av=="mce_empty")return" "+an+'=""'}if(r.forceAttribs&&(t=r.forceAttribs[an]))av=t;if(os&&av.length!=0&&/^(src|href|longdesc)$/.test(an))av=this._urlConverter(this,n,av);if(av.length!=0&&r.validAttribValues&&r.validAttribValues[an]&&!r.validAttribValues[an].test(av))return"";if(av.length!=0&&av=="{$uid}")av="uid_"+(this.idCount++);if(av.length!=0){if(an.indexOf('on')!=0)av=this.xmlEncode(av,1);return" "+an+"="+'"'+av+'"'}return""},formatHTML:function(h){var s=this.settings,p='',i=0,li=0,o='',l;h=h.replace(/]*)>(.*?)<\/pre>/gi,function(a,b,c){c=c.replace(//gi,'\n');return''+c+''});h=h.replace(/\r/g,'');h='\n'+h;h=h.replace(new RegExp('\\n\\s+','gi'),'\n');h=h.replace(this.nlBeforeRe,'\n<$1$2>');h=h.replace(this.nlAfterRe,'<$1$2>\n');h=h.replace(this.nlBeforeAfterRe,'\n<$1$2$3>\n');h+='\n';while((i=h.indexOf('\n',i+1))!=-1){if((l=h.substring(li+1,i)).length!=0){if(this.ouRe.test(l)&&p.length>=s.indent_levels)p=p.substring(s.indent_levels);o+=p+l+'\n';if(this.inRe.test(l))p+=this.inStr}li=i}return o},xmlEncode:function(s){var cl=this,re=this.xmlEncodeRe;if(!this.entitiesDone)this._setupEntities();switch(this.settings.entity_encoding){case"raw":return tinyMCE.xmlEncode(s);case"named":return s.replace(re,function(c){var b=cl.entities[c.charCodeAt(0)];return b?'&'+b+';':c});case"numeric":return s.replace(re,function(c){return'&#'+c.charCodeAt(0)+';'})}return s},split:function(re,s){var i,l,o=[],c=s.split(re);for(i=0,l=c.length;i':'>'+h+'';return o},createTag:function(d,tn,a,h){var o=d.createElement(tn),n;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)tinyMCE.setAttrib(o,n,a[n])}}if(h)o.innerHTML=h;return o},getElementByAttributeValue:function(n,e,a,v){return(n=this.getElementsByAttributeValue(n,e,a,v)).length==0?null:n[0]},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i]*)>/gi,'');h=h.replace(/]*)>/gi,'');h=h.replace(/]*)>/gi,'');h=h.replace(/]*)>/gi,'');h=h.replace(/<\/strong>/gi,'');h=h.replace(/<\/em>/gi,'')}if(tinyMCE.isRealIE){h=h.replace(/\s\/>/g,'>');h=h.replace(/]*)>\u00A0?<\/p>/gi,' 

');h=h.replace(/]*)>\s* \s*<\/p>/gi,' 

');h=h.replace(/]*)>\s+<\/p>/gi,' 

');e.innerHTML=tinyMCE.uniqueTag+h;e.firstChild.removeNode(true);nl=e.getElementsByTagName("p");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.nodeName=='P'&&!n.hasChildNodes()&&!n.mce_keep)n.parentNode.removeChild(n)}}else{h=this.fixGeckoBaseHREFBug(1,e,h);e.innerHTML=h;this.fixGeckoBaseHREFBug(2,e,h)}},getOuterHTML:function(e){var d;if(tinyMCE.isIE)return e.outerHTML;d=e.ownerDocument.createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML},setOuterHTML:function(e,h,d){var d=typeof(d)=="undefined"?e.ownerDocument:d,i,nl,t;if(tinyMCE.isIE&&e.nodeType==1)e.outerHTML=h;else{t=d.createElement("body");t.innerHTML=h;for(i=0,nl=t.childNodes;i-1;i--){if(ar[i].specified&&ar[i].nodeValue)ne.setAttribute(ar[i].nodeName.toLowerCase(),ar[i].nodeValue)}ar=e.childNodes;for(i=0;i=strTok2.length){for(i=0;i=strTok2.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(strTok1.length=strTok1.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(breakPoint==1)return targetURL.path;for(i=0;i<(strTok1.length-(breakPoint-1));i++)outPath+="../";for(i=breakPoint-1;i=0;i--){if(baseURLParts[i].length==0)continue;newBaseURLParts[newBaseURLParts.length]=baseURLParts[i]}baseURLParts=newBaseURLParts.reverse();newRelURLParts=[];numBack=0;for(i=relURLParts.length-1;i>=0;i--){if(relURLParts[i].length==0||relURLParts[i]==".")continue;if(relURLParts[i]=='..'){numBack++;continue}if(numBack>0){numBack--;continue}newRelURLParts[newRelURLParts.length]=relURLParts[i]}relURLParts=newRelURLParts.reverse();len=baseURLParts.length-numBack;absPath=(len<=0?"":"/")+baseURLParts.slice(0,len).join('/')+"/"+relURLParts.join('/');start="";end="";relURL.protocol=baseURL.protocol;relURL.host=baseURL.host;relURL.port=baseURL.port;if(relURL.path.charAt(relURL.path.length-1)=="/")absPath+="/";relURL.path=absPath;return this.serializeURL(relURL)},convertURL:function(url,node,on_save){var dl=document.location,start,portPart,urlParts,baseUrlParts,tmpUrlParts,curl;var prot=dl.protocol,host=dl.hostname,port=dl.port;if(prot=="file:")return url;url=tinyMCE.regexpReplace(url,'(http|https):///','/');if(url.indexOf('mailto:')!=-1||url.indexOf('javascript:')!=-1||/^[ \t\r\n\+]*[#\?]/.test(url))return url;if(!tinyMCE.isIE&&!on_save&&url.indexOf("://")==-1&&url.charAt(0)!='/')return tinyMCE.settings.base_href+url;if(on_save&&tinyMCE.getParam('relative_urls')){curl=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(curl.charAt(0)=='/')curl=tinyMCE.settings.document_base_prefix+curl;urlParts=tinyMCE.parseURL(curl);tmpUrlParts=tinyMCE.parseURL(tinyMCE.settings.document_base_url);if(urlParts.host==tmpUrlParts.host&&(urlParts.port==tmpUrlParts.port))return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url,curl)}if(!tinyMCE.getParam('relative_urls')){urlParts=tinyMCE.parseURL(url);baseUrlParts=tinyMCE.parseURL(tinyMCE.settings.base_href);url=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(urlParts.anchor&&urlParts.path==baseUrlParts.path)return"#"+urlParts.anchor}if(tinyMCE.getParam('remove_script_host')){start="";portPart="";if(port!=='')portPart=":"+port;start=prot+"//"+host+portPart+"/";if(url.indexOf(start)==0)url=url.substring(start.length-1)}return url},convertAllRelativeURLs:function(body){var i,elms,src,href,mhref,msrc;elms=body.getElementsByTagName("img");for(i=0;ibookmark.index){try{rng.addElement(nl[bookmark.index])}catch(ex){}}}else{try{if(bookmark.start<0)return true;rng=inst.getSel().createRange();rng.moveToElementText(inst.getBody());rng.collapse(true);rng.moveStart('character',bookmark.start);rng.moveEnd('character',bookmark.length)}catch(ex){return true}}rng.select();win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}if(tinyMCE.isGecko||tinyMCE.isOpera){if(!sel)return false;if(bookmark.rng){sel.removeAllRanges();sel.addRange(bookmark.rng)}if(bookmark.start!=-1&&bookmark.end!=-1){try{sd=this._getTextPos(b,bookmark.start,bookmark.end);rng=doc.createRange();rng.setStart(sd.startNode,sd.startOffset);rng.setEnd(sd.endNode,sd.endOffset);sel.removeAllRanges();sel.addRange(rng);if(!tinyMCE.isOpera)win.focus()}catch(ex){}}win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}return false},_getPosText:function(r,sn,en){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d}p+=n.nodeValue?n.nodeValue.length:0}return null},_getTextPos:function(r,sp,ep){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){p+=n.nodeValue?n.nodeValue.length:0;if(p>=sp&&!d.startNode){d.startNode=n;d.startOffset=sp-(p-n.nodeValue.length)}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-n.nodeValue.length);return d}}return null},selectNode:function(node,collapse,select_text_node,to_start){var inst=this.instance,sel,rng,nodes;if(!node)return;if(typeof(collapse)=="undefined")collapse=true;if(typeof(select_text_node)=="undefined")select_text_node=false;if(typeof(to_start)=="undefined")to_start=true;if(inst.settings.auto_resize)inst.resizeToContent();if(tinyMCE.isRealIE){rng=inst.getDoc().body.createTextRange();try{rng.moveToElementText(node);if(collapse)rng.collapse(to_start);rng.select()}catch(e){}}else{sel=this.getSel();if(!sel)return;if(tinyMCE.isSafari){sel.setBaseAndExtent(node,0,node,node.innerText.length);if(collapse){if(to_start)sel.collapseToStart();else sel.collapseToEnd()}this.scrollToNode(node);return}rng=inst.getDoc().createRange();if(select_text_node){nodes=tinyMCE.getNodeTree(node,[],3);if(nodes.length>0)rng.selectNodeContents(nodes[0]);else rng.selectNodeContents(node)}else rng.selectNode(node);if(collapse){if(!to_start&&node.nodeType==3){rng.setStart(node,node.nodeValue.length);rng.setEnd(node,node.nodeValue.length)}else rng.collapse(to_start)}sel.removeAllRanges();sel.addRange(rng)}this.scrollToNode(node);tinyMCE.selectedElement=null;if(node.nodeType==1)tinyMCE.selectedElement=node},scrollToNode:function(node){var inst=this.instance,w=inst.getWin(),vp=inst.getViewPort(),pos=tinyMCE.getAbsPosition(node),cvp,p,cwin;if(pos.absLeftvp.left+vp.width||pos.absTopvp.top+(vp.height-25))w.scrollTo(pos.absLeft,pos.absTop-vp.height+25);if(inst.settings.auto_resize){cwin=inst.getContainerWin();cvp=tinyMCE.getViewPort(cwin);p=this.getAbsPosition(node);if(p.absLeftcvp.left+cvp.width||p.absTopcvp.top+cvp.height)cwin.scrollTo(p.absLeft,p.absTop-cvp.height+25)}},getAbsPosition:function(n){var pos=tinyMCE.getAbsPosition(n),ipos=tinyMCE.getAbsPosition(this.instance.iframeElement);return{absLeft:ipos.absLeft+pos.absLeft,absTop:ipos.absTop+pos.absTop}},getSel:function(){var inst=this.instance;if(tinyMCE.isRealIE)return inst.getDoc().selection;return inst.contentWindow.getSelection()},getRng:function(){var s=this.getSel();if(s==null)return null;if(tinyMCE.isRealIE)return s.createRange();if(tinyMCE.isSafari&&!s.getRangeAt)return''+window.getSelection();if(s.rangeCount>0)return s.getRangeAt(0);return null},isCollapsed:function(){var r=this.getRng();if(r.item)return false;return r.boundingWidth==0||this.getSel().isCollapsed},collapse:function(b){var r=this.getRng(),s=this.getSel();if(r.select){r.collapse(b);r.select()}else{if(b)s.collapseToStart();else s.collapseToEnd()}},getFocusElement:function(){var inst=this.instance,doc,rng,sel,elm;if(tinyMCE.isRealIE){doc=inst.getDoc();rng=doc.selection.createRange();elm=rng.item?rng.item(0):rng.parentElement()}else{if(!tinyMCE.isSafari&&inst.isHidden())return inst.getBody();sel=this.getSel();rng=this.getRng();if(!sel||!rng)return null;elm=rng.commonAncestorContainer;if(!rng.collapsed){if(rng.startContainer==rng.endContainer){if(rng.startOffset-rng.endOffset<2){if(rng.startContainer.hasChildNodes())elm=rng.startContainer.childNodes[rng.startOffset]}}}elm=tinyMCE.getParentElement(elm);}return elm}};function TinyMCE_UndoRedo(inst){this.instance=inst;this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.undoRedo=true};TinyMCE_UndoRedo.prototype={add:function(l){var b,customUndoLevels,newHTML,inst=this.instance,i,ul,ur;if(l){this.undoLevels[this.undoLevels.length]=l;return true}if(this.typingUndoIndex!=-1){this.undoIndex=this.typingUndoIndex;if(tinyMCE.typingUndoIndex!=-1)tinyMCE.undoIndex=tinyMCE.typingUndoIndex}newHTML=tinyMCE.trim(inst.getBody().innerHTML);if(this.undoLevels[this.undoIndex]&&newHTML!=this.undoLevels[this.undoIndex].content){inst.isNotDirty=false;tinyMCE.dispatchCallback(inst,'onchange_callback','onChange',inst);customUndoLevels=tinyMCE.settings.custom_undo_redo_levels;if(customUndoLevels!=-1&&this.undoLevels.length>customUndoLevels){for(i=0;i0){this.undoIndex--;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}},redo:function(){var inst=this.instance;tinyMCE.execCommand("mceEndTyping");if(this.undoIndex<(this.undoLevels.length-1)){this.undoIndex++;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}tinyMCE.triggerNodeChange()}};var TinyMCE_ForceParagraphs={_insertPara:function(inst,e){var doc=inst.getDoc(),sel=inst.getSel(),body=inst.getBody(),win=inst.contentWindow,rng=sel.getRangeAt(0);var rootElm=doc.documentElement,blockName="P",startNode,endNode,startBlock,endBlock;var rngBefore,rngAfter,direct,startNode,startOffset,endNode,endOffset,b=tinyMCE.isOpera?inst.selection.getBookmark():null;var paraBefore,paraAfter,startChop,endChop,contents,i;function isEmpty(para){var nodes;function isEmptyHTML(html){return html.replace(new RegExp('[ \t\r\n]+','g'),'').toLowerCase()==''}if(para.getElementsByTagName("img").length>0)return false;if(para.getElementsByTagName("table").length>0)return false;if(para.getElementsByTagName("hr").length>0)return false;nodes=tinyMCE.getNodeTree(para,[],3);for(i=0;i <"+blockName+"> ";paraAfter=body.childNodes[1]}inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true}if(startChop.nodeName==blockName)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);rngBefore.setEnd(startNode,startOffset);paraBefore.appendChild(rngBefore.cloneContents());rngAfter.setEndAfter(endChop);rngAfter.setStart(endNode,endOffset);contents=rngAfter.cloneContents();if(contents.firstChild&&contents.firstChild.nodeName==blockName){paraAfter.innerHTML=contents.firstChild.innerHTML}else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML=" ";if(isEmpty(paraAfter))paraAfter.innerHTML=" ";rng=doc.createRange();if(!startChop.previousSibling&&startChop.parentNode.nodeName.toUpperCase()==blockName){rng.setStartBefore(startChop.parentNode)}else{if(rngBefore.startContainer.nodeName.toUpperCase()==blockName&&rngBefore.startOffset==0)rng.setStartBefore(rngBefore.startContainer);else rng.setStart(rngBefore.startContainer,rngBefore.startOffset)}if(!endChop.nextSibling&&endChop.parentNode.nodeName.toUpperCase()==blockName)rng.setEndAfter(endChop.parentNode);else rng.setEnd(rngAfter.endContainer,rngAfter.endOffset);rng.deleteContents();if(tinyMCE.isOpera){rng.insertNode(paraBefore);rng.insertNode(paraAfter)}else{rng.insertNode(paraAfter);rng.insertNode(paraBefore)}paraAfter.normalize();paraBefore.normalize();inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true},_handleBackSpace:function(inst){var r=inst.getRng(),sn=r.startContainer,nv,s=false;if(sn&&sn.nextSibling&&sn.nextSibling.nodeName=="BR"&&sn.parentNode.nodeName!="BODY"){nv=sn.nodeValue;if(nv!=null&&r.startOffset==nv.length)sn.nextSibling.parentNode.removeChild(sn.nextSibling)}if(inst.settings.auto_resize)inst.resizeToContent();return s}};function TinyMCE_Layer(id,bm){this.id=id;this.blockerElement=null;this.events=false;this.element=null;this.blockMode=typeof(bm)!='undefined'?bm:true;this.doc=document};TinyMCE_Layer.prototype={moveRelativeTo:function(re,p){var rep=this.getAbsPosition(re),e=this.getElement(),x,y;var w=parseInt(re.offsetWidth),h=parseInt(re.offsetHeight);var ew=parseInt(e.offsetWidth),eh=parseInt(e.offsetHeight);switch(p){case"tl":x=rep.absLeft;y=rep.absTop;break;case"tr":x=rep.absLeft+w;y=rep.absTop;break;case"bl":x=rep.absLeft;y=rep.absTop+h;break;case"br":x=rep.absLeft+w;y=rep.absTop+h;break;case"cc":x=rep.absLeft+(w/ 2) - (ew /2);y=rep.absTop+(h/ 2) - (eh /2);break}this.moveTo(x,y)},moveBy:function(x,y){var e=this.getElement();this.moveTo(parseInt(e.style.left)+x,parseInt(e.style.top)+y)},moveTo:function(x,y){var e=this.getElement();e.style.left=x+"px";e.style.top=y+"px";this.updateBlocker()},resizeBy:function(w,h){var e=this.getElement();this.resizeTo(parseInt(e.style.width)+w,parseInt(e.style.height)+h)},resizeTo:function(w,h){var e=this.getElement();if(w!=null)e.style.width=w+"px";if(h!=null)e.style.height=h+"px";this.updateBlocker()},show:function(){var el=this.getElement();if(el){el.style.display='block';this.updateBlocker()}},hide:function(){var el=this.getElement();if(el){el.style.display='none';this.updateBlocker()}},isVisible:function(){return this.getElement().style.display=='block'},getElement:function(){if(!this.element)this.element=this.doc.getElementById(this.id);return this.element},setBlockMode:function(s){this.blockMode=s},updateBlocker:function(){var e,b,x,y,w,h;b=this.getBlocker();if(b){if(this.blockMode){e=this.getElement();x=this.parseInt(e.style.left);y=this.parseInt(e.style.top);w=this.parseInt(e.offsetWidth);h=this.parseInt(e.offsetHeight);b.style.left=x+'px';b.style.top=y+'px';b.style.width=w+'px';b.style.height=h+'px';b.style.display=e.style.display}else b.style.display='none'}},getBlocker:function(){var d,b;if(!this.blockerElement&&this.blockMode){d=this.doc;b=d.getElementById(this.id+"_blocker");if(!b){b=d.createElement("iframe");b.setAttribute('id',this.id+"_blocker");b.style.cssText='display: none; position: absolute; left: 0; top: 0';b.src='javascript:false;';b.frameBorder='0';b.scrolling='no';d.body.appendChild(b)}this.blockerElement=b}return this.blockerElement},getAbsPosition:function(n){var p={absLeft:0,absTop:0};while(n){p.absLeft+=n.offsetLeft;p.absTop+=n.offsetTop;n=n.offsetParent}return p},create:function(n,c,p,h){var d=this.doc,e=d.createElement(n);e.setAttribute('id',this.id);if(c)e.className=c;if(!p)p=d.body;if(h)e.innerHTML=h;p.appendChild(e);return this.element=e},exists:function(){return this.doc.getElementById(this.id)!=null},parseInt:function(s){if(s==null||s=='')return 0;return parseInt(s)},remove:function(){var e=this.getElement(),b=this.getBlocker();if(e)e.parentNode.removeChild(e);if(b)b.parentNode.removeChild(b)}};function TinyMCE_Menu(){var id;if(typeof(tinyMCE.menuCounter)=="undefined")tinyMCE.menuCounter=0;id="mc_menu_"+tinyMCE.menuCounter++;TinyMCE_Layer.call(this,id,true);this.id=id;this.items=[];this.needsUpdate=true};TinyMCE_Menu.prototype=tinyMCE.extend(TinyMCE_Layer.prototype,{init:function(s){var n;this.settings={separator_class:'mceMenuSeparator',title_class:'mceMenuTitle',disabled_class:'mceMenuDisabled',menu_class:'mceMenu',drop_menu:true};for(n in s)this.settings[n]=s[n];this.create('div',this.settings.menu_class)},clear:function(){this.items=[]},addTitle:function(t){this.add({type:'title',text:t})},addDisabled:function(t){this.add({type:'disabled',text:t})},addSeparator:function(){this.add({type:'separator'})},addItem:function(t,js){this.add({text:t,js:js})},add:function(mi){this.items[this.items.length]=mi;this.needsUpdate=true},update:function(){var e=this.getElement(),h='',i,t,m=this.items,s=this.settings;if(this.settings.drop_menu)h+='';h+='';for(i=0;i'}h+='
';break;case'title':h+='
'+t+'';break;case'disabled':h+='
'+t+'';break;default:h+='
'+t+''}h+='
';e.innerHTML=h;this.needsUpdate=false;this.updateBlocker()},show:function(){var nl,i;if(tinyMCE.lastMenu==this)return;if(this.needsUpdate)this.update();if(tinyMCE.lastMenu&&tinyMCE.lastMenu!=this)tinyMCE.lastMenu.hide();TinyMCE_Layer.prototype.show.call(this);if(!tinyMCE.isOpera){}tinyMCE.lastMenu=this}});tinyMCE.add(TinyMCE_Engine,{debug:function(){var m="",a,i,l=tinyMCE.log.length;for(i=0,a=this.debug.arguments;i'); - - if (tinyMCE.getParam("popups_css_add")) { - c = tinyMCE.getParam("popups_css_add"); - - // Is relative - if (c.indexOf('://') == -1 && c.charAt(0) != '/') - c = tinyMCE.documentBasePath + "/" + c; - - document.write(''); - } - - tinyMCE.addEvent(window, "load", this.onLoad); - }, - - onLoad : function() { - var dir, i, elms, body = document.body; - - if (tinyMCE.getWindowArg('mce_replacevariables', true)) - body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs); - - dir = tinyMCE.selectedInstance.settings.directionality; - if (dir == "rtl" && document.forms && document.forms.length > 0) { - elms = document.forms[0].elements; - for (i=0; i=0; i--) { - if (wrapper.hasChildNodes()) - wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild); - else - wrapper.appendChild(nodes[i].cloneNode(true)); - - nodes[i].parentNode.removeChild(nodes[i]); - } - - // Add wrapper - doc.body.appendChild(wrapper); - - // Create iframe - iframe = document.createElement("iframe"); - iframe.id = "mcWinIframe"; - iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings.default_document; - iframe.width = "100%"; - iframe.height = "100%"; - iframe.style.margin = '0'; - - // Add iframe - doc.body.appendChild(iframe); - - // Measure iframe - iframe = document.getElementById('mcWinIframe'); - dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth; - dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight; - - // Resize window - // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy); - window.resizeBy(dx, dy); - - // Hide iframe and show wrapper - body.style.margin = oldMargin; - iframe.style.display = 'none'; - wrapper.style.display = 'block'; - } - }, - - resizeToContent : function() { - var isMSIE = (navigator.appName == "Microsoft Internet Explorer"); - var isOpera = (navigator.userAgent.indexOf("Opera") != -1); - var elm, width, height, x, y, dx, dy; - - if (isOpera) - return; - - if (isMSIE) { - try { window.resizeTo(10, 10); } catch (e) {} - - elm = document.body; - width = elm.offsetWidth; - height = elm.offsetHeight; - dx = (elm.scrollWidth - width) + 4; - dy = elm.scrollHeight - height; - - try { window.resizeBy(dx, dy); } catch (e) {} - } else { - window.scrollBy(1000, 1000); - if (window.scrollX > 0 || window.scrollY > 0) { - window.resizeBy(window.innerWidth * 2, window.innerHeight * 2); - window.sizeToContent(); - window.scrollTo(0, 0); - x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0); - y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0); - window.moveTo(x, y); - } - } - }, - - getWindowArg : function(name, default_value) { - return tinyMCE.getWindowArg(name, default_value); - }, - - restoreSelection : function() { - var inst; - - if (this.storeSelection) { - inst = tinyMCE.selectedInstance; - - inst.getWin().focus(); - - if (inst.selectionBookmark) - inst.selection.moveToBookmark(inst.selectionBookmark); - } - }, - - execCommand : function(command, user_interface, value) { - var inst = tinyMCE.selectedInstance; - - this.restoreSelection(); - inst.execCommand(command, user_interface, value); - - // Store selection - if (this.storeSelection) - inst.selectionBookmark = inst.selection.getBookmark(true); - }, - - close : function() { - tinyMCE.closeWindow(window); - }, - - pickColor : function(e, element_id) { - tinyMCE.selectedInstance.execCommand('mceColorPicker', true, { - element_id : element_id, - document : document, - window : window, - store_selection : false - }); - }, - - openBrowser : function(element_id, type, option) { - var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); - var url = document.getElementById(element_id).value; - - tinyMCE.setWindowArg("window", window); - tinyMCE.setWindowArg("document", document); - - // Call to external callback - if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined") - alert("Callback function: " + cb + " could not be found."); - else - eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);"); - }, - - importClass : function(c) { - var n; - - window[c] = function() {}; - - for (n in window.opener[c].prototype) - window[c].prototype[n] = window.opener[c].prototype[n]; - - window[c].constructor = window.opener[c].constructor; - } - - }; - -// Setup global instance -var tinyMCEPopup = new TinyMCE_Popup(); - -tinyMCEPopup.init(); +// Some global instances, this will be filled later +var tinyMCE = null, tinyMCELang = null; + +function TinyMCE_Popup() { +}; + +TinyMCE_Popup.prototype = { + findWin : function(w) { + var c; + + // Check parents + c = w; + while (c && (c = c.parent) != null) { + if (typeof(c.tinyMCE) != "undefined") + return c; + } + + // Check openers + c = w; + while (c && (c = c.opener) != null) { + if (typeof(c.tinyMCE) != "undefined") + return c; + } + + // Try top + if (typeof(top.tinyMCE) != "undefined") + return top; + + return null; + }, + + init : function() { + var win = window.opener ? window.opener : window.dialogArguments, c; + var inst, re, title, divElm; + + if (!win) + win = this.findWin(window); + + if (!win) { + alert("tinyMCE object reference not found from popup."); + return; + } + + window.opener = win; + this.windowOpener = win; + this.onLoadEval = ""; + + // Setup parent references + tinyMCE = win.tinyMCE; + tinyMCELang = win.tinyMCELang; + + inst = tinyMCE.selectedInstance; + this.isWindow = tinyMCE.getWindowArg('mce_inside_iframe', false) == false; + this.storeSelection = (tinyMCE.isRealIE) && !this.isWindow && tinyMCE.getWindowArg('mce_store_selection', true); + + if (this.isWindow) + window.focus(); + + // Store selection + if (this.storeSelection) + inst.selectionBookmark = inst.selection.getBookmark(true); + + // Setup dir + if (tinyMCELang.lang_dir) + document.dir = tinyMCELang.lang_dir; + + // Setup title + re = new RegExp('{|\\\$|}', 'g'); + title = document.title.replace(re, ""); + if (typeof(tinyMCELang[title]) != "undefined") { + divElm = document.createElement("div"); + divElm.innerHTML = tinyMCELang[title]; + document.title = divElm.innerHTML; + + if (typeof(tinyMCE.setWindowTitle) != 'undefined') + tinyMCE.setWindowTitle(window, divElm.innerHTML); + } + + // Output Popup CSS class + document.write(''); + + if (tinyMCE.getParam("popups_css_add")) { + c = tinyMCE.getParam("popups_css_add"); + + // Is relative + if (c.indexOf('://') == -1 && c.charAt(0) != '/') + c = tinyMCE.documentBasePath + "/" + c; + + document.write(''); + } + + tinyMCE.addEvent(window, "load", this.onLoad); + }, + + onLoad : function() { + var dir, i, elms, body = document.body; + + if (tinyMCE.getWindowArg('mce_replacevariables', true)) + body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs); + + dir = tinyMCE.selectedInstance.settings.directionality; + if (dir == "rtl" && document.forms && document.forms.length > 0) { + elms = document.forms[0].elements; + for (i=0; i=0; i--) { + if (wrapper.hasChildNodes()) + wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild); + else + wrapper.appendChild(nodes[i].cloneNode(true)); + + nodes[i].parentNode.removeChild(nodes[i]); + } + + // Add wrapper + doc.body.appendChild(wrapper); + + // Create iframe + iframe = document.createElement("iframe"); + iframe.id = "mcWinIframe"; + iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings.default_document; + iframe.width = "100%"; + iframe.height = "100%"; + iframe.style.margin = '0'; + + // Add iframe + doc.body.appendChild(iframe); + + // Measure iframe + iframe = document.getElementById('mcWinIframe'); + dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth; + dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight; + + // Resize window + // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy); + window.resizeBy(dx, dy); + + // Hide iframe and show wrapper + body.style.margin = oldMargin; + iframe.style.display = 'none'; + wrapper.style.display = 'block'; + } + }, + + resizeToContent : function() { + var isMSIE = (navigator.appName == "Microsoft Internet Explorer"); + var isOpera = (navigator.userAgent.indexOf("Opera") != -1); + var elm, width, height, x, y, dx, dy; + + if (isOpera) + return; + + if (isMSIE) { + try { window.resizeTo(10, 10); } catch (e) {} + + elm = document.body; + width = elm.offsetWidth; + height = elm.offsetHeight; + dx = (elm.scrollWidth - width) + 4; + dy = elm.scrollHeight - height; + + try { window.resizeBy(dx, dy); } catch (e) {} + } else { + window.scrollBy(1000, 1000); + if (window.scrollX > 0 || window.scrollY > 0) { + window.resizeBy(window.innerWidth * 2, window.innerHeight * 2); + window.sizeToContent(); + window.scrollTo(0, 0); + x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0); + y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0); + window.moveTo(x, y); + } + } + }, + + getWindowArg : function(name, default_value) { + return tinyMCE.getWindowArg(name, default_value); + }, + + restoreSelection : function() { + var inst; + + if (this.storeSelection) { + inst = tinyMCE.selectedInstance; + + inst.getWin().focus(); + + if (inst.selectionBookmark) + inst.selection.moveToBookmark(inst.selectionBookmark); + } + }, + + execCommand : function(command, user_interface, value) { + var inst = tinyMCE.selectedInstance; + + this.restoreSelection(); + inst.execCommand(command, user_interface, value); + + // Store selection + if (this.storeSelection) + inst.selectionBookmark = inst.selection.getBookmark(true); + }, + + close : function() { + tinyMCE.closeWindow(window); + }, + + pickColor : function(e, element_id) { + tinyMCE.selectedInstance.execCommand('mceColorPicker', true, { + element_id : element_id, + document : document, + window : window, + store_selection : false + }); + }, + + openBrowser : function(element_id, type, option) { + var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); + var url = document.getElementById(element_id).value; + + tinyMCE.setWindowArg("window", window); + tinyMCE.setWindowArg("document", document); + + // Call to external callback + if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined") + alert("Callback function: " + cb + " could not be found."); + else + eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);"); + }, + + importClass : function(c) { + var n; + + window[c] = function() {}; + + for (n in window.opener[c].prototype) + window[c].prototype[n] = window.opener[c].prototype[n]; + + window[c].constructor = window.opener[c].constructor; + } + + }; + +// Setup global instance +var tinyMCEPopup = new TinyMCE_Popup(); + +tinyMCEPopup.init(); diff --git a/program/js/tiny_mce/tiny_mce_src.js b/program/js/tiny_mce/tiny_mce_src.js index ba713a8..d14c858 100644 --- a/program/js/tiny_mce/tiny_mce_src.js +++ b/program/js/tiny_mce/tiny_mce_src.js @@ -1,7571 +1,7607 @@ - -/* file:jscripts/tiny_mce/classes/TinyMCE_Engine.class.js */ - -function TinyMCE_Engine() { - var ua; - - this.majorVersion = "2"; - this.minorVersion = "1.1.1"; - this.releaseDate = "2007-05-14"; - - this.instances = []; - this.switchClassCache = []; - this.windowArgs = []; - this.loadedFiles = []; - this.pendingFiles = []; - this.loadingIndex = 0; - this.configs = []; - this.currentConfig = 0; - this.eventHandlers = []; - this.log = []; - this.undoLevels = []; - this.undoIndex = 0; - this.typingUndoIndex = -1; - this.settings = []; - - // Browser check - ua = navigator.userAgent; - this.isMSIE = (navigator.appName == "Microsoft Internet Explorer"); - this.isMSIE5 = this.isMSIE && (ua.indexOf('MSIE 5') != -1); - this.isMSIE5_0 = this.isMSIE && (ua.indexOf('MSIE 5.0') != -1); - this.isMSIE7 = this.isMSIE && (ua.indexOf('MSIE 7') != -1); - this.isGecko = ua.indexOf('Gecko') != -1; // Will also be true on Safari - this.isSafari = ua.indexOf('Safari') != -1; - this.isOpera = window['opera'] && opera.buildNumber ? true : false; - this.isMac = ua.indexOf('Mac') != -1; - this.isNS7 = ua.indexOf('Netscape/7') != -1; - this.isNS71 = ua.indexOf('Netscape/7.1') != -1; - this.dialogCounter = 0; - this.plugins = []; - this.themes = []; - this.menus = []; - this.loadedPlugins = []; - this.buttonMap = []; - this.isLoaded = false; - - // Fake MSIE on Opera and if Opera fakes IE, Gecko or Safari cancel those - if (this.isOpera) { - this.isMSIE = true; - this.isGecko = false; - this.isSafari = false; - } - - this.isIE = this.isMSIE; - this.isRealIE = this.isMSIE && !this.isOpera; - - // TinyMCE editor id instance counter - this.idCounter = 0; -}; - -TinyMCE_Engine.prototype = { - init : function(settings) { - var theme, nl, baseHREF = "", i, cssPath, entities, h, p, src, elements = [], head; - - // IE 5.0x is no longer supported since 5.5, 6.0 and 7.0 now exists. We can't support old browsers forever, sorry. - if (this.isMSIE5_0) - return; - - this.settings = settings; - - // Check if valid browser has execcommand support - if (typeof(document.execCommand) == 'undefined') - return; - - // Get script base path - if (!tinyMCE.baseURL) { - // Search through head - head = document.getElementsByTagName('head')[0]; - - if (head) { - for (i=0, nl = head.getElementsByTagName('script'); i'); - this._def("font_size_classes", ''); - this._def("font_size_style_values", 'xx-small,x-small,small,medium,large,x-large,xx-large', true); - this._def("event_elements", 'a,img', true); - this._def("convert_urls", true); - this._def("table_inline_editing", false); - this._def("object_resizing", true); - this._def("custom_shortcuts", true); - this._def("convert_on_click", false); - this._def("content_css", ''); - this._def("fix_list_elements", true); - this._def("fix_table_elements", false); - this._def("strict_loading_mode", document.contentType == 'application/xhtml+xml'); - this._def("hidden_tab_class", ''); - this._def("display_tab_class", ''); - this._def("gecko_spellcheck", false); - this._def("hide_selects_on_submit", true); - this._def("forced_root_block", false); - this._def("remove_trailing_nbsp", false); - - // Force strict loading mode to false on non Gecko browsers - if (this.isMSIE && !this.isOpera) - this.settings.strict_loading_mode = false; - - // Browser check IE - if (this.isMSIE && this.settings.browsers.indexOf('msie') == -1) - return; - - // Browser check Gecko - if (this.isGecko && this.settings.browsers.indexOf('gecko') == -1) - return; - - // Browser check Safari - if (this.isSafari && this.settings.browsers.indexOf('safari') == -1) - return; - - // Browser check Opera - if (this.isOpera && this.settings.browsers.indexOf('opera') == -1) - return; - - // If not super absolute make it so - baseHREF = tinyMCE.settings.document_base_url; - h = document.location.href; - p = h.indexOf('://'); - if (p > 0 && document.location.protocol != "file:") { - p = h.indexOf('/', p + 3); - h = h.substring(0, p); - - if (baseHREF.indexOf('://') == -1) - baseHREF = h + baseHREF; - - tinyMCE.settings.document_base_url = baseHREF; - tinyMCE.settings.document_base_prefix = h; - } - - // Trim away query part - if (baseHREF.indexOf('?') != -1) - baseHREF = baseHREF.substring(0, baseHREF.indexOf('?')); - - this.settings.base_href = baseHREF.substring(0, baseHREF.lastIndexOf('/')) + "/"; - - theme = this.settings.theme; - this.inlineStrict = 'A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment'; - this.inlineTransitional = 'A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment'; - this.blockElms = 'H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP'; - this.blockRegExp = new RegExp("^(" + this.blockElms + ")$", "i"); - this.posKeyCodes = [13,45,36,35,33,34,37,38,39,40]; - this.uniqueURL = 'javascript:void(091039730);'; // Make unique URL non real URL - this.uniqueTag = ''; - this.callbacks = ['onInit', 'getInfo', 'getEditorTemplate', 'setupContent', 'onChange', 'onPageLoad', 'handleNodeChange', 'initInstance', 'execCommand', 'getControlHTML', 'handleEvent', 'cleanup', 'removeInstance']; - - // Theme url - this.settings.theme_href = tinyMCE.baseURL + "/themes/" + theme; - - if (!tinyMCE.isIE || tinyMCE.isOpera) - this.settings.force_br_newlines = false; - - if (tinyMCE.getParam("popups_css", false)) { - cssPath = tinyMCE.getParam("popups_css", ""); - - // Is relative - if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/') - this.settings.popups_css = this.documentBasePath + "/" + cssPath; - else - this.settings.popups_css = cssPath; - } else - this.settings.popups_css = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_popup.css"; - - if (tinyMCE.getParam("editor_css", false)) { - cssPath = tinyMCE.getParam("editor_css", ""); - - // Is relative - if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/') - this.settings.editor_css = this.documentBasePath + "/" + cssPath; - else - this.settings.editor_css = cssPath; - } else { - if (this.settings.editor_css !== '') - this.settings.editor_css = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_ui.css"; - } - - // Only do this once - if (this.configs.length == 0) { - if (typeof(TinyMCECompressed) == "undefined") { - tinyMCE.addEvent(window, "DOMContentLoaded", TinyMCE_Engine.prototype.onLoad); - - if (tinyMCE.isRealIE) { - if (document.body) - tinyMCE.addEvent(document.body, "readystatechange", TinyMCE_Engine.prototype.onLoad); - else - tinyMCE.addEvent(document, "readystatechange", TinyMCE_Engine.prototype.onLoad); - } - - tinyMCE.addEvent(window, "load", TinyMCE_Engine.prototype.onLoad); - tinyMCE._addUnloadEvents(); - } - } - - this.loadScript(tinyMCE.baseURL + '/themes/' + this.settings.theme + '/editor_template' + tinyMCE.srcMode + '.js'); - this.loadScript(tinyMCE.baseURL + '/langs/' + this.settings.language + '.js'); - this.loadCSS(this.settings.editor_css); - - // Add plugins - p = tinyMCE.getParam('plugins', '', true, ','); - if (p.length > 0) { - for (i=0; i&"]', 'g'); - }, - - _addUnloadEvents : function() { - var st = tinyMCE.settings.add_unload_trigger; - - if (tinyMCE.isIE) { - if (st) { - tinyMCE.addEvent(window, "unload", TinyMCE_Engine.prototype.unloadHandler); - tinyMCE.addEvent(window.document, "beforeunload", TinyMCE_Engine.prototype.unloadHandler); - } - } else { - if (st) - tinyMCE.addEvent(window, "unload", function () {tinyMCE.triggerSave(true, true);}); - } - }, - - _def : function(key, def_val, t) { - var v = tinyMCE.getParam(key, def_val); - - v = t ? v.replace(/\s+/g, "") : v; - - this.settings[key] = v; - }, - - hasPlugin : function(n) { - return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null; - }, - - addPlugin : function(n, p) { - var op = this.plugins[n]; - - // Use the previous plugin object base URL used when loading external plugins - p.baseURL = op ? op.baseURL : tinyMCE.baseURL + "/plugins/" + n; - this.plugins[n] = p; - - this.loadNextScript(); - }, - - setPluginBaseURL : function(n, u) { - var op = this.plugins[n]; - - if (op) - op.baseURL = u; - else - this.plugins[n] = {baseURL : u}; - }, - - loadPlugin : function(n, u) { - u = u.indexOf('.js') != -1 ? u.substring(0, u.lastIndexOf('/')) : u; - u = u.charAt(u.length-1) == '/' ? u.substring(0, u.length-1) : u; - this.plugins[n] = {baseURL : u}; - this.loadScript(u + "/editor_plugin" + (tinyMCE.srcMode ? '_src' : '') + ".js"); - }, - - hasTheme : function(n) { - return typeof(this.themes[n]) != "undefined" && this.themes[n] != null; - }, - - addTheme : function(n, t) { - this.themes[n] = t; - - this.loadNextScript(); - }, - - addMenu : function(n, m) { - this.menus[n] = m; - }, - - hasMenu : function(n) { - return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null; - }, - - loadScript : function(url) { - var i; - - for (i=0; i'); - - this.loadedFiles[this.loadedFiles.length] = url; - }, - - loadNextScript : function() { - var d = document, se; - - if (!tinyMCE.settings.strict_loading_mode) - return; - - if (this.loadingIndex < this.pendingFiles.length) { - se = d.createElementNS('http://www.w3.org/1999/xhtml', 'script'); - se.setAttribute('language', 'javascript'); - se.setAttribute('type', 'text/javascript'); - se.setAttribute('src', this.pendingFiles[this.loadingIndex++]); - - d.getElementsByTagName("head")[0].appendChild(se); - } else - this.loadingIndex = -1; // Done with loading - }, - - loadCSS : function(url) { - var ar = url.replace(/\s+/, '').split(','); - var lflen = 0, csslen = 0, skip = false; - var x = 0, i = 0, nl, le; - - for (x = 0,csslen = ar.length; x 0) { - /* Make sure it doesn't exist. */ - for (i=0, lflen=this.loadedFiles.length; i'); - - this.loadedFiles[this.loadedFiles.length] = ar[x]; - } - } - } - }, - - importCSS : function(doc, css) { - var css_ary = css.replace(/\s+/, '').split(','); - var csslen, elm, headArr, x, css_file; - - for (x = 0, csslen = css_ary.length; x 0) { - // Is relative, make absolute - if (css_file.indexOf('://') == -1 && css_file.charAt(0) != '/') - css_file = this.documentBasePath + "/" + css_file; - - if (typeof(doc.createStyleSheet) == "undefined") { - elm = doc.createElement("link"); - - elm.rel = "stylesheet"; - elm.href = css_file; - - if ((headArr = doc.getElementsByTagName("head")) != null && headArr.length > 0) - headArr[0].appendChild(elm); - } else - doc.createStyleSheet(css_file); - } - } - }, - - confirmAdd : function(e, settings) { - var elm = tinyMCE.isIE ? event.srcElement : e.target; - var elementId = elm.name ? elm.name : elm.id; - - tinyMCE.settings = settings; - - if (tinyMCE.settings.convert_on_click || (!elm.getAttribute('mce_noask') && confirm(tinyMCELang.lang_edit_confirm))) - tinyMCE.addMCEControl(elm, elementId); - - elm.setAttribute('mce_noask', 'true'); - }, - - updateContent : function(form_element_name) { - var formElement, n, inst, doc; - - // Find MCE instance linked to given form element and copy it's value - formElement = document.getElementById(form_element_name); - for (n in tinyMCE.instances) { - inst = tinyMCE.instances[n]; - - if (!tinyMCE.isInstance(inst)) - continue; - - inst.switchSettings(); - - if (inst.formElement == formElement) { - doc = inst.getDoc(); - - tinyMCE._setHTML(doc, inst.formElement.value); - - if (!tinyMCE.isIE) - doc.body.innerHTML = tinyMCE._cleanupHTML(inst, doc, this.settings, doc.body, inst.visualAid); - } - } - }, - - addMCEControl : function(replace_element, form_element_name, target_document) { - var id = "mce_editor_" + tinyMCE.idCounter++; - var inst = new TinyMCE_Control(tinyMCE.settings); - - inst.editorId = id; - this.instances[id] = inst; - - inst._onAdd(replace_element, form_element_name, target_document); - }, - - removeInstance : function(ti) { - var t = [], n, i; - - // Remove from instances - for (n in tinyMCE.instances) { - i = tinyMCE.instances[n]; - - if (tinyMCE.isInstance(i) && ti != i) - t[n] = i; - } - - tinyMCE.instances = t; - - // Remove from global undo/redo - n = []; - t = tinyMCE.undoLevels; - - for (i=0; i 0) { - tinyMCE.nextUndoRedoAction = 'Undo'; - inst = this.undoLevels[--this.undoIndex]; - inst.select(); - - if (!tinyMCE.nextUndoRedoInstanceId) - inst.execCommand('Undo'); - } - } else - inst.execCommand('Undo'); - return true; - - case "Redo": - if (this.getParam('custom_undo_redo_global')) { - if (this.undoIndex <= this.undoLevels.length - 1) { - tinyMCE.nextUndoRedoAction = 'Redo'; - inst = this.undoLevels[this.undoIndex++]; - inst.select(); - - if (!tinyMCE.nextUndoRedoInstanceId) - inst.execCommand('Redo'); - } - } else - inst.execCommand('Redo'); - - return true; - - case 'mceFocus': - inst = tinyMCE.getInstanceById(value); - - if (inst) - inst.getWin().focus(); - return; - - case "mceAddControl": - case "mceAddEditor": - tinyMCE.addMCEControl(tinyMCE._getElementById(value), value); - return; - - case "mceAddFrameControl": - tinyMCE.addMCEControl(tinyMCE._getElementById(value.element, value.document), value.element, value.document); - return; - - case "mceRemoveControl": - case "mceRemoveEditor": - tinyMCE.removeMCEControl(value); - return; - - case "mceToggleEditor": - inst = tinyMCE.getInstanceById(value); - - if (inst) { - pe = document.getElementById(inst.editorId + '_parent'); - te = inst.oldTargetElement; - - if (typeof(inst.enabled) == 'undefined') - inst.enabled = true; - - inst.enabled = !inst.enabled; - - if (!inst.enabled) { - pe.style.display = 'none'; - - if (te.nodeName == 'TEXTAREA' || te.nodeName == 'INPUT') - te.value = inst.getHTML(); - else - te.innerHTML = inst.getHTML(); - - te.style.display = inst.oldTargetDisplay; - tinyMCE.dispatchCallback(inst, 'hide_instance_callback', 'hideInstance', inst); - } else { - pe.style.display = 'block'; - te.style.display = 'none'; - - if (te.nodeName == 'TEXTAREA' || te.nodeName == 'INPUT') - inst.setHTML(te.value); - else - inst.setHTML(te.innerHTML); - - inst.useCSS = false; - tinyMCE.dispatchCallback(inst, 'show_instance_callback', 'showInstance', inst); - } - } else - tinyMCE.addMCEControl(tinyMCE._getElementById(value), value); - - return; - - case "mceResetDesignMode": - // Resets the designmode state of the editors in Gecko - if (tinyMCE.isGecko) { - for (n in tinyMCE.instances) { - if (!tinyMCE.isInstance(tinyMCE.instances[n])) - continue; - - try { - tinyMCE.instances[n].getDoc().designMode = "off"; - tinyMCE.instances[n].getDoc().designMode = "on"; - tinyMCE.instances[n].useCSS = false; - } catch (e) { - // Ignore any errors - } - } - } - - return; - } - - if (inst) { - inst.execCommand(command, user_interface, value); - } else if (tinyMCE.settings.focus_alert) - alert(tinyMCELang.lang_focus_alert); - }, - - _createIFrame : function(replace_element, doc, win) { - var iframe, id = replace_element.getAttribute("id"); - var aw, ah; - - if (typeof(doc) == "undefined") - doc = document; - - if (typeof(win) == "undefined") - win = window; - - iframe = doc.createElement("iframe"); - - aw = "" + tinyMCE.settings.area_width; - ah = "" + tinyMCE.settings.area_height; - - if (aw.indexOf('%') == -1) { - aw = parseInt(aw); - aw = (isNaN(aw) || aw < 0) ? 300 : aw; - aw = aw + "px"; - } - - if (ah.indexOf('%') == -1) { - ah = parseInt(ah); - ah = (isNaN(ah) || ah < 0) ? 240 : ah; - ah = ah + "px"; - } - - iframe.setAttribute("id", id); - iframe.setAttribute("name", id); - iframe.setAttribute("class", "mceEditorIframe"); - iframe.setAttribute("border", "0"); - iframe.setAttribute("frameBorder", "0"); - iframe.setAttribute("marginWidth", "0"); - iframe.setAttribute("marginHeight", "0"); - iframe.setAttribute("leftMargin", "0"); - iframe.setAttribute("topMargin", "0"); - iframe.setAttribute("width", aw); - iframe.setAttribute("height", ah); - iframe.setAttribute("allowtransparency", "true"); - iframe.className = 'mceEditorIframe'; - - if (tinyMCE.settings.auto_resize) - iframe.setAttribute("scrolling", "no"); - - // Must have a src element in MSIE HTTPs breaks aswell as absoute URLs - if (tinyMCE.isRealIE) - iframe.setAttribute("src", this.settings.default_document); - - iframe.style.width = aw; - iframe.style.height = ah; - - // Ugly hack for Gecko problem in strict mode - if (tinyMCE.settings.strict_loading_mode) - iframe.style.marginBottom = '-5px'; - - // MSIE 5.0 issue - if (tinyMCE.isRealIE) - replace_element.outerHTML = iframe.outerHTML; - else - replace_element.parentNode.replaceChild(iframe, replace_element); - - if (tinyMCE.isRealIE) - return win.frames[id]; - else - return iframe; - }, - - setupContent : function(editor_id) { - var inst = tinyMCE.instances[editor_id], i, doc = inst.getDoc(), head = doc.getElementsByTagName('head').item(0); - var content = inst.startContent, contentElement, body; - - // HTML values get XML encoded in strict mode - if (tinyMCE.settings.strict_loading_mode) { - content = content.replace(/</g, '<'); - content = content.replace(/>/g, '>'); - content = content.replace(/"/g, '"'); - content = content.replace(/&/g, '&'); - } - - tinyMCE.selectedInstance = inst; - inst.switchSettings(); - - // Not loaded correctly hit it again, Mozilla bug #997860 - if (!tinyMCE.isIE && tinyMCE.getParam("setupcontent_reload", false) && doc.title != "blank_page") { - // This part will remove the designMode status - // Failes first time in Firefox 1.5b2 on Mac - try {doc.location.href = tinyMCE.baseURL + "/blank.htm";} catch (ex) {} - window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 1000); - return; - } - - // Wait for it to load - if (!head || !doc.body) { - window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 10); - return; - } - - // Import theme specific content CSS the user specific - tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/themes/" + inst.settings.theme + "/css/editor_content.css"); - tinyMCE.importCSS(inst.getDoc(), inst.settings.content_css); - tinyMCE.dispatchCallback(inst, 'init_instance_callback', 'initInstance', inst); - - // Setup keyboard shortcuts - if (tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')) { - inst.addShortcut('ctrl', 'z', 'lang_undo_desc', 'Undo'); - inst.addShortcut('ctrl', 'y', 'lang_redo_desc', 'Redo'); - } - - // BlockFormat shortcuts keys - for (i=1; i<=6; i++) - inst.addShortcut('ctrl', '' + i, '', 'FormatBlock', false, ''); - - inst.addShortcut('ctrl', '7', '', 'FormatBlock', false, '

'); - inst.addShortcut('ctrl', '8', '', 'FormatBlock', false, '

'); - inst.addShortcut('ctrl', '9', '', 'FormatBlock', false, '
'); - - // Add default shortcuts for gecko - if (tinyMCE.isGecko) { - inst.addShortcut('ctrl', 'b', 'lang_bold_desc', 'Bold'); - inst.addShortcut('ctrl', 'i', 'lang_italic_desc', 'Italic'); - inst.addShortcut('ctrl', 'u', 'lang_underline_desc', 'Underline'); - } - - // Setup span styles - if (tinyMCE.getParam("convert_fonts_to_spans")) - inst.getBody().setAttribute('id', 'mceSpanFonts'); - - if (tinyMCE.settings.nowrap) - doc.body.style.whiteSpace = "nowrap"; - - doc.body.dir = this.settings.directionality; - doc.editorId = editor_id; - - // Add on document element in Mozilla - if (!tinyMCE.isIE) - doc.documentElement.editorId = editor_id; - - inst.setBaseHREF(tinyMCE.settings.base_href); - - // Replace new line characters to BRs - if (tinyMCE.settings.convert_newlines_to_brs) { - content = tinyMCE.regexpReplace(content, "\r\n", "
", "gi"); - content = tinyMCE.regexpReplace(content, "\r", "
", "gi"); - content = tinyMCE.regexpReplace(content, "\n", "
", "gi"); - } - - // Open closed anchors - // content = content.replace(new RegExp('', 'gi'), ''); - - // Call custom cleanup code - content = tinyMCE.storeAwayURLs(content); - content = tinyMCE._customCleanup(inst, "insert_to_editor", content); - - if (tinyMCE.isIE) { - // Ugly!!! - window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["' + editor_id + '"].getDoc(), "' + editor_id + '");}catch(e){}', 500); - - if (tinyMCE.settings.force_br_newlines) - doc.styleSheets[0].addRule("p", "margin: 0;"); - - body = inst.getBody(); - body.editorId = editor_id; - } - - content = tinyMCE.cleanupHTMLCode(content); - - // Fix for bug #958637 - if (!tinyMCE.isIE) { - contentElement = inst.getDoc().createElement("body"); - doc = inst.getDoc(); - - contentElement.innerHTML = content; - - if (tinyMCE.settings.cleanup_on_startup) - tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, doc, this.settings, contentElement)); - else - tinyMCE.setInnerHTML(inst.getBody(), content); - - tinyMCE.convertAllRelativeURLs(inst.getBody()); - } else { - if (tinyMCE.settings.cleanup_on_startup) { - tinyMCE._setHTML(inst.getDoc(), content); - - // Produces permission denied error in MSIE 5.5 - try { - tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody())); - } catch(e) { - // Ignore - } - } else - tinyMCE._setHTML(inst.getDoc(), content); - } - - // Fix for bug #957681 - //inst.getDoc().designMode = inst.getDoc().designMode; - - tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings.visual, inst); - tinyMCE.dispatchCallback(inst, 'setupcontent_callback', 'setupContent', editor_id, inst.getBody(), inst.getDoc()); - - // Re-add design mode on mozilla - if (!tinyMCE.isIE) - tinyMCE.addEventHandlers(inst); - - // Add blur handler - if (tinyMCE.isIE) { - tinyMCE.addEvent(inst.getBody(), "blur", TinyMCE_Engine.prototype._eventPatch); - tinyMCE.addEvent(inst.getBody(), "beforedeactivate", TinyMCE_Engine.prototype._eventPatch); // Bug #1439953 - - // Workaround for drag drop/copy paste base href bug - if (!tinyMCE.isOpera) { - tinyMCE.addEvent(doc.body, "mousemove", TinyMCE_Engine.prototype.onMouseMove); - tinyMCE.addEvent(doc.body, "beforepaste", TinyMCE_Engine.prototype._eventPatch); - tinyMCE.addEvent(doc.body, "drop", TinyMCE_Engine.prototype._eventPatch); - } - } - - // Trigger node change, this call locks buttons for tables and so forth - inst.select(); - tinyMCE.selectedElement = inst.contentWindow.document.body; - - // Call custom DOM cleanup - tinyMCE._customCleanup(inst, "insert_to_editor_dom", inst.getBody()); - tinyMCE._customCleanup(inst, "setup_content_dom", inst.getBody()); - tinyMCE._setEventsEnabled(inst.getBody(), false); - tinyMCE.cleanupAnchors(inst.getDoc()); - - if (tinyMCE.getParam("convert_fonts_to_spans")) - tinyMCE.convertSpansToFonts(inst.getDoc()); - - inst.startContent = tinyMCE.trim(inst.getBody().innerHTML); - inst.undoRedo.add({ content : inst.startContent }); - - // Cleanup any mess left from storyAwayURLs - if (tinyMCE.isGecko) { - // Remove mce_src from textnodes and comments - tinyMCE.selectNodes(inst.getBody(), function(n) { - if (n.nodeType == 3 || n.nodeType == 8) - n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), ""); - - return false; - }); - } - - // Remove Gecko spellchecking - if (tinyMCE.isGecko) - inst.getBody().spellcheck = tinyMCE.getParam("gecko_spellcheck"); - - // Cleanup any mess left from storyAwayURLs - tinyMCE._removeInternal(inst.getBody()); - - inst.select(); - tinyMCE.triggerNodeChange(false, true); - }, - - storeAwayURLs : function(s) { - // Remove all mce_src, mce_href and replace them with new ones - // s = s.replace(new RegExp('mce_src\\s*=\\s*\"[^ >\"]*\"', 'gi'), ''); - // s = s.replace(new RegExp('mce_href\\s*=\\s*\"[^ >\"]*\"', 'gi'), ''); - - if (!s.match(/(mce_src|mce_href)/gi, s)) { - s = s.replace(new RegExp('src\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'src="$1" mce_src="$1"'); - s = s.replace(new RegExp('href\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'href="$1" mce_href="$1"'); - } - - return s; - }, - - _removeInternal : function(n) { - if (tinyMCE.isGecko) { - // Remove mce_src from textnodes and comments - tinyMCE.selectNodes(n, function(n) { - if (n.nodeType == 3 || n.nodeType == 8) - n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), ""); - - return false; - }); - } - }, - - removeTinyMCEFormElements : function(form_obj) { - var i, elementId; - - // Skip form element removal - if (!tinyMCE.getParam('hide_selects_on_submit')) - return; - - // Check if form is valid - if (typeof(form_obj) == "undefined" || form_obj == null) - return; - - // If not a form, find the form - if (form_obj.nodeName != "FORM") { - if (form_obj.form) - form_obj = form_obj.form; - else - form_obj = tinyMCE.getParentElement(form_obj, "form"); - } - - // Still nothing - if (form_obj == null) - return; - - // Disable all UI form elements that TinyMCE created - for (i=0; i"); - rng.collapse(false); - rng.select(); - - tinyMCE.execCommand("mceAddUndoLevel"); - tinyMCE.triggerNodeChange(false); - return false; - } - } - - // Backspace or delete - if (e.keyCode == 8 || e.keyCode == 46) { - tinyMCE.selectedElement = e.target; - tinyMCE.linkElement = tinyMCE.getParentElement(e.target, "a"); - tinyMCE.imgElement = tinyMCE.getParentElement(e.target, "img"); - tinyMCE.triggerNodeChange(false); - } - - return false; - - case "keyup": - case "keydown": - tinyMCE.hideMenus(); - tinyMCE.hasMouseMoved = false; - - if (inst && inst.handleShortcut(e)) - return false; - - inst._fixRootBlocks(); - - if (inst.settings.remove_trailing_nbsp) - inst._fixTrailingNbsp(); - - if (e.target.editorId) - tinyMCE.instances[e.target.editorId].select(); - - if (tinyMCE.selectedInstance) - tinyMCE.selectedInstance.switchSettings(); - - inst = tinyMCE.selectedInstance; - - // Handle backspace - if (tinyMCE.isGecko && tinyMCE.settings.force_p_newlines && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) { - // Insert P element instead of BR - if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) { - // Cancel event - tinyMCE.execCommand("mceAddUndoLevel"); - e.preventDefault(); - return false; - } - } - - tinyMCE.selectedElement = null; - tinyMCE.selectedNode = null; - elm = tinyMCE.selectedInstance.getFocusElement(); - tinyMCE.linkElement = tinyMCE.getParentElement(elm, "a"); - tinyMCE.imgElement = tinyMCE.getParentElement(elm, "img"); - tinyMCE.selectedElement = elm; - - // Update visualaids on tabs - if (tinyMCE.isGecko && e.type == "keyup" && e.keyCode == 9) - tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings.visual, tinyMCE.selectedInstance); - - // Fix empty elements on return/enter, check where enter occured - if (tinyMCE.isIE && e.type == "keydown" && e.keyCode == 13) - tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement(); - - // Fix empty elements on return/enter - if (tinyMCE.isIE && e.type == "keyup" && e.keyCode == 13) { - elm = tinyMCE.enterKeyElement; - if (elm) { - var re = new RegExp('^HR|IMG|BR$','g'); // Skip these - var dre = new RegExp('^H[1-6]$','g'); // Add double on these - - if (!elm.hasChildNodes() && !re.test(elm.nodeName)) { - if (dre.test(elm.nodeName)) - elm.innerHTML = "  "; - else - elm.innerHTML = " "; - } - } - } - - // Check if it's a position key - keys = tinyMCE.posKeyCodes; - var posKey = false; - for (i=0; i'; - h += '{$'+lang+'}'; - h += ''; - } else { - // Normal button - h += ''; - h += '{$'+lang+'}'; - h += ''; - } - - return h; - }, - - getMenuButtonHTML : function(id, lang, img, mcmd, cmd, ui, val) { - var h = '', m, x; - - mcmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + mcmd + '\');'; - cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\''; - - if (typeof(ui) != "undefined" && ui != null) - cmd += ',' + ui; - - if (typeof(val) != "undefined" && val != null) - cmd += ",'" + val + "'"; - - cmd += ');'; - - // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled - if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) { - x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20); - - if (tinyMCE.isRealIE) - h += ''; - else - h += ''; - - h += ''; - h += ''; - h += ''; - h += ''; - } else { - if (tinyMCE.isRealIE) - h += ''; - else - h += ''; - - h += ''; - h += ''; - h += ''; - h += ''; - } - - return h; - }, - - _menuButtonEvent : function(e, o) { - if (o.className == 'mceMenuButtonFocus') - return; - - if (e == 'over') - o.className = o.className + ' mceMenuHover'; - else - o.className = o.className.replace(/\s.*$/, ''); - }, - - addButtonMap : function(m) { - var i, a = m.replace(/\s+/, '').split(','); - - for (i=0; i 0); - - if (tinyMCE.settings.custom_undo_redo) { - undoIndex = inst.undoRedo.undoIndex; - undoLevels = inst.undoRedo.undoLevels.length; - } - - tinyMCE.dispatchCallback(inst, 'handle_node_change_callback', 'handleNodeChange', editorId, elm, undoIndex, undoLevels, inst.visualAid, anySelection, setup_content); - } - - if (this.selectedInstance && (typeof(focus) == "undefined" || focus)) - this.selectedInstance.contentWindow.focus(); - }, - - _customCleanup : function(inst, type, content) { - var pl, po, i, customCleanup; - - // Call custom cleanup - customCleanup = tinyMCE.settings.cleanup_callback; - if (customCleanup != '') - content = tinyMCE.resolveDots(tinyMCE.settings.cleanup_callback, window)(type, content, inst); - - // Trigger theme cleanup - po = tinyMCE.themes[tinyMCE.settings.theme]; - if (po && po.cleanup) - content = po.cleanup(type, content, inst); - - // Trigger plugin cleanups - pl = inst.plugins; - for (i=0; i 0) - className += " "; - - className += classNames[i]; - } - - return className; - }, - - handleVisualAid : function(el, deep, state, inst, skip_dispatch) { - var i, x, y, tableElement, anchorName, oldW, oldH, bo, cn; - - if (!el) - return; - - if (!skip_dispatch) - tinyMCE.dispatchCallback(inst, 'handle_visual_aid_callback', 'handleVisualAid', el, deep, state, inst); - - tableElement = null; - - switch (el.nodeName) { - case "TABLE": - oldW = el.style.width; - oldH = el.style.height; - bo = tinyMCE.getAttrib(el, "border"); - - bo = bo == '' || bo == "0" ? true : false; - - tinyMCE.setAttrib(el, "class", tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el, "class"), state && bo)); - - el.style.width = oldW; - el.style.height = oldH; - - for (y=0; y 0) - return inst.cssClasses; - - if (!doc) - return; - - styles = doc.styleSheets; - - if (styles && styles.length > 0) { - for (x=0; x' + tinyMCE.replaceVar(v, "pluginurl", o.baseURL) + ''; - - return tinyMCE.replaceVar(v, "pluginurl", o.baseURL); - } - } - - o = tinyMCE.themes[tinyMCE.settings.theme]; - if (o.getControlHTML && (v = o.getControlHTML(c)) !== '') { - if (rtl) - return '' + v + ''; - - return v; - } - - return ''; - }, - - evalFunc : function(f, idx, a, o) { - o = !o ? window : o; - f = typeof(f) == 'function' ? f : o[f]; - - return f.apply(o, Array.prototype.slice.call(a, idx)); - }, - - dispatchCallback : function(i, p, n) { - return this.callFunc(i, p, n, 0, this.dispatchCallback.arguments); - }, - - executeCallback : function(i, p, n) { - return this.callFunc(i, p, n, 1, this.executeCallback.arguments); - }, - - execCommandCallback : function(i, p, n) { - return this.callFunc(i, p, n, 2, this.execCommandCallback.arguments); - }, - - callFunc : function(ins, p, n, m, a) { - var l, i, on, o, s, v; - - s = m == 2; - - l = tinyMCE.getParam(p, ''); - - if (l !== '' && (v = tinyMCE.evalFunc(l, 3, a)) == s && m > 0) - return true; - - if (ins != null) { - for (i=0, l = ins.plugins; i 0) - return true; - } - } - - l = tinyMCE.themes; - for (on in l) { - o = l[on]; - - if (o[n] && (v = tinyMCE.evalFunc(n, 3, a, o)) == s && m > 0) - return true; - } - - return false; - }, - - resolveDots : function(s, o) { - var i; - - if (typeof(s) == 'string') { - for (i=0, s=s.split('.'); i': - return '>'; - } - - return c; - }) : s; - }, - - add : function(c, m) { - var n; - - for (n in m) - c.prototype[n] = m[n]; - }, - - extend : function(p, np) { - var o = {}, n; - - o.parent = p; - - for (n in p) - o[n] = p[n]; - - for (n in np) - o[n] = np[n]; - - return o; - }, - - hideMenus : function() { - var e = tinyMCE.lastSelectedMenuBtn; - - if (tinyMCE.lastMenu) { - tinyMCE.lastMenu.hide(); - tinyMCE.lastMenu = null; - } - - if (e) { - tinyMCE.switchClass(e, tinyMCE.lastMenuBtnClass); - tinyMCE.lastSelectedMenuBtn = null; - } - } - - }; - -// Global instances -var TinyMCE = TinyMCE_Engine; // Compatiblity with gzip compressors -var tinyMCE = new TinyMCE_Engine(); -var tinyMCELang = {}; - -/* file:jscripts/tiny_mce/classes/TinyMCE_Control.class.js */ - -function TinyMCE_Control(settings) { - var t, i, tos, fu, p, x, fn, fu, pn, s = settings; - - this.undoRedoLevel = true; - this.isTinyMCE_Control = true; - - // Default settings - this.enabled = true; - this.settings = s; - this.settings.theme = tinyMCE.getParam("theme", "default"); - this.settings.width = tinyMCE.getParam("width", -1); - this.settings.height = tinyMCE.getParam("height", -1); - this.selection = new TinyMCE_Selection(this); - this.undoRedo = new TinyMCE_UndoRedo(this); - this.cleanup = new TinyMCE_Cleanup(); - this.shortcuts = []; - this.hasMouseMoved = false; - this.foreColor = this.backColor = "#999999"; - this.data = {}; - this.cssClasses = []; - - this.cleanup.init({ - valid_elements : s.valid_elements, - extended_valid_elements : s.extended_valid_elements, - valid_child_elements : s.valid_child_elements, - entities : s.entities, - entity_encoding : s.entity_encoding, - debug : s.cleanup_debug, - indent : s.apply_source_formatting, - invalid_elements : s.invalid_elements, - verify_html : s.verify_html, - fix_content_duplication : s.fix_content_duplication, - convert_fonts_to_spans : s.convert_fonts_to_spans - }); - - // Wrap old theme - t = this.settings.theme; - if (!tinyMCE.hasTheme(t)) { - fn = tinyMCE.callbacks; - tos = {}; - - for (i=0; i 0) { - for (i=0; i 1 && tinyMCE.currentConfig != this.settings.index) { - tinyMCE.settings = this.settings; - tinyMCE.currentConfig = this.settings.index; - } - }, - - select : function() { - var oldInst = tinyMCE.selectedInstance; - - if (oldInst != this) { - if (oldInst) - oldInst.execCommand('mceEndTyping'); - - tinyMCE.dispatchCallback(this, 'select_instance_callback', 'selectInstance', this, oldInst); - tinyMCE.selectedInstance = this; - } - }, - - getBody : function() { - return this.contentBody ? this.contentBody : this.getDoc().body; - }, - - getDoc : function() { -// return this.contentDocument ? this.contentDocument : this.contentWindow.document; // Removed due to IE 5.5 ? - return this.contentWindow.document; - }, - - getWin : function() { - return this.contentWindow; - }, - - getContainerWin : function() { - return this.containerWindow ? this.containerWindow : window; - }, - - getViewPort : function() { - return tinyMCE.getViewPort(this.getWin()); - }, - - getParentNode : function(n, f) { - return tinyMCE.getParentNode(n, f, this.getBody()); - }, - - getParentElement : function(n, na, f) { - return tinyMCE.getParentElement(n, na, f, this.getBody()); - }, - - getParentBlockElement : function(n) { - return tinyMCE.getParentBlockElement(n, this.getBody()); - }, - - resizeToContent : function() { - var d = this.getDoc(), b = d.body, de = d.documentElement; - - this.iframeElement.style.height = (tinyMCE.isRealIE) ? b.scrollHeight : de.offsetHeight + 'px'; - }, - - addShortcut : function(m, k, d, cmd, ui, va) { - var n = typeof(k) == "number", ie = tinyMCE.isIE, c, sc, i, scl = this.shortcuts; - - if (!tinyMCE.getParam('custom_shortcuts')) - return false; - - m = m.toLowerCase(); - k = ie && !n ? k.toUpperCase() : k; - c = n ? null : k.charCodeAt(0); - d = d && d.indexOf('lang_') == 0 ? tinyMCE.getLang(d) : d; - - sc = { - alt : m.indexOf('alt') != -1, - ctrl : m.indexOf('ctrl') != -1, - shift : m.indexOf('shift') != -1, - charCode : c, - keyCode : n ? k : (ie ? c : null), - desc : d, - cmd : cmd, - ui : ui, - val : va - }; - - for (i=0; i 1 && /(^\u00a0|\u00a0$)/.test(v)) { - e.firstChild.nodeValue = v.replace(/(^\u00a0|\u00a0$)/, ''); - s.selectNode(e.firstChild, true, false, false); // Select and collapse - } - } - }, - - _setUseCSS : function(b) { - var d = this.getDoc(); - - try {d.execCommand("useCSS", false, !b);} catch (ex) {} - try {d.execCommand("styleWithCSS", false, b);} catch (ex) {} - - if (!tinyMCE.getParam("table_inline_editing")) - try {d.execCommand('enableInlineTableEditing', false, "false");} catch (ex) {} - - if (!tinyMCE.getParam("object_resizing")) - try {d.execCommand('enableObjectResizing', false, "false");} catch (ex) {} - }, - - execCommand : function(command, user_interface, value) { - var i, x, z, align, img, div, doc = this.getDoc(), win = this.getWin(), focusElm = this.getFocusElement(); - - // Is not a undo specific command - if (!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel', 'gi').test(command)) - this.undoBookmark = null; - - // Mozilla issue - if (!tinyMCE.isIE && !this.useCSS) { - this._setUseCSS(false); - this.useCSS = true; - } - - //debug("command: " + command + ", user_interface: " + user_interface + ", value: " + value); - this.contentDocument = doc; // <-- Strange, unless this is applied Mozilla 1.3 breaks - - // Don't dispatch key commands - if (!/mceStartTyping|mceEndTyping/.test(command)) { - if (tinyMCE.execCommandCallback(this, 'execcommand_callback', 'execCommand', this.editorId, this.getBody(), command, user_interface, value)) - return; - } - - // Fix align on images - if (focusElm && focusElm.nodeName == "IMG") { - align = focusElm.getAttribute('align'); - img = command == "JustifyCenter" ? focusElm.cloneNode(false) : focusElm; - - switch (command) { - case "JustifyLeft": - if (align == 'left') - img.removeAttribute('align'); - else - img.setAttribute('align', 'left'); - - // Remove the div - div = focusElm.parentNode; - if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode) - div.parentNode.replaceChild(img, div); - - this.selection.selectNode(img); - this.repaint(); - tinyMCE.triggerNodeChange(); - return; - - case "JustifyCenter": - img.removeAttribute('align'); - - // Is centered - div = tinyMCE.getParentElement(focusElm, "div"); - if (div && div.style.textAlign == "center") { - // Remove div - if (div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode) - div.parentNode.replaceChild(img, div); - } else { - // Add div - div = this.getDoc().createElement("div"); - div.style.textAlign = 'center'; - div.appendChild(img); - focusElm.parentNode.replaceChild(div, focusElm); - } - - this.selection.selectNode(img); - this.repaint(); - tinyMCE.triggerNodeChange(); - return; - - case "JustifyRight": - if (align == 'right') - img.removeAttribute('align'); - else - img.setAttribute('align', 'right'); - - // Remove the div - div = focusElm.parentNode; - if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode) - div.parentNode.replaceChild(img, div); - - this.selection.selectNode(img); - this.repaint(); - tinyMCE.triggerNodeChange(); - return; - } - } - - if (tinyMCE.settings.force_br_newlines) { - var alignValue = ""; - - if (doc.selection.type != "Control") { - switch (command) { - case "JustifyLeft": - alignValue = "left"; - break; - - case "JustifyCenter": - alignValue = "center"; - break; - - case "JustifyFull": - alignValue = "justify"; - break; - - case "JustifyRight": - alignValue = "right"; - break; - } - - if (alignValue !== '') { - var rng = doc.selection.createRange(); - - if ((divElm = tinyMCE.getParentElement(rng.parentElement(), "div")) != null) - divElm.setAttribute("align", alignValue); - else if (rng.pasteHTML && rng.htmlText.length > 0) - rng.pasteHTML('
' + rng.htmlText + "
"); - - tinyMCE.triggerNodeChange(); - return; - } - } - } - - switch (command) { - case "mceRepaint": - this.repaint(); - return true; - - case "unlink": - // Unlink if caret is inside link - if (tinyMCE.isGecko && this.getSel().isCollapsed) { - focusElm = tinyMCE.getParentElement(focusElm, 'A'); - - if (focusElm) - this.selection.selectNode(focusElm, false); - } - - this.getDoc().execCommand(command, user_interface, value); - - tinyMCE.isGecko && this.getSel().collapseToEnd(); - - tinyMCE.triggerNodeChange(); - - return true; - - case "InsertUnorderedList": - case "InsertOrderedList": - this.getDoc().execCommand(command, user_interface, value); - tinyMCE.triggerNodeChange(); - break; - - case "Strikethrough": - this.getDoc().execCommand(command, user_interface, value); - tinyMCE.triggerNodeChange(); - break; - - case "mceSelectNode": - this.selection.selectNode(value); - tinyMCE.triggerNodeChange(); - tinyMCE.selectedNode = value; - break; - - case "FormatBlock": - if (value == null || value == '') { - var elm = tinyMCE.getParentElement(this.getFocusElement(), "p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp"); - - if (elm) - this.execCommand("mceRemoveNode", false, elm); - } else { - if (!this.cleanup.isValid(value)) - return true; - - if (tinyMCE.isGecko && new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>', 'gi').test(value)) - value = value.replace(/[^a-z]/gi, ''); - - if (tinyMCE.isIE && new RegExp('blockquote|code|samp', 'gi').test(value)) { - var b = this.selection.getBookmark(); - this.getDoc().execCommand("FormatBlock", false, '

'); - tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()), value); - this.selection.moveToBookmark(b); - } else - this.getDoc().execCommand("FormatBlock", false, value); - } - - tinyMCE.triggerNodeChange(); - - break; - - case "mceRemoveNode": - if (!value) - value = tinyMCE.getParentElement(this.getFocusElement()); - - if (tinyMCE.isIE) { - value.outerHTML = value.innerHTML; - } else { - var rng = value.ownerDocument.createRange(); - rng.setStartBefore(value); - rng.setEndAfter(value); - rng.deleteContents(); - rng.insertNode(rng.createContextualFragment(value.innerHTML)); - } - - tinyMCE.triggerNodeChange(); - - break; - - case "mceSelectNodeDepth": - var parentNode = this.getFocusElement(); - for (i=0; parentNode; i++) { - if (parentNode.nodeName.toLowerCase() == "body") - break; - - if (parentNode.nodeName.toLowerCase() == "#text") { - i--; - parentNode = parentNode.parentNode; - continue; - } - - if (i == value) { - this.selection.selectNode(parentNode, false); - tinyMCE.triggerNodeChange(); - tinyMCE.selectedNode = parentNode; - return; - } - - parentNode = parentNode.parentNode; - } - - break; - - case "mceSetStyleInfo": - case "SetStyleInfo": - var rng = this.getRng(); - var sel = this.getSel(); - var scmd = value.command; - var sname = value.name; - var svalue = value.value == null ? '' : value.value; - //var svalue = value['value'] == null ? '' : value['value']; - var wrapper = value.wrapper ? value.wrapper : "span"; - var parentElm = null; - var invalidRe = new RegExp("^BODY|HTML$", "g"); - var invalidParentsRe = tinyMCE.settings.merge_styles_invalid_parents !== '' ? new RegExp(tinyMCE.settings.merge_styles_invalid_parents, "gi") : null; - - // Whole element selected check - if (tinyMCE.isIE) { - // Control range - if (rng.item) - parentElm = rng.item(0); - else { - var pelm = rng.parentElement(); - var prng = doc.selection.createRange(); - prng.moveToElementText(pelm); - - if (rng.htmlText == prng.htmlText || rng.boundingWidth == 0) { - if (invalidParentsRe == null || !invalidParentsRe.test(pelm.nodeName)) - parentElm = pelm; - } - } - } else { - var felm = this.getFocusElement(); - if (sel.isCollapsed || (new RegExp('td|tr|tbody|table|img', 'gi').test(felm.nodeName) && sel.anchorNode == felm.parentNode)) - parentElm = felm; - } - - // Whole element selected - if (parentElm && !invalidRe.test(parentElm.nodeName)) { - if (scmd == "setstyle") - tinyMCE.setStyleAttrib(parentElm, sname, svalue); - - if (scmd == "setattrib") - tinyMCE.setAttrib(parentElm, sname, svalue); - - if (scmd == "removeformat") { - parentElm.style.cssText = ''; - tinyMCE.setAttrib(parentElm, 'class', ''); - } - - // Remove style/attribs from all children - var ch = tinyMCE.getNodeTree(parentElm, [], 1); - for (z=0; z=0; i--) { - var elm = nodes[i]; - var isNew = tinyMCE.getAttrib(elm, "mce_new") == "true"; - - elm.removeAttribute("mce_new"); - - // Is only child a element - if (elm.childNodes && elm.childNodes.length == 1 && elm.childNodes[0].nodeType == 1) { - //tinyMCE.debug("merge1" + isNew); - this._mergeElements(scmd, elm, elm.childNodes[0], isNew); - continue; - } - - // Is I the only child - if (elm.parentNode.childNodes.length == 1 && !invalidRe.test(elm.nodeName) && !invalidRe.test(elm.parentNode.nodeName)) { - //tinyMCE.debug("merge2" + isNew + "," + elm.nodeName + "," + elm.parentNode.nodeName); - if (invalidParentsRe == null || !invalidParentsRe.test(elm.parentNode.nodeName)) - this._mergeElements(scmd, elm.parentNode, elm, false); - } - } - - // Remove empty wrappers - var nodes = doc.getElementsByTagName(wrapper); - for (i=nodes.length-1; i>=0; i--) { - var elm = nodes[i], isEmpty = true; - - // Check if it has any attribs - var tmp = doc.createElement("body"); - tmp.appendChild(elm.cloneNode(false)); - - // Is empty span, remove it - tmp.innerHTML = tmp.innerHTML.replace(new RegExp('style=""|class=""', 'gi'), ''); - //tinyMCE.debug(tmp.innerHTML); - if (new RegExp('', 'gi').test(tmp.innerHTML)) { - for (x=0; x 0) { - value = tinyMCE.replaceVar(value, "selection", selectedText); - tinyMCE.execCommand('mceInsertContent', false, value); - } - - this._addBogusBR(); - tinyMCE.triggerNodeChange(); - break; - - case "mceSetAttribute": - if (typeof(value) == 'object') { - var targetElms = (typeof(value.targets) == "undefined") ? "p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address" : value.targets; - var targetNode = tinyMCE.getParentElement(this.getFocusElement(), targetElms); - - if (targetNode) { - targetNode.setAttribute(value.name, value.value); - tinyMCE.triggerNodeChange(); - } - } - break; - - case "mceSetCSSClass": - this.execCommand("mceSetStyleInfo", false, {command : "setattrib", name : "class", value : value}); - break; - - case "mceInsertRawHTML": - var key = 'tiny_mce_marker'; - - this.execCommand('mceBeginUndoLevel'); - - // Insert marker key - this.execCommand('mceInsertContent', false, key); - - // Store away scroll pos - var scrollX = this.getBody().scrollLeft + this.getDoc().documentElement.scrollLeft; - var scrollY = this.getBody().scrollTop + this.getDoc().documentElement.scrollTop; - - // Find marker and replace with RAW HTML - var html = this.getBody().innerHTML; - if ((pos = html.indexOf(key)) != -1) - tinyMCE.setInnerHTML(this.getBody(), html.substring(0, pos) + value + html.substring(pos + key.length)); - - // Restore scoll pos - this.contentWindow.scrollTo(scrollX, scrollY); - - this.execCommand('mceEndUndoLevel'); - - break; - - case "mceInsertContent": - // Force empty string - if (!value) - value = ''; - - var insertHTMLFailed = false; - - // Removed since it produced problems in IE - // this.getWin().focus(); - - if (tinyMCE.isGecko || tinyMCE.isOpera) { - try { - // Is plain text or HTML, &,   etc will be encoded wrong in FF - if (value.indexOf('<') == -1 && !value.match(/(&| |<|>)/g)) { - var r = this.getRng(); - var n = this.getDoc().createTextNode(tinyMCE.entityDecode(value)); - var s = this.getSel(); - var r2 = r.cloneRange(); - - // Insert text at cursor position - s.removeAllRanges(); - r.deleteContents(); - r.insertNode(n); - - // Move the cursor to the end of text - r2.selectNode(n); - r2.collapse(false); - s.removeAllRanges(); - s.addRange(r2); - } else { - value = tinyMCE.fixGeckoBaseHREFBug(1, this.getDoc(), value); - this.getDoc().execCommand('inserthtml', false, value); - tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value); - } - } catch (ex) { - insertHTMLFailed = true; - } - - if (!insertHTMLFailed) { - tinyMCE.triggerNodeChange(); - return; - } - } - - if (!tinyMCE.isIE) { - var isHTML = value.indexOf('<') != -1; - var sel = this.getSel(); - var rng = this.getRng(); - - if (isHTML) { - if (tinyMCE.isSafari) { - var tmpRng = this.getDoc().createRange(); - - tmpRng.setStart(this.getBody(), 0); - tmpRng.setEnd(this.getBody(), 0); - - value = tmpRng.createContextualFragment(value); - } else - value = rng.createContextualFragment(value); - } else { - // Setup text node - value = doc.createTextNode(tinyMCE.entityDecode(value)); - } - - // Insert plain text in Safari - if (tinyMCE.isSafari && !isHTML) { - this.execCommand('InsertText', false, value.nodeValue); - tinyMCE.triggerNodeChange(); - return true; - } else if (tinyMCE.isSafari && isHTML) { - rng.deleteContents(); - rng.insertNode(value); - tinyMCE.triggerNodeChange(); - return true; - } - - rng.deleteContents(); - - // If target node is text do special treatment, (Mozilla 1.3 fix) - if (rng.startContainer.nodeType == 3) { - var node = rng.startContainer.splitText(rng.startOffset); - node.parentNode.insertBefore(value, node); - } else - rng.insertNode(value); - - if (!isHTML) { - // Removes weird selection trails - sel.selectAllChildren(doc.body); - sel.removeAllRanges(); - - // Move cursor to end of content - var rng = doc.createRange(); - - rng.selectNode(value); - rng.collapse(false); - - sel.addRange(rng); - } else - rng.collapse(false); - - tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value); - } else { - var rng = doc.selection.createRange(), tmpRng = null; - var c = value.indexOf('"; - } - - if (hc) { - cn = n.childNodes; - - for (i=0, l=cn.length; i'; - - return h; - }, - - _serializeAttribute : function(n, r, an) { - var av = '', t, os = this.settings.on_save; - - if (os && (an.indexOf('mce_') == 0 || an.indexOf('_moz') == 0)) - return ''; - - if (os && this.mceAttribs[an]) - av = this._getAttrib(n, this.mceAttribs[an]); - - if (av.length == 0) - av = this._getAttrib(n, an); - - if (av.length == 0 && r.defaultAttribs && (t = r.defaultAttribs[an])) { - av = t; - - if (av == "mce_empty") - return " " + an + '=""'; - } - - if (r.forceAttribs && (t = r.forceAttribs[an])) - av = t; - - if (os && av.length != 0 && /^(src|href|longdesc)$/.test(an)) - av = this._urlConverter(this, n, av); - - if (av.length != 0 && r.validAttribValues && r.validAttribValues[an] && !r.validAttribValues[an].test(av)) - return ""; - - if (av.length != 0 && av == "{$uid}") - av = "uid_" + (this.idCount++); - - if (av.length != 0) { - if (an.indexOf('on') != 0) - av = this.xmlEncode(av, 1); - - return " " + an + "=" + '"' + av + '"'; - } - - return ""; - }, - - formatHTML : function(h) { - var s = this.settings, p = '', i = 0, li = 0, o = '', l; - - // Replace BR in pre elements to \n - h = h.replace(/]*)>(.*?)<\/pre>/gi, function (a, b, c) { - c = c.replace(//gi, '\n'); - return '' + c + ''; - }); - - h = h.replace(/\r/g, ''); // Windows sux, isn't carriage return a thing of the past :) - h = '\n' + h; - h = h.replace(new RegExp('\\n\\s+', 'gi'), '\n'); // Remove previous formatting - h = h.replace(this.nlBeforeRe, '\n<$1$2>'); - h = h.replace(this.nlAfterRe, '<$1$2>\n'); - h = h.replace(this.nlBeforeAfterRe, '\n<$1$2$3>\n'); - h += '\n'; - - //tinyMCE.debug(h); - - while ((i = h.indexOf('\n', i + 1)) != -1) { - if ((l = h.substring(li + 1, i)).length != 0) { - if (this.ouRe.test(l) && p.length >= s.indent_levels) - p = p.substring(s.indent_levels); - - o += p + l + '\n'; - - if (this.inRe.test(l)) - p += this.inStr; - } - - li = i; - } - - //tinyMCE.debug(h); - - return o; - }, - - xmlEncode : function(s) { - var cl = this, re = this.xmlEncodeRe; - - if (!this.entitiesDone) - this._setupEntities(); // Will intialize lookup table - - switch (this.settings.entity_encoding) { - case "raw": - return tinyMCE.xmlEncode(s); - - case "named": - return s.replace(re, function (c) { - var b = cl.entities[c.charCodeAt(0)]; - - return b ? '&' + b + ';' : c; - }); - - case "numeric": - return s.replace(re, function (c) { - return '&#' + c.charCodeAt(0) + ';'; - }); - } - - return s; - }, - - split : function(re, s) { - var i, l, o = [], c = s.split(re); - - for (i=0, l=c.length; i' : '>' + h + ''; - - return o; - }, - - createTag : function(d, tn, a, h) { - var o = d.createElement(tn), n; - - if (a) { - for (n in a) { - if (typeof(a[n]) != 'function' && a[n] != null) - tinyMCE.setAttrib(o, n, a[n]); - } - } - - if (h) - o.innerHTML = h; - - return o; - }, - - getElementByAttributeValue : function(n, e, a, v) { - return (n = this.getElementsByAttributeValue(n, e, a, v)).length == 0 ? null : n[0]; - }, - - getElementsByAttributeValue : function(n, e, a, v) { - var i, nl = n.getElementsByTagName(e), o = []; - - for (i=0; i]*)>/gi, ''); - h = h.replace(/]*)>/gi, ''); - h = h.replace(/]*)>/gi, ''); - h = h.replace(/]*)>/gi, ''); - h = h.replace(/<\/strong>/gi, ''); - h = h.replace(/<\/em>/gi, ''); - } - - if (tinyMCE.isRealIE) { - // Since MSIE handles invalid HTML better that valid XHTML we - // need to make some things invalid.


gets converted to
. - h = h.replace(/\s\/>/g, '>'); - - // Since MSIE auto generated emtpy P tags some times we must tell it to keep the real ones - h = h.replace(/]*)>\u00A0?<\/p>/gi, ' 

'); // Keep empty paragraphs - h = h.replace(/]*)>\s* \s*<\/p>/gi, ' 

'); // Keep empty paragraphs - h = h.replace(/]*)>\s+<\/p>/gi, ' 

'); // Keep empty paragraphs - - // Remove first comment - e.innerHTML = tinyMCE.uniqueTag + h; - e.firstChild.removeNode(true); - - // Remove weird auto generated empty paragraphs unless it's supposed to be there - nl = e.getElementsByTagName("p"); - for (i=nl.length-1; i>=0; i--) { - n = nl[i]; - - if (n.nodeName == 'P' && !n.hasChildNodes() && !n.mce_keep) - n.parentNode.removeChild(n); - } - } else { - h = this.fixGeckoBaseHREFBug(1, e, h); - e.innerHTML = h; - this.fixGeckoBaseHREFBug(2, e, h); - } - }, - - getOuterHTML : function(e) { - var d; - - if (tinyMCE.isIE) - return e.outerHTML; - - d = e.ownerDocument.createElement("body"); - d.appendChild(e.cloneNode(true)); - - return d.innerHTML; - }, - - setOuterHTML : function(e, h, d) { - var d = typeof(d) == "undefined" ? e.ownerDocument : d, i, nl, t; - - if (tinyMCE.isIE && e.nodeType == 1) - e.outerHTML = h; - else { - t = d.createElement("body"); - t.innerHTML = h; - - for (i=0, nl=t.childNodes; i-1; i--) { - if (ar[i].specified && ar[i].nodeValue) - ne.setAttribute(ar[i].nodeName.toLowerCase(), ar[i].nodeValue); - } - - ar = e.childNodes; - for (i=0; i= strTok2.length) { - for (i=0; i= strTok2.length || strTok1[i] != strTok2[i]) { - breakPoint = i + 1; - break; - } - } - } - - if (strTok1.length < strTok2.length) { - for (i=0; i= strTok1.length || strTok1[i] != strTok2[i]) { - breakPoint = i + 1; - break; - } - } - } - - if (breakPoint == 1) - return targetURL.path; - - for (i=0; i<(strTok1.length-(breakPoint-1)); i++) - outPath += "../"; - - for (i=breakPoint-1; i=0; i--) { - if (baseURLParts[i].length == 0) - continue; - - newBaseURLParts[newBaseURLParts.length] = baseURLParts[i]; - } - baseURLParts = newBaseURLParts.reverse(); - - // Merge relURLParts chunks - newRelURLParts = []; - numBack = 0; - for (i=relURLParts.length-1; i>=0; i--) { - if (relURLParts[i].length == 0 || relURLParts[i] == ".") - continue; - - if (relURLParts[i] == '..') { - numBack++; - continue; - } - - if (numBack > 0) { - numBack--; - continue; - } - - newRelURLParts[newRelURLParts.length] = relURLParts[i]; - } - - relURLParts = newRelURLParts.reverse(); - - // Remove end from absolute path - len = baseURLParts.length-numBack; - absPath = (len <= 0 ? "" : "/") + baseURLParts.slice(0, len).join('/') + "/" + relURLParts.join('/'); - start = ""; - end = ""; - - // Build output URL - relURL.protocol = baseURL.protocol; - relURL.host = baseURL.host; - relURL.port = baseURL.port; - - // Re-add trailing slash if it's removed - if (relURL.path.charAt(relURL.path.length-1) == "/") - absPath += "/"; - - relURL.path = absPath; - - return this.serializeURL(relURL); - }, - - convertURL : function(url, node, on_save) { - var dl = document.location, start, portPart, urlParts, baseUrlParts, tmpUrlParts, curl; - var prot = dl.protocol, host = dl.hostname, port = dl.port; - - // Pass through file protocol - if (prot == "file:") - return url; - - // Something is wrong, remove weirdness - url = tinyMCE.regexpReplace(url, '(http|https):///', '/'); - - // Mailto link or anchor (Pass through) - if (url.indexOf('mailto:') != -1 || url.indexOf('javascript:') != -1 || /^[ \t\r\n\+]*[#\?]/.test(url)) - return url; - - // Fix relative/Mozilla - if (!tinyMCE.isIE && !on_save && url.indexOf("://") == -1 && url.charAt(0) != '/') - return tinyMCE.settings.base_href + url; - - // Handle relative URLs - if (on_save && tinyMCE.getParam('relative_urls')) { - curl = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, url); - if (curl.charAt(0) == '/') - curl = tinyMCE.settings.document_base_prefix + curl; - - urlParts = tinyMCE.parseURL(curl); - tmpUrlParts = tinyMCE.parseURL(tinyMCE.settings.document_base_url); - - // Force relative - if (urlParts.host == tmpUrlParts.host && (urlParts.port == tmpUrlParts.port)) - return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url, curl); - } - - // Handle absolute URLs - if (!tinyMCE.getParam('relative_urls')) { - urlParts = tinyMCE.parseURL(url); - baseUrlParts = tinyMCE.parseURL(tinyMCE.settings.base_href); - - // Force absolute URLs from relative URLs - url = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, url); - - // If anchor and path is the same page - if (urlParts.anchor && urlParts.path == baseUrlParts.path) - return "#" + urlParts.anchor; - } - - // Remove current domain - if (tinyMCE.getParam('remove_script_host')) { - start = ""; - portPart = ""; - - if (port !== '') - portPart = ":" + port; - - start = prot + "//" + host + portPart + "/"; - - if (url.indexOf(start) == 0) - url = url.substring(start.length-1); - } - - return url; - }, - - convertAllRelativeURLs : function(body) { - var i, elms, src, href, mhref, msrc; - - // Convert all image URL:s to absolute URL - elms = body.getElementsByTagName("img"); - for (i=0; i bookmark.index) { - try { - rng.addElement(nl[bookmark.index]); - } catch (ex) { - // Might be thrown if the node no longer exists - } - } - } else { - // Try/catch needed since this operation breaks when TinyMCE is placed in hidden divs/tabs - try { - // Incorrect bookmark - if (bookmark.start < 0) - return true; - - rng = inst.getSel().createRange(); - rng.moveToElementText(inst.getBody()); - rng.collapse(true); - rng.moveStart('character', bookmark.start); - rng.moveEnd('character', bookmark.length); - } catch (ex) { - return true; - } - } - - rng.select(); - - win.scrollTo(bookmark.scrollX, bookmark.scrollY); - return true; - } - - if (tinyMCE.isGecko || tinyMCE.isOpera) { - if (!sel) - return false; - - if (bookmark.rng) { - sel.removeAllRanges(); - sel.addRange(bookmark.rng); - } - - if (bookmark.start != -1 && bookmark.end != -1) { - try { - sd = this._getTextPos(b, bookmark.start, bookmark.end); - rng = doc.createRange(); - rng.setStart(sd.startNode, sd.startOffset); - rng.setEnd(sd.endNode, sd.endOffset); - sel.removeAllRanges(); - sel.addRange(rng); - - if (!tinyMCE.isOpera) - win.focus(); - } catch (ex) { - // Ignore - } - } - - /* - if (typeof(bookmark.index) != 'undefined') { - tinyMCE.selectElements(b, 'IMG', function (n) { - if (bookmark.index-- == 0) { - // Select image in Gecko here - } - - return false; - }); - } - */ - - win.scrollTo(bookmark.scrollX, bookmark.scrollY); - return true; - } - - return false; - }, - - _getPosText : function(r, sn, en) { - var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}; - - while ((n = w.nextNode()) != null) { - if (n == sn) - d.start = p; - - if (n == en) { - d.end = p; - return d; - } - - p += n.nodeValue ? n.nodeValue.length : 0; - } - - return null; - }, - - _getTextPos : function(r, sp, ep) { - var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}; - - while ((n = w.nextNode()) != null) { - p += n.nodeValue ? n.nodeValue.length : 0; - - if (p >= sp && !d.startNode) { - d.startNode = n; - d.startOffset = sp - (p - n.nodeValue.length); - } - - if (p >= ep) { - d.endNode = n; - d.endOffset = ep - (p - n.nodeValue.length); - - return d; - } - } - - return null; - }, - - selectNode : function(node, collapse, select_text_node, to_start) { - var inst = this.instance, sel, rng, nodes; - - if (!node) - return; - - if (typeof(collapse) == "undefined") - collapse = true; - - if (typeof(select_text_node) == "undefined") - select_text_node = false; - - if (typeof(to_start) == "undefined") - to_start = true; - - if (inst.settings.auto_resize) - inst.resizeToContent(); - - if (tinyMCE.isRealIE) { - rng = inst.getDoc().body.createTextRange(); - - try { - rng.moveToElementText(node); - - if (collapse) - rng.collapse(to_start); - - rng.select(); - } catch (e) { - // Throws illigal agrument in MSIE some times - } - } else { - sel = this.getSel(); - - if (!sel) - return; - - if (tinyMCE.isSafari) { - sel.setBaseAndExtent(node, 0, node, node.innerText.length); - - if (collapse) { - if (to_start) - sel.collapseToStart(); - else - sel.collapseToEnd(); - } - - this.scrollToNode(node); - - return; - } - - rng = inst.getDoc().createRange(); - - if (select_text_node) { - // Find first textnode in tree - nodes = tinyMCE.getNodeTree(node, [], 3); - if (nodes.length > 0) - rng.selectNodeContents(nodes[0]); - else - rng.selectNodeContents(node); - } else - rng.selectNode(node); - - if (collapse) { - // Special treatment of textnode collapse - if (!to_start && node.nodeType == 3) { - rng.setStart(node, node.nodeValue.length); - rng.setEnd(node, node.nodeValue.length); - } else - rng.collapse(to_start); - } - - sel.removeAllRanges(); - sel.addRange(rng); - } - - this.scrollToNode(node); - - // Set selected element - tinyMCE.selectedElement = null; - if (node.nodeType == 1) - tinyMCE.selectedElement = node; - }, - - scrollToNode : function(node) { - var inst = this.instance, w = inst.getWin(), vp = inst.getViewPort(), pos = tinyMCE.getAbsPosition(node), cvp, p, cwin; - - // Only scroll if out of visible area - if (pos.absLeft < vp.left || pos.absLeft > vp.left + vp.width || pos.absTop < vp.top || pos.absTop > vp.top + (vp.height-25)) - w.scrollTo(pos.absLeft, pos.absTop - vp.height + 25); - - // Scroll container window - if (inst.settings.auto_resize) { - cwin = inst.getContainerWin(); - cvp = tinyMCE.getViewPort(cwin); - p = this.getAbsPosition(node); - - if (p.absLeft < cvp.left || p.absLeft > cvp.left + cvp.width || p.absTop < cvp.top || p.absTop > cvp.top + cvp.height) - cwin.scrollTo(p.absLeft, p.absTop - cvp.height + 25); - } - }, - - getAbsPosition : function(n) { - var pos = tinyMCE.getAbsPosition(n), ipos = tinyMCE.getAbsPosition(this.instance.iframeElement); - - return { - absLeft : ipos.absLeft + pos.absLeft, - absTop : ipos.absTop + pos.absTop - }; - }, - - getSel : function() { - var inst = this.instance; - - if (tinyMCE.isRealIE) - return inst.getDoc().selection; - - return inst.contentWindow.getSelection(); - }, - - getRng : function() { - var s = this.getSel(); - - if (s == null) - return null; - - if (tinyMCE.isRealIE) - return s.createRange(); - - if (tinyMCE.isSafari && !s.getRangeAt) - return '' + window.getSelection(); - - if (s.rangeCount > 0) - return s.getRangeAt(0); - - return null; - }, - - isCollapsed : function() { - var r = this.getRng(); - - if (r.item) - return false; - - return r.boundingWidth == 0 || this.getSel().isCollapsed; - }, - - collapse : function(b) { - var r = this.getRng(), s = this.getSel(); - - if (r.select) { - r.collapse(b); - r.select(); - } else { - if (b) - s.collapseToStart(); - else - s.collapseToEnd(); - } - }, - - getFocusElement : function() { - var inst = this.instance, doc, rng, sel, elm; - - if (tinyMCE.isRealIE) { - doc = inst.getDoc(); - rng = doc.selection.createRange(); - - // if (rng.collapse) - // rng.collapse(true); - - elm = rng.item ? rng.item(0) : rng.parentElement(); - } else { - if (!tinyMCE.isSafari && inst.isHidden()) - return inst.getBody(); - - sel = this.getSel(); - rng = this.getRng(); - - if (!sel || !rng) - return null; - - elm = rng.commonAncestorContainer; - //elm = (sel && sel.anchorNode) ? sel.anchorNode : null; - - // Handle selection a image or other control like element such as anchors - if (!rng.collapsed) { - // Is selection small - if (rng.startContainer == rng.endContainer) { - if (rng.startOffset - rng.endOffset < 2) { - if (rng.startContainer.hasChildNodes()) - elm = rng.startContainer.childNodes[rng.startOffset]; - } - } - } - - // Get the element parent of the node - elm = tinyMCE.getParentElement(elm); - - //if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") - // elm = tinyMCE.selectedElement; - } - - return elm; - } - - }; - -/* file:jscripts/tiny_mce/classes/TinyMCE_UndoRedo.class.js */ - -function TinyMCE_UndoRedo(inst) { - this.instance = inst; - this.undoLevels = []; - this.undoIndex = 0; - this.typingUndoIndex = -1; - this.undoRedo = true; -}; - -TinyMCE_UndoRedo.prototype = { - add : function(l) { - var b, customUndoLevels, newHTML, inst = this.instance, i, ul, ur; - - if (l) { - this.undoLevels[this.undoLevels.length] = l; - return true; - } - - if (this.typingUndoIndex != -1) { - this.undoIndex = this.typingUndoIndex; - - if (tinyMCE.typingUndoIndex != -1) - tinyMCE.undoIndex = tinyMCE.typingUndoIndex; - } - - newHTML = tinyMCE.trim(inst.getBody().innerHTML); - if (this.undoLevels[this.undoIndex] && newHTML != this.undoLevels[this.undoIndex].content) { - //tinyMCE.debug(newHTML, this.undoLevels[this.undoIndex].content); - - // Is dirty again - inst.isNotDirty = false; - - tinyMCE.dispatchCallback(inst, 'onchange_callback', 'onChange', inst); - - // Time to compress - customUndoLevels = tinyMCE.settings.custom_undo_redo_levels; - if (customUndoLevels != -1 && this.undoLevels.length > customUndoLevels) { - for (i=0; i 0) { - this.undoIndex--; - - tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content); - inst.repaint(); - - if (inst.settings.custom_undo_redo_restore_selection) - inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark); - } - }, - - redo : function() { - var inst = this.instance; - - tinyMCE.execCommand("mceEndTyping"); - - if (this.undoIndex < (this.undoLevels.length-1)) { - this.undoIndex++; - - tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content); - inst.repaint(); - - if (inst.settings.custom_undo_redo_restore_selection) - inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark); - } - - tinyMCE.triggerNodeChange(); - } - - }; - -/* file:jscripts/tiny_mce/classes/TinyMCE_ForceParagraphs.class.js */ - -var TinyMCE_ForceParagraphs = { - _insertPara : function(inst, e) { - var doc = inst.getDoc(), sel = inst.getSel(), body = inst.getBody(), win = inst.contentWindow, rng = sel.getRangeAt(0); - var rootElm = doc.documentElement, blockName = "P", startNode, endNode, startBlock, endBlock; - var rngBefore, rngAfter, direct, startNode, startOffset, endNode, endOffset, b = tinyMCE.isOpera ? inst.selection.getBookmark() : null; - var paraBefore, paraAfter, startChop, endChop, contents, i; - - function isEmpty(para) { - var nodes; - - function isEmptyHTML(html) { - return html.replace(new RegExp('[ \t\r\n]+', 'g'), '').toLowerCase() == ''; - } - - // Check for images - if (para.getElementsByTagName("img").length > 0) - return false; - - // Check for tables - if (para.getElementsByTagName("table").length > 0) - return false; - - // Check for HRs - if (para.getElementsByTagName("hr").length > 0) - return false; - - // Check all textnodes - nodes = tinyMCE.getNodeTree(para, [], 3); - for (i=0; i <" + blockName + "> "; - paraAfter = body.childNodes[1]; - } - - inst.selection.moveToBookmark(b); - inst.selection.selectNode(paraAfter, true, true); - - return true; - } - - // Place first part within new paragraph - if (startChop.nodeName == blockName) - rngBefore.setStart(startChop, 0); - else - rngBefore.setStartBefore(startChop); - - rngBefore.setEnd(startNode, startOffset); - paraBefore.appendChild(rngBefore.cloneContents()); - - // Place secound part within new paragraph - rngAfter.setEndAfter(endChop); - rngAfter.setStart(endNode, endOffset); - contents = rngAfter.cloneContents(); - - if (contents.firstChild && contents.firstChild.nodeName == blockName) { - /* var nodes = contents.firstChild.childNodes; - for (i=0; i= r.startOffset && nv.charAt(r.startOffset - 1) == ' ') - s = true;*/ - - // Only remove BRs if we are at the end of line #bug 1464152 - if (nv != null && r.startOffset == nv.length) - sn.nextSibling.parentNode.removeChild(sn.nextSibling); - } - - if (inst.settings.auto_resize) - inst.resizeToContent(); - - return s; - } - - }; - -/* file:jscripts/tiny_mce/classes/TinyMCE_Layer.class.js */ - -function TinyMCE_Layer(id, bm) { - this.id = id; - this.blockerElement = null; - this.events = false; - this.element = null; - this.blockMode = typeof(bm) != 'undefined' ? bm : true; - this.doc = document; -}; - -TinyMCE_Layer.prototype = { - moveRelativeTo : function(re, p) { - var rep = this.getAbsPosition(re), e = this.getElement(), x, y; - var w = parseInt(re.offsetWidth), h = parseInt(re.offsetHeight); - var ew = parseInt(e.offsetWidth), eh = parseInt(e.offsetHeight); - - switch (p) { - case "tl": - x = rep.absLeft; - y = rep.absTop; - break; - - case "tr": - x = rep.absLeft + w; - y = rep.absTop; - break; - - case "bl": - x = rep.absLeft; - y = rep.absTop + h; - break; - - case "br": - x = rep.absLeft + w; - y = rep.absTop + h; - break; - - case "cc": - x = rep.absLeft + (w / 2) - (ew / 2); - y = rep.absTop + (h / 2) - (eh / 2); - break; - } - - this.moveTo(x, y); - }, - - moveBy : function(x, y) { - var e = this.getElement(); - this.moveTo(parseInt(e.style.left) + x, parseInt(e.style.top) + y); - }, - - moveTo : function(x, y) { - var e = this.getElement(); - - e.style.left = x + "px"; - e.style.top = y + "px"; - - this.updateBlocker(); - }, - - resizeBy : function(w, h) { - var e = this.getElement(); - this.resizeTo(parseInt(e.style.width) + w, parseInt(e.style.height) + h); - }, - - resizeTo : function(w, h) { - var e = this.getElement(); - - if (w != null) - e.style.width = w + "px"; - - if (h != null) - e.style.height = h + "px"; - - this.updateBlocker(); - }, - - show : function() { - var el = this.getElement(); - - if (el) { - el.style.display = 'block'; - this.updateBlocker(); - } - }, - - hide : function() { - var el = this.getElement(); - - if (el) { - el.style.display = 'none'; - this.updateBlocker(); - } - }, - - isVisible : function() { - return this.getElement().style.display == 'block'; - }, - - getElement : function() { - if (!this.element) - this.element = this.doc.getElementById(this.id); - - return this.element; - }, - - setBlockMode : function(s) { - this.blockMode = s; - }, - - updateBlocker : function() { - var e, b, x, y, w, h; - - b = this.getBlocker(); - if (b) { - if (this.blockMode) { - e = this.getElement(); - x = this.parseInt(e.style.left); - y = this.parseInt(e.style.top); - w = this.parseInt(e.offsetWidth); - h = this.parseInt(e.offsetHeight); - - b.style.left = x + 'px'; - b.style.top = y + 'px'; - b.style.width = w + 'px'; - b.style.height = h + 'px'; - b.style.display = e.style.display; - } else - b.style.display = 'none'; - } - }, - - getBlocker : function() { - var d, b; - - if (!this.blockerElement && this.blockMode) { - d = this.doc; - b = d.getElementById(this.id + "_blocker"); - - if (!b) { - b = d.createElement("iframe"); - - b.setAttribute('id', this.id + "_blocker"); - b.style.cssText = 'display: none; position: absolute; left: 0; top: 0'; - b.src = 'javascript:false;'; - b.frameBorder = '0'; - b.scrolling = 'no'; - - d.body.appendChild(b); - } - - this.blockerElement = b; - } - - return this.blockerElement; - }, - - getAbsPosition : function(n) { - var p = {absLeft : 0, absTop : 0}; - - while (n) { - p.absLeft += n.offsetLeft; - p.absTop += n.offsetTop; - n = n.offsetParent; - } - - return p; - }, - - create : function(n, c, p, h) { - var d = this.doc, e = d.createElement(n); - - e.setAttribute('id', this.id); - - if (c) - e.className = c; - - if (!p) - p = d.body; - - if (h) - e.innerHTML = h; - - p.appendChild(e); - - return this.element = e; - }, - - exists : function() { - return this.doc.getElementById(this.id) != null; - }, - - parseInt : function(s) { - if (s == null || s == '') - return 0; - - return parseInt(s); - }, - - remove : function() { - var e = this.getElement(), b = this.getBlocker(); - - if (e) - e.parentNode.removeChild(e); - - if (b) - b.parentNode.removeChild(b); - } - - }; - -/* file:jscripts/tiny_mce/classes/TinyMCE_Menu.class.js */ - -function TinyMCE_Menu() { - var id; - - if (typeof(tinyMCE.menuCounter) == "undefined") - tinyMCE.menuCounter = 0; - - id = "mc_menu_" + tinyMCE.menuCounter++; - - TinyMCE_Layer.call(this, id, true); - - this.id = id; - this.items = []; - this.needsUpdate = true; -}; - -TinyMCE_Menu.prototype = tinyMCE.extend(TinyMCE_Layer.prototype, { - init : function(s) { - var n; - - // Default params - this.settings = { - separator_class : 'mceMenuSeparator', - title_class : 'mceMenuTitle', - disabled_class : 'mceMenuDisabled', - menu_class : 'mceMenu', - drop_menu : true - }; - - for (n in s) - this.settings[n] = s[n]; - - this.create('div', this.settings.menu_class); - }, - - clear : function() { - this.items = []; - }, - - addTitle : function(t) { - this.add({type : 'title', text : t}); - }, - - addDisabled : function(t) { - this.add({type : 'disabled', text : t}); - }, - - addSeparator : function() { - this.add({type : 'separator'}); - }, - - addItem : function(t, js) { - this.add({text : t, js : js}); - }, - - add : function(mi) { - this.items[this.items.length] = mi; - this.needsUpdate = true; - }, - - update : function() { - var e = this.getElement(), h = '', i, t, m = this.items, s = this.settings; - - if (this.settings.drop_menu) - h += ''; - - h += ''; - - for (i=0; i'; - } - - h += '
'; - break; - - case 'title': - h += '
' + t + ''; - break; - - case 'disabled': - h += '
' + t + ''; - break; - - default: - h += '
' + t + ''; - } - - h += '
'; - - e.innerHTML = h; - - this.needsUpdate = false; - this.updateBlocker(); - }, - - show : function() { - var nl, i; - - if (tinyMCE.lastMenu == this) - return; - - if (this.needsUpdate) - this.update(); - - if (tinyMCE.lastMenu && tinyMCE.lastMenu != this) - tinyMCE.lastMenu.hide(); - - TinyMCE_Layer.prototype.show.call(this); - - if (!tinyMCE.isOpera) { - // Accessibility stuff -/* nl = this.getElement().getElementsByTagName("a"); - if (nl.length > 0) - nl[0].focus();*/ - } - - tinyMCE.lastMenu = this; - } - - }); - -/* file:jscripts/tiny_mce/classes/TinyMCE_Debug.class.js */ - -tinyMCE.add(TinyMCE_Engine, { - debug : function() { - var m = "", a, i, l = tinyMCE.log.length; - - for (i=0, a = this.debug.arguments; i'); + this._def("font_size_classes", ''); + this._def("font_size_style_values", 'xx-small,x-small,small,medium,large,x-large,xx-large', true); + this._def("event_elements", 'a,img', true); + this._def("convert_urls", true); + this._def("table_inline_editing", false); + this._def("object_resizing", true); + this._def("custom_shortcuts", true); + this._def("convert_on_click", false); + this._def("content_css", ''); + this._def("fix_list_elements", true); + this._def("fix_table_elements", false); + this._def("strict_loading_mode", document.contentType == 'application/xhtml+xml'); + this._def("hidden_tab_class", ''); + this._def("display_tab_class", ''); + this._def("gecko_spellcheck", false); + this._def("hide_selects_on_submit", true); + this._def("forced_root_block", false); + this._def("remove_trailing_nbsp", false); + this._def("save_on_tinymce_forms", false); + + // Force strict loading mode to false on non Gecko browsers + if (this.isMSIE && !this.isOpera) + this.settings.strict_loading_mode = false; + + // Browser check IE + if (this.isMSIE && this.settings.browsers.indexOf('msie') == -1) + return; + + // Browser check Gecko + if (this.isGecko && this.settings.browsers.indexOf('gecko') == -1) + return; + + // Browser check Safari + if (this.isSafari && this.settings.browsers.indexOf('safari') == -1) + return; + + // Browser check Opera + if (this.isOpera && this.settings.browsers.indexOf('opera') == -1) + return; + + // If not super absolute make it so + baseHREF = tinyMCE.settings.document_base_url; + h = document.location.href; + p = h.indexOf('://'); + if (p > 0 && document.location.protocol != "file:") { + p = h.indexOf('/', p + 3); + h = h.substring(0, p); + + if (baseHREF.indexOf('://') == -1) + baseHREF = h + baseHREF; + + tinyMCE.settings.document_base_url = baseHREF; + tinyMCE.settings.document_base_prefix = h; + } + + // Trim away query part + if (baseHREF.indexOf('?') != -1) + baseHREF = baseHREF.substring(0, baseHREF.indexOf('?')); + + this.settings.base_href = baseHREF.substring(0, baseHREF.lastIndexOf('/')) + "/"; + + theme = this.settings.theme; + this.inlineStrict = 'A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment'; + this.inlineTransitional = 'A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment'; + this.blockElms = 'H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP'; + this.blockRegExp = new RegExp("^(" + this.blockElms + ")$", "i"); + this.posKeyCodes = [13,45,36,35,33,34,37,38,39,40]; + this.uniqueURL = 'javascript:void(091039730);'; // Make unique URL non real URL + this.uniqueTag = ''; + this.callbacks = ['onInit', 'getInfo', 'getEditorTemplate', 'setupContent', 'onChange', 'onPageLoad', 'handleNodeChange', 'initInstance', 'execCommand', 'getControlHTML', 'handleEvent', 'cleanup', 'removeInstance']; + + // Theme url + this.settings.theme_href = tinyMCE.baseURL + "/themes/" + theme; + + if (!tinyMCE.isIE || tinyMCE.isOpera) + this.settings.force_br_newlines = false; + + if (tinyMCE.getParam("popups_css", false)) { + cssPath = tinyMCE.getParam("popups_css", ""); + + // Is relative + if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/') + this.settings.popups_css = this.documentBasePath + "/" + cssPath; + else + this.settings.popups_css = cssPath; + } else + this.settings.popups_css = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_popup.css"; + + if (tinyMCE.getParam("editor_css", false)) { + cssPath = tinyMCE.getParam("editor_css", ""); + + // Is relative + if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/') + this.settings.editor_css = this.documentBasePath + "/" + cssPath; + else + this.settings.editor_css = cssPath; + } else { + if (this.settings.editor_css !== '') + this.settings.editor_css = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_ui.css"; + } + + // Only do this once + if (this.configs.length == 0) { + if (typeof(TinyMCECompressed) == "undefined") { + tinyMCE.addEvent(window, "DOMContentLoaded", TinyMCE_Engine.prototype.onLoad); + + if (tinyMCE.isRealIE) { + if (document.body) + tinyMCE.addEvent(document.body, "readystatechange", TinyMCE_Engine.prototype.onLoad); + else + tinyMCE.addEvent(document, "readystatechange", TinyMCE_Engine.prototype.onLoad); + } + + tinyMCE.addEvent(window, "load", TinyMCE_Engine.prototype.onLoad); + tinyMCE._addUnloadEvents(); + } + } + + this.loadScript(tinyMCE.baseURL + '/themes/' + this.settings.theme + '/editor_template' + tinyMCE.srcMode + '.js'); + this.loadScript(tinyMCE.baseURL + '/langs/' + this.settings.language + '.js'); + this.loadCSS(this.settings.editor_css); + + // Add plugins + p = tinyMCE.getParam('plugins', '', true, ','); + if (p.length > 0) { + for (i=0; i&"]', 'g'); + }, + + _addUnloadEvents : function() { + var st = tinyMCE.settings.add_unload_trigger; + + if (tinyMCE.isIE) { + if (st) { + tinyMCE.addEvent(window, "unload", TinyMCE_Engine.prototype.unloadHandler); + tinyMCE.addEvent(window.document, "beforeunload", TinyMCE_Engine.prototype.unloadHandler); + } + } else { + if (st) + tinyMCE.addEvent(window, "unload", function () {tinyMCE.triggerSave(true, true);}); + } + }, + + _def : function(key, def_val, t) { + var v = tinyMCE.getParam(key, def_val); + + v = t ? v.replace(/\s+/g, "") : v; + + this.settings[key] = v; + }, + + hasPlugin : function(n) { + return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null; + }, + + addPlugin : function(n, p) { + var op = this.plugins[n]; + + // Use the previous plugin object base URL used when loading external plugins + p.baseURL = op ? op.baseURL : tinyMCE.baseURL + "/plugins/" + n; + this.plugins[n] = p; + + this.loadNextScript(); + }, + + setPluginBaseURL : function(n, u) { + var op = this.plugins[n]; + + if (op) + op.baseURL = u; + else + this.plugins[n] = {baseURL : u}; + }, + + loadPlugin : function(n, u) { + u = u.indexOf('.js') != -1 ? u.substring(0, u.lastIndexOf('/')) : u; + u = u.charAt(u.length-1) == '/' ? u.substring(0, u.length-1) : u; + this.plugins[n] = {baseURL : u}; + this.loadScript(u + "/editor_plugin" + (tinyMCE.srcMode ? '_src' : '') + ".js"); + }, + + hasTheme : function(n) { + return typeof(this.themes[n]) != "undefined" && this.themes[n] != null; + }, + + addTheme : function(n, t) { + this.themes[n] = t; + + this.loadNextScript(); + }, + + addMenu : function(n, m) { + this.menus[n] = m; + }, + + hasMenu : function(n) { + return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null; + }, + + loadScript : function(url) { + var i; + + for (i=0; i'); + + this.loadedFiles[this.loadedFiles.length] = url; + }, + + loadNextScript : function() { + var d = document, se; + + if (!tinyMCE.settings.strict_loading_mode) + return; + + if (this.loadingIndex < this.pendingFiles.length) { + se = d.createElementNS('http://www.w3.org/1999/xhtml', 'script'); + se.setAttribute('language', 'javascript'); + se.setAttribute('type', 'text/javascript'); + se.setAttribute('src', this.pendingFiles[this.loadingIndex++]); + + d.getElementsByTagName("head")[0].appendChild(se); + } else + this.loadingIndex = -1; // Done with loading + }, + + loadCSS : function(url) { + var ar = url.replace(/\s+/, '').split(','); + var lflen = 0, csslen = 0, skip = false; + var x = 0, i = 0, nl, le; + + for (x = 0,csslen = ar.length; x 0) { + /* Make sure it doesn't exist. */ + for (i=0, lflen=this.loadedFiles.length; i'); + + this.loadedFiles[this.loadedFiles.length] = ar[x]; + } + } + } + }, + + importCSS : function(doc, css) { + var css_ary = css.replace(/\s+/, '').split(','); + var csslen, elm, headArr, x, css_file; + + for (x = 0, csslen = css_ary.length; x 0) { + // Is relative, make absolute + if (css_file.indexOf('://') == -1 && css_file.charAt(0) != '/') + css_file = this.documentBasePath + "/" + css_file; + + if (typeof(doc.createStyleSheet) == "undefined") { + elm = doc.createElement("link"); + + elm.rel = "stylesheet"; + elm.href = css_file; + + if ((headArr = doc.getElementsByTagName("head")) != null && headArr.length > 0) + headArr[0].appendChild(elm); + } else + doc.createStyleSheet(css_file); + } + } + }, + + confirmAdd : function(e, settings) { + var elm = tinyMCE.isIE ? event.srcElement : e.target; + var elementId = elm.name ? elm.name : elm.id; + + tinyMCE.settings = settings; + + if (tinyMCE.settings.convert_on_click || (!elm.getAttribute('mce_noask') && confirm(tinyMCELang.lang_edit_confirm))) + tinyMCE.addMCEControl(elm, elementId); + + elm.setAttribute('mce_noask', 'true'); + }, + + updateContent : function(form_element_name) { + var formElement, n, inst, doc; + + // Find MCE instance linked to given form element and copy it's value + formElement = document.getElementById(form_element_name); + for (n in tinyMCE.instances) { + inst = tinyMCE.instances[n]; + + if (!tinyMCE.isInstance(inst)) + continue; + + inst.switchSettings(); + + if (inst.formElement == formElement) { + doc = inst.getDoc(); + + tinyMCE._setHTML(doc, inst.formElement.value); + + if (!tinyMCE.isIE) + doc.body.innerHTML = tinyMCE._cleanupHTML(inst, doc, this.settings, doc.body, inst.visualAid); + } + } + }, + + addMCEControl : function(replace_element, form_element_name, target_document) { + var id = "mce_editor_" + tinyMCE.idCounter++; + var inst = new TinyMCE_Control(tinyMCE.settings); + + inst.editorId = id; + this.instances[id] = inst; + + inst._onAdd(replace_element, form_element_name, target_document); + }, + + removeInstance : function(ti) { + var t = [], n, i; + + // Remove from instances + for (n in tinyMCE.instances) { + i = tinyMCE.instances[n]; + + if (tinyMCE.isInstance(i) && ti != i) + t[n] = i; + } + + tinyMCE.instances = t; + + // Remove from global undo/redo + n = []; + t = tinyMCE.undoLevels; + + for (i=0; i 0) { + tinyMCE.nextUndoRedoAction = 'Undo'; + inst = this.undoLevels[--this.undoIndex]; + inst.select(); + + if (!tinyMCE.nextUndoRedoInstanceId) + inst.execCommand('Undo'); + } + } else + inst.execCommand('Undo'); + return true; + + case "Redo": + if (this.getParam('custom_undo_redo_global')) { + if (this.undoIndex <= this.undoLevels.length - 1) { + tinyMCE.nextUndoRedoAction = 'Redo'; + inst = this.undoLevels[this.undoIndex++]; + inst.select(); + + if (!tinyMCE.nextUndoRedoInstanceId) + inst.execCommand('Redo'); + } + } else + inst.execCommand('Redo'); + + return true; + + case 'mceFocus': + inst = tinyMCE.getInstanceById(value); + + if (inst) + inst.getWin().focus(); + return; + + case "mceAddControl": + case "mceAddEditor": + tinyMCE.addMCEControl(tinyMCE._getElementById(value), value); + return; + + case "mceAddFrameControl": + tinyMCE.addMCEControl(tinyMCE._getElementById(value.element, value.document), value.element, value.document); + return; + + case "mceRemoveControl": + case "mceRemoveEditor": + tinyMCE.removeMCEControl(value); + return; + + case "mceToggleEditor": + inst = tinyMCE.getInstanceById(value); + + if (inst) { + pe = document.getElementById(inst.editorId + '_parent'); + te = inst.oldTargetElement; + + if (typeof(inst.enabled) == 'undefined') + inst.enabled = true; + + inst.enabled = !inst.enabled; + + if (!inst.enabled) { + pe.style.display = 'none'; + + if (te.nodeName == 'TEXTAREA' || te.nodeName == 'INPUT') + te.value = inst.getHTML(); + else + te.innerHTML = inst.getHTML(); + + te.style.display = inst.oldTargetDisplay; + tinyMCE.dispatchCallback(inst, 'hide_instance_callback', 'hideInstance', inst); + } else { + pe.style.display = 'block'; + te.style.display = 'none'; + + if (te.nodeName == 'TEXTAREA' || te.nodeName == 'INPUT') + inst.setHTML(te.value); + else + inst.setHTML(te.innerHTML); + + inst.useCSS = false; + tinyMCE.dispatchCallback(inst, 'show_instance_callback', 'showInstance', inst); + } + } else + tinyMCE.addMCEControl(tinyMCE._getElementById(value), value); + + return; + + case "mceResetDesignMode": + // Resets the designmode state of the editors in Gecko + if (tinyMCE.isGecko) { + for (n in tinyMCE.instances) { + if (!tinyMCE.isInstance(tinyMCE.instances[n])) + continue; + + try { + tinyMCE.instances[n].getDoc().designMode = "off"; + tinyMCE.instances[n].getDoc().designMode = "on"; + tinyMCE.instances[n].useCSS = false; + } catch (e) { + // Ignore any errors + } + } + } + + return; + } + + if (inst) { + inst.execCommand(command, user_interface, value); + } else if (tinyMCE.settings.focus_alert) + alert(tinyMCELang.lang_focus_alert); + }, + + _createIFrame : function(replace_element, doc, win) { + var iframe, id = replace_element.getAttribute("id"); + var aw, ah; + + if (typeof(doc) == "undefined") + doc = document; + + if (typeof(win) == "undefined") + win = window; + + iframe = doc.createElement("iframe"); + + aw = "" + tinyMCE.settings.area_width; + ah = "" + tinyMCE.settings.area_height; + + if (aw.indexOf('%') == -1) { + aw = parseInt(aw); + aw = (isNaN(aw) || aw < 0) ? 300 : aw; + aw = aw + "px"; + } + + if (ah.indexOf('%') == -1) { + ah = parseInt(ah); + ah = (isNaN(ah) || ah < 0) ? 240 : ah; + ah = ah + "px"; + } + + iframe.setAttribute("id", id); + iframe.setAttribute("name", id); + iframe.setAttribute("class", "mceEditorIframe"); + iframe.setAttribute("border", "0"); + iframe.setAttribute("frameBorder", "0"); + iframe.setAttribute("marginWidth", "0"); + iframe.setAttribute("marginHeight", "0"); + iframe.setAttribute("leftMargin", "0"); + iframe.setAttribute("topMargin", "0"); + iframe.setAttribute("width", aw); + iframe.setAttribute("height", ah); + iframe.setAttribute("allowtransparency", "true"); + iframe.className = 'mceEditorIframe'; + + if (tinyMCE.settings.auto_resize) + iframe.setAttribute("scrolling", "no"); + + // Must have a src element in MSIE HTTPs breaks aswell as absoute URLs + if (tinyMCE.isRealIE) + iframe.setAttribute("src", this.settings.default_document); + + iframe.style.width = aw; + iframe.style.height = ah; + + // Ugly hack for Gecko problem in strict mode + if (tinyMCE.settings.strict_loading_mode) + iframe.style.marginBottom = '-5px'; + + // MSIE 5.0 issue + if (tinyMCE.isRealIE) + replace_element.outerHTML = iframe.outerHTML; + else + replace_element.parentNode.replaceChild(iframe, replace_element); + + if (tinyMCE.isRealIE) + return win.frames[id]; + else + return iframe; + }, + + setupContent : function(editor_id) { + var inst = tinyMCE.instances[editor_id], i, doc = inst.getDoc(), head = doc.getElementsByTagName('head').item(0); + var content = inst.startContent, contentElement, body; + + // HTML values get XML encoded in strict mode + if (tinyMCE.settings.strict_loading_mode) { + content = content.replace(/</g, '<'); + content = content.replace(/>/g, '>'); + content = content.replace(/"/g, '"'); + content = content.replace(/&/g, '&'); + } + + tinyMCE.selectedInstance = inst; + inst.switchSettings(); + + // Not loaded correctly hit it again, Mozilla bug #997860 + if (!tinyMCE.isIE && tinyMCE.getParam("setupcontent_reload", false) && doc.title != "blank_page") { + // This part will remove the designMode status + // Failes first time in Firefox 1.5b2 on Mac + try {doc.location.href = tinyMCE.baseURL + "/blank.htm";} catch (ex) {} + window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 1000); + return; + } + + // Wait for it to load + if (!head || !doc.body) { + window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 10); + return; + } + + // Import theme specific content CSS the user specific + tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/themes/" + inst.settings.theme + "/css/editor_content.css"); + tinyMCE.importCSS(inst.getDoc(), inst.settings.content_css); + tinyMCE.dispatchCallback(inst, 'init_instance_callback', 'initInstance', inst); + + // Setup keyboard shortcuts + if (tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')) { + inst.addShortcut('ctrl', 'z', 'lang_undo_desc', 'Undo'); + inst.addShortcut('ctrl', 'y', 'lang_redo_desc', 'Redo'); + } + + // BlockFormat shortcuts keys + for (i=1; i<=6; i++) + inst.addShortcut('ctrl', '' + i, '', 'FormatBlock', false, ''); + + inst.addShortcut('ctrl', '7', '', 'FormatBlock', false, '

'); + inst.addShortcut('ctrl', '8', '', 'FormatBlock', false, '

'); + inst.addShortcut('ctrl', '9', '', 'FormatBlock', false, '
'); + + // Add default shortcuts for gecko + if (tinyMCE.isGecko) { + inst.addShortcut('ctrl', 'b', 'lang_bold_desc', 'Bold'); + inst.addShortcut('ctrl', 'i', 'lang_italic_desc', 'Italic'); + inst.addShortcut('ctrl', 'u', 'lang_underline_desc', 'Underline'); + } + + // Setup span styles + if (tinyMCE.getParam("convert_fonts_to_spans")) + inst.getBody().setAttribute('id', 'mceSpanFonts'); + + if (tinyMCE.settings.nowrap) + doc.body.style.whiteSpace = "nowrap"; + + doc.body.dir = this.settings.directionality; + doc.editorId = editor_id; + + // Add on document element in Mozilla + if (!tinyMCE.isIE) + doc.documentElement.editorId = editor_id; + + inst.setBaseHREF(tinyMCE.settings.base_href); + + // Replace new line characters to BRs + if (tinyMCE.settings.convert_newlines_to_brs) { + content = tinyMCE.regexpReplace(content, "\r\n", "
", "gi"); + content = tinyMCE.regexpReplace(content, "\r", "
", "gi"); + content = tinyMCE.regexpReplace(content, "\n", "
", "gi"); + } + + // Open closed anchors + // content = content.replace(new RegExp('', 'gi'), ''); + + // Call custom cleanup code + content = tinyMCE.storeAwayURLs(content); + content = tinyMCE._customCleanup(inst, "insert_to_editor", content); + + if (tinyMCE.isIE) { + // Ugly!!! + window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["' + editor_id + '"].getDoc(), "' + editor_id + '");}catch(e){}', 500); + + if (tinyMCE.settings.force_br_newlines) + doc.styleSheets[0].addRule("p", "margin: 0;"); + + body = inst.getBody(); + body.editorId = editor_id; + } + + content = tinyMCE.cleanupHTMLCode(content); + + // Fix for bug #958637 + if (!tinyMCE.isIE) { + contentElement = inst.getDoc().createElement("body"); + doc = inst.getDoc(); + + contentElement.innerHTML = content; + + if (tinyMCE.settings.cleanup_on_startup) + tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, doc, this.settings, contentElement)); + else + tinyMCE.setInnerHTML(inst.getBody(), content); + + tinyMCE.convertAllRelativeURLs(inst.getBody()); + } else { + if (tinyMCE.settings.cleanup_on_startup) { + tinyMCE._setHTML(inst.getDoc(), content); + + // Produces permission denied error in MSIE 5.5 + try { + tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody())); + } catch(e) { + // Ignore + } + } else + tinyMCE._setHTML(inst.getDoc(), content); + } + + // Fix for bug #957681 + //inst.getDoc().designMode = inst.getDoc().designMode; + + tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings.visual, inst); + tinyMCE.dispatchCallback(inst, 'setupcontent_callback', 'setupContent', editor_id, inst.getBody(), inst.getDoc()); + + // Re-add design mode on mozilla + if (!tinyMCE.isIE) + tinyMCE.addEventHandlers(inst); + + // Add blur handler + if (tinyMCE.isIE) { + tinyMCE.addEvent(inst.getBody(), "blur", TinyMCE_Engine.prototype._eventPatch); + tinyMCE.addEvent(inst.getBody(), "beforedeactivate", TinyMCE_Engine.prototype._eventPatch); // Bug #1439953 + + // Workaround for drag drop/copy paste base href bug + if (!tinyMCE.isOpera) { + tinyMCE.addEvent(doc.body, "mousemove", TinyMCE_Engine.prototype.onMouseMove); + tinyMCE.addEvent(doc.body, "beforepaste", TinyMCE_Engine.prototype._eventPatch); + tinyMCE.addEvent(doc.body, "drop", TinyMCE_Engine.prototype._eventPatch); + } + } + + // Trigger node change, this call locks buttons for tables and so forth + inst.select(); + tinyMCE.selectedElement = inst.contentWindow.document.body; + + // Call custom DOM cleanup + tinyMCE._customCleanup(inst, "insert_to_editor_dom", inst.getBody()); + tinyMCE._customCleanup(inst, "setup_content_dom", inst.getBody()); + tinyMCE._setEventsEnabled(inst.getBody(), false); + tinyMCE.cleanupAnchors(inst.getDoc()); + + if (tinyMCE.getParam("convert_fonts_to_spans")) + tinyMCE.convertSpansToFonts(inst.getDoc()); + + inst.startContent = tinyMCE.trim(inst.getBody().innerHTML); + inst.undoRedo.add({ content : inst.startContent }); + + // Cleanup any mess left from storyAwayURLs + if (tinyMCE.isGecko) { + // Remove mce_src from textnodes and comments + tinyMCE.selectNodes(inst.getBody(), function(n) { + if (n.nodeType == 3 || n.nodeType == 8) + n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), ""); + + return false; + }); + } + + // Remove Gecko spellchecking + if (tinyMCE.isGecko) + inst.getBody().spellcheck = tinyMCE.getParam("gecko_spellcheck"); + + // Cleanup any mess left from storyAwayURLs + tinyMCE._removeInternal(inst.getBody()); + + inst.select(); + tinyMCE.triggerNodeChange(false, true); + }, + + storeAwayURLs : function(s) { + // Remove all mce_src, mce_href and replace them with new ones + // s = s.replace(new RegExp('mce_src\\s*=\\s*\"[^ >\"]*\"', 'gi'), ''); + // s = s.replace(new RegExp('mce_href\\s*=\\s*\"[^ >\"]*\"', 'gi'), ''); + + if (!s.match(/(mce_src|mce_href)/gi, s)) { + s = s.replace(new RegExp('src\\s*=\\s*[\"\']([^ >\"]*)[\"\']', 'gi'), 'src="$1" mce_src="$1"'); + s = s.replace(new RegExp('href\\s*=\\s*[\"\']([^ >\"]*)[\"\']', 'gi'), 'href="$1" mce_href="$1"'); + } + + return s; + }, + + _removeInternal : function(n) { + if (tinyMCE.isGecko) { + // Remove mce_src from textnodes and comments + tinyMCE.selectNodes(n, function(n) { + if (n.nodeType == 3 || n.nodeType == 8) + n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), ""); + + return false; + }); + } + }, + + removeTinyMCEFormElements : function(form_obj) { + var i, elementId; + + // Skip form element removal + if (!tinyMCE.getParam('hide_selects_on_submit')) + return; + + // Check if form is valid + if (typeof(form_obj) == "undefined" || form_obj == null) + return; + + // If not a form, find the form + if (form_obj.nodeName != "FORM") { + if (form_obj.form) + form_obj = form_obj.form; + else + form_obj = tinyMCE.getParentElement(form_obj, "form"); + } + + // Still nothing + if (form_obj == null) + return; + + // Disable all UI form elements that TinyMCE created + for (i=0; i"); + rng.collapse(false); + rng.select(); + + tinyMCE.execCommand("mceAddUndoLevel"); + tinyMCE.triggerNodeChange(false); + return false; + } + } + + // Backspace or delete + if (e.keyCode == 8 || e.keyCode == 46) { + tinyMCE.selectedElement = e.target; + tinyMCE.linkElement = tinyMCE.getParentElement(e.target, "a"); + tinyMCE.imgElement = tinyMCE.getParentElement(e.target, "img"); + tinyMCE.triggerNodeChange(false); + } + + return false; + + case "keyup": + case "keydown": + tinyMCE.hideMenus(); + tinyMCE.hasMouseMoved = false; + + if (inst && inst.handleShortcut(e)) + return false; + + inst._fixRootBlocks(); + + if (inst.settings.remove_trailing_nbsp) + inst._fixTrailingNbsp(); + + if (e.target.editorId) + tinyMCE.instances[e.target.editorId].select(); + + if (tinyMCE.selectedInstance) + tinyMCE.selectedInstance.switchSettings(); + + inst = tinyMCE.selectedInstance; + + // Handle backspace + if (tinyMCE.isGecko && tinyMCE.settings.force_p_newlines && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) { + // Insert P element instead of BR + if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) { + // Cancel event + tinyMCE.execCommand("mceAddUndoLevel"); + e.preventDefault(); + return false; + } + } + + tinyMCE.selectedElement = null; + tinyMCE.selectedNode = null; + elm = tinyMCE.selectedInstance.getFocusElement(); + tinyMCE.linkElement = tinyMCE.getParentElement(elm, "a"); + tinyMCE.imgElement = tinyMCE.getParentElement(elm, "img"); + tinyMCE.selectedElement = elm; + + // Update visualaids on tabs + if (tinyMCE.isGecko && e.type == "keyup" && e.keyCode == 9) + tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings.visual, tinyMCE.selectedInstance); + + // Fix empty elements on return/enter, check where enter occured + if (tinyMCE.isIE && e.type == "keydown" && e.keyCode == 13) + tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement(); + + // Fix empty elements on return/enter + if (tinyMCE.isIE && e.type == "keyup" && e.keyCode == 13) { + elm = tinyMCE.enterKeyElement; + if (elm) { + var re = new RegExp('^HR|IMG|BR$','g'); // Skip these + var dre = new RegExp('^H[1-6]$','g'); // Add double on these + + if (!elm.hasChildNodes() && !re.test(elm.nodeName)) { + if (dre.test(elm.nodeName)) + elm.innerHTML = "  "; + else + elm.innerHTML = " "; + } + } + } + + // Check if it's a position key + keys = tinyMCE.posKeyCodes; + var posKey = false; + for (i=0; i'; + h += '{$'+lang+'}'; + h += ''; + } else { + // Normal button + h += ''; + h += '{$'+lang+'}'; + h += ''; + } + + return h; + }, + + getMenuButtonHTML : function(id, lang, img, mcmd, cmd, ui, val) { + var h = '', m, x; + + mcmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + mcmd + '\');'; + cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\''; + + if (typeof(ui) != "undefined" && ui != null) + cmd += ',' + ui; + + if (typeof(val) != "undefined" && val != null) + cmd += ",'" + val + "'"; + + cmd += ');'; + + // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled + if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) { + x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20); + + if (tinyMCE.isRealIE) + h += ''; + else + h += ''; + + h += ''; + h += ''; + h += ''; + h += ''; + } else { + if (tinyMCE.isRealIE) + h += ''; + else + h += ''; + + h += ''; + h += ''; + h += ''; + h += ''; + } + + return h; + }, + + _menuButtonEvent : function(e, o) { + if (o.className == 'mceMenuButtonFocus') + return; + + if (e == 'over') + o.className = o.className + ' mceMenuHover'; + else + o.className = o.className.replace(/\s.*$/, ''); + }, + + addButtonMap : function(m) { + var i, a = m.replace(/\s+/, '').split(','); + + for (i=0; i 0) + className += " "; + + className += classNames[i]; + } + + return className; + }, + + handleVisualAid : function(el, deep, state, inst, skip_dispatch) { + var i, x, y, tableElement, anchorName, oldW, oldH, bo, cn; + + if (!el) + return; + + if (!skip_dispatch) + tinyMCE.dispatchCallback(inst, 'handle_visual_aid_callback', 'handleVisualAid', el, deep, state, inst); + + tableElement = null; + + switch (el.nodeName) { + case "TABLE": + oldW = el.style.width; + oldH = el.style.height; + bo = tinyMCE.getAttrib(el, "border"); + + bo = bo == '' || bo == "0" ? true : false; + + tinyMCE.setAttrib(el, "class", tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el, "class"), state && bo)); + + el.style.width = oldW; + el.style.height = oldH; + + for (y=0; y 0) + return inst.cssClasses; + + if (!doc) + return; + + styles = doc.styleSheets; + + if (styles && styles.length > 0) { + for (x=0; x' + tinyMCE.replaceVar(v, "pluginurl", o.baseURL) + ''; + + return tinyMCE.replaceVar(v, "pluginurl", o.baseURL); + } + } + + o = tinyMCE.themes[tinyMCE.settings.theme]; + if (o.getControlHTML && (v = o.getControlHTML(c)) !== '') { + if (rtl) + return '' + v + ''; + + return v; + } + + return ''; + }, + + evalFunc : function(f, idx, a, o) { + o = !o ? window : o; + f = typeof(f) == 'function' ? f : o[f]; + + return f.apply(o, Array.prototype.slice.call(a, idx)); + }, + + dispatchCallback : function(i, p, n) { + return this.callFunc(i, p, n, 0, this.dispatchCallback.arguments); + }, + + executeCallback : function(i, p, n) { + return this.callFunc(i, p, n, 1, this.executeCallback.arguments); + }, + + execCommandCallback : function(i, p, n) { + return this.callFunc(i, p, n, 2, this.execCommandCallback.arguments); + }, + + callFunc : function(ins, p, n, m, a) { + var l, i, on, o, s, v; + + s = m == 2; + + l = tinyMCE.getParam(p, ''); + + if (l !== '' && (v = tinyMCE.evalFunc(l, 3, a)) == s && m > 0) + return true; + + if (ins != null) { + for (i=0, l = ins.plugins; i 0) + return true; + } + } + + l = tinyMCE.themes; + for (on in l) { + o = l[on]; + + if (o[n] && (v = tinyMCE.evalFunc(n, 3, a, o)) == s && m > 0) + return true; + } + + return false; + }, + + resolveDots : function(s, o) { + var i; + + if (typeof(s) == 'string') { + for (i=0, s=s.split('.'); i': + return '>'; + } + + return c; + }) : s; + }, + + add : function(c, m) { + var n; + + for (n in m) { + if (m.hasOwnProperty(n)) + c.prototype[n] = m[n]; + } + }, + + extend : function(p, np) { + var o = {}, n; + + o.parent = p; + + for (n in p) { + if (p.hasOwnProperty(n)) + o[n] = p[n]; + } + + for (n in np) { + if (np.hasOwnProperty(n)) + o[n] = np[n]; + } + + return o; + }, + + hideMenus : function() { + var e = tinyMCE.lastSelectedMenuBtn; + + if (tinyMCE.lastMenu) { + tinyMCE.lastMenu.hide(); + tinyMCE.lastMenu = null; + } + + if (e) { + tinyMCE.switchClass(e, tinyMCE.lastMenuBtnClass); + tinyMCE.lastSelectedMenuBtn = null; + } + } + + }; + +// Global instances +var TinyMCE = TinyMCE_Engine; // Compatiblity with gzip compressors +var tinyMCE = new TinyMCE_Engine(); +var tinyMCELang = {}; + +/* file:jscripts/tiny_mce/classes/TinyMCE_Control.class.js */ + +function TinyMCE_Control(settings) { + var t, i, tos, fu, p, x, fn, fu, pn, s = settings; + + this.undoRedoLevel = true; + this.isTinyMCE_Control = true; + + // Default settings + this.enabled = true; + this.settings = s; + this.settings.theme = tinyMCE.getParam("theme", "default"); + this.settings.width = tinyMCE.getParam("width", -1); + this.settings.height = tinyMCE.getParam("height", -1); + this.selection = new TinyMCE_Selection(this); + this.undoRedo = new TinyMCE_UndoRedo(this); + this.cleanup = new TinyMCE_Cleanup(); + this.shortcuts = []; + this.hasMouseMoved = false; + this.foreColor = this.backColor = "#999999"; + this.data = {}; + this.cssClasses = []; + + this.cleanup.init({ + valid_elements : s.valid_elements, + extended_valid_elements : s.extended_valid_elements, + valid_child_elements : s.valid_child_elements, + entities : s.entities, + entity_encoding : s.entity_encoding, + debug : s.cleanup_debug, + indent : s.apply_source_formatting, + invalid_elements : s.invalid_elements, + verify_html : s.verify_html, + fix_content_duplication : s.fix_content_duplication, + convert_fonts_to_spans : s.convert_fonts_to_spans + }); + + // Wrap old theme + t = this.settings.theme; + if (!tinyMCE.hasTheme(t)) { + fn = tinyMCE.callbacks; + tos = {}; + + for (i=0; i 0) { + for (i=0; i 1 && tinyMCE.currentConfig != this.settings.index) { + tinyMCE.settings = this.settings; + tinyMCE.currentConfig = this.settings.index; + } + }, + + select : function() { + var oldInst = tinyMCE.selectedInstance; + + if (oldInst != this) { + if (oldInst) + oldInst.execCommand('mceEndTyping'); + + tinyMCE.dispatchCallback(this, 'select_instance_callback', 'selectInstance', this, oldInst); + tinyMCE.selectedInstance = this; + } + }, + + getBody : function() { + return this.contentBody ? this.contentBody : this.getDoc().body; + }, + + getDoc : function() { +// return this.contentDocument ? this.contentDocument : this.contentWindow.document; // Removed due to IE 5.5 ? + return this.contentWindow.document; + }, + + getWin : function() { + return this.contentWindow; + }, + + getContainerWin : function() { + return this.containerWindow ? this.containerWindow : window; + }, + + getViewPort : function() { + return tinyMCE.getViewPort(this.getWin()); + }, + + getParentNode : function(n, f) { + return tinyMCE.getParentNode(n, f, this.getBody()); + }, + + getParentElement : function(n, na, f) { + return tinyMCE.getParentElement(n, na, f, this.getBody()); + }, + + getParentBlockElement : function(n) { + return tinyMCE.getParentBlockElement(n, this.getBody()); + }, + + resizeToContent : function() { + var d = this.getDoc(), b = d.body, de = d.documentElement; + + this.iframeElement.style.height = (tinyMCE.isRealIE) ? b.scrollHeight : de.offsetHeight + 'px'; + }, + + addShortcut : function(m, k, d, cmd, ui, va) { + var n = typeof(k) == "number", ie = tinyMCE.isIE, c, sc, i, scl = this.shortcuts; + + if (!tinyMCE.getParam('custom_shortcuts')) + return false; + + m = m.toLowerCase(); + k = ie && !n ? k.toUpperCase() : k; + c = n ? null : k.charCodeAt(0); + d = d && d.indexOf('lang_') == 0 ? tinyMCE.getLang(d) : d; + + sc = { + alt : m.indexOf('alt') != -1, + ctrl : m.indexOf('ctrl') != -1, + shift : m.indexOf('shift') != -1, + charCode : c, + keyCode : n ? k : (ie ? c : null), + desc : d, + cmd : cmd, + ui : ui, + val : va + }; + + for (i=0; i 1 && /(^\u00a0|\u00a0$)/.test(v)) { + e.firstChild.nodeValue = v.replace(/(^\u00a0|\u00a0$)/, ''); + s.selectNode(e.firstChild, true, false, false); // Select and collapse + } + } + }, + + _setUseCSS : function(b) { + var d = this.getDoc(); + + try {d.execCommand("useCSS", false, !b);} catch (ex) {} + try {d.execCommand("styleWithCSS", false, b);} catch (ex) {} + + if (!tinyMCE.getParam("table_inline_editing")) + try {d.execCommand('enableInlineTableEditing', false, "false");} catch (ex) {} + + if (!tinyMCE.getParam("object_resizing")) + try {d.execCommand('enableObjectResizing', false, "false");} catch (ex) {} + }, + + execCommand : function(command, user_interface, value) { + var i, x, z, align, img, div, doc = this.getDoc(), win = this.getWin(), focusElm = this.getFocusElement(); + + // Is not a undo specific command + if (!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel', 'gi').test(command)) + this.undoBookmark = null; + + // Mozilla issue + if (!tinyMCE.isIE && !this.useCSS) { + this._setUseCSS(false); + this.useCSS = true; + } + + //debug("command: " + command + ", user_interface: " + user_interface + ", value: " + value); + this.contentDocument = doc; // <-- Strange, unless this is applied Mozilla 1.3 breaks + + // Don't dispatch key commands + if (!/mceStartTyping|mceEndTyping/.test(command)) { + if (tinyMCE.execCommandCallback(this, 'execcommand_callback', 'execCommand', this.editorId, this.getBody(), command, user_interface, value)) + return; + } + + // Fix align on images + if (focusElm && focusElm.nodeName == "IMG") { + align = focusElm.getAttribute('align'); + img = command == "JustifyCenter" ? focusElm.cloneNode(false) : focusElm; + + switch (command) { + case "JustifyLeft": + if (align == 'left') { + img.setAttribute('align', ''); // Needed for IE + img.removeAttribute('align'); + } else + img.setAttribute('align', 'left'); + + // Remove the div + div = focusElm.parentNode; + if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode) + div.parentNode.replaceChild(img, div); + + this.selection.selectNode(img); + this.repaint(); + tinyMCE.triggerNodeChange(); + return; + + case "JustifyCenter": + img.setAttribute('align', ''); // Needed for IE + img.removeAttribute('align'); + + // Is centered + div = tinyMCE.getParentElement(focusElm, "div"); + if (div && div.style.textAlign == "center") { + // Remove div + if (div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode) + div.parentNode.replaceChild(img, div); + } else { + // Add div + div = this.getDoc().createElement("div"); + div.style.textAlign = 'center'; + div.appendChild(img); + focusElm.parentNode.replaceChild(div, focusElm); + } + + this.selection.selectNode(img); + this.repaint(); + tinyMCE.triggerNodeChange(); + return; + + case "JustifyRight": + if (align == 'right') { + img.setAttribute('align', ''); // Needed for IE + img.removeAttribute('align'); + } else + img.setAttribute('align', 'right'); + + // Remove the div + div = focusElm.parentNode; + if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode) + div.parentNode.replaceChild(img, div); + + this.selection.selectNode(img); + this.repaint(); + tinyMCE.triggerNodeChange(); + return; + } + } + + if (tinyMCE.settings.force_br_newlines) { + var alignValue = ""; + + if (doc.selection.type != "Control") { + switch (command) { + case "JustifyLeft": + alignValue = "left"; + break; + + case "JustifyCenter": + alignValue = "center"; + break; + + case "JustifyFull": + alignValue = "justify"; + break; + + case "JustifyRight": + alignValue = "right"; + break; + } + + if (alignValue !== '') { + var rng = doc.selection.createRange(); + + if ((divElm = tinyMCE.getParentElement(rng.parentElement(), "div")) != null) + divElm.setAttribute("align", alignValue); + else if (rng.pasteHTML && rng.htmlText.length > 0) + rng.pasteHTML('
' + rng.htmlText + "
"); + + tinyMCE.triggerNodeChange(); + return; + } + } + } + + switch (command) { + case "mceRepaint": + this.repaint(); + return true; + + case "JustifyLeft": + case "JustifyCenter": + case "JustifyFull": + case "JustifyRight": + var el = tinyMCE.getParentNode(focusElm, function(n) {return tinyMCE.getAttrib(n, 'align');}); + + if (el) { + el.setAttribute('align', ''); // Needed for IE + el.removeAttribute('align'); + } else + this.getDoc().execCommand(command, user_interface, value); + + tinyMCE.triggerNodeChange(); + + return true; + + case "unlink": + // Unlink if caret is inside link + if (tinyMCE.isGecko && this.getSel().isCollapsed) { + focusElm = tinyMCE.getParentElement(focusElm, 'A'); + + if (focusElm) + this.selection.selectNode(focusElm, false); + } + + this.getDoc().execCommand(command, user_interface, value); + + tinyMCE.isGecko && this.getSel().collapseToEnd(); + + tinyMCE.triggerNodeChange(); + + return true; + + case "InsertUnorderedList": + case "InsertOrderedList": + this.getDoc().execCommand(command, user_interface, value); + tinyMCE.triggerNodeChange(); + break; + + case "Strikethrough": + this.getDoc().execCommand(command, user_interface, value); + tinyMCE.triggerNodeChange(); + break; + + case "mceSelectNode": + this.selection.selectNode(value); + tinyMCE.triggerNodeChange(); + tinyMCE.selectedNode = value; + break; + + case "FormatBlock": + if (value == null || value == '') { + var elm = tinyMCE.getParentElement(this.getFocusElement(), "p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp"); + + if (elm) + this.execCommand("mceRemoveNode", false, elm); + } else { + if (!this.cleanup.isValid(value)) + return true; + + if (tinyMCE.isGecko && new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>', 'gi').test(value)) + value = value.replace(/[^a-z]/gi, ''); + + if (tinyMCE.isIE && new RegExp('blockquote|code|samp', 'gi').test(value)) { + var b = this.selection.getBookmark(); + this.getDoc().execCommand("FormatBlock", false, '

'); + tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()), value); + this.selection.moveToBookmark(b); + } else + this.getDoc().execCommand("FormatBlock", false, value); + } + + tinyMCE.triggerNodeChange(); + + break; + + case "mceRemoveNode": + if (!value) + value = tinyMCE.getParentElement(this.getFocusElement()); + + if (tinyMCE.isIE) { + value.outerHTML = value.innerHTML; + } else { + var rng = value.ownerDocument.createRange(); + rng.setStartBefore(value); + rng.setEndAfter(value); + rng.deleteContents(); + rng.insertNode(rng.createContextualFragment(value.innerHTML)); + } + + tinyMCE.triggerNodeChange(); + + break; + + case "mceSelectNodeDepth": + var parentNode = this.getFocusElement(); + for (i=0; parentNode; i++) { + if (parentNode.nodeName.toLowerCase() == "body") + break; + + if (parentNode.nodeName.toLowerCase() == "#text") { + i--; + parentNode = parentNode.parentNode; + continue; + } + + if (i == value) { + this.selection.selectNode(parentNode, false); + tinyMCE.triggerNodeChange(); + tinyMCE.selectedNode = parentNode; + return; + } + + parentNode = parentNode.parentNode; + } + + break; + + case "mceSetStyleInfo": + case "SetStyleInfo": + var rng = this.getRng(); + var sel = this.getSel(); + var scmd = value.command; + var sname = value.name; + var svalue = value.value == null ? '' : value.value; + //var svalue = value['value'] == null ? '' : value['value']; + var wrapper = value.wrapper ? value.wrapper : "span"; + var parentElm = null; + var invalidRe = new RegExp("^BODY|HTML$", "g"); + var invalidParentsRe = tinyMCE.settings.merge_styles_invalid_parents !== '' ? new RegExp(tinyMCE.settings.merge_styles_invalid_parents, "gi") : null; + + // Whole element selected check + if (tinyMCE.isIE) { + // Control range + if (rng.item) + parentElm = rng.item(0); + else { + var pelm = rng.parentElement(); + var prng = doc.selection.createRange(); + prng.moveToElementText(pelm); + + if (rng.htmlText == prng.htmlText || rng.boundingWidth == 0) { + if (invalidParentsRe == null || !invalidParentsRe.test(pelm.nodeName)) + parentElm = pelm; + } + } + } else { + var felm = this.getFocusElement(); + if (sel.isCollapsed || (new RegExp('td|tr|tbody|table|img', 'gi').test(felm.nodeName) && sel.anchorNode == felm.parentNode)) + parentElm = felm; + } + + // Whole element selected + if (parentElm && !invalidRe.test(parentElm.nodeName)) { + if (scmd == "setstyle") + tinyMCE.setStyleAttrib(parentElm, sname, svalue); + + if (scmd == "setattrib") + tinyMCE.setAttrib(parentElm, sname, svalue); + + if (scmd == "removeformat") { + parentElm.style.cssText = ''; + tinyMCE.setAttrib(parentElm, 'class', ''); + } + + // Remove style/attribs from all children + var ch = tinyMCE.getNodeTree(parentElm, [], 1); + for (z=0; z=0; i--) { + var elm = nodes[i]; + var isNew = tinyMCE.getAttrib(elm, "mce_new") == "true"; + + elm.removeAttribute("mce_new"); + + // Is only child a element + if (elm.childNodes && elm.childNodes.length == 1 && elm.childNodes[0].nodeType == 1) { + //tinyMCE.debug("merge1" + isNew); + this._mergeElements(scmd, elm, elm.childNodes[0], isNew); + continue; + } + + // Is I the only child + if (elm.parentNode.childNodes.length == 1 && !invalidRe.test(elm.nodeName) && !invalidRe.test(elm.parentNode.nodeName)) { + //tinyMCE.debug("merge2" + isNew + "," + elm.nodeName + "," + elm.parentNode.nodeName); + if (invalidParentsRe == null || !invalidParentsRe.test(elm.parentNode.nodeName)) + this._mergeElements(scmd, elm.parentNode, elm, false); + } + } + + // Remove empty wrappers + var nodes = doc.getElementsByTagName(wrapper); + for (i=nodes.length-1; i>=0; i--) { + var elm = nodes[i], isEmpty = true; + + // Check if it has any attribs + var tmp = doc.createElement("body"); + tmp.appendChild(elm.cloneNode(false)); + + // Is empty span, remove it + tmp.innerHTML = tmp.innerHTML.replace(new RegExp('style=""|class=""', 'gi'), ''); + //tinyMCE.debug(tmp.innerHTML); + if (new RegExp('', 'gi').test(tmp.innerHTML)) { + for (x=0; x 0) { + value = tinyMCE.replaceVar(value, "selection", selectedText); + tinyMCE.execCommand('mceInsertContent', false, value); + } + + this._addBogusBR(); + tinyMCE.triggerNodeChange(); + break; + + case "mceSetAttribute": + if (typeof(value) == 'object') { + var targetElms = (typeof(value.targets) == "undefined") ? "p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address" : value.targets; + var targetNode = tinyMCE.getParentElement(this.getFocusElement(), targetElms); + + if (targetNode) { + targetNode.setAttribute(value.name, value.value); + tinyMCE.triggerNodeChange(); + } + } + break; + + case "mceSetCSSClass": + this.execCommand("mceSetStyleInfo", false, {command : "setattrib", name : "class", value : value}); + break; + + case "mceInsertRawHTML": + var key = 'tiny_mce_marker'; + + this.execCommand('mceBeginUndoLevel'); + + // Insert marker key + this.execCommand('mceInsertContent', false, key); + + // Store away scroll pos + var scrollX = this.getBody().scrollLeft + this.getDoc().documentElement.scrollLeft; + var scrollY = this.getBody().scrollTop + this.getDoc().documentElement.scrollTop; + + // Find marker and replace with RAW HTML + var html = this.getBody().innerHTML; + if ((pos = html.indexOf(key)) != -1) + tinyMCE.setInnerHTML(this.getBody(), html.substring(0, pos) + value + html.substring(pos + key.length)); + + // Restore scoll pos + this.contentWindow.scrollTo(scrollX, scrollY); + + this.execCommand('mceEndUndoLevel'); + + break; + + case "mceInsertContent": + // Force empty string + if (!value) + value = ''; + + var insertHTMLFailed = false; + + // Removed since it produced problems in IE + // this.getWin().focus(); + + if (tinyMCE.isGecko || tinyMCE.isOpera) { + try { + // Is plain text or HTML, &,   etc will be encoded wrong in FF + if (value.indexOf('<') == -1 && !value.match(/(&| |<|>)/g)) { + var r = this.getRng(); + var n = this.getDoc().createTextNode(tinyMCE.entityDecode(value)); + var s = this.getSel(); + var r2 = r.cloneRange(); + + // Insert text at cursor position + s.removeAllRanges(); + r.deleteContents(); + r.insertNode(n); + + // Move the cursor to the end of text + r2.selectNode(n); + r2.collapse(false); + s.removeAllRanges(); + s.addRange(r2); + } else { + value = tinyMCE.fixGeckoBaseHREFBug(1, this.getDoc(), value); + this.getDoc().execCommand('inserthtml', false, value); + tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value); + } + } catch (ex) { + insertHTMLFailed = true; + } + + if (!insertHTMLFailed) { + tinyMCE.triggerNodeChange(); + return; + } + } + + if (!tinyMCE.isIE) { + var isHTML = value.indexOf('<') != -1; + var sel = this.getSel(); + var rng = this.getRng(); + + if (isHTML) { + if (tinyMCE.isSafari) { + var tmpRng = this.getDoc().createRange(); + + tmpRng.setStart(this.getBody(), 0); + tmpRng.setEnd(this.getBody(), 0); + + value = tmpRng.createContextualFragment(value); + } else + value = rng.createContextualFragment(value); + } else { + // Setup text node + value = doc.createTextNode(tinyMCE.entityDecode(value)); + } + + // Insert plain text in Safari + if (tinyMCE.isSafari && !isHTML) { + this.execCommand('InsertText', false, value.nodeValue); + tinyMCE.triggerNodeChange(); + return true; + } else if (tinyMCE.isSafari && isHTML) { + rng.deleteContents(); + rng.insertNode(value); + tinyMCE.triggerNodeChange(); + return true; + } + + rng.deleteContents(); + + // If target node is text do special treatment, (Mozilla 1.3 fix) + if (rng.startContainer.nodeType == 3) { + var node = rng.startContainer.splitText(rng.startOffset); + node.parentNode.insertBefore(value, node); + } else + rng.insertNode(value); + + if (!isHTML) { + // Removes weird selection trails + sel.selectAllChildren(doc.body); + sel.removeAllRanges(); + + // Move cursor to end of content + var rng = doc.createRange(); + + rng.selectNode(value); + rng.collapse(false); + + sel.addRange(rng); + } else + rng.collapse(false); + + tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value); + } else { + var rng = doc.selection.createRange(), tmpRng = null; + var c = value.indexOf('"; + } + + if (hc) { + cn = n.childNodes; + + for (i=0, l=cn.length; i'; + + return h; + }, + + _serializeAttribute : function(n, r, an) { + var av = '', t, os = this.settings.on_save; + + if (os && (an.indexOf('mce_') == 0 || an.indexOf('_moz') == 0)) + return ''; + + if (os && this.mceAttribs[an]) + av = this._getAttrib(n, this.mceAttribs[an]); + + if (av.length == 0) + av = this._getAttrib(n, an); + + if (av.length == 0 && r.defaultAttribs && (t = r.defaultAttribs[an])) { + av = t; + + if (av == "mce_empty") + return " " + an + '=""'; + } + + if (r.forceAttribs && (t = r.forceAttribs[an])) + av = t; + + if (os && av.length != 0 && /^(src|href|longdesc)$/.test(an)) + av = this._urlConverter(this, n, av); + + if (av.length != 0 && r.validAttribValues && r.validAttribValues[an] && !r.validAttribValues[an].test(av)) + return ""; + + if (av.length != 0 && av == "{$uid}") + av = "uid_" + (this.idCount++); + + if (av.length != 0) { + if (an.indexOf('on') != 0) + av = this.xmlEncode(av, 1); + + return " " + an + "=" + '"' + av + '"'; + } + + return ""; + }, + + formatHTML : function(h) { + var s = this.settings, p = '', i = 0, li = 0, o = '', l; + + // Replace BR in pre elements to \n + h = h.replace(/]*)>(.*?)<\/pre>/gi, function (a, b, c) { + c = c.replace(//gi, '\n'); + return '' + c + ''; + }); + + h = h.replace(/\r/g, ''); // Windows sux, isn't carriage return a thing of the past :) + h = '\n' + h; + h = h.replace(new RegExp('\\n\\s+', 'gi'), '\n'); // Remove previous formatting + h = h.replace(this.nlBeforeRe, '\n<$1$2>'); + h = h.replace(this.nlAfterRe, '<$1$2>\n'); + h = h.replace(this.nlBeforeAfterRe, '\n<$1$2$3>\n'); + h += '\n'; + + //tinyMCE.debug(h); + + while ((i = h.indexOf('\n', i + 1)) != -1) { + if ((l = h.substring(li + 1, i)).length != 0) { + if (this.ouRe.test(l) && p.length >= s.indent_levels) + p = p.substring(s.indent_levels); + + o += p + l + '\n'; + + if (this.inRe.test(l)) + p += this.inStr; + } + + li = i; + } + + //tinyMCE.debug(h); + + return o; + }, + + xmlEncode : function(s) { + var cl = this, re = this.xmlEncodeRe; + + if (!this.entitiesDone) + this._setupEntities(); // Will intialize lookup table + + switch (this.settings.entity_encoding) { + case "raw": + return tinyMCE.xmlEncode(s); + + case "named": + return s.replace(re, function (c) { + var b = cl.entities[c.charCodeAt(0)]; + + return b ? '&' + b + ';' : c; + }); + + case "numeric": + return s.replace(re, function (c) { + return '&#' + c.charCodeAt(0) + ';'; + }); + } + + return s; + }, + + split : function(re, s) { + var i, l, o = [], c = s.split(re); + + for (i=0, l=c.length; i' : '>' + h + ''; + + return o; + }, + + createTag : function(d, tn, a, h) { + var o = d.createElement(tn), n; + + if (a) { + for (n in a) { + if (typeof(a[n]) != 'function' && a[n] != null) + tinyMCE.setAttrib(o, n, a[n]); + } + } + + if (h) + o.innerHTML = h; + + return o; + }, + + getElementByAttributeValue : function(n, e, a, v) { + return (n = this.getElementsByAttributeValue(n, e, a, v)).length == 0 ? null : n[0]; + }, + + getElementsByAttributeValue : function(n, e, a, v) { + var i, nl = n.getElementsByTagName(e), o = []; + + for (i=0; i]*)>/gi, ''); + h = h.replace(/]*)>/gi, ''); + h = h.replace(/]*)>/gi, ''); + h = h.replace(/]*)>/gi, ''); + h = h.replace(/<\/strong>/gi, ''); + h = h.replace(/<\/em>/gi, ''); + } + + if (tinyMCE.isRealIE) { + // Since MSIE handles invalid HTML better that valid XHTML we + // need to make some things invalid.


gets converted to
. + h = h.replace(/\s\/>/g, '>'); + + // Since MSIE auto generated emtpy P tags some times we must tell it to keep the real ones + h = h.replace(/]*)>\u00A0?<\/p>/gi, ' 

'); // Keep empty paragraphs + h = h.replace(/]*)>\s* \s*<\/p>/gi, ' 

'); // Keep empty paragraphs + h = h.replace(/]*)>\s+<\/p>/gi, ' 

'); // Keep empty paragraphs + + // Remove first comment + e.innerHTML = tinyMCE.uniqueTag + h; + e.firstChild.removeNode(true); + + // Remove weird auto generated empty paragraphs unless it's supposed to be there + nl = e.getElementsByTagName("p"); + for (i=nl.length-1; i>=0; i--) { + n = nl[i]; + + if (n.nodeName == 'P' && !n.hasChildNodes() && !n.mce_keep) + n.parentNode.removeChild(n); + } + } else { + h = this.fixGeckoBaseHREFBug(1, e, h); + e.innerHTML = h; + this.fixGeckoBaseHREFBug(2, e, h); + } + }, + + getOuterHTML : function(e) { + var d; + + if (tinyMCE.isIE) + return e.outerHTML; + + d = e.ownerDocument.createElement("body"); + d.appendChild(e.cloneNode(true)); + + return d.innerHTML; + }, + + setOuterHTML : function(e, h, d) { + var d = typeof(d) == "undefined" ? e.ownerDocument : d, i, nl, t; + + if (tinyMCE.isIE && e.nodeType == 1) + e.outerHTML = h; + else { + t = d.createElement("body"); + t.innerHTML = h; + + for (i=0, nl=t.childNodes; i-1; i--) { + if (ar[i].specified && ar[i].nodeValue) + ne.setAttribute(ar[i].nodeName.toLowerCase(), ar[i].nodeValue); + } + + ar = e.childNodes; + for (i=0; i= strTok2.length) { + for (i=0; i= strTok2.length || strTok1[i] != strTok2[i]) { + breakPoint = i + 1; + break; + } + } + } + + if (strTok1.length < strTok2.length) { + for (i=0; i= strTok1.length || strTok1[i] != strTok2[i]) { + breakPoint = i + 1; + break; + } + } + } + + if (breakPoint == 1) + return targetURL.path; + + for (i=0; i<(strTok1.length-(breakPoint-1)); i++) + outPath += "../"; + + for (i=breakPoint-1; i=0; i--) { + if (baseURLParts[i].length == 0) + continue; + + newBaseURLParts[newBaseURLParts.length] = baseURLParts[i]; + } + baseURLParts = newBaseURLParts.reverse(); + + // Merge relURLParts chunks + newRelURLParts = []; + numBack = 0; + for (i=relURLParts.length-1; i>=0; i--) { + if (relURLParts[i].length == 0 || relURLParts[i] == ".") + continue; + + if (relURLParts[i] == '..') { + numBack++; + continue; + } + + if (numBack > 0) { + numBack--; + continue; + } + + newRelURLParts[newRelURLParts.length] = relURLParts[i]; + } + + relURLParts = newRelURLParts.reverse(); + + // Remove end from absolute path + len = baseURLParts.length-numBack; + absPath = (len <= 0 ? "" : "/") + baseURLParts.slice(0, len).join('/') + "/" + relURLParts.join('/'); + start = ""; + end = ""; + + // Build output URL + relURL.protocol = baseURL.protocol; + relURL.host = baseURL.host; + relURL.port = baseURL.port; + + // Re-add trailing slash if it's removed + if (relURL.path.charAt(relURL.path.length-1) == "/") + absPath += "/"; + + relURL.path = absPath; + + return this.serializeURL(relURL); + }, + + convertURL : function(url, node, on_save) { + var dl = document.location, start, portPart, urlParts, baseUrlParts, tmpUrlParts, curl; + var prot = dl.protocol, host = dl.hostname, port = dl.port; + + // Pass through file protocol + if (prot == "file:") + return url; + + // Something is wrong, remove weirdness + url = tinyMCE.regexpReplace(url, '(http|https):///', '/'); + + // Mailto link or anchor (Pass through) + if (url.indexOf('mailto:') != -1 || url.indexOf('javascript:') != -1 || /^[ \t\r\n\+]*[#\?]/.test(url)) + return url; + + // Fix relative/Mozilla + if (!tinyMCE.isIE && !on_save && url.indexOf("://") == -1 && url.charAt(0) != '/') + return tinyMCE.settings.base_href + url; + + // Handle relative URLs + if (on_save && tinyMCE.getParam('relative_urls')) { + curl = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, url); + if (curl.charAt(0) == '/') + curl = tinyMCE.settings.document_base_prefix + curl; + + urlParts = tinyMCE.parseURL(curl); + tmpUrlParts = tinyMCE.parseURL(tinyMCE.settings.document_base_url); + + // Force relative + if (urlParts.host == tmpUrlParts.host && (urlParts.port == tmpUrlParts.port)) + return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url, curl); + } + + // Handle absolute URLs + if (!tinyMCE.getParam('relative_urls')) { + urlParts = tinyMCE.parseURL(url); + baseUrlParts = tinyMCE.parseURL(tinyMCE.settings.base_href); + + // Force absolute URLs from relative URLs + url = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, url); + + // If anchor and path is the same page + if (urlParts.anchor && urlParts.path == baseUrlParts.path) + return "#" + urlParts.anchor; + } + + // Remove current domain + if (tinyMCE.getParam('remove_script_host')) { + start = ""; + portPart = ""; + + if (port !== '') + portPart = ":" + port; + + start = prot + "//" + host + portPart + "/"; + + if (url.indexOf(start) == 0) + url = url.substring(start.length-1); + } + + return url; + }, + + convertAllRelativeURLs : function(body) { + var i, elms, src, href, mhref, msrc; + + // Convert all image URL:s to absolute URL + elms = body.getElementsByTagName("img"); + for (i=0; i bookmark.index) { + try { + rng.addElement(nl[bookmark.index]); + } catch (ex) { + // Might be thrown if the node no longer exists + } + } + } else { + // Try/catch needed since this operation breaks when TinyMCE is placed in hidden divs/tabs + try { + // Incorrect bookmark + if (bookmark.start < 0) + return true; + + rng = inst.getSel().createRange(); + rng.moveToElementText(inst.getBody()); + rng.collapse(true); + rng.moveStart('character', bookmark.start); + rng.moveEnd('character', bookmark.length); + } catch (ex) { + return true; + } + } + + rng.select(); + + win.scrollTo(bookmark.scrollX, bookmark.scrollY); + return true; + } + + if (tinyMCE.isGecko || tinyMCE.isOpera) { + if (!sel) + return false; + + if (bookmark.rng) { + sel.removeAllRanges(); + sel.addRange(bookmark.rng); + } + + if (bookmark.start != -1 && bookmark.end != -1) { + try { + sd = this._getTextPos(b, bookmark.start, bookmark.end); + rng = doc.createRange(); + rng.setStart(sd.startNode, sd.startOffset); + rng.setEnd(sd.endNode, sd.endOffset); + sel.removeAllRanges(); + sel.addRange(rng); + + if (!tinyMCE.isOpera) + win.focus(); + } catch (ex) { + // Ignore + } + } + + /* + if (typeof(bookmark.index) != 'undefined') { + tinyMCE.selectElements(b, 'IMG', function (n) { + if (bookmark.index-- == 0) { + // Select image in Gecko here + } + + return false; + }); + } + */ + + win.scrollTo(bookmark.scrollX, bookmark.scrollY); + return true; + } + + return false; + }, + + _getPosText : function(r, sn, en) { + var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}; + + while ((n = w.nextNode()) != null) { + if (n == sn) + d.start = p; + + if (n == en) { + d.end = p; + return d; + } + + p += n.nodeValue ? n.nodeValue.length : 0; + } + + return null; + }, + + _getTextPos : function(r, sp, ep) { + var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}; + + while ((n = w.nextNode()) != null) { + p += n.nodeValue ? n.nodeValue.length : 0; + + if (p >= sp && !d.startNode) { + d.startNode = n; + d.startOffset = sp - (p - n.nodeValue.length); + } + + if (p >= ep) { + d.endNode = n; + d.endOffset = ep - (p - n.nodeValue.length); + + return d; + } + } + + return null; + }, + + selectNode : function(node, collapse, select_text_node, to_start) { + var inst = this.instance, sel, rng, nodes; + + if (!node) + return; + + if (typeof(collapse) == "undefined") + collapse = true; + + if (typeof(select_text_node) == "undefined") + select_text_node = false; + + if (typeof(to_start) == "undefined") + to_start = true; + + if (inst.settings.auto_resize) + inst.resizeToContent(); + + if (tinyMCE.isRealIE) { + rng = inst.getDoc().body.createTextRange(); + + try { + rng.moveToElementText(node); + + if (collapse) + rng.collapse(to_start); + + rng.select(); + } catch (e) { + // Throws illigal agrument in MSIE some times + } + } else { + sel = this.getSel(); + + if (!sel) + return; + + if (tinyMCE.isSafari) { + sel.setBaseAndExtent(node, 0, node, node.innerText.length); + + if (collapse) { + if (to_start) + sel.collapseToStart(); + else + sel.collapseToEnd(); + } + + this.scrollToNode(node); + + return; + } + + rng = inst.getDoc().createRange(); + + if (select_text_node) { + // Find first textnode in tree + nodes = tinyMCE.getNodeTree(node, [], 3); + if (nodes.length > 0) + rng.selectNodeContents(nodes[0]); + else + rng.selectNodeContents(node); + } else + rng.selectNode(node); + + if (collapse) { + // Special treatment of textnode collapse + if (!to_start && node.nodeType == 3) { + rng.setStart(node, node.nodeValue.length); + rng.setEnd(node, node.nodeValue.length); + } else + rng.collapse(to_start); + } + + sel.removeAllRanges(); + sel.addRange(rng); + } + + this.scrollToNode(node); + + // Set selected element + tinyMCE.selectedElement = null; + if (node.nodeType == 1) + tinyMCE.selectedElement = node; + }, + + scrollToNode : function(node) { + var inst = this.instance, w = inst.getWin(), vp = inst.getViewPort(), pos = tinyMCE.getAbsPosition(node), cvp, p, cwin; + + // Only scroll if out of visible area + if (pos.absLeft < vp.left || pos.absLeft > vp.left + vp.width || pos.absTop < vp.top || pos.absTop > vp.top + (vp.height-25)) + w.scrollTo(pos.absLeft, pos.absTop - vp.height + 25); + + // Scroll container window + if (inst.settings.auto_resize) { + cwin = inst.getContainerWin(); + cvp = tinyMCE.getViewPort(cwin); + p = this.getAbsPosition(node); + + if (p.absLeft < cvp.left || p.absLeft > cvp.left + cvp.width || p.absTop < cvp.top || p.absTop > cvp.top + cvp.height) + cwin.scrollTo(p.absLeft, p.absTop - cvp.height + 25); + } + }, + + getAbsPosition : function(n) { + var pos = tinyMCE.getAbsPosition(n), ipos = tinyMCE.getAbsPosition(this.instance.iframeElement); + + return { + absLeft : ipos.absLeft + pos.absLeft, + absTop : ipos.absTop + pos.absTop + }; + }, + + getSel : function() { + var inst = this.instance; + + if (tinyMCE.isRealIE) + return inst.getDoc().selection; + + return inst.contentWindow.getSelection(); + }, + + getRng : function() { + var s = this.getSel(); + + if (s == null) + return null; + + if (tinyMCE.isRealIE) + return s.createRange(); + + if (tinyMCE.isSafari && !s.getRangeAt) + return '' + window.getSelection(); + + if (s.rangeCount > 0) + return s.getRangeAt(0); + + return null; + }, + + isCollapsed : function() { + var r = this.getRng(); + + if (r.item) + return false; + + return r.boundingWidth == 0 || this.getSel().isCollapsed; + }, + + collapse : function(b) { + var r = this.getRng(), s = this.getSel(); + + if (r.select) { + r.collapse(b); + r.select(); + } else { + if (b) + s.collapseToStart(); + else + s.collapseToEnd(); + } + }, + + getFocusElement : function() { + var inst = this.instance, doc, rng, sel, elm; + + if (tinyMCE.isRealIE) { + doc = inst.getDoc(); + rng = doc.selection.createRange(); + + // if (rng.collapse) + // rng.collapse(true); + + elm = rng.item ? rng.item(0) : rng.parentElement(); + } else { + if (!tinyMCE.isSafari && inst.isHidden()) + return inst.getBody(); + + sel = this.getSel(); + rng = this.getRng(); + + if (!sel || !rng) + return null; + + elm = rng.commonAncestorContainer; + //elm = (sel && sel.anchorNode) ? sel.anchorNode : null; + + // Handle selection a image or other control like element such as anchors + if (!rng.collapsed) { + // Is selection small + if (rng.startContainer == rng.endContainer) { + if (rng.startOffset - rng.endOffset < 2) { + if (rng.startContainer.hasChildNodes()) + elm = rng.startContainer.childNodes[rng.startOffset]; + } + } + } + + // Get the element parent of the node + elm = tinyMCE.getParentElement(elm); + + //if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") + // elm = tinyMCE.selectedElement; + } + + return elm; + } + + }; + +/* file:jscripts/tiny_mce/classes/TinyMCE_UndoRedo.class.js */ + +function TinyMCE_UndoRedo(inst) { + this.instance = inst; + this.undoLevels = []; + this.undoIndex = 0; + this.typingUndoIndex = -1; + this.undoRedo = true; +}; + +TinyMCE_UndoRedo.prototype = { + add : function(l) { + var b, customUndoLevels, newHTML, inst = this.instance, i, ul, ur; + + if (l) { + this.undoLevels[this.undoLevels.length] = l; + return true; + } + + if (this.typingUndoIndex != -1) { + this.undoIndex = this.typingUndoIndex; + + if (tinyMCE.typingUndoIndex != -1) + tinyMCE.undoIndex = tinyMCE.typingUndoIndex; + } + + newHTML = tinyMCE.trim(inst.getBody().innerHTML); + if (this.undoLevels[this.undoIndex] && newHTML != this.undoLevels[this.undoIndex].content) { + //tinyMCE.debug(newHTML, this.undoLevels[this.undoIndex].content); + + // Is dirty again + inst.isNotDirty = false; + + tinyMCE.dispatchCallback(inst, 'onchange_callback', 'onChange', inst); + + // Time to compress + customUndoLevels = tinyMCE.settings.custom_undo_redo_levels; + if (customUndoLevels != -1 && this.undoLevels.length > customUndoLevels) { + for (i=0; i 0) { + this.undoIndex--; + + tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content); + inst.repaint(); + + if (inst.settings.custom_undo_redo_restore_selection) + inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark); + } + }, + + redo : function() { + var inst = this.instance; + + tinyMCE.execCommand("mceEndTyping"); + + if (this.undoIndex < (this.undoLevels.length-1)) { + this.undoIndex++; + + tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content); + inst.repaint(); + + if (inst.settings.custom_undo_redo_restore_selection) + inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark); + } + + tinyMCE.triggerNodeChange(); + } + + }; + +/* file:jscripts/tiny_mce/classes/TinyMCE_ForceParagraphs.class.js */ + +var TinyMCE_ForceParagraphs = { + _insertPara : function(inst, e) { + var doc = inst.getDoc(), sel = inst.getSel(), body = inst.getBody(), win = inst.contentWindow, rng = sel.getRangeAt(0); + var rootElm = doc.documentElement, blockName = "P", startNode, endNode, startBlock, endBlock; + var rngBefore, rngAfter, direct, startNode, startOffset, endNode, endOffset, b = tinyMCE.isOpera ? inst.selection.getBookmark() : null; + var paraBefore, paraAfter, startChop, endChop, contents, i; + + function isEmpty(para) { + var nodes; + + function isEmptyHTML(html) { + return html.replace(new RegExp('[ \t\r\n]+', 'g'), '').toLowerCase() == ''; + } + + // Check for images + if (para.getElementsByTagName("img").length > 0) + return false; + + // Check for tables + if (para.getElementsByTagName("table").length > 0) + return false; + + // Check for HRs + if (para.getElementsByTagName("hr").length > 0) + return false; + + // Check all textnodes + nodes = tinyMCE.getNodeTree(para, [], 3); + for (i=0; i <" + blockName + "> "; + paraAfter = body.childNodes[1]; + } + + inst.selection.moveToBookmark(b); + inst.selection.selectNode(paraAfter, true, true); + + return true; + } + + // Place first part within new paragraph + if (startChop.nodeName == blockName) + rngBefore.setStart(startChop, 0); + else + rngBefore.setStartBefore(startChop); + + rngBefore.setEnd(startNode, startOffset); + paraBefore.appendChild(rngBefore.cloneContents()); + + // Place secound part within new paragraph + rngAfter.setEndAfter(endChop); + rngAfter.setStart(endNode, endOffset); + contents = rngAfter.cloneContents(); + + if (contents.firstChild && contents.firstChild.nodeName == blockName) { + /* var nodes = contents.firstChild.childNodes; + for (i=0; i= r.startOffset && nv.charAt(r.startOffset - 1) == ' ') + s = true;*/ + + // Only remove BRs if we are at the end of line #bug 1464152 + if (nv != null && r.startOffset == nv.length) + sn.nextSibling.parentNode.removeChild(sn.nextSibling); + } + + if (inst.settings.auto_resize) + inst.resizeToContent(); + + return s; + } + + }; + +/* file:jscripts/tiny_mce/classes/TinyMCE_Layer.class.js */ + +function TinyMCE_Layer(id, bm) { + this.id = id; + this.blockerElement = null; + this.events = false; + this.element = null; + this.blockMode = typeof(bm) != 'undefined' ? bm : true; + this.doc = document; +}; + +TinyMCE_Layer.prototype = { + moveRelativeTo : function(re, p) { + var rep = this.getAbsPosition(re), e = this.getElement(), x, y; + var w = parseInt(re.offsetWidth), h = parseInt(re.offsetHeight); + var ew = parseInt(e.offsetWidth), eh = parseInt(e.offsetHeight); + + switch (p) { + case "tl": + x = rep.absLeft; + y = rep.absTop; + break; + + case "tr": + x = rep.absLeft + w; + y = rep.absTop; + break; + + case "bl": + x = rep.absLeft; + y = rep.absTop + h; + break; + + case "br": + x = rep.absLeft + w; + y = rep.absTop + h; + break; + + case "cc": + x = rep.absLeft + (w / 2) - (ew / 2); + y = rep.absTop + (h / 2) - (eh / 2); + break; + } + + this.moveTo(x, y); + }, + + moveBy : function(x, y) { + var e = this.getElement(); + this.moveTo(parseInt(e.style.left) + x, parseInt(e.style.top) + y); + }, + + moveTo : function(x, y) { + var e = this.getElement(); + + e.style.left = x + "px"; + e.style.top = y + "px"; + + this.updateBlocker(); + }, + + resizeBy : function(w, h) { + var e = this.getElement(); + this.resizeTo(parseInt(e.style.width) + w, parseInt(e.style.height) + h); + }, + + resizeTo : function(w, h) { + var e = this.getElement(); + + if (w != null) + e.style.width = w + "px"; + + if (h != null) + e.style.height = h + "px"; + + this.updateBlocker(); + }, + + show : function() { + var el = this.getElement(); + + if (el) { + el.style.display = 'block'; + this.updateBlocker(); + } + }, + + hide : function() { + var el = this.getElement(); + + if (el) { + el.style.display = 'none'; + this.updateBlocker(); + } + }, + + isVisible : function() { + return this.getElement().style.display == 'block'; + }, + + getElement : function() { + if (!this.element) + this.element = this.doc.getElementById(this.id); + + return this.element; + }, + + setBlockMode : function(s) { + this.blockMode = s; + }, + + updateBlocker : function() { + var e, b, x, y, w, h; + + b = this.getBlocker(); + if (b) { + if (this.blockMode) { + e = this.getElement(); + x = this.parseInt(e.style.left); + y = this.parseInt(e.style.top); + w = this.parseInt(e.offsetWidth); + h = this.parseInt(e.offsetHeight); + + b.style.left = x + 'px'; + b.style.top = y + 'px'; + b.style.width = w + 'px'; + b.style.height = h + 'px'; + b.style.display = e.style.display; + } else + b.style.display = 'none'; + } + }, + + getBlocker : function() { + var d, b; + + if (!this.blockerElement && this.blockMode) { + d = this.doc; + b = d.getElementById(this.id + "_blocker"); + + if (!b) { + b = d.createElement("iframe"); + + b.setAttribute('id', this.id + "_blocker"); + b.style.cssText = 'display: none; position: absolute; left: 0; top: 0'; + b.src = 'javascript:false;'; + b.frameBorder = '0'; + b.scrolling = 'no'; + + d.body.appendChild(b); + } + + this.blockerElement = b; + } + + return this.blockerElement; + }, + + getAbsPosition : function(n) { + var p = {absLeft : 0, absTop : 0}; + + while (n) { + p.absLeft += n.offsetLeft; + p.absTop += n.offsetTop; + n = n.offsetParent; + } + + return p; + }, + + create : function(n, c, p, h) { + var d = this.doc, e = d.createElement(n); + + e.setAttribute('id', this.id); + + if (c) + e.className = c; + + if (!p) + p = d.body; + + if (h) + e.innerHTML = h; + + p.appendChild(e); + + return this.element = e; + }, + + exists : function() { + return this.doc.getElementById(this.id) != null; + }, + + parseInt : function(s) { + if (s == null || s == '') + return 0; + + return parseInt(s); + }, + + remove : function() { + var e = this.getElement(), b = this.getBlocker(); + + if (e) + e.parentNode.removeChild(e); + + if (b) + b.parentNode.removeChild(b); + } + + }; + +/* file:jscripts/tiny_mce/classes/TinyMCE_Menu.class.js */ + +function TinyMCE_Menu() { + var id; + + if (typeof(tinyMCE.menuCounter) == "undefined") + tinyMCE.menuCounter = 0; + + id = "mc_menu_" + tinyMCE.menuCounter++; + + TinyMCE_Layer.call(this, id, true); + + this.id = id; + this.items = []; + this.needsUpdate = true; +}; + +TinyMCE_Menu.prototype = tinyMCE.extend(TinyMCE_Layer.prototype, { + init : function(s) { + var n; + + // Default params + this.settings = { + separator_class : 'mceMenuSeparator', + title_class : 'mceMenuTitle', + disabled_class : 'mceMenuDisabled', + menu_class : 'mceMenu', + drop_menu : true + }; + + for (n in s) + this.settings[n] = s[n]; + + this.create('div', this.settings.menu_class); + }, + + clear : function() { + this.items = []; + }, + + addTitle : function(t) { + this.add({type : 'title', text : t}); + }, + + addDisabled : function(t) { + this.add({type : 'disabled', text : t}); + }, + + addSeparator : function() { + this.add({type : 'separator'}); + }, + + addItem : function(t, js) { + this.add({text : t, js : js}); + }, + + add : function(mi) { + this.items[this.items.length] = mi; + this.needsUpdate = true; + }, + + update : function() { + var e = this.getElement(), h = '', i, t, m = this.items, s = this.settings; + + if (this.settings.drop_menu) + h += ''; + + h += ''; + + for (i=0; i'; + } + + h += '
'; + break; + + case 'title': + h += '
' + t + ''; + break; + + case 'disabled': + h += '
' + t + ''; + break; + + default: + h += '
' + t + ''; + } + + h += '
'; + + e.innerHTML = h; + + this.needsUpdate = false; + this.updateBlocker(); + }, + + show : function() { + var nl, i; + + if (tinyMCE.lastMenu == this) + return; + + if (this.needsUpdate) + this.update(); + + if (tinyMCE.lastMenu && tinyMCE.lastMenu != this) + tinyMCE.lastMenu.hide(); + + TinyMCE_Layer.prototype.show.call(this); + + if (!tinyMCE.isOpera) { + // Accessibility stuff +/* nl = this.getElement().getElementsByTagName("a"); + if (nl.length > 0) + nl[0].focus();*/ + } + + tinyMCE.lastMenu = this; + } + + }); + +/* file:jscripts/tiny_mce/classes/TinyMCE_Debug.class.js */ + +tinyMCE.add(TinyMCE_Engine, { + debug : function() { + var m = "", a, i, l = tinyMCE.log.length; + + for (i=0, a = this.debug.arguments; i'; - h += ''; - - return h; -} - -function pickColor(e, target_form_element) { - if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown") - tinyMCEPopup.pickColor(e, target_form_element); -} - -function updateColor(img_id, form_element_id) { - document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value; -} - -function setBrowserDisabled(id, state) { - var img = document.getElementById(id); - var lnk = document.getElementById(id + "_link"); - - if (lnk) { - if (state) { - lnk.setAttribute("realhref", lnk.getAttribute("href")); - lnk.removeAttribute("href"); - tinyMCE.switchClass(img, 'mceButtonDisabled', true); - } else { - lnk.setAttribute("href", lnk.getAttribute("realhref")); - tinyMCE.switchClass(img, 'mceButtonNormal', false); - } - } -} - -function getBrowserHTML(id, target_form_element, type, prefix) { - var option = prefix + "_" + type + "_browser_callback"; - var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); - if (cb == null) - return ""; - - var html = ""; - - html += ''; - html += ''; - - return html; -} - -function openBrower(img_id, target_form_element, type, option) { - var img = document.getElementById(img_id); - - if (img.className != "mceButtonDisabled") - tinyMCEPopup.openBrowser(target_form_element, type, option); -} - -function selectByValue(form_obj, field_name, value, add_custom, ignore_case) { - if (!form_obj || !form_obj.elements[field_name]) - return; - - var sel = form_obj.elements[field_name]; - - var found = false; - for (var i=0; i'; + h += ''; + + return h; +} + +function pickColor(e, target_form_element) { + if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown") + tinyMCEPopup.pickColor(e, target_form_element); +} + +function updateColor(img_id, form_element_id) { + document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value; +} + +function setBrowserDisabled(id, state) { + var img = document.getElementById(id); + var lnk = document.getElementById(id + "_link"); + + if (lnk) { + if (state) { + lnk.setAttribute("realhref", lnk.getAttribute("href")); + lnk.removeAttribute("href"); + tinyMCE.switchClass(img, 'mceButtonDisabled', true); + } else { + lnk.setAttribute("href", lnk.getAttribute("realhref")); + tinyMCE.switchClass(img, 'mceButtonNormal', false); + } + } +} + +function getBrowserHTML(id, target_form_element, type, prefix) { + var option = prefix + "_" + type + "_browser_callback"; + var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); + if (cb == null) + return ""; + + var html = ""; + + html += ''; + html += ''; + + return html; +} + +function openBrower(img_id, target_form_element, type, option) { + var img = document.getElementById(img_id); + + if (img.className != "mceButtonDisabled") + tinyMCEPopup.openBrowser(target_form_element, type, option); +} + +function selectByValue(form_obj, field_name, value, add_custom, ignore_case) { + if (!form_obj || !form_obj.elements[field_name]) + return; + + var sel = form_obj.elements[field_name]; + + var found = false; + for (var i=0; i x && mx < x + w && my > y && my < y + h)) { - MCLayer.visibleLayer = null; - - if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my)) - return true; - - l.hide(); - } - } - }, - - addCSSClass : function(e, c) { - this.removeCSSClass(e, c); - var a = this.explode(' ', e.className); - a[a.length] = c; - e.className = a.join(' '); - }, - - removeCSSClass : function(e, c) { - var a = this.explode(' ', e.className), i; - - for (i=0; i x && mx < x + w && my > y && my < y + h)) { + MCLayer.visibleLayer = null; + + if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my)) + return true; + + l.hide(); + } + } + }, + + addCSSClass : function(e, c) { + this.removeCSSClass(e, c); + var a = this.explode(' ', e.className); + a[a.length] = c; + e.className = a.join(' '); + }, + + removeCSSClass : function(e, c) { + var a = this.explode(' ', e.className), i; + + for (i=0; i parseInt(v)) - st = this.mark(f, n); - } - } - - return st; - }, - - hasClass : function(n, c, d) { - return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className); - }, - - getNum : function(n, c) { - c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0]; - c = c.replace(/[^0-9]/g, ''); - - return c; - }, - - addClass : function(n, c, b) { - var o = this.removeClass(n, c); - n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c; - }, - - removeClass : function(n, c) { - c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' '); - return n.className = c != ' ' ? c : ''; - }, - - tags : function(f, s) { - return f.getElementsByTagName(s); - }, - - mark : function(f, n) { - var s = this.settings; - - this.addClass(n, s.invalid_cls); - this.markLabels(f, n, s.invalid_cls); - - return false; - }, - - markLabels : function(f, n, ic) { - var nl, i; - - nl = this.tags(f, "label"); - for (i=0; i parseInt(v)) + st = this.mark(f, n); + } + } + + return st; + }, + + hasClass : function(n, c, d) { + return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className); + }, + + getNum : function(n, c) { + c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0]; + c = c.replace(/[^0-9]/g, ''); + + return c; + }, + + addClass : function(n, c, b) { + var o = this.removeClass(n, c); + n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c; + }, + + removeClass : function(n, c) { + c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' '); + return n.className = c != ' ' ? c : ''; + }, + + tags : function(f, s) { + return f.getElementsByTagName(s); + }, + + mark : function(f, n) { + var s = this.settings; + + this.addClass(n, s.invalid_cls); + this.markLabels(f, n, s.invalid_cls); + + return false; + }, + + markLabels : function(f, n, ic) { + var nl, i; + + nl = this.tags(f, "label"); + for (i=0; i1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12); -$IMAP_SERVER_TZ = date('Z'); +if (!isset($IMAP_USE_HEADER_DATE) || !$IMAP_USE_HEADER_DATE) { + $IMAP_USE_INTERNAL_DATE = true; +} + +/** + * @todo Maybe use date() to generate this. + */ +$GLOBALS['IMAP_MONTHS'] = array("Jan" => 1, "Feb" => 2, "Mar" => 3, "Apr" => 4, + "May" => 5, "Jun" => 6, "Jul" => 7, "Aug" => 8, "Sep" => 9, "Oct" => 10, + "Nov" => 11, "Dec" => 12); + +$GLOBALS['IMAP_SERVER_TZ'] = date('Z'); $iil_error; $iil_errornum; $iil_selected; -class iilConnection{ +/** + * @todo Change class vars to public/private + */ +class iilConnection +{ var $fp; var $error; var $errorNum; @@ -83,7 +104,11 @@ class iilConnection{ var $capability = array(); } -class iilBasicHeader{ +/** + * @todo Change class vars to public/private + */ +class iilBasicHeader +{ var $id; var $uid; var $subject; @@ -96,21 +121,29 @@ class iilBasicHeader{ var $messageID; var $size; var $encoding; + var $charset; var $ctype; var $flags; var $timestamp; var $f; - var $seen; - var $deleted; - var $recent; - var $answered; - var $junk; var $internaldate; - var $is_reply; -} - - -class iilThreadHeader{ + var $references; + var $priority; + var $mdn_to; + var $mdn_sent = false; + var $is_reply = false; + var $seen = false; + var $deleted = false; + var $recent = false; + var $answered = false; + var $junk = false; +} + +/** + * @todo Change class vars to public/private + */ +class iilThreadHeader +{ var $id; var $sbj; var $irt; @@ -118,205 +151,254 @@ class iilThreadHeader{ } -function iil_xor($string, $string2){ - $result = ""; +function iil_xor($string, $string2) { + $result = ''; $size = strlen($string); - for ($i=0; $i<$size; $i++) $result .= chr(ord($string[$i]) ^ ord($string2[$i])); - + for ($i=0; $i<$size; $i++) { + $result .= chr(ord($string[$i]) ^ ord($string2[$i])); + } return $result; } -function iil_ReadLine($fp, $size){ - $line=""; - if ($fp){ - do{ +function iil_ReadLine($fp, $size) { + $line = ''; + if ($fp) { + do { + // FIXME: hardcode size? $buffer = fgets($fp, 2048); - if ($buffer === false) + if ($buffer === false) { break; - $line.=$buffer; - }while($buffer[strlen($buffer)-1]!="\n"); + } + $line .= $buffer; + } while ($buffer[strlen($buffer)-1]!="\n"); } return $line; } -function iil_MultLine($fp, $line){ +function iil_MultLine($fp, $line) { $line = chop($line); - if (ereg('\{[0-9]+\}$', $line)){ - $out = ""; + if (ereg('\{[0-9]+\}$', $line)) { + $out = ''; + preg_match_all('/(.*)\{([0-9]+)\}$/', $line, $a); $bytes = $a[2][0]; - while(strlen($out)<$bytes){ - $out.=chop(iil_ReadLine($fp, 1024)); + while (strlen($out) < $bytes) { + $line = iil_ReadLine($fp, 1024); + $out .= chop($line); } - $line = $a[1][0]."\"$out\""; + $line = $a[1][0] . "\"$out\""; } return $line; } -function iil_ReadBytes($fp, $bytes){ - $data = ""; - $len = 0; - do{ +function iil_ReadBytes($fp, $bytes) { + $data = ''; + $len = 0; + do { $data.=fread($fp, $bytes-$len); $len = strlen($data); - }while($len<$bytes); + } while ($len<$bytes); return $data; } -function iil_ReadReply($fp){ - do{ +function iil_ReadReply($fp) { + do { $line = chop(trim(iil_ReadLine($fp, 1024))); - }while($line[0]=="*"); + } while ($line[0] == '*'); return $line; } -function iil_ParseResult($string){ - $a=explode(" ", $string); - if (count($a) > 2){ - if (strcasecmp($a[1], "OK")==0) return 0; - else if (strcasecmp($a[1], "NO")==0) return -1; - else if (strcasecmp($a[1], "BAD")==0) return -2; - }else return -3; +function iil_ParseResult($string) { + $a=explode(' ', $string); + if (count($a) > 2) { + if (strcasecmp($a[1], 'OK') == 0) { + return 0; + } else if (strcasecmp($a[1], 'NO') == 0) { + return -1; + } else if (strcasecmp($a[1], 'BAD') == 0) { + return -2; + } + } + return -3; } // check if $string starts with $match -function iil_StartsWith($string, $match){ +function iil_StartsWith($string, $match) { $len = strlen($match); - if ($len==0) return false; - if (strncmp($string, $match, $len)==0) return true; - else return false; + if ($len == 0) { + return false; + } + if (strncmp($string, $match, $len) == 0) { + return true; + } + return false; } -function iil_StartsWithI($string, $match){ +function iil_StartsWithI($string, $match) { $len = strlen($match); - if ($len==0) return false; - if (strncasecmp($string, $match, $len)==0) return true; - else return false; + if ($len == 0) { + return false; + } + if (strncasecmp($string, $match, $len) == 0) { + return true; + } + return false; } -function iil_C_Authenticate(&$conn, $user, $pass, $encChallenge){ +function iil_C_Authenticate(&$conn, $user, $pass, $encChallenge) { + + $ipad = ''; + $opad = ''; // initialize ipad, opad - for ($i=0;$i<64;$i++){ - $ipad.=chr(0x36); - $opad.=chr(0x5C); + for ($i=0;$i<64;$i++) { + $ipad .= chr(0x36); + $opad .= chr(0x5C); } // pad $pass so it's 64 bytes $padLen = 64 - strlen($pass); - for ($i=0;$i<$padLen;$i++) $pass .= chr(0); + for ($i=0;$i<$padLen;$i++) { + $pass .= chr(0); + } + // generate hash - $hash = md5(iil_xor($pass,$opad).pack("H*",md5(iil_xor($pass, $ipad).base64_decode($encChallenge)))); + $hash = iil_xor($pass,$opad); + $hash .= pack("H*", md5(iil_xor($pass, $ipad) . base64_decode($encChallenge))); + $hash = md5($hash); + // generate reply - $reply = base64_encode($user." ".$hash); + $reply = base64_encode('"' . $user . '" "' . $hash . '"'); // send result, get reply - fputs($conn->fp, $reply."\r\n"); + fputs($conn->fp, $reply . "\r\n"); $line = iil_ReadLine($conn->fp, 1024); // process result - if (iil_ParseResult($line)==0){ - $conn->error .= ""; - $conn->errorNum = 0; + if (iil_ParseResult($line) == 0) { + $conn->error .= ''; + $conn->errorNum = 0; return $conn->fp; - }else{ - $conn->error .= 'Authentication for '.$user.' failed (AUTH): "'.htmlspecialchars($line)."\""; - $conn->errorNum = -2; - return false; } + $conn->error .= 'Authentication for ' . $user . ' failed (AUTH): "'; + $conn->error .= htmlspecialchars($line) . '"'; + $conn->errorNum = -2; + return false; } -function iil_C_Login(&$conn, $user, $password){ +function iil_C_Login(&$conn, $user, $password) { $password = strtr($password, array('"'=>'\\"', '\\' => '\\\\')); fputs($conn->fp, "a001 LOGIN $user \"$password\"\r\n"); - do{ - $line = iil_ReadReply($conn->fp); - if ($line === false) - break; - }while(!iil_StartsWith($line, "a001 ")); - $a=explode(" ", $line); - if (strcmp($a[1],"OK")==0){ - $result=$conn->fp; - $conn->error.=""; - $conn->errorNum = 0; - }else{ - $result=false; - fclose($conn->fp); - $conn->error .= 'Authentication for '.$user.' failed (LOGIN): "'.htmlspecialchars($line)."\""; - $conn->errorNum = -2; + do { + $line = iil_ReadReply($conn->fp); + if ($line === false) { + break; + } + } while (!iil_StartsWith($line, "a001 ")); + $a = explode(' ', $line); + if (strcmp($a[1], 'OK') == 0) { + $result = $conn->fp; + $conn->error .= ''; + $conn->errorNum = 0; + return $result; } + $result = false; + fclose($conn->fp); + + $conn->error .= 'Authentication for ' . $user . ' failed (LOGIN): "'; + $conn->error .= htmlspecialchars($line)."\""; + $conn->errorNum = -2; + return $result; } -function iil_ParseNamespace2($str, &$i, $len=0, $l){ - if (!$l) $str = str_replace("NIL", "()", $str); - if (!$len) $len = strlen($str); - $data = array(); +function iil_ParseNamespace2($str, &$i, $len=0, $l) { + if (!$l) { + $str = str_replace('NIL', '()', $str); + } + if (!$len) { + $len = strlen($str); + } + $data = array(); $in_quotes = false; - $elem = 0; - for($i;$i<$len;$i++){ + $elem = 0; + for ($i;$i<$len;$i++) { $c = (string)$str[$i]; - if ($c=='(' && !$in_quotes){ + if ($c == '(' && !$in_quotes) { $i++; $data[$elem] = iil_ParseNamespace2($str, $i, $len, $l++); $elem++; - }else if ($c==')' && !$in_quotes) return $data; - else if ($c=="\\"){ + } else if ($c == ')' && !$in_quotes) { + return $data; + } else if ($c == '\\') { $i++; - if ($in_quotes) $data[$elem].=$c.$str[$i]; - }else if ($c=='"'){ + if ($in_quotes) { + $data[$elem] .= $c.$str[$i]; + } + } else if ($c == '"') { $in_quotes = !$in_quotes; - if (!$in_quotes) $elem++; - }else if ($in_quotes){ + if (!$in_quotes) { + $elem++; + } + } else if ($in_quotes) { $data[$elem].=$c; } } return $data; } -function iil_C_NameSpace(&$conn){ +function iil_C_NameSpace(&$conn) { global $my_prefs; - if (!in_array('NAMESPACE', $conn->capability)) - return false; - - if ($my_prefs["rootdir"]) return true; - + if (!in_array('NAMESPACE', $conn->capability)) { + return false; + } + + if ($my_prefs["rootdir"]) { + return true; + } + fputs($conn->fp, "ns1 NAMESPACE\r\n"); - do{ + do { $line = iil_ReadLine($conn->fp, 1024); - if (iil_StartsWith($line, "* NAMESPACE")){ - $i = 0; + if (iil_StartsWith($line, '* NAMESPACE')) { + $i = 0; $data = iil_ParseNamespace2(substr($line,11), $i, 0, 0); } - }while(!iil_StartsWith($line, "ns1")); - - if (!is_array($data)) return false; + } while (!iil_StartsWith($line, "ns1")); + if (!is_array($data)) { + return false; + } + $user_space_data = $data[0]; - if (!is_array($user_space_data)) return false; - + if (!is_array($user_space_data)) { + return false; + } + $first_userspace = $user_space_data[0]; - if (count($first_userspace)!=2) return false; - - $conn->rootdir = $first_userspace[0]; - $conn->delimiter = $first_userspace[1]; + if (count($first_userspace)!=2) { + return false; + } + + $conn->rootdir = $first_userspace[0]; + $conn->delimiter = $first_userspace[1]; $my_prefs["rootdir"] = substr($conn->rootdir, 0, -1); return true; } -function iil_Connect($host, $user, $password){ +function iil_Connect($host, $user, $password) { global $iil_error, $iil_errornum; global $ICL_SSL, $ICL_PORT; global $IMAP_NO_CACHE; global $my_prefs, $IMAP_USE_INTERNAL_DATE; - $iil_error = ""; + $iil_error = ''; $iil_errornum = 0; //strip slashes @@ -324,97 +406,123 @@ function iil_Connect($host, $user, $password){ // $password = stripslashes($password); //set auth method - $auth_method = "plain"; - if (func_num_args() >= 4){ + $auth_method = 'plain'; + if (func_num_args() >= 4) { $auth_array = func_get_arg(3); - if (is_array($auth_array)) $auth_method = $auth_array["imap"]; - if (empty($auth_method)) $auth_method = "plain"; + if (is_array($auth_array)) { + $auth_method = $auth_array['imap']; + } + if (empty($auth_method)) { + $auth_method = "plain"; + } } $message = "INITIAL: $auth_method\n"; $result = false; //initialize connection - $conn = new iilConnection; - $conn->error=""; - $conn->errorNum=0; - $conn->selected=""; - $conn->user = $user; - $conn->host = $host; - $conn->cache = array(); - $conn->do_cache = (function_exists("cache_write")&&!$IMAP_NO_CACHE); + $conn = new iilConnection; + $conn->error = ''; + $conn->errorNum = 0; + $conn->selected = ''; + $conn->user = $user; + $conn->host = $host; + $conn->cache = array(); + $conn->do_cache = (function_exists("cache_write")&&!$IMAP_NO_CACHE); $conn->cache_dirty = array(); - if ($my_prefs['sort_field']=='INTERNALDATE') $IMAP_USE_INTERNAL_DATE = true; - else if ($my_prefs['sort_field']=='DATE') $IMAP_USE_INTERNAL_DATE = false; + if ($my_prefs['sort_field'] == 'INTERNALDATE') { + $IMAP_USE_INTERNAL_DATE = true; + } else if ($my_prefs['sort_field'] == 'DATE') { + $IMAP_USE_INTERNAL_DATE = false; + } //echo ''; //check input - if (empty($host)) $iil_error .= "Invalid host\n"; - if (empty($user)) $iil_error .= "Invalid user\n"; - if (empty($password)) $iil_error .= "Invalid password\n"; - if (!empty($iil_error)) return false; - if (!$ICL_PORT) $ICL_PORT = 143; - + if (empty($host)) { + $iil_error .= "Invalid host\n"; + } + if (empty($user)) { + $iil_error .= "Invalid user\n"; + } + if (empty($password)) { + $iil_error .= "Invalid password\n"; + } + if (!empty($iil_error)) { + return false; + } + if (!$ICL_PORT) { + $ICL_PORT = 143; + } + //check for SSL - if ($ICL_SSL){ - $host = "ssl://".$host; + if ($ICL_SSL) { + $host = $ICL_SSL . '://' . $host; } //open socket connection - $conn->fp = @fsockopen($host, $ICL_PORT, $errno, $errstr, 10); - if (!$conn->fp){ - $iil_error = "Could not connect to $host at port $ICL_PORT: $errstr"; + $conn->fp = fsockopen($host, $ICL_PORT, $errno, $errstr, 10); + if (!$conn->fp) { + $iil_error = "Could not connect to $host at port $ICL_PORT: $errstr"; $iil_errornum = -1; return false; } - $iil_error.="Socket connection established\r\n"; - $line=iil_ReadLine($conn->fp, 300); + $iil_error .= "Socket connection established\r\n"; + $line = iil_ReadLine($conn->fp, 300); - if (strcasecmp($auth_method, "check")==0){ + if (strcasecmp($auth_method, "check") == 0) { //check for supported auth methods //default to plain text auth - $auth_method = "plain"; + $auth_method = 'plain'; //check for CRAM-MD5 fputs($conn->fp, "cp01 CAPABILITY\r\n"); - do{ - $line = trim(chop(iil_ReadLine($conn->fp, 100))); - $conn->message.="$line\n"; - $a = explode(" ", $line); - if ($line[0]=="*"){ - while ( list($k, $w) = each($a) ){ - if ($w!='*' && $w!='CAPABILITY') + do { + $line = trim(chop(iil_ReadLine($conn->fp, 100))); + + $conn->message .= "$line\n"; + + $a = explode(' ', $line); + if ($line[0] == '*') { + while (list($k, $w) = each($a)) { + if ($w != '*' && $w != 'CAPABILITY') { $conn->capability[] = $w; - if ((strcasecmp($w, "AUTH=CRAM_MD5")==0)|| - (strcasecmp($w, "AUTH=CRAM-MD5")==0)){ - $auth_method = "auth"; - } + } + if ((strcasecmp($w, "AUTH=CRAM_MD5") == 0)|| + (strcasecmp($w, "AUTH=CRAM-MD5") == 0)) { + $auth_method = "auth"; + } } } - }while($a[0]!="cp01"); + } while ($a[0] != 'cp01'); } - if (strcasecmp($auth_method, "auth")==0){ - $conn->message.="Trying CRAM-MD5\n"; + if (strcasecmp($auth_method, 'auth') == 0) { + $conn->message .= "Trying CRAM-MD5\n"; + //do CRAM-MD5 authentication fputs($conn->fp, "a000 AUTHENTICATE CRAM-MD5\r\n"); $line = trim(chop(iil_ReadLine($conn->fp, 1024))); - $conn->message.="$line\n"; - if ($line[0]=="+"){ - $conn->message.='Got challenge: '.htmlspecialchars($line)."\n"; + + $conn->message .= "$line\n"; + + if ($line[0] == '+') { + $conn->message .= 'Got challenge: ' . htmlspecialchars($line) . "\n"; + //got a challenge string, try CRAM-5 $result = iil_C_Authenticate($conn, $user, $password, substr($line,2)); - $conn->message.= "Tried CRAM-MD5: $result \n"; - }else{ - $conn->message.='No challenge ('.htmlspecialchars($line)."), try plain\n"; - $auth = "plain"; + + $conn->message .= "Tried CRAM-MD5: $result \n"; + } else { + $conn->message .='No challenge ('.htmlspecialchars($line)."), try plain\n"; + + $auth = 'plain'; } } - if ((!$result)||(strcasecmp($auth, "plain")==0)){ + if ((!$result)||(strcasecmp($auth, "plain") == 0)) { //do plain text auth $result = iil_C_Login($conn, $user, $password); $conn->message.="Tried PLAIN: $result \n"; @@ -422,36 +530,36 @@ function iil_Connect($host, $user, $password){ $conn->message .= $auth; - if ($result){ + if ($result) { iil_C_Namespace($conn); return $conn; - }else{ + } else { $iil_error = $conn->error; $iil_errornum = $conn->errorNum; return false; } } -function iil_Close(&$conn){ +function iil_Close(&$conn) { iil_C_WriteCache($conn); - if (@fputs($conn->fp, "I LOGOUT\r\n")){ + if (fputs($conn->fp, "I LOGOUT\r\n")) { fgets($conn->fp, 1024); fclose($conn->fp); $conn->fp = false; } } -function iil_ClearCache($user, $host){ +function iil_ClearCache($user, $host) { } -function iil_C_WriteCache(&$conn){ +function iil_C_WriteCache(&$conn) { //echo "\n"; if (!$conn->do_cache) return false; - if (is_array($conn->cache)){ - while(list($folder,$data)=each($conn->cache)){ - if ($folder && is_array($data) && $conn->cache_dirty[$folder]){ + if (is_array($conn->cache)) { + while (list($folder,$data)=each($conn->cache)) { + if ($folder && is_array($data) && $conn->cache_dirty[$folder]) { $key = $folder.".imap"; $result = cache_write($conn->user, $conn->host, $key, $data, true); //echo "\n"; @@ -460,35 +568,43 @@ function iil_C_WriteCache(&$conn){ } } -function iil_C_EnableCache(&$conn){ +function iil_C_EnableCache(&$conn) { $conn->do_cache = true; } -function iil_C_DisableCache(&$conn){ +function iil_C_DisableCache(&$conn) { $conn->do_cache = false; } -function iil_C_LoadCache(&$conn, $folder){ - if (!$conn->do_cache) return false; - - $key = $folder.".imap"; - if (!is_array($conn->cache[$folder])){ - $conn->cache[$folder] = cache_read($conn->user, $conn->host, $key); +function iil_C_LoadCache(&$conn, $folder) { + if (!$conn->do_cache) { + return false; + } + + $key = $folder.'.imap'; + if (!is_array($conn->cache[$folder])) { + $conn->cache[$folder] = cache_read($conn->user, $conn->host, $key); $conn->cache_dirty[$folder] = false; } } -function iil_C_ExpireCachedItems(&$conn, $folder, $message_set){ +function iil_C_ExpireCachedItems(&$conn, $folder, $message_set) { - if (!$conn->do_cache) return; //caching disabled - if (!is_array($conn->cache[$folder])) return; //cache not initialized|empty - if (count($conn->cache[$folder])==0) return; //cache not initialized|empty - - $uids = iil_C_FetchHeaderIndex($conn, $folder, $message_set, "UID"); + if (!$conn->do_cache) { + return; //caching disabled + } + if (!is_array($conn->cache[$folder])) { + return; //cache not initialized|empty + } + if (count($conn->cache[$folder]) == 0) { + return; //cache not initialized|empty + } + + $uids = iil_C_FetchHeaderIndex($conn, $folder, $message_set, 'UID'); $num_removed = 0; - if (is_array($uids)){ + if (is_array($uids)) { //echo "\n"; - while(list($n,$uid)=each($uids)){ + while (list($n,$uid)=each($uids)) { unset($conn->cache[$folder][$uid]); //$conn->cache[$folder][$uid] = false; //$num_removed++; @@ -498,15 +614,15 @@ function iil_C_ExpireCachedItems(&$conn, $folder, $message_set){ //echo ''."\n"; - }else{ + } else { echo "\n"; } /* - if ($num_removed>0){ + if ($num_removed>0) { $new_cache; reset($conn->cache[$folder]); - while(list($uid,$item)=each($conn->cache[$folder])){ + while (list($uid,$item)=each($conn->cache[$folder])) { if ($item) $new_cache[$uid] = $conn->cache[$folder][$uid]; } $conn->cache[$folder] = $new_cache; @@ -514,125 +630,153 @@ function iil_C_ExpireCachedItems(&$conn, $folder, $message_set){ */ } -function iil_ExplodeQuotedString($delimiter, $string){ - $quotes=explode("\"", $string); - while ( list($key, $val) = each($quotes)) - if (($key % 2) == 1) +function iil_ExplodeQuotedString($delimiter, $string) { + $quotes=explode('"', $string); + while ( list($key, $val) = each($quotes)) { + if (($key % 2) == 1) { $quotes[$key] = str_replace($delimiter, "_!@!_", $quotes[$key]); - $string=implode("\"", $quotes); + } + } + $string=implode('"', $quotes); $result=explode($delimiter, $string); - while ( list($key, $val) = each($result) ) - $result[$key] = str_replace("_!@!_", $delimiter, $result[$key]); - + while ( list($key, $val) = each($result) ) { + $result[$key] = str_replace('_!@!_', $delimiter, $result[$key]); + } + return $result; } -function iil_CheckForRecent($host, $user, $password, $mailbox){ - if (empty($mailbox)) $mailbox="INBOX"; - - $conn=iil_Connect($host, $user, $password, "plain"); - $fp = $conn->fp; - if ($fp){ +function iil_CheckForRecent($host, $user, $password, $mailbox) { + if (empty($mailbox)) { + $mailbox = 'INBOX'; + } + + $conn = iil_Connect($host, $user, $password, 'plain'); + $fp = $conn->fp; + if ($fp) { fputs($fp, "a002 EXAMINE \"$mailbox\"\r\n"); - do{ + do { $line=chop(iil_ReadLine($fp, 300)); - $a=explode(" ", $line); - if (($a[0]=="*") && (strcasecmp($a[2], "RECENT")==0)) $result=(int)$a[1]; - }while (!iil_StartsWith($a[0],"a002")); + $a=explode(' ', $line); + if (($a[0] == '*') && (strcasecmp($a[2], 'RECENT') == 0)) { + $result = (int) $a[1]; + } + } while (!iil_StartsWith($a[0], 'a002')); fputs($fp, "a003 LOGOUT\r\n"); fclose($fp); - }else $result=-2; - + } else { + $result = -2; + } + return $result; } -function iil_C_Select(&$conn, $mailbox){ +function iil_C_Select(&$conn, $mailbox) { $fp = $conn->fp; - if (empty($mailbox)) return false; - if (strcmp($conn->selected, $mailbox)==0) return true; - + if (empty($mailbox)) { + return false; + } + if (strcmp($conn->selected, $mailbox) == 0) { + return true; + } + iil_C_LoadCache($conn, $mailbox); - if (fputs($fp, "sel1 SELECT \"$mailbox\"\r\n")){ - do{ + if (fputs($fp, "sel1 SELECT \"$mailbox\"\r\n")) { + do { $line=chop(iil_ReadLine($fp, 300)); - $a=explode(" ", $line); - if (count($a) == 3){ - if (strcasecmp($a[2], "EXISTS")==0) $conn->exists=(int)$a[1]; - if (strcasecmp($a[2], "RECENT")==0) $conn->recent=(int)$a[1]; + $a=explode(' ', $line); + if (count($a) == 3) { + if (strcasecmp($a[2], 'EXISTS') == 0) { + $conn->exists = (int) $a[1]; + } + if (strcasecmp($a[2], 'RECENT') == 0) { + $conn->recent = (int) $a[1]; + } } - }while (!iil_StartsWith($line, "sel1")); + } while (!iil_StartsWith($line, 'sel1')); - $a=explode(" ", $line); + $a=explode(' ', $line); - if (strcasecmp($a[1],"OK")==0){ + if (strcasecmp($a[1], 'OK') == 0) { $conn->selected = $mailbox; return true; - }else return false; - }else{ - return false; + } } + return false; } -function iil_C_CheckForRecent(&$conn, $mailbox){ - if (empty($mailbox)) $mailbox="INBOX"; - +function iil_C_CheckForRecent(&$conn, $mailbox) { + if (empty($mailbox)) { + $mailbox = 'INBOX'; + } + iil_C_Select($conn, $mailbox); - if ($conn->selected==$mailbox) return $conn->recent; - else return false; + if ($conn->selected == $mailbox) { + return $conn->recent; + } + return false; } -function iil_C_CountMessages(&$conn, $mailbox, $refresh=false){ - if ($refresh) $conn->selected=""; +function iil_C_CountMessages(&$conn, $mailbox, $refresh = false) { + if ($refresh) { + $conn->selected= ''; + } iil_C_Select($conn, $mailbox); - if ($conn->selected==$mailbox) return $conn->exists; - else return false; + if ($conn->selected == $mailbox) { + return $conn->exists; + } + return false; } -function iil_SplitHeaderLine($string){ - $pos=strpos($string, ":"); - if ($pos>0){ - $res[0]=substr($string, 0, $pos); - $res[1]=trim(substr($string, $pos+1)); +function iil_SplitHeaderLine($string) { + $pos=strpos($string, ':'); + if ($pos>0) { + $res[0] = substr($string, 0, $pos); + $res[1] = trim(substr($string, $pos+1)); return $res; - }else{ - return $string; } + return $string; } -function iil_StrToTime($str){ - global $IMAP_MONTHS,$IMAP_SERVER_TZ; +function iil_StrToTime($str) { + $IMAP_MONTHS = $GLOBALS['IMAP_MONTHS']; + $IMAP_SERVER_TZ = $GLOBALS['IMAP_SERVER_TR']; - if ($str) $time1 = strtotime($str); - if ($time1 && $time1!=-1) return $time1-$IMAP_SERVER_TZ; - + if ($str) { + $time1 = strtotime($str); + } + if ($time1 && $time1 != -1) { + return $time1-$IMAP_SERVER_TZ; + } //echo ''; //replace double spaces with single space $str = trim($str); - $str = str_replace(" ", " ", $str); + $str = str_replace(' ', ' ', $str); //strip off day of week - $pos=strpos($str, " "); - if (!is_numeric(substr($str, 0, $pos))) $str = substr($str, $pos+1); - + $pos = strpos($str, ' '); + if (!is_numeric(substr($str, 0, $pos))) { + $str = substr($str, $pos+1); + } //explode, take good parts - $a=explode(" ",$str); - //$month_a=array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12); - $month_str=$a[1]; - $month=$IMAP_MONTHS[$month_str]; - $day=(int)$a[0]; - $year=(int)$a[2]; - $time=$a[3]; - $tz_str = $a[4]; - $tz = substr($tz_str, 0, 3); - $ta = explode(":",$time); - $hour=(int)$ta[0]-(int)$tz; - $minute=(int)$ta[1]; - $second=(int)$ta[2]; + $a = explode(' ', $str); + + $month_str = $a[1]; + $month = $IMAP_MONTHS[$month_str]; + $day = (int)$a[0]; + $year = (int)$a[2]; + $time = $a[3]; + $tz_str = $a[4]; + $tz = substr($tz_str, 0, 3); + $ta = explode(':', $time); + $hour = (int)$ta[0]-(int)$tz; + $minute = (int)$ta[1]; + $second = (int)$ta[2]; //make UNIX timestamp $time2 = mktime($hour, $minute, $second, $month, $day, $year); @@ -640,33 +784,45 @@ function iil_StrToTime($str){ return $time2; } -function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE, $encoding='US-ASCII'){ +function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE, + $encoding = 'US-ASCII') { /* Do "SELECT" command */ - if (!iil_C_Select($conn, $mailbox)) return false; - + if (!iil_C_Select($conn, $mailbox)) { + return false; + } $field = strtoupper($field); - if ($field=='INTERNALDATE') $field='ARRIVAL'; - $fields = array('ARRIVAL'=>1,'CC'=>1,'DATE'=>1,'FROM'=>1,'SIZE'=>1,'SUBJECT'=>1,'TO'=>1); - - if (!$fields[$field]) - return false; + if ($field == 'INTERNALDATE') { + $field = 'ARRIVAL'; + } + $fields = array('ARRIVAL' => 1,'CC' => 1,'DATE' => 1, + 'FROM' => 1, 'SIZE' => 1, 'SUBJECT' => 1, 'TO' => 1); + if (!$fields[$field]) { + return false; + } + $is_uid = $is_uid ? 'UID ' : ''; - if (!empty($add)) - $add = " $add"; + if (!empty($add)) { + $add = " $add"; + } - $fp = $conn->fp; - $command = 's '. $is_uid .'SORT ('.$field.') '.$encoding.' ALL'."$add\r\n"; - $line = $data = ''; + $fp = $conn->fp; + $command = 's ' . $is_uid . 'SORT (' . $field . ') '; + $command .= $encoding . ' ALL' . "$add\r\n"; + $line = $data = ''; - if (!fputs($fp, $command)) return false; - do{ + if (!fputs($fp, $command)) { + return false; + } + do { $line = chop(iil_ReadLine($fp, 1024)); - if (iil_StartsWith($line, '* SORT')) $data.=($data?' ':'').substr($line,7); - }while($line[0]!='s'); + if (iil_StartsWith($line, '* SORT')) { + $data .= ($data?' ':'') . substr($line, 7); + } + } while ($line[0]!='s'); - if (empty($data)){ + if (empty($data)) { $conn->error = $line; return false; } @@ -675,67 +831,81 @@ function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE, $encoding= return $out; } -function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field, $normalize=true){ +function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field, + $normalize=true) { global $IMAP_USE_INTERNAL_DATE; $c=0; $result=array(); $fp = $conn->fp; - if (empty($index_field)) $index_field="DATE"; + if (empty($index_field)) { + $index_field = 'DATE'; + } $index_field = strtoupper($index_field); list($from_idx, $to_idx) = explode(':', $message_set); - if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx)) + if (empty($message_set) || (isset($to_idx) + && (int)$from_idx > (int)$to_idx)) { return false; + } - //$fields_a["DATE"] = ($IMAP_USE_INTERNAL_DATE?6:1); - $fields_a['DATE'] = 1; + //$fields_a['DATE'] = ($IMAP_USE_INTERNAL_DATE?6:1); + $fields_a['DATE'] = 1; $fields_a['INTERNALDATE'] = 6; - $fields_a['FROM'] = 1; - $fields_a['REPLY-TO'] = 1; - $fields_a['SENDER'] = 1; - $fields_a['TO'] = 1; - $fields_a['SUBJECT'] = 1; - $fields_a['UID'] = 2; - $fields_a['SIZE'] = 2; - $fields_a['SEEN'] = 3; - $fields_a['RECENT'] = 4; - $fields_a['DELETED'] = 5; + $fields_a['FROM'] = 1; + $fields_a['REPLY-TO'] = 1; + $fields_a['SENDER'] = 1; + $fields_a['TO'] = 1; + $fields_a['SUBJECT'] = 1; + $fields_a['UID'] = 2; + $fields_a['SIZE'] = 2; + $fields_a['SEEN'] = 3; + $fields_a['RECENT'] = 4; + $fields_a['DELETED'] = 5; $mode=$fields_a[$index_field]; - if (!($mode > 0)) return false; - + if (!($mode > 0)) { + return false; + } + /* Do "SELECT" command */ - if (!iil_C_Select($conn, $mailbox)) return false; - + if (!iil_C_Select($conn, $mailbox)) { + return false; + } + /* FETCH date,from,subject headers */ - if ($mode==1){ - $key="fhi".($c++); - $request=$key." FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)])\r\n"; - if (!fputs($fp, $request)) return false; - do{ + if ($mode == 1) { + $key = 'fhi' . ($c++); + $request = $key . " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)])\r\n"; + if (!fputs($fp, $request)) { + return false; + } + do { $line=chop(iil_ReadLine($fp, 200)); - $a=explode(" ", $line); - if (($line[0]=="*") && ($a[2]=="FETCH") && ($line[strlen($line)-1]!=")")){ + $a=explode(' ', $line); + if (($line[0] == '*') && ($a[2] == 'FETCH') + && ($line[strlen($line)-1] != ')')) { $id=$a[1]; $str=$line=chop(iil_ReadLine($fp, 300)); - while($line[0]!=")"){ //caution, this line works only in this particular case + while ($line[0] != ')') { //caution, this line works only in this particular case $line=chop(iil_ReadLine($fp, 300)); - if ($line[0]!=")"){ - if (ord($line[0]) <= 32){ //continuation from previous header line - $str.=" ".trim($line); + if ($line[0] != ')') { + if (ord($line[0]) <= 32) { //continuation from previous header line + $str.= ' ' . trim($line); } - if ((ord($line[0]) > 32) || (strlen($line[0]) == 0)){ + if ((ord($line[0]) > 32) || (strlen($line[0]) == 0)) { list($field, $string) = iil_SplitHeaderLine($str); - if (strcasecmp($field, "date")==0){ - $result[$id]=iil_StrToTime($string); - }else{ - $result[$id] = str_replace("\"", "", $string); - if ($normalize) $result[$id]=strtoupper($result[$id]); + if (strcasecmp($field, 'date') == 0) { + $result[$id] = iil_StrToTime($string); + } else { + $result[$id] = str_replace('"', '', $string); + if ($normalize) { + $result[$id] = strtoupper($result[$id]); + } } $str=$line; } @@ -744,277 +914,349 @@ function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field, $n } /* $end_pos = strlen($line)-1; - if (($line[0]=="*") && ($a[2]=="FETCH") && ($line[$end_pos]=="}")){ + if (($line[0]=="*") && ($a[2]=="FETCH") && ($line[$end_pos]=="}")) { $id = $a[1]; $pos = strrpos($line, "{")+1; $bytes = (int)substr($line, $pos, $end_pos-$pos); $received = 0; - do{ - $line = iil_ReadLine($fp, 0); - $received+=strlen($line); - $line = chop($line); - - if ($received>$bytes) break; - else if (!$line) continue; + do { + $line = iil_ReadLine($fp, 0); + $received += strlen($line); + $line = chop($line); - list($field,$string)=explode(": ", $line); + if ($received>$bytes) { + break; + } else if (!$line) { + continue; + } + + list($field, $string) = explode(': ', $line); - if (strcasecmp($field, "date")==0) + if (strcasecmp($field, 'date') == 0) { $result[$id] = iil_StrToTime($string); - else if ($index_field!="DATE") - $result[$id]=strtoupper(str_replace("\"", "", $string)); - }while($line[0]!=")"); - }else{ + } else if ($index_field != 'DATE') { + $result[$id]=strtoupper(str_replace('"', '', $string)); + } + } while ($line[0] != ')'); + } else { //one line response, not expected so ignore } */ - }while(!iil_StartsWith($line, $key)); - }else if ($mode==6){ - $key="fhi".($c++); - $request = $key." FETCH $message_set (INTERNALDATE)\r\n"; - if (!fputs($fp, $request)) return false; - do{ + } while (!iil_StartsWith($line, $key)); + + }else if ($mode == 6) { + + $key = 'fhi' . ($c++); + $request = $key . " FETCH $message_set (INTERNALDATE)\r\n"; + if (!fputs($fp, $request)) { + return false; + } + do { $line=chop(iil_ReadLine($fp, 200)); - if ($line[0]=="*"){ - //original: "* 10 FETCH (INTERNALDATE "31-Jul-2002 09:18:02 -0500")" - $paren_pos = strpos($line, "("); - $foo = substr($line, 0, $paren_pos); - $a = explode(" ", $foo); - $id = $a[1]; + if ($line[0] == '*') { + /* + * original: + * "* 10 FETCH (INTERNALDATE "31-Jul-2002 09:18:02 -0500")" + */ + $paren_pos = strpos($line, '('); + $foo = substr($line, 0, $paren_pos); + $a = explode(' ', $foo); + $id = $a[1]; - $open_pos = strpos($line, "\"") + 1; - $close_pos = strrpos($line, "\""); - if ($open_pos && $close_pos){ - $len = $close_pos - $open_pos; - $time_str = substr($line, $open_pos, $len); + $open_pos = strpos($line, '"') + 1; + $close_pos = strrpos($line, '"'); + if ($open_pos && $close_pos) { + $len = $close_pos - $open_pos; + $time_str = substr($line, $open_pos, $len); $result[$id] = strtotime($time_str); } - }else{ - $a = explode(" ", $line); + } else { + $a = explode(' ', $line); } - }while(!iil_StartsWith($a[0], $key)); - }else{ - if ($mode >= 3) $field_name="FLAGS"; - else if ($index_field=="SIZE") $field_name="RFC822.SIZE"; - else $field_name=$index_field; - + } while (!iil_StartsWith($a[0], $key)); + } else { + if ($mode >= 3) { + $field_name = 'FLAGS'; + } else if ($index_field == 'SIZE') { + $field_name = 'RFC822.SIZE'; + } else { + $field_name = $index_field; + } + /* FETCH uid, size, flags */ - $key="fhi".($c++); - $request=$key." FETCH $message_set ($field_name)\r\n"; + $key = 'fhi' .($c++); + $request = $key . " FETCH $message_set ($field_name)\r\n"; - if (!fputs($fp, $request)) return false; - do{ + if (!fputs($fp, $request)) { + return false; + } + do { $line=chop(iil_ReadLine($fp, 200)); - $a = explode(" ", $line); - if (($line[0]=="*") && ($a[2]=="FETCH")){ - $line=str_replace("(", "", $line); - $line=str_replace(")", "", $line); - $a=explode(" ", $line); + $a = explode(' ', $line); + if (($line[0] == '*') && ($a[2] == 'FETCH')) { + $line = str_replace('(', '', $line); + $line = str_replace(')', '', $line); + $a = explode(' ', $line); - $id=$a[1]; + $id = $a[1]; - if (isset($result[$id])) continue; //if we already got the data, skip forward - if ($a[3]!=$field_name) continue; //make sure it's returning what we requested - + if (isset($result[$id])) { + continue; //if we already got the data, skip forward + } + if ($a[3]!=$field_name) { + continue; //make sure it's returning what we requested + } + /* Caution, bad assumptions, next several lines */ - if ($mode==2) $result[$id]=$a[4]; - else{ - $haystack=strtoupper($line); - $result[$id]=(strpos($haystack, $index_field) > 0 ? "F" : "N"); + if ($mode == 2) { + $result[$id] = $a[4]; + } else { + $haystack = strtoupper($line); + $result[$id] = (strpos($haystack, $index_field) > 0 ? "F" : "N"); } } - }while(!iil_StartsWith($line, $key)); + } while (!iil_StartsWith($line, $key)); } //check number of elements... - list($start_mid,$end_mid)=explode(':',$message_set); - if (is_numeric($start_mid) && is_numeric($end_mid)){ + list($start_mid, $end_mid) = explode(':', $message_set); + if (is_numeric($start_mid) && is_numeric($end_mid)) { //count how many we should have $should_have = $end_mid - $start_mid +1; //if we have less, try and fill in the "gaps" - if (count($result)<$should_have){ - for($i=$start_mid;$i<=$end_mid;$i++) if (!isset($result[$i])) $result[$i] = ''; + if (count($result) < $should_have) { + for ($i=$start_mid; $i<=$end_mid; $i++) { + if (!isset($result[$i])) { + $result[$i] = ''; + } + } } } - return $result; - } -function iil_CompressMessageSet($message_set){ +function iil_CompressMessageSet($message_set) { //given a comma delimited list of independent mid's, //compresses by grouping sequences together //if less than 255 bytes long, let's not bother - if (strlen($message_set)<255) return $message_set; - + if (strlen($message_set)<255) { + return $message_set; + } + //see if it's already been compress - if (strpos($message_set,':')!==false) return $message_set; - + if (strpos($message_set, ':') !== false) { + return $message_set; + } + //separate, then sort - $ids = explode(',',$message_set); + $ids = explode(',', $message_set); sort($ids); $result = array(); - $start = $prev = $ids[0]; - foreach($ids as $id){ + $start = $prev = $ids[0]; + + foreach ($ids as $id) { $incr = $id - $prev; - if ($incr>1){ //found a gap - if ($start==$prev) $result[] = $prev; //push single id - else $result[] = $start.':'.$prev; //push sequence as start_id:end_id - $start = $id; //start of new sequence + if ($incr > 1) { //found a gap + if ($start == $prev) { + $result[] = $prev; //push single id + } else { + $result[] = $start . ':' . $prev; //push sequence as start_id:end_id + } + $start = $id; //start of new sequence } $prev = $id; } //handle the last sequence/id - if ($start==$prev) $result[] = $prev; - else $result[] = $start.':'.$prev; - + if ($start==$prev) { + $result[] = $prev; + } else { + $result[] = $start.':'.$prev; + } + //return as comma separated string - return implode(',',$result); + return implode(',', $result); } -function iil_C_UIDsToMIDs(&$conn, $mailbox, $uids){ - if (!is_array($uids) || count($uids)==0) return array(); - return iil_C_Search($conn, $mailbox, "UID ".implode(",", $uids)); +function iil_C_UIDsToMIDs(&$conn, $mailbox, $uids) { + if (!is_array($uids) || count($uids) == 0) { + return array(); + } + return iil_C_Search($conn, $mailbox, 'UID ' . implode(',', $uids)); } -function iil_C_UIDToMID(&$conn, $mailbox, $uid){ +function iil_C_UIDToMID(&$conn, $mailbox, $uid) { $result = iil_C_UIDsToMIDs($conn, $mailbox, array($uid)); - if (count($result)==1) return $result[0]; - else return false; + if (count($result) == 1) { + return $result[0]; + } + return false; } -function iil_C_FetchUIDs(&$conn,$mailbox){ +function iil_C_FetchUIDs(&$conn,$mailbox) { global $clock; $num = iil_C_CountMessages($conn, $mailbox); - if ($num==0) return array(); - $message_set = '1'.($num>1?':'.$num:''); + if ($num == 0) { + return array(); + } + $message_set = '1' . ($num>1?':' . $num:''); //if cache not enabled, just call iil_C_FetchHeaderIndex on 'UID' field if (!$conn->do_cache) return iil_C_FetchHeaderIndex($conn, $mailbox, $message_set, 'UID'); //otherwise, let's check cache first - $key = $mailbox.'.uids'; + $key = $mailbox.'.uids'; $cache_good = true; - if ($conn->uid_cache) $data = $conn->uid_cache; - else $data = cache_read($conn->user, $conn->host, $key); - + if ($conn->uid_cache) { + $data = $conn->uid_cache; + } else { + $data = cache_read($conn->user, $conn->host, $key); + } + //was anything cached at all? - if ($data===false) $cache_good = -1; - + if ($data === false) { + $cache_good = -1; + } + //make sure number of messages were the same - if ($cache_good>0 && $data['n']!=$num) $cache_good = -2; - + if ($cache_good > 0 && $data['n'] != $num) { + $cache_good = -2; + } + //if everything's okay so far... - if ($cache_good>0){ + if ($cache_good > 0) { //check UIDs of highest mid with current and cached - $temp = iil_C_Search($conn, $mailbox, 'UID '.$data['d'][$num]); - if (!$temp || !is_array($temp) || $temp[0]!=$num) $cache_good=-3; + $temp = iil_C_Search($conn, $mailbox, 'UID ' . $data['d'][$num]); + if (!$temp || !is_array($temp) || $temp[0] != $num) { + $cache_good = -3; + } } //if cached data's good, return it - if ($cache_good>0){ + if ($cache_good > 0) { return $data['d']; } //otherwise, we need to fetch it - $data = array('n'=>$num,'d'=>array()); + $data = array('n' => $num, 'd' => array()); $data['d'] = iil_C_FetchHeaderIndex($conn, $mailbox, $message_set, 'UID'); + cache_write($conn->user, $conn->host, $key, $data); $conn->uid_cache = $data; return $data['d']; } -function iil_SortThreadHeaders($headers, $index_a, $uids){ +function iil_SortThreadHeaders($headers, $index_a, $uids) { asort($index_a); $result = array(); - foreach($index_a as $mid=>$foobar){ + foreach ($index_a as $mid=>$foobar) { $uid = $uids[$mid]; $result[$uid] = $headers[$uid]; } return $result; } -function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set){ +function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set) { global $clock; global $index_a; list($from_idx, $to_idx) = explode(':', $message_set); - if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx)) + if (empty($message_set) || (isset($to_idx) + && (int)$from_idx > (int)$to_idx)) { return false; + } $result = array(); - $uids = iil_C_FetchUIDs($conn, $mailbox); - $debug = false; + $uids = iil_C_FetchUIDs($conn, $mailbox); + $debug = false; /* Get cached records where possible */ - if ($conn->do_cache){ + if ($conn->do_cache) { $cached = cache_read($conn->user, $conn->host, $mailbox.'.thhd'); - if ($cached && is_array($uids) && count($uids)>0){ - $needed_set = ""; - foreach($uids as $id=>$uid){ - if ($cached[$uid]){ - $result[$uid] = $cached[$uid]; + if ($cached && is_array($uids) && count($uids)>0) { + $needed_set = ''; + foreach ($uids as $id=>$uid) { + if ($cached[$uid]) { + $result[$uid] = $cached[$uid]; $result[$uid]->id = $id; - }else $needed_set.=($needed_set?",":"").$id; + } else { + $needed_set .= ($needed_set ? ',' : '') . $id; + } } - if ($needed_set) $message_set = $needed_set; - else $message_set = ''; + if ($needed_set) { + $message_set = $needed_set; + } else { + $message_set = ''; + } } } $message_set = iil_CompressMessageSet($message_set); - if ($debug) echo "Still need: ".$message_set; - + if ($debug) { + echo "Still need: ".$message_set; + } + /* if we're missing any, get them */ - if ($message_set){ + if ($message_set) { /* FETCH date,from,subject headers */ - $key="fh"; - $fp = $conn->fp; - $request=$key." FETCH $message_set (BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])\r\n"; - $mid_to_id = array(); - if (!fputs($fp, $request)) return false; - do{ + $key = 'fh'; + $fp = $conn->fp; + $request = $key . " FETCH $message_set "; + $request .= "(BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])\r\n"; + $mid_to_id = array(); + if (!fputs($fp, $request)) { + return false; + } + do { $line = chop(iil_ReadLine($fp, 1024)); - if ($debug) echo $line."\n"; - if (ereg('\{[0-9]+\}$', $line)){ - $a = explode(" ", $line); + if ($debug) { + echo $line . "\n"; + } + if (ereg('\{[0-9]+\}$', $line)) { + $a = explode(' ', $line); $new = array(); $new_thhd = new iilThreadHeader; $new_thhd->id = $a[1]; - do{ - $line=chop(iil_ReadLine($fp, 1024),"\r\n"); - if (iil_StartsWithI($line,'Message-ID:') || (iil_StartsWithI($line,'In-Reply-To:')) || (iil_StartsWithI($line,'SUBJECT:'))){ - $pos = strpos($line, ":"); + do { + $line = chop(iil_ReadLine($fp, 1024), "\r\n"); + if (iil_StartsWithI($line, 'Message-ID:') + || (iil_StartsWithI($line,'In-Reply-To:')) + || (iil_StartsWithI($line,'SUBJECT:'))) { + + $pos = strpos($line, ':'); $field_name = substr($line, 0, $pos); - $field_val = substr($line, $pos+1); + $field_val = substr($line, $pos+1); + $new[strtoupper($field_name)] = trim($field_val); - }else if (ereg('^[[:space:]]', $line)){ - $new[strtoupper($field_name)].= trim($line); + + } else if (ereg('^[[:space:]]', $line)) { + $new[strtoupper($field_name)] .= trim($line); } - }while($line[0]!=')'); + } while ($line[0] != ')'); + $new_thhd->sbj = $new['SUBJECT']; $new_thhd->mid = substr($new['MESSAGE-ID'], 1, -1); $new_thhd->irt = substr($new['IN-REPLY-TO'], 1, -1); $result[$uids[$new_thhd->id]] = $new_thhd; } - }while(!iil_StartsWith($line, "fh")); + } while (!iil_StartsWith($line, 'fh')); } /* sort headers */ - if (is_array($index_a)){ + if (is_array($index_a)) { $result = iil_SortThreadHeaders($result, $index_a, $uids); } /* write new set to cache */ - if ($conn->do_cache){ - if (count($result)!=count($cached)) - cache_write($conn->user, $conn->host, $mailbox.'.thhd', $result); + if ($conn->do_cache) { + if (count($result)!=count($cached)) { + cache_write($conn->user, $conn->host, $mailbox . '.thhd', $result); + } } //echo 'iil_FetchThreadHeaders:'."\n"; @@ -1023,129 +1265,165 @@ function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set){ return $result; } -function iil_C_BuildThreads2(&$conn, $mailbox, $message_set, &$clock){ +function iil_C_BuildThreads2(&$conn, $mailbox, $message_set, &$clock) { global $index_a; list($from_idx, $to_idx) = explode(':', $message_set); - if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx)) + if (empty($message_set) || (isset($to_idx) + && (int)$from_idx > (int)$to_idx)) { return false; - - $result=array(); - $roots=array(); + } + + $result = array(); + $roots = array(); $root_mids = array(); - $sub_mids = array(); - $strays = array(); - $messages = array(); - $fp = $conn->fp; - $debug = false; + $sub_mids = array(); + $strays = array(); + $messages = array(); + $fp = $conn->fp; + $debug = false; $sbj_filter_pat = '[a-zA-Z]{2,3}(\[[0-9]*\])?:([[:space:]]*)'; /* Do "SELECT" command */ - if (!iil_C_Select($conn, $mailbox)) return false; - + if (!iil_C_Select($conn, $mailbox)) { + return false; + } + /* FETCH date,from,subject headers */ $mid_to_id = array(); - $messages = array(); - $headers = iil_C_FetchThreadHeaders($conn, $mailbox, $message_set); - if ($clock) $clock->register('fetched headers'); - - if ($debug) print_r($headers); - + $messages = array(); + $headers = iil_C_FetchThreadHeaders($conn, $mailbox, $message_set); + if ($clock) { + $clock->register('fetched headers'); + } + + if ($debug) { + print_r($headers); + } + /* go through header records */ - foreach($headers as $header){ + foreach ($headers as $header) { //$id = $header['i']; //$new = array('id'=>$id, 'MESSAGE-ID'=>$header['m'], // 'IN-REPLY-TO'=>$header['r'], 'SUBJECT'=>$header['s']); - $id = $header->id; - $new = array('id'=>$id, 'MESSAGE-ID'=>$header->mid, - 'IN-REPLY-TO'=>$header->irt, 'SUBJECT'=>$header->sbj); + $id = $header->id; + $new = array('id' => $id, 'MESSAGE-ID' => $header->mid, + 'IN-REPLY-TO' => $header->irt, 'SUBJECT' => $header->sbj); /* add to message-id -> mid lookup table */ $mid_to_id[$new['MESSAGE-ID']] = $id; /* if no subject, use message-id */ - if (empty($new['SUBJECT'])) $new['SUBJECT'] = $new['MESSAGE-ID']; - + if (empty($new['SUBJECT'])) { + $new['SUBJECT'] = $new['MESSAGE-ID']; + } + /* if subject contains 'RE:' or has in-reply-to header, it's a reply */ $sbj_pre =''; $has_re = false; - if (eregi($sbj_filter_pat, $new['SUBJECT'])) $has_re = true; - if ($has_re||$new['IN-REPLY-TO']) $sbj_pre = 'RE:'; - + if (eregi($sbj_filter_pat, $new['SUBJECT'])) { + $has_re = true; + } + if ($has_re||$new['IN-REPLY-TO']) { + $sbj_pre = 'RE:'; + } + /* strip out 're:', 'fw:' etc */ - if ($has_re) $sbj = ereg_replace($sbj_filter_pat,'', $new['SUBJECT']); - else $sbj = $new['SUBJECT']; - $new['SUBJECT'] = $sbj_pre.$sbj; + if ($has_re) { + $sbj = ereg_replace($sbj_filter_pat, '', $new['SUBJECT']); + } else { + $sbj = $new['SUBJECT']; + } + $new['SUBJECT'] = $sbj_pre.$sbj; /* if subject not a known thread-root, add to list */ - if ($debug) echo $id.' '.$new['SUBJECT']."\t".$new['MESSAGE-ID']."\n"; - $root_id = $roots[$sbj]; + if ($debug) { + echo $id . ' ' . $new['SUBJECT'] . "\t" . $new['MESSAGE-ID'] . "\n"; + } + $root_id = $roots[$sbj]; - if ($root_id && ($has_re || !$root_in_root[$root_id])){ - if ($debug) echo "\tfound root: $root_id\n"; - $sub_mids[$new['MESSAGE-ID']] = $root_id; - $result[$root_id][] = $id; - }else if (!isset($roots[$sbj])||(!$has_re&&$root_in_root[$root_id])){ + if ($root_id && ($has_re || !$root_in_root[$root_id])) { + if ($debug) { + echo "\tfound root: $root_id\n"; + } + $sub_mids[$new['MESSAGE-ID']] = $root_id; + $result[$root_id][] = $id; + }else if (!isset($roots[$sbj]) || (!$has_re && $root_in_root[$root_id])) { /* try to use In-Reply-To header to find root unless subject contains 'Re:' */ - if ($has_re&&$new['IN-REPLY-TO']){ - if ($debug) echo "\tlooking: ".$new['IN-REPLY-TO']."\n"; - + if ($has_re&&$new['IN-REPLY-TO']) { + if ($debug) { + echo "\tlooking: ".$new['IN-REPLY-TO']."\n"; + } //reply to known message? $temp = $sub_mids[$new['IN-REPLY-TO']]; - if ($temp){ + if ($temp) { //found it, root:=parent's root - if ($debug) echo "\tfound parent: ".$new['SUBJECT']."\n"; - $result[$temp][] = $id; + if ($debug) { + echo "\tfound parent: ".$new['SUBJECT']."\n"; + } + $result[$temp][] = $id; $sub_mids[$new['MESSAGE-ID']] = $temp; - $sbj = ''; - }else{ + $sbj = ''; + } else { //if we can't find referenced parent, it's a "stray" $strays[$id] = $new['IN-REPLY-TO']; } } //add subject as root - if ($sbj){ - if ($debug) echo "\t added to root\n"; - $roots[$sbj] = $id; - $root_in_root[$id] = !$has_re; + if ($sbj) { + if ($debug) { + echo "\t added to root\n"; + } + $roots[$sbj] = $id; + $root_in_root[$id] = !$has_re; $sub_mids[$new['MESSAGE-ID']] = $id; - $result[$id] = array($id); + $result[$id] = array($id); } - if ($debug) echo $new['MESSAGE-ID']."\t".$sbj."\n"; + if ($debug) { + echo $new['MESSAGE-ID'] . "\t" . $sbj . "\n"; + } } } //now that we've gone through all the messages, //go back and try and link up the stray threads - if (count($strays)>0){ - foreach($strays as $id=>$irt){ + if (count($strays) > 0) { + foreach ($strays as $id=>$irt) { $root_id = $sub_mids[$irt]; - if (!$root_id || $root_id==$id) continue; - $result[$root_id] = array_merge($result[$root_id],$result[$id]); + if (!$root_id || $root_id==$id) { + continue; + } + $result[$root_id] = array_merge($result[$root_id],$result[$id]); unset($result[$id]); } } - if ($clock) $clock->register('data prepped'); - - if ($debug) print_r($roots); - //print_r($result); + if ($clock) { + $clock->register('data prepped'); + } + + if ($debug) { + print_r($roots); + } + //print_r($result); return $result; } -function iil_SortThreads(&$tree, $index, $sort_order='ASC'){ - if (!is_array($tree) || !is_array($index)) return false; - +function iil_SortThreads(&$tree, $index, $sort_order = 'ASC') { + if (!is_array($tree) || !is_array($index)) { + return false; + } + //create an id to position lookup table $i = 0; - foreach($index as $id=>$val){ + foreach ($index as $id=>$val) { $i++; $index[$id] = $i; } @@ -1153,19 +1431,21 @@ function iil_SortThreads(&$tree, $index, $sort_order='ASC'){ //for each tree, set array key to position $itree = array(); - foreach($tree as $id=>$node){ - if (count($tree[$id])<=1){ + foreach ($tree as $id=>$node) { + if (count($tree[$id])<=1) { //for "threads" with only one message, key is position of that message - $n = $index[$id]; + $n = $index[$id]; $itree[$n] = array($n=>$id); - }else{ + } else { //for "threads" with multiple messages, - $min = $max; + $min = $max; $new_a = array(); - foreach($tree[$id] as $mid){ + foreach ($tree[$id] as $mid) { $new_a[$index[$mid]] = $mid; //create new sub-array mapping position to id - $pos = $index[$mid]; - if ($pos&&$pos<$min) $min = $index[$mid]; //find smallest position + $pos = $index[$mid]; + if ($pos&&$pos<$min) { + $min = $index[$mid]; //find smallest position + } } $n = $min; //smallest position of child is thread position @@ -1179,9 +1459,9 @@ function iil_SortThreads(&$tree, $index, $sort_order='ASC'){ //sort by key, this basically sorts all threads ksort($itree); - $i=0; - $out=array(); - foreach($itree as $k=>$node){ + $i = 0; + $out = array(); + foreach ($itree as $k=>$node) { $out[$i] = $itree[$k]; $i++; } @@ -1190,149 +1470,220 @@ function iil_SortThreads(&$tree, $index, $sort_order='ASC'){ return $out; } -function iil_IndexThreads(&$tree){ +function iil_IndexThreads(&$tree) { /* creates array mapping mid to thread id */ - if (!is_array($tree)) return false; - + if (!is_array($tree)) { + return false; + } + $t_index = array(); - foreach($tree as $pos=>$kids){ - foreach($kids as $kid) $t_index[$kid] = $pos; + foreach ($tree as $pos=>$kids) { + foreach ($kids as $kid) $t_index[$kid] = $pos; } return $t_index; } -function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false){ +function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false) +{ global $IMAP_USE_INTERNAL_DATE; - $c=0; - $result=array(); - $fp = $conn->fp; + $c = 0; + $result = array(); + $fp = $conn->fp; list($from_idx, $to_idx) = explode(':', $message_set); - if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx)) + if (empty($message_set) || (isset($to_idx) + && (int)$from_idx > (int)$to_idx)) { return false; + } /* Do "SELECT" command */ - if (!iil_C_Select($conn, $mailbox)){ + if (!iil_C_Select($conn, $mailbox)) { $conn->error = "Couldn't select $mailbox"; return false; } /* Get cached records where possible */ - if ($conn->do_cache){ + if ($conn->do_cache) { $uids = iil_C_FetchHeaderIndex($conn, $mailbox, $message_set, "UID"); - if (is_array($uids) && count($conn->cache[$mailbox]>0)){ - $needed_set = ""; - while(list($id,$uid)=each($uids)){ - if ($conn->cache[$mailbox][$uid]){ - $result[$id] = $conn->cache[$mailbox][$uid]; + if (is_array($uids) && count($conn->cache[$mailbox]>0)) { + $needed_set = ''; + while (list($id,$uid)=each($uids)) { + if ($conn->cache[$mailbox][$uid]) { + $result[$id] = $conn->cache[$mailbox][$uid]; $result[$id]->id = $id; - }else $needed_set.=($needed_set?",":"").$id; + } else { + $needed_set.=($needed_set ? ',': '') . $id; + } } //echo "\n"; - if ($needed_set) $message_set = iil_CompressMessageSet($needed_set); - else return $result; + if ($needed_set) { + $message_set = iil_CompressMessageSet($needed_set); + } else { + return $result; + } } } /* FETCH date,from,subject headers */ - $key="fh".($c++); - $prefix=$uidfetch?" UID":""; - $request=$key.$prefix." FETCH $message_set (BODY.PEEK[HEADER.FIELDS (DATE FROM TO SUBJECT REPLY-TO IN-REPLY-TO CC BCC CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID REFERENCE)])\r\n"; - - if (!fputs($fp, $request)) return false; - do{ - $line=chop(iil_ReadLine($fp, 200)); - $a=explode(" ", $line); - if (($line[0]=="*") && ($a[2]=="FETCH")){ - $id=$a[1]; - $result[$id]=new iilBasicHeader; - $result[$id]->id = $id; - $result[$id]->subject = ""; + $key = 'fh' . ($c++); + $prefix = $uidfetch?' UID':''; + $request = $key . $prefix; + $request .= " FETCH $message_set (BODY.PEEK[HEADER.FIELDS "; + $request .= "(DATE FROM TO SUBJECT REPLY-TO IN-REPLY-TO CC BCC "; + $request .= "CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID "; + $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY)])\r\n"; + + if (!fputs($fp, $request)) { + return false; + } + do { + $line = chop(iil_ReadLine($fp, 200)); + $a = explode(' ', $line); + if (($line[0] == '*') && ($a[2] == 'FETCH')) { + $id = $a[1]; + + $result[$id] = new iilBasicHeader; + $result[$id]->id = $id; + $result[$id]->subject = ''; + $result[$id]->messageID = 'mid:' . $id; + /* Start parsing headers. The problem is, some header "lines" take up multiple lines. So, we'll read ahead, and if the one we're reading now is a valid header, we'll process the previous line. Otherwise, we'll keep adding the strings until we come to the next valid header line. */ - $i = 0; + $i = 0; $lines = array(); - do{ - $line = chop(iil_ReadLine($fp, 300),"\r\n"); - if (ord($line[0])<=32) $lines[$i].=(empty($lines[$i])?"":"\n").trim(chop($line)); - else{ + do { + $line = chop(iil_ReadLine($fp, 300), "\r\n"); + if (ord($line[0])<=32) { + $lines[$i] .= (empty($lines[$i])?'':"\n").trim(chop($line)); + } else { $i++; $lines[$i] = trim(chop($line)); } - }while($line[0]!=")" && strncmp($line, $key, strlen($key))); // patch from "Maksim Rubis" - - if(strncmp($line, $key, strlen($key))) - { - //process header, fill iilBasicHeader obj. - // initialize - if (is_array($headers)){ - reset($headers); - while ( list($k, $bar) = each($headers) ) $headers[$k] = ""; - } - - // create array with header field:data - $headers = array(); - while ( list($lines_key, $str) = each($lines) ){ - list($field, $string) = iil_SplitHeaderLine($str); - $field = strtolower($field); - $headers[$field] = $string; - } - $result[$id]->date = $headers["date"]; - $result[$id]->timestamp = iil_StrToTime($headers["date"]); - $result[$id]->from = $headers["from"]; - $result[$id]->to = str_replace("\n", " ", $headers["to"]); - $result[$id]->subject = str_replace("\n", "", $headers["subject"]); - $result[$id]->replyto = str_replace("\n", " ", $headers["reply-to"]); - $result[$id]->cc = str_replace("\n", " ", $headers["cc"]); - $result[$id]->bcc = str_replace("\n", " ", $headers["bcc"]); - $result[$id]->encoding = str_replace("\n", " ", $headers["content-transfer-encoding"]); - $result[$id]->ctype = str_replace("\n", " ", $headers["content-type"]); - $result[$id]->in_reply_to = ereg_replace("[\n<>]",'', $headers['in-reply-to']); - $result[$id]->reference = $headers["reference"]; + /* + The preg_match below works around communigate imap, which outputs " UID )". + Without this, the while statement continues on and gets the "fh0 OK completed" message. + If this loop gets the ending message, then the outer loop does not receive it from radline on line 1249. + This in causes the if statement on line 1278 to never be true, which causes the headers to end up missing + If the if statement was changed to pick up the fh0 from this loop, then it causes the outer loop to spin + An alternative might be: + if (!preg_match("/:/",$line) && preg_match("/\)$/",$line)) break; + however, unsure how well this would work with all imap clients. + */ + if (preg_match("/^\s*UID [0-9]+\)$/", $line)) { + break; + } + // patch from "Maksim Rubis" + } while (trim($line[0]) != ')' && strncmp($line, $key, strlen($key))); - list($result[$id]->ctype, $ctype_add) = explode(";", $headers["content-type"]); - - if (preg_match('/charset="?([a-z0-9\-]+)"?/i', $ctype_add, $regs)) - $result[$id]->charset = $regs[1]; - - $messageID = $headers["message-id"]; - if (!$messageID) "mid:".$id; - $result[$id]->messageID = $messageID; + if (strncmp($line, $key, strlen($key))) { + //process header, fill iilBasicHeader obj. + // initialize + if (is_array($headers)) { + reset($headers); + while (list($k, $bar) = each($headers)) { + $headers[$k] = ''; + } + } + + // create array with header field:data + while ( list($lines_key, $str) = each($lines) ) { + list($field, $string) = iil_SplitHeaderLine($str); + + $field = strtolower($field); + + switch ($field) { + case 'date'; + $result[$id]->date = $string; + $result[$id]->timestamp = iil_StrToTime($string); + break; + case 'from': + $result[$id]->from = $string; + break; + case 'to': + $result[$id]->to = str_replace("\n", " ", $string); + break; + case 'subject': + $result[$id]->subject = str_replace("\n", '', $string); + break; + case 'reply-to': + $result[$id]->replyto = str_replace("\n", " ", $string); + break; + case 'cc': + $result[$id]->cc = str_replace("\n", " ", $string); + break; + case 'bcc': + $result[$id]->bcc = str_replace("\n", " ", $string); + break; + case 'content-transfer-encoding': + $result[$id]->encoding = str_replace("\n", " ", $string); + break; + case 'content-type': + $ctype_parts = explode(";", $string); + $result[$id]->ctype = array_shift($ctype_parts); + foreach ($ctype_parts as $ctype_add) { + if (preg_match('/charset="?([a-z0-9\-\.\_]+)"?/i', + $ctype_add, $regs)) { + $result[$id]->charset = $regs[1]; + } + } + break; + case 'in-reply-to': + $result[$id]->in_reply_to = ereg_replace("[\n<>]", '', $string); + break; + case 'references': + $result[$id]->references = $string; + break; + case 'return-receipt-to': + case 'disposition-notification-to': + case 'x-confirm-reading-to': + $result[$id]->mdn_to = str_replace("\n", " ", $string); + break; + case 'message-id': + $result[$id]->messageID = $string; + break; + case 'x-priority': + if (preg_match('/^(\d+)/', $string, $matches)) + $result[$id]->priority = intval($matches[1]); + break; + } // end switch () + } // end while () + } else { + $a = explode(' ', $line); } - else { - $a=explode(" ", $line); - } - } - }while(strcmp($a[0], $key)!=0); - + } while (strcmp($a[0], $key) != 0); + /* FETCH uid, size, flags Sample reply line: "* 3 FETCH (UID 2417 RFC822.SIZE 2730 FLAGS (\Seen \Deleted))" */ - $command_key="fh".($c++); - $request= $command_key.$prefix." FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)\r\n"; - if (!fputs($fp, $request)) return false; - do{ - $line=chop(iil_ReadLine($fp, 200)); - //$a = explode(" ", $line); - //if (($line[0]=="*") && ($a[2]=="FETCH")){ - if ($line[0]=="*"){ + $command_key = 'fh' . ($c++); + $request = $command_key . $prefix; + $request .= " FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)\r\n"; + + if (!fputs($fp, $request)) { + return false; + } + do { + $line = chop(iil_ReadLine($fp, 200)); + //$a = explode(' ', $line); + //if (($line[0]=="*") && ($a[2]=="FETCH")) { + if ($line[0] == '*') { //echo "\n"; //get outter most parens $open_pos = strpos($line, "(") + 1; $close_pos = strrpos($line, ")"); - if ($open_pos && $close_pos){ + if ($open_pos && $close_pos) { //extract ID from pre-paren $pre_str = substr($line, 0, $open_pos); - $pre_a = explode(" ", $line); + $pre_a = explode(' ', $line); $id = $pre_a[1]; //get data @@ -1341,93 +1692,114 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false){ //swap parents with quotes, then explode $str = eregi_replace("[()]", "\"", $str); - $a = iil_ExplodeQuotedString(" ", $str); + $a = iil_ExplodeQuotedString(' ', $str); //did we get the right number of replies? $parts_count = count($a); - if ($parts_count>=8){ - for ($i=0;$i<$parts_count;$i=$i+2){ - if (strcasecmp($a[$i],"UID")==0) $result[$id]->uid=$a[$i+1]; - else if (strcasecmp($a[$i],"RFC822.SIZE")==0) $result[$id]->size=$a[$i+1]; - else if (strcasecmp($a[$i],"INTERNALDATE")==0) $time_str = $a[$i+1]; - else if (strcasecmp($a[$i],"FLAGS")==0) $flags_str = $a[$i+1]; + if ($parts_count>=8) { + for ($i=0;$i<$parts_count;$i=$i+2) { + if (strcasecmp($a[$i],"UID") == 0) $result[$id]->uid=$a[$i+1]; + else if (strcasecmp($a[$i],"RFC822.SIZE") == 0) $result[$id]->size=$a[$i+1]; + else if (strcasecmp($a[$i],"INTERNALDATE") == 0) $time_str = $a[$i+1]; + else if (strcasecmp($a[$i],"FLAGS") == 0) $flags_str = $a[$i+1]; } // process flags - $flags_str = eregi_replace('[\\\"]', "", $flags_str); - $flags_a = explode(" ", $flags_str); - //echo "\n"; + $flags_str = eregi_replace('[\\\"]', '', $flags_str); + $flags_a = explode(' ', $flags_str); + + /* + trigger_error("\n", + E_USER_WARNING); + */ - $result[$id]->seen = false; - $result[$id]->recent = false; - $result[$id]->deleted = false; - $result[$id]->answered = false; - if (is_array($flags_a)){ + if (is_array($flags_a)) { reset($flags_a); - while (list($key,$val)=each($flags_a)){ - if (strcasecmp($val,"Seen")==0) $result[$id]->seen = true; - else if (strcasecmp($val, "Deleted")==0) $result[$id]->deleted=true; - else if (strcasecmp($val, "Recent")==0) $result[$id]->recent = true; - else if (strcasecmp($val, "Answered")==0) $result[$id]->answered = true; + while (list($key,$val)=each($flags_a)) { + if (strcasecmp($val,'Seen') == 0) { + $result[$id]->seen = true; + } else if (strcasecmp($val, 'Deleted') == 0) { + $result[$id]->deleted=true; + } else if (strcasecmp($val, 'Recent') == 0) { + $result[$id]->recent = true; + } else if (strcasecmp($val, 'Answered') == 0) { + $result[$id]->answered = true; + } else if (strcasecmp($val, "\$MDNSent") == 0) { + $result[$id]->mdn_sent = true; + } } - $result[$id]->flags=$flags_str; + $result[$id]->flags = $flags_a; } // if time is gmt... $time_str = str_replace('GMT','+0000',$time_str); //get timezone - $time_str = substr($time_str, 0, -1); + $time_str = substr($time_str, 0, -1); $time_zone_str = substr($time_str, -5); //extract timezone - $time_str = substr($time_str, 1, -6); //remove quotes - $time_zone = (float)substr($time_zone_str, 1, 2); //get first two digits - if ($time_zone_str[3]!='0') $time_zone += 0.5; //handle half hour offset - if ($time_zone_str[0]=="-") $time_zone = $time_zone * -1.0; //minus? + $time_str = substr($time_str, 1, -6); //remove quotes + $time_zone = (float)substr($time_zone_str, 1, 2); //get first two digits + if ($time_zone_str[3] != '0') { + $time_zone += 0.5; //handle half hour offset + } + if ($time_zone_str[0] == '-') { + $time_zone = $time_zone * -1.0; //minus? + } $result[$id]->internaldate = $time_str; - if ($IMAP_USE_INTERNAL_DATE){ + if ($IMAP_USE_INTERNAL_DATE || empty($result[$id]->date)) { //calculate timestamp - $timestamp = strtotime($time_str); //return's server's time - $na_timestamp = $timestamp; - $timestamp -= $time_zone * 3600; //compensate for tz, get GMT + $timestamp = strtotime($time_str); //return's server's time + $na_timestamp = $timestamp; + $timestamp -= $time_zone * 3600; //compensate for tz, get GMT + $result[$id]->timestamp = $timestamp; + $result[$id]->date = $time_str; } - if ($conn->do_cache){ + if ($conn->do_cache) { $uid = $result[$id]->uid; $conn->cache[$mailbox][$uid] = $result[$id]; $conn->cache_dirty[$mailbox] = true; } //echo "\n"; - }else{ + } else { //echo "\n"; } } } - }while(strpos($line, $command_key)===false); + } while (strpos($line, $command_key) === false); return $result; } - -function iil_C_FetchHeader(&$conn, $mailbox, $id, $uidfetch=false){ +function iil_C_FetchHeader(&$conn, $mailbox, $id, $uidfetch=false) { $fp = $conn->fp; - $a=iil_C_FetchHeaders($conn, $mailbox, $id, $uidfetch); - if (is_array($a)) return array_shift($a); - else return false; + $a = iil_C_FetchHeaders($conn, $mailbox, $id, $uidfetch); + if (is_array($a)) { + return array_shift($a); + } + return false; } -function iil_SortHeaders($a, $field, $flag){ - if (empty($field)) $field="uid"; - $field=strtolower($field); - if ($field=="date"||$field=='internaldate') $field="timestamp"; - if (empty($flag)) $flag="ASC"; - $flag=strtoupper($flag); - $stripArr = ($field=='subject') ? array('Re: ','Fwd: ','Fw: ',"\"") : array("\""); +function iil_SortHeaders($a, $field, $flag) { + if (empty($field)) { + $field = 'uid'; + } + $field = strtolower($field); + if ($field == 'date' || $field == 'internaldate') { + $field = 'timestamp'; + } + if (empty($flag)) { + $flag = 'ASC'; + } + + $flag = strtoupper($flag); + $stripArr = ($field=='subject') ? array('Re: ','Fwd: ','Fw: ','"') : array('"'); $c=count($a); - if ($c>0){ + if ($c > 0) { /* Strategy: First, we'll create an "index" array. @@ -1436,33 +1808,36 @@ function iil_SortHeaders($a, $field, $flag){ */ // create "index" array - $index=array(); + $index = array(); reset($a); - while (list($key, $val)=each($a)){ + while (list($key, $val)=each($a)) { - if ($field=="timestamp"){ + if ($field == 'timestamp') { $data = @strtotime($val->date); - if ($data == false) + if ($data == false) { $data = $val->timestamp; - } - else { + } + } else { $data = $val->$field; - if (is_string($data)) - $data=strtoupper(str_replace($stripArr, "", $data)); - } - + if (is_string($data)) { + $data=strtoupper(str_replace($stripArr, '', $data)); + } + } $index[$key]=$data; } // sort index - $i=0; - if ($flag=="ASC") asort($index); - else arsort($index); - + $i = 0; + if ($flag == 'ASC') { + asort($index); + } else { + arsort($index); + } + // form new array based on index - $result=array(); + $result = array(); reset($index); - while (list($key, $val)=each($index)){ + while (list($key, $val)=each($index)) { $result[$key]=$a[$key]; $i++; } @@ -1471,557 +1846,655 @@ function iil_SortHeaders($a, $field, $flag){ return $result; } -function iil_C_Expunge(&$conn, $mailbox){ +function iil_C_Expunge(&$conn, $mailbox) { $fp = $conn->fp; - if (iil_C_Select($conn, $mailbox)){ - $c=0; + if (iil_C_Select($conn, $mailbox)) { + $c = 0; fputs($fp, "exp1 EXPUNGE\r\n"); - do{ + do { $line=chop(iil_ReadLine($fp, 100)); - if ($line[0]=="*") $c++; - }while (!iil_StartsWith($line, "exp1")); + if ($line[0] == '*') { + $c++; + } + } while (!iil_StartsWith($line, 'exp1')); - if (iil_ParseResult($line) == 0){ - $conn->selected = ""; //state has changed, need to reselect + if (iil_ParseResult($line) == 0) { + $conn->selected = ''; //state has changed, need to reselect //$conn->exists-=$c; return $c; - }else{ - $conn->error = $line; - return -1; } + $conn->error = $line; } return -1; } -function iil_C_ModFlag(&$conn, $mailbox, $messages, $flag, $mod){ - if ($mod!="+" && $mod!="-") return -1; - - $fp = $conn->fp; - $flags=array( - "SEEN"=>"\\Seen", - "DELETED"=>"\\Deleted", - "RECENT"=>"\\Recent", - "ANSWERED"=>"\\Answered", - "DRAFT"=>"\\Draft", - "FLAGGED"=>"\\Flagged" - ); - $flag=strtoupper($flag); - $flag=$flags[$flag]; - if (iil_C_Select($conn, $mailbox)){ - $c=0; - fputs($fp, "flg STORE $messages ".$mod."FLAGS (".$flag.")\r\n"); - do{ +function iil_C_ModFlag(&$conn, $mailbox, $messages, $flag, $mod) { + if ($mod != '+' && $mod != '-') { + return -1; + } + + $fp = $conn->fp; + $flags = array( + 'SEEN' => '\\Seen', + 'DELETED' => '\\Deleted', + 'RECENT' => '\\Recent', + 'ANSWERED' => '\\Answered', + 'DRAFT' => '\\Draft', + 'FLAGGED' => '\\Flagged', + 'MDNSENT' => "\$MDNSent"); + + $flag = strtoupper($flag); + $flag = $flags[$flag]; + + if (iil_C_Select($conn, $mailbox)) { + $c = 0; + fputs($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")\r\n"); + do { $line=chop(iil_ReadLine($fp, 100)); - if ($line[0]=="*") $c++; - }while (!iil_StartsWith($line, "flg")); + if ($line[0] == '*') { + $c++; + } + } while (!iil_StartsWith($line, 'flg')); - if (iil_ParseResult($line) == 0){ + if (iil_ParseResult($line) == 0) { iil_C_ExpireCachedItems($conn, $mailbox, $messages); return $c; - }else{ - $conn->error = $line; - return -1; } - }else{ - $conn->error = "Select failed"; + $conn->error = $line; return -1; } + $conn->error = 'Select failed'; + return -1; } -function iil_C_Flag(&$conn, $mailbox, $messages, $flag){ - return iil_C_ModFlag($conn, $mailbox, $messages, $flag, "+"); +function iil_C_Flag(&$conn, $mailbox, $messages, $flag) { + return iil_C_ModFlag($conn, $mailbox, $messages, $flag, '+'); } -function iil_C_Unflag(&$conn, $mailbox, $messages, $flag){ - return iil_C_ModFlag($conn, $mailbox, $messages, $flag, "-"); +function iil_C_Unflag(&$conn, $mailbox, $messages, $flag) { + return iil_C_ModFlag($conn, $mailbox, $messages, $flag, '-'); } -function iil_C_Delete(&$conn, $mailbox, $messages){ - return iil_C_ModFlag($conn, $mailbox, $messages, "DELETED", "+"); +function iil_C_Delete(&$conn, $mailbox, $messages) { + return iil_C_ModFlag($conn, $mailbox, $messages, 'DELETED', '+'); } -function iil_C_Undelete(&$conn, $mailbox, $messages){ - return iil_C_ModFlag($conn, $mailbox, $messages, "DELETED", "-"); +function iil_C_Undelete(&$conn, $mailbox, $messages) { + return iil_C_ModFlag($conn, $mailbox, $messages, 'DELETED', '-'); } -function iil_C_Unseen(&$conn, $mailbox, $messages){ - return iil_C_ModFlag($conn, $mailbox, $messages, "SEEN", "-"); +function iil_C_Unseen(&$conn, $mailbox, $messages) { + return iil_C_ModFlag($conn, $mailbox, $messages, 'SEEN', '-'); } -function iil_C_Copy(&$conn, $messages, $from, $to){ +function iil_C_Copy(&$conn, $messages, $from, $to) { $fp = $conn->fp; - if (empty($from) || empty($to)) return -1; - - if (iil_C_Select($conn, $from)){ + if (empty($from) || empty($to)) { + return -1; + } + + if (iil_C_Select($conn, $from)) { $c=0; fputs($fp, "cpy1 COPY $messages \"$to\"\r\n"); $line=iil_ReadReply($fp); return iil_ParseResult($line); - }else{ + } else { return -1; } } -function iil_FormatSearchDate($month, $day, $year){ - $month = (int)$month; - $months=array( - 1=>"Jan", 2=>"Feb", 3=>"Mar", 4=>"Apr", - 5=>"May", 6=>"Jun", 7=>"Jul", 8=>"Aug", - 9=>"Sep", 10=>"Oct", 11=>"Nov", 12=>"Dec" - ); - return $day."-".$months[$month]."-".$year; +function iil_FormatSearchDate($month, $day, $year) { + $month = (int) $month; + $months = $GLOBALS['IMAP_MONTHS']; + return $day . '-' . $months[$month] . '-' . $year; } -function iil_C_CountUnseen(&$conn, $folder){ - $index = iil_C_Search($conn, $folder, "ALL UNSEEN"); - if (is_array($index)){ - $str = implode(",", $index); - if (empty($str)) return false; - else return count($index); - }else return false; +function iil_C_CountUnseen(&$conn, $folder) { + $index = iil_C_Search($conn, $folder, 'ALL UNSEEN'); + if (is_array($index)) { + $str = implode(',', $index); + if (empty($str)) { + return false; + } + return count($index); + } + return false; } -function iil_C_UID2ID(&$conn, $folder, $uid){ - if ($uid > 0){ +function iil_C_UID2ID(&$conn, $folder, $uid) { + if ($uid > 0) { $id_a = iil_C_Search($conn, $folder, "UID $uid"); - if (is_array($id_a)){ + if (is_array($id_a)) { $count = count($id_a); - if ($count > 1) return false; - else return $id_a[0]; + if ($count > 1) { + return false; + } + return $id_a[0]; } } return false; } -function iil_C_ID2UID(&$conn, $folder, $id){ +function iil_C_ID2UID(&$conn, $folder, $id) { $fp = $conn->fp; - $result=-1; - if ($id > 0) { - if (iil_C_Select($conn, $folder)){ - $key = "FUID"; - if (fputs($fp, "$key FETCH $id (UID)\r\n")){ - do{ - $line=chop(iil_ReadLine($fp, 1024)); - if (eregi("^\* $id FETCH \(UID (.*)\)", $line, $r)){ - $result = $r[1]; - } - } while (!preg_match("/^$key/", $line)); - } + if ($id == 0) { + return -1; + } + $result = -1; + if (iil_C_Select($conn, $folder)) { + $key = 'FUID'; + if (fputs($fp, "$key FETCH $id (UID)\r\n")) { + do { + $line=chop(iil_ReadLine($fp, 1024)); + if (eregi("^\* $id FETCH \(UID (.*)\)", $line, $r)) { + $result = $r[1]; + } + } while (!preg_match("/^$key/", $line)); } } return $result; } -function iil_C_Search(&$conn, $folder, $criteria){ +function iil_C_Search(&$conn, $folder, $criteria) { $fp = $conn->fp; - if (iil_C_Select($conn, $folder)){ - $c=0; + if (iil_C_Select($conn, $folder)) { + $c = 0; - $query = "srch1 SEARCH ".chop($criteria)."\r\n"; + $query = 'srch1 SEARCH ' . chop($criteria) . "\r\n"; fputs($fp, $query); - do{ + do { $line=trim(chop(iil_ReadLine($fp, 10000))); - if (eregi("^\* SEARCH", $line)){ + if (eregi("^\* SEARCH", $line)) { $str = trim(substr($line, 8)); - $messages = explode(" ", $str); + $messages = explode(' ', $str); } - }while(!iil_StartsWith($line, "srch1")); + } while (!iil_StartsWith($line, 'srch1')); - $result_code=iil_ParseResult($line); - if ($result_code==0) return $messages; - else{ - $conn->error = "iil_C_Search: ".$line."\n"; - return false; + $result_code = iil_ParseResult($line); + if ($result_code == 0) { + return $messages; } - - }else{ - $conn->error = "iil_C_Search: Couldn't select \"$folder\"\n"; + $conn->error = 'iil_C_Search: ' . $line . "\n"; return false; + } + $conn->error = "iil_C_Search: Couldn't select \"$folder\"\n"; + return false; } -function iil_C_Move(&$conn, $messages, $from, $to){ +function iil_C_Move(&$conn, $messages, $from, $to) { $fp = $conn->fp; - if (!$from || !$to) return -1; - - $r=iil_C_Copy($conn, $messages, $from,$to); - if ($r==0){ + if (!$from || !$to) { + return -1; + } + + $r = iil_C_Copy($conn, $messages, $from,$to); + if ($r==0) { return iil_C_Delete($conn, $from, $messages); - }else{ - return $r; } -} - -function iil_C_GetHierarchyDelimiter(&$conn){ - if ($conn->delimiter) return $conn->delimiter; - - $fp = $conn->fp; + return $r; +} + +/** + * Gets the delimiter, for example: + * INBOX.foo -> . + * INBOX/foo -> / + * INBOX\foo -> \ + * + * @return mixed A delimiter (string), or false. + * @param object $conn The current connection. + * @see iil_Connect() + */ +function iil_C_GetHierarchyDelimiter(&$conn) { + if ($conn->delimiter) { + return $conn->delimiter; + } + + $fp = $conn->fp; $delimiter = false; //try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8) - if (!fputs($fp, "ghd LIST \"\" \"\"\r\n")) return false; - do{ + if (!fputs($fp, 'ghd LIST "" ""' . "\r\n")) { + return false; + } + + do { $line=iil_ReadLine($fp, 500); - if ($line[0]=="*"){ + if ($line[0] == '*') { $line = rtrim($line); - $a=iil_ExplodeQuotedString(" ", $line); - if ($a[0]=="*") $delimiter = str_replace("\"", "", $a[count($a)-2]); + $a=iil_ExplodeQuotedString(' ', $line); + if ($a[0] == '*') { + $delimiter = str_replace('"', '', $a[count($a)-2]); + } } - }while (!iil_StartsWith($line, "ghd")); + } while (!iil_StartsWith($line, 'ghd')); - if (strlen($delimiter)>0) return $delimiter; - + if (strlen($delimiter)>0) { + return $delimiter; + } + //if that fails, try namespace extension //try to fetch namespace data fputs($conn->fp, "ns1 NAMESPACE\r\n"); - do{ + do { $line = iil_ReadLine($conn->fp, 1024); - if (iil_StartsWith($line, "* NAMESPACE")){ + if (iil_StartsWith($line, '* NAMESPACE')) { $i = 0; $data = iil_ParseNamespace2(substr($line,11), $i, 0, 0); } - }while(!iil_StartsWith($line, "ns1")); + } while (!iil_StartsWith($line, 'ns1')); - if (!is_array($data)) return false; - + if (!is_array($data)) { + return false; + } + //extract user space data (opposed to global/shared space) $user_space_data = $data[0]; - if (!is_array($user_space_data)) return false; - + if (!is_array($user_space_data)) { + return false; + } + //get first element $first_userspace = $user_space_data[0]; - if (!is_array($first_userspace)) return false; - + if (!is_array($first_userspace)) { + return false; + } + //extract delimiter $delimiter = $first_userspace[1]; return $delimiter; } -function iil_C_ListMailboxes(&$conn, $ref, $mailbox){ +function iil_C_ListMailboxes(&$conn, $ref, $mailbox) { global $IGNORE_FOLDERS; $ignore = $IGNORE_FOLDERS[strtolower($conn->host)]; $fp = $conn->fp; - if (empty($mailbox)) $mailbox="*"; - if (empty($ref) && $conn->rootdir) $ref = $conn->rootdir; - + if (empty($mailbox)) { + $mailbox = '*'; + } + if (empty($ref) && $conn->rootdir) { + $ref = $conn->rootdir; + } + // send command - if (!fputs($fp, "lmb LIST \"".$ref."\" \"$mailbox\"\r\n")) return false; - $i=0; + if (!fputs($fp, "lmb LIST \"".$ref."\" \"$mailbox\"\r\n")) { + return false; + } + + $i = 0; // get folder list - do{ - $line=iil_ReadLine($fp, 500); - $line=iil_MultLine($fp, $line); + do { + $line = iil_ReadLine($fp, 500); + $line = iil_MultLine($fp, $line); - $a = explode(" ", $line); - if (($line[0]=="*") && ($a[1]=="LIST")){ + $a = explode(' ', $line); + if (($line[0] == '*') && ($a[1] == 'LIST')) { $line = rtrim($line); // split one line - $a=iil_ExplodeQuotedString(" ", $line); + $a = iil_ExplodeQuotedString(' ', $line); + // last string is folder name - $folder = str_replace("\"", "", $a[count($a)-1]); - if (empty($ignore) || (!empty($ignore) && !eregi($ignore, $folder))) $folders[$i] = $folder; + $folder = str_replace('"', '', $a[count($a)-1]); + + if (empty($ignore) || (!empty($ignore) + && !eregi($ignore, $folder))) { + $folders[$i] = $folder; + } + // second from last is delimiter - $delim = str_replace("\"", "", $a[count($a)-2]); + $delim = str_replace('"', '', $a[count($a)-2]); // is it a container? $i++; } - }while (!iil_StartsWith($line, "lmb")); + } while (!iil_StartsWith($line, 'lmb')); - if (is_array($folders)){ - if (!empty($ref)){ + if (is_array($folders)) { + if (!empty($ref)) { // if rootdir was specified, make sure it's the first element // some IMAP servers (i.e. Courier) won't return it if ($ref[strlen($ref)-1]==$delim) $ref = substr($ref, 0, strlen($ref)-1); if ($folders[0]!=$ref) array_unshift($folders, $ref); } return $folders; - }else if (iil_ParseResult($line)==0){ + }else if (iil_ParseResult($line) == 0) { return array('INBOX'); - }else{ + } else { $conn->error = $line; return false; } } -function iil_C_ListSubscribed(&$conn, $ref, $mailbox){ +function iil_C_ListSubscribed(&$conn, $ref, $mailbox) { global $IGNORE_FOLDERS; $ignore = $IGNORE_FOLDERS[strtolower($conn->host)]; $fp = $conn->fp; - if (empty($mailbox)) $mailbox = "*"; - if (empty($ref) && $conn->rootdir) $ref = $conn->rootdir; + if (empty($mailbox)) { + $mailbox = '*'; + } + if (empty($ref) && $conn->rootdir) { + $ref = $conn->rootdir; + } $folders = array(); // send command - if (!fputs($fp, "lsb LSUB \"".$ref."\" \"".$mailbox."\"\r\n")){ + if (!fputs($fp, 'lsb LSUB "' . $ref . '" "' . $mailbox.'"' . "\r\n")) { $conn->error = "Couldn't send LSUB command\n"; return false; } - $i=0; + + $i = 0; + // get folder list - do{ - $line=iil_ReadLine($fp, 500); - $line=iil_MultLine($fp, $line); - $a = explode(" ", $line); - if (($line[0]=="*") && ($a[1]=="LSUB" || $a[1]=="LIST")){ + do { + $line = iil_ReadLine($fp, 500); + $line = iil_MultLine($fp, $line); + $a = explode(' ', $line); + + if (($line[0] == '*') && ($a[1] == 'LSUB' || $a[1] == 'LIST')) { $line = rtrim($line); + // split one line - $a=iil_ExplodeQuotedString(" ", $line); + $a = iil_ExplodeQuotedString(' ', $line); + // last string is folder name - //$folder = UTF7DecodeString(str_replace("\"", "", $a[count($a)-1])); - $folder = str_replace("\"", "", $a[count($a)-1]); - if ((!in_array($folder, $folders)) && (empty($ignore) || (!empty($ignore) && !eregi($ignore, $folder)))) $folders[$i] = $folder; + //$folder = UTF7DecodeString(str_replace('"', '', $a[count($a)-1])); + $folder = str_replace('"', '', $a[count($a)-1]); + + if ((!in_array($folder, $folders)) && (empty($ignore) + || (!empty($ignore) && !eregi($ignore, $folder)))) { + $folders[$i] = $folder; + } + // second from last is delimiter - $delim = str_replace("\"", "", $a[count($a)-2]); + $delim = str_replace('"', '', $a[count($a)-2]); + // is it a container? $i++; } - }while (!iil_StartsWith($line, "lsb")); + } while (!iil_StartsWith($line, 'lsb')); - if (is_array($folders)){ - if (!empty($ref)){ + if (is_array($folders)) { + if (!empty($ref)) { // if rootdir was specified, make sure it's the first element // some IMAP servers (i.e. Courier) won't return it - if ($ref[strlen($ref)-1]==$delim) $ref = substr($ref, 0, strlen($ref)-1); - if ($folders[0]!=$ref) array_unshift($folders, $ref); + if ($ref[strlen($ref)-1]==$delim) { + $ref = substr($ref, 0, strlen($ref)-1); + } + if ($folders[0]!=$ref) { + array_unshift($folders, $ref); + } } return $folders; - }else{ - $conn->error = $line; - return false; } + $conn->error = $line; + return false; } -function iil_C_Subscribe(&$conn, $folder){ +function iil_C_Subscribe(&$conn, $folder) { $fp = $conn->fp; - $query = "sub1 SUBSCRIBE \"".$folder."\"\r\n"; + $query = 'sub1 SUBSCRIBE "' . $folder. '"' . "\r\n"; fputs($fp, $query); - $line=trim(chop(iil_ReadLine($fp, 10000))); + + $line = trim(chop(iil_ReadLine($fp, 10000))); return iil_ParseResult($line); } -function iil_C_UnSubscribe(&$conn, $folder){ +function iil_C_UnSubscribe(&$conn, $folder) { $fp = $conn->fp; - $query = "usub1 UNSUBSCRIBE \"".$folder."\"\r\n"; + $query = 'usub1 UNSUBSCRIBE "' . $folder . '"' . "\r\n"; fputs($fp, $query); - $line=trim(chop(iil_ReadLine($fp, 10000))); + + $line = trim(chop(iil_ReadLine($fp, 10000))); return iil_ParseResult($line); } -function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part){ - $fp = $conn->fp; - $result=false; - if (($part==0)||(empty($part))) $part="HEADER"; - else $part.=".MIME"; - - if (iil_C_Select($conn, $mailbox)){ - $key="fh".($c++); - $request=$key." FETCH $id (BODY.PEEK[$part])\r\n"; +function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) { + $fp = $conn->fp; + $result = false; + if (($part == 0) || (empty($part))) { + $part = 'HEADER'; + } else { + $part .= '.MIME'; + } + + if (iil_C_Select($conn, $mailbox)) { + $key = 'fh' . ($c++); + $request = $key . " FETCH $id (BODY.PEEK[$part])\r\n"; if (!fputs($fp, $request)) return false; - do{ - $line=chop(iil_ReadLine($fp, 200)); - $a=explode(" ", $line); - if (($line[0]=="*") && ($a[2]=="FETCH") && ($line[strlen($line)-1]!=")")){ + do { + $line = chop(iil_ReadLine($fp, 200)); + $a = explode(' ', $line); + if (($line[0] == '*') && ($a[2] == 'FETCH') + && ($line[strlen($line)-1] != ')')) { $line=iil_ReadLine($fp, 300); - while(chop($line)!=")"){ - $result.=$line; + while (chop($line) != ')') { + $result .= $line; $line=iil_ReadLine($fp, 300); } } - }while(strcmp($a[0], $key)!=0); + } while (strcmp($a[0], $key) != 0); } return $result; } -function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode){ +function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) { /* modes: 1: return string 2: print 3: base64 and print */ - $fp = $conn->fp; - $result=false; - if (($part==0)||(empty($part))) $part="TEXT"; - - if (iil_C_Select($conn, $mailbox)){ - $reply_key="* ".$id; + $fp = $conn->fp; + $result = false; + if (($part == 0) || empty($part)) { + $part = 'TEXT'; + } + + if (iil_C_Select($conn, $mailbox)) { + $reply_key = '* ' . $id; + // format request - $key="ftch".($c++)." "; - $request=$key."FETCH $id (BODY.PEEK[$part])\r\n"; + $key = 'ftch' . ($c++) . ' '; + $request = $key . "FETCH $id (BODY.PEEK[$part])\r\n"; // send request - if (!fputs($fp, $request)) return false; + if (!fputs($fp, $request)) { + return false; + } + // receive reply line - do{ + do { $line = chop(iil_ReadLine($fp, 1000)); - $a = explode(" ", $line); - }while ($a[2]!="FETCH"); + $a = explode(' ', $line); + } while ($a[2] != 'FETCH'); $len = strlen($line); - if ($line[$len-1] == ")"){ + if ($line[$len-1] == ')') { //one line response, get everything between first and last quotes - $from = strpos($line, "\"") + 1; - $to = strrpos($line, "\""); - $len = $to - $from; - if ($mode==1) $result = substr($line, $from, $len); - else if ($mode==2) echo substr($line, $from, $len); - else if ($mode==3) echo base64_decode(substr($line, $from, $len)); - }else if ($line[$len-1] == "}"){ + $from = strpos($line, '"') + 1; + $to = strrpos($line, '"'); + $len = $to - $from; + if ($mode == 1) { + $result = substr($line, $from, $len); + } else if ($mode == 2) { + echo substr($line, $from, $len); + } else if ($mode == 3) { + echo base64_decode(substr($line, $from, $len)); + } + }else if ($line[$len-1] == '}') { //multi-line request, find sizes of content and receive that many bytes - $from = strpos($line, "{") + 1; - $to = strrpos($line, "}"); - $len = $to - $from; - $sizeStr = substr($line, $from, $len); - $bytes = (int)$sizeStr; + $from = strpos($line, '{') + 1; + $to = strrpos($line, '}'); + $len = $to - $from; + $sizeStr = substr($line, $from, $len); + $bytes = (int)$sizeStr; $received = 0; - while ($received < $bytes){ + while ($received < $bytes) { $remaining = $bytes - $received; - $line = iil_ReadLine($fp, 1024); - $len = strlen($line); - if ($len > $remaining) $line = substr($line, 0, $remaining); + $line = iil_ReadLine($fp, 1024); + $len = strlen($line); + + if ($len > $remaining) { + $line = substr($line, 0, $remaining); + } $received += strlen($line); - if ($mode==1) $result .= chop($line)."\n"; - else if ($mode==2){ echo chop($line)."\n"; flush(); } - else if ($mode==3){ echo base64_decode($line); flush(); } + if ($mode == 1) { + $result .= chop($line) . "\n"; + } else if ($mode == 2) { + echo chop($line) . "\n"; flush(); + } else if ($mode == 3) { + echo base64_decode($line); flush(); + } } } // read in anything up until 'til last line - do{ + do { $line = iil_ReadLine($fp, 1024); - }while(!iil_StartsWith($line, $key)); + } while (!iil_StartsWith($line, $key)); - if ($result){ + if ($result) { $result = chop($result); return $result; // substr($result, 0, strlen($result)-1); - }else return false; - }else{ - echo "Select failed."; + } + return false; + } else { + echo 'Select failed.'; } - if ($mode==1) return $result; - else return $received; + if ($mode==1) { + return $result; + } + return $received; } -function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part){ +function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part) { return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1); } -function iil_C_PrintPartBody(&$conn, $mailbox, $id, $part){ +function iil_C_PrintPartBody(&$conn, $mailbox, $id, $part) { iil_C_HandlePartBody($conn, $mailbox, $id, $part, 2); } -function iil_C_PrintBase64Body(&$conn, $mailbox, $id, $part){ +function iil_C_PrintBase64Body(&$conn, $mailbox, $id, $part) { iil_C_HandlePartBody($conn, $mailbox, $id, $part, 3); } -function iil_C_CreateFolder(&$conn, $folder){ +function iil_C_CreateFolder(&$conn, $folder) { $fp = $conn->fp; - if (fputs($fp, "c CREATE \"".$folder."\"\r\n")){ - do{ + if (fputs($fp, 'c CREATE "' . $folder . '"' . "\r\n")) { + do { $line=iil_ReadLine($fp, 300); - }while($line[0]!="c"); + } while ($line[0] != 'c'); $conn->error = $line; - return (iil_ParseResult($line)==0); - }else{ - return false; + return (iil_ParseResult($line) == 0); } + return false; } -function iil_C_RenameFolder(&$conn, $from, $to){ +function iil_C_RenameFolder(&$conn, $from, $to) { $fp = $conn->fp; - if (fputs($fp, "r RENAME \"".$from."\" \"".$to."\"\r\n")){ - do{ - $line=iil_ReadLine($fp, 300); - }while($line[0]!="r"); - return (iil_ParseResult($line)==0); - }else{ - return false; - } + if (fputs($fp, 'r RENAME "' . $from . '" "' . $to . '"' . "\r\n")) { + do { + $line = iil_ReadLine($fp, 300); + } while ($line[0] != 'r'); + return (iil_ParseResult($line) == 0); + } + return false; } -function iil_C_DeleteFolder(&$conn, $folder){ +function iil_C_DeleteFolder(&$conn, $folder) { $fp = $conn->fp; - if (fputs($fp, "d DELETE \"".$folder."\"\r\n")){ - do{ + if (fputs($fp, 'd DELETE "' . $folder. '"' . "\r\n")) { + do { $line=iil_ReadLine($fp, 300); - }while($line[0]!="d"); - return (iil_ParseResult($line)==0); - }else{ - $conn->error = "Couldn't send command\n"; - return false; + } while ($line[0] != 'd'); + return (iil_ParseResult($line) == 0); } + $conn->error = "Couldn't send command\n"; + return false; } -function iil_C_Append(&$conn, $folder, &$message){ - if (!$folder) return false; +function iil_C_Append(&$conn, $folder, &$message) { + if (!$folder) { + return false; + } $fp = $conn->fp; - $message = str_replace("\r", "", $message); + $message = str_replace("\r", '', $message); $message = str_replace("\n", "\r\n", $message); $len = strlen($message); - if (!$len) return false; - - $request="A APPEND \"".$folder."\" (\\Seen) {".$len."}\r\n"; - if (fputs($fp, $request)){ + if (!$len) { + return false; + } + $request = 'A APPEND "' . $folder .'" (\\Seen) {' . $len . "}\r\n"; + + if (fputs($fp, $request)) { $line=iil_ReadLine($fp, 100); $sent = fwrite($fp, $message."\r\n"); flush(); - do{ + do { $line=iil_ReadLine($fp, 1000); - }while($line[0]!="A"); + } while ($line[0] != 'A'); - $result = (iil_ParseResult($line)==0); - if (!$result) $conn->error .= $line."\n"; + $result = (iil_ParseResult($line) == 0); + if (!$result) { + $conn->error .= $line . "\n"; + } return $result; - }else{ - $conn->error .= "Couldn't send command \"$request\"\n"; - return false; } + $conn->error .= "Couldn't send command \"$request\"\n"; + return false; } -function iil_C_AppendFromFile(&$conn, $folder, $path){ - if (!$folder) return false; - +function iil_C_AppendFromFile(&$conn, $folder, $path) { + if (!$folder) { + return false; + } + //open message file $in_fp = false; - if (file_exists(realpath($path))) $in_fp = fopen($path, "r"); - if (!$in_fp){ + if (file_exists(realpath($path))) { + $in_fp = fopen($path, 'r'); + } + if (!$in_fp) { $conn->error .= "Couldn't open $path for reading\n"; return false; } - $fp = $conn->fp; + $fp = $conn->fp; $len = filesize($path); - if (!$len) return false; - + if (!$len) { + return false; + } + //send APPEND command - $request="A APPEND \"".$folder."\" (\\Seen) {".$len."}\r\n"; + $request = 'A APPEND "' . $folder . '" (\\Seen) {' . $len . "}\r\n"; $bytes_sent = 0; - if (fputs($fp, $request)){ - $line=iil_ReadLine($fp, 100); + if (fputs($fp, $request)) { + $line = iil_ReadLine($fp, 100); //send file - while(!feof($in_fp)){ - $buffer = fgets($in_fp, 4096); + while (!feof($in_fp)) { + $buffer = fgets($in_fp, 4096); $bytes_sent += strlen($buffer); fputs($fp, $buffer); } @@ -2030,100 +2503,110 @@ function iil_C_AppendFromFile(&$conn, $folder, $path){ fputs($fp, "\r\n"); //read response - do{ - $line=iil_ReadLine($fp, 1000); - }while($line[0]!="A"); + do { + $line = iil_ReadLine($fp, 1000); + } while ($line[0] != 'A'); - $result = (iil_ParseResult($line)==0); - if (!$result) $conn->error .= $line."\n"; - return $result; + $result = (iil_ParseResult($line) == 0); + if (!$result) { + $conn->error .= $line . "\n"; + } + return $result; - }else{ - $conn->error .= "Couldn't send command \"$request\"\n"; - return false; } + $conn->error .= "Couldn't send command \"$request\"\n"; + return false; } -function iil_C_FetchStructureString(&$conn, $folder, $id){ - $fp = $conn->fp; - $result=false; - if (iil_C_Select($conn, $folder)){ - $key = "F1247"; - if (fputs($fp, "$key FETCH $id (BODYSTRUCTURE)\r\n")){ - do{ +function iil_C_FetchStructureString(&$conn, $folder, $id) { + $fp = $conn->fp; + $result = false; + if (iil_C_Select($conn, $folder)) { + $key = 'F1247'; + + if (fputs($fp, "$key FETCH $id (BODYSTRUCTURE)\r\n")) { + do { $line=chop(iil_ReadLine($fp, 5000)); - if ($line[0]=="*"){ - if (ereg("\}$", $line)){ + if ($line[0] == '*') { + if (ereg("\}$", $line)) { preg_match('/(.+)\{([0-9]+)\}/', $line, $match); $result = $match[1]; - do{ + do { $line = chop(iil_ReadLine($fp, 100)); - if (!preg_match("/^$key/", $line)) $result .= $line; - else $done = true; - }while(!$done); - }else{ + if (!preg_match("/^$key/", $line)) { + $result .= $line; + } else { + $done = true; + } + } while (!$done); + } else { $result = $line; } - list($pre, $post) = explode("BODYSTRUCTURE ", $result); - $result = substr($post, 0, strlen($post)-1); //truncate last ')' and return + list($pre, $post) = explode('BODYSTRUCTURE ', $result); + + //truncate last ')' and return + $result = substr($post, 0, strlen($post)-1); } - }while (!preg_match("/^$key/",$line)); + } while (!preg_match("/^$key/", $line)); } } return $result; } -function iil_C_PrintSource(&$conn, $folder, $id, $part){ +function iil_C_PrintSource(&$conn, $folder, $id, $part) { $header = iil_C_FetchPartHeader($conn, $folder, $id, $part); - //echo str_replace("\r", "", $header); + //echo str_replace("\r", '', $header); echo $header; echo iil_C_PrintPartBody($conn, $folder, $id, $part); } -function iil_C_GetQuota(&$conn){ +function iil_C_GetQuota(&$conn) { /* -b GETQUOTAROOT "INBOX" -* QUOTAROOT INBOX user/rchijiiwa1 -* QUOTA user/rchijiiwa1 (STORAGE 654 9765) -b OK Completed -*/ - $fp = $conn->fp; - $result=false; - $quota_line = ""; + * GETQUOTAROOT "INBOX" + * QUOTAROOT INBOX user/rchijiiwa1 + * QUOTA user/rchijiiwa1 (STORAGE 654 9765) + b OK Completed + */ + $fp = $conn->fp; + $result = false; + $quota_line = ''; //get line containing quota info - if (fputs($fp, "QUOT1 GETQUOTAROOT \"INBOX\"\r\n")){ - do{ + if (fputs($fp, 'QUOT1 GETQUOTAROOT "INBOX"' . "\r\n")) { + do { $line=chop(iil_ReadLine($fp, 5000)); - if (iil_StartsWith($line, "* QUOTA ")) $quota_line = $line; - }while(!iil_StartsWith($line, "QUOT1")); + if (iil_StartsWith($line, '* QUOTA ')) { + $quota_line = $line; + } + } while (!iil_StartsWith($line, 'QUOT1')); } //return false if not found, parse if found - if (!empty($quota_line)){ - $quota_line = eregi_replace("[()]", "", $quota_line); - $parts = explode(" ", $quota_line); - $storage_part = array_search("STORAGE", $parts); - if ($storage_part>0){ + if (!empty($quota_line)) { + $quota_line = eregi_replace('[()]', '', $quota_line); + $parts = explode(' ', $quota_line); + $storage_part = array_search('STORAGE', $parts); + if ($storage_part > 0) { $result = array(); - $used = $parts[$storage_part+1]; - $total = $parts[$storage_part+2]; - $result["used"] = $used; - $result["total"] = (empty($total)?"??":$total); - $result["percent"] = (empty($total)?"??":round(($used/$total)*100)); - $result["free"] = 100 - $result["percent"]; + $used = $parts[$storage_part+1]; + $total = $parts[$storage_part+2]; + + $result['used'] = $used; + $result['total'] = (empty($total)?"??":$total); + $result['percent'] = (empty($total)?"??":round(($used/$total)*100)); + $result['free'] = 100 - $result['percent']; } } - return $result; } -function iil_C_ClearFolder(&$conn, $folder){ +function iil_C_ClearFolder(&$conn, $folder) { $num_in_trash = iil_C_CountMessages($conn, $folder); - if ($num_in_trash > 0) iil_C_Delete($conn, $folder, "1:".$num_in_trash); + if ($num_in_trash > 0) { + iil_C_Delete($conn, $folder, '1:' . $num_in_trash); + } return (iil_C_Expunge($conn, $folder) >= 0); } - ?> diff --git a/program/lib/magic b/program/lib/magic new file mode 100644 index 0000000..85b5e8b --- /dev/null +++ b/program/lib/magic @@ -0,0 +1,10810 @@ +# Magic +# Magic data for file(1) command. +# Machine-generated from src/cmd/file/magdir/*; edit there only! +# Format is described in magic(files), where: +# files is 5 on V7 and BSD, 4 on SV, and ?? in the SVID. + +#------------------------------------------------------------------------------ +# Localstuff: file(1) magic for locally observed files +# +# $Id: Localstuff,v 1.4 2003/03/23 04:17:27 christos Exp $ +# Add any locally observed files here. Remember: +# text if readable, executable if runnable binary, data if unreadable. + +#------------------------------------------------------------------------------ +# zyxel: file(1) magic for ZyXEL modems +# +# From +# These are the /etc/magic entries to decode datafiles as used for the +# ZyXEL U-1496E DATA/FAX/VOICE modems. (This header conforms to a +# ZyXEL-defined standard) + +0 string ZyXEL\002 ZyXEL voice data +>10 byte 0 - CELP encoding +>10 byte&0x0B 1 - ADPCM2 encoding +>10 byte&0x0B 2 - ADPCM3 encoding +>10 byte&0x0B 3 - ADPCM4 encoding +>10 byte&0x0B 8 - New ADPCM3 encoding +>10 byte&0x04 4 with resync + +#------------------------------------------------------------------------------ +# file(1) magic(5) data for xdelta Josh MacDonald +# +0 string %XDELTA% XDelta binary patch file 0.14 +0 string %XDZ000% XDelta binary patch file 0.18 +0 string %XDZ001% XDelta binary patch file 0.20 +0 string %XDZ002% XDelta binary patch file 1.0 +0 string %XDZ003% XDelta binary patch file 1.0.4 +0 string %XDZ004% XDelta binary patch file 1.1 +#------------------------------------------------------------------------ +# sysex: file(1) magic for MIDI sysex files +# +# +0 byte 0xF0 SysEx File - + +# North American Group +>1 byte 0x01 Sequential +>1 byte 0x02 IDP +>1 byte 0x03 OctavePlateau +>1 byte 0x04 Moog +>1 byte 0x05 Passport +>1 byte 0x06 Lexicon +>1 byte 0x07 Kurzweil +>1 byte 0x08 Fender +>1 byte 0x09 Gulbransen +>1 byte 0x0a AKG +>1 byte 0x0b Voyce +>1 byte 0x0c Waveframe +>1 byte 0x0d ADA +>1 byte 0x0e Garfield +>1 byte 0x0f Ensoniq +>1 byte 0x10 Oberheim +>1 byte 0x11 Apple +>1 byte 0x12 GreyMatter +>1 byte 0x14 PalmTree +>1 byte 0x15 JLCooper +>1 byte 0x16 Lowrey +>1 byte 0x17 AdamsSmith +>1 byte 0x18 E-mu +>1 byte 0x19 Harmony +>1 byte 0x1a ART +>1 byte 0x1b Baldwin +>1 byte 0x1c Eventide +>1 byte 0x1d Inventronics +>1 byte 0x1f Clarity + +# European Group +>1 byte 0x21 SIEL +>1 byte 0x22 Synthaxe +>1 byte 0x24 Hohner +>1 byte 0x25 Twister +>1 byte 0x26 Solton +>1 byte 0x27 Jellinghaus +>1 byte 0x28 Southworth +>1 byte 0x29 PPG +>1 byte 0x2a JEN +>1 byte 0x2b SSL +>1 byte 0x2c AudioVertrieb + +>1 byte 0x2f ELKA +>>3 byte 0x09 EK-44 + +>1 byte 0x30 Dynacord +>1 byte 0x33 Clavia +>1 byte 0x39 Soundcraft + +>1 byte 0x3e Waldorf +>>3 byte 0x7f Microwave I + +# Japanese Group +>1 byte 0x40 Kawai +>>3 byte 0x20 K1 +>>3 byte 0x22 K4 + +>1 byte 0x41 Roland +>>3 byte 0x14 D-50 +>>3 byte 0x2b U-220 +>>3 byte 0x02 TR-707 + +>1 byte 0x42 Korg +>>3 byte 0x19 M1 + +>1 byte 0x43 Yamaha +>1 byte 0x44 Casio +>1 byte 0x46 Kamiya +>1 byte 0x47 Akai +>1 byte 0x48 Victor +>1 byte 0x49 Mesosha +>1 byte 0x4b Fujitsu +>1 byte 0x4c Sony +>1 byte 0x4e Teac +>1 byte 0x50 Matsushita +>1 byte 0x51 Fostex +>1 byte 0x52 Zoom +>1 byte 0x54 Matsushita +>1 byte 0x57 Acoustic tech. lab. + +>1 belong&0xffffff00 0x00007400 Ta Horng +>1 belong&0xffffff00 0x00007500 e-Tek +>1 belong&0xffffff00 0x00007600 E-Voice +>1 belong&0xffffff00 0x00007700 Midisoft +>1 belong&0xffffff00 0x00007800 Q-Sound +>1 belong&0xffffff00 0x00007900 Westrex +>1 belong&0xffffff00 0x00007a00 Nvidia* +>1 belong&0xffffff00 0x00007b00 ESS +>1 belong&0xffffff00 0x00007c00 Mediatrix +>1 belong&0xffffff00 0x00007d00 Brooktree +>1 belong&0xffffff00 0x00007e00 Otari +>1 belong&0xffffff00 0x00007f00 Key Electronics +>1 belong&0xffffff00 0x00010000 Shure +>1 belong&0xffffff00 0x00010100 AuraSound +>1 belong&0xffffff00 0x00010200 Crystal +>1 belong&0xffffff00 0x00010300 Rockwell +>1 belong&0xffffff00 0x00010400 Silicon Graphics +>1 belong&0xffffff00 0x00010500 Midiman +>1 belong&0xffffff00 0x00010600 PreSonus +>1 belong&0xffffff00 0x00010800 Topaz +>1 belong&0xffffff00 0x00010900 Cast Lightning +>1 belong&0xffffff00 0x00010a00 Microsoft +>1 belong&0xffffff00 0x00010b00 Sonic Foundry +>1 belong&0xffffff00 0x00010c00 Line 6 +>1 belong&0xffffff00 0x00010d00 Beatnik Inc. +>1 belong&0xffffff00 0x00010e00 Van Koerving +>1 belong&0xffffff00 0x00010f00 Altech Systems +>1 belong&0xffffff00 0x00011000 S & S Research +>1 belong&0xffffff00 0x00011100 VLSI Technology +>1 belong&0xffffff00 0x00011200 Chromatic +>1 belong&0xffffff00 0x00011300 Sapphire +>1 belong&0xffffff00 0x00011400 IDRC +>1 belong&0xffffff00 0x00011500 Justonic Tuning +>1 belong&0xffffff00 0x00011600 TorComp +>1 belong&0xffffff00 0x00011700 Newtek Inc. +>1 belong&0xffffff00 0x00011800 Sound Sculpture +>1 belong&0xffffff00 0x00011900 Walker Technical +>1 belong&0xffffff00 0x00011a00 Digital Harmony +>1 belong&0xffffff00 0x00011b00 InVision +>1 belong&0xffffff00 0x00011c00 T-Square +>1 belong&0xffffff00 0x00011d00 Nemesys +>1 belong&0xffffff00 0x00011e00 DBX +>1 belong&0xffffff00 0x00011f00 Syndyne +>1 belong&0xffffff00 0x00012000 Bitheadz +>1 belong&0xffffff00 0x00012100 Cakewalk +>1 belong&0xffffff00 0x00012200 Staccato +>1 belong&0xffffff00 0x00012300 National Semicon. +>1 belong&0xffffff00 0x00012400 Boom Theory +>1 belong&0xffffff00 0x00012500 Virtual DSP Corp +>1 belong&0xffffff00 0x00012600 Antares +>1 belong&0xffffff00 0x00012700 Angel Software +>1 belong&0xffffff00 0x00012800 St Louis Music +>1 belong&0xffffff00 0x00012900 Lyrrus dba G-VOX +>1 belong&0xffffff00 0x00012a00 Ashley Audio +>1 belong&0xffffff00 0x00012b00 Vari-Lite +>1 belong&0xffffff00 0x00012c00 Summit Audio +>1 belong&0xffffff00 0x00012d00 Aureal Semicon. +>1 belong&0xffffff00 0x00012e00 SeaSound +>1 belong&0xffffff00 0x00012f00 U.S. Robotics +>1 belong&0xffffff00 0x00013000 Aurisis +>1 belong&0xffffff00 0x00013100 Nearfield Multimedia +>1 belong&0xffffff00 0x00013200 FM7 Inc. +>1 belong&0xffffff00 0x00013300 Swivel Systems +>1 belong&0xffffff00 0x00013400 Hyperactive +>1 belong&0xffffff00 0x00013500 MidiLite +>1 belong&0xffffff00 0x00013600 Radical +>1 belong&0xffffff00 0x00013700 Roger Linn +>1 belong&0xffffff00 0x00013800 Helicon +>1 belong&0xffffff00 0x00013900 Event +>1 belong&0xffffff00 0x00013a00 Sonic Network +>1 belong&0xffffff00 0x00013b00 Realtime Music +>1 belong&0xffffff00 0x00013c00 Apogee Digital + +>1 belong&0xffffff00 0x00202b00 Medeli Electronics +>1 belong&0xffffff00 0x00202c00 Charlie Lab +>1 belong&0xffffff00 0x00202d00 Blue Chip Music +>1 belong&0xffffff00 0x00202e00 BEE OH Corp +>1 belong&0xffffff00 0x00202f00 LG Semicon America +>1 belong&0xffffff00 0x00203000 TESI +>1 belong&0xffffff00 0x00203100 EMAGIC +>1 belong&0xffffff00 0x00203200 Behringer +>1 belong&0xffffff00 0x00203300 Access Music +>1 belong&0xffffff00 0x00203400 Synoptic +>1 belong&0xffffff00 0x00203500 Hanmesoft Corp +>1 belong&0xffffff00 0x00203600 Terratec +>1 belong&0xffffff00 0x00203700 Proel SpA +>1 belong&0xffffff00 0x00203800 IBK MIDI +>1 belong&0xffffff00 0x00203900 IRCAM +>1 belong&0xffffff00 0x00203a00 Propellerhead Software +>1 belong&0xffffff00 0x00203b00 Red Sound Systems +>1 belong&0xffffff00 0x00203c00 Electron ESI AB +>1 belong&0xffffff00 0x00203d00 Sintefex Audio +>1 belong&0xffffff00 0x00203e00 Music and More +>1 belong&0xffffff00 0x00203f00 Amsaro +>1 belong&0xffffff00 0x00204000 CDS Advanced Technology +>1 belong&0xffffff00 0x00204100 Touched by Sound +>1 belong&0xffffff00 0x00204200 DSP Arts +>1 belong&0xffffff00 0x00204300 Phil Rees Music +>1 belong&0xffffff00 0x00204400 Stamer Musikanlagen GmbH +>1 belong&0xffffff00 0x00204500 Soundart +>1 belong&0xffffff00 0x00204600 C-Mexx Software +>1 belong&0xffffff00 0x00204700 Klavis Tech. +>1 belong&0xffffff00 0x00204800 Noteheads AB + +0 string T707 Roland TR-707 Data + +#------------------------------------------------------------------------------ +# sccs: file(1) magic for SCCS archives +# +# SCCS archive structure: +# \001h01207 +# \001s 00276/00000/00000 +# \001d D 1.1 87/09/23 08:09:20 ian 1 0 +# \001c date and time created 87/09/23 08:09:20 by ian +# \001e +# \001u +# \001U +# ... etc. +# Now '\001h' happens to be the same as the 3B20's a.out magic number (0550). +# *Sigh*. And these both came from various parts of the USG. +# Maybe we should just switch everybody from SCCS to RCS! +# Further, you can't just say '\001h0', because the five-digit number +# is a checksum that could (presumably) have any leading digit, +# and we don't have regular expression matching yet. +# Hence the following official kludge: +8 string \001s\ SCCS archive data +#------------------------------------------------------------------------------ +# allegro: file(1) magic for Allegro datafiles +# Toby Deshane +# +0 belong 0x736C6821 Allegro datafile (packed) +0 belong 0x736C682E Allegro datafile (not packed/autodetect) +0 belong 0x736C682B Allegro datafile (appended exe data) +#------------------------------------------------------------------------------ +# file(1) magic for cvs(1) files +# From Hendrik Scholz + +0 string /1\ :pserver: cvs password text file + + +#------------------------------------------------------------------------------ +# vicar: file(1) magic for VICAR files. +# +# From: Ossama Othman 32 string BYTE \b, 8 bits = VAX byte +>32 string HALF \b, 16 bits = VAX word = Fortran INTEGER*2 +>32 string FULL \b, 32 bits = VAX longword = Fortran INTEGER*4 +>32 string REAL \b, 32 bits = VAX longword = Fortran REAL*4 +>32 string DOUB \b, 64 bits = VAX quadword = Fortran REAL*8 +>32 string COMPLEX \b, 64 bits = VAX quadword = Fortran COMPLEX*8 +# VICAR label file +43 string SFDU_LABEL VICAR label file + +#------------------------------------------------------------------------------ +# varied.out: file(1) magic for various USG systems +# +# Herewith many of the object file formats used by USG systems. +# Most have been moved to files for a particular processor, +# and deleted if they duplicate other entries. +# +0 short 0610 Perkin-Elmer executable +# AMD 29K +0 beshort 0572 amd 29k coff noprebar executable +0 beshort 01572 amd 29k coff prebar executable +0 beshort 0160007 amd 29k coff archive +# Cray +6 beshort 0407 unicos (cray) executable +# Ultrix 4.3 +596 string \130\337\377\377 Ultrix core file +>600 string >\0 from '%s' +# BeOS and MAcOS PEF executables +# From: hplus@zilker.net (Jon Watte) +0 string Joy!peffpwpc header for PowerPC PEF executable +# +# ava assembler/linker Uros Platise +0 string avaobj AVR assembler object code +>7 string >\0 version '%s' +# gnu gmon magic From: Eugen Dedu +0 string gmon GNU prof performance data +>4 long x - version %ld +# From: Dave Pearson +# Harbour HRB files. +0 string \xc0HRB Harbour HRB file +>4 short x version %d + +# From: "Stefan A. Haubenthal" +0 belong 0x000001EB Plan 9 executable + +#------------------------------------------------------------------------------ +# c64: file(1) magic for various commodore 64 related files +# +# From + +0x16500 belong 0x12014100 D64 Image +0x16500 belong 0x12014180 D71 Image +0x61800 belong 0x28034400 D81 Image +0 string C64\40CARTRIDGE CCS C64 Emultar Cartridge Image +0 belong 0x43154164 X64 Image + +0 string GCR-1541 GCR Image +>8 byte x version: $i +>9 byte x tracks: %i + +9 string PSUR ARC archive (c64) +2 string -LH1- LHA archive (c64) + +0 string C64File PC64 Emulator file +>8 string >\0 "%s" +0 string C64Image PC64 Freezer Image + +0 beshort 0x38CD C64 PCLink Image +0 string CBM\144\0\0 Power 64 C64 Emulator Snapshot + +0 belong 0xFF424CFF WRAptor packer (c64) +#------------------------------------------------------------------------------ +# games: file(1) for games + +# Thomas M. Ott (ThMO) +1 string =WAD DOOM data, +>0 string =I main wad +>0 string =P patch wad +>0 byte x unknown junk + +# Fabio Bonelli +# Quake II - III data files +0 string IDP2 Quake II 3D Model file, +>20 long x %lu skin(s), +>8 long x (%lu x +>12 long x %lu), +>40 long x %lu frame(s), +>16 long x Frame size %lu bytes, +>24 long x %lu vertices/frame, +>28 long x %lu texture coordinates, +>32 long x %lu triangles/frame + +0 string IBSP Quake +>4 long 0x26 II Map file (BSP) +>4 long 0x2E III Map file (BSP) + +0 string IDS2 Quake II SP2 sprite file + +#--------------------------------------------------------------------------- +# Doom and Quake +# submitted by Nicolas Patrois + +# DOOM + +0 string IWAD DOOM or DOOM ][ world +0 string PWAD DOOM or DOOM ][ extension world + +0 string \xcb\x1dBoom\xe6\xff\x03\x01 Boom or linuxdoom demo +# some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01 + +24 string LxD\ 203 Linuxdoom save +>0 string x , name=%s +>44 string x , world=%s + +# Quake + +0 string PACK Quake I or II world or extension + +#0 string -1\x0a Quake I demo +#>30 string x version %.4s +#>61 string x level %s + +#0 string 5\x0a Quake I save + +# The levels + +# Quake 1 + +0 string 5\x0aIntroduction Quake I save: start Introduction +0 string 5\x0athe_Slipgate_Complex Quake I save: e1m1 The slipgate complex +0 string 5\x0aCastle_of_the_Damned Quake I save: e1m2 Castle of the damned +0 string 5\x0athe_Necropolis Quake I save: e1m3 The necropolis +0 string 5\x0athe_Grisly_Grotto Quake I save: e1m4 The grisly grotto +0 string 5\x0aZiggurat_Vertigo Quake I save: e1m8 Ziggurat vertigo (secret) +0 string 5\x0aGloom_Keep Quake I save: e1m5 Gloom keep +0 string 5\x0aThe_Door_To_Chthon Quake I save: e1m6 The door to Chthon +0 string 5\x0aThe_House_of_Chthon Quake I save: e1m7 The house of Chthon +0 string 5\x0athe_Installation Quake I save: e2m1 The installation +0 string 5\x0athe_Ogre_Citadel Quake I save: e2m2 The ogre citadel +0 string 5\x0athe_Crypt_of_Decay Quake I save: e2m3 The crypt of decay (dopefish lives!) +0 string 5\x0aUnderearth Quake I save: e2m7 Underearth (secret) +0 string 5\x0athe_Ebon_Fortress Quake I save: e2m4 The ebon fortress +0 string 5\x0athe_Wizard's_Manse Quake I save: e2m5 The wizard's manse +0 string 5\x0athe_Dismal_Oubliette Quake I save: e2m6 The dismal oubliette +0 string 5\x0aTermination_Central Quake I save: e3m1 Termination central +0 string 5\x0aVaults_of_Zin Quake I save: e3m2 Vaults of Zin +0 string 5\x0athe_Tomb_of_Terror Quake I save: e3m3 The tomb of terror +0 string 5\x0aSatan's_Dark_Delight Quake I save: e3m4 Satan's dark delight +0 string 5\x0athe_Haunted_Halls Quake I save: e3m7 The haunted halls (secret) +0 string 5\x0aWind_Tunnels Quake I save: e3m5 Wind tunnels +0 string 5\x0aChambers_of_Torment Quake I save: e3m6 Chambers of torment +0 string 5\x0athe_Sewage_System Quake I save: e4m1 The sewage system +0 string 5\x0aThe_Tower_of_Despair Quake I save: e4m2 The tower of despair +0 string 5\x0aThe_Elder_God_Shrine Quake I save: e4m3 The elder god shrine +0 string 5\x0athe_Palace_of_Hate Quake I save: e4m4 The palace of hate +0 string 5\x0aHell's_Atrium Quake I save: e4m5 Hell's atrium +0 string 5\x0athe_Nameless_City Quake I save: e4m8 The nameless city (secret) +0 string 5\x0aThe_Pain_Maze Quake I save: e4m6 The pain maze +0 string 5\x0aAzure_Agony Quake I save: e4m7 Azure agony +0 string 5\x0aShub-Niggurath's_Pit Quake I save: end Shub-Niggurath's pit + +# Quake DeathMatch levels + +0 string 5\x0aPlace_of_Two_Deaths Quake I save: dm1 Place of two deaths +0 string 5\x0aClaustrophobopolis Quake I save: dm2 Claustrophobopolis +0 string 5\x0aThe_Abandoned_Base Quake I save: dm3 The abandoned base +0 string 5\x0aThe_Bad_Place Quake I save: dm4 The bad place +0 string 5\x0aThe_Cistern Quake I save: dm5 The cistern +0 string 5\x0aThe_Dark_Zone Quake I save: dm6 The dark zone + +# Scourge of Armagon + +0 string 5\x0aCommand_HQ Quake I save: start Command HQ +0 string 5\x0aThe_Pumping_Station Quake I save: hip1m1 The pumping station +0 string 5\x0aStorage_Facility Quake I save: hip1m2 Storage facility +0 string 5\x0aMilitary_Complex Quake I save: hip1m5 Military complex (secret) +0 string 5\x0athe_Lost_Mine Quake I save: hip1m3 The lost mine +0 string 5\x0aResearch_Facility Quake I save: hip1m4 Research facility +0 string 5\x0aAncient_Realms Quake I save: hip2m1 Ancient realms +0 string 5\x0aThe_Gremlin's_Domain Quake I save: hip2m6 The gremlin's domain (secret) +0 string 5\x0aThe_Black_Cathedral Quake I save: hip2m2 The black cathedral +0 string 5\x0aThe_Catacombs Quake I save: hip2m3 The catacombs +0 string 5\x0athe_Crypt__ Quake I save: hip2m4 The crypt +0 string 5\x0aMortum's_Keep Quake I save: hip2m5 Mortum's keep +0 string 5\x0aTur_Torment Quake I save: hip3m1 Tur torment +0 string 5\x0aPandemonium Quake I save: hip3m2 Pandemonium +0 string 5\x0aLimbo Quake I save: hip3m3 Limbo +0 string 5\x0athe_Edge_of_Oblivion Quake I save: hipdm1 The edge of oblivion (secret) +0 string 5\x0aThe_Gauntlet Quake I save: hip3m4 The gauntlet +0 string 5\x0aArmagon's_Lair Quake I save: hipend Armagon's lair + +# Malice + +0 string 5\x0aThe_Academy Quake I save: start The academy +0 string 5\x0aThe_Lab Quake I save: d1 The lab +0 string 5\x0aArea_33 Quake I save: d1b Area 33 +0 string 5\x0aSECRET_MISSIONS Quake I save: d3b Secret missions +0 string 5\x0aThe_Hospital Quake I save: d10 The hospital (secret) +0 string 5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret) +0 string 5\x0aBACK_2_MALICE Quake I save: d4b Back to Malice +0 string 5\x0aArea44 Quake I save: d1c Area 44 +0 string 5\x0aTakahiro_Towers Quake I save: d2 Takahiro towers +0 string 5\x0aA_Rat's_Life Quake I save: d3 A rat's life +0 string 5\x0aInto_The_Flood Quake I save: d4 Into the flood +0 string 5\x0aThe_Flood Quake I save: d5 The flood +0 string 5\x0aNuclear_Plant Quake I save: d6 Nuclear plant +0 string 5\x0aThe_Incinerator_Plant Quake I save: d7 The incinerator plant +0 string 5\x0aThe_Foundry Quake I save: d7b The foundry +0 string 5\x0aThe_Underwater_Base Quake I save: d8 The underwater base +0 string 5\x0aTakahiro_Base Quake I save: d9 Takahiro base +0 string 5\x0aTakahiro_Laboratories Quake I save: d12 Takahiro laboratories +0 string 5\x0aStayin'_Alive Quake I save: d13 Stayin' alive +0 string 5\x0aB.O.S.S._HQ Quake I save: d14 B.O.S.S. HQ +0 string 5\x0aSHOWDOWN! Quake I save: d15 Showdown! + +# Malice DeathMatch levels + +0 string 5\x0aThe_Seventh_Precinct Quake I save: ddm1 The seventh precinct +0 string 5\x0aSub_Station Quake I save: ddm2 Sub station +0 string 5\x0aCrazy_Eights! Quake I save: ddm3 Crazy eights! +0 string 5\x0aEast_Side_Invertationa Quake I save: ddm4 East side invertationa +0 string 5\x0aSlaughterhouse Quake I save: ddm5 Slaughterhouse +0 string 5\x0aDOMINO Quake I save: ddm6 Domino +0 string 5\x0aSANDRA'S_LADDER Quake I save: ddm7 Sandra's ladder + + +0 string MComprHD MAME CHD compressed hard disk image, +>12 belong x version %lu +#------------------------------------------------------------------------------ +# Mavroyanopoulos Nikos +# mcrypt: file(1) magic for mcrypt 2.2.x; +0 string \0m\3 mcrypt 2.5 encrypted data, +>4 string >\0 algorithm: %s, +>>&1 leshort >0 keysize: %d bytes, +>>>&0 string >\0 mode: %s, + +0 string \0m\2 mcrypt 2.2 encrypted data, +>3 byte 0 algorithm: blowfish-448, +>3 byte 1 algorithm: DES, +>3 byte 2 algorithm: 3DES, +>3 byte 3 algorithm: 3-WAY, +>3 byte 4 algorithm: GOST, +>3 byte 6 algorithm: SAFER-SK64, +>3 byte 7 algorithm: SAFER-SK128, +>3 byte 8 algorithm: CAST-128, +>3 byte 9 algorithm: xTEA, +>3 byte 10 algorithm: TWOFISH-128, +>3 byte 11 algorithm: RC2, +>3 byte 12 algorithm: TWOFISH-192, +>3 byte 13 algorithm: TWOFISH-256, +>3 byte 14 algorithm: blowfish-128, +>3 byte 15 algorithm: blowfish-192, +>3 byte 16 algorithm: blowfish-256, +>3 byte 100 algorithm: RC6, +>3 byte 101 algorithm: IDEA, +>4 byte 0 mode: CBC, +>4 byte 1 mode: ECB, +>4 byte 2 mode: CFB, +>4 byte 3 mode: OFB, +>4 byte 4 mode: nOFB, +>5 byte 0 keymode: 8bit +>5 byte 1 keymode: 4bit +>5 byte 2 keymode: SHA-1 hash +>5 byte 3 keymode: MD5 hash + +#------------------------------------------------------------------------------ +# archive: file(1) magic for archive formats (see also "msdos" for self- +# extracting compressed archives) +# +# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc. +# pre-POSIX "tar" archives are handled in the C code. + +# POSIX tar archives +257 string ustar\0 POSIX tar archive +257 string ustar\040\040\0 GNU tar archive + +# cpio archives +# +# Yes, the top two "cpio archive" formats *are* supposed to just be "short". +# The idea is to indicate archives produced on machines with the same +# byte order as the machine running "file" with "cpio archive", and +# to indicate archives produced on machines with the opposite byte order +# from the machine running "file" with "byte-swapped cpio archive". +# +# The SVR4 "cpio(4)" hints that there are additional formats, but they +# are defined as "short"s; I think all the new formats are +# character-header formats and thus are strings, not numbers. +0 short 070707 cpio archive +0 short 0143561 byte-swapped cpio archive +0 string 070707 ASCII cpio archive (pre-SVR4 or odc) +0 string 070701 ASCII cpio archive (SVR4 with no CRC) +0 string 070702 ASCII cpio archive (SVR4 with CRC) + +# Debian package (needs to go before regular portable archives) +# +0 string !\ndebian +>8 string debian-split part of multipart Debian package +>8 string debian-binary Debian binary package +>68 string >\0 (format %s) +>81 string bz2 \b, uses bzip2 compression +>84 string gz \b, uses gzip compression +#>136 ledate x created: %s + +# other archives +0 long 0177555 very old archive +0 short 0177555 very old PDP-11 archive +0 long 0177545 old archive +0 short 0177545 old PDP-11 archive +0 long 0100554 apl workspace +0 string = archive + +# MIPS archive (needs to go before regular portable archives) +# +0 string !\n__________E MIPS archive +>20 string U with MIPS Ucode members +>21 string L with MIPSEL members +>21 string B with MIPSEB members +>19 string L and an EL hash table +>19 string B and an EB hash table +>22 string X -- out of date + +0 string -h- Software Tools format archive text + +# +# XXX - why are there multiple thingies? Note that 0x213c6172 is +# "! current ar archive +# 0 long 0x213c6172 archive file +# +# and for SVR1 archives, we have: +# +# 0 string \ System V Release 1 ar archive +# 0 string = archive +# +# XXX - did Aegis really store shared libraries, breakpointed modules, +# and absolute code program modules in the same format as new-style +# "ar" archives? +# +0 string ! current ar archive +>8 string __.SYMDEF random library +>0 belong =65538 - pre SR9.5 +>0 belong =65539 - post SR9.5 +>0 beshort 2 - object archive +>0 beshort 3 - shared library module +>0 beshort 4 - debug break-pointed module +>0 beshort 5 - absolute code program module +0 string \ System V Release 1 ar archive +0 string = archive +# +# XXX - from "vax", which appears to collect a bunch of byte-swapped +# thingies, to help you recognize VAX files on big-endian machines; +# with "leshort", "lelong", and "string", that's no longer necessary.... +# +0 belong 0x65ff0000 VAX 3.0 archive +0 belong 0x3c61723e VAX 5.0 archive +# +0 long 0x213c6172 archive file +0 lelong 0177555 very old VAX archive +0 leshort 0177555 very old PDP-11 archive +# +# XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus +# be a random library (it said 0xff65 rather than 0177545). +# +0 lelong 0177545 old VAX archive +>8 string __.SYMDEF random library +0 leshort 0177545 old PDP-11 archive +>8 string __.SYMDEF random library +# +# From "pdp" (but why a 4-byte quantity?) +# +0 lelong 0x39bed PDP-11 old archive +0 lelong 0x39bee PDP-11 4.0 archive + +# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com) +# +# The first byte is the magic (0x1a), byte 2 is the compression type for +# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS +# filename of the first file (null terminated). Since some types collide +# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%), +# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo. +0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW +0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed +0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed +0 lelong&0x8080ffff 0x0000031a ARC archive data, packed +0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed +0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched + +# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk) +# I can't create either SPARK or ArcFS archives so I have not tested this stuff +# [GRR: the original entries collide with ARC, above; replaced with combined +# version (not tested)] +#0 byte 0x1a RISC OS archive +#>1 string archive (ArcFS format) +#0 string \032archive RISC OS archive (ArcFS format) +0 string \032 RISC OS archive (spark format) +0 string Archive\000 RISC OS archive (ArcFS format) + +# ARJ archiver (jason@jarthur.Claremont.EDU) +0 leshort 0xea60 ARJ archive data +>5 byte x \b, v%d, +>8 byte &0x04 multi-volume, +>8 byte &0x10 slash-switched, +>8 byte &0x20 backup, +>34 string x original name: %s, +>7 byte 0 os: MS-DOS +>7 byte 1 os: PRIMOS +>7 byte 2 os: Unix +>7 byte 3 os: Amiga +>7 byte 4 os: Macintosh +>7 byte 5 os: OS/2 +>7 byte 6 os: Apple ][ GS +>7 byte 7 os: Atari ST +>7 byte 8 os: NeXT +>7 byte 9 os: VAX/VMS +>3 byte >0 %d] + +# HA archiver (Greg Roelofs, newt@uchicago.edu) +# This is a really bad format. A file containing HAWAII will match this... +#0 string HA HA archive data, +#>2 leshort =1 1 file, +#>2 leshort >1 %u files, +#>4 byte&0x0f =0 first is type CPY +#>4 byte&0x0f =1 first is type ASC +#>4 byte&0x0f =2 first is type HSC +#>4 byte&0x0f =0x0e first is type DIR +#>4 byte&0x0f =0x0f first is type SPECIAL + +# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz) +0 string HPAK HPACK archive data + +# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net +0 string \351,\001JAM\ JAM archive, +>7 string >\0 version %.4s +>0x26 byte =0x27 - +>>0x2b string >\0 label %.11s, +>>0x27 lelong x serial %08x, +>>0x36 string >\0 fstype %.8s + +# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu) +2 string -lh0- LHarc 1.x archive data [lh0] +2 string -lh1- LHarc 1.x archive data [lh1] +2 string -lz4- LHarc 1.x archive data [lz4] +2 string -lz5- LHarc 1.x archive data [lz5] +# [never seen any but the last; -lh4- reported in comp.compression:] +2 string -lzs- LHa 2.x? archive data [lzs] +2 string -lh\40- LHa 2.x? archive data [lh ] +2 string -lhd- LHa 2.x? archive data [lhd] +2 string -lh2- LHa 2.x? archive data [lh2] +2 string -lh3- LHa 2.x? archive data [lh3] +2 string -lh4- LHa (2.x) archive data [lh4] +2 string -lh5- LHa (2.x) archive data [lh5] +2 string -lh6- LHa (2.x) archive data [lh6] +2 string -lh7- LHa (2.x) archive data [lh7] +>20 byte x - header level %d + +# RAR archiver (Greg Roelofs, newt@uchicago.edu) +0 string Rar! RAR archive data, +>44 byte x v%0x, +>35 byte 0 os: MS-DOS +>35 byte 1 os: OS/2 +>35 byte 2 os: Win32 +>35 byte 3 os: Unix + +# SQUISH archiver (Greg Roelofs, newt@uchicago.edu) +0 string SQSH squished archive data (Acorn RISCOS) + +# UC2 archiver (Greg Roelofs, newt@uchicago.edu) +# I can't figure out the self-extracting form of these buggers... +0 string UC2\x1a UC2 archive data + +# ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) +0 string PK\003\004 Zip archive data +>4 byte 0x09 \b, at least v0.9 to extract +>4 byte 0x0a \b, at least v1.0 to extract +>4 byte 0x0b \b, at least v1.1 to extract +>4 byte 0x14 \b, at least v2.0 to extract + +# Zoo archiver +20 lelong 0xfdc4a7dc Zoo archive data +>4 byte >48 \b, v%c. +>>6 byte >47 \b%c +>>>7 byte >47 \b%c +>32 byte >0 \b, modify: v%d +>>33 byte x \b.%d+ +>42 lelong 0xfdc4a7dc \b, +>>70 byte >0 extract: v%d +>>>71 byte x \b.%d+ + +# Shell archives +10 string #\ This\ is\ a\ shell\ archive shell archive text + +# +# LBR. NB: May conflict with the questionable +# "binary Computer Graphics Metafile" format. +# +0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data +# +# PMA (CP/M derivative of LHA) +# +2 string -pm0- PMarc archive data [pm0] +2 string -pm1- PMarc archive data [pm1] +2 string -pm2- PMarc archive data [pm2] +2 string -pms- PMarc SFX archive (CP/M, DOS) +5 string -pc1- PopCom compressed executable (CP/M) + +# From Rafael Laboissiere +# The Project Revision Control System (see +# http://prcs.sourceforge.net) generates a packaged project +# file which is recognized by the following entry: +0 leshort 0xeb81 PRCS packaged project + +# Microsoft cabinets +# by David Necas (Yeti) +#0 string MSCF\0\0\0\0 Microsoft cabinet file data, +#>25 byte x v%d +#>24 byte x \b.%d +# MPi: All CABs have version 1.3, so this is pointless. +# Better magic in debian-additions. + +# GTKtalog catalogs +# by David Necas (Yeti) +4 string gtktalog\ GTKtalog catalog data, +>13 string 3 version 3 +>>14 beshort 0x677a (gzipped) +>>14 beshort !0x677a (not gzipped) +>13 string >3 version %s + +############################################################################ +# Parity archive reconstruction file, the 'par' file format now used on Usenet. +0 string PAR\0 PARity archive data +>48 leshort =0 - Index file +>48 leshort >0 - file number %d + +# Felix von Leitner +0 string d8:announce BitTorrent file + +# Atari MSA archive - Teemu Hukkanen +0 beshort 0x0e0f Atari MSA archive data +>2 beshort x \b, %d sectors per track +>4 beshort 0 \b, 1 sided +>4 beshort 1 \b, 2 sided +>6 beshort x \b, starting track: %d +>8 beshort x \b, ending track: %d + +# Alternate ZIP string (amc@arwen.cs.berkeley.edu) +0 string PK00PK\003\004 Zip archive data + +# ACE archive (from http://www.wotsit.org/download.asp?f=ace) +# by Stefan `Sec` Zehl +7 string **ACE** ACE compressed archive +>15 byte >0 version %d +>16 byte =0x00 \b, from MS-DOS +>16 byte =0x01 \b, from OS/2 +>16 byte =0x02 \b, from Win/32 +>16 byte =0x03 \b, from Unix +>16 byte =0x04 \b, from MacOS +>16 byte =0x05 \b, from WinNT +>16 byte =0x06 \b, from Primos +>16 byte =0x07 \b, from AppleGS +>16 byte =0x08 \b, from Atari +>16 byte =0x09 \b, from Vax/VMS +>16 byte =0x0A \b, from Amiga +>16 byte =0x0B \b, from Next +>14 byte x \b, version %d to extract +>5 leshort &0x0080 \b, multiple volumes, +>>17 byte x \b (part %d), +>5 leshort &0x0002 \b, contains comment +>5 leshort &0x0200 \b, sfx +>5 leshort &0x0400 \b, small dictionary +>5 leshort &0x0800 \b, multi-volume +>5 leshort &0x1000 \b, contains AV-String +>>30 string\x16*UNREGISTERED\x20VERSION* (unregistered) +>5 leshort &0x2000 \b, with recovery record +>5 leshort &0x4000 \b, locked +>5 leshort &0x8000 \b, solid +# Date in MS-DOS format (whatever that is) +#>18 lelong x Created on + +# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann +# +0x1A string sfArk sfArk compressed Soundfont +>0x15 string 2 +>>0x1 string >\0 Version %s +>>0x2A string >\0 : %s + +#------------------------------------------------------------------------------ +# citrus locale declaration +# + +0 string RuneCT Citrus locale declaration for LC_CTYPE + + +#------------------------------------------------------------------------------ +# compress: file(1) magic for pure-compression formats (no archives) +# +# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc. +# +# Formats for various forms of compressed data +# Formats for "compress" proper have been moved into "compress.c", +# because it tries to uncompress it to figure out what's inside. + +# standard unix compress +0 string \037\235 compress'd data +>2 byte&0x80 >0 block compressed +>2 byte&0x1f x %d bits + +# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver) +# Edited by Chris Chittleborough , March 2002 +# * Original filename is only at offset 10 if "extra field" absent +# * Produce shorter output - notably, only report compression methods +# other than 8 ("deflate", the only method defined in RFC 1952). +0 string \037\213 gzip compressed data +>2 byte <8 \b, reserved method +>2 byte >8 \b, unknown method +>3 byte &0x01 \b, ASCII +>3 byte &0x02 \b, continuation +>3 byte &0x04 \b, extra field +>3 byte&0xC =0x08 +>>10 string x \b, was "%s" +>9 byte =0x00 \b, from MS-DOS +>9 byte =0x01 \b, from Amiga +>9 byte =0x02 \b, from VMS +>9 byte =0x03 \b, from Unix +>9 byte =0x05 \b, from Atari +>9 byte =0x06 \b, from OS/2 +>9 byte =0x07 \b, from MacOS +>9 byte =0x0A \b, from Tops/20 +>9 byte =0x0B \b, from Win/32 +>3 byte &0x10 \b, comment +>3 byte &0x20 \b, encrypted +### >4 ledate x last modified: %s, +>8 byte 2 \b, max compression +>8 byte 4 \b, max speed + +# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis +0 string \037\036 packed data +>2 belong >1 \b, %d characters originally +>2 belong =1 \b, %d character originally +# +# This magic number is byte-order-independent. +0 short 0x1f1f old packed data + +# XXX - why *two* entries for "compacted data", one of which is +# byte-order independent, and one of which is byte-order dependent? +# +0 short 0x1fff compacted data +# This string is valid for SunOS (BE) and a matching "short" is listed +# in the Ultrix (LE) magic file. +0 string \377\037 compacted data +0 short 0145405 huf output + +# bzip2 +0 string BZh bzip2 compressed data +>3 byte >47 \b, block size = %c00k + +# squeeze and crunch +# Michael Haardt +0 beshort 0x76FF squeezed data, +>4 string x original name %s +0 beshort 0x76FE crunched data, +>2 string x original name %s +0 beshort 0x76FD LZH compressed data, +>2 string x original name %s + +# Freeze +0 string \037\237 frozen file 2.1 +0 string \037\236 frozen file 1.0 (or gzip 0.5) + +# SCO compress -H (LZH) +0 string \037\240 SCO compress -H (LZH) data + +# European GSM 06.10 is a provisional standard for full-rate speech +# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse +# excitation/long term prediction) coding at 13 kbit/s. +# +# There's only a magic nibble (4 bits); that nibble repeats every 33 +# bytes. This isn't suited for use, but maybe we can use it someday. +# +# This will cause very short GSM files to be declared as data and +# mismatches to be declared as data too! +#0 byte&0xF0 0xd0 data +#>33 byte&0xF0 0xd0 +#>66 byte&0xF0 0xd0 +#>99 byte&0xF0 0xd0 +#>132 byte&0xF0 0xd0 GSM 06.10 compressed audio + +# bzip a block-sorting file compressor +# by Julian Seward and others +# +0 string BZ bzip compressed data +>2 byte x \b, version: %c +>3 string =1 \b, compression block size 100k +>3 string =2 \b, compression block size 200k +>3 string =3 \b, compression block size 300k +>3 string =4 \b, compression block size 400k +>3 string =5 \b, compression block size 500k +>3 string =6 \b, compression block size 600k +>3 string =7 \b, compression block size 700k +>3 string =8 \b, compression block size 800k +>3 string =9 \b, compression block size 900k + +# lzop from +0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data +>9 beshort <0x0940 +>>9 byte&0xf0 =0x00 - version 0. +>>9 beshort&0x0fff x \b%03x, +>>13 byte 1 LZO1X-1, +>>13 byte 2 LZO1X-1(15), +>>13 byte 3 LZO1X-999, +## >>22 bedate >0 last modified: %s, +>>14 byte =0x00 os: MS-DOS +>>14 byte =0x01 os: Amiga +>>14 byte =0x02 os: VMS +>>14 byte =0x03 os: Unix +>>14 byte =0x05 os: Atari +>>14 byte =0x06 os: OS/2 +>>14 byte =0x07 os: MacOS +>>14 byte =0x0A os: Tops/20 +>>14 byte =0x0B os: WinNT +>>14 byte =0x0E os: Win32 +>9 beshort >0x0939 +>>9 byte&0xf0 =0x00 - version 0. +>>9 byte&0xf0 =0x10 - version 1. +>>9 byte&0xf0 =0x20 - version 2. +>>9 beshort&0x0fff x \b%03x, +>>15 byte 1 LZO1X-1, +>>15 byte 2 LZO1X-1(15), +>>15 byte 3 LZO1X-999, +## >>25 bedate >0 last modified: %s, +>>17 byte =0x00 os: MS-DOS +>>17 byte =0x01 os: Amiga +>>17 byte =0x02 os: VMS +>>17 byte =0x03 os: Unix +>>17 byte =0x05 os: Atari +>>17 byte =0x06 os: OS/2 +>>17 byte =0x07 os: MacOS +>>17 byte =0x0A os: Tops/20 +>>17 byte =0x0B os: WinNT +>>17 byte =0x0E os: Win32 + +# 4.3BSD-Quasijarus Strong Compression +# http://minnie.tuhs.org/Quasijarus/compress.html +0 string \037\241 Quasijarus strong compressed data + +# From: Cory Dikkers +0 string XPKF Amiga xpkf.library compressed data +0 string PP11 Power Packer 1.1 compressed data +0 string PP20 Power Packer 2.0 compressed data, +>4 belong 0x09090909 fast compression +>4 belong 0x090A0A0A mediocre compression +>4 belong 0x090A0B0B good compression +>4 belong 0x090A0C0C very good compression +>4 belong 0x090A0C0D best compression + +# 7z archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at) +# http://www.7-zip.org or DOC/7zFormat.txt +# +0 string 7z\274\257\047\034 7z archive data, +>6 byte x version %d +>7 byte x \b.%d + +# AFX compressed files (Wolfram Kleff) +2 string -afx- AFX compressed file data + +#------------------------------------------------------------------------------ +# fsav: file(1) magic for datafellows fsav virus definition files +# Anthon van der Neut (anthon@mnt.org) +0 beshort 0x1575 fsav (linux) macro virus +>8 leshort >0 (%d- +>11 byte >0 \b%02d- +>10 byte >0 \b%02d) + +# comment this out for now because it regognizes every file where +# the eighth character is \n +#8 byte 0x0a +#>12 byte 0x07 +#>11 leshort >0 fsav (linux) virus (%d- +#>10 byte 0 \b01- +#>10 byte 1 \b02- +#>10 byte 2 \b03- +#>10 byte 3 \b04- +#>10 byte 4 \b05- +#>10 byte 5 \b06- +#>10 byte 6 \b07- +#>10 byte 7 \b08- +#>10 byte 8 \b08- +#>10 byte 9 \b10- +#>10 byte 10 \b11- +#>10 byte 11 \b12- +#>9 byte >0 \b%02d) + +#------------------------------------------------------------------------------ +# GEOS files (Vidar Madsen, vidar@gimp.org) +# semi-commonly used in embedded and handheld systems. +0 belong 0xc745c153 GEOS +>40 byte 1 executable +>40 byte 2 VMFile +>40 byte 3 binary +>40 byte 4 directory label +>40 byte <1 unknown +>40 byte >4 unknown +>4 string >\0 \b, name "%s" +#>44 short x \b, version %d +#>46 short x \b.%d +#>48 short x \b, rev %d +#>50 short x \b.%d +#>52 short x \b, proto %d +#>54 short x \br%d +#>168 string >\0 \b, copyright "%s" +#------------------------------------------------------------ +# Java ByteCode +# From Larry Schwimmer (schwim@cs.stanford.edu) +0 belong 0xcafebabe compiled Java class data, +>6 beshort x version %d. +>4 beshort x \b%d +#------------------------------------------------------------ +# Java serialization +# From Martin Pool (m.pool@pharos.com.au) +0 beshort 0xaced Java serialization data +>2 beshort >0x0004 \b, version %d + +#------------------------------------------------------------------------------ +# mlssa: file(1) magic for MLSSA datafiles +# +0 lelong 0xffffabcd MLSSA datafile, +>4 leshort x algorithm %d, +>10 lelong x %d samples + +#------------------------------------------------------------------------------ +# mmdf: file(1) magic for MMDF mail files +# +0 string \001\001\001\001 MMDF mailbox + +#------------------------------------------------------------------------------ +# msdos: file(1) magic for MS-DOS files +# + +# .BAT files (Daniel Quinlan, quinlan@yggdrasil.com) +0 string/c @echo\ off MS-DOS batch file text + +# XXX - according to Microsoft's spec, at an offset of 0x3c in a +# PE-format executable is the offset in the file of the PE header; +# unfortunately, that's a little-endian offset, and there's no way +# to specify an indirect offset with a specified byte order. +# So, for now, we assume the standard MS-DOS stub, which puts the +# PE header at 0x80 = 128. +# +# Required OS version and subsystem version were 4.0 on some NT 3.51 +# executables built with Visual C++ 4.0, so it's not clear that +# they're interesting. The user version was 0.0, but there's +# probably some linker directive to set it. The linker version was +# 3.0, except for one ".exe" which had it as 4.20 (same damn linker!). +# +128 string PE\0\0 MS Windows PE +>150 leshort&0x0100 >0 32-bit +>132 leshort 0x0 unknown processor +>132 leshort 0x14c Intel 80386 +>132 leshort 0x166 MIPS R4000 +>132 leshort 0x184 Alpha +>132 leshort 0x268 Motorola 68000 +>132 leshort 0x1f0 PowerPC +>132 leshort 0x290 PA-RISC +>148 leshort >27 +>>220 leshort 0 unknown subsystem +>>220 leshort 1 native +>>220 leshort 2 GUI +>>220 leshort 3 console +>>220 leshort 7 POSIX +>150 leshort&0x2000 =0 executable +#>>136 ledate x stamp %s, +>>150 leshort&0x0001 >0 not relocatable +#>>150 leshort&0x0004 =0 with line numbers, +#>>150 leshort&0x0008 =0 with local symbols, +#>>150 leshort&0x0200 =0 with debug symbols, +>>150 leshort&0x1000 >0 system file +#>>148 leshort >0 +#>>>154 byte x linker %d +#>>>155 byte x \b.%d, +#>>148 leshort >27 +#>>>192 leshort x requires OS %d +#>>>194 leshort x \b.%d, +#>>>196 leshort x user version %d +#>>>198 leshort x \b.%d, +#>>>200 leshort x subsystem version %d +#>>>202 leshort x \b.%d, +>150 leshort&0x2000 >0 DLL +#>>136 ledate x stamp %s, +>>150 leshort&0x0001 >0 not relocatable +#>>150 leshort&0x0004 =0 with line numbers, +#>>150 leshort&0x0008 =0 with local symbols, +#>>150 leshort&0x0200 =0 with debug symbols, +>>150 leshort&0x1000 >0 system file +#>>148 leshort >0 +#>>>154 byte x linker %d +#>>>155 byte x \b.%d, +#>>148 leshort >27 +#>>>192 leshort x requires OS %d +#>>>194 leshort x \b.%d, +#>>>196 leshort x user version %d +#>>>198 leshort x \b.%d, +#>>>200 leshort x subsystem version %d +#>>>202 leshort x \b.%d, +0 leshort 0x14c MS Windows COFF Intel 80386 object file +#>4 ledate x stamp %s +0 leshort 0x166 MS Windows COFF MIPS R4000 object file +#>4 ledate x stamp %s +0 leshort 0x184 MS Windows COFF Alpha object file +#>4 ledate x stamp %s +0 leshort 0x268 MS Windows COFF Motorola 68000 object file +#>4 ledate x stamp %s +0 leshort 0x1f0 MS Windows COFF PowerPC object file +#>4 ledate x stamp %s +0 leshort 0x290 MS Windows COFF PA-RISC object file +#>4 ledate x stamp %s + +# .EXE formats (Greg Roelofs, newt@uchicago.edu) +# +0 string MZ MS-DOS executable (EXE) +>24 string @ \b, OS/2 or MS Windows +>>0xe7 string LH/2\ Self-Extract \b, %s +>>0xe9 string PKSFX2 \b, %s +>>122 string Windows\ self-extracting\ ZIP \b, %s +>0x1c string RJSX\xff\xff \b, ARJ SFX +>0x1c string diet\xf9\x9c \b, diet compressed +>0x1c string LZ09 \b, LZEXE v0.90 compressed +>0x1c string LZ91 \b, LZEXE v0.91 compressed +>0x1e string Copyright\ 1989-1990\ PKWARE\ Inc. \b, PKSFX +# JM: 0x1e "PKLITE Copr. 1990-92 PKWARE Inc. All Rights Reserved\7\0\0\0" +>0x1e string PKLITE\ Copr. \b, %.6s compressed +>0x24 string LHa's\ SFX \b, %.15s +>0x24 string LHA's\ SFX \b, %.15s +>1638 string -lh5- \b, LHa SFX archive v2.13S +>7195 string Rar! \b, RAR self-extracting archive +# +# [GRR 950118: file 3.15 has a buffer-size limitation; offsets bigger than +# 8161 bytes are ignored. To make the following entries work, increase +# HOWMANY in file.h to 32K at least, and maybe to 70K or more for OS/2, +# NT/Win32 and VMS.] +# [GRR: some company sells a self-extractor/displayer for image data(!)] +# +>11696 string PK\003\004 \b, PKZIP SFX archive v1.1 +>13297 string PK\003\004 \b, PKZIP SFX archive v1.93a +>15588 string PK\003\004 \b, PKZIP2 SFX archive v1.09 +>15770 string PK\003\004 \b, PKZIP SFX archive v2.04g +>28374 string PK\003\004 \b, PKZIP2 SFX archive v1.02 +# +# Info-ZIP self-extractors +# these are the DOS versions: +>25115 string PK\003\004 \b, Info-ZIP SFX archive v5.12 +>26331 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption +# these are the OS/2 versions (OS/2 is flagged above): +>47031 string PK\003\004 \b, Info-ZIP SFX archive v5.12 +>49845 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption +# this is the NT/Win32 version: +>69120 string PK\003\004 \b, Info-ZIP NT SFX archive v5.12 w/decryption +# +# TELVOX Teleinformatica CODEC self-extractor for OS/2: +>49801 string \x79\xff\x80\xff\x76\xff \b, CODEC archive v3.21 +>>49824 leshort =1 \b, 1 file +>>49824 leshort >1 \b, %u files + +# .COM formats (Daniel Quinlan, quinlan@yggdrasil.com) +# Uncommenting only the first two lines will cover about 2/3 of COM files, +# but it isn't feasible to match all COM files since there must be at least +# two dozen different one-byte "magics". +#0 byte 0xe9 MS-DOS executable (COM) +#>6 string SFX\ of\ LHarc (%s) +#0 byte 0x8c MS-DOS executable (COM) +# 0xeb conflicts with "sequent" magic +#0 byte 0xeb MS-DOS executable (COM) +#0 byte 0xb8 MS-DOS executable (COM) + +# miscellaneous formats +0 string LZ MS-DOS executable (built-in) +#0 byte 0xf0 MS-DOS program library data +# + +# +# Windows Registry files. +# +0 string regf Windows NT registry file +0 string CREG Windows 95 registry file + + +# AAF files: +# Stuart Cunningham +0 string \320\317\021\340\241\261\032\341AAFB\015\000OM\006\016\053\064\001\001\001\377 AAF legacy file using MS Structured Storage +>30 byte 9 (512B sectors) +>30 byte 12 (4kB sectors) +0 string \320\317\021\340\241\261\032\341\001\002\001\015\000\002\000\000\006\016\053\064\003\002\001\001 AAF file using MS Structured Storage +>30 byte 9 (512B sectors) +>30 byte 12 (4kB sectors) + +# Popular applications +2080 string Microsoft\ Word\ 6.0\ Document %s +2080 string Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data +# Pawel Wiecek (for polish Word) +2112 string MSWordDoc Microsoft Word document data +# +0 belong 0x31be0000 Microsoft Word Document +# +0 string PO^Q` Microsoft Word 6.0 Document +# +0 string \376\067\0\043 Microsoft Office Document +0 string \320\317\021\340\241\261\032\341 Microsoft Office Document +0 string \333\245-\0\0\0 Microsoft Office Document +# +2080 string Microsoft\ Excel\ 5.0\ Worksheet %s +2080 string Foglio\ di\ lavoro\ Microsoft\ Exce %s +# +# Pawel Wiecek (for polish Excel) +2114 string Biff5 Microsoft Excel 5.0 Worksheet +# Italian MS-Excel +2121 string Biff5 Microsoft Excel 5.0 Worksheet +0 string \x09\x04\x06\x00\x00\x00\x10\x00 Microsoft Excel Worksheet +# +0 belong 0x00001a00 Lotus 1-2-3 +>4 belong 0x00100400 wk3 document data +>4 belong 0x02100400 wk4 document data +>4 belong 0x07800100 fm3 or fmb document data +>4 belong 0x07800000 fm3 or fmb document data +# +0 belong 0x00000200 Lotus 1-2-3 +>4 belong 0x06040600 wk1 document data +>4 belong 0x06800200 fmt document data + +# Help files +0 string ?_\3\0 MS Windows Help Data + +# DeIsL1.isu what this is I don't know +0 string \161\250\000\000\001\002 DeIsL1.isu whatever that is + +# Winamp .avs +#0 string Nullsoft\ AVS\ Preset\ \060\056\061\032 A plug in for Winamp ms-windows Freeware media player +0 string Nullsoft\ AVS\ Preset\ Winamp plug in + +# Hyper terminal: +0 string HyperTerminal\ hyperterm +>15 string 1.0\ --\ HyperTerminal\ data\ file MS-windows Hyperterminal + +# Windows Metafont .WMF +0 string \327\315\306\232\000\000\000\000\000\000 ms-windows metafont .wmf + +#tz3 files whatever that is (MS Works files) +0 string \003\001\001\004\070\001\000\000 tz3 ms-works file +0 string \003\002\001\004\070\001\000\000 tz3 ms-works file +0 string \003\003\001\004\070\001\000\000 tz3 ms-works file + +# PGP sig files .sig +#0 string \211\000\077\003\005\000\063\237\127 065 to \027\266\151\064\005\045\101\233\021\002 PGP sig +0 string \211\000\077\003\005\000\063\237\127\065\027\266\151\064\005\045\101\233\021\002 PGP sig +0 string \211\000\077\003\005\000\063\237\127\066\027\266\151\064\005\045\101\233\021\002 PGP sig +0 string \211\000\077\003\005\000\063\237\127\067\027\266\151\064\005\045\101\233\021\002 PGP sig +0 string \211\000\077\003\005\000\063\237\127\070\027\266\151\064\005\045\101\233\021\002 PGP sig +0 string \211\000\077\003\005\000\063\237\127\071\027\266\151\064\005\045\101\233\021\002 PGP sig +0 string \211\000\225\003\005\000\062\122\207\304\100\345\042 PGP sig + +# windows zips files .dmf +0 string MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 Ms-windows special zipped file + + +# Windows help file FTG FTS +0 string \164\146\115\122\012\000\000\000\001\000\000\000 ms-windows help cache + +# grp old windows 3.1 group files +0 string \120\115\103\103 Ms-windows 3.1 group files + + +# lnk files windows symlinks +0 string \114\000\000\000\001\024\002\000\000\000\000\000\300\000\000\000\000\000\000\106 ms-Windows shortcut + +#ico files +0 string \102\101\050\000\000\000\056\000\000\000\000\000\000\000 Icon for ms-windows + +# Windows icons (Ian Springer ) +0 string \000\000\001\000 ms-windows icon resource +>4 byte 1 - 1 icon +>4 byte >1 - %d icons +>>6 byte >0 \b, %dx +>>>7 byte >0 \b%d +>>8 byte 0 \b, 256-colors +>>8 byte >0 \b, %d-colors + + +# .chr files +0 string PK\010\010BGI Borland font +>4 string >\0 %s +# then there is a copyright notice + + +# .bgi files +0 string pk\010\010BGI Borland device +>4 string >\0 %s +# then there is a copyright notice + + +# recycled/info the windows trash bin index +9 string \000\000\000\030\001\000\000\000 ms-windows recycled bin info + + +##### put in Either Magic/font or Magic/news +# Acroread or something files wrongly identified as G3 .pfm +# these have the form \000 \001 any? \002 \000 \000 +# or \000 \001 any? \022 \000 \000 +#0 string \000\001 pfm? +#>3 string \022\000\000Copyright\ yes +#>3 string \002\000\000Copyright\ yes +#>3 string >\0 oops, not a font file. Cancel that. +#it clashes with ttf files so put it lower down. + +# From Doug Lee via a FreeBSD pr +9 string GERBILDOC First Choice document +9 string GERBILDB First Choice database +9 string GERBILCLIP First Choice database +0 string GERBIL First Choice device file +9 string RABBITGRAPH RabbitGraph file +0 string DCU1 Borland Delphi .DCU file +0 string ! MKS Spell hash list (old format) +0 string ! MKS Spell hash list +# Too simple - MPi +#0 string AH Halo(TM) bitmapped font file +0 lelong 0x08086b70 TurboC BGI file +0 lelong 0x08084b50 TurboC Font file + +# WARNING: below line conflicts with Infocom game data Z-machine 3 +0 byte 0x03 DBase 3 data file +>0x04 lelong 0 (no records) +>0x04 lelong >0 (%ld records) +0 byte 0x83 DBase 3 data file with memo(s) +>0x04 lelong 0 (no records) +>0x04 lelong >0 (%ld records) +0 leshort 0x0006 DBase 3 index file +0 string PMCC Windows 3.x .GRP file +1 string RDC-meg MegaDots +>8 byte >0x2F version %c +>9 byte >0x2F \b.%c file +0 lelong 0x4C +>4 lelong 0x00021401 Windows shortcut file + +# DOS EPS Binary File Header +# From: Ed Sznyter +0 belong 0xC5D0D3C6 DOS EPS Binary File +>4 long >0 Postscript starts at byte %d +>>8 long >0 length %d +>>>12 long >0 Metafile starts at byte %d +>>>>16 long >0 length %d +>>>20 long >0 TIFF starts at byte %d +>>>>24 long >0 length %d + +# TNEF magic From "Joomy" +0 leshort 0x223e9f78 TNEF + +# HtmlHelp files (.chm) +0 string ITSF\003\000\000\000\x60\000\000\000\001\000\000\000 MS Windows HtmlHelp Data + +# GFA-BASIC (Wolfram Kleff) +2 string GFA-BASIC3 GFA-BASIC 3 data + +# DJGPP compiled files +# v >2, uses DPMI & small(2k) stub (Robert vd Boon, rjvdboon@europe.com) +0x200 string go32stub DOS-executable compiled w/DJGPP +>0x20c string >0 (stub v%.4s) +>>0x8b2 string djp [compressed w/%s +>>>&1 string >\0 %.4s] +>>0x8ad string UPX [compressed w/%s +>>>&1 string >\0 %.4s] +>>0x1c string pmodedj stubbed with %s + +# QDOS +4 belong 0x4AFB QDOS executable +>9 pstring x '%s' +0 beshort 0xFB01 QDOS object +>2 pstring x '%s' + +#------------------------------------------------------------------------------ +# From Stuart Caie (developer of cabextract) +# Microsoft Cabinet files +0 string MSCF\0\0\0\0 Microsoft Cabinet file +>8 lelong x \b, %u bytes +>28 leshort 1 \b, 1 file +>28 leshort >1 \b, %u files + +# InstallShield Cabinet files +0 string ISc( InstallShield Cabinet file +>5 byte&0xf0 =0x60 version 6, +>5 byte&0xf0 !0x60 version 4/5, +>(12.l+40) lelong x %u files + +# Windows CE package files +0 string MSCE\0\0\0\0 Microsoft WinCE install header +>20 lelong 0 \b, architecture-independent +>20 lelong 103 \b, Hitachi SH3 +>20 lelong 104 \b, Hitachi SH4 +>20 lelong 0xA11 \b, StrongARM +>20 lelong 4000 \b, MIPS R4000 +>20 lelong 10003 \b, Hitachi SH3 +>20 lelong 10004 \b, Hitachi SH3E +>20 lelong 10005 \b, Hitachi SH4 +>20 lelong 70001 \b, ARM 7TDMI +>52 leshort 1 \b, 1 file +>52 leshort >1 \b, %u files +>56 leshort 1 \b, 1 registry entry +>56 leshort >1 \b, %u registry entries + +# Outlook Personal Folders +0 lelong 0x4E444221 Microsoft Outlook binary email folder + +# From: Dirk Jagdmann +0 lelong 0x00035f3f Windows 3.x help file + +# Christophe Monniez +0 string Client\ UrlCache\ MMF Microsoft Internet Explorer Cache File +>20 string >\0 Version %s +0 string \xCF\xAD\x12\xFE Microsoft Outlook Express DBX File +>4 byte =0xC5 Message database +>4 byte =0xC6 Folder database +>4 byte =0xC7 Accounts informations +>4 byte =0x30 Offline database + + +# Windows Enhanced Metafile (EMF) +# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp +# for further information. Note that "0 lelong 1" should be true i.e. +# the first double word in the file should be 1. With the extended +# syntax available by some file commands you could write: +# 0 lelong 1 +# &40 ulelong 0x464D4520 Windows Enhanced Metafile (EMF) image data +40 ulelong 0x464D4520 Windows Enhanced Metafile (EMF) image data +>44 ulelong x version 0x%x. +# If the description has a length greater than zero, it exists and is +# found at offset (*64). +>64 ulelong >0 Description available at offset 0x%x +>>60 ulelong >0 (length 0x%x) +# Note it would be better to print out the description, which is found +# as below. Unfortunately the following only prints out the first couple +# of characters instead of all the "description length" +# number of characters -- indicated by the ulelong at offset 60. +>>(64.l) lestring16 >0 Description: %15.15s +#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE +0 string \377WPC\020\000\000\000\022\012\001\001\000\000\000\000 (WP) loadable text +>15 byte 0 Optimized for Intel +>15 byte 1 Optimized for Non-Intel +1 string WPC (Corel/WP) +>8 short 257 WordPerfect macro +>8 short 258 WordPerfect help file +>8 short 259 WordPerfect keyboard file +>8 short 266 WordPerfect document +>8 short 267 WordPerfect dictionary +>8 short 268 WordPerfect thesaurus +>8 short 269 WordPerfect block +>8 short 270 WordPerfect rectangular block +>8 short 271 WordPerfect column block +>8 short 272 WordPerfect printer data +>8 short 275 WordPerfect printer data +>8 short 276 WordPerfect driver resource data +>8 short 279 WordPerfect hyphenation code +>8 short 280 WordPerfect hyphenation data +>8 short 281 WordPerfect macro resource data +>8 short 283 WordPerfect hyphenation lex +>8 short 285 WordPerfect wordlist +>8 short 286 WordPerfect equation resource data +>8 short 289 WordPerfect spell rules +>8 short 290 WordPerfect dictionary rules +>8 short 295 WordPerfect spell rules (Microlytics) +>8 short 299 WordPerfect settings file +>8 short 301 WordPerfect 4.2 document +>8 short 325 WordPerfect dialog file +>8 short 332 WordPerfect button bar +>8 short 513 Shell macro +>8 short 522 Shell definition +>8 short 769 Notebook macro +>8 short 770 Notebook help file +>8 short 771 Notebook keyboard file +>8 short 778 Notebook definition +>8 short 1026 Calculator help file +>8 short 1538 Calendar help file +>8 short 1546 Calendar data file +>8 short 1793 Editor macro +>8 short 1794 Editor help file +>8 short 1795 Editor keyboard file +>8 short 1817 Editor macro resource file +>8 short 2049 Macro editor macro +>8 short 2050 Macro editor help file +>8 short 2051 Macro editor keyboard file +>8 short 2305 PlanPerfect macro +>8 short 2306 PlanPerfect help file +>8 short 2307 PlanPerfect keyboard file +>8 short 2314 PlanPerfect worksheet +>8 short 2319 PlanPerfect printer definition +>8 short 2322 PlanPerfect graphic definition +>8 short 2323 PlanPerfect data +>8 short 2324 PlanPerfect temporary printer +>8 short 2329 PlanPerfect macro resource data +>8 byte 11 Mail +>8 short 2818 help file +>8 short 2821 distribution list +>8 short 2826 out box +>8 short 2827 in box +>8 short 2836 users archived mailbox +>8 short 2837 archived message database +>8 short 2838 archived attachments +>8 short 3083 Printer temporary file +>8 short 3330 Scheduler help file +>8 short 3338 Scheduler in file +>8 short 3339 Scheduler out file +>8 short 3594 GroupWise settings file +>8 short 3601 GroupWise directory services +>8 short 3627 GroupWise settings file +>8 short 4362 Terminal resource data +>8 short 4363 Terminal resource data +>8 short 4395 Terminal resource data +>8 short 4619 GUI loadable text +>8 short 4620 graphics resource data +>8 short 4621 printer settings file +>8 short 4622 port definition file +>8 short 4623 print queue parameters +>8 short 4624 compressed file +>8 short 5130 Network service msg file +>8 short 5131 Network service msg file +>8 short 5132 Async gateway login msg +>8 short 5134 GroupWise message file +>8 short 7956 GroupWise admin domain database +>8 short 7957 GroupWise admin host database +>8 short 7959 GroupWise admin remote host database +>8 short 7960 GroupWise admin ADS deferment data file +>8 short 8458 IntelliTAG (SGML) compiled DTD +>8 long 18219264 WordPerfect graphic image (1.0) +>8 long 18219520 WordPerfect graphic image (2.0) +#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE + +#------------------------------------------------------------------------------ +# rtf: file(1) magic for Rich Text Format (RTF) +# +# Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk +# +0 string {\\rtf Rich Text Format data, +>5 byte x version %c, +>6 string \\ansi ANSI +>6 string \\mac Apple Macintosh +>6 string \\pc IBM PC, code page 437 +>6 string \\pca IBM PS/2, code page 850 + +#------------------------------------------------------------------------------ +# animation: file(1) magic for animation/movie formats +# +# animation formats +# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8) +# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com) + +# MPEG sequences +# Scans for all common MPEG header start codes +0 belong&0xFFFFFF00 0x00000100 MPEG sequence +>3 byte 0xBA +>>4 byte &0x40 \b, v2, program multiplex +>>4 byte ^0x40 \b, v1, system multiplex +>3 byte 0xBB \b, v1/2, multiplex (missing pack header) +>3 byte 0xB0 \b, v4 +>>5 belong 0x000001B5 +>>>9 byte &0x80 +>>>>10 byte&0xF0 16 \b, video +>>>>10 byte&0xF0 32 \b, still texture +>>>>10 byte&0xF0 48 \b, mesh +>>>>10 byte&0xF0 64 \b, face +>>>9 byte ^0x80 +>>>>9 byte&0xF8 8 \b, video +>>>>9 byte&0xF8 16 \b, still texture +>>>>9 byte&0xF8 24 \b, mesh +>>>>9 byte&0xF8 32 \b, face +>>4 byte 1 \b, simple @ L1 +>>4 byte 2 \b, simple @ L2 +>>4 byte 3 \b, simple @ L3 +>>4 byte 4 \b, simple @ L0 +>>4 byte 17 \b, simple scalable @ L1 +>>4 byte 18 \b, simple scalable @ L2 +>>4 byte 33 \b, core @ L1 +>>4 byte 34 \b, core @ L2 +>>4 byte 50 \b, main @ L2 +>>4 byte 51 \b, main @ L3 +>>4 byte 53 \b, main @ L4 +>>4 byte 66 \b, n-bit @ L2 +>>4 byte 81 \b, scalable texture @ L1 +>>4 byte 97 \b, simple face animation @ L1 +>>4 byte 98 \b, simple face animation @ L2 +>>4 byte 99 \b, simple face basic animation @ L1 +>>4 byte 100 \b, simple face basic animation @ L2 +>>4 byte 113 \b, basic animation text @ L1 +>>4 byte 114 \b, basic animation text @ L2 +>>4 byte 129 \b, hybrid @ L1 +>>4 byte 130 \b, hybrid @ L2 +>>4 byte 145 \b, advanced RT simple @ L! +>>4 byte 146 \b, advanced RT simple @ L2 +>>4 byte 147 \b, advanced RT simple @ L3 +>>4 byte 148 \b, advanced RT simple @ L4 +>>4 byte 161 \b, core scalable @ L1 +>>4 byte 162 \b, core scalable @ L2 +>>4 byte 163 \b, core scalable @ L3 +>>4 byte 177 \b, advanced coding efficiency @ L1 +>>4 byte 178 \b, advanced coding efficiency @ L2 +>>4 byte 179 \b, advanced coding efficiency @ L3 +>>4 byte 180 \b, advanced coding efficiency @ L4 +>>4 byte 193 \b, advanced core @ L1 +>>4 byte 194 \b, advanced core @ L2 +>>4 byte 209 \b, advanced scalable texture @ L1 +>>4 byte 210 \b, advanced scalable texture @ L2 +>>4 byte 211 \b, advanced scalable texture @ L3 +>>4 byte 225 \b, simple studio @ L1 +>>4 byte 226 \b, simple studio @ L2 +>>4 byte 227 \b, simple studio @ L3 +>>4 byte 228 \b, simple studio @ L4 +>>4 byte 229 \b, core studio @ L1 +>>4 byte 230 \b, core studio @ L2 +>>4 byte 231 \b, core studio @ L3 +>>4 byte 232 \b, core studio @ L4 +>>4 byte 240 \b, advanced simple @ L0 +>>4 byte 241 \b, advanced simple @ L1 +>>4 byte 242 \b, advanced simple @ L2 +>>4 byte 243 \b, advanced simple @ L3 +>>4 byte 244 \b, advanced simple @ L4 +>>4 byte 245 \b, advanced simple @ L5 +>>4 byte 247 \b, advanced simple @ L3b +>>4 byte 248 \b, FGS @ L0 +>>4 byte 249 \b, FGS @ L1 +>>4 byte 250 \b, FGS @ L2 +>>4 byte 251 \b, FGS @ L3 +>>4 byte 252 \b, FGS @ L4 +>>4 byte 253 \b, FGS @ L5 +>3 byte 0xB5 \b, v4 +>>4 byte &0x80 +>>>5 byte&0xF0 16 \b, video (missing profile header) +>>>5 byte&0xF0 32 \b, still texture (missing profile header) +>>>5 byte&0xF0 48 \b, mesh (missing profile header) +>>>5 byte&0xF0 64 \b, face (missing profile header) +>>4 byte ^0x80 +>>>4 byte&0xF8 8 \b, video (missing profile header) +>>>4 byte&0xF8 16 \b, still texture (missing profile header) +>>>4 byte&0xF8 24 \b, mesh (missing profile header) +>>>4 byte&0xF8 32 \b, face (missing profile header) +>3 byte 0xB3 +>>12 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video +>>12 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video +>>12 belong 0x000001B5 \b, v2, +>>>16 byte&0x0F 1 \b HP +>>>16 byte&0x0F 2 \b Spt +>>>16 byte&0x0F 3 \b SNR +>>>16 byte&0x0F 4 \b MP +>>>16 byte&0x0F 5 \b SP +>>>17 byte&0xF0 64 \b@HL +>>>17 byte&0xF0 96 \b@H-14 +>>>17 byte&0xF0 128 \b@ML +>>>17 byte&0xF0 160 \b@LL +>>>17 byte &0x08 \b progressive +>>>17 byte ^0x08 \b interlaced +>>>17 byte&0x06 2 \b Y'CbCr 4:2:0 video +>>>17 byte&0x06 4 \b Y'CbCr 4:2:2 video +>>>17 byte&0x06 6 \b Y'CbCr 4:4:4 video +>>11 byte &0x02 +>>>75 byte &0x01 +>>>>140 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video +>>>>140 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video +>>>>140 belong 0x000001B5 \b, v2, +>>>>>144 byte&0x0F 1 \b HP +>>>>>144 byte&0x0F 2 \b Spt +>>>>>144 byte&0x0F 3 \b SNR +>>>>>144 byte&0x0F 4 \b MP +>>>>>144 byte&0x0F 5 \b SP +>>>>>145 byte&0xF0 64 \b@HL +>>>>>145 byte&0xF0 96 \b@H-14 +>>>>>145 byte&0xF0 128 \b@ML +>>>>>145 byte&0xF0 160 \b@LL +>>>>>145 byte &0x08 \b progressive +>>>>>145 byte ^0x08 \b interlaced +>>>>>145 byte&0x06 2 \b Y'CbCr 4:2:0 video +>>>>>145 byte&0x06 4 \b Y'CbCr 4:2:2 video +>>>>>145 byte&0x06 6 \b Y'CbCr 4:4:4 video +>>>76 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video +>>>76 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video +>>>76 belong 0x000001B5 \b, v2, +>>>80 byte&0x0F 1 \b HP +>>>80 byte&0x0F 2 \b Spt +>>>80 byte&0x0F 3 \b SNR +>>>80 byte&0x0F 4 \b MP +>>>80 byte&0x0F 5 \b SP +>>>81 byte&0xF0 64 \b@HL +>>>81 byte&0xF0 96 \b@H-14 +>>>81 byte&0xF0 128 \b@ML +>>>81 byte&0xF0 160 \b@LL +>>>81 byte &0x08 \b progressive +>>>81 byte ^0x08 \b interlaced +>>>81 byte&0x06 2 \b Y'CbCr 4:2:0 video +>>>81 byte&0x06 4 \b Y'CbCr 4:2:2 video +>>>81 byte&0x06 6 \b Y'CbCr 4:4:4 video +>>4 belong&0xFFFFFF00 0x78043800 \b, HD-TV 1920P +>>>7 byte&0xF0 0x10 \b, 16:9 +>>4 belong&0xFFFFFF00 0x50002D00 \b, SD-TV 1280I +>>>7 byte&0xF0 0x10 \b, 16:9 +>>4 belong&0xFFFFFF00 0x30024000 \b, PAL Capture +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 beshort&0xFFF0 0x2C00 \b, 4CIF +>>>5 beshort&0x0FFF 0x01E0 \b NTSC +>>>5 beshort&0x0FFF 0x0240 \b PAL +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>>7 byte&0xF0 0x80 \b, PAL 4:3 +>>>7 byte&0xF0 0xC0 \b, NTSC 4:3 +>>4 belong&0xFFFFFF00 0x2801E000 \b, LD-TV 640P +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 belong&0xFFFFFF00 0x1400F000 \b, 320x240 +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 belong&0xFFFFFF00 0x0F00A000 \b, 240x160 +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 belong&0xFFFFFF00 0x0A007800 \b, 160x120 +>>>7 byte&0xF0 0x10 \b, 4:3 +>>4 beshort&0xFFF0 0x1600 \b, CIF +>>>5 beshort&0x0FFF 0x00F0 \b NTSC +>>>5 beshort&0x0FFF 0x0120 \b PAL +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>>7 byte&0xF0 0x80 \b, PAL 4:3 +>>>7 byte&0xF0 0xC0 \b, NTSC 4:3 +>>>5 beshort&0x0FFF 0x0240 \b PAL 625 +>>>>7 byte&0xF0 0x20 \b, 4:3 +>>>>7 byte&0xF0 0x30 \b, 16:9 +>>>>7 byte&0xF0 0x40 \b, 11:5 +>>4 beshort&0xFFF0 0x2D00 \b, CCIR/ITU +>>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 +>>>5 beshort&0x0FFF 0x0240 \b PAL 625 +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>4 beshort&0xFFF0 0x1E00 \b, SVCD +>>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 +>>>5 beshort&0x0FFF 0x0240 \b PAL 625 +>>>7 byte&0xF0 0x20 \b, 4:3 +>>>7 byte&0xF0 0x30 \b, 16:9 +>>>7 byte&0xF0 0x40 \b, 11:5 +>>7 byte&0x0F 1 \b, 23.976 fps +>>7 byte&0x0F 2 \b, 24 fps +>>7 byte&0x0F 3 \b, 25 fps +>>7 byte&0x0F 4 \b, 29.97 fps +>>7 byte&0x0F 5 \b, 30 fps +>>7 byte&0x0F 6 \b, 50 fps +>>7 byte&0x0F 7 \b, 59.94 fps +>>7 byte&0x0F 8 \b, 60 fps +>>11 byte &0x04 \b, Constrained + +# MPEG ADTS Audio (*.mpx/mxa/aac) +# from dreesen@math.fu-berlin.de +# modified to fully support MPEG ADTS + +# MP3, M1A +0 beshort&0xFFFE 0xFFFA MPEG ADTS, layer III, v1 +# rates +>2 byte&0xF0 0x10 \b, 32 kBits +>2 byte&0xF0 0x20 \b, 40 kBits +>2 byte&0xF0 0x30 \b, 48 kBits +>2 byte&0xF0 0x40 \b, 56 kBits +>2 byte&0xF0 0x50 \b, 64 kBits +>2 byte&0xF0 0x60 \b, 80 kBits +>2 byte&0xF0 0x70 \b, 96 kBits +>2 byte&0xF0 0x80 \b, 112 kBits +>2 byte&0xF0 0x90 \b, 128 kBits +>2 byte&0xF0 0xA0 \b, 160 kBits +>2 byte&0xF0 0xB0 \b, 192 kBits +>2 byte&0xF0 0xC0 \b, 224 kBits +>2 byte&0xF0 0xD0 \b, 256 kBits +>2 byte&0xF0 0xE0 \b, 320 kBits +# timing +>2 byte&0x0C 0x00 \b, 44.1 kHz +>2 byte&0x0C 0x04 \b, 48 kHz +>2 byte&0x0C 0x08 \b, 32 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP2, M1A +0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1 +# rates +>2 byte&0xF0 0x10 \b, 32 kBits +>2 byte&0xF0 0x20 \b, 48 kBits +>2 byte&0xF0 0x30 \b, 56 kBits +>2 byte&0xF0 0x40 \b, 64 kBits +>2 byte&0xF0 0x50 \b, 80 kBits +>2 byte&0xF0 0x60 \b, 96 kBits +>2 byte&0xF0 0x70 \b, 112 kBits +>2 byte&0xF0 0x80 \b, 128 kBits +>2 byte&0xF0 0x90 \b, 160 kBits +>2 byte&0xF0 0xA0 \b, 192 kBits +>2 byte&0xF0 0xB0 \b, 224 kBits +>2 byte&0xF0 0xC0 \b, 256 kBits +>2 byte&0xF0 0xD0 \b, 320 kBits +>2 byte&0xF0 0xE0 \b, 384 kBits +# timing +>2 byte&0x0C 0x00 \b, 44.1 kHz +>2 byte&0x0C 0x04 \b, 48 kHz +>2 byte&0x0C 0x08 \b, 32 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MPA, M1A +0 beshort&0xFFFE 0xFFFE MPEG ADTS, layer I, v1 +# rate +>2 byte&0xF0 0x10 \b, 32 kBits +>2 byte&0xF0 0x20 \b, 64 kBits +>2 byte&0xF0 0x30 \b, 96 kBits +>2 byte&0xF0 0x40 \b, 128 kBits +>2 byte&0xF0 0x50 \b, 160 kBits +>2 byte&0xF0 0x60 \b, 192 kBits +>2 byte&0xF0 0x70 \b, 224 kBits +>2 byte&0xF0 0x80 \b, 256 kBits +>2 byte&0xF0 0x90 \b, 288 kBits +>2 byte&0xF0 0xA0 \b, 320 kBits +>2 byte&0xF0 0xB0 \b, 352 kBits +>2 byte&0xF0 0xC0 \b, 384 kBits +>2 byte&0xF0 0xD0 \b, 416 kBits +>2 byte&0xF0 0xE0 \b, 448 kBits +# timing +>2 byte&0x0C 0x00 \b, 44.1 kHz +>2 byte&0x0C 0x04 \b, 48 kHz +>2 byte&0x0C 0x08 \b, 32 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP3, M2A +0 beshort&0xFFFE 0xFFF2 MPEG ADTS, layer III, v2 +# rate +>2 byte&0xF0 0x10 \b, 8 kBits +>2 byte&0xF0 0x20 \b, 16 kBits +>2 byte&0xF0 0x30 \b, 24 kBits +>2 byte&0xF0 0x40 \b, 32 kBits +>2 byte&0xF0 0x50 \b, 40 kBits +>2 byte&0xF0 0x60 \b, 48 kBits +>2 byte&0xF0 0x70 \b, 56 kBits +>2 byte&0xF0 0x80 \b, 64 kBits +>2 byte&0xF0 0x90 \b, 80 kBits +>2 byte&0xF0 0xA0 \b, 96 kBits +>2 byte&0xF0 0xB0 \b, 112 kBits +>2 byte&0xF0 0xC0 \b, 128 kBits +>2 byte&0xF0 0xD0 \b, 144 kBits +>2 byte&0xF0 0xE0 \b, 160 kBits +# timing +>2 byte&0x0C 0x00 \b, 22.05 kHz +>2 byte&0x0C 0x04 \b, 24 kHz +>2 byte&0x0C 0x08 \b, 16 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP2, M2A +0 beshort&0xFFFE 0xFFF4 MPEG ADTS, layer II, v2 +# rate +>2 byte&0xF0 0x10 \b, 8 kBits +>2 byte&0xF0 0x20 \b, 16 kBits +>2 byte&0xF0 0x30 \b, 24 kBits +>2 byte&0xF0 0x40 \b, 32 kBits +>2 byte&0xF0 0x50 \b, 40 kBits +>2 byte&0xF0 0x60 \b, 48 kBits +>2 byte&0xF0 0x70 \b, 56 kBits +>2 byte&0xF0 0x80 \b, 64 kBits +>2 byte&0xF0 0x90 \b, 80 kBits +>2 byte&0xF0 0xA0 \b, 96 kBits +>2 byte&0xF0 0xB0 \b, 112 kBits +>2 byte&0xF0 0xC0 \b, 128 kBits +>2 byte&0xF0 0xD0 \b, 144 kBits +>2 byte&0xF0 0xE0 \b, 160 kBits +# timing +>2 byte&0x0C 0x00 \b, 22.05 kHz +>2 byte&0x0C 0x04 \b, 24 kHz +>2 byte&0x0C 0x08 \b, 16 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MPA, M2A +0 beshort&0xFFFE 0xFFF6 MPEG ADTS, layer I, v2 +# rate +>2 byte&0xF0 0x10 \b, 32 kBits +>2 byte&0xF0 0x20 \b, 48 kBits +>2 byte&0xF0 0x30 \b, 56 kBits +>2 byte&0xF0 0x40 \b, 64 kBits +>2 byte&0xF0 0x50 \b, 80 kBits +>2 byte&0xF0 0x60 \b, 96 kBits +>2 byte&0xF0 0x70 \b, 112 kBits +>2 byte&0xF0 0x80 \b, 128 kBits +>2 byte&0xF0 0x90 \b, 144 kBits +>2 byte&0xF0 0xA0 \b, 160 kBits +>2 byte&0xF0 0xB0 \b, 176 kBits +>2 byte&0xF0 0xC0 \b, 192 kBits +>2 byte&0xF0 0xD0 \b, 224 kBits +>2 byte&0xF0 0xE0 \b, 256 kBits +# timing +>2 byte&0x0C 0x00 \b, 22.05 kHz +>2 byte&0x0C 0x04 \b, 24 kHz +>2 byte&0x0C 0x08 \b, 16 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# MP3, M25A +0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5 +# rate +>2 byte&0xF0 0x10 \b, 8 kBits +>2 byte&0xF0 0x20 \b, 16 kBits +>2 byte&0xF0 0x30 \b, 24 kBits +>2 byte&0xF0 0x40 \b, 32 kBits +>2 byte&0xF0 0x50 \b, 40 kBits +>2 byte&0xF0 0x60 \b, 48 kBits +>2 byte&0xF0 0x70 \b, 56 kBits +>2 byte&0xF0 0x80 \b, 64 kBits +>2 byte&0xF0 0x90 \b, 80 kBits +>2 byte&0xF0 0xA0 \b, 96 kBits +>2 byte&0xF0 0xB0 \b, 112 kBits +>2 byte&0xF0 0xC0 \b, 128 kBits +>2 byte&0xF0 0xD0 \b, 144 kBits +>2 byte&0xF0 0xE0 \b, 160 kBits +# timing +>2 byte&0x0C 0x00 \b, 11.025 kHz +>2 byte&0x0C 0x04 \b, 12 kHz +>2 byte&0x0C 0x08 \b, 8 kHz +# channels/options +>3 byte&0xC0 0x00 \b, Stereo +>3 byte&0xC0 0x40 \b, JntStereo +>3 byte&0xC0 0x80 \b, 2x Monaural +>3 byte&0xC0 0xC0 \b, Monaural +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Packet Pad +#>2 byte &0x01 \b, Custom Flag +#>3 byte &0x08 \b, Copyrighted +#>3 byte &0x04 \b, Original Source +#>3 byte&0x03 1 \b, NR: 50/15 ms +#>3 byte&0x03 3 \b, NR: CCIT J.17 + +# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio + +# Stored AAC streams (instead of the MP4 format) +0 string ADIF MPEG ADIF, AAC +>4 byte &0x80 +>>13 byte &0x10 \b, VBR +>>13 byte ^0x10 \b, CBR +>>16 byte&0x1E 0x02 \b, single stream +>>16 byte&0x1E 0x04 \b, 2 streams +>>16 byte&0x1E 0x06 \b, 3 streams +>>16 byte &0x08 \b, 4 or more streams +>>16 byte &0x10 \b, 8 or more streams +>>4 byte &0x80 \b, Copyrighted +>>13 byte &0x40 \b, Original Source +>>13 byte &0x20 \b, Home Flag +>4 byte ^0x80 +>>4 byte &0x10 \b, VBR +>>4 byte ^0x10 \b, CBR +>>7 byte&0x1E 0x02 \b, single stream +>>7 byte&0x1E 0x04 \b, 2 streams +>>7 byte&0x1E 0x06 \b, 3 streams +>>7 byte &0x08 \b, 4 or more streams +>>7 byte &0x10 \b, 8 or more streams +>>4 byte &0x40 \b, Original Stream(s) +>>4 byte &0x20 \b, Home Source + +# Live or stored single AAC stream (used with MPEG-2 systems) +0 beshort&0xFFF6 0xFFF0 MPEG ADTS, AAC +>1 byte ^0x08 \b, v2 +>1 byte &0x08 \b, v4 +# profile +>>2 byte &0xC0 \b LTP +>2 byte&0xc0 0x00 \b, Main +>2 byte&0xc0 0x40 \b, LC +>2 byte&0xc0 0x80 \b, SSR +# timing +>2 byte&0x3c 0x00 \b, 96 kHz +>2 byte&0x3c 0x04 \b, 88.2 kHz +>2 byte&0x3c 0x08 \b, 64 kHz +>2 byte&0x3c 0x0c \b, 48 kHz +>2 byte&0x3c 0x10 \b, 44.1 kHz +>2 byte&0x3c 0x14 \b, 32 kHz +>2 byte&0x3c 0x18 \b, 24 kHz +>2 byte&0x3c 0x1c \b, 22.05 kHz +>2 byte&0x3c 0x20 \b, 16 kHz +>2 byte&0x3c 0x24 \b, 12 kHz +>2 byte&0x3c 0x28 \b, 11.025 kHz +>2 byte&0x3c 0x2c \b, 8 kHz +# channels/options +>2 beshort&0x01c0 0x0040 \b, monaural +>2 beshort&0x01c0 0x0080 \b, stereo +>2 beshort&0x01c0 0x00c0 \b, stereo + center +>2 beshort&0x01c0 0x0100 \b, stereo+center+LFE +>2 beshort&0x01c0 0x0140 \b, surround +>2 beshort&0x01c0 0x0180 \b, surround + LFE +>2 beshort &0x01C0 \b, surround + side +#>1 byte ^0x01 \b, Data Verify +#>2 byte &0x02 \b, Custom Flag +#>3 byte &0x20 \b, Original Stream +#>3 byte &0x10 \b, Home Source +#>3 byte &0x08 \b, Copyrighted + +# Live MPEG-4 audio streams (instead of RTP FlexMux) +0 beshort&0xFFE0 0x56E0 MPEG-4 LOAS +#>1 beshort&0x1FFF x \b, %u byte packet +>3 byte&0xE0 0x40 +>>4 byte&0x3C 0x04 \b, single stream +>>4 byte&0x3C 0x08 \b, 2 streams +>>4 byte&0x3C 0x0C \b, 3 streams +>>4 byte &0x08 \b, 4 or more streams +>>4 byte &0x20 \b, 8 or more streams +>3 byte&0xC0 0 +>>4 byte&0x78 0x08 \b, single stream +>>4 byte&0x78 0x10 \b, 2 streams +>>4 byte&0x78 0x18 \b, 3 streams +>>4 byte &0x20 \b, 4 or more streams +>>4 byte &0x40 \b, 8 or more streams +0 beshort 0x4DE1 MPEG-4 LO-EP audio stream + +# FLI animation format +4 leshort 0xAF11 FLI file +>6 leshort x - %d frames, +>8 leshort x width=%d pixels, +>10 leshort x height=%d pixels, +>12 leshort x depth=%d, +>16 leshort x ticks/frame=%d +# FLC animation format +4 leshort 0xAF12 FLC file +>6 leshort x - %d frames +>8 leshort x width=%d pixels, +>10 leshort x height=%d pixels, +>12 leshort x depth=%d, +>16 leshort x ticks/frame=%d + +# DL animation format +# XXX - collision with most `mips' magic +# +# I couldn't find a real magic number for these, however, this +# -appears- to work. Note that it might catch other files, too, so be +# careful! +# +# Note that title and author appear in the two 20-byte chunks +# at decimal offsets 2 and 22, respectively, but they are XOR'ed with +# 255 (hex FF)! The DL format is really bad. +# +#0 byte 1 DL version 1, medium format (160x100, 4 images/screen) +#>42 byte x - %d screens, +#>43 byte x %d commands +#0 byte 2 DL version 2 +#>1 byte 1 - large format (320x200,1 image/screen), +#>1 byte 2 - medium format (160x100,4 images/screen), +#>1 byte >2 - unknown format, +#>42 byte x %d screens, +#>43 byte x %d commands +# Based on empirical evidence, DL version 3 have several nulls following the +# \003. Most of them start with non-null values at hex offset 0x34 or so. +#0 string \3\0\0\0\0\0\0\0\0\0\0\0 DL version 3 + +# SGI formats +0 string MOVI Silicon Graphics movie file + +# Apple Quicktime and ISO types +4 string moov Apple QuickTime +>12 string mvhd \b movie (fast start) +>12 string mdra \b URL +>12 string cmov \b movie (fast start, compressed header) +>12 string rmra \b multiple URLs +4 string mdat Apple QuickTime movie (unoptimized) +4 string wide Apple QuickTime movie (unoptimized) +4 string skip Apple QuickTime movie (modified) +4 string free Apple QuickTime movie (modified) +4 string idsc Apple QuickTime image (fast start) +4 string idat Apple QuickTime image (unoptimized) +4 string pckg Apple QuickTime compressed archive +4 string/B jP JPEG 2000 image +4 string ftyp ISO Media +>8 string isom \b, MPEG v4 system +>8 string mp41 \b, MPEG v4 system, version 1 +>8 string mp42 \b, MPEG v4 system, version 2 +>8 string/B jp2 \b, JPEG 2000 image +>8 string 3gp \b, MPEG v4 system, 3GPP (H.263/AMR) +>8 string mmp4 \b, MPEG v4 system, Mobile +>8 string/B M4A \b, MPEG v4 system, iTunes AAC-LC +>8 string/B M4P \b, MPEG v4 system, ISMA encrypted AAC-LC +>8 string/B M4B \b, MPEG v4 system, iTunes AAC-LC/AMR +>8 string/B qt \b, Apple QuickTime movie + +# iso 13818 transport stream +# +# from Oskar Schirmer Feb 3, 2001 (ISO 13818.1) +# (the following is a little bit restrictive and works fine for a stream +# that starts with PAT properly. it won't work for stream data, that is +# cut from an input device data right in the middle, but this shouldn't +# disturb) +# syncbyte 8 bit 0x47 +# error_ind 1 bit - +# payload_start 1 bit 1 +# priority 1 bit - +# PID 13 bit 0x0000 +# scrambling 2 bit - +# adaptfld_ctrl 2 bit 1 or 3 +# conti_count 4 bit 0 +0 belong&0xFF5FFF1F 0x47400010 MPEG transport stream data +>188 byte !0x47 CORRUPTED + +# DIF digital video file format +0 belong&0xffffff00 0x1f070000 DIF +>4 byte &0x01 (DVCPRO) movie file +>4 byte ^0x01 (DV) movie file +>3 byte &0x80 (PAL) +>3 byte ^0x80 (NTSC) + +# Microsoft Advanced Streaming Format (ASF) +0 belong 0x3026b275 Microsoft ASF + +# MNG Video Format, +0 string \x8aMNG MNG video data, +>4 belong !0x0d0a1a0a CORRUPTED, +>4 belong 0x0d0a1a0a +>>16 belong x %ld x +>>20 belong x %ld + +# JNG Video Format, +0 string \x8bJNG JNG video data, +>4 belong !0x0d0a1a0a CORRUPTED, +>4 belong 0x0d0a1a0a +>>16 belong x %ld x +>>20 belong x %ld + +# Vivo video (Wolfram Kleff) +3 string \x0D\x0AVersion:Vivo Vivo video data + +# VRML (Virtual Reality Modelling Language) +0 string/b #VRML\ V1.0\ ascii VRML 1 file +0 string/b #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file + +#--------------------------------------------------------------------------- +# HVQM4: compressed movie format designed by Hudson for Nintendo GameCube +# From Mark Sheppard , 2002-10-03 +# +0 string HVQM4 %s +>6 string >\0 v%s +>0 byte x GameCube movie, +>0x34 ubeshort x %d x +>0x36 ubeshort x %d, +>0x26 ubeshort x %dµs, +>0x42 ubeshort 0 no audio +>0x42 ubeshort >0 %dHz audio + +#------------------------------------------------------------------------------ +# chi: file(1) magic for ChiWriter files +# +0 string \\1cw\ ChiWriter file +>5 string >\0 version %s +0 string \\1cw ChiWriter file + +#------------------------------------------------------------------------------ +# claris: file(1) magic for claris +# "H. Nanosecond" +# Claris Works a word processor, etc. +# Version 3.0 + +# .pct claris works clip art files +#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 +#* +#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000 +#null to byte 1000 octal +514 string \377\377\377\377\000 Claris clip art? +>0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes. +514 string \377\377\377\377\001 Claris clip art? +>0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes. + +# Claris works files +# .cwk +0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document +# .plt +0 string \020\341\000\000\010\010 Claris Works pallete files .plt + +# .msp a dictionary file I am not sure about this I have only one .msp file +0 string \002\271\262\000\040\002\000\164 Claris works dictionary + +# .usp are user dictionary bits +# I am not sure about a magic header: +#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151 +# soh S p f 8 U D sp ^ S cr nl p o d i +#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043 +# a t r i s t sp ^ S cr nl d i v sp # + +# .mth Thesaurus +# starts with \0 but no magic header + +# .chy Hyphenation file +# I am not sure: 000 210 034 000 000 + +# other claris files +#./windows/claris/useng.ndx: data +#./windows/claris/xtndtran.l32: data +#./windows/claris/xtndtran.lst: data +#./windows/claris/clworks.lbl: data +#./windows/claris/clworks.prf: data +#./windows/claris/userd.spl: data + +#------------------------------------------------------------------------------ +# fonts: file(1) magic for font data +# +0 string FONT ASCII vfont text +0 short 0436 Berkeley vfont data +0 short 017001 byte-swapped Berkeley vfont data + +# PostScript fonts (must precede "printer" entries), quinlan@yggdrasil.com +0 string %!PS-AdobeFont-1. PostScript Type 1 font text +>20 string >\0 (%s) +6 string %!PS-AdobeFont-1. PostScript Type 1 font program data + +# X11 font files in SNF (Server Natural Format) format +0 belong 00000004 X11 SNF font data, MSB first +0 lelong 00000004 X11 SNF font data, LSB first + +# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com) +0 string STARTFONT\040 X11 BDF font text + +# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com) +# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides) +0 string \001fcp X11 Portable Compiled Font data +>12 byte 0x02 \b, LSB first +>12 byte 0x0a \b, MSB first +0 string D1.0\015 X11 Speedo font data + +#------------------------------------------------------------------------------ +# FIGlet fonts and controlfiles +# From figmagic supplied with Figlet version 2.2 +# "David E. O'Brien" +0 string flf FIGlet font +>3 string >2a version %-2.2s +0 string flc FIGlet controlfile +>3 string >2a version %-2.2s + +# libGrx graphics lib fonts, from Albert Cahalan (acahalan@cs.uml.edu) +# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++ +0 belong 0x14025919 libGrx font data, +>8 leshort x %dx +>10 leshort x \b%d +>40 string x %s +# Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu) +0 belong 0xff464f4e DOS code page font data collection +7 belong 0x00454741 DOS code page font data +7 belong 0x00564944 DOS code page font data (from Linux?) +4098 string DOSFONT DOSFONT2 encrypted font data + +# downloadable fonts for browser (prints type) anthon@mnt.org +0 string PFR1 PFR1 font +>102 string >0 \b: %s + +# True Type fonts +0 string \000\001\000\000\000 TrueType font data + +0 string \007\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font +0 string \012\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font + +# Opentype font data from Avi Bercovich +0 string OTTO OpenType font data + + +#------------------------------------------------------------------------------ +# macintosh description +# +# BinHex is the Macintosh ASCII-encoded file format (see also "apple") +# Daniel Quinlan, quinlan@yggdrasil.com +11 string must\ be\ converted\ with\ BinHex BinHex binary text +>41 string x \b, version %.3s + +# Stuffit archives are the de facto standard of compression for Macintosh +# files obtained from most archives. (franklsm@tuns.ca) +0 string SIT! StuffIt Archive (data) +>2 string x : %s +0 string SITD StuffIt Deluxe (data) +>2 string x : %s +0 string Seg StuffIt Deluxe Segment (data) +>2 string x : %s + +# Newer StuffIt archives (grant@netbsd.org) +0 string StuffIt StuffIt Archive +>162 string >0 : %s + +# Macintosh Applications and Installation binaries (franklsm@tuns.ca) +0 string APPL Macintosh Application (data) +>2 string x \b: %s + +# Macintosh System files (franklsm@tuns.ca) +0 string zsys Macintosh System File (data) +0 string FNDR Macintosh Finder (data) +0 string libr Macintosh Library (data) +>2 string x : %s +0 string shlb Macintosh Shared Library (data) +>2 string x : %s +0 string cdev Macintosh Control Panel (data) +>2 string x : %s +0 string INIT Macintosh Extension (data) +>2 string x : %s +0 string FFIL Macintosh Truetype Font (data) +>2 string x : %s +0 string LWFN Macintosh Postscript Font (data) +>2 string x : %s + +# Additional Macintosh Files (franklsm@tuns.ca) +0 string PACT Macintosh Compact Pro Archive (data) +>2 string x : %s +0 string ttro Macintosh TeachText File (data) +>2 string x : %s +0 string TEXT Macintosh TeachText File (data) +>2 string x : %s +0 string PDF Macintosh PDF File (data) +>2 string x : %s + +# MacBinary format (Eric Fischer, enf@pobox.com) +# +# Unfortunately MacBinary doesn't really have a magic number prior +# to the MacBinary III format. The checksum is really the way to +# do it, but the magic file format isn't up to the challenge. +# +# 0 byte 0 +# 1 byte # filename length +# 2 string # filename +# 65 string # file type +# 69 string # file creator +# 73 byte # Finder flags +# 74 byte 0 +# 75 beshort # vertical posn in window +# 77 beshort # horiz posn in window +# 79 beshort # window or folder ID +# 81 byte # protected? +# 82 byte 0 +# 83 belong # length of data segment +# 87 belong # length of resource segment +# 91 belong # file creation date +# 95 belong # file modification date +# 99 beshort # length of comment after resource +# 101 byte # new Finder flags +# 102 string mBIN # (only in MacBinary III) +# 106 byte # char. code of file name +# 107 byte # still more Finder flags +# 116 belong # total file length +# 120 beshort # length of add'l header +# 122 byte 129 # for MacBinary II +# 122 byte 130 # for MacBinary III +# 123 byte 129 # minimum version that can read fmt +# 124 beshort # checksum +# +# This attempts to use the version numbers as a magic number, requiring +# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second +# be 0x81. This works for the files I have, but maybe not for everyone's. + +# Unfortunately, this magic is quite weak - MPi +#122 beshort&0xFCFF 0x8081 Macintosh MacBinary data + +# MacBinary I doesn't have the version number field at all, but MacBinary II +# has been in use since 1987 so I hope there aren't many really old files +# floating around that this will miss. The original spec calls for using +# the nulls in 0, 74, and 82 as the magic number. +# +# Another possibility, that would also work for MacBinary I, is to use +# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will +# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset, +# and that 74 will be 0. So something like +# +# 71 belong&0x80804EFF 0x00000000 Macintosh MacBinary data +# +# >73 byte&0x01 0x01 \b, inited +# >73 byte&0x02 0x02 \b, changed +# >73 byte&0x04 0x04 \b, busy +# >73 byte&0x08 0x08 \b, bozo +# >73 byte&0x10 0x10 \b, system +# >73 byte&0x10 0x20 \b, bundle +# >73 byte&0x10 0x40 \b, invisible +# >73 byte&0x10 0x80 \b, locked + +#>65 string x \b, type "%4.4s" + +#>65 string 8BIM (PhotoShop) +#>65 string ALB3 (PageMaker 3) +#>65 string ALB4 (PageMaker 4) +#>65 string ALT3 (PageMaker 3) +#>65 string APPL (application) +#>65 string AWWP (AppleWorks word processor) +#>65 string CIRC (simulated circuit) +#>65 string DRWG (MacDraw) +#>65 string EPSF (Encapsulated PostScript) +#>65 string FFIL (font suitcase) +#>65 string FKEY (function key) +#>65 string FNDR (Macintosh Finder) +#>65 string GIFf (GIF image) +#>65 string Gzip (GNU gzip) +#>65 string INIT (system extension) +#>65 string LIB\ (library) +#>65 string LWFN (PostScript font) +#>65 string MSBC (Microsoft BASIC) +#>65 string PACT (Compact Pro archive) +#>65 string PDF\ (Portable Document Format) +#>65 string PICT (picture) +#>65 string PNTG (MacPaint picture) +#>65 string PREF (preferences) +#>65 string PROJ (Think C project) +#>65 string QPRJ (Think Pascal project) +#>65 string SCFL (Defender scores) +#>65 string SCRN (startup screen) +#>65 string SITD (StuffIt Deluxe) +#>65 string SPn3 (SuperPaint) +#>65 string STAK (HyperCard stack) +#>65 string Seg\ (StuffIt segment) +#>65 string TARF (Unix tar archive) +#>65 string TEXT (ASCII) +#>65 string TIFF (TIFF image) +#>65 string TOVF (Eudora table of contents) +#>65 string WDBN (Microsoft Word word processor) +#>65 string WORD (MacWrite word processor) +#>65 string XLS\ (Microsoft Excel) +#>65 string ZIVM (compress (.Z)) +#>65 string ZSYS (Pre-System 7 system file) +#>65 string acf3 (Aldus FreeHand) +#>65 string cdev (control panel) +#>65 string dfil (Desk Acessory suitcase) +#>65 string libr (library) +#>65 string nX^d (WriteNow word processor) +#>65 string nX^w (WriteNow dictionary) +#>65 string rsrc (resource) +#>65 string scbk (Scrapbook) +#>65 string shlb (shared library) +#>65 string ttro (SimpleText read-only) +#>65 string zsys (system file) + +#>69 string x \b, creator "%4.4s" + +# Somewhere, Apple has a repository of registered Creator IDs. These are +# just the ones that I happened to have files from and was able to identify. + +#>69 string 8BIM (Adobe Photoshop) +#>69 string ALD3 (PageMaker 3) +#>69 string ALD4 (PageMaker 4) +#>69 string ALFA (Alpha editor) +#>69 string APLS (Apple Scanner) +#>69 string APSC (Apple Scanner) +#>69 string BRKL (Brickles) +#>69 string BTFT (BitFont) +#>69 string CCL2 (Common Lisp 2) +#>69 string CCL\ (Common Lisp) +#>69 string CDmo (The Talking Moose) +#>69 string CPCT (Compact Pro) +#>69 string CSOm (Eudora) +#>69 string DMOV (Font/DA Mover) +#>69 string DSIM (DigSim) +#>69 string EDIT (Macintosh Edit) +#>69 string ERIK (Macintosh Finder) +#>69 string EXTR (self-extracting archive) +#>69 string Gzip (GNU gzip) +#>69 string KAHL (Think C) +#>69 string LWFU (LaserWriter Utility) +#>69 string LZIV (compress) +#>69 string MACA (MacWrite) +#>69 string MACS (Macintosh operating system) +#>69 string MAcK (MacKnowledge terminal emulator) +#>69 string MLND (Defender) +#>69 string MPNT (MacPaint) +#>69 string MSBB (Microsoft BASIC (binary)) +#>69 string MSWD (Microsoft Word) +#>69 string NCSA (NCSA Telnet) +#>69 string PJMM (Think Pascal) +#>69 string PSAL (Hunt the Wumpus) +#>69 string PSI2 (Apple File Exchange) +#>69 string R*ch (BBEdit) +#>69 string RMKR (Resource Maker) +#>69 string RSED (Resource Editor) +#>69 string Rich (BBEdit) +#>69 string SIT! (StuffIt) +#>69 string SPNT (SuperPaint) +#>69 string Unix (NeXT Mac filesystem) +#>69 string VIM! (Vim editor) +#>69 string WILD (HyperCard) +#>69 string XCEL (Microsoft Excel) +#>69 string aCa2 (Fontographer) +#>69 string aca3 (Aldus FreeHand) +#>69 string dosa (Macintosh MS-DOS file system) +#>69 string movr (Font/DA Mover) +#>69 string nX^n (WriteNow) +#>69 string pdos (Apple ProDOS file system) +#>69 string scbk (Scrapbook) +#>69 string ttxt (SimpleText) +#>69 string ufox (Foreign File Access) + +# Just in case... + +102 string mBIN MacBinary III data with surprising version number + +# sas magic from Bruce Foster (bef@nwu.edu) +# +#0 string SAS SAS +#>8 string x %s +0 string SAS SAS +>24 string DATA data file +>24 string CATALOG catalog +>24 string INDEX data file index +>24 string VIEW data view +# sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com) +# +0x54 string SAS SAS 7+ +>0x9C string DATA data file +>0x9C string CATALOG catalog +>0x9C string INDEX data file index +>0x9C string VIEW data view + +# spss magic for SPSS system and portable files, +# from Bruce Foster (bef@nwu.edu). + +0 long 0xc1e2c3c9 SPSS Portable File +>40 string x %s + +0 string $FL2 SPSS System File +>24 string x %s + +# Macintosh filesystem data +# From "Tom N Harris" +# Fixed HFS+ and Partition map magic: Ethan Benson +# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these +# entries depend on the data arithmetic added after v.35 +# There's also some Pascal strings in here, ditto... + +# The boot block signature, according to IM:Files, is +# "for HFS volumes, this field always contains the value 0x4C4B." +# But if this is true for MFS or HFS+ volumes, I don't know. +# Alternatively, the boot block is supposed to be zeroed if it's +# unused, so a simply >0 should suffice. + +0x400 beshort 0xD2D7 Macintosh MFS data +>0 beshort 0x4C4B (bootable) +>0x40a beshort &0x8000 (locked) +>0x402 beldate-0x7C25B080 x created: %s, +>0x406 beldate-0x7C25B080 >0 last backup: %s, +>0x414 belong x block size: %d, +>0x412 beshort x number of blocks: %d, +>0x424 pstring x volume name: %s + +# "BD" is has many false positives +#0x400 beshort 0x4244 Macintosh HFS data +#>0 beshort 0x4C4B (bootable) +#>0x40a beshort &0x8000 (locked) +#>0x40a beshort ^0x0100 (mounted) +#>0x40a beshort &0x0200 (spared blocks) +#>0x40a beshort &0x0800 (unclean) +#>0x47C beshort 0x482B (Embedded HFS+ Volume) +#>0x402 beldate-0x7C25B080 x created: %s, +#>0x406 beldate-0x7C25B080 x last modified: %s, +#>0x440 beldate-0x7C25B080 >0 last backup: %s, +#>0x414 belong x block size: %d, +#>0x412 beshort x number of blocks: %d, +#>0x424 pstring x volume name: %s + +0x400 beshort 0x482B Macintosh HFS Extended +>&0 beshort x version %d data +>0 beshort 0x4C4B (bootable) +>0x404 belong ^0x00000100 (mounted) +>&2 belong &0x00000200 (spared blocks) +>&2 belong &0x00000800 (unclean) +>&2 belong &0x00008000 (locked) +>&6 string x last mounted by: '%.4s', +# really, that should be treated as a belong and we print a string +# based on the value. TN1150 only mentions '8.10' for "MacOS 8.1" +>&14 beldate-0x7C25B080 x created: %s, +# only the creation date is local time, all other timestamps in HFS+ are UTC. +>&18 bedate-0x7C25B080 x last modified: %s, +>&22 bedate-0x7C25B080 >0 last backup: %s, +>&26 bedate-0x7C25B080 >0 last checked: %s, +>&38 belong x block size: %d, +>&42 belong x number of blocks: %d, +>&46 belong x free blocks: %d + +# I don't think this is really necessary since it doesn't do much and +# anything with a valid driver descriptor will also have a valid +# partition map +#0 beshort 0x4552 Apple Device Driver data +#>&24 beshort =1 \b, MacOS + +# Is that the partition type a cstring or a pstring? Well, IM says "strings +# shorter than 32 bytes must be terminated with NULL" so I'll treat it as a +# cstring. Of course, partitions can contain more than four entries, but +# what're you gonna do? +0x200 beshort 0x504D Apple Partition data +>0x2 beshort x block size: %d, +>0x230 string x first type: %s, +>0x210 string x name: %s, +>0x254 belong x number of blocks: %d, +>0x400 beshort 0x504D +>>0x430 string x second type: %s, +>>0x410 string x name: %s, +>>0x454 belong x number of blocks: %d, +>>0x800 beshort 0x504D +>>>0x830 string x third type: %s, +>>>0x810 string x name: %s, +>>>0x854 belong x number of blocks: %d, +>>>0xa00 beshort 0x504D +>>>>0xa30 string x fourth type: %s, +>>>>0xa10 string x name: %s, +>>>>0xa54 belong x number of blocks: %d +# AFAIK, only the signature is different +0x200 beshort 0x5453 Apple Old Partition data +>0x2 beshort x block size: %d, +>0x230 string x first type: %s, +>0x210 string x name: %s, +>0x254 belong x number of blocks: %d, +>0x400 beshort 0x504D +>>0x430 string x second type: %s, +>>0x410 string x name: %s, +>>0x454 belong x number of blocks: %d, +>>0x800 beshort 0x504D +>>>0x830 string x third type: %s, +>>>0x810 string x name: %s, +>>>0x854 belong x number of blocks: %d, +>>>0xa00 beshort 0x504D +>>>>0xa30 string x fourth type: %s, +>>>>0xa10 string x name: %s, +>>>>0xa54 belong x number of blocks: %d + +# From: Remi Mommsen +0 string BOMStore Mac OS X bill of materials (BOM) fil + +#------------------------------------------------------------------------------ +# mathematica: file(1) magic for mathematica files +# "H. Nanosecond" +# Mathematica a multi-purpose math program +# versions 2.2 and 3.0 + +#mathematica .mb +0 string \064\024\012\000\035\000\000\000 Mathematica version 2 notebook +0 string \064\024\011\000\035\000\000\000 Mathematica version 2 notebook + +# .ma +# multiple possibilites: + +0 string (*^\n\n::[\011frontEndVersion\ =\ Mathematica notebook +#>41 string >\0 %s + +#0 string (*^\n\n::[\011palette Mathematica notebook version 2.x + +#0 string (*^\n\n::[\011Information Mathematica notebook version 2.x +#>675 string >\0 %s #doesn't work well + +# there may be 'cr' instread of 'nl' in some does this matter? + +# generic: +0 string (*^\r\r::[\011 Mathematica notebook version 2.x +0 string \(\*\^\r\n\r\n\:\:\[\011 Mathematica notebook version 2.x +0 string (*^\015 Mathematica notebook version 2.x +0 string (*^\n\r\n\r::[\011 Mathematica notebook version 2.x +0 string (*^\r::[\011 Mathematica notebook version 2.x +0 string (*^\r\n::[\011 Mathematica notebook version 2.x +0 string (*^\n\n::[\011 Mathematica notebook version 2.x +0 string (*^\n::[\011 Mathematica notebook version 2.x + + +# Mathematica .mx files + +#0 string (*This\ is\ a\ Mathematica\ binary\ dump\ file.\ It\ can\ be\ loaded\ with\ Get.*) Mathematica binary file +0 string (*This\ is\ a\ Mathematica\ binary\ Mathematica binary file +#>71 string \000\010\010\010\010\000\000\000\000\000\000\010\100\010\000\000\000 +# >71... is optional +>88 string >\0 from %s + + +# Mathematica files PBF: +# 115 115 101 120 102 106 000 001 000 000 000 203 000 001 000 +0 string MMAPBF\000\001\000\000\000\203\000\001\000 Mathematica PBF (fonts I think) + +# .ml files These are menu resources I think +# these start with "[0-9][0-9][0-9]\ A~[0-9][0-9][0-9]\ +# how to put that into a magic rule? +4 string \ A~ MAthematica .ml file + +# .nb files +#too long 0 string (***********************************************************************\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Mathematica-Compatible Notebook Mathematica 3.0 notebook +0 string (*********************** Mathematica 3.0 notebook + +# other (* matches it is a comment start in these langs +0 string (* Mathematica, or Pascal, Modula-2 or 3 code text + +######################### +# MatLab v5 +0 string MATLAB Matlab v5 mat-file +>126 short 0x494d (big endian) +>>124 beshort x version 0x%04x +>126 short 0x4d49 (little endian) +>>124 leshort x version 0x%04x + +#------------------------------------------------------------------------------ +# teapot: file(1) magic for "teapot" spreadsheet +# +0 string #!teapot\012xdr teapot work sheet (XDR format) + +#------------------------------------------------------------------------------ +# psion: file(1) magic for Psion handhelds data +# from: Peter Breitenlohner +# +0 lelong 0x10000037 Psion Series 5 +>4 lelong 0x10000039 font file +>4 lelong 0x1000003A printer driver +>4 lelong 0x1000003B clipboard +>4 lelong 0x10000042 multi-bitmap image +>4 lelong 0x1000006A application infomation file +>4 lelong 0x1000006D +>>8 lelong 0x1000007D sketch image +>>8 lelong 0x1000007E voice note +>>8 lelong 0x1000007F word file +>>8 lelong 0x10000085 OPL program +>>8 lelong 0x10000088 sheet file +>>8 lelong 0x100001C4 EasyFax initialisation file +>4 lelong 0x10000073 OPO module +>4 lelong 0x10000074 OPL application +>4 lelong 0x1000008A exported multi-bitmap image + +0 lelong 0x10000041 Psion Series 5 ROM multi-bitmap image + +0 lelong 0x10000050 Psion Series 5 +>4 lelong 0x1000006D database +>4 lelong 0x100000E4 ini file + +0 lelong 0x10000079 Psion Series 5 binary: +>4 lelong 0x00000000 DLL +>4 lelong 0x10000049 comms hardware library +>4 lelong 0x1000004A comms protocol library +>4 lelong 0x1000005D OPX +>4 lelong 0x1000006C application +>4 lelong 0x1000008D DLL +>4 lelong 0x100000AC logical device driver +>4 lelong 0x100000AD physical device driver +>4 lelong 0x100000E5 file transfer protocol +>4 lelong 0x100000E5 file transfer protocol +>4 lelong 0x10000140 printer defintion +>4 lelong 0x10000141 printer defintion + +0 lelong 0x1000007A Psion Series 5 executable + +#------------------------------------------------------------------------------ +# diff: file(1) magic for diff(1) output +# +0 string diff\ 'diff' output text +0 string ***\ 'diff' output text +0 string Only\ in\ 'diff' output text +0 string Common\ subdirectories:\ 'diff' output text + +#------------------------------------------------------------------------------ +# ESRI Shapefile format (.shp .shx .dbf=DBaseIII) +# Based on info from +# +0 belong 9994 ESRI Shapefile +>4 belong =0 +>8 belong =0 +>12 belong =0 +>16 belong =0 +>20 belong =0 +>28 lelong x version %d +>24 belong x length %d +>32 lelong =0 type Null Shape +>32 lelong =1 type Point +>32 lelong =3 type PolyLine +>32 lelong =5 type Polygon +>32 lelong =8 type MultiPoint +>32 lelong =11 type PointZ +>32 lelong =13 type PolyLineZ +>32 lelong =15 type PolygonZ +>32 lelong =18 type MultiPointZ +>32 lelong =21 type PointM +>32 lelong =23 type PolyLineM +>32 lelong =25 type PolygonM +>32 lelong =28 type MultiPointM +>32 lelong =31 type MultiPatch +#------------------------------------------------------------------------------ +# GIMP Gradient: file(1) magic for the GIMP's gradient data files +# by Federico Mena + +0 string GIMP\ Gradient GIMP gradient data + +#------------------------------------------------------------------------------ +# XCF: file(1) magic for the XCF image format used in the GIMP developed +# by Spencer Kimball and Peter Mattis +# ('Bucky' LaDieu, nega@vt.edu) + +0 string gimp\ xcf GIMP XCF image data, +>9 string file version 0, +>9 string v version +>>10 string >\0 %s, +>14 belong x %lu x +>18 belong x %lu, +>22 belong 0 RGB Color +>22 belong 1 Greyscale +>22 belong 2 Indexed Color +>22 belong >2 Unknown Image Type. + +#------------------------------------------------------------------------------ +# XCF: file(1) magic for the patterns used in the GIMP, developed +# by Spencer Kimball and Peter Mattis +# ('Bucky' LaDieu, nega@vt.edu) + +20 string GPAT GIMP pattern data, +>24 string x %s + +#------------------------------------------------------------------------------ +# XCF: file(1) magic for the brushes used in the GIMP, developed +# by Spencer Kimball and Peter Mattis +# ('Bucky' LaDieu, nega@vt.edu) + +20 string GIMP GIMP brush data + +#------------------------------------------------------------------------------ +# adi: file(1) magic for ADi's objects +# From Gregory McGarry +# +0 leshort 0x521c COFF DSP21k +>18 lelong &02 executable, +>18 lelong ^02 +>>18 lelong &01 static object, +>>18 lelong ^01 relocatable object, +>18 lelong &010 stripped +>18 lelong ^010 not stripped + +#------------------------------------------------------------------------------ +# autocad: file(1) magic for cad files +# + +# AutoCAD DWG versions R13/R14 (www.autodesk.com) +# Written December 01, 2003 by Lester Hightower +# Based on the DWG File Format Specifications at http://www.opendwg.org/ +0 string \101\103\061\060\061 AutoCAD +>5 string \062\000\000\000\000 DWG ver. R13 +>5 string \064\000\000\000\000 DWG ver. R14 + +# Microstation DGN/CIT Files (www.bentley.com) +# Written October 30, 2003 by Lester Hightower +# DGN is the default file extension of Microstation/Intergraph CAD files. +# CIT is the proprietary raster format (similar to TIFF) used to attach +# raster underlays to Microstation DGN (vector) drawings. +# +# http://www.wotsit.org/search.asp +# http://filext.com/detaillist.php?extdetail=DGN +# http://filext.com/detaillist.php?extdetail=CIT +# +# http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2 +# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928 +# http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682 +# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F +0 string \010\011\376 Microstation +>3 string \002 +>>30 string \372\104 DGN File +>>30 string \172\104 DGN File +>>30 string \026\105 DGN File +>4 string \030\000\000 CIT File + +# AutoCad, from Nahuel Greco +0 string AC1012 AutoCad (release 12) +0 string AC1014 AutoCad (release 14) + +#------------------------------------------------------------------------------ +# T602 editor documents +# by David Necas +0 string @CT\ T602 document data, +>4 string 0 Kamenicky +>4 string 1 CP 852 +>4 string 2 KOI8-CS +>4 string >2 unknown encoding + +# Vi IMproved Encrypted file +# by David Necas +0 string VimCrypt~ Vim encrypted file data + +#------------------------------------------------------------------------------ +# tex: file(1) magic for TeX files +# +# From + +# Although we may know the offset of certain text fields in TeX DVI +# and font files, we can't use them reliably because they are not +# zero terminated. [but we do anyway, christos] +0 string \367\002 TeX DVI file +>16 string >\0 (%s) +0 string \367\203 TeX generic font data +0 string \367\131 TeX packed font data +>3 string >\0 (%s) +0 string \367\312 TeX virtual font data +0 string This\ is\ TeX, TeX transcript text +0 string This\ is\ METAFONT, METAFONT transcript text + +# There is no way to detect TeX Font Metric (*.tfm) files without +# breaking them apart and reading the data. The following patterns +# match most *.tfm files generated by METAFONT or afm2tfm. +2 string \000\021 TeX font metric data +>33 string >\0 (%s) +2 string \000\022 TeX font metric data +>33 string >\0 (%s) + +# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com) +0 string \\input\ texinfo Texinfo source text +0 string This\ is\ Info\ file GNU Info text + +# TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com) +0 string \\input TeX document text +0 string \\section LaTeX document text +0 string \\setlength LaTeX document text +0 string \\documentstyle LaTeX document text +0 string \\chapter LaTeX document text +0 string \\documentclass LaTeX 2e document text +0 string \\relax LaTeX auxiliary file +0 string \\contentsline LaTeX table of contents +0 string %\ -*-latex-*- LaTeX document text + +# Tex document, from Hendrik Scholz +0 string \\ifx TeX document text + +# Index and glossary files +0 string \\indexentry LaTeX raw index file +0 string \\begin{theindex} LaTeX sorted index +0 string \\glossaryentry LaTeX raw glossary +0 string \\begin{theglossary} LaTeX sorted glossary +0 string This\ is\ makeindex Makeindex log file + +# End of TeX + +#------------------------------------------------------------------------------ +# file(1) magic for BibTex text files +# From Hendrik Scholz + +0 string/c @article{ BibTeX text file +0 string/c @book{ BibTeX text file +0 string/c @inbook{ BibTeX text file +0 string/c @incollection{ BibTeX text file +0 string/c @inproceedings{ BibTeX text file +0 string/c @manual{ BibTeX text file +0 string/c @misc{ BibTeX text file +0 string/c @preamble{ BibTeX text file +0 string/c @phdthesis{ BibTeX text file +0 string/c @techreport{ BibTeX text file +0 string/c @unpublished{ BibTeX text file + +73 string %%%\ \ BibTeX-file{ BibTex text file (with full header) + +73 string %%%\ \ @BibTeX-style-file{ BibTeX style text file (with full header) + +0 string %\ BibTeX\ standard\ bibliography\ BibTeX standard bibliography style text file + +0 string %\ BibTeX\ ` BibTeX custom bibliography style text file + +0 string @c\ @mapfile{ TeX font aliases text file + + +#------------------------------------------------------------------------------ +# psdbms: file(1) magic for psdatabase +# +0 belong&0xff00ffff 0x56000000 ps database +>1 string >\0 version %s +>4 string >\0 from kernel %s +#------------------------------------------------------------------------------ +# convex: file(1) magic for Convex boxes +# +# Convexes are big-endian. +# +# /*\ +# * Below are the magic numbers and tests added for Convex. +# * Added at beginning, because they are expected to be used most. +# \*/ +0 belong 0507 Convex old-style object +>16 belong >0 not stripped +0 belong 0513 Convex old-style demand paged executable +>16 belong >0 not stripped +0 belong 0515 Convex old-style pre-paged executable +>16 belong >0 not stripped +0 belong 0517 Convex old-style pre-paged, non-swapped executable +>16 belong >0 not stripped +0 belong 0x011257 Core file +# +# The following are a series of dump format magic numbers. Each one +# corresponds to a drastically different dump format. The first on is +# the original dump format on a 4.1 BSD or earlier file system. The +# second marks the change between the 4.1 file system and the 4.2 file +# system. The Third marks the changing of the block size from 1K +# to 2K to be compatible with an IDC file system. The fourth indicates +# a dump that is dependent on Convex Storage Manager, because data in +# secondary storage is not physically contained within the dump. +# The restore program uses these number to determine how the data is +# to be extracted. +# +24 belong =60011 dump format, 4.1 BSD or earlier +24 belong =60012 dump format, 4.2 or 4.3 BSD without IDC +24 belong =60013 dump format, 4.2 or 4.3 BSD (IDC compatible) +24 belong =60014 dump format, Convex Storage Manager by-reference dump +# +# what follows is a bunch of bit-mask checks on the flags field of the opthdr. +# If there is no `=' sign, assume just checking for whether the bit is set? +# +0 belong 0601 Convex SOFF +>88 belong&0x000f0000 =0x00000000 c1 +>88 belong &0x00010000 c2 +>88 belong &0x00020000 c2mp +>88 belong &0x00040000 parallel +>88 belong &0x00080000 intrinsic +>88 belong &0x00000001 demand paged +>88 belong &0x00000002 pre-paged +>88 belong &0x00000004 non-swapped +>88 belong &0x00000008 POSIX +# +>84 belong &0x80000000 executable +>84 belong &0x40000000 object +>84 belong&0x20000000 =0 not stripped +>84 belong&0x18000000 =0x00000000 native fpmode +>84 belong&0x18000000 =0x10000000 ieee fpmode +>84 belong&0x18000000 =0x18000000 undefined fpmode +# +0 belong 0605 Convex SOFF core +# +0 belong 0607 Convex SOFF checkpoint +>88 belong&0x000f0000 =0x00000000 c1 +>88 belong &0x00010000 c2 +>88 belong &0x00020000 c2mp +>88 belong &0x00040000 parallel +>88 belong &0x00080000 intrinsic +>88 belong &0x00000008 POSIX +# +>84 belong&0x18000000 =0x00000000 native fpmode +>84 belong&0x18000000 =0x10000000 ieee fpmode +>84 belong&0x18000000 =0x18000000 undefined fpmode + +#------------------------------------------------------------------------------ +# freebsd: file(1) magic for FreeBSD objects +# +# All new-style FreeBSD magic numbers are in host byte order (i.e., +# little-endian on x86). +# +# XXX - this comes from the file "freebsd" in a recent FreeBSD version of +# "file"; it, and the NetBSD stuff in "netbsd", appear to use different +# schemes for distinguishing between executable images, shared libraries, +# and object files. +# +# FreeBSD says: +# +# Regardless of whether it's pure, demand-paged, or none of the +# above: +# +# if the entry point is < 4096, then it's a shared library if +# the "has run-time loader information" bit is set, and is +# position-independent if the "is position-independent" bit +# is set; +# +# if the entry point is >= 4096 (or >4095, same thing), then it's +# an executable, and is dynamically-linked if the "has run-time +# loader information" bit is set. +# +# On x86, NetBSD says: +# +# If it's neither pure nor demand-paged: +# +# if it has the "has run-time loader information" bit set, it's +# a dynamically-linked executable; +# +# if it doesn't have that bit set, then: +# +# if it has the "is position-independent" bit set, it's +# position-independent; +# +# if the entry point is non-zero, it's an executable, otherwise +# it's an object file. +# +# If it's pure: +# +# if it has the "has run-time loader information" bit set, it's +# a dynamically-linked executable, otherwise it's just an +# executable. +# +# If it's demand-paged: +# +# if it has the "has run-time loader information" bit set, +# then: +# +# if the entry point is < 4096, it's a shared library; +# +# if the entry point is = 4096 or > 4096 (i.e., >= 4096), +# it's a dynamically-linked executable); +# +# if it doesn't have the "has run-time loader information" bit +# set, then it's just an executable. +# +# (On non-x86, NetBSD does much the same thing, except that it uses +# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K +# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's +# had 8K pages; dunno about MIPS.) +# +# I suspect the two will differ only in perverse and uninteresting cases +# ("shared" libraries that aren't demand-paged and whose pages probably +# won't actually be shared, executables with entry points <4096). +# +# I leave it to those more familiar with FreeBSD and NetBSD to figure out +# what the right answer is (although using ">4095", FreeBSD-style, is +# probably better than separately checking for "=4096" and ">4096", +# NetBSD-style). (The old "netbsd" file analyzed FreeBSD demand paged +# executables using the NetBSD technique.) +# +0 lelong&0377777777 041400407 FreeBSD/i386 +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +0 lelong&0377777777 041400410 FreeBSD/i386 pure +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +0 lelong&0377777777 041400413 FreeBSD/i386 demand paged +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +0 lelong&0377777777 041400314 FreeBSD/i386 compact demand paged +>20 lelong <4096 +>>3 byte&0xC0 &0x80 shared library +>>3 byte&0xC0 0x40 PIC object +>>3 byte&0xC0 0x00 object +>20 lelong >4095 +>>3 byte&0x80 0x80 dynamically linked executable +>>3 byte&0x80 0x00 executable +>16 lelong >0 not stripped + +# XXX gross hack to identify core files +# cores start with a struct tss; we take advantage of the following: +# byte 7: highest byte of the kernel stack pointer, always 0xfe +# 8/9: kernel (ring 0) ss value, always 0x0010 +# 10 - 27: ring 1 and 2 ss/esp, unused, thus always 0 +# 28: low order byte of the current PTD entry, always 0 since the +# PTD is page-aligned +# +7 string \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 FreeBSD/i386 a.out core file +>1039 string >\0 from '%s' + +# /var/run/ld.so.hints +# What are you laughing about? +0 lelong 011421044151 ld.so hints file (Little Endian +>4 lelong >0 \b, version %d) +>4 belong <=0 \b) +0 belong 011421044151 ld.so hints file (Big Endian +>4 belong >0 \b, version %d) +>4 belong <=0 \b) + +# +# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities +# +0 string SCRSHOT_ scrshot(1) screenshot, +>8 byte x version %d, +>9 byte 2 %d bytes in header, +>>10 byte x %d chars wide by +>>11 byte x %d chars high + +#------------------------------------------------------------------------------ +# gcc: file(1) magic for GCC special files +# +0 string gpch GCC precompiled header + +# The version field is annoying. It's 3 characters, not zero-terminated. +>5 byte x (version %c +>6 byte x \b%c +>7 byte x \b%c) + +# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O' +>4 byte 67 for C +>4 byte 111 for Objective C +>4 byte 43 for C++ +>4 byte 79 for Objective C++ + +#----------------------------------------------------------------------------- +# natinst: file(1) magic for National Instruments Code Files + +# +# From Enrique Gámez-Flores +# version 1 +# Many formats still missing, we use, for the moment LabVIEW +# We guess VXI format file. VISA, LabWindowsCVI, BridgeVIEW, etc, are missing +# +0 string RSRC National Instruments, +# Check if it's a LabVIEW File +>8 string LV LabVIEW File, +# Check wich kind of file is +>>10 string SB Code Resource File, data +>>10 string IN Virtual Instrument Program, data +>>10 string AR VI Library, data +# This is for Menu Libraries +>8 string LMNULBVW Portable File Names, data +# This is for General Resources +>8 string rsc Resources File, data +# This is for VXI Package +0 string VMAP National Instruments, VXI File, data +#------------------------------------------------------------------------------ +# nitpicker: file(1) magic for Flowfiles. +# From: Christian Jachmann http://www.nitpicker.de +0 string NPFF NItpicker Flow File +>4 byte x V%d. +>5 byte x %d +>6 bedate x started: %s +>10 bedate x stopped: %s +>14 belong x Bytes: %u +>18 belong x Bytes1: %u +>22 belong x Flows: %u +>26 belong x Pkts: %u + +#------------------------------------------------------------------------------ +# typeset: file(1) magic for other typesetting +# +0 string Interpress/Xerox Xerox InterPress data +>16 string / (version +>>17 string >\0 %s) + +#------------------------------------------------------------------------------ +# commands: file(1) magic for various shells and interpreters +# +0 string : shell archive or script for antique kernel text +0 string/b #!\ /bin/sh Bourne shell script text executable +0 string/b #!\ /bin/csh C shell script text executable +# korn shell magic, sent by George Wu, gwu@clyde.att.com +0 string/b #!\ /bin/ksh Korn shell script text executable +0 string/b #!\ /bin/tcsh Tenex C shell script text executable +0 string/b #!\ /usr/local/tcsh Tenex C shell script text executable +0 string/b #!\ /usr/local/bin/tcsh Tenex C shell script text executable + +# +# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson) +0 string/b #!\ /bin/zsh Paul Falstad's zsh script text executable +0 string/b #!\ /usr/bin/zsh Paul Falstad's zsh script text executable +0 string/b #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable +0 string/b #!\ /usr/local/bin/ash Neil Brown's ash script text executable +0 string/b #!\ /usr/local/bin/ae Neil Brown's ae script text executable +0 string/b #!\ /bin/nawk new awk script text executable +0 string/b #!\ /usr/bin/nawk new awk script text executable +0 string/b #!\ /usr/local/bin/nawk new awk script text executable +0 string/b #!\ /bin/gawk GNU awk script text executable +0 string/b #!\ /usr/bin/gawk GNU awk script text executable +0 string/b #!\ /usr/local/bin/gawk GNU awk script text executable +# +0 string/b #!\ /bin/awk awk script text executable +0 string/b #!\ /usr/bin/awk awk script text executable +0 string BEGIN awk script text + +# AT&T Bell Labs' Plan 9 shell +0 string/b #!\ /bin/rc Plan 9 rc shell script text executable + +# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de) +0 string/b #!\ /bin/bash Bourne-Again shell script text executable +0 string/b #!\ /usr/local/bin/bash Bourne-Again shell script text executable + +# using env +0 string #!/usr/bin/env a +>15 string >\0 %s script text executable +0 string #!\ /usr/bin/env a +>16 string >\0 %s script text executable + +# PHP scripts +# Ulf Harnhammar +0 string/c =20 short 0x107 executable +>20 short 0x108 pure executable +>20 short 0x10b demand-paged executable +>20 short 0x10f unsupported executable +>12 long >0 not stripped +>22 short >0 - version %ld +>22 short 0 - +#>4 date x stamp %s +0 short 0x155 Encore unsupported executable +>12 long >0 not stripped +>22 short >0 - version %ld +>22 short 0 - +#>4 date x stamp %s + +#------------------------------------------------------------------------------ +# filesystems: file(1) magic for different filesystems +# +0 string \366\366\366\366 PC formatted floppy with no filesystem +# Sun disk labels +# From /usr/include/sun/dklabel.h: +0774 beshort 0xdabe Sun disk label +>0 string x '%s +>>31 string >\0 \b%s +>>>63 string >\0 \b%s +>>>>95 string >\0 \b%s +>0 string x \b' +>0734 short >0 %d rpm, +>0736 short >0 %d phys cys, +>0740 short >0 %d alts/cyl, +>0746 short >0 %d interleave, +>0750 short >0 %d data cyls, +>0752 short >0 %d alt cyls, +>0754 short >0 %d heads/partition, +>0756 short >0 %d sectors/track, +>0764 long >0 start cyl %ld, +>0770 long x %ld blocks +# Is there a boot block written 1 sector in? +>512 belong&077777777 0600407 \b, boot block present +0x1FE leshort 0xAA55 x86 boot sector +>2 string OSBS \b, OS/BS MBR +# J\xf6rg Jenderek +>0x8C string Invalid\ partition\ table \b, MS-DOS MBR +>0x9D string Invalid\ partition\ table \b, DR-DOS MBR, version 7.01 to 7.03 +>0x10F string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 4.10.1998, 4.10.2222 +>0x8B string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 5.00 to 4.00.950 +>0x145 string Default:\ F \b, FREE-DOS MBR +>0 string \0\0\0\0 \b, extended partition table +# JuMP short bootcodeoffset NOP assembler instructions will usually be EB xx 90 +# older drives may use E9 xx xx +>0 lelong&0x009000EB 0x009000EB +>0 lelong&0x000000E9 0x000000E9 +>>1 ubyte >37 \b, code offset 0x%x +# mtools-3.9.8/msdos.h +# usual values are marked with comments to get only informations of strange FAT systems +# valid sectorsize are from 32 to 2048 +>>>11 uleshort <2049 +>>>>11 uleshort >31 +>>>>>3 string >\0 \b, OEM-ID "%8.8s" +>>>>>11 uleshort >512 \b, Bytes/sector %u +#>>>>>11 uleshort =512 \b, Bytes/sector %u=512 (usual) +>>>>>11 uleshort <512 \b, Bytes/sector %u +>>>>>13 ubyte >1 \b, sectors/cluster %u +#>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies) +>>>>>14 uleshort >32 \b, reserved sectors %u +#>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32) +#>>>>>14 uleshort >1 \b, reserved sectors %u +#>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16) +>>>>>14 uleshort <1 \b, reserved sectors %u +>>>>>16 ubyte >2 \b, FATs %u +#>>>>>16 ubyte =2 \b, FATs %u (usual) +>>>>>16 ubyte =1 \b, FAT %u +>>>>>16 ubyte >0 +>>>>>17 uleshort >0 \b, root entries %u +#>>>>>17 uleshort =0 \b, root entries %u=0 (usual Fat32) +>>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB) +#>>>>>19 uleshort =0 \b, sectors %u=0 (usual Fat32) +>>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x +#>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy) +>>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x +>>>>>22 uleshort >0 \b, sectors/FAT %u +#>>>>>22 uleshort =0 \b, sectors/FAT %u=0 (usual Fat32) +>>>>>26 ubyte >2 \b, heads %u +#>>>>>26 ubyte =2 \b, heads %u (usual floppy) +>>>>>26 ubyte =1 \b, heads %u +>>>>>28 ulelong >0 \b, hidden sectors %u +#>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy) +>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB) +#>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB) +# FAT<32 specific +# NOT le FAT3=NOT 3TAF=0xCCABBEB9 +>>>>>82 ulelong&0xCCABBEB9 >0 +>>>>>>36 ubyte >0x80 \b, physical drive 0x%x +#>>>>>>36 ubyte =0x80 \b, physical drive 0x%x=0x80 (usual harddisk) +>>>>>>36 ubyte&0x7F >0 \b, physical drive 0x%x +#>>>>>>36 ubyte =0 \b, physical drive 0x%x=0 (usual floppy) +>>>>>>37 ubyte >0 \b, reserved 0x%x +#>>>>>>37 ubyte =0 \b, reserved 0x%x +>>>>>>38 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>38 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>38 ubyte =0x29 +>>>>>>>39 ulelong x \b, serial number 0x%x +>>>>>>>43 string >>>>>>43 string >NO\ NAME \b, label: "%11.11s" +>>>>>>>43 string =NO\ NAME \b, unlabeled +>>>>>>54 string FAT1 \b, FAT +>>>>>>>54 string FAT12 \b (12 bit) +>>>>>>>54 string FAT16 \b (16 bit) +# FAT32 specific +>>>>>82 string FAT32 \b, FAT (32 bit) +>>>>>>36 ulelong x \b, sectors/FAT %u +>>>>>>40 uleshort >0 \b, extension flags %u +#>>>>>>40 uleshort =0 \b, extension flags %u +>>>>>>42 uleshort >0 \b, fsVersion %u +#>>>>>>42 uleshort =0 \b, fsVersion %u (usual) +>>>>>>44 ulelong >2 \b, rootdir cluster %u +#>>>>>>44 ulelong =2 \b, rootdir cluster %u +#>>>>>>44 ulelong =1 \b, rootdir cluster %u +>>>>>>48 uleshort >1 \b, infoSector %u +#>>>>>>48 uleshort =1 \b, infoSector %u (usual) +>>>>>>48 uleshort <1 \b, infoSector %u +>>>>>>50 uleshort >6 \b, Backup boot sector %u +#>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual) +>>>>>>50 uleshort <6 \b, Backup boot sector %u +>>>>>>54 ulelong >0 \b, reserved1 0x%x +>>>>>>58 ulelong >0 \b, reserved2 0x%x +>>>>>>62 ulelong >0 \b, reserved3 0x%x +# same structure as FAT1X +>>>>>>64 ubyte >0x80 \b, physical drive 0x%x +#>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk) +>>>>>>64 ubyte&0x7F >0 \b, physical drive 0x%x +#>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy) +>>>>>>65 ubyte >0 \b, reserved 0x%x +>>>>>>66 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>66 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) +>>>>>>66 ubyte =0x29 +>>>>>>>67 ulelong x \b, serial number 0x%x +>>>>>>>71 string >>>>>71 string >NO\ NAME \b, label: "%11.11s" +>>>>>>71 string =NO\ NAME \b, unlabeled +### FATs end +>0x200 lelong 0x82564557 \b, BSD disklabel +# FATX +0 string FATX FATX filesystem data + + +# Minix filesystems - Juan Cespedes +0x410 leshort 0x137f Minix filesystem +0x410 beshort 0x137f Minix filesystem (big endian), +>0x402 beshort !0 \b, %d zones +>0x1e string minix \b, bootable +0x410 leshort 0x138f Minix filesystem, 30 char names +0x410 leshort 0x2468 Minix filesystem, version 2 +0x410 leshort 0x2478 Minix filesystem, version 2, 30 char names + +# romfs filesystems - Juan Cespedes +0 string -rom1fs-\0 romfs filesystem, version 1 +>8 belong x %d bytes, +>16 string x named %s. + +# netboot image - Juan Cespedes +0 lelong 0x1b031336L Netboot image, +>4 lelong&0xFFFFFF00 0 +>>4 lelong&0x100 0x000 mode 2 +>>4 lelong&0x100 0x100 mode 3 +>4 lelong&0xFFFFFF00 !0 unknown mode + +0x18b string OS/2 OS/2 Boot Manager + +9564 lelong 0x00011954 Unix Fast File system (little-endian), +>8404 string x last mounted on %s, +#>9504 ledate x last checked at %s, +>8224 ledate x last written at %s, +>8401 byte x clean flag %d, +>8228 lelong x number of blocks %d, +>8232 lelong x number of data blocks %d, +>8236 lelong x number of cylinder groups %d, +>8240 lelong x block size %d, +>8244 lelong x fragment size %d, +>8252 lelong x minimum percentage of free blocks %d, +>8256 lelong x rotational delay %dms, +>8260 lelong x disk rotational speed %drps, +>8320 lelong 0 TIME optimization +>8320 lelong 1 SPACE optimization + +9564 belong 0x00011954 Unix Fast File system (big-endian), +>7168 long 0x4c41424c Apple UFS Volume +>>7186 string x named %s, +>>7176 belong x volume label version %d, +>>7180 bedate x created on %s, +>8404 string x last mounted on %s, +#>9504 bedate x last checked at %s, +>8224 bedate x last written at %s, +>8401 byte x clean flag %d, +>8228 belong x number of blocks %d, +>8232 belong x number of data blocks %d, +>8236 belong x number of cylinder groups %d, +>8240 belong x block size %d, +>8244 belong x fragment size %d, +>8252 belong x minimum percentage of free blocks %d, +>8256 belong x rotational delay %dms, +>8260 belong x disk rotational speed %drps, +>8320 belong 0 TIME optimization +>8320 belong 1 SPACE optimization + +# ext2/ext3 filesystems - Andreas Dilger +0x438 leshort 0xEF53 Linux +>0x44c lelong x rev %d +>0x43e leshort x \b.%d +>0x45c lelong ^0x0000004 ext2 filesystem data +>>0x43a leshort ^0x0000001 (mounted or unclean) +>0x45c lelong &0x0000004 ext3 filesystem data +>>0x460 lelong &0x0000004 (needs journal recovery) +>0x43a leshort &0x0000002 (errors) +>0x460 lelong &0x0000001 (compressed) +#>0x460 lelong &0x0000002 (filetype) +#>0x464 lelong &0x0000001 (sparse_super) +>0x464 lelong &0x0000002 (large files) + +# SGI disk labels - Nathan Scott +0 belong 0x0BE5A941 SGI disk label (volume header) + +# SGI XFS filesystem - Nathan Scott +0 belong 0x58465342 SGI XFS filesystem data +>0x4 belong x (blksz %d, +>0x68 beshort x inosz %d, +>0x64 beshort ^0x2004 v1 dirs) +>0x64 beshort &0x2004 v2 dirs) + +############################################################################ +# Minix-ST kernel floppy +0x800 belong 0x46fc2700 Atari-ST Minix kernel image +>19 string \240\5\371\5\0\011\0\2\0 \b, 720k floppy +>19 string \320\2\370\5\0\011\0\1\0 \b, 360k floppy + +############################################################################ +# Hmmm, is this a better way of detecting _standard_ floppy images ? +19 string \320\2\360\3\0\011\0\1\0 DOS floppy 360k +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector +19 string \240\5\371\3\0\011\0\2\0 DOS floppy 720k +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector +19 string \100\013\360\011\0\022\0\2\0 DOS floppy 1440k +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector + +19 string \240\5\371\5\0\011\0\2\0 DOS floppy 720k, IBM +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector +19 string \100\013\371\5\0\011\0\2\0 DOS floppy 1440k, mkdosfs +>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector + +19 string \320\2\370\5\0\011\0\1\0 Atari-ST floppy 360k +19 string \240\5\371\5\0\011\0\2\0 Atari-ST floppy 720k + +# Valid media descriptor bytes for MS-DOS: +# +# Byte Capacity Media Size and Type +# ------------------------------------------------- +# +# F0 2.88 MB 3.5-inch, 2-sided, 36-sector +# F0 1.44 MB 3.5-inch, 2-sided, 18-sector +# F9 720K 3.5-inch, 2-sided, 9-sector +# F9 1.2 MB 5.25-inch, 2-sided, 15-sector +# FD 360K 5.25-inch, 2-sided, 9-sector +# FF 320K 5.25-inch, 2-sided, 8-sector +# FC 180K 5.25-inch, 1-sided, 9-sector +# FE 160K 5.25-inch, 1-sided, 8-sector +# FE 250K 8-inch, 1-sided, single-density +# FD 500K 8-inch, 2-sided, single-density +# FE 1.2 MB 8-inch, 2-sided, double-density +# F8 ----- Fixed disk +# +# FC xxxK Apricot 70x1x9 boot disk. +# +# Originally a bitmap: +# xxxxxxx0 Not two sided +# xxxxxxx1 Double sided +# xxxxxx0x Not 8 SPT +# xxxxxx1x 8 SPT +# xxxxx0xx Not Removable drive +# xxxxx1xx Removable drive +# 11111xxx Must be one. +# +# But now it's rather random: +# 111111xx Low density disk +# 00 SS, Not 8 SPT +# 01 DS, Not 8 SPT +# 10 SS, 8 SPT +# 11 DS, 8 SPT +# +# 11111001 Double density 3½ floppy disk, high density 5¼ +# 11110000 High density 3½ floppy disk +# 11111000 Hard disk any format +# + +# CDROM Filesystems +32769 string CD001 ISO 9660 CD-ROM filesystem data +# "application id" which appears to be used as a volume label +>32808 string >\0 '%s' +>34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable) +37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors) +32776 string CDROM High Sierra CD-ROM filesystem data + +# cramfs filesystem - russell@coker.com.au +0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian +>4 lelong x size %d +>8 lelong &1 version #2 +>8 lelong &2 sorted_dirs +>8 lelong &4 hole_support +>32 lelong x CRC 0x%x, +>36 lelong x edition %d, +>40 lelong x %d blocks, +>44 lelong x %d files + +0 belong 0x28cd3d45 Linux Compressed ROM File System data, big endian +>4 belong x size %d +>8 belong &1 version #2 +>8 belong &2 sorted_dirs +>8 belong &4 hole_support +>32 belong x CRC 0x%x, +>36 belong x edition %d, +>40 belong x %d blocks, +>44 belong x %d files + +# reiserfs - russell@coker.com.au +0x10034 string ReIsErFs ReiserFS V3.5 +0x10034 string ReIsEr2Fs ReiserFS V3.6 +>0x1002c leshort x block size %d +>0x10032 leshort &2 (mounted or unclean) +>0x10000 lelong x num blocks %d +>0x10040 lelong 1 tea hash +>0x10040 lelong 2 yura hash +>0x10040 lelong 3 r5 hash + +# JFFS - russell@coker.com.au +0 lelong 0x34383931 Linux Journalled Flash File system, little endian +0 belong 0x34383931 Linux Journalled Flash File system, big endian + +# EST flat binary format (which isn't, but anyway) +# From: Mark Brown +0 string ESTFBINR EST flat binary + +# Aculab VoIP firmware +# From: Mark Brown +0 string VoIP\ Startup\ and Aculab VoIP firmware +>35 string x format %s + +# PPCBoot image file +# From: Mark Brown +0 belong 0x27051956 PPCBoot image +>4 string PPCBoot +>>12 string x version %s + +# JFFS2 file system +0 leshort 0x1984 Linux old jffs2 filesystem data little endian +0 lelong 0xe0011985 Linux jffs2 filesystem data little endian + +#------------------------------------------------------------------------------ +# hp: file(1) magic for Hewlett Packard machines (see also "printer") +# +# XXX - somebody should figure out whether any byte order needs to be +# applied to the "TML" stuff; I'm assuming the Apollo stuff is +# big-endian as it was mostly 68K-based. +# +# I think the 500 series was the old stack-based machines, running a +# UNIX environment atop the "SUN kernel"; dunno whether it was +# big-endian or little-endian. +# +# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based; +# hp300 are 68020+68881 based; hp400 are also 68k. The following basic +# HP magic is useful for reference, but using "long" magic is a better +# practice in order to avoid collisions. +# +# Guy Harris (guy@netapp.com): some additions to this list came from +# HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1, +# 1.2, and 2.0). The 1.2 and 2.0 stuff isn't in the HP-UX 10.0 +# "/etc/magic", though, except for the "archive file relocatable library" +# stuff, and the 68030 and 68040 stuff isn't there at all - are they not +# used in executables, or have they just not yet updated "/etc/magic" +# completely? +# +# 0 beshort 200 hp200 (68010) BSD binary +# 0 beshort 300 hp300 (68020+68881) BSD binary +# 0 beshort 0x20c hp200/300 HP-UX binary +# 0 beshort 0x20d hp400 (68030) HP-UX binary +# 0 beshort 0x20e hp400 (68040?) HP-UX binary +# 0 beshort 0x20b PA-RISC1.0 HP-UX binary +# 0 beshort 0x210 PA-RISC1.1 HP-UX binary +# 0 beshort 0x211 PA-RISC1.2 HP-UX binary +# 0 beshort 0x214 PA-RISC2.0 HP-UX binary + +# +# The "misc" stuff needs a byte order; the archives look suspiciously +# like the old 177545 archives (0xff65 = 0177545). +# +#### Old Apollo stuff +0 beshort 0627 Apollo m68k COFF executable +>18 beshort ^040000 not stripped +>22 beshort >0 - version %ld +0 beshort 0624 apollo a88k COFF executable +>18 beshort ^040000 not stripped +>22 beshort >0 - version %ld +0 long 01203604016 TML 0123 byte-order format +0 long 01702407010 TML 1032 byte-order format +0 long 01003405017 TML 2301 byte-order format +0 long 01602007412 TML 3210 byte-order format +#### PA-RISC 1.1 +0 belong 0x02100106 PA-RISC1.1 relocatable object +0 belong 0x02100107 PA-RISC1.1 executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x02100108 PA-RISC1.1 shared executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0210010b PA-RISC1.1 demand-load executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0210010e PA-RISC1.1 shared library +>96 belong >0 - not stripped + +0 belong 0x0210010d PA-RISC1.1 dynamic load library +>96 belong >0 - not stripped + +#### PA-RISC 2.0 +0 belong 0x02140106 PA-RISC2.0 relocatable object + +0 belong 0x02140107 PA-RISC2.0 executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x02140108 PA-RISC2.0 shared executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0214010b PA-RISC2.0 demand-load executable +>168 belong &0x00000004 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x0214010e PA-RISC2.0 shared library +>96 belong >0 - not stripped + +0 belong 0x0214010d PA-RISC2.0 dynamic load library +>96 belong >0 - not stripped + +#### 800 +0 belong 0x020b0106 PA-RISC1.0 relocatable object + +0 belong 0x020b0107 PA-RISC1.0 executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x020b0108 PA-RISC1.0 shared executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x020b010b PA-RISC1.0 demand-load executable +>168 belong&0x4 0x4 dynamically linked +>(144) belong 0x054ef630 dynamically linked +>96 belong >0 - not stripped + +0 belong 0x020b010e PA-RISC1.0 shared library +>96 belong >0 - not stripped + +0 belong 0x020b010d PA-RISC1.0 dynamic load library +>96 belong >0 - not stripped + +0 belong 0x213c6172 archive file +>68 belong 0x020b0619 - PA-RISC1.0 relocatable library +>68 belong 0x02100619 - PA-RISC1.1 relocatable library +>68 belong 0x02110619 - PA-RISC1.2 relocatable library +>68 belong 0x02140619 - PA-RISC2.0 relocatable library + +#### 500 +0 long 0x02080106 HP s500 relocatable executable +>16 long >0 - version %ld + +0 long 0x02080107 HP s500 executable +>16 long >0 - version %ld + +0 long 0x02080108 HP s500 pure executable +>16 long >0 - version %ld + +#### 200 +0 belong 0x020c0108 HP s200 pure executable +>4 beshort >0 - version %ld +>8 belong &0x80000000 save fp regs +>8 belong &0x40000000 dynamically linked +>8 belong &0x20000000 debuggable +>36 belong >0 not stripped + +0 belong 0x020c0107 HP s200 executable +>4 beshort >0 - version %ld +>8 belong &0x80000000 save fp regs +>8 belong &0x40000000 dynamically linked +>8 belong &0x20000000 debuggable +>36 belong >0 not stripped + +0 belong 0x020c010b HP s200 demand-load executable +>4 beshort >0 - version %ld +>8 belong &0x80000000 save fp regs +>8 belong &0x40000000 dynamically linked +>8 belong &0x20000000 debuggable +>36 belong >0 not stripped + +0 belong 0x020c0106 HP s200 relocatable executable +>4 beshort >0 - version %ld +>6 beshort >0 - highwater %d +>8 belong &0x80000000 save fp regs +>8 belong &0x20000000 debuggable +>8 belong &0x10000000 PIC + +0 belong 0x020a0108 HP s200 (2.x release) pure executable +>4 beshort >0 - version %ld +>36 belong >0 not stripped + +0 belong 0x020a0107 HP s200 (2.x release) executable +>4 beshort >0 - version %ld +>36 belong >0 not stripped + +0 belong 0x020c010e HP s200 shared library +>4 beshort >0 - version %ld +>6 beshort >0 - highwater %d +>36 belong >0 not stripped + +0 belong 0x020c010d HP s200 dynamic load library +>4 beshort >0 - version %ld +>6 beshort >0 - highwater %d +>36 belong >0 not stripped + +#### MISC +0 long 0x0000ff65 HP old archive +0 long 0x020aff65 HP s200 old archive +0 long 0x020cff65 HP s200 old archive +0 long 0x0208ff65 HP s500 old archive + +0 long 0x015821a6 HP core file + +0 long 0x4da7eee8 HP-WINDOWS font +>8 byte >0 - version %ld +0 string Bitmapfile HP Bitmapfile + +0 string IMGfile CIS compimg HP Bitmapfile +# XXX - see "lif" +#0 short 0x8000 lif file +0 long 0x020c010c compiled Lisp + +0 string msgcat01 HP NLS message catalog, +>8 long >0 %d messages + +# addendum to /etc/magic with HP-48sx file-types by phk@data.fls.dk 1jan92 +0 string HPHP48- HP48 binary +>7 byte >0 - Rev %c +>8 beshort 0x1129 (ADR) +>8 beshort 0x3329 (REAL) +>8 beshort 0x5529 (LREAL) +>8 beshort 0x7729 (COMPLX) +>8 beshort 0x9d29 (LCOMPLX) +>8 beshort 0xbf29 (CHAR) +>8 beshort 0xe829 (ARRAY) +>8 beshort 0x0a2a (LNKARRAY) +>8 beshort 0x2c2a (STRING) +>8 beshort 0x4e2a (HXS) +>8 beshort 0x742a (LIST) +>8 beshort 0x962a (DIR) +>8 beshort 0xb82a (ALG) +>8 beshort 0xda2a (UNIT) +>8 beshort 0xfc2a (TAGGED) +>8 beshort 0x1e2b (GROB) +>8 beshort 0x402b (LIB) +>8 beshort 0x622b (BACKUP) +>8 beshort 0x882b (LIBDATA) +>8 beshort 0x9d2d (PROG) +>8 beshort 0xcc2d (CODE) +>8 beshort 0x482e (GNAME) +>8 beshort 0x6d2e (LNAME) +>8 beshort 0x922e (XLIB) +0 string %%HP: HP48 text +>6 string T(0) - T(0) +>6 string T(1) - T(1) +>6 string T(2) - T(2) +>6 string T(3) - T(3) +>10 string A(D) A(D) +>10 string A(R) A(R) +>10 string A(G) A(G) +>14 string F(.) F(.); +>14 string F(,) F(,); + +# hpBSD magic numbers +0 beshort 200 hp200 (68010) BSD +>2 beshort 0407 impure binary +>2 beshort 0410 read-only binary +>2 beshort 0413 demand paged binary +0 beshort 300 hp300 (68020+68881) BSD +>2 beshort 0407 impure binary +>2 beshort 0410 read-only binary +>2 beshort 0413 demand paged binary +# +# From David Gero +# HP-UX 10.20 core file format from /usr/include/sys/core.h +# Unfortunately, HP-UX uses corehead blocks without specifying the order +# There are four we care about: +# CORE_KERNEL, which starts with the string "HP-UX" +# CORE_EXEC, which contains the name of the command +# CORE_PROC, which contains the signal number that caused the core dump +# CORE_FORMAT, which contains the version of the core file format (== 1) +# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC +# but we include all 6 variations of the order of the first 3, and +# assume that PROC will always be last +# Order 1: KERNEL, EXEC, FORMAT, PROC +0x10 string HP-UX +>0 belong 2 +>>0xC belong 0x3C +>>>0x4C belong 0x100 +>>>>0x58 belong 0x44 +>>>>>0xA0 belong 1 +>>>>>>0xAC belong 4 +>>>>>>>0xB0 belong 1 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x90 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 2: KERNEL, FORMAT, EXEC, PROC +>>>0x4C belong 1 +>>>>0x58 belong 4 +>>>>>0x5C belong 1 +>>>>>>0x60 belong 0x100 +>>>>>>>0x6C belong 0x44 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0xA4 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 3: FORMAT, KERNEL, EXEC, PROC +0x24 string HP-UX +>0 belong 1 +>>0xC belong 4 +>>>0x10 belong 1 +>>>>0x14 belong 2 +>>>>>0x20 belong 0x3C +>>>>>>0x60 belong 0x100 +>>>>>>>0x6C belong 0x44 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0xA4 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 4: EXEC, KERNEL, FORMAT, PROC +0x64 string HP-UX +>0 belong 0x100 +>>0xC belong 0x44 +>>>0x54 belong 2 +>>>>0x60 belong 0x3C +>>>>>0xA0 belong 1 +>>>>>>0xAC belong 4 +>>>>>>>0xB0 belong 1 +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x44 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 5: FORMAT, EXEC, KERNEL, PROC +0x78 string HP-UX +>0 belong 1 +>>0xC belong 4 +>>>0x10 belong 1 +>>>>0x14 belong 0x100 +>>>>>0x20 belong 0x44 +>>>>>>0x68 belong 2 +>>>>>>>0x74 belong 0x3C +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x58 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ +# Order 6: EXEC, FORMAT, KERNEL, PROC +>0 belong 0x100 +>>0xC belong 0x44 +>>>0x54 belong 1 +>>>>0x60 belong 4 +>>>>>0x64 belong 1 +>>>>>>0x68 belong 2 +>>>>>>>0x74 belong 0x2C +>>>>>>>>0xB4 belong 4 core file +>>>>>>>>>0x44 string >\0 from '%s' +>>>>>>>>>0xC4 belong 3 - received SIGQUIT +>>>>>>>>>0xC4 belong 4 - received SIGILL +>>>>>>>>>0xC4 belong 5 - received SIGTRAP +>>>>>>>>>0xC4 belong 6 - received SIGABRT +>>>>>>>>>0xC4 belong 7 - received SIGEMT +>>>>>>>>>0xC4 belong 8 - received SIGFPE +>>>>>>>>>0xC4 belong 10 - received SIGBUS +>>>>>>>>>0xC4 belong 11 - received SIGSEGV +>>>>>>>>>0xC4 belong 12 - received SIGSYS +>>>>>>>>>0xC4 belong 33 - received SIGXCPU +>>>>>>>>>0xC4 belong 34 - received SIGXFSZ + +# From: AMAKAWA Shuhei +0 string HPHP49- HP49 binary + + +#------------------------------------------------------------------------------ +# JPEG images +# SunOS 5.5.1 had +# +# 0 string \377\330\377\340 JPEG file +# 0 string \377\330\377\356 JPG file +# +# both of which turn into "JPEG image data" here. +# +0 beshort 0xffd8 JPEG image data +>6 string JFIF \b, JFIF standard +# The following added by Erik Rossen 1999-09-06 +# in a vain attempt to add image size reporting for JFIF. Note that these +# tests are not fool-proof since some perfectly valid JPEGs are currently +# impossible to specify in magic(4) format. +# First, a little JFIF version info: +>>11 byte x \b %d. +>>12 byte x \b%02d +# Next, the resolution or aspect ratio of the image: +#>>13 byte 0 \b, aspect ratio +#>>13 byte 1 \b, resolution (DPI) +#>>13 byte 2 \b, resolution (DPCM) +#>>4 beshort x \b, segment length %d +# Next, show thumbnail info, if it exists: +>>18 byte !0 \b, thumbnail %dx +>>>19 byte x \b%d + +# EXIF moved down here to avoid reporting a bogus version number, +# and EXIF version number printing added. +# - Patrik R=E5dman +>6 string Exif \b, EXIF standard +# Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD. +# All possible combinations of entries have to be enumerated, since no looping +# is possible. And both endians are possible... +# The combinations included below are from real-world JPEGs. +# Little-endian +>>12 string II +# IFD 0 Entry #5: +>>>70 leshort 0x8769 +# EXIF IFD Entry #1: +>>>>(78.l+14) leshort 0x9000 +>>>>>(78.l+23) byte x %c +>>>>>(78.l+24) byte x \b.%c +>>>>>(78.l+25) byte !0x30 \b%c +# IFD 0 Entry #9: +>>>118 leshort 0x8769 +# EXIF IFD Entry #3: +>>>>(126.l+38) leshort 0x9000 +>>>>>(126.l+47) byte x %c +>>>>>(126.l+48) byte x \b.%c +>>>>>(126.l+49) byte !0x30 \b%c +# IFD 0 Entry #10 +>>>130 leshort 0x8769 +# EXIF IFD Entry #3: +>>>>(138.l+38) leshort 0x9000 +>>>>>(138.l+47) byte x %c +>>>>>(138.l+48) byte x \b.%c +>>>>>(138.l+49) byte !0x30 \b%c +# EXIF IFD Entry #4: +>>>>(138.l+50) leshort 0x9000 +>>>>>(138.l+59) byte x %c +>>>>>(138.l+60) byte x \b.%c +>>>>>(138.l+61) byte !0x30 \b%c +# EXIF IFD Entry #5: +>>>>(138.l+62) leshort 0x9000 +>>>>>(138.l+71) byte x %c +>>>>>(138.l+72) byte x \b.%c +>>>>>(138.l+73) byte !0x30 \b%c +# IFD 0 Entry #11 +>>>142 leshort 0x8769 +# EXIF IFD Entry #3: +>>>>(150.l+38) leshort 0x9000 +>>>>>(150.l+47) byte x %c +>>>>>(150.l+48) byte x \b.%c +>>>>>(150.l+49) byte !0x30 \b%c +# EXIF IFD Entry #4: +>>>>(150.l+50) leshort 0x9000 +>>>>>(150.l+59) byte x %c +>>>>>(150.l+60) byte x \b.%c +>>>>>(150.l+61) byte !0x30 \b%c +# EXIF IFD Entry #5: +>>>>(150.l+62) leshort 0x9000 +>>>>>(150.l+71) byte x %c +>>>>>(150.l+72) byte x \b.%c +>>>>>(150.l+73) byte !0x30 \b%c +# Big-endian +>>12 string MM +# IFD 0 Entry #9: +>>>118 beshort 0x8769 +# EXIF IFD Entry #1: +>>>>(126.L+14) beshort 0x9000 +>>>>>(126.L+23) byte x %c +>>>>>(126.L+24) byte x \b.%c +>>>>>(126.L+25) byte !0x30 \b%c +# EXIF IFD Entry #3: +>>>>(126.L+38) beshort 0x9000 +>>>>>(126.L+47) byte x %c +>>>>>(126.L+48) byte x \b.%c +>>>>>(126.L+49) byte !0x30 \b%c +# IFD 0 Entry #10 +>>>130 beshort 0x8769 +# EXIF IFD Entry #3: +>>>>(138.L+38) beshort 0x9000 +>>>>>(138.L+47) byte x %c +>>>>>(138.L+48) byte x \b.%c +>>>>>(138.L+49) byte !0x30 \b%c +# EXIF IFD Entry #5: +>>>>(138.L+62) beshort 0x9000 +>>>>>(138.L+71) byte x %c +>>>>>(138.L+72) byte x \b.%c +>>>>>(138.L+73) byte !0x30 \b%c +# IFD 0 Entry #11 +>>>142 beshort 0x8769 +# EXIF IFD Entry #4: +>>>>(150.L+50) beshort 0x9000 +>>>>>(150.L+59) byte x %c +>>>>>(150.L+60) byte x \b.%c +>>>>>(150.L+61) byte !0x30 \b%c +# Here things get sticky. We can do ONE MORE marker segment with +# indirect addressing, and that's all. It would be great if we could +# do pointer arithemetic like in an assembler language. Christos? +# And if there was some sort of looping construct to do searches, plus a few +# named accumulators, it would be even more effective... +# At least we can show a comment if no other segments got inserted before: +>(4.S+5) byte 0xFE +>>(4.S+8) string >\0 \b, comment: "%s" +#>(4.S+5) byte 0xFE \b, comment +#>>(4.S+6) beshort x \b length=%d +#>>(4.S+8) string >\0 \b, "%s" +# Or, we can show the encoding type (I've included only the three most common) +# and image dimensions if we are lucky and the SOFn (image segment) is here: +>(4.S+5) byte 0xC0 \b, baseline +>>(4.S+6) byte x \b, precision %d +>>(4.S+7) beshort x \b, %dx +>>(4.S+9) beshort x \b%d +>(4.S+5) byte 0xC1 \b, extended sequential +>>(4.S+6) byte x \b, precision %d +>>(4.S+7) beshort x \b, %dx +>>(4.S+9) beshort x \b%d +>(4.S+5) byte 0xC2 \b, progressive +>>(4.S+6) byte x \b, precision %d +>>(4.S+7) beshort x \b, %dx +>>(4.S+9) beshort x \b%d +# I've commented-out quantisation table reporting. I doubt anyone cares yet. +#>(4.S+5) byte 0xDB \b, quantisation table +#>>(4.S+6) beshort x \b length=%d +#>14 beshort x \b, %d x +#>16 beshort x \b %d + +# HSI is Handmade Software's proprietary JPEG encoding scheme +0 string hsi1 JPEG image data, HSI proprietary + +# From: David Santinoli +0 string \x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A JPEG 2000 image data + +#------------------------------------------------------------------------------ +# sinclair: file(1) sinclair QL + +# additions to /etc/magic by Thomas M. Ott (ThMO) + +# Sinclair QL floppy disk formats (ThMO) +0 string =QL5 QL disk dump data, +>3 string =A 720 KB, +>3 string =B 1.44 MB, +>3 string =C 3.2 MB, +>4 string >\0 label:%.10s + +# Sinclair QL OS dump (ThMO) +# (NOTE: if `file' would be able to use indirect references in a endian format +# differing from the natural host format, this could be written more +# reliably and faster...) +# +# we *can't* lookup QL OS code dumps, because `file' is UNABLE to read more +# than the first 8K of a file... #-( +# +#0 belong =0x30000 +#>49124 belong <47104 +#>>49128 belong <47104 +#>>>49132 belong <47104 +#>>>>49136 belong <47104 QL OS dump data, +#>>>>>49148 string >\0 type %.3s, +#>>>>>49142 string >\0 version %.4s + +# Sinclair QL firmware executables (ThMO) +0 string NqNqNq`\004 QL firmware executable (BCPL) + +# Sinclair QL libraries (was ThMO) +0 beshort 0xFB01 QDOS object +>2 pstring x '%s' + +# Sinclair QL executables (was ThMO) +4 belong 0x4AFB QDOS executable +>9 pstring x '%s' + +# Sinclair QL ROM (ThMO) +0 belong =0x4AFB0001 QL plugin-ROM data, +>9 pstring =\0 un-named +>9 pstring >\0 named: %s +#------------------------------------------------------------------------------ +# acorn: file(1) magic for files found on Acorn systems +# + +# RISC OS Chunk File Format +# From RISC OS Programmer's Reference Manual, Appendix D +# We guess the file type from the type of the first chunk. +0 lelong 0xc3cbc6c5 RISC OS Chunk data +>12 string OBJ_ \b, AOF object +>12 string LIB_ \b, ALF library + +# RISC OS AIF, contains "SWI OS_Exit" at offset 16. +16 lelong 0xef000011 RISC OS AIF executable + +# RISC OS Draw files +# From RISC OS Programmer's Reference Manual, Appendix E +0 string Draw RISC OS Draw file data + +# RISC OS new format font files +# From RISC OS Programmer's Reference Manual, Appendix E +0 string FONT\0 RISC OS outline font data, +>5 byte x version %d +0 string FONT\1 RISC OS 1bpp font data, +>5 byte x version %d +0 string FONT\4 RISC OS 4bpp font data +>5 byte x version %d + +# RISC OS Music files +# From RISC OS Programmer's Reference Manual, Appendix E +0 string Maestro\r RISC OS music file +>8 byte x version %d + + +#------------------------------------------------------------------------------ +# iff: file(1) magic for Interchange File Format (see also "audio" & "images") +# +# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic +# Arts for file interchange. It has also been used by Apple, SGI, and +# especially Commodore-Amiga. +# +# IFF files begin with an 8 byte FORM header, followed by a 4 character +# FORM type, which is followed by the first chunk in the FORM. + +0 string FORM IFF data +#>4 belong x \b, FORM is %d bytes long +# audio formats +>8 string AIFF \b, AIFF audio +>8 string AIFC \b, AIFF-C compressed audio +>8 string 8SVX \b, 8SVX 8-bit sampled sound voice +>8 string SAMP \b, SAMP sampled audio +>8 string DTYP \b, DTYP datatype description +>8 string PTCH \b, PTCH binary patch +# image formats +>8 string ILBMBMHD \b, ILBM interleaved image +>>20 beshort x \b, %d x +>>22 beshort x %d +>8 string RGBN \b, RGBN 12-bit RGB image +>8 string RGB8 \b, RGB8 24-bit RGB image +>8 string DR2D \b, DR2D 2-D object +>8 string TDDD \b, TDDD 3-D rendering +# other formats +>8 string FTXT \b, FTXT formatted text +>8 string CTLG \b, CTLG message catalog +>8 string PREF \b, PREF preferences + +#------------------------------------------------------------------------------ +# lif: file(1) magic for lif +# +# (Daniel Quinlan ) +# +0 beshort 0x8000 lif file + +#------------------------------------------------------------------------------ +# mirage: file(1) magic for Mirage executables +# +# XXX - byte order? +# +0 long 31415 Mirage Assembler m.out executable + +#------------------------------------------------------------------------------ +# netscape: file(1) magic for Netscape files +# "H. Nanosecond" +# version 3 and 4 I think +# + +# Netscape Address book .nab +0 string \000\017\102\104\000\000\000\000\000\000\001\000\000\000\000\002\000\000\000\002\000\000\004\000 Netscape Address book + +# Netscape Communicator address book +0 string \000\017\102\111 Netscape Communicator address book + +# .snm Caches +0 string #\ Netscape\ folder\ cache Netscape folder cache +0 string \000\036\204\220\000 Netscape folder cache +# .n2p +# Net 2 Phone +#0 string 123\130\071\066\061\071\071\071\060\070\061\060\061\063\060 +0 string SX961999 Net2phone + +# +#This is files ending in .art, FIXME add more rules +0 string JG\004\016\0\0\0\0 ART + +#------------------------------------------------------------------------------ +# olf: file(1) magic for OLF executables +# +# We have to check the byte order flag to see what byte order all the +# other stuff in the header is in. +# +# MIPS R3000 may also be for MIPS R2000. +# What're the correct byte orders for the nCUBE and the Fujitsu VPP500? +# +# Created by Erik Theisen +# Based on elf from Daniel Quinlan +0 string \177OLF OLF +>4 byte 0 invalid class +>4 byte 1 32-bit +>4 byte 2 64-bit +>7 byte 0 invalid os +>7 byte 1 OpenBSD +>7 byte 2 NetBSD +>7 byte 3 FreeBSD +>7 byte 4 4.4BSD +>7 byte 5 Linux +>7 byte 6 SVR4 +>7 byte 7 esix +>7 byte 8 Solaris +>7 byte 9 Irix +>7 byte 10 SCO +>7 byte 11 Dell +>7 byte 12 NCR +>5 byte 0 invalid byte order +>5 byte 1 LSB +>>16 leshort 0 no file type, +>>16 leshort 1 relocatable, +>>16 leshort 2 executable, +>>16 leshort 3 shared object, +# Core handling from Peter Tobias +# corrections by Christian 'Dr. Disk' Hechelmann +>>16 leshort 4 core file +>>>(0x38+0xcc) string >\0 of '%s' +>>>(0x38+0x10) lelong >0 (signal %d), +>>16 leshort &0xff00 processor-specific, +>>18 leshort 0 no machine, +>>18 leshort 1 AT&T WE32100 - invalid byte order, +>>18 leshort 2 SPARC - invalid byte order, +>>18 leshort 3 Intel 80386, +>>18 leshort 4 Motorola 68000 - invalid byte order, +>>18 leshort 5 Motorola 88000 - invalid byte order, +>>18 leshort 6 Intel 80486, +>>18 leshort 7 Intel 80860, +>>18 leshort 8 MIPS R3000_BE - invalid byte order, +>>18 leshort 9 Amdahl - invalid byte order, +>>18 leshort 10 MIPS R3000_LE, +>>18 leshort 11 RS6000 - invalid byte order, +>>18 leshort 15 PA-RISC - invalid byte order, +>>18 leshort 16 nCUBE, +>>18 leshort 17 VPP500, +>>18 leshort 18 SPARC32PLUS, +>>18 leshort 20 PowerPC, +>>18 leshort 0x9026 Alpha, +>>20 lelong 0 invalid version +>>20 lelong 1 version 1 +>>36 lelong 1 MathCoPro/FPU/MAU Required +>8 string >\0 (%s) +>5 byte 2 MSB +>>16 beshort 0 no file type, +>>16 beshort 1 relocatable, +>>16 beshort 2 executable, +>>16 beshort 3 shared object, +>>16 beshort 4 core file, +>>>(0x38+0xcc) string >\0 of '%s' +>>>(0x38+0x10) belong >0 (signal %d), +>>16 beshort &0xff00 processor-specific, +>>18 beshort 0 no machine, +>>18 beshort 1 AT&T WE32100, +>>18 beshort 2 SPARC, +>>18 beshort 3 Intel 80386 - invalid byte order, +>>18 beshort 4 Motorola 68000, +>>18 beshort 5 Motorola 88000, +>>18 beshort 6 Intel 80486 - invalid byte order, +>>18 beshort 7 Intel 80860, +>>18 beshort 8 MIPS R3000_BE, +>>18 beshort 9 Amdahl, +>>18 beshort 10 MIPS R3000_LE - invalid byte order, +>>18 beshort 11 RS6000, +>>18 beshort 15 PA-RISC, +>>18 beshort 16 nCUBE, +>>18 beshort 17 VPP500, +>>18 beshort 18 SPARC32PLUS, +>>18 beshort 20 PowerPC or cisco 4500, +>>18 beshort 21 cisco 7500, +>>18 beshort 24 cisco SVIP, +>>18 beshort 25 cisco 7200, +>>18 beshort 36 cisco 12000, +>>18 beshort 0x9026 Alpha, +>>20 belong 0 invalid version +>>20 belong 1 version 1 +>>36 belong 1 MathCoPro/FPU/MAU Required + +#------------------------------------------------------------------------------ +# VXL: file(1) magic for VXL binary IO data files +# +# from Ian Scott +# +# VXL is a collection of C++ libraries for Computer Vision. +# See the vsl chapter in the VXL Book for more info +# http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html +# http:/vxl.sf.net + +2 lelong 0x472b2c4e VXL data file, +>0 leshort >0 schema version no %d + +#------------------------------------------------------------------------------ +# unknown: file(1) magic for unknown machines +# +# XXX - this probably should be pruned, as it'll match PDP-11 and +# VAX image formats. +# +# 0x107 is 0407; 0x108 is 0410; both are PDP-11 (executable and pure, +# respectively). +# +# 0x109 is 0411; that's PDP-11 split I&D, but the PDP-11 version doesn't +# have the "version %ld", which may be a bogus COFFism (I don't think +# there ever was COFF for the PDP-11). +# +# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a +# long, as it would be on a VAX. +# +# 0x10C is 0414 and 0x10E is 416; those *are* unknown. +# +0 short 0x107 unknown machine executable +>8 short >0 not stripped +>15 byte >0 - version %ld +0 short 0x108 unknown pure executable +>8 short >0 not stripped +>15 byte >0 - version %ld +0 short 0x109 PDP-11 separate I&D +>8 short >0 not stripped +>15 byte >0 - version %ld +0 short 0x10b unknown pure executable +>8 short >0 not stripped +>15 byte >0 - version %ld +0 long 0x10c unknown demand paged pure executable +>16 long >0 not stripped +0 long 0x10e unknown readable demand paged pure executable + +#------------------------------------------------------------------------------ +# Hierarchical Data Format, used to facilitate scientific data exchange +# specifications at http://hdf.ncsa.uiuc.edu/ + +0 belong 0x0e031301 Hierarchical Data Format (version 4) data +0 string \211HDF\r\n\032 Hierarchical Data Format (version 5) data + +#------------------------------------------------------------------------------ +# mail.news: file(1) magic for mail and news +# +# Unfortunately, saved netnews also has From line added in some news software. +#0 string From mail text +# There are tests to ascmagic.c to cope with mail and news. +0 string Relay-Version: old news text +0 string #!\ rnews batched news text +0 string N#!\ rnews mailed, batched news text +0 string Forward\ to mail forwarding text +0 string Pipe\ to mail piping text +0 string Return-Path: smtp mail text +0 string Path: news text +0 string Xref: news text +0 string From: news or mail text +0 string Article saved news text +0 string BABYL Emacs RMAIL text +0 string Received: RFC 822 mail text +0 string MIME-Version: MIME entity text +#0 string Content- MIME entity text + +# TNEF files... +0 lelong 0x223E9F78 Transport Neutral Encapsulation Format + +# From: Kevin Sullivan +0 string *mbx* MBX mail folder + +# From: Simon Matter +0 string \241\002\213\015skiplist\ file\0\0\0 Cyrus skiplist DB + +# JAM(mbp) Fidonet message area databases +# JHR file +0 string JAM\0 JAM message area header file +>12 leshort >0 (%d messages) + +# Squish Fidonet message area databases +# SQD file (requires at least one message in the area) +256 leshort 0xAFAE4453 Squish message area data file +>4 leshort >0 (%d messages) +#------------------------------------------------------------------------------ +# modem: file(1) magic for modem programs +# +# From: Florian La Roche +4 string Research, Digifax-G3-File +>29 byte 1 , fine resolution +>29 byte 0 , normal resolution + +0 short 0x0100 raw G3 data, byte-padded +0 short 0x1400 raw G3 data +# +# Magic data for vgetty voice formats +# (Martin Seine & Marc Eberhard) + +# +# raw modem data version 1 +# +0 string RMD1 raw modem data +>4 string >\0 (%s / +>20 short >0 compression type 0x%04x) + +# +# portable voice format 1 +# +0 string PVF1\n portable voice format +>5 string >\0 (binary %s) + +# +# portable voice format 2 +# +0 string PVF2\n portable voice format +>5 string >\0 (ascii %s) + + +#------------------------------------------------------------------------------ +# xwindows: file(1) magic for various X/Window system file formats. + +# Compiled X Keymap +# XKM (compiled X keymap) files (including version and byte ordering) +1 string mkx Compiled XKB Keymap: lsb, +>0 byte >0 version %d +>0 byte =0 obsolete +0 string xkm Compiled XKB Keymap: msb, +>3 byte >0 version %d +>0 byte =0 obsolete + +# xfsdump archive +0 string xFSdump0 xfsdump archive +>8 long x (version %d) + +# Jaleo XFS files +0 long 395726 Jaleo XFS file +>4 long x - version %ld +>8 long x - [%ld - +>20 long x %ldx +>24 long x %ldx +>28 long 1008 YUV422] +>28 long 1000 RGB24] + +#------------------------------------------------------------------------------ +# wordprocessors: file(1) magic fo word processors. +# +####### PWP file format used on Smith Corona Personal Word Processors: +2 string \040\040\040\040\040\040\040\040\040\040\040ML4D\040\'92 Smith Corona PWP +>24 byte 2 \b, single spaced +>24 byte 3 \b, 1.5 spaced +>24 byte 4 \b, double spaced +>25 byte 0x42 \b, letter +>25 byte 0x54 \b, legal +>26 byte 0x46 \b, A4 + +#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE +0 string \377WPC\020\000\000\000\022\012\001\001\000\000\000\000 (WP) loadable text +>15 byte 0 Optimized for Intel +>15 byte 1 Optimized for Non-Intel +1 string WPC (Corel/WP) +>8 short 257 WordPerfect macro +>8 short 258 WordPerfect help file +>8 short 259 WordPerfect keyboard file +>8 short 266 WordPerfect document +>8 short 267 WordPerfect dictionary +>8 short 268 WordPerfect thesaurus +>8 short 269 WordPerfect block +>8 short 270 WordPerfect rectangular block +>8 short 271 WordPerfect column block +>8 short 272 WordPerfect printer data +>8 short 275 WordPerfect printer data +>8 short 276 WordPerfect driver resource data +>8 short 279 WordPerfect hyphenation code +>8 short 280 WordPerfect hyphenation data +>8 short 281 WordPerfect macro resource data +>8 short 283 WordPerfect hyphenation lex +>8 short 285 WordPerfect wordlist +>8 short 286 WordPerfect equation resource data +>8 short 289 WordPerfect spell rules +>8 short 290 WordPerfect dictionary rules +>8 short 295 WordPerfect spell rules (Microlytics) +>8 short 299 WordPerfect settings file +>8 short 301 WordPerfect 4.2 document +>8 short 325 WordPerfect dialog file +>8 short 332 WordPerfect button bar +>8 short 513 Shell macro +>8 short 522 Shell definition +>8 short 769 Notebook macro +>8 short 770 Notebook help file +>8 short 771 Notebook keyboard file +>8 short 778 Notebook definition +>8 short 1026 Calculator help file +>8 short 1538 Calendar help file +>8 short 1546 Calendar data file +>8 short 1793 Editor macro +>8 short 1794 Editor help file +>8 short 1795 Editor keyboard file +>8 short 1817 Editor macro resource file +>8 short 2049 Macro editor macro +>8 short 2050 Macro editor help file +>8 short 2051 Macro editor keyboard file +>8 short 2305 PlanPerfect macro +>8 short 2306 PlanPerfect help file +>8 short 2307 PlanPerfect keyboard file +>8 short 2314 PlanPerfect worksheet +>8 short 2319 PlanPerfect printer definition +>8 short 2322 PlanPerfect graphic definition +>8 short 2323 PlanPerfect data +>8 short 2324 PlanPerfect temporary printer +>8 short 2329 PlanPerfect macro resource data +>8 byte 11 Mail +>8 short 2818 help file +>8 short 2821 distribution list +>8 short 2826 out box +>8 short 2827 in box +>8 short 2836 users archived mailbox +>8 short 2837 archived message database +>8 short 2838 archived attachments +>8 short 3083 Printer temporary file +>8 short 3330 Scheduler help file +>8 short 3338 Scheduler in file +>8 short 3339 Scheduler out file +>8 short 3594 GroupWise settings file +>8 short 3601 GroupWise directory services +>8 short 3627 GroupWise settings file +>8 short 4362 Terminal resource data +>8 short 4363 Terminal resource data +>8 short 4395 Terminal resource data +>8 short 4619 GUI loadable text +>8 short 4620 graphics resource data +>8 short 4621 printer settings file +>8 short 4622 port definition file +>8 short 4623 print queue parameters +>8 short 4624 compressed file +>8 short 5130 Network service msg file +>8 short 5131 Network service msg file +>8 short 5132 Async gateway login msg +>8 short 5134 GroupWise message file +>8 short 7956 GroupWise admin domain database +>8 short 7957 GroupWise admin host database +>8 short 7959 GroupWise admin remote host database +>8 short 7960 GroupWise admin ADS deferment data file +>8 short 8458 IntelliTAG (SGML) compiled DTD +>8 long 18219264 WordPerfect graphic image (1.0) +>8 long 18219520 WordPerfect graphic image (2.0) +#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE + +# Hangul (Korean) Word Processor File +0 string HWP\ Document\ File Hangul (Korean) Word Processor File + +# CosmicBook, from Benoît Rouits +0 string CSBK Ted Neslson's CosmicBook hypertext file + + +#------------------------------------------------------------------------------ +# sun: file(1) magic for Sun machines +# +# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x +# releases. (5.x uses ELF.) +# +0 belong&077777777 0600413 sparc demand paged +>0 byte &0x80 +>>20 belong <4096 shared library +>>20 belong =4096 dynamically linked executable +>>20 belong >4096 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&077777777 0600410 sparc pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&077777777 0600407 sparc +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped + +0 belong&077777777 0400413 mc68020 demand paged +>0 byte &0x80 +>>20 belong <4096 shared library +>>20 belong =4096 dynamically linked executable +>>20 belong >4096 dynamically linked executable +>16 belong >0 not stripped +0 belong&077777777 0400410 mc68020 pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&077777777 0400407 mc68020 +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped + +0 belong&077777777 0200413 mc68010 demand paged +>0 byte &0x80 +>>20 belong <4096 shared library +>>20 belong =4096 dynamically linked executable +>>20 belong >4096 dynamically linked executable +>16 belong >0 not stripped +0 belong&077777777 0200410 mc68010 pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&077777777 0200407 mc68010 +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped + +# reworked these to avoid anything beginning with zero becoming "old sun-2" +0 belong 0407 old sun-2 executable +>16 belong >0 not stripped +0 belong 0410 old sun-2 pure executable +>16 belong >0 not stripped +0 belong 0413 old sun-2 demand paged executable +>16 belong >0 not stripped + +# +# Core files. "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC +# binary executed in compatibility mode under SunOS 5.x". +# +0 belong 0x080456 SunOS core file +>4 belong 432 (SPARC) +>>132 string >\0 from '%s' +>>116 belong =3 (quit) +>>116 belong =4 (illegal instruction) +>>116 belong =5 (trace trap) +>>116 belong =6 (abort) +>>116 belong =7 (emulator trap) +>>116 belong =8 (arithmetic exception) +>>116 belong =9 (kill) +>>116 belong =10 (bus error) +>>116 belong =11 (segmentation violation) +>>116 belong =12 (bad argument to system call) +>>116 belong =29 (resource lost) +>>120 belong x (T=%dK, +>>124 belong x D=%dK, +>>128 belong x S=%dK) +>4 belong 826 (68K) +>>128 string >\0 from '%s' +>4 belong 456 (SPARC 4.x BCP) +>>152 string >\0 from '%s' +# Sun SunPC +0 long 0xfa33c08e SunPC 4.0 Hard Disk +0 string #SUNPC_CONFIG SunPC 4.0 Properties Values +# Sun snoop (see RFC 1761, which describes the capture file format). +# +0 string snoop Snoop capture file +>8 belong >0 - version %ld +>12 belong 0 (IEEE 802.3) +>12 belong 1 (IEEE 802.4) +>12 belong 2 (IEEE 802.5) +>12 belong 3 (IEEE 802.6) +>12 belong 4 (Ethernet) +>12 belong 5 (HDLC) +>12 belong 6 (Character synchronous) +>12 belong 7 (IBM channel-to-channel adapter) +>12 belong 8 (FDDI) +>12 belong 9 (Unknown) + +# Microsoft ICM color profile +36 string acspMSFT Microsoft ICM Color Profile +# Sun KCMS +36 string acsp Kodak Color Management System, ICC Profile + +#--------------------------------------------------------------------------- +# The following entries have been tested by Duncan Laurie (a +# lead Sun/Cobalt developer) who agrees that they are good and worthy of +# inclusion. + +# Boot ROM images for Sun/Cobalt Linux server appliances +0 string Cobalt\ Networks\ Inc.\nFirmware\ v Paged COBALT boot rom +>38 string x V%.4s + +# New format for Sun/Cobalt boot ROMs is annoying, it stores the version code +# at the very end where file(1) can't get it. +0 string CRfs COBALT boot rom data (Flat boot rom or file system) + + + +#------------------------------------------------------------------------------ +# Sketch Drawings: http://sketch.sourceforge.net/ +# From: Edwin Mons +0 string ##Sketch Sketch document text +#------------------------------------------------------------------------------ +# bFLT: file(1) magic for BFLT uclinux binary files +# +# From Philippe De Muyter +# +0 string bFLT BFLT executable +>4 belong x - version %ld +>4 belong 4 +>>36 belong&0x1 0x1 ram +>>36 belong&0x2 0x2 gotpic +>>36 belong&0x4 0x4 gzip +>>36 belong&0x8 0x8 gzdata +# +# i80960 b.out objects and archives +# +0 long 0x10d i960 b.out relocatable object +>16 long >0 not stripped +# +# b.out archive (hp-rt on i960) +0 string ! b.out archive +>8 string __.SYMDEF random library + +#------------------------------------------------------------------------------ +# hitach-sh: file(1) magic for Hitachi Super-H +# +# Super-H COFF +# +0 beshort 0x0500 Hitachi SH big-endian COFF +>18 beshort&0x0002 =0x0000 object +>18 beshort&0x0002 =0x0002 executable +>18 beshort&0x0008 =0x0008 \b, stripped +>18 beshort&0x0008 =0x0000 \b, not stripped +# +0 leshort 0x0550 Hitachi SH little-endian COFF +>18 leshort&0x0002 =0x0000 object +>18 leshort&0x0002 =0x0002 executable +>18 leshort&0x0008 =0x0008 \b, stripped +>18 leshort&0x0008 =0x0000 \b, not stripped + + +#------------------------------------------------------------------------------ +# matroska: file(1) magic for Matroska files +# +# See http://www.matroska.org/ +# + +# EBML id: +0 belong 0x1a45dfa3 +# DocType id: +>5 beshort 0x4282 +# DocType contents: +>>8 string matroska Matroska data + + +#------------------------------------------------------------------------------ +# ocaml: file(1) magic for Objective Caml files. +0 string Caml1999 Objective caml +>8 string X exec file +>8 string I interface file (.cmi) +>8 string O object file (.cmo) +>8 string A library file (.cma) +>8 string Y native object file (.cmx) +>8 string Z native library file (.cmxa) +>8 string M abstract syntax tree implementation file +>8 string N abstract syntax tree interface file +>9 string >\0 (Version %3.3s). + +#------------------------------------------------------------------------------ +# vax: file(1) magic for VAX executable/object and APL workspace +# +0 lelong 0101557 VAX single precision APL workspace +0 lelong 0101556 VAX double precision APL workspace + +# +# VAX a.out (32V, BSD) +# +0 lelong 0407 VAX executable +>16 lelong >0 not stripped + +0 lelong 0410 VAX pure executable +>16 lelong >0 not stripped + +0 lelong 0413 VAX demand paged pure executable +>16 lelong >0 not stripped + +0 lelong 0420 VAX demand paged (first page unmapped) pure executable +>16 lelong >0 not stripped + +# +# VAX COFF +# +# The `versions' should be un-commented if they work for you. +# (Was the problem just one of endianness?) +# +0 leshort 0570 VAX COFF executable +>12 lelong >0 not stripped +>22 leshort >0 - version %ld +0 leshort 0575 VAX COFF pure executable +>12 lelong >0 not stripped +>22 leshort >0 - version %ld + +#------------------------------------------------------------------------------ +# clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper. +# +# XXX - what byte order does the Clipper use? +# +# XXX - what's the "!" stuff: +# +# >18 short !074000,000000 C1 R1 +# >18 short !074000,004000 C2 R1 +# >18 short !074000,010000 C3 R1 +# >18 short !074000,074000 TEST +# +# I shall assume it's ANDing the field with the first value and +# comparing it with the second, and rewrite it as: +# +# >18 short&074000 000000 C1 R1 +# >18 short&074000 004000 C2 R1 +# >18 short&074000 010000 C3 R1 +# >18 short&074000 074000 TEST +# +# as SVR3.1's "file" doesn't support anything of the "!074000,000000" +# sort, nor does SunOS 4.x, so either it's something Intergraph added +# in CLIX, or something AT&T added in SVR3.2 or later, or something +# somebody else thought was a good idea; it's not documented in the +# man page for this version of "magic", nor does it appear to be +# implemented (at least not after I blew off the bogus code to turn +# old-style "&"s into new-style "&"s, which just didn't work at all). +# +0 short 0575 CLIPPER COFF executable (VAX #) +>20 short 0407 (impure) +>20 short 0410 (5.2 compatible) +>20 short 0411 (pure) +>20 short 0413 (demand paged) +>20 short 0443 (target shared library) +>12 long >0 not stripped +>22 short >0 - version %ld +0 short 0577 CLIPPER COFF executable +>18 short&074000 000000 C1 R1 +>18 short&074000 004000 C2 R1 +>18 short&074000 010000 C3 R1 +>18 short&074000 074000 TEST +>20 short 0407 (impure) +>20 short 0410 (pure) +>20 short 0411 (separate I&D) +>20 short 0413 (paged) +>20 short 0443 (target shared library) +>12 long >0 not stripped +>22 short >0 - version %ld +>48 long&01 01 alignment trap enabled +>52 byte 1 -Ctnc +>52 byte 2 -Ctsw +>52 byte 3 -Ctpw +>52 byte 4 -Ctcb +>53 byte 1 -Cdnc +>53 byte 2 -Cdsw +>53 byte 3 -Cdpw +>53 byte 4 -Cdcb +>54 byte 1 -Csnc +>54 byte 2 -Cssw +>54 byte 3 -Cspw +>54 byte 4 -Cscb +4 string pipe CLIPPER instruction trace +4 string prof CLIPPER instruction profile + +#------------------------------------------------------------------------------ +# frame: file(1) magic for FrameMaker files +# +# This stuff came on a FrameMaker demo tape, most of which is +# copyright, but this file is "published" as witness the following: +# +0 string \11 string 5.5 (5.5 +>11 string 5.0 (5.0 +>11 string 4.0 (4.0 +>11 string 3.0 (3.0 +>11 string 2.0 (2.0 +>11 string 1.0 (1.0 +>14 byte x %c) +0 string \9 string 4.0 (4.0) +>9 string 3.0 (3.0) +>9 string 2.0 (2.0) +>9 string 1.0 (1.x) +0 string \17 string 3.0 (3.0) +>17 string 2.0 (2.0) +>17 string 1.0 (1.x) +0 string \17 string 1.01 (%s) +0 string \10 string 3.0 (3.0 +>10 string 2.0 (2.0 +>10 string 1.0 (1.0 +>13 byte x %c) +# XXX - this book entry should be verified, if you find one, uncomment this +#0 string \6 string 3.0 (3.0) +#>6 string 2.0 (2.0) +#>6 string 1.0 (1.0) +0 string \4 lelong x (version %d) (little endian) +0 belong 0xF11E041C magic binary file for file(1) cmd +>4 belong x (version %d) (big endian) + +#------------------------------------------------------------------------------ +# sql: file(1) magic for SQL files +# +# From: "Marty Leisner" +# Recognize some MySQL files. +# +0 beshort 0xfe01 MySQL table definition file +>2 byte x Version %d +0 belong&0xffffff00 0xfefe0300 MySQL MISAM index file +>3 byte x Version %d +0 belong&0xffffff00 0xfefe0700 MySQL MISAM compressed data file +>3 byte x Version %d +0 belong&0xffffff00 0xfefe0500 MySQL ISAM index file +>3 byte x Version %d +0 belong&0xffffff00 0xfefe0600 MySQL ISAM compressed data file +>3 byte x Version %d +0 string \376bin MySQL replication log + +#------------------------------------------------------------------------------ +# dact: file(1) magic for DACT compressed files +# +0 long 0x444354C3 DACT compressed data +>4 byte >-1 (version %i. +>5 byte >-1 $BS%i. +>6 byte >-1 $BS%i) +>7 long >0 $BS, original size: %i bytes +>15 long >30 $BS, block size: %i bytes +# +# GNU nlsutils message catalog file format +# +0 string \336\22\4\225 GNU message catalog (little endian), +>4 lelong x revision %d, +>8 lelong x %d messages +0 string \225\4\22\336 GNU message catalog (big endian), +>4 belong x revision %d, +>8 belong x %d messages +# message catalogs, from Mitchum DSouza +0 string *nazgul* Nazgul style compiled message catalog +>8 lelong >0 \b, version %ld +# GnuPG +# The format is very similar to pgp +0 string \001gpg GPG key trust database +>4 byte x version %d +0 beshort 0x9901 GPG key public ring +# This magic is not particularly good, as the keyrings don't have true +# magic. Nevertheless, it covers many keyrings. + +# Gnumeric spreadsheet +# This entry is only semi-helpful, as Gnumeric compresses its files, so +# they will ordinarily reported as "compressed", but at least -z helps +39 string =12 belong >0 not stripped +# Breaks sun4 statically linked execs. +#0 beshort 0x0103 executable (RT Version 2) or obj module +#>2 byte 0x50 pure +#>28 belong >0 not stripped +#>6 beshort >0 - version %ld +0 beshort 0x0104 shared library +0 beshort 0x0105 ctab data +0 beshort 0xfe04 structured file +0 string 0xabcdef AIX message catalog +0 belong 0x000001f9 AIX compiled message catalog +0 string \ archive +0 string \ archive (big format) + + +#------------------------------------------------------------------------------ +# os2: file(1) magic for OS/2 files +# + +# Provided 1998/08/22 by +# David Mediavilla +1 string InternetShortcut MS Windows 95 Internet shortcut text +>24 string >\ (URL=<%s>) + +# OS/2 URL objects +# Provided 1998/08/22 by +# David Mediavilla +#0 string http: OS/2 URL object text +#>5 string >\ (WWW) +#0 string mailto: OS/2 URL object text +#>7 string >\ (email) <%s> +#0 string news: OS/2 URL object text +#>5 string >\ (Usenet) <%s> +#0 string ftp: OS/2 URL object text +#>4 string >\ (FTP) +#0 string file: OS/2 URL object text +#>5 string >\ (Local file) <%s> + +# >>>>> OS/2 INF/HLP <<<<< (source: Daniel Dissett ddissett@netcom.com) +# Carl Hauser (chauser.parc@xerox.com) and +# Marcus Groeber (marcusg@ph-cip.uni-koeln.de) +# list the following header format in inf02a.doc: +# +# int16 ID; // ID magic word (5348h = "HS") +# int8 unknown1; // unknown purpose, could be third letter of ID +# int8 flags; // probably a flag word... +# // bit 0: set if INF style file +# // bit 4: set if HLP style file +# // patching this byte allows reading HLP files +# // using the VIEW command, while help files +# // seem to work with INF settings here as well. +# int16 hdrsize; // total size of header +# int16 unknown2; // unknown purpose +# +0 string HSP\x01\x9b\x00 OS/2 INF +>107 string >0 (%s) +0 string HSP\x10\x9b\x00 OS/2 HLP +>107 string >0 (%s) + +# OS/2 INI (this is a guess) +0 string \xff\xff\xff\xff\x14\0\0\0 OS/2 INI +#------------------------------------------------------------------------------ +# +# RPM: file(1) magic for Red Hat Packages Erik Troan (ewt@redhat.com) +# +0 beshort 0xedab +>2 beshort 0xeedb RPM +>>4 byte x v%d +>>6 beshort 0 bin +>>6 beshort 1 src +>>8 beshort 1 i386 +>>8 beshort 2 Alpha +>>8 beshort 3 Sparc +>>8 beshort 4 MIPS +>>8 beshort 5 PowerPC +>>8 beshort 6 68000 +>>8 beshort 7 SGI +>>8 beshort 8 RS6000 +>>8 beshort 9 IA64 +>>8 beshort 10 Sparc64 +>>8 beshort 11 MIPSel +>>8 beshort 12 ARM +>>10 string x %s +#----------------------------------------------------------------------------- +# misctools: file(1) magic for miscelanous UNIX tools. +# +0 string %%!! X-Post-It-Note text +0 string BEGIN:VCALENDAR vCalendar calendar file + +#------------------------------------------------------------------------------ +# motorola: file(1) magic for Motorola 68K and 88K binaries +# +# 68K +# +0 beshort 0520 mc68k COFF +>18 beshort ^00000020 object +>18 beshort &00000020 executable +>12 belong >0 not stripped +>168 string .lowmem Apple toolbox +>20 beshort 0407 (impure) +>20 beshort 0410 (pure) +>20 beshort 0413 (demand paged) +>20 beshort 0421 (standalone) +0 beshort 0521 mc68k executable (shared) +>12 belong >0 not stripped +0 beshort 0522 mc68k executable (shared demand paged) +>12 belong >0 not stripped +# +# Motorola/UniSoft 68K Binary Compatibility Standard (BCS) +# +0 beshort 0554 68K BCS executable +# +# 88K +# +# Motorola/88Open BCS +# +0 beshort 0555 88K BCS executable +# +# Motorola S-Records, from Gerd Truschinski +0 string S0 Motorola S-Record; binary data in text format + +# ATARI ST relocatable PRG +# +# from Oskar Schirmer Feb 3, 2001 +# (according to Roland Waldi, Oct 21, 1987) +# besides the magic 0x601a, the text segment size is checked to be +# not larger than 1 MB (which is a lot on ST). +# The additional 0x601b distinction I took from Doug Lee's magic. +0 belong&0xFFFFFFF0 0x601A0000 Atari ST M68K contiguous executable +>2 belong x (txt=%ld, +>6 belong x dat=%ld, +>10 belong x bss=%ld, +>14 belong x sym=%ld) +0 belong&0xFFFFFFF0 0x601B0000 Atari ST M68K non-contig executable +>2 belong x (txt=%ld, +>6 belong x dat=%ld, +>10 belong x bss=%ld, +>14 belong x sym=%ld) + +# Atari ST/TT... program format (sent by Wolfram Kleff ) +0 beshort 0x601A Atari 68xxx executable, +>2 belong x text len %lu, +>6 belong x data len %lu, +>10 belong x BSS len %lu, +>14 belong x symboltab len %lu, +>18 belong 0 +>22 belong &0x01 fastload flag, +>22 belong &0x02 may be loaded to alternate RAM, +>22 belong &0x04 malloc may be from alternate RAM, +>22 belong x flags: 0x%lX, +>26 beshort 0 no relocation tab +>26 beshort !0 + relocation tab +>30 string SFX [Self-Extracting LZH SFX archive] +>38 string SFX [Self-Extracting LZH SFX archive] +>44 string ZIP! [Self-Extracting ZIP SFX archive] + +0 beshort 0x0064 Atari 68xxx CPX file +>8 beshort x (version %04lx) +# +# Mach magic number info +# +0 long 0xefbe OSF/Rose object +# I386 magic number info +# +0 short 0565 i386 COFF object + +#------------------------------------------------------------------------------ +# perl: file(1) magic for Larry Wall's perl language. +# +# The ``eval'' line recognizes an outrageously clever hack for USG systems. +# Keith Waclena +# Send additions to +0 string/b #!\ /bin/perl perl script text executable +0 string eval\ "exec\ /bin/perl perl script text +0 string/b #!\ /usr/bin/perl perl script text executable +0 string eval\ "exec\ /usr/bin/perl perl script text +0 string/b #!\ /usr/local/bin/perl perl script text +0 string eval\ "exec\ /usr/local/bin/perl perl script text executable +0 string eval\ '(exit\ $?0)'\ &&\ eval\ 'exec perl script text + +# a couple more, by me +# XXX: christos matches +#0 regex package Perl5 module source text (via regex) +0 string package Perl5 module source text + +# Perl Storable data files. +0 string perl-store perl Storable(v0.6) data +>4 byte >0 (net-order %d) +>>4 byte &01 (network-ordered) +>>4 byte =3 (major 1) +>>4 byte =2 (major 1) + +0 string pst0 perl Storable(v0.7) data +>4 byte >0 +>>4 byte &01 (network-ordered) +>>4 byte =5 (major 2) +>>4 byte =4 (major 2) +>>5 byte >0 (minor %d) + +#------------------------------------------------------------------------------ +# xenix: file(1) magic for Microsoft Xenix +# +# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small +# model" lifted from "magic.xenix", with comment "derived empirically; +# treat as folklore until proven" +# +# "small model", "large model", "huge model" stuff lifted from XXX +# +# XXX - "x.out" collides with PDP-11 archives +# +0 string core core file (Xenix) +0 byte 0x80 8086 relocatable (Microsoft) +0 leshort 0xff65 x.out +>2 string __.SYMDEF randomized +>0 byte x archive +0 leshort 0x206 Microsoft a.out +>8 leshort 1 Middle model +>0x1e leshort &0x10 overlay +>0x1e leshort &0x2 separate +>0x1e leshort &0x4 pure +>0x1e leshort &0x800 segmented +>0x1e leshort &0x400 standalone +>0x1e leshort &0x8 fixed-stack +>0x1c byte &0x80 byte-swapped +>0x1c byte &0x40 word-swapped +>0x10 lelong >0 not-stripped +>0x1e leshort ^0xc000 pre-SysV +>0x1e leshort &0x4000 V2.3 +>0x1e leshort &0x8000 V3.0 +>0x1c byte &0x4 86 +>0x1c byte &0xb 186 +>0x1c byte &0x9 286 +>0x1c byte &0xa 386 +>0x1f byte <0x040 small model +>0x1f byte =0x048 large model +>0x1f byte =0x049 huge model +>0x1e leshort &0x1 executable +>0x1e leshort ^0x1 object file +>0x1e leshort &0x40 Large Text +>0x1e leshort &0x20 Large Data +>0x1e leshort &0x120 Huge Objects Enabled +>0x10 lelong >0 not stripped + +0 leshort 0x140 old Microsoft 8086 x.out +>0x3 byte &0x4 separate +>0x3 byte &0x2 pure +>0 byte &0x1 executable +>0 byte ^0x1 relocatable +>0x14 lelong >0 not stripped + +0 lelong 0x206 b.out +>0x1e leshort &0x10 overlay +>0x1e leshort &0x2 separate +>0x1e leshort &0x4 pure +>0x1e leshort &0x800 segmented +>0x1e leshort &0x400 standalone +>0x1e leshort &0x1 executable +>0x1e leshort ^0x1 object file +>0x1e leshort &0x4000 V2.3 +>0x1e leshort &0x8000 V3.0 +>0x1c byte &0x4 86 +>0x1c byte &0xb 186 +>0x1c byte &0x9 286 +>0x1c byte &0x29 286 +>0x1c byte &0xa 386 +>0x1e leshort &0x4 Large Text +>0x1e leshort &0x2 Large Data +>0x1e leshort &0x102 Huge Objects Enabled + +0 leshort 0x580 XENIX 8086 relocatable or 80286 small model +#------------------------------------------------------------------------------ +# file(1) magic for tgif(1) files +# From Hendrik Scholz + +0 string %TGIF\ 4 tgif version 4 object file + + +#------------------------------------------------------------------------------ +# sc: file(1) magic for "sc" spreadsheet +# +38 string Spreadsheet sc spreadsheet file + +#------------------------------------------------------------------------------ +# pyramid: file(1) magic for Pyramids +# +# XXX - byte order? +# +0 long 0x50900107 Pyramid 90x family executable +0 long 0x50900108 Pyramid 90x family pure executable +>16 long >0 not stripped +0 long 0x5090010b Pyramid 90x family demand paged pure executable +>16 long >0 not stripped + +#------------------------------------------------------------------------------ +# adventure: file(1) magic for Adventure game files +# +# from Allen Garvin +# Edited by Dave Chapeskie Jun 28, 1998 +# Edited by Chris Chittleborough , March 2002 +# +# ALAN +# I assume there are other, lower versions, but these are the only ones I +# saw in the archive. +0 beshort 0x0206 ALAN game data +>2 byte <10 version 2.6%d + +# Conflicts with too much other stuff! +# Infocom +# (Note: to avoid false matches Z-machine version 1 and 2 are not +# recognized since only the oldest Zork I and II used them. Similarly +# there are 4 Infocom games that use version 4 that are not recognized.) +#0 byte 3 Infocom game data (Z-machine 3, +#>2 beshort <0x7fff Release %3d, +#>26 beshort >0 Size %d*2 +#>18 string >\0 Serial %.6s) +#0 byte 5 Infocom game data (Z-machine 5, +#>2 beshort <0x7fff Release %3d, +#>26 beshort >0 Size %d*4 +#>18 string >\0 Serial %.6s) +#0 byte 6 Infocom game data (Z-machine 6, +#>2 beshort <0x7fff Release %3d, +#>26 beshort >0 Size %d*8 +#>18 string >\0 Serial %.6s) +#0 byte 8 Infocom game data (Z-machine 8, +#>2 beshort <0x7fff Release %3d, +#>26 beshort >0 Size %d*8 +#>18 string >\0 Serial %.6s) + +# TADS (Text Adventure Development System) +# All files are machine-independent (games compile to byte-code) and are tagged +# with a version string of the form "V2..\0" (but TADS 3 is +# on the way). +# Game files start with "TADS2 bin\n\r\032\0" then the compiler version. +0 string TADS2\ bin TADS +>9 belong !0x0A0D1A00 game data, CORRUPTED +>9 belong 0x0A0D1A00 +>>13 string >\0 %s game data +# Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version. +0 string TADS2\ rsc TADS +>9 belong !0x0A0D1A00 resource data, CORRUPTED +>9 belong 0x0A0D1A00 +>>13 string >\0 %s resource data +# Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian +# 2-byte length N, the N-char name of the game file *without* a NUL (darn!), +# "TADS2 save\n\r\032\0" and the interpreter version. +0 string TADS2\ save/g TADS +>12 belong !0x0A0D1A00 saved game data, CORRUPTED +>12 belong 0x0A0D1A00 +>>(16.s+32) string >\0 %s saved game data +# Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter +# version. +0 string TADS2\ save TADS +>10 belong !0x0A0D1A00 saved game data, CORRUPTED +>10 belong 0x0A0D1A00 +>>14 string >\0 %s saved game data + +#------------------------------------------------------------------------------ +# att3b: file(1) magic for AT&T 3B machines +# +# The `versions' should be un-commented if they work for you. +# (Was the problem just one of endianness?) +# +# 3B20 +# +# The 3B20 conflicts with SCCS. +#0 beshort 0550 3b20 COFF executable +#>12 belong >0 not stripped +#>22 beshort >0 - version %ld +#0 beshort 0551 3b20 COFF executable (TV) +#>12 belong >0 not stripped +#>22 beshort >0 - version %ld +# +# WE32K +# +0 beshort 0560 WE32000 COFF +>18 beshort ^00000020 object +>18 beshort &00000020 executable +>12 belong >0 not stripped +>18 beshort ^00010000 N/A on 3b2/300 w/paging +>18 beshort &00020000 32100 required +>18 beshort &00040000 and MAU hardware required +>20 beshort 0407 (impure) +>20 beshort 0410 (pure) +>20 beshort 0413 (demand paged) +>20 beshort 0443 (target shared library) +>22 beshort >0 - version %ld +0 beshort 0561 WE32000 COFF executable (TV) +>12 belong >0 not stripped +#>18 beshort &00020000 - 32100 required +#>18 beshort &00040000 and MAU hardware required +#>22 beshort >0 - version %ld +# +# core file for 3b2 +0 string \000\004\036\212\200 3b2 core file +>364 string >\0 of '%s' + +#------------------------------------------------------------------------------ +# flash: file(1) magic for Macromedia Flash file format +# +# See +# +# http://www.macromedia.com/software/flash/open/ +# +0 string FWS Macromedia Flash data, +>3 byte x version %d +0 string CWS Macromedia Flash data (compressed), +>3 byte x version %d +# +# From Dave Wilson +0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document + +#------------------------------------------------------------------------------ +# karma: file(1) magic for Karma data files +# +# From + +0 string KarmaRHD Version Karma Data Structure Version +>16 belong x %lu +#------------------------------------------------------------------------------ +# octave binary data file(1) magic, from Dirk Eddelbuettel +0 string Octave-1-L Octave binary data (little endian) +0 string Octave-1-B Octave binary data (big endian) + +#------------------------------------------------------------------------------ +# +# Parix COFF executables +# From: Ignatios Souvatzis +# +0 beshort&0xfff 0xACE PARIX +>0 byte&0xf0 0x80 T800 +>0 byte&0xf0 0x90 T9000 +>19 byte&0x02 0x02 executable +>19 byte&0x02 0x00 object +>19 byte&0x0c 0x00 not stripped + +#------------------------------------------------------------------------------ +# plan9: file(1) magic for AT&T Bell Labs' Plan 9 executables +# From: "Stefan A. Haubenthal" +# +0 belong 0x00000107 Plan 9 executable, Motorola 68k +0 belong 0x000001EB Plan 9 executable, Intel 386 +0 belong 0x00000247 Plan 9 executable, Intel 960 +0 belong 0x000002AB Plan 9 executable, SPARC +0 belong 0x00000407 Plan 9 executable, MIPS R3000 +0 belong 0x0000048B Plan 9 executable, AT&T DSP 3210 +0 belong 0x00000517 Plan 9 executable, MIPS R4000 BE +0 belong 0x000005AB Plan 9 executable, AMD 29000 +0 belong 0x00000647 Plan 9 executable, ARM 7-something +0 belong 0x000006EB Plan 9 executable, PowerPC +0 belong 0x00000797 Plan 9 executable, MIPS R4000 LE +0 belong 0x0000084B Plan 9 executable, DEC Alpha + +#------------------------------------------------------------------------------ +# troff: file(1) magic for *roff +# +# updated by Daniel Quinlan (quinlan@yggdrasil.com) + +# troff input +0 string .\\" troff or preprocessor input text +0 string '\\" troff or preprocessor input text +0 string '.\\" troff or preprocessor input text +0 string \\" troff or preprocessor input text +0 string ''' troff or preprocessor input text + +# ditroff intermediate output text +0 string x\ T ditroff output text +>4 string cat for the C/A/T phototypesetter +>4 string ps for PostScript +>4 string dvi for DVI +>4 string ascii for ASCII +>4 string lj4 for LaserJet 4 +>4 string latin1 for ISO 8859-1 (Latin 1) +>4 string X75 for xditview at 75dpi +>>7 string -12 (12pt) +>4 string X100 for xditview at 100dpi +>>8 string -12 (12pt) + +# output data formats +0 string \100\357 very old (C/A/T) troff output data + +#------------------------------------------------------------------------------ +# spectrum: file(1) magic for Spectrum emulator files. +# +# John Elliott + +# +# Spectrum +3DOS header +# +0 string PLUS3DOS\032 Spectrum +3 data +>15 byte 0 - BASIC program +>15 byte 1 - number array +>15 byte 2 - character array +>15 byte 3 - memory block +>>16 belong 0x001B0040 (screen) +>15 byte 4 - Tasword document +>15 string TAPEFILE - ZXT tapefile +# +# Tape file. This assumes the .TAP starts with a Spectrum-format header, +# which nearly all will. +# +0 string \023\000\000 Spectrum .TAP data +>4 string x "%-10.10s" +>3 byte 0 - BASIC program +>3 byte 1 - number array +>3 byte 2 - character array +>3 byte 3 - memory block +>>14 belong 0x001B0040 (screen) + +# The following three blocks are from pak21-spectrum@srcf.ucam.org +# TZX tape images +0 string ZXTape!\x1a Spectrum .TZX data +>8 byte x version %d +>9 byte x .%d + +# RZX input recording files +0 string RZX! Spectrum .RZX data +>4 byte x version %d +>5 byte x .%d + +# And three sorts of disk image +0 string MV\ -\ CPCEMU\ Disk-Fil Amstrad/Spectrum .DSK data +0 string MV\ -\ CPC\ format\ Dis Amstrad/Spectrum DU54 .DSK data +0 string EXTENDED\ CPC\ DSK\ Fil Amstrad/Spectrum Extended .DSK data + +#------------------------------------------------------------------------------ +# softquad: file(1) magic for SoftQuad Publishing Software +# +# Author/Editor and RulesBuilder +# +# XXX - byte order? +# +0 string \ Compiled SGML rules file +>9 string >\0 Type %s +0 string \ A/E SGML Document binary +>9 string >\0 Type %s +0 string \ A/E SGML binary styles file +>9 string >\0 Type %s +0 short 0xc0de Compiled PSI (v1) data +0 short 0xc0da Compiled PSI (v2) data +>3 string >\0 (%s) +# Binary sqtroff font/desc files... +0 short 0125252 SoftQuad DESC or font file binary +>2 short >0 - version %d +# Bitmaps... +0 string SQ\ BITMAP1 SoftQuad Raster Format text +#0 string SQ\ BITMAP2 SoftQuad Raster Format data +# sqtroff intermediate language (replacement for ditroff int. lang.) +0 string X\ SoftQuad troff Context intermediate +>2 string 495 for AT&T 495 laser printer +>2 string hp for Hewlett-Packard LaserJet +>2 string impr for IMAGEN imPRESS +>2 string ps for PostScript + +#------------------------------------------------------------------------------ +# Dyadic: file(1) magic for Dyalog APL. +# +0 byte 0xaa +>1 byte <4 Dyalog APL +>>1 byte 0x00 incomplete workspace +>>1 byte 0x01 component file +>>1 byte 0x02 external variable +>>1 byte 0x03 workspace +>>2 byte x version %d +>>3 byte x .%d + +#------------------------------------------------------------------------------ +# palm: file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks +# +# Brian Lalor + +# appl +60 belong 0x6170706c PalmOS application +>0 string >\0 "%s" +# TEXt +60 belong 0x54455874 AportisDoc file +>0 string >\0 "%s" +# HACK +60 belong 0x4841434b HackMaster hack +>0 string >\0 "%s" + +# Variety of PalmOS document types +# Michael-John Turner +# Thanks to Hasan Umit Ezerce for his DocType +60 string BVokBDIC BDicty PalmOS document +>0 string >\0 "%s" +60 string DB99DBOS DB PalmOS document +>0 string >\0 "%s" +60 string vIMGView FireViewer/ImageViewer PalmOS document +>0 string >\0 "%s" +60 string PmDBPmDB HanDBase PalmOS document +>0 string >\0 "%s" +60 string InfoINDB InfoView PalmOS document +>0 string >\0 "%s" +60 string ToGoToGo iSilo PalmOS document +>0 string >\0 "%s" +60 string JfDbJBas JFile PalmOS document +>0 string >\0 "%s" +60 string JfDbJFil JFile Pro PalmOS document +>0 string >\0 "%s" +60 string DATALSdb List PalmOS document +>0 string >\0 "%s" +60 string Mdb1Mdb1 MobileDB PalmOS document +>0 string >\0 "%s" +60 string PNRdPPrs PeanutPress PalmOS document +>0 string >\0 "%s" +60 string DataPlkr Plucker PalmOS document +>0 string >\0 "%s" +60 string DataSprd QuickSheet PalmOS document +>0 string >\0 "%s" +60 string SM01SMem SuperMemo PalmOS document +>0 string >\0 "%s" +60 string DataTlPt TealDoc PalmOS document +>0 string >\0 "%s" +60 string InfoTlIf TealInfo PalmOS document +>0 string >\0 "%s" +60 string DataTlMl TealMeal PalmOS document +>0 string >\0 "%s" +60 string DataTlPt TealPaint PalmOS document +>0 string >\0 "%s" +60 string dataTDBP ThinkDB PalmOS document +>0 string >\0 "%s" +60 string TdatTide Tides PalmOS document +>0 string >\0 "%s" +60 string ToRaTRPW TomeRaider PalmOS document +>0 string >\0 "%s" + +# A GutenPalm zTXT etext for use on Palm Pilots (http://gutenpalm.sf.net) +# For version 1.xx zTXTs, outputs version and numbers of bookmarks and +# annotations. +# For other versions, just outputs version. +# +60 string zTXT A GutenPalm zTXT e-book +>0 string >\0 "%s" +>(0x4E.L) byte 0 +>>(0x4E.L+1) byte x (v0.%02d) +>(0x4E.L) byte 1 +>>(0x4E.L+1) byte x (v1.%02d) +>>>(0x4E.L+10) beshort >0 +>>>>(0x4E.L+10) beshort <2 - 1 bookmark +>>>>(0x4E.L+10) beshort >1 - %d bookmarks +>>>(0x4E.L+14) beshort >0 +>>>>(0x4E.L+14) beshort <2 - 1 annotation +>>>>(0x4E.L+14) beshort >1 - %d annotations +>(0x4E.L) byte >1 (v%d. +>>(0x4E.L+1) byte x %02d) + +# Palm OS .prc file types +60 string libr Palm OS dynamic library data +>0 string >\0 "%s" +60 string ptch Palm OS operating system patch data +>0 string >\0 "%s" + +# Mobipocket (www.mobipocket.com), donated by Carl Witty +60 string BOOKMOBI Mobipocket E-book +>0 string >\0 "%s" +#------------------------------------------------------------------------------ +# pdf: file(1) magic for Portable Document Format +# + +0 string %PDF- PDF document +>5 byte x \b, version %c +>7 byte x \b.%c + +#------------------------------------------------------------------------------ +# vorbis: file(1) magic for Ogg/Vorbis files +# +# From Felix von Leitner +# Extended by Beni Cherniavsky +# Further extended by Greg Wooledge +# +# Most (everything but the number of channels and bitrate) is commented +# out with `##' as it's not interesting to the average user. The most +# probable things advanced users would want to uncomment are probably +# the number of comments and the encoder version. +# +# --- Ogg Framing --- +0 string OggS Ogg data +>4 byte !0 UNKNOWN REVISION %u +##>4 byte 0 revision 0 +>4 byte 0 +##>>14 lelong x (Serial %lX) +# non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net) +>>28 string fLaC \b, FLAC audio +# non-Vorbis content: Theora +>>28 string \x80theora \b, Theora video +# non-Vorbis content: Speex +>>28 string Speex\ \ \ \b, Speex audio +# non-Vorbis content: OGM +>>28 string \x01video\0\0\0 \b, OGM video +>>>37 string/c div3 (DivX 3) +>>>37 string/c divx (DivX 4) +>>>37 string/c dx50 (DivX 5) +>>>37 string/c xvid (XviD) +# --- First vorbis packet - general header --- +>>28 string \x01vorbis \b, Vorbis audio, +>>>35 lelong !0 UNKNOWN VERSION %lu, +##>>>35 lelong 0 version 0, +>>>35 lelong 0 +>>>>39 ubyte 1 mono, +>>>>39 ubyte 2 stereo, +>>>>39 ubyte >2 %u channels, +>>>>40 lelong x %lu Hz +# Minimal, nominal and maximal bitrates specified when encoding +>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff \b, +# The above tests if at least one of these is specified: +>>>>>52 lelong !-1 +# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields +# instead of -1. +# Vorbis 1.0 uses 0 instead of -1. +>>>>>>52 lelong !0 +>>>>>>>52 lelong !-1000 +>>>>>>>>52 lelong x <%lu +>>>>>48 lelong !-1 +>>>>>>48 lelong x ~%lu +>>>>>44 lelong !-1 +>>>>>>44 lelong !-1000 +>>>>>>>44 lelong !0 +>>>>>>>>44 lelong x >%lu +>>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff bps +# -- Second vorbis header packet - the comments +# A kludge to read the vendor string. It's a counted string, not a +# zero-terminated one, so file(1) can't read it in a generic way. +# libVorbis is the only one existing currently, so I detect specifically +# it. The interesting value is the cvs date (8 digits decimal). +# Post-RC1 Ogg files have the second header packet (and thus the version) +# in a different place, so we must use an indirect offset. +>>>(84.b+85) string \x03vorbis +>>>>(84.b+96) string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I +>>>>>(84.b+120) string >00000000 +# Map to beta version numbers: +>>>>>>(84.b+120) string <20000508 (>>>>>(84.b+120) string 20000508 (1.0 beta 1 or beta 2) +>>>>>>(84.b+120) string >20000508 +>>>>>>>(84.b+120) string <20001031 (beta2-3) +>>>>>>(84.b+120) string 20001031 (1.0 beta 3) +>>>>>>(84.b+120) string >20001031 +>>>>>>>(84.b+120) string <20010225 (beta3-4) +>>>>>>(84.b+120) string 20010225 (1.0 beta 4) +>>>>>>(84.b+120) string >20010225 +>>>>>>>(84.b+120) string <20010615 (beta4-RC1) +>>>>>>(84.b+120) string 20010615 (1.0 RC1) +>>>>>>(84.b+120) string 20010813 (1.0 RC2) +>>>>>>(84.b+120) string 20010816 (RC2 - Garf tuned v1) +>>>>>>(84.b+120) string 20011014 (RC2 - Garf tuned v2) +>>>>>>(84.b+120) string 20011217 (1.0 RC3) +>>>>>>(84.b+120) string 20011231 (1.0 RC3) +# Some pre-1.0 CVS snapshots still had "Xiphphorus"... +>>>>>>(84.b+120) string >20011231 (pre-1.0 CVS) +# For the 1.0 release, Xiphophorus is replaced by Xiph.Org +>>>>(84.b+96) string/c Xiph.Org\ libVorbis\ I \b, created by: Xiph.Org libVorbis I +>>>>>(84.b+117) string >00000000 +>>>>>>(84.b+117) string <20020717 (pre-1.0 CVS) +>>>>>>(84.b+117) string 20020717 (1.0) +>>>>>>(84.b+117) string 20030909 (1.0.1) +>>>>>>(84.b+117) string 20040629 (1.1.0 RC1) + +#----------------------------------------------- +# GNU Smalltalk image, starting at version 1.6.2 +# From: catull_us@yahoo.com +# +0 string GSTIm\0\0 GNU SmallTalk +# little-endian +>7 byte&1 =0 LE image version +>>10 byte x %d. +>>9 byte x \b%d. +>>8 byte x \b%d +#>>12 lelong x , data: %ld +#>>16 lelong x , table: %ld +#>>20 lelong x , memory: %ld +# big-endian +>7 byte&1 =1 BE image version +>>8 byte x %d. +>>9 byte x \b%d. +>>10 byte x \b%d +#>>12 belong x , data: %ld +#>>16 belong x , table: %ld +#>>20 belong x , memory: %ld + + + +#------------------------------------------------------------------------------ +# sgml: file(1) magic for Standard Generalized Markup Language +# HyperText Markup Language (HTML) is an SGML document type, +# from Daniel Quinlan (quinlan@yggdrasil.com) +# adapted to string extenstions by Anthon van der Neut +# Microsoft visual C +# +# I have version 1.0 + +# .aps +0 string HWB\000\377\001\000\000\000 Microsoft Visual C .APS file + +# .ide +#too long 0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157\152\145\143\164\040\106\151\154\145\012\000\032\000\002\000\262\000\272\276\372\316 MSVC .ide +0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157 MSVC .ide + +# .res +0 string \000\000\000\000\040\000\000\000\377 MSVC .res +0 string \377\003\000\377\001\000\020\020\350 MSVC .res +0 string \377\003\000\377\001\000\060\020\350 MSVC .res + +#.lib +0 string \360\015\000\000 Microsoft Visual C library +0 string \360\075\000\000 Microsoft Visual C library +0 string \360\175\000\000 Microsoft Visual C library + +#.pch +0 string DTJPCH0\000\022\103\006\200 Microsoft Visual C .pch + +# .pdb +# too long 0 string Microsoft\ C/C++\ program\ database\ +0 string Microsoft\ C/C++\ MSVC program database +>18 string program\ database\ +>33 string >\0 ver %s + +#.sbr +0 string \000\002\000\007\000 MSVC .sbr +>5 string >\0 %s + +#.bsc +0 string \002\000\002\001 MSVC .bsc + +#.wsp +0 string 1.00\ .0000.0000\000\003 MSVC .wsp version 1.0000.0000 +# these seem to start with the version and contain menus + +#------------------------------------------------------------------------------ +# news: file(1) magic for SunOS NeWS fonts (not "news" as in "netnews") +# +0 string StartFontMetrics ASCII font metrics +0 string StartFont ASCII font bits +0 belong 0x137A2944 NeWS bitmap font +0 belong 0x137A2947 NeWS font family +0 belong 0x137A2950 scalable OpenFont binary +0 belong 0x137A2951 encrypted scalable OpenFont binary +8 belong 0x137A2B45 X11/NeWS bitmap font +8 belong 0x137A2B48 X11/NeWS font family + +# ----------------------------------------------------------- +# VMware specific files (deducted from version 1.1 and log file entries) +# Anthon van der Neut (anthon@mnt.org) +0 belong 0x4d52564e VMware nvram +0 belong 0x434f5744 VMware +>4 byte 3 virtual disk +>>32 lelong x (%d/ +>>36 lelong x \b%d/ +>>40 lelong x \b%d) +>4 byte 2 undoable disk +>>32 string >\0 (%s) + +#------------------------------------------------------------------------------ +# diamond: file(1) magic for Diamond system +# +# ... diamond is a multi-media mail and electronic conferencing system.... +# +# XXX - I think it was either renamed Slate, or replaced by Slate.... +# +# The full deal is too long... +#0 string \n Diamond Multimedia Document +0 string =\n4 bedate x Previous dump %s, +>8 bedate x This dump %s, +>12 belong >0 Volume %ld, +>692 belong 0 Level zero, type: +>692 belong >0 Level %d, type: +>0 belong 1 tape header, +>0 belong 2 beginning of file record, +>0 belong 3 map of inodes on tape, +>0 belong 4 continuation of file record, +>0 belong 5 end of volume, +>0 belong 6 map of inodes deleted, +>0 belong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 belong >0 Flags %x + +24 belong 60011 old-fs dump file (big endian), +#>4 bedate x Previous dump %s, +#>8 bedate x This dump %s, +>12 belong >0 Volume %ld, +>692 belong 0 Level zero, type: +>692 belong >0 Level %d, type: +>0 belong 1 tape header, +>0 belong 2 beginning of file record, +>0 belong 3 map of inodes on tape, +>0 belong 4 continuation of file record, +>0 belong 5 end of volume, +>0 belong 6 map of inodes deleted, +>0 belong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 belong >0 Flags %x + +24 lelong 60012 new-fs dump file (little endian), +>4 ledate x This dump %s, +>8 ledate x Previous dump %s, +>12 lelong >0 Volume %ld, +>692 lelong 0 Level zero, type: +>692 lelong >0 Level %d, type: +>0 lelong 1 tape header, +>0 lelong 2 beginning of file record, +>0 lelong 3 map of inodes on tape, +>0 lelong 4 continuation of file record, +>0 lelong 5 end of volume, +>0 lelong 6 map of inodes deleted, +>0 lelong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 lelong >0 Flags %x + +24 lelong 60011 old-fs dump file (little endian), +#>4 ledate x Previous dump %s, +#>8 ledate x This dump %s, +>12 lelong >0 Volume %ld, +>692 lelong 0 Level zero, type: +>692 lelong >0 Level %d, type: +>0 lelong 1 tape header, +>0 lelong 2 beginning of file record, +>0 lelong 3 map of inodes on tape, +>0 lelong 4 continuation of file record, +>0 lelong 5 end of volume, +>0 lelong 6 map of inodes deleted, +>0 lelong 7 end of medium (for floppy), +>676 string >\0 Label %s, +>696 string >\0 Filesystem %s, +>760 string >\0 Device %s, +>824 string >\0 Host %s, +>888 lelong >0 Flags %x + +#------------------------------------------------------------------------------ +# linux: file(1) magic for Linux files +# +# Values for Linux/i386 binaries, from Daniel Quinlan +# The following basic Linux magic is useful for reference, but using +# "long" magic is a better practice in order to avoid collisions. +# +# 2 leshort 100 Linux/i386 +# >0 leshort 0407 impure executable (OMAGIC) +# >0 leshort 0410 pure executable (NMAGIC) +# >0 leshort 0413 demand-paged executable (ZMAGIC) +# >0 leshort 0314 demand-paged executable (QMAGIC) +# +0 lelong 0x00640107 Linux/i386 impure executable (OMAGIC) +>16 lelong 0 \b, stripped +0 lelong 0x00640108 Linux/i386 pure executable (NMAGIC) +>16 lelong 0 \b, stripped +0 lelong 0x0064010b Linux/i386 demand-paged executable (ZMAGIC) +>16 lelong 0 \b, stripped +0 lelong 0x006400cc Linux/i386 demand-paged executable (QMAGIC) +>16 lelong 0 \b, stripped +# +0 string \007\001\000 Linux/i386 object file +>20 lelong >0x1020 \b, DLL library +# Linux-8086 stuff: +0 string \01\03\020\04 Linux-8086 impure executable +>28 long !0 not stripped +0 string \01\03\040\04 Linux-8086 executable +>28 long !0 not stripped +# +0 string \243\206\001\0 Linux-8086 object file +# +0 string \01\03\020\20 Minix-386 impure executable +>28 long !0 not stripped +0 string \01\03\040\20 Minix-386 executable +>28 long !0 not stripped +# core dump file, from Bill Reynolds +216 lelong 0421 Linux/i386 core file +>220 string >\0 of '%s' +>200 lelong >0 (signal %d) +# +# LILO boot/chain loaders, from Daniel Quinlan +# this can be overridden by the DOS executable (COM) entry +2 string LILO Linux/i386 LILO boot/chain loader +# +# PSF fonts, from H. Peter Anvin +0 leshort 0x0436 Linux/i386 PC Screen Font data, +>2 byte 0 256 characters, no directory, +>2 byte 1 512 characters, no directory, +>2 byte 2 256 characters, Unicode directory, +>2 byte 3 512 characters, Unicode directory, +>3 byte >0 8x%d +# Linux swap file, from Daniel Quinlan +4086 string SWAP-SPACE Linux/i386 swap file +# according to man page of mkswap (8) March 1999 +4086 string SWAPSPACE2 Linux/i386 swap file (new style) +>0x400 long x %d (4K pages) +>0x404 long x size %d pages +# ECOFF magic for OSF/1 and Linux (only tested under Linux though) +# +# from Erik Troan (ewt@redhat.com) examining od dumps, so this +# could be wrong +# updated by David Mosberger (davidm@azstarnet.com) based on +# GNU BFD and MIPS info found below. +# +0 leshort 0x0183 ECOFF alpha +>24 leshort 0407 executable +>24 leshort 0410 pure +>24 leshort 0413 demand paged +>8 long >0 not stripped +>8 long 0 stripped +>23 leshort >0 - version %ld. +# +# Linux kernel boot images, from Albert Cahalan +# and others such as Axel Kohlmeyer +# and Nicolás Lichtmaier +# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29 +# Linux kernel boot images (i386 arch) (Wolfram Kleff) +514 string HdrS Linux kernel +>510 leshort 0xAA55 x86 boot executable +>>518 leshort >=3D0x200 +>>529 byte 0 zImage, +>>>529 byte 1 bzImage, +>>>(526.s+0x200) string >\0 version %s, +>>498 leshort 1 RO-rootFS, +>>498 leshort 0 RW-rootFS, +>>508 leshort >0 root_dev 0x%X, +>>502 leshort >0 swap_dev 0x%X, +>>504 leshort >0 RAMdisksize %u KB, +>>506 leshort 0xFFFF Normal VGA +>>506 leshort 0xFFFE Extended VGA +>>506 leshort 0xFFFD Prompt for Videomode +>>506 leshort >0 Video mode %d +# This also matches new kernels, which were caught above by "HdrS". +0 belong 0xb8c0078e Linux kernel +>0x1e3 string Loading version 1.3.79 or older +>0x1e9 string Loading from prehistoric times + +# System.map files - Nicolás Lichtmaier +8 string \ A\ _text Linux kernel symbol map text + +# LSM entries - Nicolás Lichtmaier +0 string Begin3 Linux Software Map entry text +0 string Begin4 Linux Software Map entry text (new format) + +# From Matt Zimmerman +0 belong 0x4f4f4f4d User-mode Linux COW file +>4 belong x \b, version %d +>8 string >\0 \b, backing file %s + +############################################################################ +# Linux kernel versions + +0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux +>497 leshort 0 x86 boot sector +>>514 belong 0x8e of a kernel from the dawn of time! +>>514 belong 0x908ed8b4 version 0.99-1.1.42 +>>514 belong 0x908ed8b8 for memtest86 + +>497 leshort !0 x86 kernel +>>504 leshort >0 RAMdisksize=%u KB +>>502 leshort >0 swap=0x%X +>>508 leshort >0 root=0x%X +>>>498 leshort 1 \b-ro +>>>498 leshort 0 \b-rw +>>506 leshort 0xFFFF vga=normal +>>506 leshort 0xFFFE vga=extended +>>506 leshort 0xFFFD vga=ask +>>506 leshort >0 vga=%d +>>514 belong 0x908ed881 version 1.1.43-1.1.45 +>>514 belong 0x15b281cd +>>>0xa8e belong 0x55AA5a5a version 1.1.46-1.2.13,1.3.0 +>>>0xa99 belong 0x55AA5a5a version 1.3.1,2 +>>>0xaa3 belong 0x55AA5a5a version 1.3.3-1.3.30 +>>>0xaa6 belong 0x55AA5a5a version 1.3.31-1.3.41 +>>>0xb2b belong 0x55AA5a5a version 1.3.42-1.3.45 +>>>0xaf7 belong 0x55AA5a5a version 1.3.46-1.3.72 +>>514 string HdrS +>>>518 leshort >0x1FF +>>>>529 byte 0 \b, zImage +>>>>529 byte 1 \b, bzImage +>>>>(526.s+0x200) string >\0 \b, version %s + +# Linux boot sector thefts. +0 belong 0xb8c0078e Linux +>0x1e6 belong 0x454c4b53 ELKS Kernel +>0x1e6 belong !0x454c4b53 style boot sector + +############################################################################ +# Linux 8086 executable +0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless +>5 string . +>>4 string >\0 \b, libc version %s + +0 lelong&0xFF00FFFF 0x4000301 Linux-8086 executable +>2 byte&0x01 !0 \b, unmapped zero page +>2 byte&0x20 0 \b, impure +>2 byte&0x20 !0 +>>2 byte&0x10 !0 \b, A_EXEC +>2 byte&0x02 !0 \b, A_PAL +>2 byte&0x04 !0 \b, A_NSYM +>2 byte&0x08 !0 \b, A_STAND +>2 byte&0x40 !0 \b, A_PURE +>2 byte&0x80 !0 \b, A_TOVLY +>28 long !0 \b, not stripped +>37 string . +>>36 string >\0 \b, libc version %s + +# 0 lelong&0xFF00FFFF 0x10000301 ld86 I80386 executable +# 0 lelong&0xFF00FFFF 0xB000301 ld86 M68K executable +# 0 lelong&0xFF00FFFF 0xC000301 ld86 NS16K executable +# 0 lelong&0xFF00FFFF 0x17000301 ld86 SPARC executable + +# SYSLINUX boot logo files (from 'ppmtolss16' sources) +# http://syslinux.zytor.com/ +# +0 lelong =0x1413f33d SYSLINUX' LSS16 image data +>4 leshort x \b, width %d +>6 leshort x \b, height %d +#------------------------------------------------------------------------------ +# mime: file(1) magic for MIME encoded files +# +0 string Content-Type:\ +>14 string >\0 %s +0 string Content-Type: +>13 string >\0 %s + +#------------------------------------------------------------------------------ +# zilog: file(1) magic for Zilog Z8000. +# +# Was it big-endian or little-endian? My Product Specification doesn't +# say. +# +0 long 0xe807 object file (z8000 a.out) +0 long 0xe808 pure object file (z8000 a.out) +0 long 0xe809 separate object file (z8000 a.out) +0 long 0xe805 overlay object file (z8000 a.out) + +#------------------------------------------------------------------------------ +# sgi: file(1) magic for Silicon Graphics applications + +# +# +# Performance Co-Pilot file types +0 string PmNs PCP compiled namespace (V.0) +0 string PmN PCP compiled namespace +>3 string >\0 (V.%1.1s) +3 lelong 0x84500526 PCP archive +>7 byte x (V.%d) +>20 lelong -2 temporal index +>20 lelong -1 metadata +>20 lelong 0 log volume #0 +>20 lelong >0 log volume #%ld +>24 string >\0 host: %s +0 string PCPFolio PCP +>9 string Version: Archive Folio +>18 string >\0 (V.%s) +0 string #pmchart PCP pmchart view +>9 string Version +>17 string >\0 (V%-3.3s) +0 string pmview PCP pmview config +>7 string Version +>15 string >\0 (V%-3.3s) +0 string #pmlogger PCP pmlogger config +>10 string Version +>18 string >\0 (V%1.1s) +0 string PcPh PCP Help +>4 string 1 Index +>4 string 2 Text +>5 string >\0 (V.%1.1s) +0 string #pmieconf-rules PCP pmieconf rules +>16 string >\0 (V.%1.1s) +3 string pmieconf-pmie PCP pmie config +>17 string >\0 (V.%1.1s) + +# SpeedShop data files +0 lelong 0x13130303 SpeedShop data file + +# mdbm files +0 lelong 0x01023962 mdbm file, version 0 (obsolete) +0 string mdbm mdbm file, +>5 byte x version %d, +>6 byte x 2^%d pages, +>7 byte x pagesize 2^%d, +>17 byte x hash %d, +>11 byte x dataformat %d + +# Alias|Wavefront Maya files +0 string //Maya ASCII Alias|Wavefront Maya Ascii File, +>13 string >\0 version %s +8 string MAYAFOR4 Alias|Wavefront Maya Binary File, +>32 string >\0 version %s scene +8 string MayaFOR4 Alias|Wavefront Maya Binary File, +>32 string >\0 version %s scene +8 string CIMG Alias|Wavefront Maya Image File +8 string DEEP Alias|Wavefront Maya Image File + +#------------------------------------------------------------------------------ +# sequent: file(1) magic for Sequent machines +# +# Sequent information updated by Don Dwiggins . +# For Sequent's multiprocessor systems (incomplete). +0 lelong 0x00ea BALANCE NS32000 .o +>16 lelong >0 not stripped +>124 lelong >0 version %ld +0 lelong 0x10ea BALANCE NS32000 executable (0 @ 0) +>16 lelong >0 not stripped +>124 lelong >0 version %ld +0 lelong 0x20ea BALANCE NS32000 executable (invalid @ 0) +>16 lelong >0 not stripped +>124 lelong >0 version %ld +0 lelong 0x30ea BALANCE NS32000 standalone executable +>16 lelong >0 not stripped +>124 lelong >0 version %ld +# +# Symmetry information added by Jason Merrill . +# Symmetry magic nums will not be reached if DOS COM comes before them; +# byte 0xeb is matched before these get a chance. +0 leshort 0x12eb SYMMETRY i386 .o +>16 lelong >0 not stripped +>124 lelong >0 version %ld +0 leshort 0x22eb SYMMETRY i386 executable (0 @ 0) +>16 lelong >0 not stripped +>124 lelong >0 version %ld +0 leshort 0x32eb SYMMETRY i386 executable (invalid @ 0) +>16 lelong >0 not stripped +>124 lelong >0 version %ld +0 leshort 0x42eb SYMMETRY i386 standalone executable +>16 lelong >0 not stripped +>124 lelong >0 version %ld + +#------------------------------------------------------------------------------ +# blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine +# +# Note that this 0407 conflicts with several other a.out formats... +# +# XXX - should this be redone with "be" and "le", so that it works on +# little-endian machines as well? If so, what's the deal with +# "VAX-order" and "VAX-order2"? +# +#0 long 0407 68K Blit (standalone) executable +#0 short 0407 VAX-order2 68K Blit (standalone) executable +0 short 03401 VAX-order 68K Blit (standalone) executable +0 long 0406 68k Blit mpx/mux executable +0 short 0406 VAX-order2 68k Blit mpx/mux executable +0 short 03001 VAX-order 68k Blit mpx/mux executable +# Need more values for WE32 DMD executables. +# Note that 0520 is the same as COFF +#0 short 0520 tty630 layers executable +#------------------------------------------------------------------------------ +# impulse tracker: file(1) magic for Impulse Tracker data files +# +# From +# These are the /etc/magic entries to decode modules, instruments, and +# samples in Impulse Tracker's native format. + +0 string IMPS Impulse Tracker Sample +>18 byte &2 16 bit +>18 byte ^2 8 bit +>18 byte &4 stereo +>18 byte ^4 mono +0 string IMPI Impulse Tracker Instrument +>28 leshort !0 ITv%x +>30 byte !0 %d samples +0 string IMPM Impulse Tracker Module +>40 leshort !0 compatible w/ITv%x +>42 leshort !0 created w/ITv%x + +#------------------------------------------------------------------------------ +# island: file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1 +# "/etc/magic": +# From: guy@netapp.com (Guy Harris) +# +4 string pgscriptver IslandWrite document +13 string DrawFile IslandDraw document + + +#------------------------------------------------------------------------------ +# maple: file(1) magic for maple files +# "H. Nanosecond" +# Maple V release 4, a multi-purpose math program +# + +# maple library .lib +0 string \000MVR4\nI MapleVr4 library + +# .ind +# no magic for these :-( +# they are compiled indexes for maple files + +# .hdb +0 string \000\004\000\000 Maple help database + +# .mhp +# this has the form +0 string \9 string >\0 version %.1s. +>>10 string +>>>11 string >\0 %.1s + +# .mps +0 string \0\0\001$ Maple something +# from byte 4 it is either 'nul E' or 'soh R' +# I think 'nul E' means a file that was saved as a different name +# a sort of revision marking +# 'soh R' means new +>4 string \000\105 An old revision +>4 string \001\122 The latest save + +# .mpl +# some of these are the same as .mps above +#0000000 000 000 001 044 000 105 same as .mps +#0000000 000 000 001 044 001 122 same as .mps + +0 string #\n##\ Maple something anomalous. +# +# Copyright (c) 1996 Ignatios Souvatzis. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by Ignatios Souvatzis for +# the NetBSD project. +# 4. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# +# +# OS9/6809 module descriptions: +# +0 beshort 0x87CD OS9/6809 module: +# +>6 byte&0x0f 0x00 non-executable +>6 byte&0x0f 0x01 machine language +>6 byte&0x0f 0x02 BASIC I-code +>6 byte&0x0f 0x03 Pascal P-code +>6 byte&0x0f 0x04 C I-code +>6 byte&0x0f 0x05 COBOL I-code +>6 byte&0x0f 0x06 Fortran I-code +# +>6 byte&0xf0 0x10 program executable +>6 byte&0xf0 0x20 subroutine +>6 byte&0xf0 0x30 multi-module +>6 byte&0xf0 0x40 data module +# +>6 byte&0xf0 0xC0 system module +>6 byte&0xf0 0xD0 file manager +>6 byte&0xf0 0xE0 device driver +>6 byte&0xf0 0xF0 device descriptor +# +# OS9/m68k stuff (to be continued) +# +0 beshort 0x4AFC OS9/68K module: +# +# attr +>0x14 byte&0x80 0x80 re-entrant +>0x14 byte&0x40 0x40 ghost +>0x14 byte&0x20 0x20 system-state +# +# lang: +# +>0x13 byte 1 machine language +>0x13 byte 2 BASIC I-code +>0x13 byte 3 Pascal P-code +>0x13 byte 4 C I-code +>0x13 byte 5 COBOL I-code +>0x13 byte 6 Fortran I-code +# +# +# type: +# +>0x12 byte 1 program executable +>0x12 byte 2 subroutine +>0x12 byte 3 multi-module +>0x12 byte 4 data module +>0x12 byte 11 trap library +>0x12 byte 12 system module +>0x12 byte 13 file manager +>0x12 byte 14 device driver +>0x12 byte 15 device descriptor + +#------------------------------------------------------------------------------ +# pkgadd: file(1) magic for SysV R4 PKG Datastreams +# +0 string #\ PaCkAgE\ DaTaStReAm pkg Datastream (SVR4) + +#------------------------------------------------------------------------------ +# xo65 object files +# From: "Ullrich von Bassewitz" +# +0 string \x55\x7A\x6E\x61 xo65 object, +>4 leshort x version %d, +>6 leshort&0x0001 =0x0001 with debug info +>6 leshort&0x0001 =0x0000 no debug info + +# xo65 library files +0 string \x6E\x61\x55\x7A xo65 library, +>4 leshort x version %d + +# o65 object files +0 string \x01\x00\x6F\x36\x35 o65 +>6 leshort&0x1000 =0x0000 executable, +>6 leshort&0x1000 =0x1000 object, +>5 byte x version %d, +>6 leshort&0x8000 =0x8000 65816, +>6 leshort&0x8000 =0x0000 6502, +>6 leshort&0x2000 =0x2000 32 bit, +>6 leshort&0x2000 =0x0000 16 bit, +>6 leshort&0x4000 =0x4000 page reloc, +>6 leshort&0x4000 =0x0000 byte reloc, +>6 leshort&0x0003 =0x0000 alignment 1 +>6 leshort&0x0003 =0x0001 alignment 2 +>6 leshort&0x0003 =0x0002 alignment 4 +>6 leshort&0x0003 =0x0003 alignment 256 +#------------------------------------------------------------------------------ +# Virtutech Compressed Random Access File Format +# +# From +0 string \211\277\036\203 Virtutech CRAFF +>4 belong x v%d +>20 belong 0 uncompressed +>20 belong 1 bzipp2ed +>20 belong 2 gzipped +>24 belong 0 not clean + +#------------------------------------------------------------------------------ +# uuencode: file(1) magic for ASCII-encoded files +# + +# GRR: the first line of xxencoded files is identical to that in uuencoded +# files, but the first character in most subsequent lines is 'h' instead of +# 'M'. (xxencoding uses lowercase letters in place of most of uuencode's +# punctuation and survives BITNET gateways better.) If regular expressions +# were supported, this entry could possibly be split into two with +# "begin\040\.\*\012M" or "begin\040\.\*\012h" (where \. and \* are REs). +0 string begin\040 uuencoded or xxencoded text + +# btoa(1) is an alternative to uuencode that requires less space. +0 string xbtoa\ Begin btoa'd text + +# ship(1) is another, much cooler alternative to uuencode. +# Greg Roelofs, newt@uchicago.edu +0 string $\012ship ship'd binary text + +# bencode(8) is used to encode compressed news batches (Bnews/Cnews only?) +# Greg Roelofs, newt@uchicago.edu +0 string Decode\ the\ following\ with\ bdeco bencoded News text + +# BinHex is the Macintosh ASCII-encoded file format (see also "apple") +# Daniel Quinlan, quinlan@yggdrasil.com +11 string must\ be\ converted\ with\ BinHex BinHex binary text +>41 string x \b, version %.3s + +# GRR: is MIME BASE64 encoding handled somewhere? +#------------------------------------------------------------------------------ +# amanda: file(1) magic for amanda file format +# +0 string AMANDA:\ AMANDA +>8 string TAPESTART\ DATE tape header file, +>>23 string X +>>>25 string >\ Unused %s +>>23 string >\ DATE %s +>8 string FILE\ dump file, +>>13 string >\ DATE %s + +#------------------------------------------------------------------------------ +# audio: file(1) magic for sound formats (see also "iff") +# +# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com), +# and others +# + +# Sun/NeXT audio data +0 string .snd Sun/NeXT audio data: +>12 belong 1 8-bit ISDN mu-law, +>12 belong 2 8-bit linear PCM [REF-PCM], +>12 belong 3 16-bit linear PCM, +>12 belong 4 24-bit linear PCM, +>12 belong 5 32-bit linear PCM, +>12 belong 6 32-bit IEEE floating point, +>12 belong 7 64-bit IEEE floating point, +>12 belong 8 Fragmented sample data, +>12 belong 10 DSP program, +>12 belong 11 8-bit fixed point, +>12 belong 12 16-bit fixed point, +>12 belong 13 24-bit fixed point, +>12 belong 14 32-bit fixed point, +>12 belong 18 16-bit linear with emphasis, +>12 belong 19 16-bit linear compressed, +>12 belong 20 16-bit linear with emphasis and compression, +>12 belong 21 Music kit DSP commands, +>12 belong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice data encoding), +>12 belong 24 compressed (8-bit CCITT G.722 ADPCM) +>12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), +>12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), +>12 belong 27 8-bit A-law (CCITT G.711), +>20 belong 1 mono, +>20 belong 2 stereo, +>20 belong 4 quad, +>16 belong >0 %d Hz + +# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format +# that uses little-endian encoding and has a different magic number +0 lelong 0x0064732E DEC audio data: +>12 lelong 1 8-bit ISDN mu-law, +>12 lelong 2 8-bit linear PCM [REF-PCM], +>12 lelong 3 16-bit linear PCM, +>12 lelong 4 24-bit linear PCM, +>12 lelong 5 32-bit linear PCM, +>12 lelong 6 32-bit IEEE floating point, +>12 lelong 7 64-bit IEEE floating point, +>12 belong 8 Fragmented sample data, +>12 belong 10 DSP program, +>12 belong 11 8-bit fixed point, +>12 belong 12 16-bit fixed point, +>12 belong 13 24-bit fixed point, +>12 belong 14 32-bit fixed point, +>12 belong 18 16-bit linear with emphasis, +>12 belong 19 16-bit linear compressed, +>12 belong 20 16-bit linear with emphasis and compression, +>12 belong 21 Music kit DSP commands, +>12 lelong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice data encoding), +>12 belong 24 compressed (8-bit CCITT G.722 ADPCM) +>12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), +>12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), +>12 belong 27 8-bit A-law (CCITT G.711), +>20 lelong 1 mono, +>20 lelong 2 stereo, +>20 lelong 4 quad, +>16 lelong >0 %d Hz + +# Creative Labs AUDIO stuff +0 string MThd Standard MIDI data +>8 beshort x (format %d) +>10 beshort x using %d track +>10 beshort >1 \bs +>12 beshort&0x7fff x at 1/%d +>12 beshort&0x8000 >0 SMPTE + +0 string CTMF Creative Music (CMF) data +0 string SBI SoundBlaster instrument data +0 string Creative\ Voice\ File Creative Labs voice data +# is this next line right? it came this way... +>19 byte 0x1A +>23 byte >0 - version %d +>22 byte >0 \b.%d + +# first entry is also the string "NTRK" +0 belong 0x4e54524b MultiTrack sound data +>4 belong x - version %ld + +# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED +# [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi] +0 string EMOD Extended MOD sound data, +>4 byte&0xf0 x version %d +>4 byte&0x0f x \b.%d, +>45 byte x %d instruments +>83 byte 0 (module) +>83 byte 1 (song) + +# Real Audio (Magic .ra\0375) +0 belong 0x2e7261fd RealAudio sound file +0 string .RMF RealMedia file + +# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net] +# Oct 31, 1995 +# fixed by 2003-06-24 +# Too short... +#0 string MTM MultiTracker Module sound file +#0 string if Composer 669 Module sound data +#0 string JN Composer 669 Module sound data (extended format) +0 string MAS_U ULT(imate) Module sound data + +#0 string FAR Module sound data +#>4 string >\15 Title: "%s" + +0x2c string SCRM ScreamTracker III Module sound data +>0 string >\0 Title: "%s" + +# Gravis UltraSound patches +# From + +0 string GF1PATCH110\0ID#000002\0 GUS patch +0 string GF1PATCH100\0ID#000002\0 Old GUS patch + +# +# Taken from loader code from mikmod version 2.14 +# by Steve McIntyre (stevem@chiark.greenend.org.uk) +# added title printing on 2003-06-24 +0 string MAS_UTrack_V00 +>14 string >/0 ultratracker V1.%.1s module sound data + +0 string UN05 MikMod UNI format module sound data + +0 string Extended\ Module: Fasttracker II module sound data +>17 string >\0 Title: "%s" + +21 string/c !SCREAM! Screamtracker 2 module sound data +21 string BMOD2STM Screamtracker 2 module sound data +1080 string M.K. 4-channel Protracker module sound data +>0 string >\0 Title: "%s" +1080 string M!K! 4-channel Protracker module sound data +>0 string >\0 Title: "%s" +1080 string FLT4 4-channel Startracker module sound data +>0 string >\0 Title: "%s" +1080 string FLT8 8-channel Startracker module sound data +>0 string >\0 Title: "%s" +1080 string 4CHN 4-channel Fasttracker module sound data +>0 string >\0 Title: "%s" +1080 string 6CHN 6-channel Fasttracker module sound data +>0 string >\0 Title: "%s" +1080 string 8CHN 8-channel Fasttracker module sound data +>0 string >\0 Title: "%s" +1080 string CD81 8-channel Octalyser module sound data +>0 string >\0 Title: "%s" +1080 string OKTA 8-channel Oktalyzer module sound data +>0 string >\0 Title: "%s" +# Not good enough. +#1082 string CH +#>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data +1080 string 16CN 16-channel Taketracker module sound data +>0 string >\0 Title: "%s" +1080 string 32CN 32-channel Taketracker module sound data +>0 string >\0 Title: "%s" + +# TOC sound files -Trevor Johnson +# +0 string TOC TOC sound file + +# sidfiles +# added name,author,(c) and new RSID type by 2003-06-24 +0 string SIDPLAY\ INFOFILE Sidplay info file + +0 string PSID PlaySID v2.2+ (AMIGA) sidtune +>4 beshort >0 w/ header v%d, +>14 beshort =1 single song, +>14 beshort >1 %d songs, +>16 beshort >0 default song: %d +>0x16 string >\0 name: "%s" +>0x36 string >\0 author: "%s" +>0x56 string >\0 copyright: "%s" + +0 string RSID RSID sidtune PlaySID compatible +>4 beshort >0 w/ header v%d, +>14 beshort =1 single song, +>14 beshort >1 %d songs, +>16 beshort >0 default song: %d +>0x16 string >\0 name: "%s" +>0x36 string >\0 author: "%s" +>0x56 string >\0 copyright: "%s" + +# IRCAM +# VAX and MIPS files are little-endian; Sun and NeXT are big-endian +0 belong 0x64a30100 IRCAM file (VAX) +0 belong 0x64a30200 IRCAM file (Sun) +0 belong 0x64a30300 IRCAM file (MIPS little-endian) +0 belong 0x64a30400 IRCAM file (NeXT) + +# NIST SPHERE +0 string NIST_1A\n\ \ \ 1024\n NIST SPHERE file + +# Sample Vision +0 string SOUND\ SAMPLE\ DATA\ Sample Vision file + +# Audio Visual Research +0 string 2BIT Audio Visual Research file, +>12 beshort =0 mono, +>12 beshort =-1 stereo, +>14 beshort x %d bits +>16 beshort =0 unsigned, +>16 beshort =-1 signed, +>22 belong&0x00ffffff x %d Hz, +>18 beshort =0 no loop, +>18 beshort =-1 loop, +>21 ubyte <=127 note %d, +>22 byte =0 replay 5.485 KHz +>22 byte =1 replay 8.084 KHz +>22 byte =2 replay 10.971 Khz +>22 byte =3 replay 16.168 Khz +>22 byte =4 replay 21.942 KHz +>22 byte =5 replay 32.336 KHz +>22 byte =6 replay 43.885 KHz +>22 byte =7 replay 47.261 KHz + +# SGI SoundTrack +0 string _SGI_SoundTrack SGI SoundTrack project file +# ID3 version 2 tags +0 string ID3 MP3 file with ID3 version 2. +>3 ubyte <0xff \b%d. +>4 ubyte <0xff \b%d tag + +# NSF (NES sound file) magic +0 string NESM\x1a NES Sound File +>14 string >\0 ("%s" by +>46 string >\0 %s, copyright +>78 string >\0 %s), +>5 byte x version %d, +>6 byte x %d tracks, +>122 byte&0x2 =1 dual PAL/NTSC +>122 byte&0x1 =1 PAL +>122 byte&0x1 =0 NTSC + +# Impuse tracker module (audio/x-it) +0 string IMPM Impulse Tracker module sound data - +>4 string >\0 "%s" +>40 leshort !0 compatible w/ITv%x +>42 leshort !0 created w/ITv%x + +# Imago Orpheus module (audio/x-imf) +60 string IM10 Imago Orpheus module sound data - +>0 string >\0 "%s" + +# From +# These are the /etc/magic entries to decode modules, instruments, and +# samples in Impulse Tracker's native format. + +0 string IMPS Impulse Tracker Sample +>18 byte &2 16 bit +>18 byte ^2 8 bit +>18 byte &4 stereo +>18 byte ^4 mono +0 string IMPI Impulse Tracker Instrument +>28 leshort !0 ITv%x +>30 byte !0 %d samples + +# Yamaha TX Wave: file(1) magic for Yamaha TX Wave audio files +# From +0 string LM8953 Yamaha TX Wave +>22 byte 0x49 looped +>22 byte 0xC9 non-looped +>23 byte 1 33kHz +>23 byte 2 50kHz +>23 byte 3 16kHz + +# scream tracker: file(1) magic for Scream Tracker sample files +# +# From +76 string SCRS Scream Tracker Sample +>0 byte 1 sample +>0 byte 2 adlib melody +>0 byte >2 adlib drum +>31 byte &2 stereo +>31 byte ^2 mono +>31 byte &4 16bit little endian +>31 byte ^4 8bit +>30 byte 0 unpacked +>30 byte 1 packed + +# audio +# From: Cory Dikkers +0 string MMD0 MED music file, version 0 +0 string MMD1 OctaMED Pro music file, version 1 +0 string MMD3 OctaMED Soundstudio music file, version 3 +0 string OctaMEDCmpr OctaMED Soundstudio compressed file +0 string MED MED_Song +0 string SymM Symphonie SymMOD music file +# +0 string THX AHX version +>3 byte =0 1 module data +>3 byte =1 2 module data +# +0 string OKTASONG Oktalyzer module data +# +0 string DIGI\ Booster\ module\0 %s +>20 byte >0 %c +>>21 byte >0 \b%c +>>>22 byte >0 \b%c +>>>>23 byte >0 \b%c +>610 string >\0 \b, "%s" +# +0 string DBM0 DIGI Booster Pro Module +>4 byte >0 V%X. +>>5 byte x \b%02X +>16 string >\0 \b, "%s" +# +0 string FTMN FaceTheMusic module +>16 string >\0d \b, "%s" + +# From: 2003-06-24 +0 string AMShdr\32 Velvet Studio AMS Module v2.2 +0 string Extreme Extreme Tracker AMS Module v1.3 +0 string DDMF Xtracker DMF Module +>4 byte x v%i +>0xD string >\0 Title: "%s" +>0x2B string >\0 Composer: "%s" +0 string DSM\32 Dynamic Studio Module DSM +0 string SONG DigiTrekker DTM Module +0 string DMDL DigiTrakker MDL Module +0 string PSM\32 Protracker Studio PSM Module +44 string PTMF Poly Tracker PTM Module +>0 string >\32 Title: "%s" +0 string MT20 MadTracker 2.0 Module MT2 +0 string RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD +0 string RTMM RTM Module +0x426 string MaDoKaN96 XMS Adlib Module +>0 string >\0 Composer: "%s" +0 string AMF AMF Module +>4 string >\0 Title: "%s" +0 string MODINFO1 Open Cubic Player Module Inforation MDZ +0 string Extended\40Instrument: Fast Tracker II Instrument + +# From: Takeshi Hamasaki +# NOA Nancy Codec file +0 string \210NOA\015\012\032 NOA Nancy Codec Movie file +# Yamaha SMAF format +0 string MMMD Yamaha SMAF file +# Sharp Jisaku Melody format for PDC +0 string \001Sharp\040JisakuMelody SHARP Cell-Phone ringing Melody +>20 string Ver01.00 Ver. 1.00 +>>32 byte x , %d tracks + +# Free lossless audio codec +# From: Przemyslaw Augustyniak +0 string fLaC FLAC audio bitstream data +>4 byte&0x7f >0 \b, unknown version +>4 byte&0x7f 0 \b +# some common bits/sample values +>>20 beshort&0x1f0 0x030 \b, 4 bit +>>20 beshort&0x1f0 0x050 \b, 6 bit +>>20 beshort&0x1f0 0x070 \b, 8 bit +>>20 beshort&0x1f0 0x0b0 \b, 12 bit +>>20 beshort&0x1f0 0x0f0 \b, 16 bit +>>20 beshort&0x1f0 0x170 \b, 24 bit +>>20 byte&0xe 0x0 \b, mono +>>20 byte&0xe 0x2 \b, stereo +>>20 byte&0xe 0x4 \b, 3 channels +>>20 byte&0xe 0x6 \b, 4 channels +>>20 byte&0xe 0x8 \b, 5 channels +>>20 byte&0xe 0xa \b, 6 channels +>>20 byte&0xe 0xc \b, 7 channels +>>20 byte&0xe 0xe \b, 8 channels +# some common sample rates +>>17 belong&0xfffff0 0x0ac440 \b, 44.1 kHz +>>17 belong&0xfffff0 0x0bb800 \b, 48 kHz +>>17 belong&0xfffff0 0x07d000 \b, 32 kHz +>>17 belong&0xfffff0 0x056220 \b, 22.05 kHz +>>17 belong&0xfffff0 0x05dc00 \b, 24 kHz +>>17 belong&0xfffff0 0x03e800 \b, 16 kHz +>>17 belong&0xfffff0 0x02b110 \b, 11.025 kHz +>>17 belong&0xfffff0 0x02ee00 \b, 12 kHz +>>17 belong&0xfffff0 0x01f400 \b, 8 kHz +>>17 belong&0xfffff0 0x177000 \b, 96 kHz +>>17 belong&0xfffff0 0x0fa000 \b, 64 kHz +>>21 byte&0xf >0 \b, >4G samples +>>21 byte&0xf 0 \b +>>>22 belong >0 \b, %u samples +>>>22 belong 0 \b, length unknown + +# (ISDN) VBOX voice message file (Wolfram Kleff) +0 string VBOX VBOX voice message data + +# ReBorn Song Files (.rbs) +# David J. Singer +8 string RB40 RBS Song file +>29 string ReBorn created by ReBorn +>37 string Propellerhead created by ReBirth + +# Synthesizer Generator and Kimwitu share their file format +0 string A#S#C#S#S#L#V#3 Synthesizer Generator or Kimwitu data +# Kimwitu++ uses a slightly different magic +0 string A#S#C#S#S#L#HUB Kimwitu++ data + +# From "Simon Hosie +0 string TFMX-SONG TFMX module sound data + +# From danny.milo@gmx.net (Danny Milosavljevic) +# monkeysaudio for magic.mime +0 string MAC\ X/Monkey audio, +>4 leshort >0 version %d, +>6 leshort >0 compression level %d, +>8 leshort >0 flags %x, +>10 leshort >0 channels %d, +>12 lelong >0 samplerate %d, +>24 lelong >0 frames %d + +#------------------------------------------------------------------------------ +# bsdi: file(1) magic for BSD/OS (from BSDI) objects +# + +0 lelong 0314 386 compact demand paged pure executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +0 lelong 0407 386 executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +0 lelong 0410 386 pure executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +0 lelong 0413 386 demand paged pure executable +>16 lelong >0 not stripped +>32 byte 0x6a (uses shared libs) + +# same as in SunOS 4.x, except for static shared libraries +0 belong&077777777 0600413 sparc demand paged +>0 byte &0x80 +>>20 belong <4096 shared library +>>20 belong =4096 dynamically linked executable +>>20 belong >4096 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +>36 belong 0xb4100001 (uses shared libs) + +0 belong&077777777 0600410 sparc pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +>36 belong 0xb4100001 (uses shared libs) + +0 belong&077777777 0600407 sparc +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +>36 belong 0xb4100001 (uses shared libs) + +#------------------------------------------------------------------------------ +# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files +# From Roger Leigh +0 string FCS1.0 Flow Cytometry Standard (FCS) data, version 1.0 +0 string FCS2.0 Flow Cytometry Standard (FCS) data, version 2.0 +0 string FCS3.0 Flow Cytometry Standard (FCS) data, version 3.0 + + +#------------------------------------------------------------------------------ +# intel: file(1) magic for x86 Unix +# +# Various flavors of x86 UNIX executable/object (other than Xenix, which +# is in "microsoft"). DOS is in "msdos"; the ambitious soul can do +# Windows as well. +# +# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and +# whatever comes next (HP-PA Hummingbird?). OS/2 may also go elsewhere +# as well, if, as, and when IBM makes it portable. +# +# The `versions' should be un-commented if they work for you. +# (Was the problem just one of endianness?) +# +0 leshort 0502 basic-16 executable +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +0 leshort 0503 basic-16 executable (TV) +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +0 leshort 0510 x86 executable +>12 lelong >0 not stripped +0 leshort 0511 x86 executable (TV) +>12 lelong >0 not stripped +0 leshort =0512 iAPX 286 executable small model (COFF) +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +0 leshort =0522 iAPX 286 executable large model (COFF) +>12 lelong >0 not stripped +#>22 leshort >0 - version %ld +# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan +0 leshort =0514 80386 COFF executable +>12 lelong >0 not stripped +>22 leshort >0 - version %ld + +# rom: file(1) magic for BIOS ROM Extensions found in intel machines +# mapped into memory between 0xC0000 and 0xFFFFF +# From Gürkan Sengün , www.linuks.mine.nu +0 beshort 0x55AA BIOS (ia32) ROM Ext. +>5 string USB USB +>7 string LDR UNDI image +>30 string IBM IBM comp. Video +>26 string Adaptec Adaptec +>28 string Adaptec Adaptec +>42 string PROMISE Promise +>2 byte x (%d*512) + +#------------------------------------------------------------------------------ +# netbsd: file(1) magic for NetBSD objects +# +# All new-style magic numbers are in network byte order. +# + +0 lelong 000000407 a.out NetBSD little-endian object file +>16 lelong >0 not stripped +0 belong 000000407 a.out NetBSD big-endian object file +>16 belong >0 not stripped + +0 belong&0377777777 041400413 a.out NetBSD/i386 demand paged +>0 byte &0x80 +>>20 lelong <4096 shared library +>>20 lelong =4096 dynamically linked executable +>>20 lelong >4096 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 041400410 a.out NetBSD/i386 pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 041400407 a.out NetBSD/i386 +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 +>>0 byte &0x40 position independent +>>20 lelong !0 executable +>>20 lelong =0 object file +>16 lelong >0 not stripped +0 belong&0377777777 041400507 a.out NetBSD/i386 core +>12 string >\0 from '%s' +>32 lelong !0 (signal %d) + +0 belong&0377777777 041600413 a.out NetBSD/m68k demand paged +>0 byte &0x80 +>>20 belong <8192 shared library +>>20 belong =8192 dynamically linked executable +>>20 belong >8192 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&0377777777 041600410 a.out NetBSD/m68k pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&0377777777 041600407 a.out NetBSD/m68k +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 +>>0 byte &0x40 position independent +>>20 belong !0 executable +>>20 belong =0 object file +>16 belong >0 not stripped +0 belong&0377777777 041600507 a.out NetBSD/m68k core +>12 string >\0 from '%s' +>32 belong !0 (signal %d) + +0 belong&0377777777 042000413 a.out NetBSD/m68k4k demand paged +>0 byte &0x80 +>>20 belong <4096 shared library +>>20 belong =4096 dynamically linked executable +>>20 belong >4096 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&0377777777 042000410 a.out NetBSD/m68k4k pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&0377777777 042000407 a.out NetBSD/m68k4k +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 +>>0 byte &0x40 position independent +>>20 belong !0 executable +>>20 belong =0 object file +>16 belong >0 not stripped +0 belong&0377777777 042000507 a.out NetBSD/m68k4k core +>12 string >\0 from '%s' +>32 belong !0 (signal %d) + +0 belong&0377777777 042200413 a.out NetBSD/ns32532 demand paged +>0 byte &0x80 +>>20 lelong <4096 shared library +>>20 lelong =4096 dynamically linked executable +>>20 lelong >4096 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 042200410 a.out NetBSD/ns32532 pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 042200407 a.out NetBSD/ns32532 +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 +>>0 byte &0x40 position independent +>>20 lelong !0 executable +>>20 lelong =0 object file +>16 lelong >0 not stripped +0 belong&0377777777 042200507 a.out NetBSD/ns32532 core +>12 string >\0 from '%s' +>32 lelong !0 (signal %d) + +0 belong&0377777777 045200507 a.out NetBSD/powerpc core +>12 string >\0 from '%s' + +0 belong&0377777777 042400413 a.out NetBSD/sparc demand paged +>0 byte &0x80 +>>20 belong <8192 shared library +>>20 belong =8192 dynamically linked executable +>>20 belong >8192 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&0377777777 042400410 a.out NetBSD/sparc pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&0377777777 042400407 a.out NetBSD/sparc +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 +>>0 byte &0x40 position independent +>>20 belong !0 executable +>>20 belong =0 object file +>16 belong >0 not stripped +0 belong&0377777777 042400507 a.out NetBSD/sparc core +>12 string >\0 from '%s' +>32 belong !0 (signal %d) + +0 belong&0377777777 042600413 a.out NetBSD/pmax demand paged +>0 byte &0x80 +>>20 lelong <4096 shared library +>>20 lelong =4096 dynamically linked executable +>>20 lelong >4096 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 042600410 a.out NetBSD/pmax pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 042600407 a.out NetBSD/pmax +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 +>>0 byte &0x40 position independent +>>20 lelong !0 executable +>>20 lelong =0 object file +>16 lelong >0 not stripped +0 belong&0377777777 042600507 a.out NetBSD/pmax core +>12 string >\0 from '%s' +>32 lelong !0 (signal %d) + +0 belong&0377777777 043000413 a.out NetBSD/vax 1k demand paged +>0 byte &0x80 +>>20 lelong <4096 shared library +>>20 lelong =4096 dynamically linked executable +>>20 lelong >4096 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 043000410 a.out NetBSD/vax 1k pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 043000407 a.out NetBSD/vax 1k +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 +>>0 byte &0x40 position independent +>>20 lelong !0 executable +>>20 lelong =0 object file +>16 lelong >0 not stripped +0 belong&0377777777 043000507 a.out NetBSD/vax 1k core +>12 string >\0 from '%s' +>32 lelong !0 (signal %d) + +0 belong&0377777777 045400413 a.out NetBSD/vax 4k demand paged +>0 byte &0x80 +>>20 lelong <4096 shared library +>>20 lelong =4096 dynamically linked executable +>>20 lelong >4096 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 045400410 a.out NetBSD/vax 4k pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 045400407 a.out NetBSD/vax 4k +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 +>>0 byte &0x40 position independent +>>20 lelong !0 executable +>>20 lelong =0 object file +>16 lelong >0 not stripped +0 belong&0377777777 045400507 a.out NetBSD/vax 4k core +>12 string >\0 from '%s' +>32 lelong !0 (signal %d) + +# NetBSD/alpha does not support (and has never supported) a.out objects, +# so no rules are provided for them. NetBSD/alpha ELF objects are +# dealt with in "elf". +0 lelong 0x00070185 ECOFF NetBSD/alpha binary +>10 leshort 0x0001 not stripped +>10 leshort 0x0000 stripped +0 belong&0377777777 043200507 a.out NetBSD/alpha core +>12 string >\0 from '%s' +>32 lelong !0 (signal %d) + +0 belong&0377777777 043400413 a.out NetBSD/mips demand paged +>0 byte &0x80 +>>20 belong <8192 shared library +>>20 belong =8192 dynamically linked executable +>>20 belong >8192 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&0377777777 043400410 a.out NetBSD/mips pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 belong >0 not stripped +0 belong&0377777777 043400407 a.out NetBSD/mips +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 +>>0 byte &0x40 position independent +>>20 belong !0 executable +>>20 belong =0 object file +>16 belong >0 not stripped +0 belong&0377777777 043400507 a.out NetBSD/mips core +>12 string >\0 from '%s' +>32 belong !0 (signal %d) + +0 belong&0377777777 043600413 a.out NetBSD/arm32 demand paged +>0 byte &0x80 +>>20 lelong <4096 shared library +>>20 lelong =4096 dynamically linked executable +>>20 lelong >4096 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 043600410 a.out NetBSD/arm32 pure +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 executable +>16 lelong >0 not stripped +0 belong&0377777777 043600407 a.out NetBSD/arm32 +>0 byte &0x80 dynamically linked executable +>0 byte ^0x80 +>>0 byte &0x40 position independent +>>20 lelong !0 executable +>>20 lelong =0 object file +>16 lelong >0 not stripped +# NetBSD/arm26 has always used ELF objects, but it shares a core file +# format with NetBSD/arm32. +0 belong&0377777777 043600507 a.out NetBSD/arm core +>12 string >\0 from '%s' +>32 lelong !0 (signal %d) + +#------------------------------------------------------------------------------ +# riff: file(1) magic for RIFF format +# See +# +# http://www.seanet.com/users/matts/riffmci/riffmci.htm +# +# AVI section extended by Patrik Rådman +# +0 string RIFF RIFF (little-endian) data +# RIFF Palette format +>8 string PAL \b, palette +>>16 leshort x \b, version %d +>>18 leshort x \b, %d entries +# RIFF Device Independent Bitmap format +>8 string RDIB \b, device-independent bitmap +>>16 string BM +>>>30 leshort 12 \b, OS/2 1.x format +>>>>34 leshort x \b, %d x +>>>>36 leshort x %d +>>>30 leshort 64 \b, OS/2 2.x format +>>>>34 leshort x \b, %d x +>>>>36 leshort x %d +>>>30 leshort 40 \b, Windows 3.x format +>>>>34 lelong x \b, %d x +>>>>38 lelong x %d x +>>>>44 leshort x %d +# RIFF MIDI format +>8 string RMID \b, MIDI +# RIFF Multimedia Movie File format +>8 string RMMP \b, multimedia movie +# Microsoft WAVE format (*.wav) +>8 string WAVE \b, WAVE audio +>>20 leshort 1 \b, Microsoft PCM +>>>34 leshort >0 \b, %d bit +>>20 leshort 2 \b, Microsoft ADPCM +>>20 leshort 6 \b, ITU G.711 A-law +>>20 leshort 7 \b, ITU G.711 mu-law +>>20 leshort 17 \b, IMA ADPCM +>>20 leshort 20 \b, ITU G.723 ADPCM (Yamaha) +>>20 leshort 49 \b, GSM 6.10 +>>20 leshort 64 \b, ITU G.721 ADPCM +>>20 leshort 80 \b, MPEG +>>20 leshort 85 \b, MPEG Layer 3 +>>22 leshort =1 \b, mono +>>22 leshort =2 \b, stereo +>>22 leshort >2 \b, %d channels +>>24 lelong >0 %d Hz +# Corel Draw Picture +>8 string CDRA \b, Corel Draw Picture +# AVI == Audio Video Interleave +>8 string AVI\040 \b, AVI +>>12 string LIST +>>>20 string hdrlavih +>>>>&36 lelong x \b, %lu x +>>>>&40 lelong x %lu, +>>>>&4 lelong >1000000 <1 fps, +>>>>&4 lelong 1000000 1.00 fps, +>>>>&4 lelong 500000 2.00 fps, +>>>>&4 lelong 333333 3.00 fps, +>>>>&4 lelong 250000 4.00 fps, +>>>>&4 lelong 200000 5.00 fps, +>>>>&4 lelong 166667 6.00 fps, +>>>>&4 lelong 142857 7.00 fps, +>>>>&4 lelong 125000 8.00 fps, +>>>>&4 lelong 111111 9.00 fps, +>>>>&4 lelong 100000 10.00 fps, +# ]9.9,10.1[ +>>>>&4 lelong <101010 +>>>>>&-4 lelong >99010 +>>>>>>&-4 lelong !100000 ~10 fps, +>>>>&4 lelong 83333 12.00 fps, +# ]11.9,12.1[ +>>>>&4 lelong <84034 +>>>>>&-4 lelong >82645 +>>>>>>&-4 lelong !83333 ~12 fps, +>>>>&4 lelong 66667 15.00 fps, +# ]14.9,15.1[ +>>>>&4 lelong <67114 +>>>>>&-4 lelong >66225 +>>>>>>&-4 lelong !66667 ~15 fps, +>>>>&4 lelong 50000 20.00 fps, +>>>>&4 lelong 41708 23.98 fps, +>>>>&4 lelong 41667 24.00 fps, +# ]23.9,24.1[ +>>>>&4 lelong <41841 +>>>>>&-4 lelong >41494 +>>>>>>&-4 lelong !41708 +>>>>>>>&-4 lelong !41667 ~24 fps, +>>>>&4 lelong 40000 25.00 fps, +# ]24.9,25.1[ +>>>>&4 lelong <40161 +>>>>>&-4 lelong >39841 +>>>>>>&-4 lelong !40000 ~25 fps, +>>>>&4 lelong 33367 29.97 fps, +>>>>&4 lelong 33333 30.00 fps, +# ]29.9,30.1[ +>>>>&4 lelong <33445 +>>>>>&-4 lelong >33223 +>>>>>>&-4 lelong !33367 +>>>>>>>&-4 lelong !33333 ~30 fps, +>>>>&4 lelong <32224 >30 fps, +##>>>>&4 lelong x (%lu) +##>>>>&20 lelong x %lu frames, +# Note: The tests below assume that the AVI has 1 or 2 streams, +# "vids" optionally followed by "auds". +# (Should cover 99.9% of all AVIs.) +# assuming avih length = 56 +>>>88 string LIST +>>>>96 string strlstrh +>>>>>108 string vids video: +>>>>>>&0 lelong 0 uncompressed +# skip past vids strh +>>>>>>(104.l+108) string strf +>>>>>>>(104.l+132) lelong 1 RLE 8bpp +>>>>>>>(104.l+132) string/c cvid Cinepak +>>>>>>>(104.l+132) string/c i263 Intel I.263 +>>>>>>>(104.l+132) string/c iv32 Indeo 3.2 +>>>>>>>(104.l+132) string/c iv41 Indeo 4.1 +>>>>>>>(104.l+132) string/c iv50 Indeo 5.0 +>>>>>>>(104.l+132) string/c mp42 Microsoft MPEG-4 v2 +>>>>>>>(104.l+132) string/c mp43 Microsoft MPEG-4 v3 +>>>>>>>(104.l+132) string/c mjpg Motion JPEG +>>>>>>>(104.l+132) string/c div3 DivX 3 +>>>>>>>>112 string/c div3 Low-Motion +>>>>>>>>112 string/c div4 Fast-Motion +>>>>>>>(104.l+132) string/c divx DivX 4 +>>>>>>>(104.l+132) string/c dx50 DivX 5 +>>>>>>>(104.l+132) string/c xvid XviD +>>>>>>>(104.l+132) lelong 0 +##>>>>>>>(104.l+132) string x (%.4s) +# skip past first (video) LIST +>>>>(92.l+96) string LIST +>>>>>(92.l+104) string strlstrh +>>>>>>(92.l+116) string auds \b, audio: +# auds strh length = 56: +>>>>>>>(92.l+172) string strf +>>>>>>>>(92.l+180) leshort 0x0001 uncompressed PCM +>>>>>>>>(92.l+180) leshort 0x0002 ADPCM +>>>>>>>>(92.l+180) leshort 0x0055 MPEG-1 Layer 3 +>>>>>>>>(92.l+180) leshort 0x2000 Dolby AC3 +>>>>>>>>(92.l+180) leshort 0x0161 DivX +##>>>>>>>>(92.l+180) leshort x (0x%.4x) +>>>>>>>>(92.l+182) leshort 1 (mono, +>>>>>>>>(92.l+182) leshort 2 (stereo, +>>>>>>>>(92.l+182) leshort >2 (%d channels, +>>>>>>>>(92.l+184) lelong x %d Hz) +# auds strh length = 64: +>>>>>>>(92.l+180) string strf +>>>>>>>>(92.l+188) leshort 0x0001 uncompressed PCM +>>>>>>>>(92.l+188) leshort 0x0002 ADPCM +>>>>>>>>(92.l+188) leshort 0x0055 MPEG-1 Layer 3 +>>>>>>>>(92.l+188) leshort 0x2000 Dolby AC3 +>>>>>>>>(92.l+188) leshort 0x0161 DivX +##>>>>>>>>(92.l+188) leshort x (0x%.4x) +>>>>>>>>(92.l+190) leshort 1 (mono, +>>>>>>>>(92.l+190) leshort 2 (stereo, +>>>>>>>>(92.l+190) leshort >2 (%d channels, +>>>>>>>>(92.l+192) lelong x %d Hz) +# Animated Cursor format +>8 string ACON \b, animated cursor +# SoundFont 2 +>8 string sfbk SoundFont/Bank +# MPEG-1 wrapped in a RIFF, apparently +>8 string CDXA \b, wrapped MPEG-1 (CDXA) +>8 string 4XMV \b, 4X Movie file + +# +# XXX - some of the below may only appear in little-endian form. +# +# Also "MV93" appears to be for one form of Macromedia Director +# files, and "GDMF" appears to be another multimedia format. +# +0 string RIFX RIFF (big-endian) data +# RIFF Palette format +>8 string PAL \b, palette +>>16 beshort x \b, version %d +>>18 beshort x \b, %d entries +# RIFF Device Independent Bitmap format +>8 string RDIB \b, device-independent bitmap +>>16 string BM +>>>30 beshort 12 \b, OS/2 1.x format +>>>>34 beshort x \b, %d x +>>>>36 beshort x %d +>>>30 beshort 64 \b, OS/2 2.x format +>>>>34 beshort x \b, %d x +>>>>36 beshort x %d +>>>30 beshort 40 \b, Windows 3.x format +>>>>34 belong x \b, %d x +>>>>38 belong x %d x +>>>>44 beshort x %d +# RIFF MIDI format +>8 string RMID \b, MIDI +# RIFF Multimedia Movie File format +>8 string RMMP \b, multimedia movie +# Microsoft WAVE format (*.wav) +>8 string WAVE \b, WAVE audio +>>20 leshort 1 \b, Microsoft PCM +>>>34 leshort >0 \b, %d bit +>>22 beshort =1 \b, mono +>>22 beshort =2 \b, stereo +>>22 beshort >2 \b, %d channels +>>24 belong >0 %d Hz +# Corel Draw Picture +>8 string CDRA \b, Corel Draw Picture +# AVI == Audio Video Interleave +>8 string AVI\040 \b, AVI +# Animated Cursor format +>8 string ACON \b, animated cursor +# Notation Interchange File Format (big-endian only) +>8 string NIFF \b, Notation Interchange File Format +# SoundFont 2 +>8 string sfbk SoundFont/Bank +#------------------------------------------------------------------------------ +# Console game magic +# Toby Deshane +# ines: file(1) magic for Marat's iNES Nintendo Entertainment System +# ROM dump format + +0 string NES\032 iNES ROM dump, +>4 byte x %dx16k PRG +>5 byte x \b, %dx8k CHR +>6 byte&0x01 =0x1 \b, [Vert.] +>6 byte&0x01 =0x0 \b, [Horiz.] +>6 byte&0x02 =0x2 \b, [SRAM] +>6 byte&0x04 =0x4 \b, [Trainer] +>6 byte&0x04 =0x8 \b, [4-Scr] + +#------------------------------------------------------------------------------ +# gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format +# +0x104 belong 0xCEED6666 Gameboy ROM: +>0x134 string >\0 "%.16s" +>0x146 byte 0x03 \b,[SGB] +>0x147 byte 0x00 \b, [ROM ONLY] +>0x147 byte 0x01 \b, [ROM+MBC1] +>0x147 byte 0x02 \b, [ROM+MBC1+RAM] +>0x147 byte 0x03 \b, [ROM+MBC1+RAM+BATT] +>0x147 byte 0x05 \b, [ROM+MBC2] +>0x147 byte 0x06 \b, [ROM+MBC2+BATTERY] +>0x147 byte 0x08 \b, [ROM+RAM] +>0x147 byte 0x09 \b, [ROM+RAM+BATTERY] +>0x147 byte 0x0B \b, [ROM+MMM01] +>0x147 byte 0x0C \b, [ROM+MMM01+SRAM] +>0x147 byte 0x0D \b, [ROM+MMM01+SRAM+BATT] +>0x147 byte 0x0F \b, [ROM+MBC3+TIMER+BATT] +>0x147 byte 0x10 \b, [ROM+MBC3+TIMER+RAM+BATT] +>0x147 byte 0x11 \b, [ROM+MBC3] +>0x147 byte 0x12 \b, [ROM+MBC3+RAM] +>0x147 byte 0x13 \b, [ROM+MBC3+RAM+BATT] +>0x147 byte 0x19 \b, [ROM+MBC5] +>0x147 byte 0x1A \b, [ROM+MBC5+RAM] +>0x147 byte 0x1B \b, [ROM+MBC5+RAM+BATT] +>0x147 byte 0x1C \b, [ROM+MBC5+RUMBLE] +>0x147 byte 0x1D \b, [ROM+MBC5+RUMBLE+SRAM] +>0x147 byte 0x1E \b, [ROM+MBC5+RUMBLE+SRAM+BATT] +>0x147 byte 0x1F \b, [Pocket Camera] +>0x147 byte 0xFD \b, [Bandai TAMA5] +>0x147 byte 0xFE \b, [Hudson HuC-3] +>0x147 byte 0xFF \b, [Hudson HuC-1] + +>0x148 byte 0 \b, ROM: 256Kbit +>0x148 byte 1 \b, ROM: 512Kbit +>0x148 byte 2 \b, ROM: 1Mbit +>0x148 byte 3 \b, ROM: 2Mbit +>0x148 byte 4 \b, ROM: 4Mbit +>0x148 byte 5 \b, ROM: 8Mbit +>0x148 byte 6 \b, ROM: 16Mbit +>0x148 byte 0x52 \b, ROM: 9Mbit +>0x148 byte 0x53 \b, ROM: 10Mbit +>0x148 byte 0x54 \b, ROM: 12Mbit + +>0x149 byte 1 \b, RAM: 16Kbit +>0x149 byte 2 \b, RAM: 64Kbit +>0x149 byte 3 \b, RAM: 128Kbit +>0x149 byte 4 \b, RAM: 1Mbit + +#>0x14e long x \b, CRC: %x + +#------------------------------------------------------------------------------ +# genesis: file(1) magic for the Sega MegaDrive/Genesis raw ROM format +# +0x100 string SEGA Sega MegaDrive/Genesis raw ROM dump +>0x120 string >\0 Name: "%.16s" +>0x110 string >\0 %.16s +>0x1B0 string RA with SRAM + +#------------------------------------------------------------------------------ +# genesis: file(1) magic for the Super MegaDrive ROM dump format +# +0x280 string EAGN Super MagicDrive ROM dump +>0 byte x %dx16k blocks +>2 byte 0 \b, last in series or standalone +>2 byte >0 \b, split ROM +>8 byte 0xAA +>9 byte 0xBB + +#------------------------------------------------------------------------------ +# genesis: file(1) alternate magic for the Super MegaDrive ROM dump format +# +0x280 string EAMG Super MagicDrive ROM dump +>0 byte x %dx16k blocks +>2 byte x \b, last in series or standalone +>8 byte 0xAA +>9 byte 0xBB + +#------------------------------------------------------------------------------ +# smsgg: file(1) magic for Sega Master System and Game Gear ROM dumps +# +# Does not detect all images. Very preliminary guesswork. Need more data +# on format. +# +# FIXME: need a little more info...;P +# +#0 byte 0xF3 +#>1 byte 0xED Sega Master System/Game Gear ROM dump +#>1 byte 0x31 Sega Master System/Game Gear ROM dump +#>1 byte 0xDB Sega Master System/Game Gear ROM dump +#>1 byte 0xAF Sega Master System/Game Gear ROM dump +#>1 byte 0xC3 Sega Master System/Game Gear ROM dump + +#------------------------------------------------------------------------------ +# dreamcast: file(1) uncertain magic for the Sega Dreamcast VMU image format +# +0 belong 0x21068028 Sega Dreamcast VMU game image +0 string LCDi Dream Animator file + +#------------------------------------------------------------------------------ +# v64: file(1) uncertain magic for the V64 format N64 ROM dumps +# +0 belong 0x37804012 V64 Nintendo 64 ROM dump + +#------------------------------------------------------------------------------ +# msx: file(1) magic for MSX game cartridge dumps +# Too simple - MPi +#0 beshort 0x4142 MSX game cartridge dump + +#------------------------------------------------------------------------------ +# Sony Playstation executables (Adam Sjoegren ) : +0 string PS-X\ EXE Sony Playstation executable +# Area: +>113 string x (%s) + +#------------------------------------------------------------------------------ +# Microsoft Xbox executables .xbe (Esa Hyytiä ) +0 string XBEH XBE, Microsoft Xbox executable +# probabilistic checks whether signed or not +>0x0004 ulelong =0x0 +>>&2 ulelong =0x0 +>>>&2 ulelong =0x0 \b, not signed +>0x0004 ulelong >0 +>>&2 ulelong >0 +>>>&2 ulelong >0 \b, signed +# expect base address of 0x10000 +>0x0104 ulelong =0x10000 +>>(0x0118-0x0FF60) ulelong&0x80000007 0x80000007 \b, all regions +>>(0x0118-0x0FF60) ulelong&0x80000007 !0x80000007 +>>>(0x0118-0x0FF60) ulelong >0 (regions: +>>>>(0x0118-0x0FF60) ulelong &0x00000001 NA +>>>>(0x0118-0x0FF60) ulelong &0x00000002 Japan +>>>>(0x0118-0x0FF60) ulelong &0x00000004 Rest_of_World +>>>>(0x0118-0x0FF60) ulelong &0x80000000 Manufacturer +>>>(0x0118-0x0FF60) ulelong >0 \b) + +# -------------------------------- +# Microsoft Xbox data file formats +0 string XIP0 XIP, Microsoft Xbox data +0 string XTF0 XTF, Microsoft Xbox data + +# Atari Lynx cartridge dump (EXE/BLL header) +# From: "Stefan A. Haubenthal" + +0 beshort 0x8008 Lynx cartridge, +>2 beshort x RAM start $%04x +>6 string BS93 + +#------------------------------------------------------------------------------ +# Z-machine: file(1) magic for Z-machine binaries. +# +# This will match ${TEX_BASE}/texmf/omega/ocp/char2uni/inbig5.ocp which +# appears to be a version-0 Z-machine binary. +# +# The (false match) message is to correct that behavior. Perhaps it is +# not needed. +# +>16 belong&0xfe00f0f0 0x3030 Infocom game data +>0 ubyte 0 (false match) +>0 ubyte >0 (Z-machine %d, +>>2 ubeshort x Release %d / +>>18 string >\0 Serial %.6s) + +#------------------------------------------------------------------------------ +# Glulx: file(1) magic for Glulx binaries. +# +# I haven't checked for false matches yet. +# +0 string Glul Glulx game data + + + +# These go at the end of the iff rules +# +# I don't see why these might collide with anything else. +# +# Interactive Fiction related formats +# +>8 string IFRS \b, Blorb Interactive Fiction +>>24 string Exec with executable chunk +>8 string IFZS \b, Z-machine or Glulx saved game file (Quetzal) + +#------------------------------------------------------------------------------ +# DEC SRC Virtual Paper: Lectern files +# Karl M. Hegbloom +0 string lect DEC SRC Virtual Paper Lectern file + +#------------------------------------------------------------------------------ +# visx: file(1) magic for Visx format files +# +0 short 0x5555 VISX image file +>2 byte 0 (zero) +>2 byte 1 (unsigned char) +>2 byte 2 (short integer) +>2 byte 3 (float 32) +>2 byte 4 (float 64) +>2 byte 5 (signed char) +>2 byte 6 (bit-plane) +>2 byte 7 (classes) +>2 byte 8 (statistics) +>2 byte 10 (ascii text) +>2 byte 15 (image segments) +>2 byte 100 (image set) +>2 byte 101 (unsigned char vector) +>2 byte 102 (short integer vector) +>2 byte 103 (float 32 vector) +>2 byte 104 (float 64 vector) +>2 byte 105 (signed char vector) +>2 byte 106 (bit plane vector) +>2 byte 121 (feature vector) +>2 byte 122 (feature vector library) +>2 byte 124 (chain code) +>2 byte 126 (bit vector) +>2 byte 130 (graph) +>2 byte 131 (adjacency graph) +>2 byte 132 (adjacency graph library) +>2 string .VISIX (ascii text) +#------------------------------------------------------------------------------ +# varied.script: file(1) magic for various interpreter scripts + +0 string #!\ / a +>3 string >\0 %s script text executable +0 string #!\ / a +>3 string >\0 %s script text executable +0 string #!/ a +>2 string >\0 %s script text executable +0 string #!\ script text executable +>3 string >\0 for %s + +# ------------------------------------------------------------------------ +# ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators. +# +# From: Ryan McGuire (rmcguire@freenet.columbus.oh.us). +# +# Update: Romain Lievin (roms@lpg.ticalc.org). +# +# NOTE: This list is not complete. +# Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the +# program/group magic numbers in here because I cannot find any. +0 string **TI80** TI-80 Graphing Calculator File. +0 string **TI81** TI-81 Graphing Calculator File. +# +# Magic Numbers for the TI-73 +# +0 string **TI73** TI-73 Graphing Calculator +>0x00003B byte 0x00 (real number) +>0x00003B byte 0x01 (list) +>0x00003B byte 0x02 (matrix) +>0x00003B byte 0x03 (equation) +>0x00003B byte 0x04 (string) +>0x00003B byte 0x05 (program) +>0x00003B byte 0x06 (assembly program) +>0x00003B byte 0x07 (picture) +>0x00003B byte 0x08 (gdb) +>0x00003B byte 0x0C (complex number) +>0x00003B byte 0x0F (window settings) +>0x00003B byte 0x10 (zoom) +>0x00003B byte 0x11 (table setup) +>0x00003B byte 0x13 (backup) + +# Magic Numbers for the TI-82 +# +0 string **TI82** TI-82 Graphing Calculator +>0x00003B byte 0x00 (real) +>0x00003B byte 0x01 (list) +>0x00003B byte 0x02 (matrix) +>0x00003B byte 0x03 (Y-variable) +>0x00003B byte 0x05 (program) +>0x00003B byte 0x06 (protected prgm) +>0x00003B byte 0x07 (picture) +>0x00003B byte 0x08 (gdb) +>0x00003B byte 0x0B (window settings) +>0x00003B byte 0x0C (window settings) +>0x00003B byte 0x0D (table setup) +>0x00003B byte 0x0E (screenshot) +>0x00003B byte 0x0F (backup) +# +# Magic Numbers for the TI-83 +# +0 string **TI83** TI-83 Graphing Calculator +>0x00003B byte 0x00 (real) +>0x00003B byte 0x01 (list) +>0x00003B byte 0x02 (matrix) +>0x00003B byte 0x03 (Y-variable) +>0x00003B byte 0x04 (string) +>0x00003B byte 0x05 (program) +>0x00003B byte 0x06 (protected prgm) +>0x00003B byte 0x07 (picture) +>0x00003B byte 0x08 (gdb) +>0x00003B byte 0x0B (window settings) +>0x00003B byte 0x0C (window settings) +>0x00003B byte 0x0D (table setup) +>0x00003B byte 0x0E (screenshot) +>0x00003B byte 0x13 (backup) +# +# Magic Numbers for the TI-83+ +# +0 string **TI83F* TI-83+ Graphing Calculator +>0x00003B byte 0x00 (real number) +>0x00003B byte 0x01 (list) +>0x00003B byte 0x02 (matrix) +>0x00003B byte 0x03 (equation) +>0x00003B byte 0x04 (string) +>0x00003B byte 0x05 (program) +>0x00003B byte 0x06 (assembly program) +>0x00003B byte 0x07 (picture) +>0x00003B byte 0x08 (gdb) +>0x00003B byte 0x0C (complex number) +>0x00003B byte 0x0F (window settings) +>0x00003B byte 0x10 (zoom) +>0x00003B byte 0x11 (table setup) +>0x00003B byte 0x13 (backup) +>0x00003B byte 0x15 (application variable) +>0x00003B byte 0x17 (group of variable) + +# +# Magic Numbers for the TI-85 +# +0 string **TI85** TI-85 Graphing Calculator +>0x00003B byte 0x00 (real number) +>0x00003B byte 0x01 (complex number) +>0x00003B byte 0x02 (real vector) +>0x00003B byte 0x03 (complex vector) +>0x00003B byte 0x04 (real list) +>0x00003B byte 0x05 (complex list) +>0x00003B byte 0x06 (real matrix) +>0x00003B byte 0x07 (complex matrix) +>0x00003B byte 0x08 (real constant) +>0x00003B byte 0x09 (complex constant) +>0x00003B byte 0x0A (equation) +>0x00003B byte 0x0C (string) +>0x00003B byte 0x0D (function GDB) +>0x00003B byte 0x0E (polar GDB) +>0x00003B byte 0x0F (parametric GDB) +>0x00003B byte 0x10 (diffeq GDB) +>0x00003B byte 0x11 (picture) +>0x00003B byte 0x12 (program) +>0x00003B byte 0x13 (range) +>0x00003B byte 0x17 (window settings) +>0x00003B byte 0x18 (window settings) +>0x00003B byte 0x19 (window settings) +>0x00003B byte 0x1A (window settings) +>0x00003B byte 0x1B (zoom) +>0x00003B byte 0x1D (backup) +>0x00003B byte 0x1E (unknown) +>0x00003B byte 0x2A (equation) +>0x000032 string ZS4 - ZShell Version 4 File. +>0x000032 string ZS3 - ZShell Version 3 File. +# +# Magic Numbers for the TI-86 +# +0 string **TI86** TI-86 Graphing Calculator +>0x00003B byte 0x00 (real number) +>0x00003B byte 0x01 (complex number) +>0x00003B byte 0x02 (real vector) +>0x00003B byte 0x03 (complex vector) +>0x00003B byte 0x04 (real list) +>0x00003B byte 0x05 (complex list) +>0x00003B byte 0x06 (real matrix) +>0x00003B byte 0x07 (complex matrix) +>0x00003B byte 0x08 (real constant) +>0x00003B byte 0x09 (complex constant) +>0x00003B byte 0x0A (equation) +>0x00003B byte 0x0C (string) +>0x00003B byte 0x0D (function GDB) +>0x00003B byte 0x0E (polar GDB) +>0x00003B byte 0x0F (parametric GDB) +>0x00003B byte 0x10 (diffeq GDB) +>0x00003B byte 0x11 (picture) +>0x00003B byte 0x12 (program) +>0x00003B byte 0x13 (range) +>0x00003B byte 0x17 (window settings) +>0x00003B byte 0x18 (window settings) +>0x00003B byte 0x19 (window settings) +>0x00003B byte 0x1A (window settings) +>0x00003B byte 0x1B (zoom) +>0x00003B byte 0x1D (backup) +>0x00003B byte 0x1E (unknown) +>0x00003B byte 0x2A (equation) +# +# Magic Numbers for the TI-89 +# +0 string **TI89** TI-89 Graphing Calculator +>0x000048 byte 0x00 (expression) +>0x000048 byte 0x04 (list) +>0x000048 byte 0x06 (matrix) +>0x000048 byte 0x0A (data) +>0x000048 byte 0x0B (text) +>0x000048 byte 0x0C (string) +>0x000048 byte 0x0D (graphic data base) +>0x000048 byte 0x0E (figure) +>0x000048 byte 0x10 (picture) +>0x000048 byte 0x12 (program) +>0x000048 byte 0x13 (function) +>0x000048 byte 0x14 (macro) +>0x000048 byte 0x1C (zipped) +>0x000048 byte 0x21 (assembler) +# +# Magic Numbers for the TI-92 +# +0 string **TI92** TI-92 Graphing Calculator +>0x000048 byte 0x00 (expression) +>0x000048 byte 0x04 (list) +>0x000048 byte 0x06 (matrix) +>0x000048 byte 0x0A (data) +>0x000048 byte 0x0B (text) +>0x000048 byte 0x0C (string) +>0x000048 byte 0x0D (graphic data base) +>0x000048 byte 0x0E (figure) +>0x000048 byte 0x10 (picture) +>0x000048 byte 0x12 (program) +>0x000048 byte 0x13 (function) +>0x000048 byte 0x14 (macro) +>0x000048 byte 0x1D (backup) +# +# Magic Numbers for the TI-92+/V200 +# +0 string **TI92P* TI-92+/V200 Graphing Calculator +>0x000048 byte 0x00 (expression) +>0x000048 byte 0x04 (list) +>0x000048 byte 0x06 (matrix) +>0x000048 byte 0x0A (data) +>0x000048 byte 0x0B (text) +>0x000048 byte 0x0C (string) +>0x000048 byte 0x0D (graphic data base) +>0x000048 byte 0x0E (figure) +>0x000048 byte 0x10 (picture) +>0x000048 byte 0x12 (program) +>0x000048 byte 0x13 (function) +>0x000048 byte 0x14 (macro) +>0x000048 byte 0x1C (zipped) +>0x000048 byte 0x21 (assembler) +# +# Magic Numbers for the TI-73/83+/89/92+/V200 FLASH upgrades +# +0x0000016 string Advanced TI-XX Graphing Calculator (FLASH) +0 string **TIFL** TI-XX Graphing Calculator (FLASH) +>8 byte >0 - Revision %d +>>9 byte x \b.%d, +>12 byte >0 Revision date %02x +>>13 byte x \b/%02x +>>14 beshort x \b/%04x, +>17 string >/0 name: '%s', +>48 byte 0x74 device: TI-73, +>48 byte 0x73 device: TI-83+, +>48 byte 0x98 device: TI-89, +>48 byte 0x88 device: TI-92+, +>49 byte 0x23 type: OS upgrade, +>49 byte 0x24 type: application, +>49 byte 0x25 type: certificate, +>49 byte 0x3e type: license, +>74 lelong >0 size: %ld bytes + +# VTi & TiEmu skins (TI Graphing Calculators). +# From: Romain Lievin (roms@lpg.ticalc.org). +# Magic Numbers for the VTi skins +0 string VTI Virtual TI skin +>3 string v - Version +>>4 byte >0 \b %c +>>6 byte x \b.%c +# Magic Numbers for the TiEmu skins +0 string TiEmu TiEmu skin +>6 string v - Version +>>7 byte >0 \b %c +>>9 byte x \b.%c +>>10 byte x \b%c + +#------------------------------------------------------------------------------ +# c-lang: file(1) magic for C programs (or REXX) +# + +# XPM icons (Greg Roelofs, newt@uchicago.edu) +# if you uncomment "/*" for C/REXX below, also uncomment this entry +#0 string /*\ XPM\ */ X pixmap image data + +# this first will upset you if you're a PL/1 shop... +# in which case rm it; ascmagic will catch real C programs +#0 string /* C or REXX program text +#0 string // C++ program text + +# From: Mikhail Teterin +0 string cscope cscope reference data +>7 string x version %.2s +# We skip the path here, because it is often long (so file will +# truncate it) and mostly redundant. +# The inverted index functionality was added some time betwen +# versions 11 and 15, so look for -q if version is above 14: +>7 string >14 +>>10 regex .+\ -q\ with inverted index +>10 regex .+\ -c\ text (non-compressed) +# Digital UNIX - Info +# +0 string !\n________64E Alpha archive +>22 string X -- out of date +# +# Alpha COFF Based Executables +# The stripped stuff really needs to be an 8 byte (64 bit) compare, +# but this works +0 leshort 0x183 COFF format alpha +>22 leshort&020000 &010000 sharable library, +>22 leshort&020000 ^010000 dynamically linked, +>24 leshort 0410 pure +>24 leshort 0413 demand paged +>8 lelong >0 executable or object module, not stripped +>8 lelong 0 +>>12 lelong 0 executable or object module, stripped +>>12 lelong >0 executable or object module, not stripped +>27 byte >0 - version %d. +>26 byte >0 %d- +>28 leshort >0 %d +# +# The next is incomplete, we could tell more about this format, +# but its not worth it. +0 leshort 0x188 Alpha compressed COFF +0 leshort 0x18f Alpha u-code object +# +# +# Some other interesting Digital formats, +0 string \377\377\177 ddis/ddif +0 string \377\377\174 ddis/dots archive +0 string \377\377\176 ddis/dtif table data +0 string \033c\033 LN03 output +0 long 04553207 X image +# +0 string !!\n profiling data file +# +# Locale data tables (MIPS and Alpha). +# +0 short 0x0501 locale data table +>6 short 0x24 for MIPS +>6 short 0x40 for Alpha +# ATSC A/53 aka AC-3 aka Dolby Digital +# from http://www.atsc.org/standards/a_52a.pdf +# corrections, additions, etc. are always welcome! +# +# syncword +0 beshort 0x0b77 ATSC A/52 aka AC-3 aka Dolby Digital stream, +# fscod +>4 byte&0xc0 0x00 48 kHz, +>4 byte&0xc0 0x40 44.1 kHz, +>4 byte&0xc0 0x80 32 kHz, +# is this one used for 96 kHz? +>4 byte&0xc0 0xc0 reserved frequency, +# +>5 byte&7 = 0 \b, complete main (CM) +>5 byte&7 = 1 \b, music and effects (ME) +>5 byte&7 = 2 \b, visually impaired (VI) +>5 byte&7 = 3 \b, hearing impaired (HI) +>5 byte&7 = 4 \b, dialogue (D) +>5 byte&7 = 5 \b, commentary (C) +>5 byte&7 = 6 \b, emergency (E) +# acmod +>6 byte&0xe0 0x00 1+1 front, +>6 byte&0xe0 0x20 1 front/0 rear, +>6 byte&0xe0 0x40 2 front/0 rear, +>6 byte&0xe0 0x60 3 front/0 rear, +>6 byte&0xe0 0x80 2 front/1 rear, +>6 byte&0xe0 0xa0 3 front/1 rear, +>6 byte&0xe0 0xc0 2 front/2 rear, +>6 byte&0xe0 0xe0 3 front/2 rear, +# lfeon (these may be incorrect) +>7 byte&0x40 0x00 LFE off, +>7 byte&0x40 0x40 LFE on, +# +>4 byte&0x3e = 0x00 \b, 32 kbit/s +>4 byte&0x3e = 0x02 \b, 40 kbit/s +>4 byte&0x3e = 0x04 \b, 48 kbit/s +>4 byte&0x3e = 0x06 \b, 56 kbit/s +>4 byte&0x3e = 0x08 \b, 64 kbit/s +>4 byte&0x3e = 0x0a \b, 80 kbit/s +>4 byte&0x3e = 0x0c \b, 96 kbit/s +>4 byte&0x3e = 0x0e \b, 112 kbit/s +>4 byte&0x3e = 0x10 \b, 128 kbit/s +>4 byte&0x3e = 0x12 \b, 160 kbit/s +>4 byte&0x3e = 0x14 \b, 192 kbit/s +>4 byte&0x3e = 0x16 \b, 224 kbit/s +>4 byte&0x3e = 0x18 \b, 256 kbit/s +>4 byte&0x3e = 0x1a \b, 320 kbit/s +>4 byte&0x3e = 0x1c \b, 384 kbit/s +>4 byte&0x3e = 0x1e \b, 448 kbit/s +>4 byte&0x3e = 0x20 \b, 512 kbit/s +>4 byte&0x3e = 0x22 \b, 576 kbit/s +>4 byte&0x3e = 0x24 \b, 640 kbit/s +# dsurmod (these may be incorrect) +>6 beshort&0x0180 0x0000 Dolby Surround not indicated +>6 beshort&0x0180 0x0080 not Dolby Surround encoded +>6 beshort&0x0180 0x0100 Dolby Surround encoded +>6 beshort&0x0180 0x0180 reserved Dolby Surround mode + +#------------------------------------------------------------------------------ +# ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE +# +# ACE/gr binary +0 string \000\000\0001\000\000\0000\000\000\0000\000\000\0002\000\000\0000\000\000\0000\000\000\0003 old ACE/gr binary file +>39 byte >0 - version %c +# ACE/gr ascii +0 string #\ xvgr\ parameter\ file ACE/gr ascii file +0 string #\ xmgr\ parameter\ file ACE/gr ascii file +0 string #\ ACE/gr\ parameter\ file ACE/gr ascii file +# Grace projects +0 string #\ Grace\ project\ file Grace project file +>23 string @version\ (version +>>32 byte >0 %c +>>33 string >\0 \b.%.2s +>>35 string >\0 \b.%.2s) +# ACE/gr fit description files +0 string #\ ACE/gr\ fit\ description\ ACE/gr fit description file +# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE + +#------------------------------------------------------------------------------ +# ibm370: file(1) magic for IBM 370 and compatibles. +# +# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable". +# What the heck *is* "USS/370"? +# AIX 4.1's "/etc/magic" has +# +# 0 short 0535 370 sysV executable +# >12 long >0 not stripped +# >22 short >0 - version %d +# >30 long >0 - 5.2 format +# 0 short 0530 370 sysV pure executable +# >12 long >0 not stripped +# >22 short >0 - version %d +# >30 long >0 - 5.2 format +# +# instead of the "USS/370" versions of the same magic numbers. +# +0 beshort 0537 370 XA sysV executable +>12 belong >0 not stripped +>22 beshort >0 - version %d +>30 belong >0 - 5.2 format +0 beshort 0532 370 XA sysV pure executable +>12 belong >0 not stripped +>22 beshort >0 - version %d +>30 belong >0 - 5.2 format +0 beshort 054001 370 sysV pure executable +>12 belong >0 not stripped +0 beshort 055001 370 XA sysV pure executable +>12 belong >0 not stripped +0 beshort 056401 370 sysV executable +>12 belong >0 not stripped +0 beshort 057401 370 XA sysV executable +>12 belong >0 not stripped +0 beshort 0531 SVR2 executable (Amdahl-UTS) +>12 belong >0 not stripped +>24 belong >0 - version %ld +0 beshort 0534 SVR2 pure executable (Amdahl-UTS) +>12 belong >0 not stripped +>24 belong >0 - version %ld +0 beshort 0530 SVR2 pure executable (USS/370) +>12 belong >0 not stripped +>24 belong >0 - version %ld +0 beshort 0535 SVR2 executable (USS/370) +>12 belong >0 not stripped +>24 belong >0 - version %ld + +#------------------------------------------------------------------------------ +# images: file(1) magic for image formats (see also "iff") +# +# originally from jef@helios.ee.lbl.gov (Jef Poskanzer), +# additions by janl@ifi.uio.no as well as others. Jan also suggested +# merging several one- and two-line files into here. +# +# little magic: PCX (first byte is 0x0a) + +# Targa - matches `povray', `ppmtotga' and `xv' outputs +# by Philippe De Muyter +# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11 +# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise +# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs +# `xv' recognizes only a subset of the following (RGB with pixelsize = 24) +# `tgatoppm' recognizes a superset (Index may be anything) +1 belong&0xfff7ffff 0x01010000 Targa image data - Map +>2 byte&8 8 - RLE +>12 leshort >0 %hd x +>14 leshort >0 %hd +1 belong&0xfff7ffff 0x00020000 Targa image data - RGB +>2 byte&8 8 - RLE +>12 leshort >0 %hd x +>14 leshort >0 %hd +1 belong&0xfff7ffff 0x00030000 Targa image data - Mono +>2 byte&8 8 - RLE +>12 leshort >0 %hd x +>14 leshort >0 %hd + +# PBMPLUS images +# The next byte following the magic is always whitespace. +0 string P1 Netpbm PBM image text +0 string P2 Netpbm PGM image text +0 string P3 Netpbm PPM image text +0 string P4 Netpbm PBM "rawbits" image data +0 string P5 Netpbm PGM "rawbits" image data +0 string P6 Netpbm PPM "rawbits" image data +0 string P7 Netpbm PAM image file + +# From: bryanh@giraffe-data.com (Bryan Henderson) +0 string \117\072 Solitaire Image Recorder format +>4 string \013 MGI Type 11 +>4 string \021 MGI Type 17 +0 string .MDA MicroDesign data +>21 byte 48 version 2 +>21 byte 51 version 3 +0 string .MDP MicroDesign page data +>21 byte 48 version 2 +>21 byte 51 version 3 + +# NIFF (Navy Interchange File Format, a modification of TIFF) images +0 string IIN1 NIFF image data + +# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com) +# The second word of TIFF files is the TIFF version number, 42, which has +# never changed. The TIFF specification recommends testing for it. +0 string MM\x00\x2a TIFF image data, big-endian +0 string II\x2a\x00 TIFF image data, little-endian + +# PNG [Portable Network Graphics, or "PNG's Not GIF"] images +# (Greg Roelofs, newt@uchicago.edu) +# (Albert Cahalan, acahalan@cs.uml.edu) +# +# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ... +# +0 string \x89PNG PNG image data, +>4 belong !0x0d0a1a0a CORRUPTED, +>4 belong 0x0d0a1a0a +>>16 belong x %ld x +>>20 belong x %ld, +>>24 byte x %d-bit +>>25 byte 0 grayscale, +>>25 byte 2 \b/color RGB, +>>25 byte 3 colormap, +>>25 byte 4 gray+alpha, +>>25 byte 6 \b/color RGBA, +#>>26 byte 0 deflate/32K, +>>28 byte 0 non-interlaced +>>28 byte 1 interlaced +1 string PNG PNG image data, CORRUPTED + +# GIF +0 string GIF8 GIF image data +>4 string 7a \b, version 8%s, +>4 string 9a \b, version 8%s, +>6 leshort >0 %hd x +>8 leshort >0 %hd +#>10 byte &0x80 color mapped, +#>10 byte&0x07 =0x00 2 colors +#>10 byte&0x07 =0x01 4 colors +#>10 byte&0x07 =0x02 8 colors +#>10 byte&0x07 =0x03 16 colors +#>10 byte&0x07 =0x04 32 colors +#>10 byte&0x07 =0x05 64 colors +#>10 byte&0x07 =0x06 128 colors +#>10 byte&0x07 =0x07 256 colors + +# ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster, +# 1 plane, no encoding. +0 string \361\0\100\273 CMU window manager raster image data +>4 lelong >0 %d x +>8 lelong >0 %d, +>12 lelong >0 %d-bit + +# Magick Image File Format +0 string id=ImageMagick MIFF image data + +# Artisan +0 long 1123028772 Artisan image data +>4 long 1 \b, rectangular 24-bit +>4 long 2 \b, rectangular 8-bit with colormap +>4 long 3 \b, rectangular 32-bit (24-bit with matte) + +# FIG (Facility for Interactive Generation of figures), an object-based format +0 string #FIG FIG image text +>5 string x \b, version %.3s + +# PHIGS +0 string ARF_BEGARF PHIGS clear text archive +0 string @(#)SunPHIGS SunPHIGS +# version number follows, in the form m.n +>40 string SunBin binary +>32 string archive archive + +# GKS (Graphics Kernel System) +0 string GKSM GKS Metafile +>24 string SunGKS \b, SunGKS + +# CGM image files +0 string BEGMF clear text Computer Graphics Metafile +# XXX - questionable magic +0 beshort&0xffe0 0x0020 binary Computer Graphics Metafile +0 beshort 0x3020 character Computer Graphics Metafile + +# MGR bitmaps (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de) +0 string yz MGR bitmap, modern format, 8-bit aligned +0 string zz MGR bitmap, old format, 1-bit deep, 16-bit aligned +0 string xz MGR bitmap, old format, 1-bit deep, 32-bit aligned +0 string yx MGR bitmap, modern format, squeezed + +# Fuzzy Bitmap (FBM) images +0 string %bitmap\0 FBM image data +>30 long 0x31 \b, mono +>30 long 0x33 \b, color + +# facsimile data +1 string PC\ Research,\ Inc group 3 fax data +>29 byte 0 \b, normal resolution (204x98 DPI) +>29 byte 1 \b, fine resolution (204x196 DPI) +# From: Herbert Rosmanith +0 string Sfff structured fax file + + +# PC bitmaps (OS/2, Windoze BMP files) (Greg Roelofs, newt@uchicago.edu) +0 string BM PC bitmap data +>14 leshort 12 \b, OS/2 1.x format +>>18 leshort x \b, %d x +>>20 leshort x %d +>14 leshort 64 \b, OS/2 2.x format +>>18 leshort x \b, %d x +>>20 leshort x %d +>14 leshort 40 \b, Windows 3.x format +>>18 lelong x \b, %d x +>>22 lelong x %d x +>>28 leshort x %d +# Too simple - MPi +#0 string IC PC icon data +#0 string PI PC pointer image data +#0 string CI PC color icon data +#0 string CP PC color pointer image data +# Conflicts with other entries [BABYL] +#0 string BA PC bitmap array data + +# XPM icons (Greg Roelofs, newt@uchicago.edu) +# note possible collision with C/REXX entry in c-lang; currently commented out +0 string /*\ XPM\ */ X pixmap image text + +# Utah Raster Toolkit RLE images (janl@ifi.uio.no) +0 leshort 0xcc52 RLE image data, +>6 leshort x %d x +>8 leshort x %d +>2 leshort >0 \b, lower left corner: %d +>4 leshort >0 \b, lower right corner: %d +>10 byte&0x1 =0x1 \b, clear first +>10 byte&0x2 =0x2 \b, no background +>10 byte&0x4 =0x4 \b, alpha channel +>10 byte&0x8 =0x8 \b, comment +>11 byte >0 \b, %d color channels +>12 byte >0 \b, %d bits per pixel +>13 byte >0 \b, %d color map channels + +# image file format (Robert Potter, potter@cs.rochester.edu) +0 string Imagefile\ version- iff image data +# this adds the whole header (inc. version number), informative but longish +>10 string >\0 %s + +# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com) +0 belong 0x59a66a95 Sun raster image data +>4 belong >0 \b, %d x +>8 belong >0 %d, +>12 belong >0 %d-bit, +#>16 belong >0 %d bytes long, +>20 belong 0 old format, +#>20 belong 1 standard, +>20 belong 2 compressed, +>20 belong 3 RGB, +>20 belong 4 TIFF, +>20 belong 5 IFF, +>20 belong 0xffff reserved for testing, +>24 belong 0 no colormap +>24 belong 1 RGB colormap +>24 belong 2 raw colormap +#>28 belong >0 colormap is %d bytes long + +# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com) +# +# See +# http://reality.sgi.com/grafica/sgiimage.html +# +0 beshort 474 SGI image data +#>2 byte 0 \b, verbatim +>2 byte 1 \b, RLE +#>3 byte 1 \b, normal precision +>3 byte 2 \b, high precision +>4 beshort x \b, %d-D +>6 beshort x \b, %d x +>8 beshort x %d +>10 beshort x \b, %d channel +>10 beshort !1 \bs +>80 string >0 \b, "%s" + +0 string IT01 FIT image data +>4 belong x \b, %d x +>8 belong x %d x +>12 belong x %d +# +0 string IT02 FIT image data +>4 belong x \b, %d x +>8 belong x %d x +>12 belong x %d +# +2048 string PCD_IPI Kodak Photo CD image pack file +>0xe02 byte&0x03 0x00 , landscape mode +>0xe02 byte&0x03 0x01 , portrait mode +>0xe02 byte&0x03 0x02 , landscape mode +>0xe02 byte&0x03 0x03 , portrait mode +0 string PCD_OPA Kodak Photo CD overview pack file + +# FITS format. Jeff Uphoff +# FITS is the Flexible Image Transport System, the de facto standard for +# data and image transfer, storage, etc., for the astronomical community. +# (FITS floating point formats are big-endian.) +0 string SIMPLE\ \ = FITS image data +>109 string 8 \b, 8-bit, character or unsigned binary integer +>108 string 16 \b, 16-bit, two's complement binary integer +>107 string \ 32 \b, 32-bit, two's complement binary integer +>107 string -32 \b, 32-bit, floating point, single precision +>107 string -64 \b, 64-bit, floating point, double precision + +# other images +0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file +0 string !! Bennet Yee's "face" format + +# From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image +# stuff. +# +0 beshort 0x1010 PEX Binary Archive + +# Visio drawings +03000 string Visio\ (TM)\ Drawing %s + +# Tgif files +0 string \%TGIF\ x Tgif file version %s + +# DICOM medical imaging data +128 string DICM DICOM medical imaging data + +# XWD - X Window Dump file. +# As described in /usr/X11R6/include/X11/XWDFile.h +# used by the xwd program. +# Bradford Castalia, idaeim, 1/01 +4 belong 7 XWD X Window Dump image data +>100 string >\0 \b, "%s" +>16 belong x \b, %dx +>20 belong x \b%dx +>12 belong x \b%d + +# PDS - Planetary Data System +# These files use Parameter Value Language in the header section. +# Unfortunately, there is no certain magic, but the following +# strings have been found to be most likely. +0 string NJPL1I00 PDS (JPL) image data +2 string NJPL1I PDS (JPL) image data +0 string CCSD3ZF PDS (CCSD) image data +2 string CCSD3Z PDS (CCSD) image data +0 string PDS_ PDS image data +0 string LBLSIZE= PDS (VICAR) image data + +# pM8x: ATARI STAD compressed bitmap format +# +# from Oskar Schirmer Feb 2, 2001 +# p M 8 5/6 xx yy zz data... +# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed. +# bytes either run horizontally (pM85) or vertically (pM86). yy is the +# most frequent byte, xx and zz are runlength escape codes, where xx is +# used for runs of yy. +# +0 string pM85 Atari ST STAD bitmap image data (hor) +>5 byte 0x00 (white background) +>5 byte 0xFF (black background) +0 string pM86 Atari ST STAD bitmap image data (vert) +>5 byte 0x00 (white background) +>5 byte 0xFF (black background) + +# XXX: +# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other +# magic. +# SGI RICE image file +#0 beshort 0x5249 RICE image +#>2 beshort x v%d +#>4 beshort x (%d x +#>6 beshort x %d) +#>8 beshort 0 8 bit +#>8 beshort 1 10 bit +#>8 beshort 2 12 bit +#>8 beshort 3 13 bit +#>10 beshort 0 4:2:2 +#>10 beshort 1 4:2:2:4 +#>10 beshort 2 4:4:4 +#>10 beshort 3 4:4:4:4 +#>12 beshort 1 RGB +#>12 beshort 2 CCIR601 +#>12 beshort 3 RP175 +#>12 beshort 4 YUV + +#------------------------------------------------------------------------------ +# +# Marco Schmidt (marcoschmidt@users.sourceforge.net) -- an image file format +# for the EPOC operating system, which is used with PDAs like those from Psion +# +# see http://huizen.dds.nl/~frodol/psiconv/html/Index.html for a description +# of various EPOC file formats + +0 string \x37\x00\x00\x10\x42\x00\x00\x10\x00\x00\x00\x00\x39\x64\x39\x47 EPOC MBM image file + +# PCX image files +# From: Dan Fandrich +0 beshort 0x0a00 PCX ver. 2.5 image data +0 beshort 0x0a02 PCX ver. 2.8 image data, with palette +0 beshort 0x0a03 PCX ver. 2.8 image data, without palette +0 beshort 0x0a04 PCX for Windows image data +0 beshort 0x0a05 PCX ver. 3.0 image data +>4 leshort x bounding box [%hd, +>6 leshort x %hd] - +>8 leshort x [%hd, +>10 leshort x %hd], +>65 byte >1 %d planes each of +>3 byte x %hhd-bit +>68 byte 0 image, +>68 byte 1 colour, +>68 byte 2 grayscale, +>68 byte >2 image, +>68 byte <0 image, +>12 leshort >0 %hd x +>>14 leshort x %hd dpi, +>2 byte 0 uncompressed +>2 byte 1 RLE compressed + +# Adobe Photoshop +0 string 8BPS Adobe Photoshop Image + +# XV thumbnail indicator (ThMO) +0 string P7\ 332 XV thumbnail image data + +# NITF is defined by United States MIL-STD-2500A +0 string NITF National Imagery Transmission Format +>25 string >\0 dated %.14s + +# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff) +0 belong 0x00010008 GEM Image data +>12 beshort x %d x +>14 beshort x %d, +>4 beshort x %d planes, +>8 beshort x %d x +>10 beshort x %d pixelsize + +# GEM Metafile (Wolfram Kleff) +0 lelong 0x0018FFFF GEM Metafile data +>4 leshort x version %d + +# +# SMJPEG. A custom Motion JPEG format used by Loki Entertainment +# Software Torbjorn Andersson . +# +0 string \0\nSMJPEG SMJPEG +>8 belong x %d.x data +# According to the specification you could find any number of _TXT +# headers here, but I can't think of any way of handling that. None of +# the SMJPEG files I tried it on used this feature. Even if such a +# file is encountered the output should still be reasonable. +>16 string _SND \b, +>>24 beshort >0 %d Hz +>>26 byte 8 8-bit +>>26 byte 16 16-bit +>>28 string NONE uncompressed +# >>28 string APCM ADPCM compressed +>>27 byte 1 mono +>>28 byte 2 stereo +# Help! Isn't there any way to avoid writing this part twice? +>>32 string _VID \b, +# >>>48 string JFIF JPEG +>>>40 belong >0 %d frames +>>>44 beshort >0 (%d x +>>>46 beshort >0 %d) +>16 string _VID \b, +# >>32 string JFIF JPEG +>>24 belong >0 %d frames +>>28 beshort >0 (%d x +>>30 beshort >0 %d) + +0 string Paint\ Shop\ Pro\ Image\ File Paint Shop Pro Image File + +# "thumbnail file" (icon) +# descended from "xv", but in use by other applications as well (Wolfram Kleff) +0 string P7\ 332 XV "thumbnail file" (icon) data + +# taken from fkiss: ( ?) +0 string KiSS KISS/GS +>4 byte 16 color +>>5 byte x %d bit +>>8 leshort x %d colors +>>10 leshort x %d groups +>4 byte 32 cell +>>5 byte x %d bit +>>8 leshort x %d x +>>10 leshort x %d +>>12 leshort x +%d +>>14 leshort x +%d + +# Webshots (www.webshots.com), by John Harrison +0 string C\253\221g\230\0\0\0 Webshots Desktop .wbz file + +# Hercules DASD image files +# From Jan Jaeger +0 string CKD_P370 Hercules CKD DASD image file +>8 long x \b, %d heads per cylinder +>12 long x \b, track size %d bytes +>16 byte x \b, device type 33%2.2X + +0 string CKD_C370 Hercules compressed CKD DASD image file +>8 long x \b, %d heads per cylinder +>12 long x \b, track size %d bytes +>16 byte x \b, device type 33%2.2X + +0 string CKD_S370 Hercules CKD DASD shadow file +>8 long x \b, %d heads per cylinder +>12 long x \b, track size %d bytes +>16 byte x \b, device type 33%2.2X + +# Squeak images and - etoffi@softhome.net +0 string \146\031\0\0 Squeak image data +0 string 'From\040Squeak Squeak program text + +# partimage: file(1) magic for PartImage files (experimental, incomplete) +# Author: Hans-Joachim Baader +0 string PaRtImAgE-VoLuMe PartImage +>0x0020 string 0.6.1 file version %s +>>0x0060 lelong >-1 volume %ld +#>>0x0064 8 byte identifier +#>>0x007c reserved +>>0x0200 string >\0 type %s +>>0x1400 string >\0 device %s, +>>0x1600 string >\0 original filename %s, +# Some fields omitted +>>0x2744 lelong 0 not compressed +>>0x2744 lelong 1 gzip compressed +>>0x2744 lelong 2 bzip2 compressed +>>0x2744 lelong >2 compressed with unknown algorithm +>0x0020 string >0.6.1 file version %s +>0x0020 string <0.6.1 file version %s + +# DCX is multi-page PCX, using a simple header of up to 1024 +# offsets for the respective PCX components. +# From: Joerg Wunsch +0 lelong 987654321 DCX multi-page PCX image data + +# Simon Walton +# Kodak Cineon format for scanned negatives +# http://www.kodak.com/US/en/motion/support/dlad/ +0 lelong 0xd75f2a80 Cineon image data +>200 belong >0 \b, %ld x +>204 belong >0 %ld + + +# Bio-Rad .PIC is an image format used by microscope control systems +# and related image processing software used by biologists. +# From: Vebjorn Ljosa +54 leshort 12345 Bio-Rad .PIC Image File +>0 leshort >0 %hd x +>2 leshort >0 %hd, +>4 leshort =1 1 image in file +>4 leshort >1 %hd images in file + +# From Jan "Yenya" Kasprzak +# The description of *.mrw format can be found at +# http://www.dalibor.cz/minolta/raw_file_format.htm +0 string \000MRM Minolta Dimage camera raw image data + +# From: stephane.loeuillet@tiscali.f +# http://www.djvuzone.org/ +0 string AT&TFORM DjVu Image file + +# From: Jason Bacon +0 beshort 0x3020 character Computer Graphics Metafile + + + +# From: Tom Hilinski +# http://www.unidata.ucar.edu/packages/netcdf/ +0 string CDF\001 netcdf file +# +#------------------------------------------------------------------------------ +# tuxedo: file(1) magic for BEA TUXEDO data files +# +# from Ian Springer +# +0 string \0\0\1\236\0\0\0\0\0\0\0\0\0\0\0\0 BEA TUXEDO DES mask data + +#------------------------------------------------------------------------------ +# timezone: file(1) magic for timezone data +# +# from Daniel Quinlan (quinlan@yggdrasil.com) +# this should work on Linux, SunOS, and maybe others +# Added new official magic number for recent versions of the Olson code +0 string TZif timezone data +0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0 old timezone data +0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0 old timezone data +0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0 old timezone data +0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0 old timezone data +0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0 old timezone data +0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0 old timezone data + +#------------------------------------------------------------------------------ +# project: file(1) magic for Project management +# +# Magic strings for ftnchek project files. Alexander Mai +0 string FTNCHEK_\ P project file for ftnchek +>10 string 1 version 2.7 +>10 string 2 version 2.8 to 2.10 +>10 string 3 version 2.11 or later +#------------------------------------------------------------------------------ +# cisco: file(1) magic for cisco Systems routers +# +# Most cisco file-formats are covered by the generic elf code +# +# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha. +0 belong&0xffffff00 0x85011400 cisco IOS microcode +>7 string >\0 for '%s' +0 belong&0xffffff00 0x8501cb00 cisco IOS experimental microcode +>7 string >\0 for '%s' +#------------------------------------------------------------------------------ +# mach file description +# +0 belong 0xcafebabe Mach-O fat file +>4 belong 1 with 1 architecture +>4 belong >1 +>>4 belong x with %ld architectures +# +0 belong 0xfeedface Mach-O +>12 belong 1 object +>12 belong 2 executable +>12 belong 3 shared library +>12 belong 4 core +>12 belong 5 preload executable +>12 belong 6 dynamically linked shared library +>12 belong 7 dynamic linker +>12 belong 8 bundle +>12 belong >8 +>>12 belong x filetype=%ld +>4 belong <0 +>>4 belong x architecture=%ld +>4 belong 1 vax +>4 belong 2 romp +>4 belong 3 architecture=3 +>4 belong 4 ns32032 +>4 belong 5 ns32332 +>4 belong 6 for m68k architecture +# from NeXTstep 3.0 +# i.e. mc680x0_all, ignore +# >>8 belong 1 (mc68030) +>>8 belong 2 (mc68040) +>>8 belong 3 (mc68030 only) +>4 belong 7 i386 +>4 belong 8 mips +>4 belong 9 ns32532 +>4 belong 10 architecture=10 +>4 belong 11 hp pa-risc +>4 belong 12 acorn +>4 belong 13 m88k +>4 belong 14 sparc +>4 belong 15 i860-big +>4 belong 16 i860 +>4 belong 17 rs6000 +>4 belong 18 ppc +>4 belong >18 +>>4 belong x architecture=%ld + +#------------------------------------------------------------------------------ +# mkid: file(1) magic for mkid(1) databases +# +# ID is the binary tags database produced by mkid(1). +# +# XXX - byte order? +# +0 string \311\304 ID tags data +>2 short >0 version %d + +#------------------------------------------------------------------------------ +# pgp: file(1) magic for Pretty Good Privacy +# +0 beshort 0x9900 PGP key public ring +0 beshort 0x9501 PGP key security ring +0 beshort 0x9500 PGP key security ring +0 beshort 0xa600 PGP encrypted data +0 string -----BEGIN\040PGP PGP armored data +>15 string PUBLIC\040KEY\040BLOCK- public key block +>15 string MESSAGE- message +>15 string SIGNED\040MESSAGE- signed message +>15 string PGP\040SIGNATURE- signature + +#------------------------------------------------------------------------------ +# terminfo: file(1) magic for terminfo +# +# XXX - byte order for screen images? +# +0 string \032\001 Compiled terminfo entry +0 short 0433 Curses screen image +0 short 0434 Curses screen image + +#------------------------------------------------------------------------------ +# printer: file(1) magic for printer-formatted files +# + +# PostScript, updated by Daniel Quinlan (quinlan@yggdrasil.com) +0 string %! PostScript document text +>2 string PS-Adobe- conforming +>>11 string >\0 at level %.3s +>>>15 string EPS - type %s +>>>15 string Query - type %s +>>>15 string ExitServer - type %s +# Some PCs have the annoying habit of adding a ^D as a document separator +0 string \004%! PostScript document text +>3 string PS-Adobe- conforming +>>12 string >\0 at level %.3s +>>>16 string EPS - type %s +>>>16 string Query - type %s +>>>16 string ExitServer - type %s +0 string \033%-12345X%!PS PostScript document + + +# DOS EPS Binary File Header +# From: Ed Sznyter +0 belong 0xC5D0D3C6 DOS EPS Binary File +>4 long >0 Postscript starts at byte %d +>>8 long >0 length %d +>>>12 long >0 Metafile starts at byte %d +>>>>16 long >0 length %d +>>>20 long >0 TIFF starts at byte %d +>>>>24 long >0 length %d + +# Adobe's PostScript Printer Description (PPD) files +# Yves Arrouye +# +0 string *PPD-Adobe: PPD file +>13 string x \b, ve + +# HP Printer Job Language +0 string \033%-12345X@PJL HP Printer Job Language data +# HP Printer Job Language +# The header found on Win95 HP plot files is the "Silliest Thing possible" +# (TM) +# Every driver puts the language at some random position, with random case +# (LANGUAGE and Language) +# For example the LaserJet 5L driver puts the "PJL ENTER LANGUAGE" in line 10 +# From: Uwe Bonnes +# +0 string \033%-12345X@PJL HP Printer Job Language data +>&0 string >\0 %s +>>&0 string >\0 %s +>>>&0 string >\0 %s +>>>>&0 string >\0 %s +#>15 string \ ENTER\ LANGUAGE\ = +#>31 string PostScript PostScript + +# HP Printer Control Language, Daniel Quinlan (quinlan@yggdrasil.com) +0 string \033E\033 HP PCL printer data +>3 string \&l0A - default page size +>3 string \&l1A - US executive page size +>3 string \&l2A - US letter page size +>3 string \&l3A - US legal page size +>3 string \&l26A - A4 page size +>3 string \&l80A - Monarch envelope size +>3 string \&l81A - No. 10 envelope size +>3 string \&l90A - Intl. DL envelope size +>3 string \&l91A - Intl. C5 envelope size +>3 string \&l100A - Intl. B5 envelope size +>3 string \&l-81A - No. 10 envelope size (landscape) +>3 string \&l-90A - Intl. DL envelope size (landscape) + +# IMAGEN printer-ready files: +0 string @document( Imagen printer +# this only works if "language xxx" is first item in Imagen header. +>10 string language\ impress (imPRESS data) +>10 string language\ daisy (daisywheel text) +>10 string language\ diablo (daisywheel text) +>10 string language\ printer (line printer emulation) +>10 string language\ tektronix (Tektronix 4014 emulation) +# Add any other languages that your Imagen uses - remember +# to keep the word `text' if the file is human-readable. +# [GRR 950115: missing "postscript" or "ultrascript" (whatever it was called)] +# +# Now magic for IMAGEN font files... +0 string Rast RST-format raster font data +>45 string >0 face %s +# From Jukka Ukkonen +0 string \033[K\002\0\0\017\033(a\001\0\001\033(g Canon Bubble Jet BJC formatted data + +# From +# These are the /etc/magic entries to decode data sent to an Epson printer. +0 string \x1B\x40\x1B\x28\x52\x08\x00\x00REMOTE1P Epson Stylus Color 460 data + + +#------------------------------------------------------------------------------ +# zenographics: file(1) magic for Zenographics ZjStream printer data +# Rick Richardson rickr@mn.rr.com +0 string JZJZ +>0x12 string ZZ Zenographics ZjStream printer data (big-endian) +0 string ZJZJ +>0x12 string ZZ Zenographics ZjStream printer data (little-endian) + + +#------------------------------------------------------------------------------ +# Oak Technologies printer stream +# Rick Richardson +0 string OAK +>0x07 byte 0 +>0x0b byte 0 Oak Technologies printer stream + +# This would otherwise be recognized as PostScript - nick@debian.org +0 string %!VMF SunClock's Vector Map Format data + +#------------------------------------------------------------------------------ +# HP LaserJet 1000 series downloadable firmware file +0 string \xbe\xefABCDEFGH HP LaserJet 1000 series downloadable firmware + +#------------------------------------------------------------------------------ +# apple: file(1) magic for Apple file formats +# +0 string FiLeStArTfIlEsTaRt binscii (apple ][) text +0 string \x0aGL Binary II (apple ][) data +0 string \x76\xff Squeezed (apple ][) data +0 string NuFile NuFile archive (apple ][) data +0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data +0 belong 0x00051600 AppleSingle encoded Macintosh file +0 belong 0x00051607 AppleDouble encoded Macintosh file + +# magic for Newton PDA package formats +# from Ruda Moura +0 string package0 Newton package, NOS 1.x, +>12 belong &0x80000000 AutoRemove, +>12 belong &0x40000000 CopyProtect, +>12 belong &0x10000000 NoCompression, +>12 belong &0x04000000 Relocation, +>12 belong &0x02000000 UseFasterCompression, +>16 belong x version %d + +0 string package1 Newton package, NOS 2.x, +>12 belong &0x80000000 AutoRemove, +>12 belong &0x40000000 CopyProtect, +>12 belong &0x10000000 NoCompression, +>12 belong &0x04000000 Relocation, +>12 belong &0x02000000 UseFasterCompression, +>16 belong x version %d + +0 string package4 Newton package, +>8 byte 8 NOS 1.x, +>8 byte 9 NOS 2.x, +>12 belong &0x80000000 AutoRemove, +>12 belong &0x40000000 CopyProtect, +>12 belong &0x10000000 NoCompression, + +# The following entries for the Apple II are for files that have +# been transferred as raw binary data from an Apple, without having +# been encapsulated by any of the above archivers. +# +# In general, Apple II formats are hard to identify because Apple DOS +# and especially Apple ProDOS have strong typing in the file system and +# therefore programmers never felt much need to include type information +# in the files themselves. +# +# Eric Fischer + +# AppleWorks word processor: +# +# This matches the standard tab stops for an AppleWorks file, but if +# a file has a tab stop set in the first four columns this will fail. +# +# The "O" is really the magic number, but that's so common that it's +# necessary to check the tab stops that follow it to avoid false positives. + +4 string O==== AppleWorks word processor data +>85 byte&0x01 >0 \b, zoomed +>90 byte&0x01 >0 \b, paginated +>92 byte&0x01 >0 \b, with mail merge +#>91 byte x \b, left margin %d + +# AppleWorks database: +# +# This isn't really a magic number, but it's the closest thing to one +# that I could find. The 1 and 2 really mean "order in which you defined +# categories" and "left to right, top to bottom," respectively; the D and R +# mean that the cursor should move either down or right when you press Return. + +#30 string \x01D AppleWorks database data +#30 string \x02D AppleWorks database data +#30 string \x01R AppleWorks database data +#30 string \x02R AppleWorks database data + +# AppleWorks spreadsheet: +# +# Likewise, this isn't really meant as a magic number. The R or C means +# row- or column-order recalculation; the A or M means automatic or manual +# recalculation. + +#131 string RA AppleWorks spreadsheet data +#131 string RM AppleWorks spreadsheet data +#131 string CA AppleWorks spreadsheet data +#131 string CM AppleWorks spreadsheet data + +# Applesoft BASIC: +# +# This is incredibly sloppy, but will be true if the program was +# written at its usual memory location of 2048 and its first line +# number is less than 256. Yuck. + +0 belong&0xff00ff 0x80000 Applesoft BASIC program data +#>2 leshort x \b, first line number %d + +# ORCA/EZ assembler: +# +# This will not identify ORCA/M source files, since those have +# some sort of date code instead of the two zero bytes at 6 and 7 +# XXX Conflicts with ELF +#4 belong&0xff00ffff 0x01000000 ORCA/EZ assembler source data +#>5 byte x \b, build number %d + +# Broderbund Fantavision +# +# I don't know what these values really mean, but they seem to recur. +# Will they cause too many conflicts? + +# Probably :-) +#2 belong&0xFF00FF 0x040008 Fantavision movie data + +# Some attempts at images. +# +# These are actually just bit-for-bit dumps of the frame buffer, so +# there's really no reasonably way to distinguish them except for their +# address (if preserved) -- 8192 or 16384 -- and their length -- 8192 +# or, occasionally, 8184. +# +# Nevertheless this will manage to catch a lot of images that happen +# to have a solid-colored line at the bottom of the screen. + +8144 string \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F Apple II image with white background +8144 string \x55\x2A\x55\x2A\x55\x2A\x55\x2A Apple II image with purple background +8144 string \x2A\x55\x2A\x55\x2A\x55\x2A\x55 Apple II image with green background +8144 string \xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA Apple II image with blue background +8144 string \xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5 Apple II image with orange background + +# Beagle Bros. Apple Mechanic fonts + +0 belong&0xFF00FFFF 0x6400D000 Apple Mechanic font + +# Apple Universal Disk Image Format (UDIF) - dmg files. +# From Johan Gade. +# These entries are disabled for now until we fix the following issues. +# +# Note there might be some problems with the "VAX COFF executable" +# entry. Note this entry should be placed before the mac filesystem section, +# particularly the "Apple Partition data" entry. +# +# The intended meaning of these tests is, that the file is only of the +# specified type if both of the lines are correct - i.e. if the first +# line matches and the second doesn't then it is not of that type. +# +#0 long 0x7801730d +#>4 long 0x62626060 UDIF read-only zlib-compressed image (UDZO) +# +# Note that this entry is recognized correctly by the "Apple Partition +# data" entry - however since this entry is more specific - this +# information seems to be more useful. +#0 long 0x45520200 +#>0x410 string disk\ image UDIF read/write image (UDRW) + +#------------------------------------------------------------------------------ +# applix: file(1) magic for Applixware +# From: Peter Soos +# +0 string *BEGIN Applixware +>7 string WORDS Words Document +>7 string GRAPHICS Graphic +>7 string RASTER Bitmap +>7 string SPREADSHEETS Spreadsheet +>7 string MACRO Macro +>7 string BUILDER Builder Object + +#------------------------------------------------------------------------------ +# interleaf: file(1) magic for InterLeaf TPS: +# +0 string =\210OPS Interleaf saved data +0 string =5 string ,\ Version\ = \b, version +>>17 string >\0 %.3s + +#------------------------------------------------------------------------------ +# lisp: file(1) magic for lisp programs +# +# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com) + +# This is a guess, but a good one. +0 string ;; Lisp/Scheme program text + +# Emacs 18 - this is always correct, but not very magical. +0 string \012( Emacs v18 byte-compiled Lisp data +# Emacs 19+ - ver. recognition added by Ian Springer +# Also applies to XEmacs 19+ .elc files; could tell them apart if we had regexp +# support or similar - Chris Chittleborough +0 string ;ELC +>4 byte >19 +>4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data + +# Files produced by CLISP Common Lisp From: Bruno Haible +0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program text +0 long 0x70768BD2 CLISP memory image data +0 long 0xD28B7670 CLISP memory image data, other endian + +# Files produced by GNU gettext +0 long 0xDE120495 GNU-format message catalog data +0 long 0x950412DE GNU-format message catalog data + +#.com and .bin for MIT scheme +0 string \372\372\372\372 MIT scheme (library?) + +# From: David Allouche +0 string \ + +0 string spec SPEC +>4 string .cpu CPU +>>8 string <: \b%.4s +>>12 string . raw result text + +17 string version=SPECjbb SPECjbb +>32 string <: \b%.4s +>>37 string <: v%.4s raw result text + +0 string BEGIN\040SPECWEB SPECweb +>13 string <: \b%.2s +>>15 string _SSL \b_SSL +>>>20 string <: v%.4s raw result text +>>16 string <: v%.4s raw result text + +#------------------------------------------------------------------------------ +# sniffer: file(1) magic for packet capture files +# +# From: guy@alum.mit.edu (Guy Harris) +# + +# +# Microsoft Network Monitor 1.x capture files. +# +0 string RTSS NetMon capture file +>5 byte x - version %d +>4 byte x \b.%d +>6 leshort 0 (Unknown) +>6 leshort 1 (Ethernet) +>6 leshort 2 (Token Ring) +>6 leshort 3 (FDDI) +>6 leshort 4 (ATM) + +# +# Microsoft Network Monitor 2.x capture files. +# +0 string GMBU NetMon capture file +>5 byte x - version %d +>4 byte x \b.%d +>6 leshort 0 (Unknown) +>6 leshort 1 (Ethernet) +>6 leshort 2 (Token Ring) +>6 leshort 3 (FDDI) +>6 leshort 4 (ATM) + +# +# Network General Sniffer capture files. +# Sorry, make that "Network Associates Sniffer capture files." +# Sorry, make that "Network General old DOS Sniffer capture files." +# +0 string TRSNIFF\ data\ \ \ \ \032 Sniffer capture file +>33 byte 2 (compressed) +>23 leshort x - version %d +>25 leshort x \b.%d +>32 byte 0 (Token Ring) +>32 byte 1 (Ethernet) +>32 byte 2 (ARCNET) +>32 byte 3 (StarLAN) +>32 byte 4 (PC Network broadband) +>32 byte 5 (LocalTalk) +>32 byte 6 (Znet) +>32 byte 7 (Internetwork Analyzer) +>32 byte 9 (FDDI) +>32 byte 10 (ATM) + +# +# Cinco Networks NetXRay capture files. +# Sorry, make that "Network General Sniffer Basic capture files." +# Sorry, make that "Network Associates Sniffer Basic capture files." +# Sorry, make that "Network Associates Sniffer Basic, and Windows +# Sniffer Pro", capture files." +# Sorry, make that "Network General Sniffer capture files." +# +0 string XCP\0 NetXRay capture file +>4 string >\0 - version %s +>44 leshort 0 (Ethernet) +>44 leshort 1 (Token Ring) +>44 leshort 2 (FDDI) +>44 leshort 3 (WAN) +>44 leshort 8 (ATM) +>44 leshort 9 (802.11) + +# +# "libpcap" capture files. +# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is +# the main program that uses that format, but there are other programs +# that use "libpcap", or that use the same capture file format.) +# +0 ubelong 0xa1b2c3d4 tcpdump capture file (big-endian) +>4 beshort x - version %d +>6 beshort x \b.%d +>20 belong 0 (No link-layer encapsulation +>20 belong 1 (Ethernet +>20 belong 2 (3Mb Ethernet +>20 belong 3 (AX.25 +>20 belong 4 (ProNET +>20 belong 5 (CHAOS +>20 belong 6 (Token Ring +>20 belong 7 (BSD ARCNET +>20 belong 8 (SLIP +>20 belong 9 (PPP +>20 belong 10 (FDDI +>20 belong 11 (RFC 1483 ATM +>20 belong 12 (raw IP +>20 belong 13 (BSD/OS SLIP +>20 belong 14 (BSD/OS PPP +>20 belong 19 (Linux ATM Classical IP +>20 belong 50 (PPP or Cisco HDLC +>20 belong 51 (PPP-over-Ethernet +>20 belong 99 (Symantec Enterprise Firewall +>20 belong 100 (RFC 1483 ATM +>20 belong 101 (raw IP +>20 belong 102 (BSD/OS SLIP +>20 belong 103 (BSD/OS PPP +>20 belong 104 (BSD/OS Cisco HDLC +>20 belong 105 (802.11 +>20 belong 106 (Linux Classical IP over ATM +>20 belong 107 (Frame Relay +>20 belong 108 (OpenBSD loopback +>20 belong 109 (OpenBSD IPsec encrypted +>20 belong 112 (Cisco HDLC +>20 belong 113 (Linux "cooked" +>20 belong 114 (LocalTalk +>20 belong 117 (OpenBSD PFLOG +>20 belong 119 (802.11 with Prism header +>20 belong 122 (RFC 2625 IP over Fibre Channel +>20 belong 123 (SunATM +>20 belong 127 (802.11 with radiotap header +>20 belong 129 (Linux ARCNET +>20 belong 138 (Apple IP over IEEE 1394 +>20 belong 140 (MTP2 +>20 belong 141 (MTP3 +>20 belong 143 (DOCSIS +>20 belong 144 (IrDA +>20 belong 147 (Private use 0 +>20 belong 148 (Private use 1 +>20 belong 149 (Private use 2 +>20 belong 150 (Private use 3 +>20 belong 151 (Private use 4 +>20 belong 152 (Private use 5 +>20 belong 153 (Private use 6 +>20 belong 154 (Private use 7 +>20 belong 155 (Private use 8 +>20 belong 156 (Private use 9 +>20 belong 157 (Private use 10 +>20 belong 158 (Private use 11 +>20 belong 159 (Private use 12 +>20 belong 160 (Private use 13 +>20 belong 161 (Private use 14 +>20 belong 162 (Private use 15 +>20 belong 163 (802.11 with AVS header +>16 belong x \b, capture length %d) +0 ulelong 0xa1b2c3d4 tcpdump capture file (little-endian) +>4 leshort x - version %d +>6 leshort x \b.%d +>20 lelong 0 (No link-layer encapsulation +>20 lelong 1 (Ethernet +>20 lelong 2 (3Mb Ethernet +>20 lelong 3 (AX.25 +>20 lelong 4 (ProNET +>20 lelong 5 (CHAOS +>20 lelong 6 (Token Ring +>20 lelong 7 (ARCNET +>20 lelong 8 (SLIP +>20 lelong 9 (PPP +>20 lelong 10 (FDDI +>20 lelong 11 (RFC 1483 ATM +>20 lelong 12 (raw IP +>20 lelong 13 (BSD/OS SLIP +>20 lelong 14 (BSD/OS PPP +>20 lelong 19 (Linux ATM Classical IP +>20 lelong 50 (PPP or Cisco HDLC +>20 lelong 51 (PPP-over-Ethernet +>20 lelong 99 (Symantec Enterprise Firewall +>20 lelong 100 (RFC 1483 ATM +>20 lelong 101 (raw IP +>20 lelong 102 (BSD/OS SLIP +>20 lelong 103 (BSD/OS PPP +>20 lelong 104 (BSD/OS Cisco HDLC +>20 lelong 105 (802.11 +>20 lelong 106 (Linux Classical IP over ATM +>20 lelong 107 (Frame Relay +>20 lelong 108 (OpenBSD loopback +>20 lelong 109 (OpenBSD IPsec encrypted +>20 lelong 112 (Cisco HDLC +>20 lelong 113 (Linux "cooked" +>20 lelong 114 (LocalTalk +>20 lelong 117 (OpenBSD PFLOG +>20 lelong 119 (802.11 with Prism header +>20 lelong 122 (RFC 2625 IP over Fibre Channel +>20 lelong 123 (SunATM +>20 lelong 127 (802.11 with radiotap header +>20 lelong 129 (Linux ARCNET +>20 lelong 138 (Apple IP over IEEE 1394 +>20 lelong 140 (MTP2 +>20 lelong 141 (MTP3 +>20 lelong 143 (DOCSIS +>20 lelong 144 (IrDA +>20 lelong 147 (Private use 0 +>20 lelong 148 (Private use 1 +>20 lelong 149 (Private use 2 +>20 lelong 150 (Private use 3 +>20 lelong 151 (Private use 4 +>20 lelong 152 (Private use 5 +>20 lelong 153 (Private use 6 +>20 lelong 154 (Private use 7 +>20 lelong 155 (Private use 8 +>20 lelong 156 (Private use 9 +>20 lelong 157 (Private use 10 +>20 lelong 158 (Private use 11 +>20 lelong 159 (Private use 12 +>20 lelong 160 (Private use 13 +>20 lelong 161 (Private use 14 +>20 lelong 162 (Private use 15 +>20 lelong 163 (802.11 with AVS header +>16 lelong x \b, capture length %d) + +# +# "libpcap"-with-Alexey-Kuznetsov's-patches capture files. +# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is +# the main program that uses that format, but there are other programs +# that use "libpcap", or that use the same capture file format.) +# +0 ubelong 0xa1b2cd34 extended tcpdump capture file (big-endian) +>4 beshort x - version %d +>6 beshort x \b.%d +>20 belong 0 (No link-layer encapsulation +>20 belong 1 (Ethernet +>20 belong 2 (3Mb Ethernet +>20 belong 3 (AX.25 +>20 belong 4 (ProNET +>20 belong 5 (CHAOS +>20 belong 6 (Token Ring +>20 belong 7 (ARCNET +>20 belong 8 (SLIP +>20 belong 9 (PPP +>20 belong 10 (FDDI +>20 belong 11 (RFC 1483 ATM +>20 belong 12 (raw IP +>20 belong 13 (BSD/OS SLIP +>20 belong 14 (BSD/OS PPP +>16 belong x \b, capture length %d) +0 ulelong 0xa1b2cd34 extended tcpdump capture file (little-endian) +>4 leshort x - version %d +>6 leshort x \b.%d +>20 lelong 0 (No link-layer encapsulation +>20 lelong 1 (Ethernet +>20 lelong 2 (3Mb Ethernet +>20 lelong 3 (AX.25 +>20 lelong 4 (ProNET +>20 lelong 5 (CHAOS +>20 lelong 6 (Token Ring +>20 lelong 7 (ARCNET +>20 lelong 8 (SLIP +>20 lelong 9 (PPP +>20 lelong 10 (FDDI +>20 lelong 11 (RFC 1483 ATM +>20 lelong 12 (raw IP +>20 lelong 13 (BSD/OS SLIP +>20 lelong 14 (BSD/OS PPP +>16 lelong x \b, capture length %d) + +# +# AIX "iptrace" capture files. +# +0 string iptrace\ 1.0 "iptrace" capture file +0 string iptrace\ 2.0 "iptrace" capture file + +# +# Novell LANalyzer capture files. +# +0 leshort 0x1001 LANalyzer capture file +0 leshort 0x1007 LANalyzer capture file + +# +# HP-UX "nettl" capture files. +# +0 string \x54\x52\x00\x64\x00 "nettl" capture file + +# +# RADCOM WAN/LAN Analyzer capture files. +# +0 string \x42\xd2\x00\x34\x12\x66\x22\x88 RADCOM WAN/LAN Analyzer capture file + +# +# NetStumbler log files. Not really packets, per se, but about as +# close as you can get. These are log files from NetStumbler, a +# Windows program, that scans for 802.11b networks. +# +0 string NetS NetStumbler log file +>8 lelong x \b, %d stations found + +# +# EtherPeek/AiroPeek "version 9" capture files. +# +0 string \177ver EtherPeek/AiroPeek capture file + +# +# Visual Networks traffic capture files. +# +0 string \x05VNF Visual Networks traffic capture file + +# +# Network Instruments Observer capture files. +# +0 string ObserverPktBuffe Network Instruments Observer capture file + +# +# Files from Accellent Group's 5View products. +# +0 string \xaa\xaa\xaa\xaa 5View capture file + +#------------------------------------------------------------------------------ +# file(1) magic for revision control files +# From Hendrik Scholz +0 string /1\ :pserver: cvs password text file +#------------------------------------------------------------------------------ +# amigaos: file(1) magic for AmigaOS binary formats: + +# +# From ignatios@cs.uni-bonn.de (Ignatios Souvatzis) +# +0 belong 0x000003fa AmigaOS shared library +0 belong 0x000003f3 AmigaOS loadseg()ble executable/binary +0 belong 0x000003e7 AmigaOS object/library data +# +0 beshort 0xe310 Amiga Workbench +>2 beshort 1 +>>48 byte 1 disk icon +>>48 byte 2 drawer icon +>>48 byte 3 tool icon +>>48 byte 4 project icon +>>48 byte 5 garbage icon +>>48 byte 6 device icon +>>48 byte 7 kickstart icon +>>48 byte 8 workbench application icon +>2 beshort >1 icon, vers. %d +# +# various sound formats from the Amiga +# G=F6tz Waschk +# +0 string FC14 Future Composer 1.4 Module sound file +0 string SMOD Future Composer 1.3 Module sound file +0 string AON4artofnoise Art Of Noise Module sound file +1 string MUGICIAN/SOFTEYES Mugician Module sound file +58 string SIDMON\ II\ -\ THE Sidmon 2.0 Module sound file +0 string Synth4.0 Synthesis Module sound file +0 string ARP. The Holy Noise Module sound file +0 string BeEp\0 JamCracker Module sound file +0 string COSO\0 Hippel-COSO Module sound file +# Too simple (short, pure ASCII, deep), MPi +#26 string V.3 Brian Postma's Soundmon Module sound file v3 +#26 string BPSM Brian Postma's Soundmon Module sound file v3 +#26 string V.2 Brian Postma's Soundmon Module sound file v2 + +# The following are from: "Stefan A. Haubenthal" +0 beshort 0x0f00 AmigaOS bitmap font +0 beshort 0x0f03 AmigaOS outline font +0 belong 0x80001001 AmigaOS outline tag +0 string ##\ version catalog translation + +# Amiga disk types +# +0 string RDSK Rigid Disk Block +>160 string x on %.24s +0 string DOS\0 Amiga DOS disk +0 string DOS\1 Amiga FFS disk +0 string DOS\2 Amiga Inter DOS disk +0 string DOS\3 Amiga Inter FFS disk +0 string DOS\4 Amiga Fastdir DOS disk +0 string DOS\5 Amiga Fastdir FFS disk +0 string KICK Kickstart disk + +#------------------------------------------------------------------------------ +# database: file(1) magic for various databases +# +# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk) +# +# +# GDBM magic numbers +# Will be maintained as part of the GDBM distribution in the future. +# +0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian +0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian +0 string GDBM GNU dbm 2.x database +# +# Berkeley DB +# +# Ian Darwin's file /etc/magic files: big/little-endian version. +# +# Hash 1.85/1.86 databases store metadata in network byte order. +# Btree 1.85/1.86 databases store the metadata in host byte order. +# Hash and Btree 2.X and later databases store the metadata in host byte order. + +0 long 0x00061561 Berkeley DB +>8 belong 4321 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, native byte-order) +>8 belong 1234 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, little-endian) + +0 belong 0x00061561 Berkeley DB +>8 belong 4321 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, big-endian) +>8 belong 1234 +>>4 belong >2 1.86 +>>4 belong <3 1.85 +>>4 belong >0 (Hash, version %d, native byte-order) + +0 long 0x00053162 Berkeley DB 1.85/1.86 +>4 long >0 (Btree, version %d, native byte-order) +0 belong 0x00053162 Berkeley DB 1.85/1.86 +>4 belong >0 (Btree, version %d, big-endian) +0 lelong 0x00053162 Berkeley DB 1.85/1.86 +>4 lelong >0 (Btree, version %d, little-endian) + +12 long 0x00061561 Berkeley DB +>16 long >0 (Hash, version %d, native byte-order) +12 belong 0x00061561 Berkeley DB +>16 belong >0 (Hash, version %d, big-endian) +12 lelong 0x00061561 Berkeley DB +>16 lelong >0 (Hash, version %d, little-endian) + +12 long 0x00053162 Berkeley DB +>16 long >0 (Btree, version %d, native byte-order) +12 belong 0x00053162 Berkeley DB +>16 belong >0 (Btree, version %d, big-endian) +12 lelong 0x00053162 Berkeley DB +>16 lelong >0 (Btree, version %d, little-endian) + +12 long 0x00042253 Berkeley DB +>16 long >0 (Queue, version %d, native byte-order) +12 belong 0x00042253 Berkeley DB +>16 belong >0 (Queue, version %d, big-endian) +12 lelong 0x00042253 Berkeley DB +>16 lelong >0 (Queue, version %d, little-endian) +# +# +# Round Robin Database Tool by Tobias Oetiker +0 string RRD RRDTool DB +>4 string x version %s +#---------------------------------------------------------------------- +# ROOT: file(1) magic for ROOT databases +# +0 string root\0 ROOT file +>4 belong x Version %d +>33 belong x (Compression: %d) + +# XXX: Weak magic. +# Alex Ott +## Paradox file formats +#2 leshort 0x0800 Paradox +#>0x39 byte 3 v. 3.0 +#>0x39 byte 4 v. 3.5 +#>0x39 byte 9 v. 4.x +#>0x39 byte 10 v. 5.x +#>0x39 byte 11 v. 5.x +#>0x39 byte 12 v. 7.x +#>>0x04 byte 0 indexed .DB data file +#>>0x04 byte 1 primary index .PX file +#>>0x04 byte 2 non-indexed .DB data file +#>>0x04 byte 3 non-incrementing secondary index .Xnn file +#>>0x04 byte 4 secondary index .Ynn file +#>>0x04 byte 5 incrementing secondary index .Xnn file +#>>0x04 byte 6 non-incrementing secondary index .XGn file +#>>0x04 byte 7 secondary index .YGn file +#>>>0x04 byte 8 incrementing secondary index .XGn file +## XBase database files +#0 byte 0x02 +#>8 leshort >0 +#>>12 leshort 0 FoxBase +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x03 +#>8 leshort >0 +#>>12 leshort 0 FoxBase+, FoxPro, dBaseIII+, dBaseIV, no memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x04 +#>8 leshort >0 +#>>12 leshort 0 dBASE IV no memo file +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x05 +#>8 leshort >0 +#>>12 leshort 0 dBASE V no memo file +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x30 +#>8 leshort >0 +#>>12 leshort 0 Visual FoxPro +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x43 +#>8 leshort >0 +#>>12 leshort 0 FlagShip with memo var size +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x7b +#>8 leshort >0 +#>>12 leshort 0 dBASEIV with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x83 +#>8 leshort >0 +#>>12 leshort 0 FoxBase+, dBaseIII+ with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x8b +#>8 leshort >0 +#>>12 leshort 0 dBaseIV with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0x8e +#>8 leshort >0 +#>>12 leshort 0 dBaseIV with SQL Table +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0xb3 +#>8 leshort >0 +#>>12 leshort 0 FlagShip with .dbt memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 byte 0xf5 +#>8 leshort >0 +#>>12 leshort 0 FoxPro with memo +#>>>0x04 lelong 0 (no records) +#>>>0x04 lelong >0 (%ld records) +# +#0 leshort 0x0006 DBase 3 index file + +# MS Access database +4 string Standard\ Jet\ DB Microsoft Access Database + +# TDB database from Samba et al - Martin Pool +0 string TDB\ file TDB database +>32 lelong 0x2601196D version 6, little-endian +>>36 lelong x hash size %d bytes + +# SE Linux policy database +0 lelong 0xf97cff8c SE Linux policy +>16 lelong x v%d +>20 lelong 1 MLS +>24 lelong x %d symbols +>28 lelong x %d ocons + +# ICE authority file data (Wolfram Kleff) +2 string ICE ICE authority data + +# X11 Xauthority file (Wolfram Kleff) +10 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +11 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +12 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +13 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +14 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +15 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +16 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +17 string MIT-MAGIC-COOKIE-1 X11 Xauthority data +18 string MIT-MAGIC-COOKIE-1 X11 Xauthority data + +#------------------------------------------------------------------------------ +# gringotts: file(1) magic for Gringotts +# http://devel.pluto.linux.it/projects/Gringotts/ +# author: Germano Rizzo +#GRG3????Y +0 string GRG Gringotts data file +#file format 1 +>3 string 1 v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9 +#file format 2 +>3 string 2 v.2, MCRYPT S2K, +>>8 byte&0x70 0x00 RIJNDAEL-128 crypt, +>>8 byte&0x70 0x10 SERPENT crypt, +>>8 byte&0x70 0x20 TWOFISH crypt, +>>8 byte&0x70 0x30 CAST-256 crypt, +>>8 byte&0x70 0x40 SAFER+ crypt, +>>8 byte&0x70 0x50 LOKI97 crypt, +>>8 byte&0x70 0x60 3DES crypt, +>>8 byte&0x70 0x70 RIJNDAEL-256 crypt, +>>8 byte&0x08 0x00 SHA1 hash, +>>8 byte&0x08 0x08 RIPEMD-160 hash, +>>8 byte&0x04 0x00 ZLib +>>8 byte&0x04 0x04 BZip2 +>>8 byte&0x03 0x00 lvl.0 +>>8 byte&0x03 0x01 lvl.3 +>>8 byte&0x03 0x02 lvl.6 +>>8 byte&0x03 0x03 lvl.9 +#file format 3 +>3 string 3 v.3, OpenPGP S2K, +>>8 byte&0x70 0x00 RIJNDAEL-128 crypt, +>>8 byte&0x70 0x10 SERPENT crypt, +>>8 byte&0x70 0x20 TWOFISH crypt, +>>8 byte&0x70 0x30 CAST-256 crypt, +>>8 byte&0x70 0x40 SAFER+ crypt, +>>8 byte&0x70 0x50 LOKI97 crypt, +>>8 byte&0x70 0x60 3DES crypt, +>>8 byte&0x70 0x70 RIJNDAEL-256 crypt, +>>8 byte&0x08 0x00 SHA1 hash, +>>8 byte&0x08 0x08 RIPEMD-160 hash, +>>8 byte&0x04 0x00 ZLib +>>8 byte&0x04 0x04 BZip2 +>>8 byte&0x03 0x00 lvl.0 +>>8 byte&0x03 0x01 lvl.3 +>>8 byte&0x03 0x02 lvl.6 +>>8 byte&0x03 0x03 lvl.9 +#file format >3 +>3 string >3 v.%.1s (unknown details) + +#------------------------------------------------------------------------------ +# pbm: file(1) magic for Portable Bitmap files +# +# XXX - byte order? +# +0 short 0x2a17 "compact bitmap" format (Poskanzer) + +#------------------------------------------------------------------------------ +# plus5: file(1) magic for Plus Five's UNIX MUMPS +# +# XXX - byte order? Paging Hokey.... +# +0 short 0x259 mumps avl global +>2 byte >0 (V%d) +>6 byte >0 with %d byte name +>7 byte >0 and %d byte data cells +0 short 0x25a mumps blt global +>2 byte >0 (V%d) +>8 short >0 - %d byte blocks +>15 byte 0x00 - P/D format +>15 byte 0x01 - P/K/D format +>15 byte 0x02 - K/D format +>15 byte >0x02 - Bad Flags + +#------------------------------------------------------------------------------ +# vms: file(1) magic for VMS executables (experimental) +# +# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu) + +# GRR 950122: I'm just guessing on these, based on inspection of the headers +# of three executables each for Alpha and VAX architectures. The VAX files +# all had headers similar to this: +# +# 00000 b0 00 30 00 44 00 60 00 00 00 00 00 30 32 30 35 ..0.D.`.....0205 +# 00010 01 01 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 ................ +# +0 string \xb0\0\x30\0 VMS VAX executable +>44032 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption +# +# The AXP files all looked like this, except that the byte at offset 0x22 +# was 06 in some of them and 07 in others: +# +# 00000 03 00 00 00 00 00 00 00 ec 02 00 00 10 01 00 00 ................ +# 00010 68 00 00 00 98 00 00 00 b8 00 00 00 00 00 00 00 h............... +# 00020 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +# 00030 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ +# 00040 00 00 00 00 ff ff ff ff ff ff ff ff 02 00 00 00 ................ +# +0 belong 0x03000000 VMS Alpha executable +>75264 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption + +#------------------------------------------------------------------------------ +# python: file(1) magic for python +# +# From: David Necas +# often the module starts with a multiline string +0 string """ a python script text executable +# MAGIC as specified in Python/import.c (1.5 to 2.3.0a) +# 20121 ( YEAR - 1995 ) + MONTH + DAY (little endian followed by "\r\n" +0 belong 0x994e0d0a python 1.5/1.6 byte-compiled +0 belong 0x87c60d0a python 2.0 byte-compiled +0 belong 0x2aeb0d0a python 2.1 byte-compiled +0 belong 0x2ded0d0a python 2.2 byte-compiled +0 belong 0x3bf20d0a python 2.3 byte-compiled + +#------------------------------------------------------------------------------ +# chord: file(1) magic for Chord music sheet typesetting utility input files +# +# From Philippe De Muyter +# File format is actually free, but many distributed files begin with `{title' +# +0 string {title Chord text file + + +# ---------------------------------------------------------------------------- +# ctags: file (1) magic for Exuberant Ctags files +# From: Alexander Mai +0 string !_TAG Exuberant Ctags tag file text + +#------------------------------------------------------------------------------ +# human68k: file(1) magic for Human68k (X680x0 DOS) binary formats +# Magic too short! +#0 string HU Human68k +#>68 string LZX LZX compressed +#>>72 string >\0 (version %s) +#>(8.L+74) string LZX LZX compressed +#>>(8.L+78) string >\0 (version %s) +#>60 belong >0 binded +#>(8.L+66) string #HUPAIR hupair +#>0 string HU X executable +#>(8.L+74) string #LIBCV1 - linked PD LIBC ver 1 +#>4 belong >0 - base address 0x%x +#>28 belong >0 not stripped +#>32 belong >0 with debug information +#0 beshort 0x601a Human68k Z executable +#0 beshort 0x6000 Human68k object file +#0 belong 0xd1000000 Human68k ar binary archive +#0 belong 0xd1010000 Human68k ar ascii archive +#0 beshort 0x0068 Human68k lib archive +#4 string LZX Human68k LZX compressed +#>8 string >\0 (version %s) +#>4 string LZX R executable +#2 string #HUPAIR Human68k hupair R executable + +#------------------------------------------------------------------------------ +# pdp: file(1) magic for PDP-11 executable/object and APL workspace +# +0 lelong 0101555 PDP-11 single precision APL workspace +0 lelong 0101554 PDP-11 double precision APL workspace +# +# PDP-11 a.out +# +0 leshort 0407 PDP-11 executable +>8 leshort >0 not stripped +>15 byte >0 - version %ld + +0 leshort 0401 PDP-11 UNIX/RT ldp +0 leshort 0405 PDP-11 old overlay + +0 leshort 0410 PDP-11 pure executable +>8 leshort >0 not stripped +>15 byte >0 - version %ld + +0 leshort 0411 PDP-11 separate I&D executable +>8 leshort >0 not stripped +>15 byte >0 - version %ld + +0 leshort 0437 PDP-11 kernel overlay + +# These last three are derived from 2.11BSD file(1) +0 leshort 0413 PDP-11 demand-paged pure executable +>8 leshort >0 not stripped + +0 leshort 0430 PDP-11 overlaid pure executable +>8 leshort >0 not stripped + +0 leshort 0431 PDP-11 overlaid separate executable +>8 leshort >0 not stripped + +#------------------------------------------------------------------------ +# file(1) magic for sharc files +# +# SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by +# FutureGroove Music (dsp@futuregroove.de) + +#------------------------------------------------------------------------ +0 string Draw RiscOS Drawfile +0 string PACK RiscOS PackdDir archive + +#------------------------------------------------------------------------ +# SHARC DSP stuff (based on the FGM SHARC DSP SDK) + +0 string ! Assembler source +0 string Analog ADi asm listing file +0 string .SYSTEM SHARC architecture file +0 string .system SHARC architecture file + +0 leshort 0x521C SHARC COFF binary +>2 leshort >1 , %hd sections +>>12 lelong >0 , not stripped + +#------------------------------------------------------------------------------ +# pulsar: file(1) magic for Pulsar POP3 daemon binary files +# +# http://pulsar.sourceforge.net +# mailto:rok.papez@lugos.si +# + +0 belong 0x1ee7f11e Pulsar POP3 daemon mailbox cache file. +>4 ubelong x Version: %d. +>8 ubelong x \b%d + + +#------------------------------------------------------------------------------ +# apl: file(1) magic for APL (see also "pdp" and "vax" for other APL +# workspaces) +# +0 long 0100554 APL workspace (Ken's original?) + +#---------------------------------------------------------------------------- +# communication + +# TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3. +# It is used for conformance testing of communication protocols. +# Added by W. Borgert . +0 string $Suite TTCN Abstract Test Suite +>&1 string $SuiteId +>>&1 string >\n %s +>&2 string $SuiteId +>>&1 string >\n %s +>&3 string $SuiteId +>>&1 string >\n %s + +# MSC (message sequence charts) are a formal description technique, +# described in ITU-T Z.120, mainly used for communication protocols. +# Added by W. Borgert . +0 string mscdocument Message Sequence Chart (document) +0 string msc Message Sequence Chart (chart) +0 string submsc Message Sequence Chart (subchart) + +#------------------------------------------------------------------------------ +# ncr: file(1) magic for NCR Tower objects +# +# contributed by +# Michael R. Wayne *** TMC & Associates *** INTERNET: wayne@ford-vax.arpa +# uucp: {philabs | pyramid} !fmsrl7!wayne OR wayne@fmsrl7.UUCP +# +0 beshort 000610 Tower/XP rel 2 object +>12 belong >0 not stripped +>20 beshort 0407 executable +>20 beshort 0410 pure executable +>22 beshort >0 - version %ld +0 beshort 000615 Tower/XP rel 2 object +>12 belong >0 not stripped +>20 beshort 0407 executable +>20 beshort 0410 pure executable +>22 beshort >0 - version %ld +0 beshort 000620 Tower/XP rel 3 object +>12 belong >0 not stripped +>20 beshort 0407 executable +>20 beshort 0410 pure executable +>22 beshort >0 - version %ld +0 beshort 000625 Tower/XP rel 3 object +>12 belong >0 not stripped +>20 beshort 0407 executable +>20 beshort 0410 pure executable +>22 beshort >0 - version %ld +0 beshort 000630 Tower32/600/400 68020 object +>12 belong >0 not stripped +>20 beshort 0407 executable +>20 beshort 0410 pure executable +>22 beshort >0 - version %ld +0 beshort 000640 Tower32/800 68020 +>18 beshort &020000 w/68881 object +>18 beshort &040000 compatible object +>18 beshort &~060000 object +>20 beshort 0407 executable +>20 beshort 0413 pure executable +>12 belong >0 not stripped +>22 beshort >0 - version %ld +0 beshort 000645 Tower32/800 68010 +>18 beshort &040000 compatible object +>18 beshort &~060000 object +>20 beshort 0407 executable +>20 beshort 0413 pure executable +>12 belong >0 not stripped +>22 beshort >0 - version %ld +#------------------------------------------------------------------------------ +# alpha architecture description +# + +0 leshort 0603 COFF format alpha +>22 leshort&030000 !020000 executable +>24 leshort 0410 pure +>24 leshort 0413 paged +>22 leshort&020000 !0 dynamically linked +>16 lelong !0 not stripped +>16 lelong 0 stripped +>22 leshort&030000 020000 shared library +>24 leshort 0407 object +>27 byte x - version %d +>26 byte x .%d +>28 byte x -%d + +# Basic recognition of Digital UNIX core dumps - Mike Bremford +# +# The actual magic number is just "Core", followed by a 2-byte version +# number; however, treating any file that begins with "Core" as a Digital +# UNIX core dump file may produce too many false hits, so we include one +# byte of the version number as well; DU 5.0 appears only to be up to +# version 2. +# +0 string Core\001 Alpha COFF format core dump (Digital UNIX) +>24 string >\0 \b, from '%s' +0 string Core\002 Alpha COFF format core dump (Digital UNIX) +>24 string >\0 \b, from '%s' + + +#------------------------------------------------------------------------------ +# asterix: file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character +# strings as "long" - we assume they're just strings: +# From: guy@netapp.com (Guy Harris) +# +0 string *STA Aster*x +>7 string WORD Words Document +>7 string GRAP Graphic +>7 string SPRE Spreadsheet +>7 string MACR Macro +0 string 2278 Aster*x Version 2 +>29 byte 0x36 Words Document +>29 byte 0x35 Graphic +>29 byte 0x32 Spreadsheet +>29 byte 0x38 Macro + +#------------------------------------------------------------------------------ +# blender: file(1) magic for Blender 3D data files +# +# Coded by Guillermo S. Romero using the +# data from Ton Roosendaal . Ton or his company do not +# support the rule, so mail GSR if problems with it. Rule version: 1.1. +# You can get latest version with comments and details about the format +# at http://acd.asoc.euitt.upm.es/~gsromero/3d/blender/magic.blender + +0 string =BLENDER Blender3D, +>7 string =_ saved as 32-bits +>7 string =- saved as 64-bits +>8 string =v little endian +>8 string =V big endian +>9 byte x with version %c. +>10 byte x \b%c +>11 byte x \b%c + +#------------------------------------------------------------------------------ +# sendmail: file(1) magic for sendmail config files +# +# XXX - byte order? +# +0 byte 046 Sendmail frozen configuration +>16 string >\0 - version %s +0 short 0x271c Sendmail frozen configuration +>16 string >\0 - version %s + +#------------------------------------------------------------------------------ +# sendmail: file(1) magic for sendmail m4(1) files +# +# From Hendrik Scholz +# i.e. files in /usr/share/sendmail/cf/ +# +0 string divert(-1)\n sendmail m4 text file + + +#------------------------------------------------------------------------------ +# alliant: file(1) magic for Alliant FX series a.out files +# +# If the FX series is the one that had a processor with a 68K-derived +# instruction set, the "short" should probably become "beshort" and the +# "long" should probably become "belong". +# If it's the i860-based one, they should probably become either the +# big-endian or little-endian versions, depending on the mode they ran +# the 860 in.... +# +0 short 0420 0420 Alliant virtual executable +>2 short &0x0020 common library +>16 long >0 not stripped +0 short 0421 0421 Alliant compact executable +>2 short &0x0020 common library +>16 long >0 not stripped + +#------------------------------------------------------------------------------ +# CDDB: file(1) magic for CDDB(tm) format CD text data files +# +# From +# +# This is the /etc/magic entry to decode datafiles as used by +# CDDB-enabled CD player applications. +# + +0 string/b #\040xmcd CDDB(tm) format CD text data + +#------------------------------------------------------------------------------ +# elf: file(1) magic for ELF executables +# +# We have to check the byte order flag to see what byte order all the +# other stuff in the header is in. +# +# What're the correct byte orders for the nCUBE and the Fujitsu VPP500? +# +# updated by Daniel Quinlan (quinlan@yggdrasil.com) +0 string \177ELF ELF +>4 byte 0 invalid class +>4 byte 1 32-bit +# only for MIPS - in the future, the ABI field of e_flags should be used. +>>18 leshort 8 +>>>36 lelong &0x20 N32 +>>18 leshort 10 +>>>36 lelong &0x20 N32 +>>18 beshort 8 +>>>36 belong &0x20 N32 +>>18 beshort 10 +>>>36 belong &0x20 N32 +>4 byte 2 64-bit +>5 byte 0 invalid byte order +>5 byte 1 LSB +# The official e_machine number for MIPS is now #8, regardless of endianness. +# The second number (#10) will be deprecated later. For now, we still +# say something if #10 is encountered, but only gory details for #8. +>>18 leshort 8 +# only for 32-bit +>>>4 byte 1 +>>>>36 lelong&0xf0000000 0x00000000 MIPS-I +>>>>36 lelong&0xf0000000 0x10000000 MIPS-II +>>>>36 lelong&0xf0000000 0x20000000 MIPS-III +>>>>36 lelong&0xf0000000 0x30000000 MIPS-IV +>>>>36 lelong&0xf0000000 0x40000000 MIPS-V +>>>>36 lelong&0xf0000000 0x60000000 MIPS32 +>>>>36 lelong&0xf0000000 0x70000000 MIPS64 +>>>>36 lelong&0xf0000000 0x80000000 MIPS32 rel2 +>>>>36 lelong&0xf0000000 0x90000000 MIPS64 rel2 +# only for 64-bit +>>>4 byte 2 +>>>>48 lelong&0xf0000000 0x00000000 MIPS-I +>>>>48 lelong&0xf0000000 0x10000000 MIPS-II +>>>>48 lelong&0xf0000000 0x20000000 MIPS-III +>>>>48 lelong&0xf0000000 0x30000000 MIPS-IV +>>>>48 lelong&0xf0000000 0x40000000 MIPS-V +>>>>48 lelong&0xf0000000 0x60000000 MIPS32 +>>>>48 lelong&0xf0000000 0x70000000 MIPS64 +>>>>48 lelong&0xf0000000 0x80000000 MIPS32 rel2 +>>>>48 lelong&0xf0000000 0x90000000 MIPS64 rel2 +>>16 leshort 0 no file type, +>>16 leshort 1 relocatable, +>>16 leshort 2 executable, +>>16 leshort 3 shared object, +# Core handling from Peter Tobias +# corrections by Christian 'Dr. Disk' Hechelmann +>>16 leshort 4 core file +# Core file detection is not reliable. +#>>>(0x38+0xcc) string >\0 of '%s' +#>>>(0x38+0x10) lelong >0 (signal %d), +>>16 leshort &0xff00 processor-specific, +>>18 leshort 0 no machine, +>>18 leshort 1 AT&T WE32100 - invalid byte order, +>>18 leshort 2 SPARC - invalid byte order, +>>18 leshort 3 Intel 80386, +>>18 leshort 4 Motorola +>>>36 lelong &0x01000000 68000 - invalid byte order, +>>>36 lelong &0x00810000 CPU32 - invalid byte order, +>>>36 lelong 0 68020 - invalid byte order, +>>18 leshort 5 Motorola 88000 - invalid byte order, +>>18 leshort 6 Intel 80486, +>>18 leshort 7 Intel 80860, +>>18 leshort 8 MIPS, +>>18 leshort 9 Amdahl - invalid byte order, +>>18 leshort 10 MIPS (deprecated), +>>18 leshort 11 RS6000 - invalid byte order, +>>18 leshort 15 PA-RISC - invalid byte order, +>>>50 leshort 0x0214 2.0 +>>>48 leshort &0x0008 (LP64), +>>18 leshort 16 nCUBE, +>>18 leshort 17 Fujitsu VPP500, +>>18 leshort 18 SPARC32PLUS, +>>18 leshort 20 PowerPC, +>>18 leshort 22 IBM S/390, +>>18 leshort 36 NEC V800, +>>18 leshort 37 Fujitsu FR20, +>>18 leshort 38 TRW RH-32, +>>18 leshort 39 Motorola RCE, +>>18 leshort 40 ARM, +>>18 leshort 41 Alpha, +>>18 leshort 0xa390 IBM S/390 (obsolete), +>>18 leshort 42 Hitachi SH, +>>18 leshort 43 SPARC V9 - invalid byte order, +>>18 leshort 44 Siemens Tricore Embedded Processor, +>>18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc., +>>18 leshort 46 Hitachi H8/300, +>>18 leshort 47 Hitachi H8/300H, +>>18 leshort 48 Hitachi H8S, +>>18 leshort 49 Hitachi H8/500, +>>18 leshort 50 IA-64 (Intel 64 bit architecture) +>>18 leshort 51 Stanford MIPS-X, +>>18 leshort 52 Motorola Coldfire, +>>18 leshort 53 Motorola M68HC12, +>>18 leshort 62 AMD x86-64, +>>18 leshort 75 Digital VAX, +>>18 leshort 88 Renesas M32R, +>>18 leshort 97 NatSemi 32k, +>>18 leshort 0x9026 Alpha (unofficial), +>>20 lelong 0 invalid version +>>20 lelong 1 version 1 +>>36 lelong 1 MathCoPro/FPU/MAU Required +>5 byte 2 MSB +# only for MIPS - see comment in little-endian section above. +>>18 beshort 8 +# only for 32-bit +>>>4 byte 1 +>>>>36 belong&0xf0000000 0x00000000 MIPS-I +>>>>36 belong&0xf0000000 0x10000000 MIPS-II +>>>>36 belong&0xf0000000 0x20000000 MIPS-III +>>>>36 belong&0xf0000000 0x30000000 MIPS-IV +>>>>36 belong&0xf0000000 0x40000000 MIPS-V +>>>>36 belong&0xf0000000 0x60000000 MIPS32 +>>>>36 belong&0xf0000000 0x70000000 MIPS64 +>>>>36 belong&0xf0000000 0x80000000 MIPS32 rel2 +>>>>36 belong&0xf0000000 0x90000000 MIPS64 rel2 +# only for 64-bit +>>>4 byte 2 +>>>>48 belong&0xf0000000 0x00000000 MIPS-I +>>>>48 belong&0xf0000000 0x10000000 MIPS-II +>>>>48 belong&0xf0000000 0x20000000 MIPS-III +>>>>48 belong&0xf0000000 0x30000000 MIPS-IV +>>>>48 belong&0xf0000000 0x40000000 MIPS-V +>>>>48 belong&0xf0000000 0x60000000 MIPS32 +>>>>48 belong&0xf0000000 0x70000000 MIPS64 +>>>>48 belong&0xf0000000 0x80000000 MIPS32 rel2 +>>>>48 belong&0xf0000000 0x90000000 MIPS64 rel2 +>>16 beshort 0 no file type, +>>16 beshort 1 relocatable, +>>16 beshort 2 executable, +>>16 beshort 3 shared object, +>>16 beshort 4 core file, +#>>>(0x38+0xcc) string >\0 of '%s' +#>>>(0x38+0x10) belong >0 (signal %d), +>>16 beshort &0xff00 processor-specific, +>>18 beshort 0 no machine, +>>18 beshort 1 AT&T WE32100, +>>18 beshort 2 SPARC, +>>18 beshort 3 Intel 80386 - invalid byte order, +>>18 beshort 4 Motorola +>>>36 belong &0x01000000 68000, +>>>36 belong &0x00810000 CPU32, +>>>36 belong 0 68020, +>>18 beshort 5 Motorola 88000, +>>18 beshort 6 Intel 80486 - invalid byte order, +>>18 beshort 7 Intel 80860, +>>18 beshort 8 MIPS, +>>18 beshort 9 Amdahl, +>>18 beshort 10 MIPS (deprecated), +>>18 beshort 11 RS6000, +>>18 beshort 15 PA-RISC +>>>50 beshort 0x0214 2.0 +>>>48 beshort &0x0008 (LP64) +>>18 beshort 16 nCUBE, +>>18 beshort 17 Fujitsu VPP500, +>>18 beshort 18 SPARC32PLUS, +>>>36 belong&0xffff00 &0x000100 V8+ Required, +>>>36 belong&0xffff00 &0x000200 Sun UltraSPARC1 Extensions Required, +>>>36 belong&0xffff00 &0x000400 HaL R1 Extensions Required, +>>>36 belong&0xffff00 &0x000800 Sun UltraSPARC3 Extensions Required, +>>18 beshort 20 PowerPC or cisco 4500, +>>18 beshort 21 cisco 7500, +>>18 beshort 22 IBM S/390, +>>18 beshort 24 cisco SVIP, +>>18 beshort 25 cisco 7200, +>>18 beshort 36 NEC V800 or cisco 12000, +>>18 beshort 37 Fujitsu FR20, +>>18 beshort 38 TRW RH-32, +>>18 beshort 39 Motorola RCE, +>>18 beshort 40 ARM, +>>18 beshort 41 Alpha, +>>18 beshort 42 Hitachi SH, +>>18 beshort 43 SPARC V9, +>>18 beshort 44 Siemens Tricore Embedded Processor, +>>18 beshort 45 Argonaut RISC Core, Argonaut Technologies Inc., +>>18 beshort 46 Hitachi H8/300, +>>18 beshort 47 Hitachi H8/300H, +>>18 beshort 48 Hitachi H8S, +>>18 beshort 49 Hitachi H8/500, +>>18 beshort 50 Intel Merced Processor, +>>18 beshort 51 Stanford MIPS-X, +>>18 beshort 52 Motorola Coldfire, +>>18 beshort 53 Motorola M68HC12, +>>18 beshort 73 Cray NV1, +>>18 beshort 75 Digital VAX, +>>18 beshort 88 Renesas M32R, +>>18 beshort 97 NatSemi 32k, +>>18 beshort 0x9026 Alpha (unofficial), +>>18 beshort 0xa390 IBM S/390 (obsolete), +>>20 belong 0 invalid version +>>20 belong 1 version 1 +>>36 belong 1 MathCoPro/FPU/MAU Required +# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed +# like proper ELF, but extracting the string had bad results. +>4 byte <0x80 +>>8 string >\0 (%s) +>8 string \0 +>>7 byte 0 (SYSV) +>>7 byte 1 (HP-UX) +>>7 byte 2 (NetBSD) +>>7 byte 3 (GNU/Linux) +>>7 byte 4 (GNU/Hurd) +>>7 byte 5 (86Open) +>>7 byte 6 (Solaris) +>>7 byte 7 (Monterey) +>>7 byte 8 (IRIX) +>>7 byte 9 (FreeBSD) +>>7 byte 10 (Tru64) +>>7 byte 11 (Novell Modesto) +>>7 byte 12 (OpenBSD) +>>7 byte 97 (ARM) +>>7 byte 255 (embedded) + +#------------------------------------------------------------------------------ +# Epoc 32 : file(1) magic for Epoc Documents [psion/osaris +# Stefan Praszalowicz (hpicollo@worldnet.fr) +#0 lelong 0x10000037 Epoc32 +>4 lelong 0x1000006D +>>8 lelong 0x1000007F Word +>>8 lelong 0x10000088 Sheet +>>8 lelong 0x1000007D Sketch +>>8 lelong 0x10000085 TextEd + +#------------------------------------------------------------------------------ +# ispell: file(1) magic for ispell +# +# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic +# will match 0x9600 through 0x9603 in *both* little endian and big endian. +# (No other current magic entries collide.) +# +# Updated by Daniel Quinlan (quinlan@yggdrasil.com) +# +0 leshort&0xFFFC 0x9600 little endian ispell +>0 byte 0 hash file (?), +>0 byte 1 3.0 hash file, +>0 byte 2 3.1 hash file, +>0 byte 3 hash file (?), +>2 leshort 0x00 8-bit, no capitalization, 26 flags +>2 leshort 0x01 7-bit, no capitalization, 26 flags +>2 leshort 0x02 8-bit, capitalization, 26 flags +>2 leshort 0x03 7-bit, capitalization, 26 flags +>2 leshort 0x04 8-bit, no capitalization, 52 flags +>2 leshort 0x05 7-bit, no capitalization, 52 flags +>2 leshort 0x06 8-bit, capitalization, 52 flags +>2 leshort 0x07 7-bit, capitalization, 52 flags +>2 leshort 0x08 8-bit, no capitalization, 128 flags +>2 leshort 0x09 7-bit, no capitalization, 128 flags +>2 leshort 0x0A 8-bit, capitalization, 128 flags +>2 leshort 0x0B 7-bit, capitalization, 128 flags +>2 leshort 0x0C 8-bit, no capitalization, 256 flags +>2 leshort 0x0D 7-bit, no capitalization, 256 flags +>2 leshort 0x0E 8-bit, capitalization, 256 flags +>2 leshort 0x0F 7-bit, capitalization, 256 flags +>4 leshort >0 and %d string characters +0 beshort&0xFFFC 0x9600 big endian ispell +>1 byte 0 hash file (?), +>1 byte 1 3.0 hash file, +>1 byte 2 3.1 hash file, +>1 byte 3 hash file (?), +>2 beshort 0x00 8-bit, no capitalization, 26 flags +>2 beshort 0x01 7-bit, no capitalization, 26 flags +>2 beshort 0x02 8-bit, capitalization, 26 flags +>2 beshort 0x03 7-bit, capitalization, 26 flags +>2 beshort 0x04 8-bit, no capitalization, 52 flags +>2 beshort 0x05 7-bit, no capitalization, 52 flags +>2 beshort 0x06 8-bit, capitalization, 52 flags +>2 beshort 0x07 7-bit, capitalization, 52 flags +>2 beshort 0x08 8-bit, no capitalization, 128 flags +>2 beshort 0x09 7-bit, no capitalization, 128 flags +>2 beshort 0x0A 8-bit, capitalization, 128 flags +>2 beshort 0x0B 7-bit, capitalization, 128 flags +>2 beshort 0x0C 8-bit, no capitalization, 256 flags +>2 beshort 0x0D 7-bit, no capitalization, 256 flags +>2 beshort 0x0E 8-bit, capitalization, 256 flags +>2 beshort 0x0F 7-bit, capitalization, 256 flags +>4 beshort >0 and %d string characters +# ispell 4.0 hash files kromJx +# Ispell 4.0 +0 string ISPL ispell +>4 long x hash file version %d, +>8 long x lexletters %d, +>12 long x lexsize %d, +>16 long x hashsize %d, +>20 long x stblsize %d + +#------------------------------------------------------------------------------ +# lex: file(1) magic for lex +# +# derived empirically, your offsets may vary! +53 string yyprevious C program text (from lex) +>3 string >\0 for %s +# C program text from GNU flex, from Daniel Quinlan +21 string generated\ by\ flex C program text (from flex) +# lex description file, from Daniel Quinlan +0 string %{ lex description text + +#------------------------------------------------------------------------------ +# mips: file(1) magic for Silicon Graphics (MIPS, IRIS, IRIX, etc.) +# Dec Ultrix (MIPS) +# all of SGI's *current* machines and OSes run in big-endian mode on the +# MIPS machines, as far as I know. +# +# XXX - what is the blank "-" line? +# +# kbd file definitions +0 string kbd!map kbd map file +>8 byte >0 Ver %d: +>10 short >0 with %d table(s) +0 belong 0407 old SGI 68020 executable +0 belong 0410 old SGI 68020 pure executable +0 beshort 0x8765 disk quotas file +0 beshort 0x0506 IRIS Showcase file +>2 byte 0x49 - +>3 byte x - version %ld +0 beshort 0x0226 IRIS Showcase template +>2 byte 0x63 - +>3 byte x - version %ld +0 belong 0x5343464d IRIS Showcase file +>4 byte x - version %ld +0 belong 0x5443464d IRIS Showcase template +>4 byte x - version %ld +0 belong 0xdeadbabe IRIX Parallel Arena +>8 belong >0 - version %ld +# +0 beshort 0x0160 MIPSEB ECOFF executable +>20 beshort 0407 (impure) +>20 beshort 0410 (swapped) +>20 beshort 0413 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>22 byte x - version %ld +>23 byte x .%ld +# +0 beshort 0x0162 MIPSEL-BE ECOFF executable +>20 beshort 0407 (impure) +>20 beshort 0410 (swapped) +>20 beshort 0413 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>23 byte x - version %d +>22 byte x .%ld +# +0 beshort 0x6001 MIPSEB-LE ECOFF executable +>20 beshort 03401 (impure) +>20 beshort 04001 (swapped) +>20 beshort 05401 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>23 byte x - version %d +>22 byte x .%ld +# +0 beshort 0x6201 MIPSEL ECOFF executable +>20 beshort 03401 (impure) +>20 beshort 04001 (swapped) +>20 beshort 05401 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>23 byte x - version %ld +>22 byte x .%ld +# +# MIPS 2 additions +# +0 beshort 0x0163 MIPSEB MIPS-II ECOFF executable +>20 beshort 0407 (impure) +>20 beshort 0410 (swapped) +>20 beshort 0413 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>22 byte x - version %ld +>23 byte x .%ld +# +0 beshort 0x0166 MIPSEL-BE MIPS-II ECOFF executable +>20 beshort 0407 (impure) +>20 beshort 0410 (swapped) +>20 beshort 0413 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>22 byte x - version %ld +>23 byte x .%ld +# +0 beshort 0x6301 MIPSEB-LE MIPS-II ECOFF executable +>20 beshort 03401 (impure) +>20 beshort 04001 (swapped) +>20 beshort 05401 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>23 byte x - version %ld +>22 byte x .%ld +# +0 beshort 0x6601 MIPSEL MIPS-II ECOFF executable +>20 beshort 03401 (impure) +>20 beshort 04001 (swapped) +>20 beshort 05401 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>23 byte x - version %ld +>22 byte x .%ld +# +# MIPS 3 additions +# +0 beshort 0x0140 MIPSEB MIPS-III ECOFF executable +>20 beshort 0407 (impure) +>20 beshort 0410 (swapped) +>20 beshort 0413 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>22 byte x - version %ld +>23 byte x .%ld +# +0 beshort 0x0142 MIPSEL-BE MIPS-III ECOFF executable +>20 beshort 0407 (impure) +>20 beshort 0410 (swapped) +>20 beshort 0413 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>22 byte x - version %ld +>23 byte x .%ld +# +0 beshort 0x4001 MIPSEB-LE MIPS-III ECOFF executable +>20 beshort 03401 (impure) +>20 beshort 04001 (swapped) +>20 beshort 05401 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>23 byte x - version %ld +>22 byte x .%ld +# +0 beshort 0x4201 MIPSEL MIPS-III ECOFF executable +>20 beshort 03401 (impure) +>20 beshort 04001 (swapped) +>20 beshort 05401 (paged) +>8 belong >0 not stripped +>8 belong 0 stripped +>23 byte x - version %ld +>22 byte x .%ld +# +0 beshort 0x180 MIPSEB Ucode +0 beshort 0x182 MIPSEL-BE Ucode +# 32bit core file +0 belong 0xdeadadb0 IRIX core dump +>4 belong 1 of +>16 string >\0 '%s' +# 64bit core file +0 belong 0xdeadad40 IRIX 64-bit core dump +>4 belong 1 of +>16 string >\0 '%s' +# N32bit core file +0 belong 0xbabec0bb IRIX N32 core dump +>4 belong 1 of +>16 string >\0 '%s' +# New style crash dump file +0 string \x43\x72\x73\x68\x44\x75\x6d\x70 IRIX vmcore dump of +>36 string >\0 '%s' +# Trusted IRIX info +0 string SGIAUDIT SGI Audit file +>8 byte x - version %d +>9 byte x .%ld +# +0 string WNGZWZSC Wingz compiled script +0 string WNGZWZSS Wingz spreadsheet +0 string WNGZWZHP Wingz help file +# +0 string \#Inventor V IRIS Inventor 1.0 file +0 string \#Inventor V2 Open Inventor 2.0 file +# GLF is OpenGL stream encoding +0 string glfHeadMagic(); GLF_TEXT +4 belong 0x7d000000 GLF_BINARY_LSB_FIRST +4 belong 0x0000007d GLF_BINARY_MSB_FIRST +# GLS is OpenGL stream encoding; GLS is the successor of GLF +0 string glsBeginGLS( GLS_TEXT +4 belong 0x10000000 GLS_BINARY_LSB_FIRST +4 belong 0x00000010 GLS_BINARY_MSB_FIRST diff --git a/program/lib/rc_mail_mime.inc b/program/lib/rc_mail_mime.inc index 12d80bb..ca4d0bf 100644 --- a/program/lib/rc_mail_mime.inc +++ b/program/lib/rc_mail_mime.inc @@ -25,6 +25,14 @@ require_once('Mail/mime.php'); class rc_mail_mime extends Mail_mime { + /** + * Set build parameters + */ + function setParam($param) + { + if (is_array($param)) + $this->_build_params = array_merge($this->_build_params, $param); + } /** * Adds an image to the list of embedded images. @@ -63,7 +71,7 @@ class rc_mail_mime extends Mail_mime return true; } - + /** * returns the HTML body portion of the message @@ -76,6 +84,22 @@ class rc_mail_mime extends Mail_mime } + /** + * Creates a new mimePart object, using multipart/mixed as + * the initial content-type and returns it during the + * build process. + * + * @return object The multipart/mixed mimePart object + * @access private + */ + function &_addMixedPart() + { + $params['content_type'] = $this->_headers['Content-Type'] ? $this->_headers['Content-Type'] : 'multipart/mixed'; + $ret = new Mail_mimePart('', $params); + return $ret; + } + + /** * Encodes a header as per RFC2047 * @@ -138,7 +162,7 @@ class rc_mail_mime extends Mail_mime // add chunk to output string by regarding the header maxlen $len = strlen($value); - if ($line_len + $len < $maxlen) + if ($i == 0 || $line_len + $len < $maxlen) { $hdr_value .= ($i>0?', ':'') . $value; $line_len += $len + ($i>0?2:0); diff --git a/program/localization/am/labels.inc b/program/localization/am/labels.inc index bad9b70..04d4987 100644 --- a/program/localization/am/labels.inc +++ b/program/localization/am/labels.inc @@ -6,14 +6,14 @@ | language/am/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Vahan Yerkanian | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 584 2007-05-24 03:49:19Z estadtherr $ + @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $ */ @@ -75,6 +75,7 @@ $labels['replytomessage'] = 'Պատասխանել Õ¶Õ¡Õ´Õ¡Õ¯Õ«Õ¶'; $labels['replytoallmessage'] = 'Պատասխանել բոլորին'; $labels['forwardmessage'] = 'Փոխանցել Õ¶Õ¡Õ´Õ¡Õ¯Õ¨'; $labels['deletemessage'] = 'Ջնջել Õ¶Õ¡Õ´Õ¡Õ¯Õ¨'; +$labels['movemessagetotrash'] = 'Գցել աղբարկղը'; $labels['printmessage'] = 'Տպել'; $labels['previousmessage'] = 'Ցուցադրել նախորդ Õ¶Õ¡Õ´Õ¡Õ¯Õ¨'; $labels['previousmessages'] = 'Ցուցադրել նախորդ նամակները'; @@ -86,6 +87,9 @@ $labels['lastmessage'] = 'Ցուցադրել վերջին Õ¶Õ¡Õ´Õ¡Õ¯Õ¨'; $labels['lastmessages'] = 'Ցուցադրել վերջին Õ§Õ»Õ¨'; $labels['backtolist'] = 'Վերադառնալ նամակների ցուցակ'; $labels['viewsource'] = 'Ցուցադրել Õ¶Õ¡Õ´Õ¡Õ¯Õ« Õ¯Õ¸Õ¤Õ¨'; +$labels['markmessages'] = 'Նշել նամակները'; +$labels['markread'] = 'որպես կարդացած'; +$labels['markunread'] = 'որպես չկարդացած'; $labels['select'] = 'Նշել'; $labels['all'] = 'Բոլորը'; $labels['none'] = 'Չնշել'; @@ -99,8 +103,8 @@ $labels['unlimited'] = 'անսահմանափակ'; $labels['quicksearch'] = 'Արագ որոնում'; $labels['resetsearch'] = 'Վերսկսել որոնումը'; $labels['compose'] = 'Գրել Õ¶Õ¡Õ´Õ¡Õ¯'; -$labels['sendmessage'] = 'Ուղարկել'; $labels['savemessage'] = 'Հիշել որպես սևագիր'; +$labels['sendmessage'] = 'Ուղարկել'; $labels['addattachment'] = 'Կցել ֆայլ'; $labels['charset'] = 'Տառաշար'; $labels['editortype'] = 'Խմբագրի Õ¿Õ«ÕºÕ¨'; @@ -120,6 +124,13 @@ $labels['nosubject'] = '(առանց վերնագրի)'; $labels['showimages'] = 'Ցուցադրել նկարները'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Պարզ տեքստ'; +$labels['addcc'] = 'Ավելացնել Cc'; +$labels['addbcc'] = 'Ավելացնել Bcc'; +$labels['addreplyto'] = 'Ավելացնել Reply-To'; +$labels['mdnrequest'] = 'Նամակի Õ°Õ¥Õ²Õ«Õ¶Õ¡Õ¯Õ¨ խնդրել Õ§ Õ¶Õ¡Õ´Õ¡Õ¯Õ¨ կարդալուն ÕºÕ¥Õ½ տեղեկացնել իրեն։ Ցանկանում էք Տեղեկացնե՞լ։'; +$labels['receiptread'] = 'Նամակի ընթերցման ծանուցագիր'; +$labels['yourmessage'] = 'Սա Ձեր Õ¶Õ¡Õ´Õ¡Õ¯Õ« ընթերցման ծանուցագիրն Õ§'; +$labels['receiptnote'] = 'Նշում՝ Ô±ÕµÕ½ ծանուցագիրը Õ¨Õ¶Õ¤Õ¡Õ´Õ¥Õ¶Õ¨ տեղեկացնում Õ§, որ Õ¶Õ¡Õ´Õ¡Õ¯Õ¨ ցուցադրվել Õ§ հասցեատիրոջ համակարչով։ Չկա որևիցե երաշխիք, որ հասցեատերը Õ«Õ½Õ¯Õ¡ÕºÕ¥Õ½ կարդացել Õ§ նամակը։'; $labels['name'] = 'Մականուն'; $labels['firstname'] = 'Անուն'; $labels['surname'] = 'Ազգանուն'; @@ -167,6 +178,7 @@ $labels['folder'] = 'Դարակ'; $labels['folders'] = 'Դարակներ'; $labels['foldername'] = 'Դարակի անուն'; $labels['subscribed'] = 'Բաժանորդագրված'; +$labels['messagecount'] = 'Նամակներ'; $labels['create'] = 'Ստեղծել'; $labels['createfolder'] = 'Բացել նոր դարակ'; $labels['rename'] = 'Վերանվանել'; diff --git a/program/localization/am/messages.inc b/program/localization/am/messages.inc index f257d87..af16e8f 100644 --- a/program/localization/am/messages.inc +++ b/program/localization/am/messages.inc @@ -6,14 +6,14 @@ | language/am/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Vahan Yerkanian | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 584 2007-05-24 03:49:19Z estadtherr $ + @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $ */ @@ -73,5 +73,10 @@ $messages['copysuccess'] = '$nr հասցեների կրկնօրինակումը $messages['copyerror'] = 'Հասցեների կրկնօրինակումը ձախողվեց'; $messages['sourceisreadonly'] = 'Ô±ÕµÕ½ հասցեն ÕºÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® Õ§'; $messages['errorsavingcontact'] = 'Հասցեի գրանցումն ձախողվեց'; +$messages['movingmessage'] = 'Նամակը տեղափոխվում է…'; +$messages['receiptsent'] = 'Նամակի ընթերցման ծանուցագիրն ուղարկված Õ§'; +$messages['errorsendingreceipt'] = 'Ծանուցագրի ուղարկումը ձախողվեց'; +$messages['nodeletelastidentity'] = 'Անհնար Õ§ Õ»Õ¶Õ»Õ¥Õ¬ վերջին տարբերակը'; +$messages['addsubfolderhint'] = 'Ô±ÕµÕ½ դարակը Õ¯Õ½Õ¿Õ¥Õ²Õ®Õ¾Õ« որպես Õ¶Õ·Õ¾Õ¡Õ®Õ« ենթադարակ'; ?> \ No newline at end of file diff --git a/program/localization/ar/labels.inc b/program/localization/ar/labels.inc index ca24f67..984aca7 100644 --- a/program/localization/ar/labels.inc +++ b/program/localization/ar/labels.inc @@ -6,14 +6,14 @@ | language/ar/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Ossama Khayat | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $ */ @@ -75,6 +75,7 @@ $labels['replytomessage'] = 'الرد على الرسالة'; $labels['replytoallmessage'] = 'الرد على المرسل وجميع مستقبلي الرسالة'; $labels['forwardmessage'] = 'تمرير الرسالة'; $labels['deletemessage'] = 'حذف الرسالة إلى المهملات'; +$labels['movemessagetotrash'] = 'انقل الرسالة إلى سلة المهملات'; $labels['printmessage'] = 'طباعة هذه الرسالة'; $labels['previousmessage'] = 'عرض الرسالة السابقة'; $labels['previousmessages'] = 'عرض المجموعة السابقة من الرسائل'; @@ -86,6 +87,9 @@ $labels['lastmessage'] = 'عرض الرسالة الأخيرة'; $labels['lastmessages'] = 'عرض مجموعة الرسائل الأخيرة'; $labels['backtolist'] = 'العودة إلى لائحة الرسائل'; $labels['viewsource'] = 'إظهار المصدر'; +$labels['markmessages'] = 'وسم الرسالة'; +$labels['markread'] = 'كمقروءة'; +$labels['markunread'] = 'كغير مقروءة'; $labels['select'] = 'تحديد'; $labels['all'] = 'الكل'; $labels['none'] = 'لا شيء'; @@ -99,8 +103,8 @@ $labels['unlimited'] = 'غير محدود'; $labels['quicksearch'] = 'البحث السريع'; $labels['resetsearch'] = 'استعادة البحث للافتراضي'; $labels['compose'] = 'إنشاء رسالة'; -$labels['sendmessage'] = 'إرسال الرسالة الآن'; $labels['savemessage'] = 'حفظ هذه المسودة'; +$labels['sendmessage'] = 'إرسال الرسالة الآن'; $labels['addattachment'] = 'إرفاق ملف'; $labels['charset'] = 'مجموعة المحارف'; $labels['editortype'] = 'نوع المُحرّر'; @@ -120,6 +124,13 @@ $labels['nosubject'] = '(دون موضوع)'; $labels['showimages'] = 'إظهار الصور'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'نص مجرد'; +$labels['addcc'] = 'أضف CC'; +$labels['addbcc'] = 'أضف BCC'; +$labels['addreplyto'] = 'أضيف Reply-To'; +$labels['mdnrequest'] = 'طلب المرسل إعلامه عند قراءتك لرسالته. هل تود إعلام المرسل؟'; +$labels['receiptread'] = 'إيصال الاستلام )بالقراءة)'; +$labels['yourmessage'] = 'هذا إيصال بقراءة رسالتك'; +$labels['receiptnote'] = 'ملاحظة: يُعلمك هذا الإيصال بأن رسالتك قد ظهرت على جهاز المستقبِل. ليست هناك أية ضمانات أن المستقبل قد قرأ أو فهم محتويات الرسالة.'; $labels['name'] = 'اسم العرض'; $labels['firstname'] = 'الإسم الأول'; $labels['surname'] = 'الإسم الأخير'; @@ -167,6 +178,7 @@ $labels['folder'] = 'مجلد'; $labels['folders'] = 'مجلدات'; $labels['foldername'] = 'اسم المجلد'; $labels['subscribed'] = 'مشترك'; +$labels['messagecount'] = 'الرسائل'; $labels['create'] = 'إنشاء'; $labels['createfolder'] = 'إنشاء مجلد جديد'; $labels['rename'] = 'إعادة التسمية'; diff --git a/program/localization/ar/messages.inc b/program/localization/ar/messages.inc index f948896..68b36a9 100644 --- a/program/localization/ar/messages.inc +++ b/program/localization/ar/messages.inc @@ -6,14 +6,14 @@ | language/ar/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Ossama Khayat | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $ */ @@ -73,5 +73,10 @@ $messages['copysuccess'] = 'تم نسخ $nr رسائل بنجاح'; $messages['copyerror'] = 'لم يمكن نسخ أية عناوين'; $messages['sourceisreadonly'] = 'لا يمكن تعديل مصدر العنوان هذا'; $messages['errorsavingcontact'] = 'تعذر حفظ عنوان المراسل'; +$messages['movingmessage'] = 'جاري نقل الرسالة...'; +$messages['receiptsent'] = 'أرسل إيصال الاستلام بنجاح'; +$messages['errorsendingreceipt'] = 'تعذر إرسال إيصال الاستلام'; +$messages['nodeletelastidentity'] = 'لا يمكن حذف هذا السجل حيث أنه الوحيد المتبقي.'; +$messages['addsubfolderhint'] = 'سيتم إنشاء هذا المجلد كمجلد فرعي للمحدد.'; ?> \ No newline at end of file diff --git a/program/localization/bg/labels.inc b/program/localization/bg/labels.inc index 0899121..16c8428 100644 --- a/program/localization/bg/labels.inc +++ b/program/localization/bg/labels.inc @@ -1,180 +1,192 @@ - | - +-----------------------------------------------------------------------+ - - @version $Id$ - -*/ - -$labels = array(); -$labels['welcome'] = 'Добре дошли в $product'; -$labels['username'] = 'Потребител'; -$labels['password'] = 'Парола'; -$labels['server'] = 'Сървър'; -$labels['login'] = 'Вход'; -$labels['logout'] = 'Изход'; -$labels['mail'] = 'Кутия'; -$labels['settings'] = 'Настройки'; -$labels['addressbook'] = 'Адреси'; -$labels['inbox'] = 'Входящи'; -$labels['drafts'] = 'Чернови'; -$labels['sent'] = 'Изпратени'; -$labels['trash'] = 'Кошче'; -$labels['junk'] = 'Спам'; -$labels['subject'] = 'Заглавие'; -$labels['from'] = 'От'; -$labels['to'] = 'Получател'; -$labels['cc'] = 'Копие до'; -$labels['bcc'] = 'Скрито копие до'; -$labels['replyto'] = 'Отговор на'; -$labels['date'] = 'Дата'; -$labels['size'] = 'Размер'; -$labels['priority'] = 'Приоритет'; -$labels['organization'] = 'Организация'; -$labels['reply-to'] = 'Отговор на'; -$labels['mailboxlist'] = 'Папки'; -$labels['messagesfromto'] = 'Съобщения $from до $to от $count'; -$labels['messagenrof'] = 'Съобщение $nr от $count'; -$labels['moveto'] = 'премести в...'; -$labels['download'] = 'изтегли'; -$labels['filename'] = 'Име на файла'; -$labels['filesize'] = 'Размер на файла'; -$labels['preferhtml'] = 'Показвай първо HTML версия'; -$labels['htmlmessage'] = 'HTML съобщение'; -$labels['prettydate'] = 'Кратки дати'; -$labels['addtoaddressbook'] = 'Добави в адресната книга'; -$labels['sun'] = 'Нед'; -$labels['mon'] = 'Пон'; -$labels['tue'] = 'Вто'; -$labels['wed'] = 'Сря'; -$labels['thu'] = 'Чет'; -$labels['fri'] = 'Пет'; -$labels['sat'] = 'Съб'; -$labels['sunday'] = 'Неделя'; -$labels['monday'] = 'Понеделник'; -$labels['tuesday'] = 'Вторник'; -$labels['wednesday'] = 'Сряда'; -$labels['thursday'] = 'Четвъртък'; -$labels['friday'] = 'Петък'; -$labels['saturday'] = 'Събота'; -$labels['today'] = 'Днес'; -$labels['checkmail'] = 'Провери за нови писма'; -$labels['writenewmessage'] = 'Създай ново писмо'; -$labels['replytomessage'] = 'Отговори на писмото'; -$labels['replytoallmessage'] = 'Отговори до всички получатели'; -$labels['forwardmessage'] = 'Препрати писмото'; -$labels['deletemessage'] = 'Премести писмото в кошчето'; -$labels['printmessage'] = 'Разпечатай писмото'; -$labels['previousmessage'] = 'Предно писмо'; -$labels['previousmessages'] = 'Предна страница'; -$labels['firstmessage'] = 'Първо писмо'; -$labels['firstmessages'] = 'Първа страница'; -$labels['nextmessage'] = 'Следващо писмо'; -$labels['nextmessages'] = 'Следваща страница'; -$labels['lastmessage'] = 'Последно писмо'; -$labels['lastmessages'] = 'Последна страница'; -$labels['backtolist'] = 'Обратно към списъка'; -$labels['viewsource'] = 'Виж кода'; -$labels['select'] = 'Избери'; -$labels['all'] = 'Всички'; -$labels['none'] = 'Нищо'; -$labels['unread'] = 'Нови'; -$labels['compact'] = 'Свий'; -$labels['empty'] = 'Изпразни'; -$labels['purge'] = 'Изчисти'; -$labels['quota'] = 'Използвано място'; -$labels['unknown'] = 'няма информация'; -$labels['unlimited'] = 'няма ограничение'; -$labels['quicksearch'] = 'Бързо търсене'; -$labels['resetsearch'] = 'Изчисти търсенето и покажи всички писма'; -$labels['compose'] = 'Ново писмо'; -$labels['sendmessage'] = 'Изпрати писмото'; -$labels['savemessage'] = 'Запиши в Чернови'; -$labels['addattachment'] = 'Прикачи файл'; -$labels['charset'] = 'Charset'; -$labels['editortype'] = 'Вид редактор'; -$labels['returnreceipt'] = 'Обратна разписка'; -$labels['checkspelling'] = 'Проверка на правописа'; -$labels['resumeediting'] = 'Продължи черновата'; -$labels['revertto'] = 'Върни се към'; -$labels['attachments'] = 'Прикачени файлове'; -$labels['upload'] = 'Качи'; -$labels['close'] = 'Затвори'; -$labels['low'] = '**'; -$labels['lowest'] = '*'; -$labels['normal'] = '***'; -$labels['high'] = '****'; -$labels['highest'] = '*****'; -$labels['nosubject'] = '(няма заглавие)'; -$labels['showimages'] = 'Виж изображенията'; -$labels['htmltoggle'] = 'HTML'; -$labels['plaintoggle'] = 'тесктов'; -$labels['name'] = 'Прякор'; -$labels['firstname'] = 'Име'; -$labels['surname'] = 'Фамилия'; -$labels['email'] = 'E-Mail'; -$labels['addcontact'] = 'Добави'; -$labels['editcontact'] = 'Редактирай'; -$labels['edit'] = 'Редактирай'; -$labels['cancel'] = 'Отказ'; -$labels['save'] = 'Запиши'; -$labels['delete'] = 'Изтрии'; -$labels['newcontact'] = 'Нов контакт'; -$labels['deletecontact'] = 'Изтрии маркираните контакти'; -$labels['composeto'] = 'Напиши писмо до'; -$labels['contactsfromto'] = 'Контакти $from до $to от $count'; -$labels['print'] = 'Разпечатай'; -$labels['export'] = 'Експорт'; -$labels['previouspage'] = 'Предна страница'; -$labels['firstpage'] = 'Първа страница'; -$labels['nextpage'] = 'Следваща страница'; -$labels['lastpage'] = 'Последна страница'; -$labels['groups'] = 'Групи'; -$labels['personaladrbook'] = 'Лични адреси'; -$labels['settingsfor'] = 'Настройки за'; -$labels['preferences'] = 'Настройки'; -$labels['userpreferences'] = 'Потребителски настройки'; -$labels['editpreferences'] = 'Редактирай потребителските настройки'; -$labels['identities'] = 'Самоличност'; -$labels['manageidentities'] = 'Промяна на самоличностите за този акаунт'; -$labels['newidentity'] = 'Нова самоличност'; -$labels['newitem'] = 'Нова самоличност'; -$labels['edititem'] = 'Редактиране на самоличност'; -$labels['setdefault'] = 'По подразбиране'; -$labels['language'] = 'Език'; -$labels['timezone'] = 'Часова зона'; -$labels['pagesize'] = 'Редове на страница'; -$labels['signature'] = 'Подпис'; -$labels['dstactive'] = 'Маркирай при лятно време'; -$labels['htmleditor'] = 'Писане на HTML съобщения'; -$labels['htmlsignature'] = 'HTML подпис'; -$labels['previewpane'] = 'Панел за преглед'; -$labels['autosavedraft'] = 'Автоматично записвай чернова'; -$labels['everynminutes'] = 'всеки $n минути'; -$labels['never'] = 'никога'; -$labels['folder'] = 'Папка'; -$labels['folders'] = 'Папки'; -$labels['foldername'] = 'Име на папката'; -$labels['subscribed'] = 'Използвай'; -$labels['create'] = 'Създай'; -$labels['createfolder'] = 'Направи нова папка'; -$labels['rename'] = 'Преименувай'; -$labels['renamefolder'] = 'Преименувай папката'; -$labels['deletefolder'] = 'Изтрий'; -$labels['managefolders'] = 'Настройки на папките'; -$labels['sortby'] = 'Сортирай по'; -$labels['sortasc'] = 'Сортирай възходящо'; -$labels['sortdesc'] = 'Сортирай низходящо'; - + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$labels = array(); +$labels['welcome'] = 'Добре дошли в $product'; +$labels['username'] = 'Потребител'; +$labels['password'] = 'Парола'; +$labels['server'] = 'Сървър'; +$labels['login'] = 'Вход'; +$labels['logout'] = 'Изход'; +$labels['mail'] = 'Кутия'; +$labels['settings'] = 'Настройки'; +$labels['addressbook'] = 'Адреси'; +$labels['inbox'] = 'Входящи'; +$labels['drafts'] = 'Чернови'; +$labels['sent'] = 'Изпратени'; +$labels['trash'] = 'Кошче'; +$labels['junk'] = 'Спам'; +$labels['subject'] = 'Заглавие'; +$labels['from'] = 'От'; +$labels['to'] = 'Получател'; +$labels['cc'] = 'Копие до'; +$labels['bcc'] = 'Скрито копие до'; +$labels['replyto'] = 'Отговор на'; +$labels['date'] = 'Дата'; +$labels['size'] = 'Размер'; +$labels['priority'] = 'Приоритет'; +$labels['organization'] = 'Организация'; +$labels['reply-to'] = 'Отговор на'; +$labels['mailboxlist'] = 'Папки'; +$labels['messagesfromto'] = 'Съобщения $from до $to от $count'; +$labels['messagenrof'] = 'Съобщение $nr от $count'; +$labels['moveto'] = 'премести в...'; +$labels['download'] = 'изтегли'; +$labels['filename'] = 'Име на файла'; +$labels['filesize'] = 'Размер на файла'; +$labels['preferhtml'] = 'Показвай първо HTML версия'; +$labels['htmlmessage'] = 'HTML съобщение'; +$labels['prettydate'] = 'Кратки дати'; +$labels['addtoaddressbook'] = 'Добави в адресната книга'; +$labels['sun'] = 'Нед'; +$labels['mon'] = 'Пон'; +$labels['tue'] = 'Вто'; +$labels['wed'] = 'Сря'; +$labels['thu'] = 'Чет'; +$labels['fri'] = 'Пет'; +$labels['sat'] = 'Съб'; +$labels['sunday'] = 'Неделя'; +$labels['monday'] = 'Понеделник'; +$labels['tuesday'] = 'Вторник'; +$labels['wednesday'] = 'Сряда'; +$labels['thursday'] = 'Четвъртък'; +$labels['friday'] = 'Петък'; +$labels['saturday'] = 'Събота'; +$labels['today'] = 'Днес'; +$labels['checkmail'] = 'Провери за нови писма'; +$labels['writenewmessage'] = 'Създай ново писмо'; +$labels['replytomessage'] = 'Отговори на писмото'; +$labels['replytoallmessage'] = 'Отговори до всички получатели'; +$labels['forwardmessage'] = 'Препрати писмото'; +$labels['deletemessage'] = 'Изтрий писмото'; +$labels['movemessagetotrash'] = 'Премести писмото в кошчето'; +$labels['printmessage'] = 'Разпечатай писмото'; +$labels['previousmessage'] = 'Предно писмо'; +$labels['previousmessages'] = 'Предна страница'; +$labels['firstmessage'] = 'Първо писмо'; +$labels['firstmessages'] = 'Първа страница'; +$labels['nextmessage'] = 'Следващо писмо'; +$labels['nextmessages'] = 'Следваща страница'; +$labels['lastmessage'] = 'Последно писмо'; +$labels['lastmessages'] = 'Последна страница'; +$labels['backtolist'] = 'Обратно към списъка'; +$labels['viewsource'] = 'Виж кода'; +$labels['markmessages'] = 'Маркирай писмата'; +$labels['markread'] = 'Като прочетени'; +$labels['markunread'] = 'Като нови'; +$labels['select'] = 'Избери'; +$labels['all'] = 'Всички'; +$labels['none'] = 'Нищо'; +$labels['unread'] = 'Нови'; +$labels['compact'] = 'Свий'; +$labels['empty'] = 'Изпразни'; +$labels['purge'] = 'Изчисти'; +$labels['quota'] = 'Използвано място'; +$labels['unknown'] = 'няма информация'; +$labels['unlimited'] = 'няма ограничение'; +$labels['quicksearch'] = 'Бързо търсене'; +$labels['resetsearch'] = 'Изчисти търсенето и покажи всички писма'; +$labels['compose'] = 'Ново писмо'; +$labels['savemessage'] = 'Запиши в Чернови'; +$labels['sendmessage'] = 'Изпрати писмото'; +$labels['addattachment'] = 'Прикачи файл'; +$labels['charset'] = 'Кодировка'; +$labels['editortype'] = 'Вид редактор'; +$labels['returnreceipt'] = 'Обратна разписка'; +$labels['checkspelling'] = 'Провери правописа'; +$labels['resumeediting'] = 'Продължи черновата'; +$labels['revertto'] = 'Върни се към'; +$labels['attachments'] = 'Прикачени файлове'; +$labels['upload'] = 'Качи'; +$labels['close'] = 'Затвори'; +$labels['low'] = '**'; +$labels['lowest'] = '*'; +$labels['normal'] = '***'; +$labels['high'] = '****'; +$labels['highest'] = '*****'; +$labels['nosubject'] = '(няма заглавие)'; +$labels['showimages'] = 'Виж изображенията'; +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'текстов'; +$labels['addcc'] = 'Копие до'; +$labels['addbcc'] = 'Скрито копие до'; +$labels['addreplyto'] = 'Отговор на'; +$labels['mdnrequest'] = 'Подателят на писмото е пожелал да бъде уведомен, че сте го прочели. Желаете ли да изпратите обратна разписка?'; +$labels['receiptread'] = 'Обратна разписка (прочетено)'; +$labels['yourmessage'] = 'Това е обратна разписка за писмото Ви'; +$labels['receiptnote'] = 'Забележка: Тази разписка потвърждава само, че писмото е било показано на компютъра на получателят. Няма никаква гаранция, че получателят е прочел и/или разбрал съдържанието на писмото.'; +$labels['name'] = 'Кратко име'; +$labels['firstname'] = 'Име'; +$labels['surname'] = 'Фамилия'; +$labels['email'] = 'E-Mail'; +$labels['addcontact'] = 'Добави'; +$labels['editcontact'] = 'Редактирай'; +$labels['edit'] = 'Редактирай'; +$labels['cancel'] = 'Отказ'; +$labels['save'] = 'Запиши'; +$labels['delete'] = 'Изтрий'; +$labels['newcontact'] = 'Нов контакт'; +$labels['deletecontact'] = 'Изтрий маркираните контакти'; +$labels['composeto'] = 'Напиши писмо до'; +$labels['contactsfromto'] = 'Контакти $from до $to от $count'; +$labels['print'] = 'Разпечатай'; +$labels['export'] = 'Експортиране'; +$labels['previouspage'] = 'Предна страница'; +$labels['firstpage'] = 'Първа страница'; +$labels['nextpage'] = 'Следваща страница'; +$labels['lastpage'] = 'Последна страница'; +$labels['groups'] = 'Групи'; +$labels['personaladrbook'] = 'Лични адреси'; +$labels['settingsfor'] = 'Настройки за'; +$labels['preferences'] = 'Настройки'; +$labels['userpreferences'] = 'Потребителски настройки'; +$labels['editpreferences'] = 'Редактирай потребителските настройки'; +$labels['identities'] = 'Самоличност'; +$labels['manageidentities'] = 'Промяна на самоличностите за този акаунт'; +$labels['newidentity'] = 'Нова самоличност'; +$labels['newitem'] = 'Нова самоличност'; +$labels['edititem'] = 'Редактиране на самоличност'; +$labels['setdefault'] = 'По подразбиране'; +$labels['language'] = 'Език'; +$labels['timezone'] = 'Часова зона'; +$labels['pagesize'] = 'Редове на страница'; +$labels['signature'] = 'Подпис'; +$labels['dstactive'] = 'Маркирай при лятно време'; +$labels['htmleditor'] = 'Писане на HTML съобщения'; +$labels['htmlsignature'] = 'HTML подпис'; +$labels['previewpane'] = 'Панел за преглед'; +$labels['autosavedraft'] = 'Автоматично записвай чернова'; +$labels['everynminutes'] = 'всеки $n минути'; +$labels['never'] = 'никога'; +$labels['folder'] = 'Папка'; +$labels['folders'] = 'Папки'; +$labels['foldername'] = 'Име на папката'; +$labels['subscribed'] = 'Използвай'; +$labels['messagecount'] = 'Писма'; +$labels['create'] = 'Създай'; +$labels['createfolder'] = 'Направи нова папка'; +$labels['rename'] = 'Преименувай'; +$labels['renamefolder'] = 'Преименувай папката'; +$labels['deletefolder'] = 'Изтрий'; +$labels['managefolders'] = 'Настройки на папките'; +$labels['sortby'] = 'Сортирай по'; +$labels['sortasc'] = 'Сортирай възходящо'; +$labels['sortdesc'] = 'Сортирай низходящо'; + ?> \ No newline at end of file diff --git a/program/localization/bg/messages.inc b/program/localization/bg/messages.inc index bcdf61e..75d1904 100644 --- a/program/localization/bg/messages.inc +++ b/program/localization/bg/messages.inc @@ -1,77 +1,82 @@ - | - +-----------------------------------------------------------------------+ - - @version $Id$ - -*/ - -$messages = array(); -$messages['loginfailed'] = 'Вход неуспешен'; -$messages['cookiesdisabled'] = 'Вашия браузър не приема cookies'; -$messages['sessionerror'] = 'Невалидна или изтекла сесия'; -$messages['imaperror'] = 'Свързване към IMAP сървъра е неуспешно'; -$messages['nomessagesfound'] = 'Няма съобщения'; -$messages['loggedout'] = 'Довиждане!'; -$messages['mailboxempty'] = 'Папката е празна'; -$messages['loading'] = 'Зареждане...'; -$messages['loadingdata'] = 'Зареждане на данни...'; -$messages['checkingmail'] = 'Проверка за нови писма...'; -$messages['sendingmessage'] = 'Изпращане на писмото...'; -$messages['messagesent'] = 'Писмото е изпратено успешно'; -$messages['savingmessage'] = 'Записване на писмото...'; -$messages['messagesaved'] = 'Писмото е записано в Чернови'; -$messages['successfullysaved'] = 'Записано'; -$messages['addedsuccessfully'] = 'Контакта е добавен в адресната книга'; -$messages['contactexists'] = 'Контакт с този e-mail адрес вече същестува'; -$messages['blockedimages'] = 'С оглед на Вашата сигурност, изображенията в това писмо са блокирани .'; -$messages['encryptedmessage'] = 'Това е кодирано писмо и не може да бъде показано. Съжаляваме!'; -$messages['nocontactsfound'] = 'Няма контакти'; -$messages['contactnotfound'] = 'Исканият контакт не е намерен'; -$messages['sendingfailed'] = 'Изпращането неуспешно'; -$messages['errorsaving'] = 'Възникна грешка при записването'; -$messages['errormoving'] = 'Писмото не може да бъде преместено'; -$messages['errordeleting'] = 'Писмото не може да бъде изтрито'; -$messages['deletecontactconfirm'] = 'Искате ли да изтриете маркираните контакти?'; -$messages['deletemessagesconfirm'] = 'Искате ли да изтриете маркираните съобщения?'; -$messages['deletefolderconfirm'] = 'Искате ли да изтриете тази папка?'; -$messages['purgefolderconfirm'] = 'Искате ли да изтриете всички писма в тази папка?'; -$messages['formincomplete'] = 'Не сте попълнили всички полета'; -$messages['noemailwarning'] = 'Моля въведете валиден e-mail адрес'; -$messages['nonamewarning'] = 'Моля въведете име'; -$messages['nopagesizewarning'] = 'Въведете брой редове на страница'; -$messages['norecipientwarning'] = 'Въведете поне един получател'; -$messages['nosubjectwarning'] = 'Полето "Заглавие" е празно. Искате ли да въведете ново заглавие?'; -$messages['nobodywarning'] = 'Изпрати това писмо без текст?'; -$messages['notsentwarning'] = 'Писмото не е изпратено. Искате ли да бъде унищожено?'; -$messages['noldapserver'] = 'Изберете LDAP сървър за търсене'; -$messages['nocontactsreturned'] = 'Не са намерени контакти'; -$messages['nosearchname'] = 'Моля въведете Име на контакта или e-mail адрес'; -$messages['searchsuccessful'] = '$nr намерени писма'; -$messages['searchnomatch'] = 'Търсенето не откри съвпадения'; -$messages['searching'] = 'Търсене...'; -$messages['checking'] = 'Проверка...'; -$messages['nospellerrors'] = 'Не са открити правописни грешки'; -$messages['folderdeleted'] = 'Папката е изтрита'; -$messages['deletedsuccessfully'] = 'Изтриването е успешно'; -$messages['converting'] = 'Премахване форматирането на писмото...'; -$messages['messageopenerror'] = 'Писмото не може да бъде заредено от сървъра'; -$messages['fileuploaderror'] = 'Грешка при прикачването на файла'; -$messages['filesizeerror'] = 'Прикаченият файл надвишава лимита от $size'; -$messages['copysuccess'] = 'Успешно копирани $nr адреса'; -$messages['copyerror'] = 'Грешка при копирането на адресите'; -$messages['sourceisreadonly'] = 'Този източник на адреси е само за четене'; -$messages['errorsavingcontact'] = 'Грешка при записването на адреса'; - + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'Вход неуспешен'; +$messages['cookiesdisabled'] = 'Вашият браузър не приема cookies'; +$messages['sessionerror'] = 'Невалидна или изтекла сесия'; +$messages['imaperror'] = 'Неуспешно свързване към IMAP сървъра'; +$messages['nomessagesfound'] = 'Няма съобщения'; +$messages['loggedout'] = 'Довиждане!'; +$messages['mailboxempty'] = 'Папката е празна'; +$messages['loading'] = 'Зареждане...'; +$messages['loadingdata'] = 'Зареждане на данни...'; +$messages['checkingmail'] = 'Проверка за нови писма...'; +$messages['sendingmessage'] = 'Изпращане на писмото...'; +$messages['messagesent'] = 'Писмото е изпратено успешно'; +$messages['savingmessage'] = 'Записване на писмото...'; +$messages['messagesaved'] = 'Писмото е записано в Чернови'; +$messages['successfullysaved'] = 'Записано'; +$messages['addedsuccessfully'] = 'Контакта е добавен в адресната книга'; +$messages['contactexists'] = 'Контакт с този e-mail адрес вече същестува'; +$messages['blockedimages'] = 'С оглед на Вашата сигурност, изображенията в това писмо са блокирани.'; +$messages['encryptedmessage'] = 'Това е кодирано писмо и не може да бъде показано. Съжаляваме!'; +$messages['nocontactsfound'] = 'Няма контакти'; +$messages['contactnotfound'] = 'Исканият контакт не е намерен'; +$messages['sendingfailed'] = 'Изпращането неуспешно'; +$messages['errorsaving'] = 'Възникна грешка при записването'; +$messages['errormoving'] = 'Писмото не може да бъде преместено'; +$messages['errordeleting'] = 'Писмото не може да бъде изтрито'; +$messages['deletecontactconfirm'] = 'Искате ли да изтриете маркираните контакти?'; +$messages['deletemessagesconfirm'] = 'Искате ли да изтриете маркираните съобщения?'; +$messages['deletefolderconfirm'] = 'Искате ли да изтриете тази папка?'; +$messages['purgefolderconfirm'] = 'Искате ли да изтриете всички писма в тази папка?'; +$messages['formincomplete'] = 'Не сте попълнили всички полета'; +$messages['noemailwarning'] = 'Моля, въведете валиден e-mail адрес'; +$messages['nonamewarning'] = 'Моля, въведете име'; +$messages['nopagesizewarning'] = 'Въведете брой редове на страница'; +$messages['norecipientwarning'] = 'Въведете поне един получател'; +$messages['nosubjectwarning'] = 'Полето "Заглавие" е празно. Искате ли да въведете заглавие?'; +$messages['nobodywarning'] = 'Изпрати това писмо без текст?'; +$messages['notsentwarning'] = 'Писмото не е изпратено. Искате ли да бъде унищожено?'; +$messages['noldapserver'] = 'Изберете LDAP сървър за търсене'; +$messages['nocontactsreturned'] = 'Не са намерени контакти'; +$messages['nosearchname'] = 'Моля, въведете Име на контакта или e-mail адрес'; +$messages['searchsuccessful'] = '$nr намерени писма'; +$messages['searchnomatch'] = 'Търсенето не откри съвпадения'; +$messages['searching'] = 'Търсене...'; +$messages['checking'] = 'Проверка...'; +$messages['nospellerrors'] = 'Не са открити правописни грешки'; +$messages['folderdeleted'] = 'Папката е изтрита'; +$messages['deletedsuccessfully'] = 'Изтриването е успешно'; +$messages['converting'] = 'Премахване форматирането на писмото...'; +$messages['messageopenerror'] = 'Писмото не може да бъде заредено от сървъра'; +$messages['fileuploaderror'] = 'Грешка при прикачването на файла'; +$messages['filesizeerror'] = 'Прикаченият файл надвишава лимита от $size'; +$messages['copysuccess'] = 'Успешно копирани $nr адреса'; +$messages['copyerror'] = 'Грешка при копирането на адресите'; +$messages['sourceisreadonly'] = 'Този източник на адреси е само за четене'; +$messages['errorsavingcontact'] = 'Грешка при записването на адреса'; +$messages['movingmessage'] = 'Преместване на писмото...'; +$messages['receiptsent'] = 'Обратната разписка е изпратена.'; +$messages['errorsendingreceipt'] = 'Грешка при изпращането на обратна разписка.'; +$messages['nodeletelastidentity'] = 'Не можете да изтриете тази самоличност, трябва да имате поне една.'; +$messages['addsubfolderhint'] = 'Тази папка ще бъде създадена като подпапка на текущо избраната'; + ?> \ No newline at end of file diff --git a/program/localization/bs_BA/labels.inc b/program/localization/bs_BA/labels.inc new file mode 100644 index 0000000..24249de --- /dev/null +++ b/program/localization/bs_BA/labels.inc @@ -0,0 +1,234 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $ + +*/ + +$labels = array(); + +// login page +$labels['welcome'] = 'DobrodoÅ¡li na $product'; +$labels['username'] = 'Korisničko ime'; +$labels['password'] = 'Lozinka'; +$labels['server'] = 'Server'; +$labels['login'] = 'Prijava'; + +// taskbar +$labels['logout'] = 'Odjava'; +$labels['mail'] = 'Sanduče'; +$labels['settings'] = 'PodeÅ¡avanja'; +$labels['addressbook'] = 'Imenik'; + +// mailbox names +$labels['inbox'] = 'Inbox'; +$labels['drafts'] = 'Drafts'; +$labels['sent'] = 'Poslano'; +$labels['trash'] = 'Trash'; +$labels['junk'] = 'Junk'; + +// message listing +$labels['subject'] = 'Naslov'; +$labels['from'] = 'Od'; +$labels['to'] = 'Za'; +$labels['cc'] = 'Cc'; +$labels['bcc'] = 'Bcc'; +$labels['replyto'] = 'Reply-To'; +$labels['date'] = 'Datum'; +$labels['size'] = 'Veličina'; +$labels['priority'] = 'Prioritet'; +$labels['organization'] = 'Organizacija'; + +// aliases +$labels['reply-to'] = $labels['replyto']; + +$labels['mailboxlist'] = 'Fascikle'; +$labels['messagesfromto'] = 'Poruke od $from do $to od ukupno $count'; +$labels['messagenrof'] = 'Poruka broj $nr od $count'; + +$labels['moveto'] = 'prebaci u...'; +$labels['download'] = 'preuzmi (download)'; + +$labels['filename'] = 'Ime datoteke'; +$labels['filesize'] = 'Veličina datoteke'; + +$labels['preferhtml'] = 'HTML format u prednosti'; +$labels['htmlmessage'] = 'HTML format poruke'; +$labels['prettydate'] = 'Formatiran datum'; + +$labels['addtoaddressbook'] = 'Dodaj u imenik'; + +// weekdays short +$labels['sun'] = 'Ned'; +$labels['mon'] = 'Pon'; +$labels['tue'] = 'Uto'; +$labels['wed'] = 'Sri'; +$labels['thu'] = 'Čet'; +$labels['fri'] = 'Pet'; +$labels['sat'] = 'Sub'; + +// weekdays long +$labels['sunday'] = 'Nedjelja'; +$labels['monday'] = 'Ponedjeljak'; +$labels['tuesday'] = 'Utorak'; +$labels['wednesday'] = 'Srijeda'; +$labels['thursday'] = 'Četvrtak'; +$labels['friday'] = 'Petak'; +$labels['saturday'] = 'Subota'; + +$labels['today'] = 'danas'; + +// toolbar buttons +$labels['checkmail'] = 'Provjera novih poruka'; +$labels['writenewmessage'] = 'Nova poruka'; +$labels['replytomessage'] = 'Odgovori na poruku'; +$labels['replytoallmessage'] = 'Odgovori poÅ¡iljaocu i svim primaocima'; +$labels['forwardmessage'] = 'Proslijedi poruku'; +$labels['deletemessage'] = 'Prebaci poruku u korpu (Trash)'; +$labels['printmessage'] = 'OdÅ¡tampaj poruku'; +$labels['previousmessage'] = 'Prikaži prethodnu poruku'; +$labels['previousmessages'] = 'Prikaži prethodni skup poruka'; +$labels['nextmessages'] = 'Prikaži sljedeći skup poruka'; +$labels['lastmessage'] = 'Prikaži zadnju poruku'; +$labels['lastmessages'] = 'Prikaži zadnji skup poruka'; +$labels['backtolist'] = 'Povratak na listu poruka'; +$labels['viewsource'] = 'Prikaži poruku u izvornom obliku'; + +$labels['select'] = 'Obilježi'; +$labels['all'] = 'Sve'; +$labels['none'] = 'Nijednu'; +$labels['unread'] = 'Nepročitane'; + +$labels['compact'] = 'Skraćeno'; +$labels['empty'] = 'Izprazni'; +$labels['purge'] = 'Očisti'; + +$labels['quota'] = 'Kvota'; +$labels['unknown'] = 'nepoznato'; +$labels['unlimited'] = 'beskonačna'; + +$labels['quicksearch'] = 'Brza pretraga'; +$labels['resetsearch'] = 'Prikaži sve poruke'; + + +// message compose +$labels['compose'] = 'Nova poruka'; +$labels['savemessage'] = 'Sačuvaj u \'Drafts\''; +$labels['sendmessage'] = 'PoÅ¡alji poruku'; +$labels['addattachment'] = 'Priloži datoteku'; +$labels['charset'] = 'Skup znakova'; +$labels['editortype'] = 'Vrsta editora'; +$labels['returnreceipt'] = 'Potvrda o prispijeću poruke'; + +$labels['checkspelling'] = 'Provjera pravopisa'; +$labels['resumeediting'] = 'Povratak u režim pisanja'; +$labels['revertto'] = 'Vrati na'; + +$labels['attachments'] = 'Dodatci (Attachments)'; +$labels['upload'] = 'Dodaj'; +$labels['close'] = 'Zatvori'; + +$labels['low'] = 'Nizak'; +$labels['lowest'] = 'Najniži'; +$labels['normal'] = 'Srednji'; +$labels['high'] = 'Visok'; +$labels['highest'] = 'NajviÅ¡i'; + +$labels['nosubject'] = '(bez naslova)'; +$labels['showimages'] = 'Prikaži slike'; +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'Običan tekst'; + +// address boook +$labels['name'] = 'Puno ime'; +$labels['firstname'] = 'Ime'; +$labels['surname'] = 'Prezime'; +$labels['email'] = 'E-Mail'; + +$labels['addcontact'] = 'Dodaj novi kontakt'; +$labels['editcontact'] = 'Izmijeni kontakt'; + +$labels['edit'] = 'Izmijeni'; +$labels['cancel'] = 'Otkaži'; +$labels['save'] = 'Sačuvaj'; +$labels['delete'] = 'ObriÅ¡i'; + +$labels['newcontact'] = 'Dodaj novi kontakt'; +$labels['deletecontact'] = 'ObriÅ¡i odabrane kontakte'; +$labels['composeto'] = 'NapiÅ¡i mail...'; +$labels['contactsfromto'] = 'Kontakti od $from do $to od ukupno $count'; +$labels['print'] = 'Å tampaj'; +$labels['export'] = 'Izvezi'; + +$labels['previouspage'] = 'Prikaži predhodnu stranicu'; +$labels['firstpage'] = 'Prikaži prvi skup'; +$labels['nextpage'] = 'Prikaži sljedeću stranicu'; +$labels['lastpage'] = 'Prikaži zadnji skup'; + +// LDAP search +$labels['ldapsearch'] = 'Pretraga LDAP imenika'; + +$labels['ldappublicsearchname'] = 'Ime kontakta'; +$labels['ldappublicsearchtype'] = 'Potpuna fraza?'; +$labels['ldappublicserverselect'] = 'Odaberi servere'; +$labels['ldappublicsearchfield'] = 'Pretraži na'; +$labels['ldappublicsearchform'] = 'Pretraži kontakte'; +$labels['ldappublicsearch'] = 'Pretraga'; + + +// settings +$labels['settingsfor'] = 'PodeÅ¡avanja za'; + +$labels['preferences'] = 'PodeÅ¡avanja'; +$labels['userpreferences'] = 'OpÅ¡ta podeÅ¡avanja'; +$labels['editpreferences'] = 'Izmjena opÅ¡tih podeÅ¡avanja'; + +$labels['identities'] = 'Identiteti'; +$labels['manageidentities'] = 'Podesi identitete za ovaj nalog'; +$labels['newidentity'] = 'Dodaj identitet'; + +$labels['newitem'] = 'New item'; +$labels['edititem'] = 'Edit item'; + +$labels['setdefault'] = 'Postavi glavnim'; +$labels['language'] = 'Jezik'; +$labels['timezone'] = 'Vremenska zona'; +$labels['pagesize'] = 'Redova po stranici'; +$labels['signature'] = 'Potpis'; +$labels['dstactive'] = 'Ljetno pomjeranje vremena'; + +$labels['htmleditor']= 'Pisi HTML poruke'; +$labels['htmlsignature'] ='HTML potpis'; +$labels['previewpane'] ='Pokaži prethodu poruku'; +$labels['autosavedraft'] ='Automatski spasi predlozak'; +$labels['everynminutes'] ='svakih $n minuta'; +$labels['never'] ='nikada'; + +$labels['folder'] = 'Fascikla'; +$labels['folders'] = 'Fascikle'; +$labels['foldername'] = 'Ime fascikle'; +$labels['subscribed'] = 'Pretplaćen'; +$labels['create'] = 'Napravi'; +$labels['createfolder'] = 'Napravi novu fasciklu'; +$labels['rename'] = 'Preimenuj'; +$labels['renamefolder'] = 'Preimenuj fasciklu'; +$labels['deletefolder'] = 'ObriÅ¡i fasciklu'; +$labels['managefolders'] = 'Podesi fasciklu'; + +$labels['sortby'] = 'Sortiraj po'; +$labels['sortasc'] = 'Sortiraj rastućim nizom'; +$labels['sortdesc'] = 'Sortiraj opadajućim nizom'; + +?> \ No newline at end of file diff --git a/program/localization/bs_BA/messages.inc b/program/localization/bs_BA/messages.inc new file mode 100644 index 0000000..197ae06 --- /dev/null +++ b/program/localization/bs_BA/messages.inc @@ -0,0 +1,70 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'Prijava neuspjeÅ¡na'; +$messages['cookiesdisabled'] = 'VaÅ¡ pretraživač ne podržava kolačiće (cookies)'; +$messages['sessionerror'] = 'Sesija nije validna ili je istekla'; +$messages['imaperror'] = 'NeuspjeÅ¡na konekcija na IMAP server'; +$messages['nomessagesfound'] = 'Nema poruka u sandučetu'; +$messages['loggedout'] = 'UspjeÅ¡no ste se odjavili.'; +$messages['mailboxempty'] = 'Sanduče je prazno'; +$messages['loading'] = 'Učitavanje...'; +$messages['loadingdata'] = 'Učitavanje podataka...'; +$messages['checkingmail'] = 'Provjera novih poruka u toku...'; +$messages['sendingmessage'] = 'Poruka se Å¡alje...'; +$messages['messagesent'] = 'Poruka je uspjeÅ¡no poslana'; +$messages['savingmessage'] = 'Poruka se snima...'; +$messages['messagesaved'] = 'Poruka uspjeÅ¡no sačuvana u \'Drafts\''; +$messages['successfullysaved'] = 'Snimanje uspjeÅ¡no obavljeno'; +$messages['addedsuccessfully'] = 'Kontakt uspjeÅ¡no dodat u imenik'; +$messages['contactexists'] = 'Kontakt sa ovom e-mail adresom već postoji u imeniku'; +$messages['blockedimages'] = 'Zbog zaÅ¡tite privatnosti, slike sa drugih servera su blokirane.'; +$messages['encryptedmessage'] = 'Ova poruka je Å¡ifrovana pa se ne može prikazati'; +$messages['nocontactsfound'] = 'Imenik je prazan'; +$messages['sendingfailed'] = 'GreÅ¡ka pri slanju poruke'; +$messages['errorsaving'] = 'GreÅ¡ka pri snimanju'; +$messages['errormoving'] = 'GreÅ¡ka pri premjeÅ¡tanju poruke'; +$messages['errordeleting'] = 'GreÅ¡ka pri brisanju poruke'; +$messages['deletecontactconfirm'] = 'Da li želite da obriÅ¡ete izabrane kontakte?'; +$messages['deletemessagesconfirm'] = 'Da li stvarno želite izbrisati poruku(e)?'; +$messages['deletefolderconfirm'] = 'Da li zaista želite da obriÅ¡ete ovu fasciklu?'; +$messages['purgefolderconfirm'] = 'Da li zaista želite da obriÅ¡ete sve poruke u fascikli?'; +$messages['formincomplete'] = 'Forma nije u cijelosti popunjena'; +$messages['noemailwarning'] = 'Unesite ispravnu e-mail adresu'; +$messages['nonamewarning'] = 'Unesite ime'; +$messages['nopagesizewarning'] = 'Unesite veličinu stranice'; +$messages['norecipientwarning'] = 'Unesite primaoca / primaoce (ZA)'; +$messages['nosubjectwarning'] = 'Polje \'Naslov\' je prazno. Želite li da unesete naslov poruke?'; +$messages['nobodywarning'] = 'Da li želite da poÅ¡aljete poruku bez teksta?'; +$messages['notsentwarning'] = 'Poruka nije poslana. Da li želite da odbacite ovu poruku?'; +$messages['noldapserver'] = 'Unesite LDAP server za pretragu'; +$messages['nocontactsreturned'] = 'Nije pronađen ni jedan kontakt'; +$messages['nosearchname'] = 'Unesite ime ili e-mail adresu'; +$messages['searchsuccessful'] = 'Broj pronađenih poruka: $nr'; +$messages['searchnomatch'] = 'Tražena fraza nije pronađena ni u jednoj poruci'; +$messages['searching'] = 'Pretraga u toku...'; +$messages['checking'] = 'Provjera u toku...'; +$messages['nospellerrors'] = 'Nije pronađena ni jedna pravopisna greÅ¡ka'; +$messages['folderdeleted'] = 'Fascikla uspjeÅ¡no obrisana'; +$messages['deletedsuccessfully'] = 'UspjeÅ¡no izbrisano'; +$messages['converting'] = 'Vračeno formatiranje iz poruke ...'; +$messages['messageopenerror'] = 'Nije učitana poruka sa servera'; + +?> \ No newline at end of file diff --git a/program/localization/ca/labels.inc b/program/localization/ca/labels.inc index ffedb30..f238a02 100644 --- a/program/localization/ca/labels.inc +++ b/program/localization/ca/labels.inc @@ -6,7 +6,7 @@ | language/ca/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Simo | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 872 2007-10-16 09:27:16Z yllar $ + @version $Id: labels.inc 1143 2008-02-26 20:50:10Z yllar $ */ @@ -88,6 +88,9 @@ $labels['lastmessage'] = 'Mostrar l\'últim missatge'; $labels['lastmessages'] = 'Mostrar els últims missatges'; $labels['backtolist'] = 'Tornar a la llista de missatges'; $labels['viewsource'] = 'Visualitza el codi font'; +$labels['markmessages'] = 'Marca missatges'; +$labels['markread'] = 'Com a llegits'; +$labels['markunread'] = 'Com a no llegits'; $labels['select'] = 'Seleccionar'; $labels['all'] = 'Tots'; $labels['none'] = 'Cap'; @@ -125,6 +128,10 @@ $labels['plaintoggle'] = 'Text pla'; $labels['addcc'] = 'Afegir Cc'; $labels['addbcc'] = 'Afegir Bcc'; $labels['addreplyto'] = 'Afegir Reply-To'; +$labels['mdnrequest'] = 'El remitent d\'aquest missatge ha demanat ser notificat quan llegeixis aquest missatge. Vols notificar al remitent?'; +$labels['receiptread'] = 'Confirmació de recepció'; +$labels['yourmessage'] = 'Aquesta és una confirmació de recepció per al teu missatge'; +$labels['receiptnote'] = 'Nota: Aquesta confirmació solament indica que el missatge ha estat mostrat en l\'ordinador del destinatari. No hi ha garantia que el destinatari hagi llegit o entès el contingut del missatge.'; $labels['name'] = 'Nom a mostrar'; $labels['firstname'] = 'Nom'; $labels['surname'] = 'Cognom'; @@ -172,6 +179,7 @@ $labels['folder'] = 'Carpeta'; $labels['folders'] = 'Carpetes'; $labels['foldername'] = 'Nom de carpeta'; $labels['subscribed'] = 'Subscriure\'s'; +$labels['messagecount'] = 'Missatges'; $labels['create'] = 'Crear'; $labels['createfolder'] = 'Crear nova carpeta'; $labels['rename'] = 'Canvia el nom'; diff --git a/program/localization/ca/messages.inc b/program/localization/ca/messages.inc index 143db69..5f2a131 100644 --- a/program/localization/ca/messages.inc +++ b/program/localization/ca/messages.inc @@ -6,7 +6,7 @@ | language/ca/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Simo | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 872 2007-10-16 09:27:16Z yllar $ + @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $ */ @@ -75,5 +75,9 @@ $messages['copyerror'] = 'No s\'ha pogut copiar cap adreça'; $messages['sourceisreadonly'] = 'Aquesta adreça és només de lectura.'; $messages['errorsavingcontact'] = 'No s\'ha pogut guardar l\'adreça de contacte'; $messages['movingmessage'] = 'Movent el missatge...'; +$messages['receiptsent'] = 'Confirmació de lectura enviada satisfactòriament'; +$messages['errorsendingreceipt'] = 'No es pot enviar la confirmació'; +$messages['nodeletelastidentity'] = 'No pots eliminar aquesta identitat, és l\'última.'; +$messages['addsubfolderhint'] = 'Aquesta carpeta serà creada com a subcarpeta de la seleccionada actualment'; ?> \ No newline at end of file diff --git a/program/localization/cz/labels.inc b/program/localization/cz/labels.inc index a8cb285..5e8ef82 100644 --- a/program/localization/cz/labels.inc +++ b/program/localization/cz/labels.inc @@ -6,15 +6,16 @@ | language/cz/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | - | All rights reserved. | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | + | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Martin Mrajca | | joe | + | Jiri Kaderavek | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 869 2007-10-15 13:27:08Z yllar $ + @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $ */ @@ -88,6 +89,9 @@ $labels['lastmessage'] = 'Zobrazit poslední zprávu'; $labels['lastmessages'] = 'Zobrazit poslední zprávy'; $labels['backtolist'] = 'Zpět do seznamu zpráv'; $labels['viewsource'] = 'Zobrazit zdroj'; +$labels['markmessages'] = 'Označ zprávy'; +$labels['markread'] = 'Jako přečtené'; +$labels['markunread'] = 'Jako nepřečtené'; $labels['select'] = 'Vybrat'; $labels['all'] = 'VÅ¡e'; $labels['none'] = 'Nic'; @@ -125,6 +129,10 @@ $labels['plaintoggle'] = 'Prostý text'; $labels['addcc'] = 'Přidat pole "Kopie"'; $labels['addbcc'] = 'Přidat pole "Skrytá Kopie"'; $labels['addreplyto'] = 'Přidat pole "Odpověď"'; +$labels['mdnrequest'] = 'Odesílatel této zprávy si přeje být upozorněn na to, že jste zprávu obdrželi. Chcete přijetí zprávy potvrdit?'; +$labels['receiptread'] = 'Potvrzení o přijetí zprávy'; +$labels['yourmessage'] = 'Toto je potvrzení o přijetí Vaší zprávy'; +$labels['receiptnote'] = 'Poznámka: Toto potvrzení negarantuje, že zpráva byla příjemce přečtena a že porozuměl jejímu obsahu.'; $labels['name'] = 'Zobrazit jméno'; $labels['firstname'] = 'Jméno'; $labels['surname'] = 'Příjmení'; @@ -172,6 +180,7 @@ $labels['folder'] = 'Složka'; $labels['folders'] = 'Složky'; $labels['foldername'] = 'Jméno složky'; $labels['subscribed'] = 'Vybráno'; +$labels['messagecount'] = 'Počet zpráv'; $labels['create'] = 'Vytvořit'; $labels['createfolder'] = 'Vytvořit novou složku'; $labels['rename'] = 'Přejmenovat'; diff --git a/program/localization/cz/messages.inc b/program/localization/cz/messages.inc index 97c3042..20c5d48 100644 --- a/program/localization/cz/messages.inc +++ b/program/localization/cz/messages.inc @@ -6,15 +6,16 @@ | language/cz/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | - | All rights reserved. | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | + | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Martin Mrajca | | joe | + | Jiri Kaderavek | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 869 2007-10-15 13:27:08Z yllar $ + @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $ */ @@ -75,5 +76,9 @@ $messages['copyerror'] = 'Nemohu zkopírovat žádnou adresu'; $messages['sourceisreadonly'] = 'Tento zdroj adres je pouze pro čtení'; $messages['errorsavingcontact'] = 'Nemohu uložit adresu kontaktu'; $messages['movingmessage'] = 'Přesouvám zprávu...'; +$messages['receiptsent'] = 'Potvrzení o přřijetí zprávy odesláno'; +$messages['errorsendingreceipt'] = 'Potvrzení o přijetí zprávy nebylo možné odeslat'; +$messages['nodeletelastidentity'] = 'Alespoň jedna identita musí být ponechána. Identitu nelze odstranit.'; +$messages['addsubfolderhint'] = 'Tato složka bude vytvořena jako podsložka aktuálně zvolené složky'; ?> \ No newline at end of file diff --git a/program/localization/da/labels.inc b/program/localization/da/labels.inc index 76b35d1..a326658 100644 --- a/program/localization/da/labels.inc +++ b/program/localization/da/labels.inc @@ -6,8 +6,8 @@ | language/da/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | - | All rights reserved. | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | + | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Martin Moeller | @@ -15,7 +15,7 @@ | Søren Aggeboe | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 886 2007-10-19 07:24:53Z yllar $ + @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $ */ @@ -26,7 +26,7 @@ $labels['password'] = 'Adgangskode'; $labels['server'] = 'Server'; $labels['login'] = 'Log pÃ¥'; $labels['logout'] = 'Log af'; -$labels['mail'] = 'Email'; +$labels['mail'] = 'E-mail'; $labels['settings'] = 'Personlige indstillinger'; $labels['addressbook'] = 'Adressebog'; $labels['inbox'] = 'Indbakke'; @@ -89,6 +89,9 @@ $labels['lastmessage'] = 'Vis sidste besked'; $labels['lastmessages'] = 'Vis sidste sæt beskeder'; $labels['backtolist'] = 'Tilbage til beskedlisten'; $labels['viewsource'] = 'Vis rÃ¥ besked'; +$labels['markmessages'] = 'Markér beskeder'; +$labels['markread'] = 'Som læst'; +$labels['markunread'] = 'Som ulæst'; $labels['select'] = 'Vælg'; $labels['all'] = 'Alle'; $labels['none'] = 'Ingen'; @@ -126,10 +129,14 @@ $labels['plaintoggle'] = 'Almindelig tekst'; $labels['addcc'] = 'Tilføj Cc'; $labels['addbcc'] = 'Tilføj Bcc'; $labels['addreplyto'] = 'Tilføj Svar-Til adresse'; +$labels['mdnrequest'] = 'Afsenderen af denne besked har bedt om at modtage en bekræftelse nÃ¥r du læser beskeden. Vil du sende kvittering for læsning?'; +$labels['receiptread'] = 'Send kvittering for læsning'; +$labels['yourmessage'] = 'Dette er en kvittering for at din besked er blevet vist'; +$labels['receiptnote'] = 'Bemærk: Denne kvittering bekræfter udelukkende at beskeden blev vist pÃ¥ modtagerens computer. Der er ingen garanti for at modtageren har læst eller forstÃ¥et beskedens indhold.'; $labels['name'] = 'Vist navn'; $labels['firstname'] = 'Fornavn'; $labels['surname'] = 'Efternavn'; -$labels['email'] = 'Email'; +$labels['email'] = 'E-mail'; $labels['addcontact'] = 'Tilføj en ny kontakt'; $labels['editcontact'] = 'Redigér kontakt'; $labels['edit'] = 'Redigér'; @@ -169,10 +176,11 @@ $labels['previewpane'] = 'ForhÃ¥ndsvisning'; $labels['autosavedraft'] = 'Gem kladde automatisk'; $labels['everynminutes'] = 'hver $n. minut'; $labels['never'] = 'aldrig'; -$labels['folder'] = 'Mapper'; +$labels['folder'] = 'Mappe'; $labels['folders'] = 'Mapper'; $labels['foldername'] = 'Mappenavn'; $labels['subscribed'] = 'Abonneret'; +$labels['messagecount'] = 'Beskeder'; $labels['create'] = 'Opret'; $labels['createfolder'] = 'Opret ny mappe'; $labels['rename'] = 'Omdøb'; @@ -183,4 +191,4 @@ $labels['sortby'] = 'Sortér efter'; $labels['sortasc'] = 'Ældste først'; $labels['sortdesc'] = 'Nyeste først'; -?> \ No newline at end of file +?> diff --git a/program/localization/da/messages.inc b/program/localization/da/messages.inc index b0e6306..d960380 100644 --- a/program/localization/da/messages.inc +++ b/program/localization/da/messages.inc @@ -6,8 +6,8 @@ | language/da/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | - | All rights reserved. | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | + | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author : Martin Moeller | @@ -15,7 +15,7 @@ | Søren Aggeboe | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 886 2007-10-19 07:24:53Z yllar $ + @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $ */ @@ -36,21 +36,21 @@ $messages['savingmessage'] = 'Gemmer besked...'; $messages['messagesaved'] = 'Beskeden er gemt i kladdemappen'; $messages['successfullysaved'] = 'Det lykkedes at gemme'; $messages['addedsuccessfully'] = 'Kontakten blev tilføjet adressebogen'; -$messages['contactexists'] = 'Der er allerede en kontakt med denne email adresse'; +$messages['contactexists'] = 'Der er allerede en kontakt med denne e-mail adresse'; $messages['blockedimages'] = 'For at beskytte dit privatliv er billeder fra internetservere blokeret i denne besked.'; $messages['encryptedmessage'] = 'Beskeden er krypteret og kan ikke vises. Beklager!'; $messages['nocontactsfound'] = 'Ingen kontakter blev fundet'; $messages['contactnotfound'] = 'Den søgte kontakt blev ikke fundet'; -$messages['sendingfailed'] = 'Kunne ikke sende beskeden'; +$messages['sendingfailed'] = 'Beskeden kunne ikke sendes'; $messages['errorsaving'] = 'Der opstod en fejl ved lagring af data'; -$messages['errormoving'] = 'Kunne ikke flytte beskeden'; -$messages['errordeleting'] = 'Kunne ikke slette beskeden'; +$messages['errormoving'] = 'Beskeden kunne ikke flyttes'; +$messages['errordeleting'] = 'Beskeden kunne ikke slettes'; $messages['deletecontactconfirm'] = 'Vil du virkelig slette den/de valgte kontakt(er)?'; $messages['deletemessagesconfirm'] = 'Vil du virkelig slette den/de valgte besked(er)?'; -$messages['deletefolderconfirm'] = 'Vil du virkelig slette den vagte mappe'; +$messages['deletefolderconfirm'] = 'Vil du virkelig slette den valgte mappe'; $messages['purgefolderconfirm'] = 'Vil du virkelig slette alle beskeder i denne mappe?'; $messages['formincomplete'] = 'Formularen var ikke fuldstændig fyldt ud'; -$messages['noemailwarning'] = 'Indtast venligst en gyldig email adresse'; +$messages['noemailwarning'] = 'Indtast venligst en gyldig e-mail adresse'; $messages['nonamewarning'] = 'Angiv venligst et navn'; $messages['nopagesizewarning'] = 'Angiv sidestørrelsen'; $messages['norecipientwarning'] = 'Indtast mindst én modtager'; @@ -59,14 +59,14 @@ $messages['nobodywarning'] = 'Send denne besked uden tekst?'; $messages['notsentwarning'] = 'Beskeden er ikke blevet sendt. Vil du kassere din besked?'; $messages['noldapserver'] = 'Vælg venligst hvilken LDAP-server der skal søges i'; $messages['nocontactsreturned'] = 'Ingen kontakter blev fundet'; -$messages['nosearchname'] = 'Indtast venligst en kontakts navn eller email adresse'; +$messages['nosearchname'] = 'Indtast venligst en kontakts navn eller e-mail adresse'; $messages['searchsuccessful'] = 'Fandt $nr beskeder'; $messages['searchnomatch'] = 'Søgningen fandt ingen beskeder'; $messages['searching'] = 'Søger...'; $messages['checking'] = 'Tjekker...'; $messages['nospellerrors'] = 'Ingen stavefejl fundet'; -$messages['folderdeleted'] = 'Mappen blev slettet korrekt'; -$messages['deletedsuccessfully'] = 'Slettet korrekt'; +$messages['folderdeleted'] = 'Mappen er slettet'; +$messages['deletedsuccessfully'] = 'Slettet'; $messages['converting'] = 'Fjerner formatering fra besked...'; $messages['messageopenerror'] = 'Beskeden kunne ikke hentes fra serveren'; $messages['fileuploaderror'] = 'Den indsatte fil fejlede'; @@ -76,5 +76,9 @@ $messages['copyerror'] = 'Kunne ikke kopiere adresserne'; $messages['sourceisreadonly'] = 'Denne adressekilde er kun til læsning'; $messages['errorsavingcontact'] = 'Kunne ikke gemme kontakt adressen'; $messages['movingmessage'] = 'Flytter besked...'; +$messages['receiptsent'] = 'Kvittering for læsning er sendt'; +$messages['errorsendingreceipt'] = 'Kvitteringen kunne ikke sendes'; +$messages['nodeletelastidentity'] = 'Du kan ikke slette denne identitet, da det er den eneste der er tilbage.'; +$messages['addsubfolderhint'] = 'Denne mappe vil blive oprettet som en undermappe af den der er valgt i øjeblikket.'; -?> \ No newline at end of file +?> diff --git a/program/localization/de_CH/labels.inc b/program/localization/de_CH/labels.inc index 425ac22..7e16ab9 100644 --- a/program/localization/de_CH/labels.inc +++ b/program/localization/de_CH/labels.inc @@ -6,7 +6,7 @@ | language/de_CH/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Corrections: Alexander Stiebing | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 816 2007-09-26 08:13:21Z thomasb $ + @version $Id: labels.inc 1075 2008-02-13 23:43:04Z thomasb $ */ @@ -110,6 +110,9 @@ $labels['lastmessage'] = 'Die letzte Nachricht anzeigen'; $labels['lastmessages'] = 'Die letzten Nachrichten anzeigen'; $labels['backtolist'] = 'Zurück zur Liste'; $labels['viewsource'] = 'Quelltext anzeigen'; +$labels['markmessages'] = 'Nachrichten markieren'; +$labels['markread'] = 'Als gelesen'; +$labels['markunread'] = 'Als ungelesen'; $labels['select'] = 'Auswählen'; $labels['all'] = 'Alle'; @@ -161,6 +164,11 @@ $labels['addcc'] = 'Cc hinzufügen'; $labels['addbcc'] = 'Bcc hinzufügen'; $labels['addreplyto'] = 'Antwortadresse hinzufügen'; +// mdn +$labels['mdnrequest'] = 'Der Sender dieser Nachricht hat eine Empfangsbestätigung angefordert. Möchten Sie diese jetzt senden?'; +$labels['receiptread'] = 'Empfangsbestätigung (gelesen)'; +$labels['yourmessage'] = 'Dieses ist eine Empfangsbestätigung für Ihre Nachricht'; +$labels['receiptnote'] = 'Hinweis: Der Empfänger hat den Empfang der Nachricht bestätigt. Dieses ist keine Garantie, dass die Nachricht gelesen und verstanden wurde.'; // address book // Adressbuch $labels['name'] = 'Anzeigename'; @@ -224,6 +232,7 @@ $labels['folder'] = 'Ordner'; $labels['folders'] = 'Ordner'; $labels['foldername'] = 'Ordnername'; $labels['subscribed'] = 'Abonniert'; +$labels['messagecount'] = 'Nachrichten'; $labels['create'] = 'Erstellen'; $labels['createfolder'] = 'Neuen Ordner erstellen'; $labels['rename'] = 'Umbenennen'; diff --git a/program/localization/de_CH/messages.inc b/program/localization/de_CH/messages.inc index 48a9591..492fd61 100644 --- a/program/localization/de_CH/messages.inc +++ b/program/localization/de_CH/messages.inc @@ -6,14 +6,14 @@ | language/de_CH/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 549 2007-05-01 18:53:56Z thomasb $ + @version $Id: messages.inc 1075 2008-02-13 23:43:04Z thomasb $ */ @@ -75,4 +75,11 @@ $messages['copyerror'] = 'Die Adressen konnten nicht kopiert werden'; $messages['sourceisreadonly'] = 'Das Adressverzeichnis kann nicht verändert werden'; $messages['errorsavingcontact'] = 'Die Änderungen konnten nicht gespeichert werden'; +$messages['movingmessage'] = 'Die E-Mail wird verschoben...'; +$messages['receiptsent'] = 'Bestätigung erfolgreich gesendet'; +$messages['errorsendingreceipt'] = 'Bestätigung konnte nicht gesendet werden'; + +$messages['nodeletelastidentity'] = 'Sie können diesen Absender nicht löschen'; +$messages['addsubfolderhint'] = 'Wird als Unterdornder des aktuell selektieren Ordners erstellt'; + ?> \ No newline at end of file diff --git a/program/localization/de_DE/labels.inc b/program/localization/de_DE/labels.inc index 2f69c14..9181bc2 100644 --- a/program/localization/de_DE/labels.inc +++ b/program/localization/de_DE/labels.inc @@ -6,14 +6,14 @@ | language/de_DE/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Stephan Diehl | + | Author: Marcel Schlesinger | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 858 2007-10-04 10:14:19Z Stiwi $ + @version $Id: labels.inc 1107 2008-02-17 18:32:46Z thomasb $ */ @@ -87,6 +87,9 @@ $labels['lastmessage'] = 'Die letzte Nachricht anzeigen'; $labels['lastmessages'] = 'Die letzten Nachrichten anzeigen'; $labels['backtolist'] = 'Zurück zur Liste'; $labels['viewsource'] = 'Quelltext anzeigen'; +$labels['markmessages'] = 'Nachrichten markieren'; +$labels['markread'] = 'Als gelesen'; +$labels['markunread'] = 'Als ungelesen'; $labels['select'] = 'Auswählen'; $labels['all'] = 'Alle'; $labels['none'] = 'Keine'; @@ -124,7 +127,11 @@ $labels['plaintoggle'] = 'Nur-Text'; $labels['addcc'] = 'Cc hinzufügen'; $labels['addbcc'] = 'Bcc hinzufügen'; $labels['addreplyto'] = 'Antwortadresse hinzufügen'; -$labels['name'] = 'Anzeigename'; +$labels['mdnrequest'] = 'Der Sender dieser Nachricht möchte gerne eine Lesebestätigung. Wollen Sie dieses bestätigen?'; +$labels['receiptread'] = 'Empfangsbestätigung (gelesen)'; +$labels['yourmessage'] = 'Dies ist eine Empfangsbestätigung für Ihre Nachricht'; +$labels['receiptnote'] = 'Hinweis: Der Empfänger hat den Empfang der Nachricht bestätigt. Dies ist keine Garantie, dass die Nachricht gelesen und verstanden wurde.'; +$labels['name'] = 'Angezeigter Name'; $labels['firstname'] = 'Vorname'; $labels['surname'] = 'Nachname'; $labels['email'] = 'E-Mail'; @@ -150,7 +157,7 @@ $labels['settingsfor'] = 'Einstellungen für'; $labels['preferences'] = 'Einstellungen'; $labels['userpreferences'] = 'Benutzereinstellungen'; $labels['editpreferences'] = 'Benutzereinstellungen bearbeiten'; -$labels['identities'] = 'Absender'; +$labels['identities'] = 'Identitäten'; $labels['manageidentities'] = 'Absender für dieses Konto verwalten'; $labels['newidentity'] = 'Neuer Absender'; $labels['newitem'] = 'Neuer Eintrag'; @@ -171,6 +178,7 @@ $labels['folder'] = 'Ordner'; $labels['folders'] = 'Ordner'; $labels['foldername'] = 'Ordnername'; $labels['subscribed'] = 'Abonniert'; +$labels['messagecount'] = 'Nachrichten'; $labels['create'] = 'Erstellen'; $labels['createfolder'] = 'Neuen Ordner erstellen'; $labels['rename'] = 'Umbenennen'; @@ -181,4 +189,4 @@ $labels['sortby'] = 'Sortieren nach'; $labels['sortasc'] = 'Aufsteigend sortieren'; $labels['sortdesc'] = 'Absteigend sortieren'; -?> +?> \ No newline at end of file diff --git a/program/localization/de_DE/messages.inc b/program/localization/de_DE/messages.inc index ea109a9..002e90e 100644 --- a/program/localization/de_DE/messages.inc +++ b/program/localization/de_DE/messages.inc @@ -6,19 +6,19 @@ | language/de_DE/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Stephan Diehl | + | Author: Marcel Schlesinger | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: messages.inc 1107 2008-02-17 18:32:46Z thomasb $ */ $messages = array(); -$messages['loginfailed'] = 'Anmelden fehlgeschlagen'; +$messages['loginfailed'] = 'Anmeldung fehlgeschlagen'; $messages['cookiesdisabled'] = 'Ihr Browser akzeptiert keine Cookies'; $messages['sessionerror'] = 'Ihre Session ist ungültig oder abgelaufen'; $messages['imaperror'] = 'Keine Verbindung zum IMAP-Server'; @@ -59,13 +59,13 @@ $messages['noldapserver'] = 'Bitte wählen Sie einen LDAP-Server aus'; $messages['nocontactsreturned'] = 'Es wurden keine Kontakte gefunden'; $messages['nosearchname'] = 'Bitte geben Sie einen Namen oder eine E-Mail-Adresse ein'; $messages['searchsuccessful'] = '$nr Nachrichten gefunden'; -$messages['searchnomatch'] = 'Keine Treffer'; +$messages['searchnomatch'] = 'Die Suche lieferte keine Treffer'; $messages['searching'] = 'Suche...'; $messages['checking'] = 'Prüfe...'; $messages['nospellerrors'] = 'Keine Rechtschreibfehler gefunden'; $messages['folderdeleted'] = 'Ordner erfolgreich gelöscht'; $messages['deletedsuccessfully'] = 'Erfolgreich gelöscht'; -$messages['converting'] = 'Entferne Formatierung der Nachricht...'; +$messages['converting'] = 'Entferne Formatierungen der Nachricht...'; $messages['messageopenerror'] = 'Die Nachricht konnte nicht vom Server geladen werden'; $messages['fileuploaderror'] = 'Hochladen der Datei fehlgeschlagen'; $messages['filesizeerror'] = 'Die hochzuladende Datei überschreitet die Maximalgröße von $size'; @@ -74,5 +74,9 @@ $messages['copyerror'] = 'Die Adressen konnten nicht kopiert werden'; $messages['sourceisreadonly'] = 'Das Adressverzeichnis kann nicht verändert werden'; $messages['errorsavingcontact'] = 'Die Änderungen konnten nicht gespeichert werden'; $messages['movingmessage'] = 'Die E-Mail wird verschoben...'; +$messages['receiptsent'] = 'Lesebestätigung erfolgreich gesendet'; +$messages['errorsendingreceipt'] = 'Bestätigung konnte nicht gesendet werden'; +$messages['nodeletelastidentity'] = 'Diese Identität kann nicht gelöscht werden, da dies die letzte ist.'; +$messages['addsubfolderhint'] = 'Wird als Unterordner des aktuell selektieren Ordners erstellt'; ?> \ No newline at end of file diff --git a/program/localization/el/labels.inc b/program/localization/el/labels.inc index 8ba5cf8..e3a25ad 100644 --- a/program/localization/el/labels.inc +++ b/program/localization/el/labels.inc @@ -6,15 +6,15 @@ | language/el/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Jim Deves | - | John Economou | + | John Economou | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 612 2007-06-12 18:17:21Z thomasb $ + @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $ */ @@ -75,7 +75,8 @@ $labels['writenewmessage'] = 'Δημιουργία νέου μηνύματος'; $labels['replytomessage'] = 'Απάντηση'; $labels['replytoallmessage'] = 'Απάντηση στον αποστολέα και όλους τους παραλήπτες'; $labels['forwardmessage'] = 'Προώθηση μηνύματος'; -$labels['deletemessage'] = 'Μετακίνηση στον Κάδο'; +$labels['deletemessage'] = 'Διαγραφή μηνύματος'; +$labels['movemessagetotrash'] = 'Μετακίνηση μηνύματος στον Κάδο'; $labels['printmessage'] = 'Εκτύπωση'; $labels['previousmessage'] = 'Εμφάνιση προηγούμενου μηνύματος'; $labels['previousmessages'] = 'Εμφάνιση προηγούμενης ομάδας μηνυμάτων'; @@ -87,6 +88,9 @@ $labels['lastmessage'] = 'Εμφάνιση τελευταίου μηνύματο $labels['lastmessages'] = 'Εμφάνιση τελευταίας ομάδας μηνυμάτων'; $labels['backtolist'] = 'Επιστροφή στη λίστα μηνυμάτων'; $labels['viewsource'] = 'Προβολή πηγαίου κώδικα'; +$labels['markmessages'] = 'Σήμανση μηνυμάτων'; +$labels['markread'] = 'ως αναγνωσμένα'; +$labels['markunread'] = 'ως μη-αναγνωσμένα'; $labels['select'] = 'Επιλογή'; $labels['all'] = 'Όλα'; $labels['none'] = 'Κανένα'; @@ -100,8 +104,8 @@ $labels['unlimited'] = 'απεριόριστο'; $labels['quicksearch'] = 'Γρήγορη Εύρεση'; $labels['resetsearch'] = 'Επαναφορά Εύρεσης'; $labels['compose'] = 'Συγγραφή μηνύματος'; -$labels['sendmessage'] = 'Αποστολή μηνύματος τώρα'; $labels['savemessage'] = 'Αποθήκευση ως πρόχειρου'; +$labels['sendmessage'] = 'Αποστολή μηνύματος τώρα'; $labels['addattachment'] = 'Επισύναψη αρχείου'; $labels['charset'] = 'Charset'; $labels['editortype'] = 'Είδος επεξεργαστή κειμένου'; @@ -121,6 +125,13 @@ $labels['nosubject'] = '(κανένα θέμα)'; $labels['showimages'] = 'Εμφάνιση εικόνων'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Απλό κείμενο'; +$labels['addcc'] = 'Προσθήκη Cc'; +$labels['addbcc'] = 'Προσθήκη Bcc'; +$labels['addreplyto'] = 'Προσθήκη Απάντηση-Σε'; +$labels['mdnrequest'] = 'Ο αποστολέας του μηνύματος έχει ζητήσει να ενημερωθεί όταν διαβάσετε αυτό το μήνυμα. Επιθυμείτε να ενημερώστε τον αποστολέα;'; +$labels['receiptread'] = 'Αναφορά (ανάγνωσης)'; +$labels['yourmessage'] = 'Αυτό είναι μια Αναφορά για το μήνυμά σας'; +$labels['receiptnote'] = 'Σημείωση: Αυτή η αναφορά επιβεβαιώνει μόνο ότι το μήνυμα εμφανίστηκε μόνο στον υπολογιστή του παραλήπτη. Δεν επιβεβαιώνει ότι ο παραλήπτης έχει διαβάσει ή έχει κατανοήσει το περιεχόμενο του μηνύματος.'; $labels['name'] = 'Εμφανιζόμενο όνομα'; $labels['firstname'] = 'Όνομα'; $labels['surname'] = 'Επώνυμο'; @@ -168,6 +179,7 @@ $labels['folder'] = 'Φάκελος'; $labels['folders'] = 'Φάκελοι'; $labels['foldername'] = 'Όνομα φακέλου'; $labels['subscribed'] = 'Εγγραφή'; +$labels['messagecount'] = 'Μηνύματα'; $labels['create'] = 'Δημιουργία'; $labels['createfolder'] = 'Δημιουργία νέου φακέλου'; $labels['rename'] = 'Μετονομασία'; diff --git a/program/localization/el/messages.inc b/program/localization/el/messages.inc index c490f58..84890e8 100644 --- a/program/localization/el/messages.inc +++ b/program/localization/el/messages.inc @@ -6,15 +6,15 @@ | language/el/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Jim Deves | - | John Economou | + | John Economou | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 612 2007-06-12 18:17:21Z thomasb $ + @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $ */ @@ -74,5 +74,10 @@ $messages['copysuccess'] = 'Επιτυχή αντιγραφή $nr διευθύν $messages['copyerror'] = 'Αποτυχία αντιγραφής διευθύνσεων'; $messages['sourceisreadonly'] = 'Η διεύθυνση έχει μόνο δικαίωμα ανάγνωσης'; $messages['errorsavingcontact'] = 'Σώσιμο επαφής απέτυχε'; +$messages['movingmessage'] = 'Μετακίνηση μηνύματος...'; +$messages['receiptsent'] = 'Επιτυχής αποστολή αναφοράς ανάγνωσης'; +$messages['errorsendingreceipt'] = 'Αποστολή αναφοράς απέτυχε'; +$messages['nodeletelastidentity'] = 'Δε μπορείτε να διαγράψετε αυτήν την ταυτότητα, είναι η τελευταία.'; +$messages['addsubfolderhint'] = 'Αυτός ο φάκελος θα δημιουργηθεί ως υποφάκελος του επιλεγμένου'; ?> \ No newline at end of file diff --git a/program/localization/en_GB/labels.inc b/program/localization/en_GB/labels.inc index 7d26459..96f3447 100644 --- a/program/localization/en_GB/labels.inc +++ b/program/localization/en_GB/labels.inc @@ -6,71 +6,54 @@ | language/en_GB/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Weiran Zhang (weiran@weiran.co.uk) | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: labels.inc 1091 2008-02-15 15:13:38Z tomekp $ */ $labels = array(); - -// login page -$labels['welcome'] = 'Welcome to $product'; -$labels['username'] = 'Username'; -$labels['password'] = 'Password'; -$labels['server'] = 'Server'; -$labels['login'] = 'Login'; - -// taskbar -$labels['logout'] = 'Logout'; -$labels['mail'] = 'E-Mail'; +$labels['welcome'] = 'Welcome to $product'; +$labels['username'] = 'Username'; +$labels['password'] = 'Password'; +$labels['server'] = 'Server'; +$labels['login'] = 'Login'; +$labels['logout'] = 'Logout'; +$labels['mail'] = 'E-Mail'; $labels['settings'] = 'Personal Settings'; $labels['addressbook'] = 'Address Book'; - -// mailbox names -$labels['inbox'] = 'Inbox'; +$labels['inbox'] = 'Inbox'; $labels['drafts'] = 'Drafts'; -$labels['sent'] = 'Sent'; -$labels['trash'] = 'Deleted Items'; -$labels['junk'] = 'Junk'; - -// message listing +$labels['sent'] = 'Sent'; +$labels['trash'] = 'Deleted Items'; +$labels['junk'] = 'Junk'; $labels['subject'] = 'Subject'; -$labels['from'] = 'Sender'; -$labels['to'] = 'Recipient'; -$labels['cc'] = 'Copy'; -$labels['bcc'] = 'Bcc'; +$labels['from'] = 'Sender'; +$labels['to'] = 'Recipient'; +$labels['cc'] = 'Copy'; +$labels['bcc'] = 'Bcc'; $labels['replyto'] = 'Reply-To'; -$labels['date'] = 'Date'; -$labels['size'] = 'Size'; +$labels['date'] = 'Date'; +$labels['size'] = 'Size'; $labels['priority'] = 'Priority'; $labels['organization'] = 'Organisation'; - -// aliases -$labels['reply-to'] = $labels['replyto']; - +$labels['reply-to'] = 'Reply-To'; $labels['mailboxlist'] = 'Folders'; $labels['messagesfromto'] = 'Messages $from to $to of $count'; $labels['messagenrof'] = 'Message $nr of $count'; - -$labels['moveto'] = 'move to...'; +$labels['moveto'] = 'move to...'; $labels['download'] = 'download'; - $labels['filename'] = 'File name'; $labels['filesize'] = 'File size'; - $labels['preferhtml'] = 'Display HTML'; $labels['htmlmessage'] = 'HTML Message'; $labels['prettydate'] = 'Pretty dates'; - $labels['addtoaddressbook'] = 'Add to address book'; - -// weekdays short $labels['sun'] = 'Sun'; $labels['mon'] = 'Mon'; $labels['tue'] = 'Tue'; @@ -78,156 +61,132 @@ $labels['wed'] = 'Wed'; $labels['thu'] = 'Thu'; $labels['fri'] = 'Fri'; $labels['sat'] = 'Sat'; - -// weekdays long -$labels['sunday'] = 'Sunday'; -$labels['monday'] = 'Monday'; -$labels['tuesday'] = 'Tuesday'; +$labels['sunday'] = 'Sunday'; +$labels['monday'] = 'Monday'; +$labels['tuesday'] = 'Tuesday'; $labels['wednesday'] = 'Wednesday'; -$labels['thursday'] = 'Thursday'; -$labels['friday'] = 'Friday'; -$labels['saturday'] = 'Saturday'; - +$labels['thursday'] = 'Thursday'; +$labels['friday'] = 'Friday'; +$labels['saturday'] = 'Saturday'; $labels['today'] = 'Today'; - -// toolbar buttons -$labels['checkmail'] = 'Check for new messages'; -$labels['writenewmessage'] = 'Create a new message'; -$labels['replytomessage'] = 'Reply to the message'; +$labels['checkmail'] = 'Check for new messages'; +$labels['writenewmessage'] = 'Create a new message'; +$labels['replytomessage'] = 'Reply to the message'; $labels['replytoallmessage'] = 'Reply to sender and all recipients'; -$labels['forwardmessage'] = 'Forward the message'; -$labels['deletemessage'] = 'Delete message'; +$labels['forwardmessage'] = 'Forward the message'; +$labels['deletemessage'] = 'Delete message'; $labels['movemessagetotrash'] = 'Move message to "Deleted Items"'; -$labels['printmessage'] = 'Print this message'; -$labels['previousmessage'] = 'Show the previous message'; +$labels['printmessage'] = 'Print this message'; +$labels['previousmessage'] = 'Show the previous message'; $labels['previousmessages'] = 'Show previous set of messages'; -$labels['firstmessage'] = 'Show the first message'; -$labels['firstmessages'] = 'Show first set of messages'; -$labels['nextmessage'] = 'Show the next message'; -$labels['nextmessages'] = 'Show next set of messages'; -$labels['lastmessage'] = 'Show the last message'; -$labels['lastmessages'] = 'Show last set of messages'; -$labels['backtolist'] = 'Back to message list'; -$labels['viewsource'] = 'Show source'; - +$labels['firstmessage'] = 'Show the first message'; +$labels['firstmessages'] = 'Show first set of messages'; +$labels['nextmessage'] = 'Show the next message'; +$labels['nextmessages'] = 'Show next set of messages'; +$labels['lastmessage'] = 'Show the last message'; +$labels['lastmessages'] = 'Show last set of messages'; +$labels['backtolist'] = 'Back to message list'; +$labels['viewsource'] = 'Show source'; +$labels['markmessages'] = 'Mark messages'; +$labels['markread'] = 'As read'; +$labels['markunread'] = 'As unread'; $labels['select'] = 'Select'; $labels['all'] = 'All'; $labels['none'] = 'None'; $labels['unread'] = 'Unread'; - $labels['compact'] = 'Compact'; $labels['empty'] = 'Empty'; $labels['purge'] = 'Purge'; - $labels['quota'] = 'Disk usage'; -$labels['unknown'] = 'unknown'; -$labels['unlimited'] = 'unlimited'; - -$labels['quicksearch'] = 'Quick search'; -$labels['resetsearch'] = 'Reset search'; - - -// message compose -$labels['compose'] = 'Compose a message'; -$labels['savemessage'] = 'Save this draft'; -$labels['sendmessage'] = 'Send the message now'; -$labels['addattachment'] = 'Attach a file'; -$labels['charset'] = 'Charset'; -$labels['editortype'] = 'Editor type'; -$labels['returnreceipt'] = 'Return receipt'; - +$labels['unknown'] = 'unknown'; +$labels['unlimited'] = 'unlimited'; +$labels['quicksearch'] = 'Quick search'; +$labels['resetsearch'] = 'Reset search'; +$labels['compose'] = 'Compose a message'; +$labels['savemessage'] = 'Save this draft'; +$labels['sendmessage'] = 'Send the message now'; +$labels['addattachment'] = 'Attach a file'; +$labels['charset'] = 'Charset'; +$labels['editortype'] = 'Editor type'; +$labels['returnreceipt'] = 'Return receipt'; $labels['checkspelling'] = 'Check spelling'; $labels['resumeediting'] = 'Resume editing'; -$labels['revertto'] = 'Revert to'; - +$labels['revertto'] = 'Revert to'; $labels['attachments'] = 'Attachments'; $labels['upload'] = 'Upload'; -$labels['close'] = 'Close'; - -$labels['low'] = 'Low'; -$labels['lowest'] = 'Lowest'; -$labels['normal'] = 'Normal'; -$labels['high'] = 'High'; +$labels['close'] = 'Close'; +$labels['low'] = 'Low'; +$labels['lowest'] = 'Lowest'; +$labels['normal'] = 'Normal'; +$labels['high'] = 'High'; $labels['highest'] = 'Highest'; - -$labels['nosubject'] = '(no subject)'; +$labels['nosubject'] = '(no subject)'; $labels['showimages'] = 'Display images'; - $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Plain text'; - - -// address boook -$labels['name'] = 'Display name'; +$labels['addcc'] = 'Add Cc'; +$labels['addbcc'] = 'Add Bcc'; +$labels['addreplyto'] = 'Add Reply-To'; +$labels['mdnrequest'] = 'The sender of this message has asked to be notified when you read this message. Do you wish to notify the sender?'; +$labels['receiptread'] = 'Return Receipt (read)'; +$labels['yourmessage'] = 'This is a Return Receipt for your message'; +$labels['receiptnote'] = 'Note: This receipt only acknowledges that the message was displayed on the recipient\'s computer. There is no guarantee that the recipient has read or understood the message contents.'; +$labels['name'] = 'Display name'; $labels['firstname'] = 'First name'; -$labels['surname'] = 'Last name'; -$labels['email'] = 'E-Mail'; - +$labels['surname'] = 'Last name'; +$labels['email'] = 'E-Mail'; $labels['addcontact'] = 'Add new contact'; $labels['editcontact'] = 'Edit contact'; - -$labels['edit'] = 'Edit'; +$labels['edit'] = 'Edit'; $labels['cancel'] = 'Cancel'; -$labels['save'] = 'Save'; +$labels['save'] = 'Save'; $labels['delete'] = 'Delete'; - -$labels['newcontact'] = 'Create new contact card'; -$labels['deletecontact'] = 'Delete selected contacts'; -$labels['composeto'] = 'Compose mail to'; +$labels['newcontact'] = 'Create new contact card'; +$labels['deletecontact'] = 'Delete selected contacts'; +$labels['composeto'] = 'Compose mail to'; $labels['contactsfromto'] = 'Contacts $from to $to of $count'; -$labels['print'] = 'Print'; -$labels['export'] = 'Export'; - -$labels['previouspage'] = 'Show previous set'; -$labels['firstpage'] = 'Show first set'; -$labels['nextpage'] = 'Show next set'; -$labels['lastpage'] = 'Show last set'; - +$labels['print'] = 'Print'; +$labels['export'] = 'Export'; +$labels['previouspage'] = 'Show previous set'; +$labels['firstpage'] = 'Show first set'; +$labels['nextpage'] = 'Show next set'; +$labels['lastpage'] = 'Show last set'; $labels['groups'] = 'Groups'; $labels['personaladrbook'] = 'Personal Addresses'; - - -// settings -$labels['settingsfor'] = 'Settings for'; - -$labels['preferences'] = 'Preferences'; -$labels['userpreferences'] = 'User preferences'; -$labels['editpreferences'] = 'Edit user preferences'; - -$labels['identities'] = 'Identities'; -$labels['manageidentities'] = 'Manage identities for this account'; -$labels['newidentity'] = 'New identity'; - -$labels['newitem'] = 'New item'; -$labels['edititem'] = 'Edit item'; - -$labels['setdefault'] = 'Set default'; -$labels['language'] = 'Language'; -$labels['timezone'] = 'Time zone'; -$labels['pagesize'] = 'Rows per page'; +$labels['settingsfor'] = 'Settings for'; +$labels['preferences'] = 'Preferences'; +$labels['userpreferences'] = 'User preferences'; +$labels['editpreferences'] = 'Edit user preferences'; +$labels['identities'] = 'Identities'; +$labels['manageidentities'] = 'Manage identities for this account'; +$labels['newidentity'] = 'New identity'; +$labels['newitem'] = 'New item'; +$labels['edititem'] = 'Edit item'; +$labels['setdefault'] = 'Set default'; +$labels['language'] = 'Language'; +$labels['timezone'] = 'Time zone'; +$labels['pagesize'] = 'Rows per page'; $labels['signature'] = 'Signature'; -$labels['dstactive'] = 'Daylight savings'; +$labels['dstactive'] = 'Daylight savings'; $labels['htmleditor'] = 'Compose HTML messages'; $labels['htmlsignature'] = 'HTML signature'; $labels['previewpane'] = 'Show preview pane'; - -$labels['autosavedraft'] = 'Automatically save draft'; -$labels['everynminutes'] = 'every $n minutes'; -$labels['never'] = 'never'; - -$labels['folder'] = 'Folder'; -$labels['folders'] = 'Folders'; -$labels['foldername'] = 'Folder name'; -$labels['subscribed'] = 'Subscribed'; -$labels['create'] = 'Create'; -$labels['createfolder'] = 'Create new folder'; +$labels['autosavedraft'] = 'Automatically save draft'; +$labels['everynminutes'] = 'every $n minutes'; +$labels['never'] = 'never'; +$labels['folder'] = 'Folder'; +$labels['folders'] = 'Folders'; +$labels['foldername'] = 'Folder name'; +$labels['subscribed'] = 'Subscribed'; +$labels['messagecount'] = 'Messages'; +$labels['create'] = 'Create'; +$labels['createfolder'] = 'Create new folder'; $labels['rename'] = 'Rename'; $labels['renamefolder'] = 'Rename folder'; -$labels['deletefolder'] = 'Delete folder'; -$labels['managefolders'] = 'Manage folders'; - +$labels['deletefolder'] = 'Delete folder'; +$labels['managefolders'] = 'Manage folders'; $labels['sortby'] = 'Sort by'; -$labels['sortasc'] = 'Sort ascending'; +$labels['sortasc'] = 'Sort ascending'; $labels['sortdesc'] = 'Sort descending'; ?> \ No newline at end of file diff --git a/program/localization/en_GB/messages.inc b/program/localization/en_GB/messages.inc index dce6e12..8cc0b20 100644 --- a/program/localization/en_GB/messages.inc +++ b/program/localization/en_GB/messages.inc @@ -6,19 +6,19 @@ | language/en_GB/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Weiran Zhang (weiran@weiran.co.uk) | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: messages.inc 1091 2008-02-15 15:13:38Z tomekp $ */ $messages = array(); -$messages['loginfailed'] = 'Login failed'; +$messages['loginfailed'] = 'Login failed'; $messages['cookiesdisabled'] = 'Your browser does not accept cookies'; $messages['sessionerror'] = 'Your session is invalid or has expired'; $messages['imaperror'] = 'Connection to IMAP server failed'; @@ -43,16 +43,16 @@ $messages['sendingfailed'] = 'Failed to send message'; $messages['errorsaving'] = 'An error occured while saving'; $messages['errormoving'] = 'Could not move the message'; $messages['errordeleting'] = 'Could not delete the message'; -$messages['deletecontactconfirm'] = 'Do you really want to delete the selected contact(s)?'; +$messages['deletecontactconfirm'] = 'Do you really want to delete the selected contact(s)?'; $messages['deletemessagesconfirm'] = 'Do you really want to delete the selected message(s)?'; -$messages['deletefolderconfirm'] = 'Do you really want to delete this folder?'; -$messages['purgefolderconfirm'] = 'Do you really want to delete all messages in this folder?'; +$messages['deletefolderconfirm'] = 'Do you really want to delete this folder?'; +$messages['purgefolderconfirm'] = 'Do you really want to delete all messages in this folder?'; $messages['formincomplete'] = 'The form was not completely filled out'; $messages['noemailwarning'] = 'Please enter a valid email address'; -$messages['nonamewarning'] = 'Please enter a name'; +$messages['nonamewarning'] = 'Please enter a name'; $messages['nopagesizewarning'] = 'Please enter a page size'; $messages['norecipientwarning'] = 'Please enter at least one recipient'; -$messages['nosubjectwarning'] = 'The "Subject" field is empty. Would you like to enter one now?'; +$messages['nosubjectwarning'] = 'The "Subject" field is empty. Would you like to enter one now?'; $messages['nobodywarning'] = 'Send this message without any text?'; $messages['notsentwarning'] = 'Your message has not been sent. Do you want to discard it?'; $messages['noldapserver'] = 'Please select an LDAP server to search'; @@ -64,7 +64,7 @@ $messages['searching'] = 'Searching...'; $messages['checking'] = 'Checking...'; $messages['nospellerrors'] = 'No spelling errors found'; $messages['folderdeleted'] = 'Folder successfully deleted'; -$messages['deletedsuccessfully'] = "Successfully deleted"; +$messages['deletedsuccessfully'] = 'Successfully deleted'; $messages['converting'] = 'Removing formatting from message...'; $messages['messageopenerror'] = 'Could not load message from server'; $messages['fileuploaderror'] = 'File upload failed'; @@ -74,5 +74,9 @@ $messages['copyerror'] = 'Could not copy any addresses'; $messages['sourceisreadonly'] = 'This address source is read-only'; $messages['errorsavingcontact'] = 'Could not save the contact address'; $messages['movingmessage'] = 'Moving message...'; +$messages['receiptsent'] = 'Successfully sent a read receipt'; +$messages['errorsendingreceipt'] = 'Could not send the receipt'; +$messages['nodeletelastidentity'] = 'You cannot delete this identity, it\'s your last one.'; +$messages['addsubfolderhint'] = 'This folder will be created as subfolder of the currently selected one'; ?> \ No newline at end of file diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index c893a63..2a01df6 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -6,14 +6,14 @@ | language/en_US/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: labels.inc 1052 2008-02-12 18:41:53Z thomasb $ */ @@ -109,6 +109,9 @@ $labels['lastmessage'] = 'Show the last message'; $labels['lastmessages'] = 'Show last set of messages'; $labels['backtolist'] = 'Back to message list'; $labels['viewsource'] = 'Show source'; +$labels['markmessages'] = 'Mark messages'; +$labels['markread'] = 'As read'; +$labels['markunread'] = 'As unread'; $labels['select'] = 'Select'; $labels['all'] = 'All'; @@ -160,6 +163,11 @@ $labels['addcc'] = 'Add Cc'; $labels['addbcc'] = 'Add Bcc'; $labels['addreplyto'] = 'Add Reply-To'; +// mdn +$labels['mdnrequest'] = 'The sender of this message has asked to be notified when you read this message. Do you wish to notify the sender?'; +$labels['receiptread'] = 'Return Receipt (read)'; +$labels['yourmessage'] = 'This is a Return Receipt for your message'; +$labels['receiptnote'] = 'Note: This receipt only acknowledges that the message was displayed on the recipient\'s computer. There is no guarantee that the recipient has read or understood the message contents.'; // address boook $labels['name'] = 'Display name'; @@ -223,6 +231,7 @@ $labels['folder'] = 'Folder'; $labels['folders'] = 'Folders'; $labels['foldername'] = 'Folder name'; $labels['subscribed'] = 'Subscribed'; +$labels['messagecount'] = 'Messages'; $labels['create'] = 'Create'; $labels['createfolder'] = 'Create new folder'; $labels['rename'] = 'Rename'; diff --git a/program/localization/en_US/messages.inc b/program/localization/en_US/messages.inc index 8240eda..e94ee40 100644 --- a/program/localization/en_US/messages.inc +++ b/program/localization/en_US/messages.inc @@ -6,14 +6,14 @@ | language/en_US/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: messages.inc 1052 2008-02-12 18:41:53Z thomasb $ */ @@ -74,5 +74,9 @@ $messages['copyerror'] = 'Could not copy any addresses'; $messages['sourceisreadonly'] = 'This address source is read only'; $messages['errorsavingcontact'] = 'Could not save the contact address'; $messages['movingmessage'] = 'Moving message...'; +$messages['receiptsent'] = 'Successfully sent a read receipt'; +$messages['errorsendingreceipt'] = 'Could not send the receipt'; +$messages['nodeletelastidentity'] = 'You cannot delete this identity, it\'s your last one.'; +$messages['addsubfolderhint'] = 'This folder will be created as subfolder of the currently selected one'; ?> \ No newline at end of file diff --git a/program/localization/eo/labels.inc b/program/localization/eo/labels.inc index 9ec4f7a..85e2362 100644 --- a/program/localization/eo/labels.inc +++ b/program/localization/eo/labels.inc @@ -6,72 +6,52 @@ | language/eo/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Andreas van Cranenburgh | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 858 2007-10-04 10:14:19Z Stiwi $ - */ - $labels = array(); - -// login page -$labels['welcome'] = 'Bonvenon al $product'; -$labels['username'] = 'Uzanta-nomo'; -$labels['password'] = 'Pasvorto'; -$labels['server'] = 'Servilo'; -$labels['login'] = 'Ensalutu'; - -// taskbar -$labels['logout'] = 'Elsalutu'; -$labels['mail'] = 'Retpoŝto'; +$labels['welcome'] = 'Bonvenon al $product'; +$labels['username'] = 'Uzantnomo'; +$labels['password'] = 'Pasvorto'; +$labels['server'] = 'Servilo'; +$labels['login'] = 'Ensalutu'; +$labels['logout'] = 'Elsalutu'; +$labels['mail'] = 'Retpoŝto'; $labels['settings'] = 'Preferoj'; $labels['addressbook'] = 'Adresaro'; - -// mailbox names -$labels['inbox'] = 'Ricevitujo'; +$labels['inbox'] = 'Ricevitujo'; $labels['drafts'] = 'Malnetujo'; -$labels['sent'] = 'Senditujo'; -$labels['trash'] = 'Rubujo'; -$labels['junk'] = 'Spamujo'; #FIXME. eble fatrasujo. - -// message listing -$labels['subject'] = 'Subjekto'; #temo? -$labels['from'] = 'Sendanto'; -$labels['to'] = 'Ricevanto'; -$labels['cc'] = 'Kopio'; -$labels['bcc'] = 'Blindkopio'; +$labels['sent'] = 'Senditujo'; +$labels['trash'] = 'Rubujo'; +$labels['junk'] = 'Spamujo'; +$labels['subject'] = 'Temo'; +$labels['from'] = 'Sendanto'; +$labels['to'] = 'Ricevanto'; +$labels['cc'] = 'Kopio'; +$labels['bcc'] = 'Blindkopio'; $labels['replyto'] = 'Respondu-Al'; -$labels['date'] = 'Dato'; -$labels['size'] = 'Grando'; +$labels['date'] = 'Dato'; +$labels['size'] = 'Grando'; $labels['priority'] = 'Prioritato'; $labels['organization'] = 'Organizo'; - -// aliases -$labels['reply-to'] = $labels['replyto']; - +$labels['reply-to'] = 'Respondu-Al'; $labels['mailboxlist'] = 'Dosierujoj'; $labels['messagesfromto'] = 'Mesaĝoj ekde $from ĝis $to de $count'; $labels['messagenrof'] = 'Mesaĝo $nr-a de $count'; - -$labels['moveto'] = 'transloku al...'; +$labels['moveto'] = 'transloku al...'; $labels['download'] = 'elŝutu'; - $labels['filename'] = 'Dosiernomo'; $labels['filesize'] = 'Dosiergrando'; - $labels['preferhtml'] = 'Montru HTML'; $labels['htmlmessage'] = 'HTML Mesaĝo'; $labels['prettydate'] = 'Agrablaj Datoj'; - $labels['addtoaddressbook'] = 'Aldonu al adresaro'; - -// weekdays short $labels['sun'] = 'Dim'; $labels['mon'] = 'Lun'; $labels['tue'] = 'Mar'; @@ -79,155 +59,132 @@ $labels['wed'] = 'Mer'; $labels['thu'] = 'Ä´aÅ­'; $labels['fri'] = 'Ven'; $labels['sat'] = 'Sab'; - -// weekdays long -$labels['sunday'] = 'Dimanĉo'; -$labels['monday'] = 'Luno'; -$labels['tuesday'] = 'Mardo'; +$labels['sunday'] = 'Dimanĉo'; +$labels['monday'] = 'Luno'; +$labels['tuesday'] = 'Mardo'; $labels['wednesday'] = 'Merkredo'; -$labels['thursday'] = 'Ä´aÅ­do'; -$labels['friday'] = 'Vendredo'; -$labels['saturday'] = 'Sabato'; - +$labels['thursday'] = 'Ä´aÅ­do'; +$labels['friday'] = 'Vendredo'; +$labels['saturday'] = 'Sabato'; $labels['today'] = 'HodiaÅ­'; - -// toolbar buttons -$labels['checkmail'] = 'Kontrolu por novaj mesaĝoj'; -$labels['writenewmessage'] = 'Verku novan mesaĝon'; -$labels['replytomessage'] = 'Respondu al mesaĝo'; -$labels['replytoallmessage'] = 'Respondu al sendanto kaj ĉiu ricevanto'; -$labels['forwardmessage'] = 'Plusendu mesaĝon'; -$labels['deletemessage'] = 'Transloku mesaĝon al rubujo'; -$labels['printmessage'] = 'Printu ĉi tiun mesaĝon'; -$labels['previousmessage'] = 'Montru antaÅ­an mesaĝon'; +$labels['checkmail'] = 'Kontrolu, ĉu novaj mesaĝoj'; +$labels['writenewmessage'] = 'Verku novan mesaĝon'; +$labels['replytomessage'] = 'Respondu al mesaĝo'; +$labels['replytoallmessage'] = 'Respondu al sendinto kaj ĉiu ricevinto'; +$labels['forwardmessage'] = 'Plusendu mesaĝon'; +$labels['deletemessage'] = 'Forigu mesaĝon'; +$labels['movemessagetotrash'] = 'Transloku mesaĝon al rubujo'; +$labels['printmessage'] = 'Printu ĉi tiun mesaĝon'; +$labels['previousmessage'] = 'Montru antaÅ­an mesaĝon'; $labels['previousmessages'] = 'Montru antaÅ­an aron de mesaĝoj'; -$labels['firstmessage'] = 'Montru unuan mesaĝon'; -$labels['firstmessages'] = 'Montru unuan aron de mesaĝoj'; -$labels['nextmessage'] = 'Montru sekvan mesaĝon'; -$labels['nextmessages'] = 'Montru sekvan aron de mesaĝoj'; -$labels['lastmessage'] = 'Montru lastan mesaĝon'; -$labels['lastmessages'] = 'Montru lastan aron de mesaĝoj'; -$labels['backtolist'] = 'Reen al mesaĝo-listo'; -$labels['viewsource'] = 'Montru fonton'; - +$labels['firstmessage'] = 'Montru unuan mesaĝon'; +$labels['firstmessages'] = 'Montru unuan aron de mesaĝoj'; +$labels['nextmessage'] = 'Montru sekvan mesaĝon'; +$labels['nextmessages'] = 'Montru sekvan aron de mesaĝoj'; +$labels['lastmessage'] = 'Montru lastan mesaĝon'; +$labels['lastmessages'] = 'Montru lastan aron de mesaĝoj'; +$labels['backtolist'] = 'Reen al mesaĝo-listo'; +$labels['viewsource'] = 'Montru fonton'; +$labels['markmessages'] = 'Marku mesaĝojn'; +$labels['markread'] = 'Kiel legita'; +$labels['markunread'] = 'Kiel nelegita'; $labels['select'] = 'Elektu'; $labels['all'] = 'Ĉion'; $labels['none'] = 'Nenion'; -$labels['unread'] = 'Nelegatan'; - +$labels['unread'] = 'Nelegitan'; $labels['compact'] = 'Kompakta'; $labels['empty'] = 'Malplena'; $labels['purge'] = 'Senrubigu'; - $labels['quota'] = 'Diskuzo'; -$labels['unknown'] = 'nekonata'; -$labels['unlimited'] = 'senlimo'; - -$labels['quicksearch'] = 'Rapida serĉo'; -$labels['resetsearch'] = 'Vakigu serĉon'; - - -// message compose -$labels['compose'] = 'Verku mesaĝon'; -$labels['sendmessage'] = 'Sendu mesaĝon nun'; -$labels['savemessage'] = 'Savu ĉi tiun malneton'; -$labels['addattachment'] = 'Alfiksu dosieron'; -$labels['charset'] = 'Karakteraro'; -$labels['editortype'] = 'Speco de redaktilo'; #??? -$labels['returnreceipt'] = 'Return receipt'; - -$labels['checkspelling'] = 'Kontrolu grafismon'; -$labels['resumeediting'] = 'Rekomencu redakti'; -$labels['revertto'] = 'Reiru al'; - +$labels['unknown'] = 'nekonata'; +$labels['unlimited'] = 'senlima'; +$labels['quicksearch'] = 'Rapida serĉo'; +$labels['resetsearch'] = 'Vakigu serĉon'; +$labels['compose'] = 'Verku mesaĝon'; +$labels['savemessage'] = 'Savu ĉi tiun malneton'; +$labels['sendmessage'] = 'Sendu mesaĝon'; +$labels['addattachment'] = 'Alfiksu dosieron'; +$labels['charset'] = 'Karaktraro'; +$labels['editortype'] = 'Speco de redaktilo'; +$labels['returnreceipt'] = 'Return receipt'; +$labels['checkspelling'] = 'Kontrolu literumadon'; +$labels['resumeediting'] = 'Rekomencu redaktadon'; +$labels['revertto'] = 'Reiru al'; $labels['attachments'] = 'Alfiksaĵoj'; $labels['upload'] = 'Alŝutu'; -$labels['close'] = 'Fermu'; - -$labels['low'] = 'Malalta'; -$labels['lowest'] = 'Plej malalta'; -$labels['normal'] = 'Normala'; -$labels['high'] = 'Alta'; +$labels['close'] = 'Fermu'; +$labels['low'] = 'Malalta'; +$labels['lowest'] = 'Plej malalta'; +$labels['normal'] = 'Normala'; +$labels['high'] = 'Alta'; $labels['highest'] = 'Plej alta'; - -$labels['nosubject'] = '(sensubjekto)'; +$labels['nosubject'] = '(sen temo)'; $labels['showimages'] = 'Montru bildojn'; - $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Plata teksto'; - - -// address boook -$labels['name'] = 'Nomo'; -$labels['firstname'] = 'AntaÅ­a nomo'; -$labels['surname'] = 'Familia nomo'; -$labels['email'] = 'Retpoŝto'; - +$labels['addcc'] = 'Aldonu kopi-ricevanton'; +$labels['addbcc'] = 'Aldonu blindan kopi-ricevanton'; +$labels['addreplyto'] = 'Aldonu Respondu-Al'; +$labels['mdnrequest'] = 'La sendinto de ĉi tiu mesaĝo petis sciigon de kiam vi legas ĝin. Ĉu volas sciigi la sendinton?'; +$labels['receiptread'] = 'Legokonfirmo'; +$labels['yourmessage'] = 'Jen estas legokonfirmo de via mesaĝo'; +$labels['receiptnote'] = 'Notu: Ĉi tiu konfirmo nur asertas ke la mesaĝo estis malfermita je la komputilo de la ricevinto. Ne estas garantio ke la ricevinto legis aÅ­ komprenis la enhavon.'; +$labels['name'] = 'Nomo'; +$labels['firstname'] = 'AntaÅ­nomo'; +$labels['surname'] = 'Familia nomo'; +$labels['email'] = 'Retpoŝto'; $labels['addcontact'] = 'Aldonu kontakton'; $labels['editcontact'] = 'Redaktu kontakton'; - -$labels['edit'] = 'Redaktu'; +$labels['edit'] = 'Redaktu'; $labels['cancel'] = 'Rezignu'; -$labels['save'] = 'Savu'; +$labels['save'] = 'Savu'; $labels['delete'] = 'Forigu'; - -$labels['newcontact'] = 'Kreu novan kontaktaĵon'; -$labels['deletecontact'] = 'Forigu elektatajn kontaktojn'; -$labels['composeto'] = 'Verku mesaĝon al'; +$labels['newcontact'] = 'Kreu novan kontakton'; +$labels['deletecontact'] = 'Forigu elektatajn kontaktojn'; +$labels['composeto'] = 'Verku mesaĝon al'; $labels['contactsfromto'] = 'Kontaktoj ekde $from ĝis $to de $count'; -$labels['print'] = 'Printu'; -$labels['export'] = 'Eksportu'; - -$labels['previouspage'] = 'Montru auntaÅ­an aron'; -$labels['firstpage'] = 'Montru unuan aron'; -$labels['nextpage'] = 'Montru sekvan aron'; -$labels['lastpage'] = 'Montru lastan aron'; - +$labels['print'] = 'Printu'; +$labels['export'] = 'Eksportu'; +$labels['previouspage'] = 'Montru auntaÅ­an'; +$labels['firstpage'] = 'Montru unuan'; +$labels['nextpage'] = 'Montru sekvan'; +$labels['lastpage'] = 'Montru lastan'; $labels['groups'] = 'Grupoj'; $labels['personaladrbook'] = 'Persona Adresoj'; - - -// settings -$labels['settingsfor'] = 'Preferoj de'; - -$labels['preferences'] = 'Preferoj'; -$labels['userpreferences'] = 'Uzant-preferoj'; -$labels['editpreferences'] = 'Redajtu uzant-preferojn'; - -$labels['identities'] = 'Identoj'; -$labels['manageidentities'] = 'Administru identoj de ĉi tiu konto'; -$labels['newidentity'] = 'Nova idento'; - -$labels['newitem'] = 'Nova ero'; -$labels['edititem'] = 'Redaktu eron'; - -$labels['setdefault'] = 'Agordu kiel defaÅ­lta'; -$labels['language'] = 'Lingvo'; -$labels['timezone'] = 'Tempzono'; -$labels['pagesize'] = 'Mesaĝoj po paĝo'; +$labels['settingsfor'] = 'Preferoj de'; +$labels['preferences'] = 'Preferoj'; +$labels['userpreferences'] = 'Uzant-preferoj'; +$labels['editpreferences'] = 'Redaktu uzant-preferojn'; +$labels['identities'] = 'Identoj'; +$labels['manageidentities'] = 'Administru identojn de ĉi tiu konto'; +$labels['newidentity'] = 'Nova idento'; +$labels['newitem'] = 'Nova ero'; +$labels['edititem'] = 'Redaktu eron'; +$labels['setdefault'] = 'Agordu kiel norma'; +$labels['language'] = 'Lingvo'; +$labels['timezone'] = 'Tempzono'; +$labels['pagesize'] = 'Mesaĝoj po paĝo'; $labels['signature'] = 'Subskribo'; -$labels['dstactive'] = 'Taglumsavado'; -$labels['htmleditor'] = 'Verku HTML mesaĝojn'; +$labels['dstactive'] = 'Taglumsavado'; +$labels['htmleditor'] = 'Uzado de HTML-redaktilo'; $labels['htmlsignature'] = 'HTML subskribo'; $labels['previewpane'] = 'Montru antaÅ­rigardejon'; - -$labels['autosavedraft'] = 'AÅ­tomate savu malneton'; -$labels['everynminutes'] = 'ĉiu $n minutoj'; -$labels['never'] = 'neniam'; - -$labels['folder'] = 'Dosierujo'; -$labels['folders'] = 'Dosierujoj'; -$labels['foldername'] = 'Dosierujo-nomo'; -$labels['subscribed'] = 'Abonata'; -$labels['create'] = 'Kreu'; -$labels['createfolder'] = 'Kreu novan dosierujon'; +$labels['autosavedraft'] = 'AÅ­tomate savu malneton'; +$labels['everynminutes'] = 'ĉiujn $n minutojn'; +$labels['never'] = 'neniam'; +$labels['folder'] = 'Dosierujo'; +$labels['folders'] = 'Dosierujoj'; +$labels['foldername'] = 'Dosierujo-nomo'; +$labels['subscribed'] = 'Abonata'; +$labels['messagecount'] = 'Mesaĝoj'; +$labels['create'] = 'Kreu'; +$labels['createfolder'] = 'Kreu novan dosierujon'; $labels['rename'] = 'Renomu'; $labels['renamefolder'] = 'Renomu dosierujon'; -$labels['deletefolder'] = 'Forigu dosierujon'; -$labels['managefolders'] = 'Administru dosierujon'; - +$labels['deletefolder'] = 'Forigu dosierujon'; +$labels['managefolders'] = 'Administru dosierujon'; $labels['sortby'] = 'Ordigu per'; -$labels['sortasc'] = 'Ordigu kreskante'; +$labels['sortasc'] = 'Ordigu kreskante'; $labels['sortdesc'] = 'Ordigu malkreskante'; -?> \ No newline at end of file +?> diff --git a/program/localization/eo/messages.inc b/program/localization/eo/messages.inc index 9051d1d..a831dbc 100644 --- a/program/localization/eo/messages.inc +++ b/program/localization/eo/messages.inc @@ -6,75 +6,75 @@ | language/eo/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Andreas van Cranenburgh pardonu? +$messages['blockedimages'] = 'Por protekti vian privatecon, foraj bildoj estas blokitaj en ĉi tiu mesaĝo.'; +$messages['encryptedmessage'] = 'Ĉi tiu mesaĝo estas ĉifrata kaj ne estas montrebla. Pardonu!'; $messages['nocontactsfound'] = 'Trovis neniun kontakton'; -$messages['contactnotfound'] = 'La petitan kontakton ne trovis'; - -$messages['sendingfailed'] = 'Nesukcesis sendi mesaĝon'; -$messages['errorsaving'] = 'Eraro dum savo de mesaĝo'; +$messages['contactnotfound'] = 'La petita kontakto ne trovis'; +$messages['sendingfailed'] = 'Ne sukcesis sendi mesaĝon'; +$messages['errorsaving'] = 'Okazis eraro dum savo de mesaĝo'; $messages['errormoving'] = 'Ne povis transloki mesaĝon'; $messages['errordeleting'] = 'Ne povis forigi mesaĝon'; -$messages['deletecontactconfirm'] = 'Ĉu vi vere volas forigi la elektata(j)n kontakto(j)n?'; +$messages['deletecontactconfirm'] = 'Ĉu vi vere volas forigi la elektata(j)n kontakto(j)n?'; $messages['deletemessagesconfirm'] = 'Ĉu vi vere volas forigi la elektata(j)n mesaĝo(j)n?'; -$messages['deletefolderconfirm'] = 'Ĉu vi vere volas forigi la elektatan dosierujon?'; -$messages['purgefolderconfirm'] = 'Ĉu vi vere volas forigi ĉiun mesaĝon en ĉi tiu dosierujo?'; -$messages['formincomplete'] = 'La formularo ne estis kompletiĝita'; -$messages['noemailwarning'] = 'Bonvolu skribu validan retpoŝt-adreson'; -$messages['nonamewarning'] = 'Bonvulu skribu nomon'; -$messages['nopagesizewarning'] = 'Bonvolu skribu paĝ-grando'; -$messages['norecipientwarning'] = 'Bonvolu skribu minumume unu ricevonto'; -$messages['nosubjectwarning'] = 'La "Subjekto" kampo estas malplena. Ĉu vi volas skribi subjekton nun?'; -$messages['nobodywarning'] = 'Ĉu sendu ĉi tiun mesaĝon sen teksto?'; +$messages['deletefolderconfirm'] = 'Ĉu vi vere volas forigi la elektatan dosierujon?'; +$messages['purgefolderconfirm'] = 'Ĉu vi vere volas forigi ĉiun mesaĝon el ĉi tiu dosierujo?'; +$messages['formincomplete'] = 'La formularo ne estis kompletigita'; +$messages['noemailwarning'] = 'Bonvolu enmeti validan retpoŝt-adreson'; +$messages['nonamewarning'] = 'Bonvulu enmeti nomon'; +$messages['nopagesizewarning'] = 'Bonvolu enmeti paĝ-grando'; +$messages['norecipientwarning'] = 'Bonvolu enmeti minumume unu ricevonto'; +$messages['nosubjectwarning'] = 'La temkampo estas malplena. Ĉu vi volas skribi temon nun?'; +$messages['nobodywarning'] = 'Ĉu sendi ĉi tiun mesaĝon sen teksto?'; $messages['notsentwarning'] = 'Mesaĝo ne estas sendita. Ĉu vi volas forigi vian mesaĝon?'; -$messages['noldapserver'] = 'Bonvolu elekti ldap-servilo por serĉi'; -$messages['nocontactsreturned'] = 'Trovis nenion kontakton'; -$messages['nosearchname'] = 'Bonvolu skribi kontakt-nomo aÅ­ retpoŝt-adreson.'; +$messages['noldapserver'] = 'Bonvolu elekti ldap-servilon por serĉado'; +$messages['nocontactsreturned'] = 'Trovis neniun kontakton'; +$messages['nosearchname'] = 'Bonvolu enmeti kontakt-nomon aÅ­ retpoŝt-adreson.'; $messages['searchsuccessful'] = 'trovis $nr mesaĝojn'; $messages['searchnomatch'] = 'Serĉo donis nenion'; -$messages['searching'] = 'Serĉante...'; -$messages['checking'] = 'Kontrolante...'; -$messages['nospellerrors'] = 'Neniujn grafismaj erarojn trovis'; +$messages['searching'] = 'Serĉanta...'; +$messages['checking'] = 'Kontrolanta...'; +$messages['nospellerrors'] = 'Neniujn literumada eraro trovita'; $messages['folderdeleted'] = 'Forigis dosierujon sukcese'; -$messages['deletedsuccessfully'] = "Sukcese forigis"; -$messages['converting'] = 'Forigante formata de mesaĝo...'; -$messages['messageopenerror'] = 'Ne povis ŝarĝi mesaĝon de servilo'; +$messages['deletedsuccessfully'] = 'Sukcese forigis'; +$messages['converting'] = 'Foriganta formatan de mesaĝo...'; +$messages['messageopenerror'] = 'Ne povis ŝargi mesaĝon de servilo'; $messages['fileuploaderror'] = 'Malsukcesis alŝuti dosieron'; -$messages['filesizeerror'] = 'La dosiero superas la maksimuma grando de $size'; - +$messages['filesizeerror'] = 'La alŝutita dosiero superas la maksimuman grandon de $size'; $messages['copysuccess'] = 'Sukcese kopiis $nr adresojn'; -$messages['copyerror'] = 'Ne povis kopii ajn adresojn'; +$messages['copyerror'] = 'Ne povis kopii ajn adreson'; $messages['sourceisreadonly'] = 'Ĉi tiu adres-fonto estas nurlegebla'; $messages['errorsavingcontact'] = 'Ne povis savi la kontakt-adreson'; +$messages['movingmessage'] = 'Translokanta mesaĝon...'; +$messages['receiptsent'] = 'Sukcese sendis konfirmon'; +$messages['errorsendingreceipt'] = 'Ne povis sendi konfirmon'; +$messages['nodeletelastidentity'] = 'Vi ne povas forigi ĉi tiun identon, ĉar ĝi estas la lasta'; +$messages['addsubfolderhint'] = 'Ĉi tiu dosierujo estos farita kiel subdosierujo de la nune elektita dosierujo'; - -?> \ No newline at end of file +?> diff --git a/program/localization/es/labels.inc b/program/localization/es/labels.inc index ea20eba..54a5e8c 100644 --- a/program/localization/es/labels.inc +++ b/program/localization/es/labels.inc @@ -6,7 +6,7 @@ | language/es/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -16,7 +16,7 @@ | http://david.grajal.net | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 873 2007-10-16 19:06:34Z yllar $ + @version $Id: labels.inc 1079 2008-02-14 07:47:11Z tomekp $ */ @@ -47,7 +47,7 @@ $labels['priority'] = 'Prioridad'; $labels['organization'] = 'Organización'; $labels['reply-to'] = 'Respuesta a'; $labels['mailboxlist'] = 'Bandejas'; -$labels['messagesfromto'] = 'Mensajes desde $from a $to de $count'; +$labels['messagesfromto'] = 'Mensajes $from a $to de $count'; $labels['messagenrof'] = 'Mensaje $nr de $count'; $labels['moveto'] = 'mover a...'; $labels['download'] = 'descargar'; @@ -60,7 +60,7 @@ $labels['addtoaddressbook'] = 'Añadir a contactos'; $labels['sun'] = 'Dom'; $labels['mon'] = 'Lun'; $labels['tue'] = 'Mar'; -$labels['wed'] = 'Mie'; +$labels['wed'] = 'Mié'; $labels['thu'] = 'Jue'; $labels['fri'] = 'Vie'; $labels['sat'] = 'Sáb'; @@ -90,6 +90,9 @@ $labels['lastmessage'] = 'Mostrar último mensaje'; $labels['lastmessages'] = 'Mostrar último grupo de mensajes'; $labels['backtolist'] = 'Volver a la lista de mensajes'; $labels['viewsource'] = 'Mostrar código'; +$labels['markmessages'] = 'Marcar mensajes'; +$labels['markread'] = 'Como leído'; +$labels['markunread'] = 'Como no leído'; $labels['select'] = 'Elija'; $labels['all'] = 'Todos'; $labels['none'] = 'Ninguno'; @@ -127,6 +130,10 @@ $labels['plaintoggle'] = 'Texto'; $labels['addcc'] = 'Añadir Cc'; $labels['addbcc'] = 'Añadir Bcc'; $labels['addreplyto'] = 'Añadir Respuesta a'; +$labels['mdnrequest'] = 'El emisor de este mensaje desea ser notificado cuando usted lo lea. ¿Quiere enviar esta notificación?'; +$labels['receiptread'] = 'Notificación de lectura'; +$labels['yourmessage'] = 'Esta es una notificación de lectura de su mensaje'; +$labels['receiptnote'] = 'Nota: Esta notificación sólo significa que su mensaje fue mostrado en la computadora del receptor. No hay garantía de que el receptor haya leído o entendido el contenido del mensaje.'; $labels['name'] = 'Nombre completo'; $labels['firstname'] = 'Nombre'; $labels['surname'] = 'Apellido'; @@ -174,6 +181,7 @@ $labels['folder'] = 'Bandeja'; $labels['folders'] = 'Bandejas'; $labels['foldername'] = 'Nombre de bandeja'; $labels['subscribed'] = 'Suscrita'; +$labels['messagecount'] = 'Mensajes'; $labels['create'] = 'Crear'; $labels['createfolder'] = 'Crear nueva bandeja'; $labels['rename'] = 'Renombrar'; @@ -184,4 +192,4 @@ $labels['sortby'] = 'Ordenar por'; $labels['sortasc'] = 'Orden ascendente'; $labels['sortdesc'] = 'Orden descendente'; -?> +?> \ No newline at end of file diff --git a/program/localization/es/messages.inc b/program/localization/es/messages.inc index 32a5a44..3092a3f 100644 --- a/program/localization/es/messages.inc +++ b/program/localization/es/messages.inc @@ -6,7 +6,7 @@ | language/es/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -15,7 +15,7 @@ | Lito Jornero | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 873 2007-10-16 19:06:34Z yllar $ + @version $Id: messages.inc 1079 2008-02-14 07:47:11Z tomekp $ */ @@ -76,5 +76,9 @@ $messages['copyerror'] = 'No se pudo copiar ninguna dirección'; $messages['sourceisreadonly'] = 'Esta dirección es de sólo-lectura'; $messages['errorsavingcontact'] = 'No se pudo guardar la dirección de contacto'; $messages['movingmessage'] = 'Moviendo mensaje...'; +$messages['receiptsent'] = 'La notificación de lectura se ha enviado con éxito.'; +$messages['errorsendingreceipt'] = 'No se ha podido enviar la notificación de lectura.'; +$messages['nodeletelastidentity'] = 'No se puede borrar esta identidad puesto que es la última.'; +$messages['addsubfolderhint'] = 'Esta carpeta se creará como una subcarpeta dentro de la carpeta seleccionada'; -?> +?> \ No newline at end of file diff --git a/program/localization/et_EE/labels.inc b/program/localization/et_EE/labels.inc index 5246121..f66eddd 100644 --- a/program/localization/et_EE/labels.inc +++ b/program/localization/et_EE/labels.inc @@ -6,7 +6,7 @@ | language/et_EE/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -87,6 +87,9 @@ $labels['lastmessage'] = 'Näita viimast kirja'; $labels['lastmessages'] = 'Näita viimast kirjade komplekti'; $labels['backtolist'] = 'Tagasi kirjade nimekirja'; $labels['viewsource'] = 'Näita lähtekoodi'; +$labels['markmessages'] = 'Märgi kirjad'; +$labels['markread'] = 'Loetuks'; +$labels['markunread'] = 'Mitte loetuks'; $labels['select'] = 'Vali'; $labels['all'] = 'kõik'; $labels['none'] = 'mitte midagi'; @@ -124,6 +127,10 @@ $labels['plaintoggle'] = 'Lihttekst'; $labels['addcc'] = 'Lisa koopia'; $labels['addbcc'] = 'Lisa pimekoopia'; $labels['addreplyto'] = 'Lisa vastus aadressile'; +$labels['mdnrequest'] = 'Selle kirja saatja soovib saada kinnitust kirja lugemise kohta. Soovid kinnituse saata ?'; +$labels['receiptread'] = 'Kättesaamiskinnitus (leotud)'; +$labels['yourmessage'] = 'See on sinu saadetud kirja kättesaamiskinnitus'; +$labels['receiptnote'] = 'Märkus: Kättesaamiskinnituse saamine tähendab ainult seda, et saaja on kirja avanud. Pole mingit garantiid, et ta kirja tegelikult luges ja selle sisust aru sai.'; $labels['name'] = 'Näidatav nimi'; $labels['firstname'] = 'Eesnimi'; $labels['surname'] = 'Perekonnanimi'; @@ -171,6 +178,7 @@ $labels['folder'] = 'Kaust'; $labels['folders'] = 'Kaustad'; $labels['foldername'] = 'Kausta nimi'; $labels['subscribed'] = 'Näitan'; +$labels['messagecount'] = 'Kirju'; $labels['create'] = 'Loo'; $labels['createfolder'] = 'Uue kausta loomine'; $labels['rename'] = 'Nimeta ümber'; @@ -181,4 +189,4 @@ $labels['sortby'] = 'Järjesta'; $labels['sortasc'] = 'Järjesta kasvavalt'; $labels['sortdesc'] = 'Järjesta kahanevalt'; -?> \ No newline at end of file +?> diff --git a/program/localization/et_EE/messages.inc b/program/localization/et_EE/messages.inc index 7077d1d..ecea271 100644 --- a/program/localization/et_EE/messages.inc +++ b/program/localization/et_EE/messages.inc @@ -6,7 +6,7 @@ | language/et_EE/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -74,5 +74,8 @@ $messages['copyerror'] = 'Ühegi aadressi kopeerimine ei õnnestunud '; $messages['sourceisreadonly'] = 'Aadressi asukohas puuduvad kirjutusõigused'; $messages['errorsavingcontact'] = 'Kontakti aadressi salvestamine ebaõnnestus'; $messages['movingmessage'] = 'Kirja liigutamine...'; - -?> \ No newline at end of file +$messages['receiptsent'] = 'Kättesaamiskinnitus saadetud'; +$messages['errorsendingreceipt'] = 'Ei õnnestunud kättesaamiskinnitust saata'; +$messages['nodeletelastidentity'] = 'See identiteet on viimane ja seda ei saa kustutada.'; +$messages['addsubfolderhint'] = 'See kataloog luuakse valitud kausta alamkataloogina.'; +?> diff --git a/program/localization/eu/labels.inc b/program/localization/eu/labels.inc index f040729..2fb5fee 100644 --- a/program/localization/eu/labels.inc +++ b/program/localization/eu/labels.inc @@ -5,14 +5,14 @@ | language/eu/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundQube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Bicyus | +-----------------------------------------------------------------------+ - $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $ */ diff --git a/program/localization/eu/messages.inc b/program/localization/eu/messages.inc index 4bb6e2e..279efd8 100644 --- a/program/localization/eu/messages.inc +++ b/program/localization/eu/messages.inc @@ -5,14 +5,14 @@ | language/eu/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: pi | +-----------------------------------------------------------------------+ - $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $ */ diff --git a/program/localization/fa/labels.inc b/program/localization/fa/labels.inc index 47ddfbb..6b81d1d 100644 --- a/program/localization/fa/labels.inc +++ b/program/localization/fa/labels.inc @@ -1,183 +1,192 @@ - | - | Mohammad Ebrahim Mohammadi Panah | - +-----------------------------------------------------------------------+ - -*/ - -$labels = array(); -$labels['welcome'] = 'به $product خوش آمدید'; -$labels['username'] = 'نام کاربری'; -$labels['password'] = 'گذرواژه'; -$labels['server'] = 'خادم'; -$labels['login'] = 'ورود'; -$labels['logout'] = 'خروج'; -$labels['mail'] = 'رایانامه'; -$labels['settings'] = 'تنظیمات شخصی'; -$labels['addressbook'] = 'دفتر نشانی‌ها'; -$labels['inbox'] = 'صندوق'; -$labels['drafts'] = 'پیش‌نویس‌ها'; -$labels['sent'] = 'فرستاده‌شده‌ها'; -$labels['trash'] = 'زباله‌دان'; -$labels['junk'] = 'بنجل'; -$labels['subject'] = 'موضوع'; -$labels['from'] = 'فرستنده'; -$labels['to'] = 'گیرنده'; -$labels['cc'] = 'رونوشت'; -$labels['bcc'] = 'رونوشت مخفی'; -$labels['replyto'] = 'پاسخ-به'; -$labels['date'] = 'تاریخ'; -$labels['size'] = 'حجم'; -$labels['priority'] = 'اولویت'; -$labels['organization'] = 'سازمان‌دهی'; -$labels['reply-to'] = 'پاسخ-به'; -$labels['mailboxlist'] = 'پوشه‌ها'; -$labels['messagesfromto'] = 'پیغام‌های $from تا $to از $count تا'; -$labels['messagenrof'] = 'پیغام $nr از $count تا'; -$labels['moveto'] = '...انتقال به'; -$labels['download'] = 'پایین‌گذاری'; -$labels['filename'] = 'نام پرونده'; -$labels['filesize'] = 'اندازه‌ی پرونده'; -$labels['preferhtml'] = 'نمایش HTML'; -$labels['htmlmessage'] = 'پیغام HTML'; -$labels['prettydate'] = 'تاریخ‌های زیبا'; -$labels['addtoaddressbook'] = 'افزودن به دفتر نشانی‌ها'; -$labels['sun'] = 'یک‌شنبه'; -$labels['mon'] = 'دوشنبه'; -$labels['tue'] = 'سه‌شنبه'; -$labels['wed'] = 'چهارشنبه'; -$labels['thu'] = 'پنج‌شنبه'; -$labels['fri'] = 'جمعه'; -$labels['sat'] = 'شنبه'; -$labels['sunday'] = 'یک‌شنبه'; -$labels['monday'] = 'دوشنبه'; -$labels['tuesday'] = 'سه‌شنبه'; -$labels['wednesday'] = 'چهارشنبه'; -$labels['thursday'] = 'پنج‌شنبه'; -$labels['friday'] = 'جمعه'; -$labels['saturday'] = 'شنبه'; -$labels['today'] = 'امروز'; -$labels['checkmail'] = 'بررسی برای پیغام‌های جدید'; -$labels['writenewmessage'] = 'ایجاد پیغام جدید'; -$labels['replytomessage'] = 'پاسخ به پیغام'; -$labels['replytoallmessage'] = 'پاسخ به فرستنده وتمام گیرنده‌ها'; -$labels['forwardmessage'] = 'ارجاع پیغام'; -$labels['deletemessage'] = 'حذف پیغام'; -$labels['movemessagetotrash'] = 'انتقال پیغام به زباله‌دان'; -$labels['printmessage'] = 'چاپ این پیغام'; -$labels['previousmessage'] = 'نمایش پیغام قبلی'; -$labels['previousmessages'] = 'نمایش دسته‌ی قبلی پیغام‌ها'; -$labels['firstmessage'] = 'نمایش اولین پیغام'; -$labels['firstmessages'] = 'نمایش اولین دسته‌ی پیغام‌ها'; -$labels['nextmessage'] = 'نمایش پیغام بعدی'; -$labels['nextmessages'] = 'نمایش دسته‌ی بعدی پیغام‌ها'; -$labels['lastmessage'] = 'نمایش آخرین پیغام'; -$labels['lastmessages'] = 'نمایش آخرین دسته‌ی پیغام‌ها'; -$labels['backtolist'] = 'بازگشت به فهرست پیغام‌ها'; -$labels['viewsource'] = 'نمایش منبع'; -$labels['select'] = 'انتخاب'; -$labels['all'] = 'همه'; -$labels['none'] = 'هیچ'; -$labels['unread'] = 'ناخوانده'; -$labels['compact'] = 'فشرده'; -$labels['empty'] = 'خالی'; -$labels['purge'] = 'خرد کردن'; -$labels['quota'] = 'فضای استفاده شده'; -$labels['unknown'] = 'ناشناخته'; -$labels['unlimited'] = 'نامحدود'; -$labels['quicksearch'] = 'جستجوی سریع'; -$labels['resetsearch'] = 'شروع مجدد جستجو'; -$labels['compose'] = 'نوشتن پیغام'; -$labels['savemessage'] = 'ذخیره‌ی این پیش‌نویس'; -$labels['sendmessage'] = 'ارسال پیغام'; -$labels['addattachment'] = 'پیوست کردن یک پرونده'; -$labels['charset'] = 'مجموعه‌نمایه'; -$labels['editortype'] = 'نوع ویرایش‌گر'; -$labels['returnreceipt'] = 'گیرنده‌ی پیغام بازگشت'; -$labels['checkspelling'] = 'بررسی املایی'; -$labels['resumeediting'] = 'ادامه‌ی ویرایش'; -$labels['revertto'] = 'برگرداندن به'; -$labels['attachments'] = 'پیوست‌ها'; -$labels['upload'] = 'بالاگذاری'; -$labels['close'] = 'بستن'; -$labels['low'] = 'کم'; -$labels['lowest'] = 'کم‌ترین'; -$labels['normal'] = 'معمولی'; -$labels['high'] = 'زیاد'; -$labels['highest'] = 'بیش‌ترین'; -$labels['nosubject'] = '(بدون موضوع)'; -$labels['showimages'] = 'نمایش عکس‌ها'; -$labels['htmltoggle'] = 'HTML'; -$labels['plaintoggle'] = 'متن ساده'; -$labels['addcc'] = 'افزودن رونوشت'; -$labels['addbcc'] = 'افزودن رونوشت مخفی'; -$labels['addreplyto'] = 'افزودن پاسخ-به'; -$labels['name'] = 'نمایش نام'; -$labels['firstname'] = 'نام'; -$labels['surname'] = 'نام خانوادگی'; -$labels['email'] = 'رایانامه'; -$labels['addcontact'] = 'افزودن تماس جدید'; -$labels['editcontact'] = 'ویرایش تماس'; -$labels['edit'] = 'ویرایش'; -$labels['cancel'] = 'لغو'; -$labels['save'] = 'ذخیره'; -$labels['delete'] = 'حذف'; -$labels['newcontact'] = 'ایجاد کارت تماس جدید'; -$labels['deletecontact'] = 'حذف تماس‌های انتخاب شده'; -$labels['composeto'] = 'نوشتن نامه به'; -$labels['contactsfromto'] = 'تماس‌های $from تا $to از $count تا'; -$labels['print'] = 'چاپ'; -$labels['export'] = 'صدور'; -$labels['previouspage'] = 'نمایش دسته‌ی قبلی'; -$labels['firstpage'] = 'نمایش دسته‌ی اول'; -$labels['nextpage'] = 'نمایش دسته‌ی بعدی'; -$labels['lastpage'] = 'نمایش دسته‌ی آخر'; -$labels['groups'] = 'گروه‌ها'; -$labels['personaladrbook'] = 'نشانی‌های شخصی'; -$labels['settingsfor'] = 'تنظیمات'; -$labels['preferences'] = 'ترجیحات'; -$labels['userpreferences'] = 'ترجیحات کاربر'; -$labels['editpreferences'] = 'ویرایش ترجیحات کاربر'; -$labels['identities'] = 'شناسه‌ها'; -$labels['manageidentities'] = 'مدیریت شناسه‌ها برای این حساب'; -$labels['newidentity'] = 'شناسه جدید'; -$labels['newitem'] = 'مورد جدید'; -$labels['edititem'] = 'ویرایش مورد'; -$labels['setdefault'] = 'پیش‌فرض کن'; -$labels['language'] = 'زبان'; -$labels['timezone'] = 'محدوده‌ی زمانی'; -$labels['pagesize'] = 'سطر در صفحه'; -$labels['signature'] = 'امضا'; -$labels['dstactive'] = 'ساعت تابستانی'; -$labels['htmleditor'] = 'HTML ‌نوشتن پیغام‌های'; -$labels['htmlsignature'] = 'HTML امضای'; -$labels['previewpane'] = 'نمایش قاب پیش‌نمایش'; -$labels['autosavedraft'] = 'ذخیره‌ی خودکار پیش‌نویس'; -$labels['everynminutes'] = 'هر $n دقیقه'; -$labels['never'] = 'هرگز'; -$labels['folder'] = 'پوشه'; -$labels['folders'] = 'پوشه‌ها'; -$labels['foldername'] = 'نام پوشه'; -$labels['subscribed'] = 'مورد اشتراک'; -$labels['create'] = 'ایجاد'; -$labels['createfolder'] = 'ایجاد پوشه‌ی جدید'; -$labels['rename'] = 'تغییر نام'; -$labels['renamefolder'] = 'تغییر نام پوشه'; -$labels['deletefolder'] = 'حذف پوشه'; -$labels['managefolders'] = 'مدیریت پوشه‌ها'; -$labels['sortby'] = 'مرتب‌سازی بر اساس'; -$labels['sortasc'] = 'مرتب‌سازی صعودی'; -$labels['sortdesc'] = 'مرتب‌سازی نزولی'; - -?> + | + | Anoosh | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$labels = array(); +$labels['welcome'] = 'به $product خوش آمدید'; +$labels['username'] = 'نام کاربری'; +$labels['password'] = 'گذرواژه'; +$labels['server'] = 'خادم'; +$labels['login'] = 'ورود'; +$labels['logout'] = 'خروج'; +$labels['mail'] = 'رایانامه'; +$labels['settings'] = 'تنظیمات شخصی'; +$labels['addressbook'] = 'دفتر نشانی‌ها'; +$labels['inbox'] = 'صندوق'; +$labels['drafts'] = 'پیش‌نویس‌ها'; +$labels['sent'] = 'فرستاده‌شده‌ها'; +$labels['trash'] = 'زباله‌دان'; +$labels['junk'] = 'بنجل'; +$labels['subject'] = 'موضوع'; +$labels['from'] = 'فرستنده'; +$labels['to'] = 'گیرنده'; +$labels['cc'] = 'رونوشت'; +$labels['bcc'] = 'رونوشت مخفی'; +$labels['replyto'] = 'پاسخ-به'; +$labels['date'] = 'تاریخ'; +$labels['size'] = 'حجم'; +$labels['priority'] = 'اولویت'; +$labels['organization'] = 'سازمان‌دهی'; +$labels['reply-to'] = 'پاسخ-به'; +$labels['mailboxlist'] = 'پوشه‌ها'; +$labels['messagesfromto'] = 'پیغام‌های $from تا $to از $count تا'; +$labels['messagenrof'] = 'پیغام $nr از $count تا'; +$labels['moveto'] = '...انتقال به'; +$labels['download'] = 'پایین‌گذاری'; +$labels['filename'] = 'نام پرونده'; +$labels['filesize'] = 'اندازه‌ی پرونده'; +$labels['preferhtml'] = 'نمایش HTML'; +$labels['htmlmessage'] = 'پیغام HTML'; +$labels['prettydate'] = 'تاریخ‌های زیبا'; +$labels['addtoaddressbook'] = 'افزودن به دفتر نشانی‌ها'; +$labels['sun'] = 'یک‌شنبه'; +$labels['mon'] = 'دوشنبه'; +$labels['tue'] = 'سه‌شنبه'; +$labels['wed'] = 'چهارشنبه'; +$labels['thu'] = 'پنج‌شنبه'; +$labels['fri'] = 'جمعه'; +$labels['sat'] = 'شنبه'; +$labels['sunday'] = 'یک‌شنبه'; +$labels['monday'] = 'دوشنبه'; +$labels['tuesday'] = 'سه‌شنبه'; +$labels['wednesday'] = 'چهارشنبه'; +$labels['thursday'] = 'پنج‌شنبه'; +$labels['friday'] = 'جمعه'; +$labels['saturday'] = 'شنبه'; +$labels['today'] = 'امروز'; +$labels['checkmail'] = 'بررسی برای پیغام‌های جدید'; +$labels['writenewmessage'] = 'ایجاد پیغام جدید'; +$labels['replytomessage'] = 'پاسخ به پیغام'; +$labels['replytoallmessage'] = 'پاسخ به فرستنده وتمام گیرنده‌ها'; +$labels['forwardmessage'] = 'ارجاع پیغام'; +$labels['deletemessage'] = 'حذف پیغام'; +$labels['movemessagetotrash'] = 'انتقال پیغام به زباله‌دان'; +$labels['printmessage'] = 'چاپ این پیغام'; +$labels['previousmessage'] = 'نمایش پیغام قبلی'; +$labels['previousmessages'] = 'نمایش دسته‌ی قبلی پیغام‌ها'; +$labels['firstmessage'] = 'نمایش اولین پیغام'; +$labels['firstmessages'] = 'نمایش اولین دسته‌ی پیغام‌ها'; +$labels['nextmessage'] = 'نمایش پیغام بعدی'; +$labels['nextmessages'] = 'نمایش دسته‌ی بعدی پیغام‌ها'; +$labels['lastmessage'] = 'نمایش آخرین پیغام'; +$labels['lastmessages'] = 'نمایش آخرین دسته‌ی پیغام‌ها'; +$labels['backtolist'] = 'بازگشت به فهرست پیغام‌ها'; +$labels['viewsource'] = 'نمایش منبع'; +$labels['markmessages'] = 'علامت‌گذاری پیغام‌ها'; +$labels['markread'] = 'به عنوان خوانده‌شده'; +$labels['markunread'] = 'به عنوان خوانده‌نشده'; +$labels['select'] = 'انتخاب'; +$labels['all'] = 'همه'; +$labels['none'] = 'هیچ'; +$labels['unread'] = 'ناخوانده'; +$labels['compact'] = 'فشرده'; +$labels['empty'] = 'خالی'; +$labels['purge'] = 'خرد کردن'; +$labels['quota'] = 'فضای استفاده شده'; +$labels['unknown'] = 'ناشناخته'; +$labels['unlimited'] = 'نامحدود'; +$labels['quicksearch'] = 'جستجوی سریع'; +$labels['resetsearch'] = 'شروع مجدد جستجو'; +$labels['compose'] = 'نوشتن پیغام'; +$labels['savemessage'] = 'ذخیره‌ی این پیش‌نویس'; +$labels['sendmessage'] = 'ارسال پیغام'; +$labels['addattachment'] = 'پیوست کردن یک پرونده'; +$labels['charset'] = 'مجموعه‌نمایه'; +$labels['editortype'] = 'نوع ویرایش‌گر'; +$labels['returnreceipt'] = 'رسید دریافت'; +$labels['checkspelling'] = 'بررسی املایی'; +$labels['resumeediting'] = 'ادامه‌ی ویرایش'; +$labels['revertto'] = 'برگرداندن به'; +$labels['attachments'] = 'پیوست‌ها'; +$labels['upload'] = 'بالاگذاری'; +$labels['close'] = 'بستن'; +$labels['low'] = 'کم'; +$labels['lowest'] = 'کم‌ترین'; +$labels['normal'] = 'معمولی'; +$labels['high'] = 'زیاد'; +$labels['highest'] = 'بیش‌ترین'; +$labels['nosubject'] = '(بدون موضوع)'; +$labels['showimages'] = 'نمایش عکس‌ها'; +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'متن ساده'; +$labels['addcc'] = 'افزودن رونوشت'; +$labels['addbcc'] = 'افزودن رونوشت مخفی'; +$labels['addreplyto'] = 'افزودن پاسخ-به'; +$labels['mdnrequest'] = 'فرستندهٔ این پیغام خواسته است که وقتی شما این پیغام را می‌خوانید، آگاه شود. آیا مایلید فرستنده را آگاه کنید؟'; +$labels['receiptread'] = 'رسید دریافت (خواندن)'; +$labels['yourmessage'] = 'این یک رسید دریافت برای پیغام شماست'; +$labels['receiptnote'] = 'تذکر: این رسید فقط تصدیق می‌کند که پیغام، روی رایانهٔ گیرنده نمایش داده شده است. هیچ تضمینی نیست که گیرنده، محتوای پیغام را خوانده یا فهمیده باشد.'; +$labels['name'] = 'نمایش نام'; +$labels['firstname'] = 'نام'; +$labels['surname'] = 'نام خانوادگی'; +$labels['email'] = 'رایانامه'; +$labels['addcontact'] = 'افزودن تماس جدید'; +$labels['editcontact'] = 'ویرایش تماس'; +$labels['edit'] = 'ویرایش'; +$labels['cancel'] = 'لغو'; +$labels['save'] = 'ذخیره'; +$labels['delete'] = 'حذف'; +$labels['newcontact'] = 'ایجاد کارت تماس جدید'; +$labels['deletecontact'] = 'حذف تماس‌های انتخاب شده'; +$labels['composeto'] = 'نوشتن نامه به'; +$labels['contactsfromto'] = 'تماس‌های $from تا $to از $count تا'; +$labels['print'] = 'چاپ'; +$labels['export'] = 'صدور'; +$labels['previouspage'] = 'نمایش دسته‌ی قبلی'; +$labels['firstpage'] = 'نمایش دسته‌ی اول'; +$labels['nextpage'] = 'نمایش دسته‌ی بعدی'; +$labels['lastpage'] = 'نمایش دسته‌ی آخر'; +$labels['groups'] = 'گروه‌ها'; +$labels['personaladrbook'] = 'نشانی‌های شخصی'; +$labels['settingsfor'] = 'تنظیمات'; +$labels['preferences'] = 'ترجیحات'; +$labels['userpreferences'] = 'ترجیحات کاربر'; +$labels['editpreferences'] = 'ویرایش ترجیحات کاربر'; +$labels['identities'] = 'شناسه‌ها'; +$labels['manageidentities'] = 'مدیریت شناسه‌ها برای این حساب'; +$labels['newidentity'] = 'شناسه جدید'; +$labels['newitem'] = 'مورد جدید'; +$labels['edititem'] = 'ویرایش مورد'; +$labels['setdefault'] = 'پیش‌فرض کن'; +$labels['language'] = 'زبان'; +$labels['timezone'] = 'محدوده‌ی زمانی'; +$labels['pagesize'] = 'سطر در صفحه'; +$labels['signature'] = 'امضا'; +$labels['dstactive'] = 'ساعت تابستانی'; +$labels['htmleditor'] = 'HTML ‌نوشتن پیغام‌های'; +$labels['htmlsignature'] = 'HTML امضای'; +$labels['previewpane'] = 'نمایش قاب پیش‌نمایش'; +$labels['autosavedraft'] = 'ذخیره‌ی خودکار پیش‌نویس'; +$labels['everynminutes'] = 'هر $n دقیقه'; +$labels['never'] = 'هرگز'; +$labels['folder'] = 'پوشه'; +$labels['folders'] = 'پوشه‌ها'; +$labels['foldername'] = 'نام پوشه'; +$labels['subscribed'] = 'مورد اشتراک'; +$labels['messagecount'] = 'پیغام‌ها'; +$labels['create'] = 'ایجاد'; +$labels['createfolder'] = 'ایجاد پوشه‌ی جدید'; +$labels['rename'] = 'تغییر نام'; +$labels['renamefolder'] = 'تغییر نام پوشه'; +$labels['deletefolder'] = 'حذف پوشه'; +$labels['managefolders'] = 'مدیریت پوشه‌ها'; +$labels['sortby'] = 'مرتب‌سازی بر اساس'; +$labels['sortasc'] = 'مرتب‌سازی صعودی'; +$labels['sortdesc'] = 'مرتب‌سازی نزولی'; + +?> \ No newline at end of file diff --git a/program/localization/fa/messages.inc b/program/localization/fa/messages.inc index e885abb..2020b11 100644 --- a/program/localization/fa/messages.inc +++ b/program/localization/fa/messages.inc @@ -5,15 +5,16 @@ | language/fa/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2006, RoundQube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Translators: | - | Anoosh | - | Mohammad Ebrahim Mohammadi Panah | + | Author: Mohammad Ebrahim Mohammadi Panah | + | Anoosh | +-----------------------------------------------------------------------+ + @version $Id$ + */ $messages = array(); @@ -73,5 +74,9 @@ $messages['copyerror'] = 'رونوشت‌برداری از نشانی‌ها ن $messages['sourceisreadonly'] = 'این منبع نشانی فقط‌خواندنی است'; $messages['errorsavingcontact'] = 'ذخیره‌ی نشانی تماس ناموفق بود'; $messages['movingmessage'] = 'در حال انتقال پیغام ...'; +$messages['receiptsent'] = 'رسید خواندن با موفقیت ارسال شد'; +$messages['errorsendingreceipt'] = 'ناتوان از ارسال رسید'; +$messages['nodeletelastidentity'] = 'نمی‌توانید این هویت را حذف کنید، زیرا آخرین هویت شماست.'; +$messages['addsubfolderhint'] = 'پوشه به عنوان زیرپوشه ای ساخته خواهد شد که هم اکنون انتخاب شده است'; -?> +?> \ No newline at end of file diff --git a/program/localization/fi/labels.inc b/program/localization/fi/labels.inc index 329c685..4be2c8b 100644 --- a/program/localization/fi/labels.inc +++ b/program/localization/fi/labels.inc @@ -6,7 +6,7 @@ | language/fi/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Veljo Velling | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 612 2007-06-12 18:17:21Z thomasb $ + @version $Id: labels.inc 1151 2008-02-28 19:56:47Z thomasb $ */ @@ -75,7 +75,8 @@ $labels['writenewmessage'] = 'Kirjoita uusi viesti'; $labels['replytomessage'] = 'Vastaa viestiin'; $labels['replytoallmessage'] = 'Vastaa kaikille'; $labels['forwardmessage'] = 'Välitä viesti'; -$labels['deletemessage'] = 'Siirrä viesti roskakoriin'; +$labels['deletemessage'] = 'Poista viesti'; +$labels['movemessagetotrash'] = 'Siirrä viesti roskakoriin'; $labels['printmessage'] = 'Tulosta viesti'; $labels['previousmessage'] = 'Näytä edellinen viesti'; $labels['previousmessages'] = 'Näytä edelliset viestit'; @@ -87,6 +88,9 @@ $labels['lastmessage'] = 'Näytä viimeinen viesti'; $labels['lastmessages'] = 'Näytä viimeinen viestiluettelo'; $labels['backtolist'] = 'Takaisin viesteihin'; $labels['viewsource'] = 'Näytä lähdekoodi'; +$labels['markmessages'] = 'Merkitse viestit'; +$labels['markread'] = 'luetuiksi'; +$labels['markunread'] = 'ei-luetuiksi'; $labels['select'] = 'Valitse'; $labels['all'] = 'Kaikki'; $labels['none'] = 'Ei mitään'; @@ -100,8 +104,8 @@ $labels['unlimited'] = 'rajoittamaton'; $labels['quicksearch'] = 'Pikahaku'; $labels['resetsearch'] = 'Nollaa haku'; $labels['compose'] = 'Viestin kirjoitus'; -$labels['sendmessage'] = 'Lähetä viesti'; $labels['savemessage'] = 'Tallenna tämä luonnos'; +$labels['sendmessage'] = 'Lähetä viesti'; $labels['addattachment'] = 'Liitetiedosto'; $labels['charset'] = 'Merkistö'; $labels['editortype'] = 'Editorin tyyppi'; @@ -121,6 +125,13 @@ $labels['nosubject'] = '(ei otsikkoa)'; $labels['showimages'] = 'Näytä kuvat'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Tavallinen teksti'; +$labels['addcc'] = 'Lisää kopio'; +$labels['addbcc'] = 'Lisää piilokopio'; +$labels['addreplyto'] = 'Lisää vastausosoite'; +$labels['mdnrequest'] = 'Viestin lähettäjä on pyytänyt kuittauksen siitä että olet lukenut viestin. Haluatko lähettää kuittauksen?'; +$labels['receiptread'] = 'Lukukuittaus'; +$labels['yourmessage'] = 'Tämä viesti on kuittaus lähettämällesi viestille'; +$labels['receiptnote'] = 'Huom! Kuittaus kertoo vain siitä, että viesti on avattu vastaanottajan tietokoneella. Se ei tarkoita että vastaanottaja on myös lukenut tai ymmärtänyt viestin.'; $labels['name'] = 'Näkyvä nimi'; $labels['firstname'] = 'Etunimi'; $labels['surname'] = 'Sukunimi'; @@ -168,6 +179,7 @@ $labels['folder'] = 'Kansio'; $labels['folders'] = 'Kansiot'; $labels['foldername'] = 'Kansion nimi'; $labels['subscribed'] = 'Näytetään'; +$labels['messagecount'] = 'Viestejä'; $labels['create'] = 'Luo uusi'; $labels['createfolder'] = 'Luo uusi kansio'; $labels['rename'] = 'Nimeä uudelleen'; diff --git a/program/localization/fi/messages.inc b/program/localization/fi/messages.inc index b314248..e4e1a59 100644 --- a/program/localization/fi/messages.inc +++ b/program/localization/fi/messages.inc @@ -6,7 +6,7 @@ | language/fi/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Veljo Velling | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 612 2007-06-12 18:17:21Z thomasb $ + @version $Id: messages.inc 1151 2008-02-28 19:56:47Z thomasb $ */ @@ -55,7 +55,7 @@ $messages['nopagesizewarning'] = 'Anna sivukoko'; $messages['norecipientwarning'] = 'Anna ainakin yksi vastaanottaja'; $messages['nosubjectwarning'] = '"Otsikko" -kenttä on tyhjä. Haluaisitko kirjoittaa viestillesi otsikon?'; $messages['nobodywarning'] = 'Lähetetäänkö viesti ilman tekstiä?'; -$messages['notsentwarning'] = 'Viestiä ei lähetetty. Haluatko poistaa viestin?'; +$messages['notsentwarning'] = 'Viestiä ei lähethttp://translator.roundcube.net/index.phpetty. Haluatko poistaa viestin?'; $messages['noldapserver'] = 'Valitse LDAP -palvelin'; $messages['nocontactsreturned'] = 'Yhtään kontaktia ei löytynyt'; $messages['nosearchname'] = 'Anna kontaktin nimi tai sähköpostiosoite'; @@ -74,5 +74,10 @@ $messages['copysuccess'] = 'Kopioitu $nr osoitetta onnistuneesti'; $messages['copyerror'] = 'Yhtään osoitetta ei voitu kopioida'; $messages['sourceisreadonly'] = 'Tämän osoitteen lähde on kirjoitussuojattu'; $messages['errorsavingcontact'] = 'Yhteystietoa ei voitu tallentaa'; +$messages['movingmessage'] = 'Siirretään viestiä...'; +$messages['receiptsent'] = 'Lukukuittaus lähetetty onnistuneesti'; +$messages['errorsendingreceipt'] = 'Lukukuittausta ei voitu lähettää'; +$messages['nodeletelastidentity'] = 'Et voi poistaa tätä identiteettiä, koska se on ainoa jäljelläoleva'; +$messages['addsubfolderhint'] = 'Uusi kansio luodaan valitun kansion alikansiona'; ?> \ No newline at end of file diff --git a/program/localization/fr/labels.inc b/program/localization/fr/labels.inc index 2693ea9..e35d6bd 100644 --- a/program/localization/fr/labels.inc +++ b/program/localization/fr/labels.inc @@ -6,7 +6,7 @@ | language/fr/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -77,6 +77,7 @@ $labels['replytomessage'] = 'Répondre au message'; $labels['replytoallmessage'] = 'Répondre à tous'; $labels['forwardmessage'] = 'Transmettre le message'; $labels['deletemessage'] = 'Déplacer le message dans la corbeille'; +$labels['movemessagetotrash'] = 'Déplacer le message dans la corbeille'; $labels['printmessage'] = 'Imprimer ce message'; $labels['previousmessage'] = 'Voir le message précédent'; $labels['previousmessages'] = 'Voir les messages précédents'; @@ -88,6 +89,9 @@ $labels['lastmessage'] = 'Voir le dernier message'; $labels['lastmessages'] = 'Voir la dernière page de messages'; $labels['backtolist'] = 'Retourner à la liste des messages'; $labels['viewsource'] = 'Voir le source'; +$labels['markmessages'] = 'Marquer les messages'; +$labels['markread'] = 'Comme lus'; +$labels['markunread'] = 'Comme non lus'; $labels['select'] = 'Sélectionner'; $labels['all'] = 'Tous'; $labels['none'] = 'Aucun'; @@ -101,8 +105,8 @@ $labels['unlimited'] = 'illimitée'; $labels['quicksearch'] = 'Recherche rapide'; $labels['resetsearch'] = 'Réinitialiser la recherche'; $labels['compose'] = 'Composer un nouveau message'; -$labels['sendmessage'] = 'Envoyer le message maintenant'; $labels['savemessage'] = 'Sauvegarder ce brouillon'; +$labels['sendmessage'] = 'Envoyer le message maintenant'; $labels['addattachment'] = 'Joindre un fichier'; $labels['charset'] = 'Encodage'; $labels['editortype'] = 'Type d\'éditeur'; @@ -122,6 +126,13 @@ $labels['nosubject'] = '(pas de sujet)'; $labels['showimages'] = 'Afficher les images'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'texte brut'; +$labels['addcc'] = 'Ajouter Cc'; +$labels['addbcc'] = 'Ajouter Cci'; +$labels['addreplyto'] = 'Ajouter Répondre à'; +$labels['mdnrequest'] = 'L\'expéditeur de ce message a demandé d\'être prévenu quand vous lirez ce message. Souhaitez-vous prévenir l\'expéditeur ?'; +$labels['receiptread'] = 'Accusé de réception (lire)'; +$labels['yourmessage'] = 'Ceci est un accusé de réception pour votre message'; +$labels['receiptnote'] = 'Note : Cet accusé de réception indique seulement que le message a été affiché sur l\'ordinateur du destinataire. Il n\'y a aucune garantie que le destinataire a lu ou compris le contenu du message.'; $labels['name'] = 'Nom à afficher'; $labels['firstname'] = 'Prénom'; $labels['surname'] = 'Nom'; @@ -143,7 +154,7 @@ $labels['firstpage'] = 'Voir la première page'; $labels['nextpage'] = 'Montrer page suivante'; $labels['lastpage'] = 'Voir la dernière page'; $labels['groups'] = 'Groupes'; -$labels['personaladrbook'] = 'Adresses personnelle'; +$labels['personaladrbook'] = 'Adresses personnelles'; $labels['settingsfor'] = 'Paramètres pour'; $labels['preferences'] = 'Préférences'; $labels['userpreferences'] = 'Préférences utilisateur'; @@ -169,6 +180,7 @@ $labels['folder'] = 'Dossier'; $labels['folders'] = 'Dossiers'; $labels['foldername'] = 'Nom du dossier'; $labels['subscribed'] = 'Abonné'; +$labels['messagecount'] = 'Messages'; $labels['create'] = 'Créer'; $labels['createfolder'] = 'Créer un nouveau dossier'; $labels['rename'] = 'Renommer'; @@ -179,4 +191,4 @@ $labels['sortby'] = 'Trier par'; $labels['sortasc'] = 'Tri ascendant'; $labels['sortdesc'] = 'Tri descendant'; -?> \ No newline at end of file +?> diff --git a/program/localization/fr/messages.inc b/program/localization/fr/messages.inc index 4e3985b..fcd59fc 100644 --- a/program/localization/fr/messages.inc +++ b/program/localization/fr/messages.inc @@ -6,7 +6,7 @@ | language/fr/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -75,5 +75,10 @@ $messages['copysuccess'] = 'Succès de la copie des $nr adresses'; $messages['copyerror'] = 'Ne peut pas copier les adresses'; $messages['sourceisreadonly'] = 'Cette source d\'adresse est en lecture seule'; $messages['errorsavingcontact'] = 'Ne peut pas enregistrer l\'adresse du contact'; +$messages['movingmessage'] = 'Déplacement du message...'; +$messages['receiptsent'] = 'L\'accusé de réception a bien été envoyé'; +$messages['errorsendingreceipt'] = 'L\'accusé de réception n\'a pas pu être envoyé'; +$messages['nodeletelastidentity'] = 'Vous ne pouvez pas effacer votre seule identité.'; +$messages['addsubfolderhint'] = 'Ce dossier sera créé comme sous-dossier de celui sélectionné.'; ?> \ No newline at end of file diff --git a/program/localization/ga_IE/labels.inc b/program/localization/ga_IE/labels.inc index 96b0d94..557912e 100755 --- a/program/localization/ga_IE/labels.inc +++ b/program/localization/ga_IE/labels.inc @@ -5,13 +5,15 @@ | language/ga/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2007, RoundQube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Noel Bourke (cros13) | +-----------------------------------------------------------------------+ + @version $Id$ + */ $labels = array(); diff --git a/program/localization/ga_IE/messages.inc b/program/localization/ga_IE/messages.inc index cd118be..cca590c 100755 --- a/program/localization/ga_IE/messages.inc +++ b/program/localization/ga_IE/messages.inc @@ -5,13 +5,15 @@ | language/ga/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2007, RoundQube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Noel Bourke (cros13) | +-----------------------------------------------------------------------+ + @version $Id$ + */ $messages = array(); diff --git a/program/localization/ge/labels.inc b/program/localization/ge/labels.inc new file mode 100755 index 0000000..75ccc1d --- /dev/null +++ b/program/localization/ge/labels.inc @@ -0,0 +1,237 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id: labels.inc 842 2007-10-20 13:55:02Z zaza$ + +*/ + +$labels = array(); + +// login page +$labels['welcome'] = 'მოგესალმებათ $product'; +$labels['username'] = 'მომხმარებელი'; +$labels['password'] = 'პაროლი'; +$labels['server'] = 'სერვერი'; +$labels['login'] = 'შესვლა'; + +// taskbar +$labels['logout'] = 'გამოსვლა'; +$labels['mail'] = 'ელ–ფოსტა'; +$labels['settings'] = 'პარამეტრები'; +$labels['addressbook'] = 'მისამართები'; + +// mailbox names +$labels['inbox'] = 'მიღებული'; +$labels['drafts'] = 'დროებითი'; +$labels['sent'] = 'გაგზავნილები'; +$labels['trash'] = 'წაშლილები'; +$labels['junk'] = 'სპამი'; + +// message listing +$labels['subject'] = 'სათაური'; +$labels['from'] = 'გამგზავნი'; +$labels['to'] = 'მიმღები'; +$labels['cc'] = 'კოპია'; +$labels['bcc'] = 'ფარული'; +$labels['replyto'] = 'დაბრუნება'; +$labels['date'] = 'თარიღი'; +$labels['size'] = 'ზომა'; +$labels['priority'] = 'პრიორიტეტი'; +$labels['organization'] = 'ორგანიზაცია'; + +// aliases +$labels['reply-to'] = $labels['replyto']; + +$labels['mailboxlist'] = 'საქაღალდეები'; +$labels['messagesfromto'] = 'შეტყობინება $from $to დან $count'; +$labels['messagenrof'] = 'შეტყობინება $nr დან $count'; + +$labels['moveto'] = 'გადატანა...'; +$labels['download'] = 'გადმოწერა'; + +$labels['filename'] = 'ფაილის სახელი'; +$labels['filesize'] = 'ფაილის ზომა'; + +$labels['preferhtml'] = 'როგორც HTML'; +$labels['htmlmessage'] = 'HTML შეტყობინება'; +$labels['prettydate'] = 'კარგი თარიღები'; + +$labels['addtoaddressbook'] = 'მისამართებში დამატება'; + +// weekdays short +$labels['sun'] = 'კვ'; +$labels['mon'] = 'ორ'; +$labels['tue'] = 'სამ'; +$labels['wed'] = 'ოთხ'; +$labels['thu'] = 'ხუთ'; +$labels['fri'] = 'პარ'; +$labels['sat'] = 'შაბ'; + +// weekdays long +$labels['sunday'] = 'კვირა'; +$labels['monday'] = 'ორშაბათი'; +$labels['tuesday'] = 'სამშაბათი'; +$labels['wednesday'] = 'ოთხშაბათი'; +$labels['thursday'] = 'ხუთშაბათი'; +$labels['friday'] = 'პარასკევი'; +$labels['saturday'] = 'შაბათი'; + +$labels['today'] = 'დღეს'; + +// toolbar buttons +$labels['checkmail'] = 'შემოწმება ახალ შეტყობინებაზე'; +$labels['writenewmessage'] = 'ახალი შეტყობინება'; +$labels['replytomessage'] = 'პასუხი'; +$labels['replytoallmessage'] = 'პასუხი ყველას'; +$labels['forwardmessage'] = 'გადაგზავნა'; +$labels['deletemessage'] = 'წაშლა'; +$labels['movemessagetotrash'] = 'შეტყობინების წაშლილებში გადატანა'; +$labels['printmessage'] = 'შეტყობინების ამობეჭვდა'; +$labels['previousmessage'] = 'წინა შეტყობინების ნახვა'; +$labels['previousmessages'] = 'წინა შეტყობინებების ნახვა'; +$labels['firstmessage'] = 'პირველი შეტყობინების ნახვა'; +$labels['firstmessages'] = 'პრველი შეტყობინებები'; +$labels['nextmessage'] = 'შემდეგი შეტყობინების ნახვა'; +$labels['nextmessages'] = 'შემდეგი შეტყობინებების ნახვა'; +$labels['lastmessage'] = 'ბოლო შეტყობინების ნახვა'; +$labels['lastmessages'] = 'ბოლო შეტყობინებების ნახვა'; +$labels['backtolist'] = 'უკან ჩამონათვალში'; +$labels['viewsource'] = 'შიგთავსი'; + +$labels['select'] = 'მონიშვნა'; +$labels['all'] = 'ყველა'; +$labels['none'] = 'არცერთი'; +$labels['unread'] = 'წაუკითხავი'; + +$labels['compact'] = 'შეკუმშვა'; +$labels['empty'] = 'გაცარიელება'; +$labels['purge'] = 'გასუფთავება'; + +$labels['quota'] = 'შეზღუდვა'; +$labels['unknown'] = 'უცნობი'; +$labels['unlimited'] = 'შეუზღუდავი'; + +$labels['quicksearch'] = 'სწრაფი ძიება'; +$labels['resetsearch'] = 'ძიების გასუფთავება'; + + +// message compose +$labels['compose'] = 'შეტყობინების დაწერა'; +$labels['sendmessage'] = 'შეტყობინების გაგზავნა'; +$labels['savemessage'] = 'დროებით შენახვა'; +$labels['addattachment'] = 'ფაილის ატვირთვა'; +$labels['charset'] = 'კოდირება'; +$labels['editortype'] = 'რედაქტორი'; +$labels['returnreceipt'] = 'პასუხის მოთხოვნა'; + +$labels['checkspelling'] = 'ორთოგრაფიული შემოწმება'; +$labels['resumeediting'] = 'რედაქტირების გაგრძელება'; +$labels['revertto'] = 'გაუქმება'; + +$labels['attachments'] = 'გზავნილები'; +$labels['upload'] = 'ატვირთვა'; +$labels['close'] = 'დახურვა'; + +$labels['low'] = 'დაბალი'; +$labels['lowest'] = 'უდაბლესი'; +$labels['normal'] = 'საშუალო'; +$labels['high'] = 'მაღალი'; +$labels['highest'] = 'უმაღლესი'; + +$labels['nosubject'] = '(უსათაურო)'; +$labels['showimages'] = 'გამოსახულების ჩვენება'; + +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'ტექსტური'; + +$labels['addcc'] = 'დაამატე კოპიო'; +$labels['addbcc'] = 'დაამატე ფარული კოპიო'; +$labels['addreplyto'] = 'დაამატე გამომგზავნი'; + + +// address boook +$labels['name'] = 'სრული სახელი'; +$labels['firstname'] = 'სახელი'; +$labels['surname'] = 'გვარი'; +$labels['email'] = 'ელ–ფოსტა'; + +$labels['addcontact'] = 'კონტაქტებში დამატება'; +$labels['editcontact'] = 'კონტაქტის რედაქტირება'; + +$labels['edit'] = 'რედაქტირება'; +$labels['cancel'] = 'გაუქმება'; +$labels['save'] = 'შენახვა'; +$labels['delete'] = 'წაშლა'; + +$labels['newcontact'] = 'კონტაქტის შექმნა'; +$labels['deletecontact'] = 'მონიშნელი კონტაქტის წაშლა'; +$labels['composeto'] = 'ფოსტის გაგზავნა შერჩეულ ადრესატებთან'; +$labels['contactsfromto'] = 'კონტაქტები $from დან $to ში $count'; +$labels['print'] = 'დაბეჭვდა'; +$labels['export'] = 'ექსპორტი'; + +$labels['previouspage'] = 'წინას ჩვენება'; +$labels['firstpage'] = 'პირველის ჩვენება'; +$labels['nextpage'] = 'შემდეგის ჩვენება'; +$labels['lastpage'] = 'ბოლოს ჩვენება'; + +$labels['groups'] = 'ჯგუფები'; +$labels['personaladrbook'] = 'პერსონალური მისამართები'; + + +// settings +$labels['settingsfor'] = 'პარამეტრები'; + +$labels['preferences'] = 'პარამეტრები'; +$labels['userpreferences'] = 'მომხმარებლის პარამეტრები'; +$labels['editpreferences'] = 'მომხმარებლის პარამეტრების რედაქტირება'; + +$labels['identities'] = 'პროფილები'; +$labels['manageidentities'] = 'პროფილების მართვა'; +$labels['newidentity'] = 'ახალი პროფილი'; + +$labels['newitem'] = 'ახალი'; +$labels['edititem'] = 'რედაქტირება'; + +$labels['setdefault'] = 'როგორც ზოგაგად'; +$labels['language'] = 'ენა'; +$labels['timezone'] = 'დროითი ზონა'; +$labels['pagesize'] = 'სტრიქონი გვერდზე'; +$labels['signature'] = 'ხელმოწერა'; +$labels['dstactive'] = 'დროის გადაყვანა'; +$labels['htmleditor'] = 'შეტყობინების შექმნა HTML –ში'; +$labels['htmlsignature'] = 'HTML ხელმოწერა'; +$labels['previewpane'] = 'ჩვენება'; + +$labels['autosavedraft'] = 'ავტომატური შენახვა'; +$labels['everynminutes'] = 'ყოველ $n წუთში'; +$labels['never'] = 'არასდროს'; + +$labels['folder'] = 'საქაღალდე'; +$labels['folders'] = 'საქაღალდეები'; +$labels['foldername'] = 'საქაღალდის დასახელება'; +$labels['subscribed'] = 'გამოცერილია'; +$labels['create'] = 'შექმნა'; +$labels['createfolder'] = 'საქაღალდის შექმნა'; +$labels['rename'] = 'სახელის გადარქმევა'; +$labels['renamefolder'] = 'სახელის გადარქმევა საქაღალდისთვის'; +$labels['deletefolder'] = 'საქაღალდის წაშლა'; +$labels['managefolders'] = 'საქაღალდეების მართვა'; + +$labels['sortby'] = 'დალაგება'; +$labels['sortasc'] = 'დალაგება ზრდადობით'; +$labels['sortdesc'] = 'დალაგება კლებადობით'; + +?> diff --git a/program/localization/ge/messages.inc b/program/localization/ge/messages.inc new file mode 100755 index 0000000..c455742 --- /dev/null +++ b/program/localization/ge/messages.inc @@ -0,0 +1,78 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id: labels.inc 842 2007-10-20 13:55:02Z zaza $ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'შესვლა შეუძლებელია'; +$messages['cookiesdisabled'] = 'თქვენი ბროუზერი კუკიებს არ პასუხობს'; +$messages['sessionerror'] = 'თქვენი სესია არის მცდარი ან ვადაგასული'; +$messages['imaperror'] = 'IMAP სერვერთან დაკავშირება შეუძლებელია'; +$messages['nomessagesfound'] = 'არ არის ახალი შეტყობინება'; +$messages['loggedout'] = 'წარმატებით დაიხურა თქვენი სესია'; +$messages['mailboxempty'] = 'საფოსტო ყუთი ცარიელია'; +$messages['loading'] = 'იტვირთება...'; +$messages['loadingdata'] = 'მონაცემების ჩატვირთვა...'; +$messages['checkingmail'] = 'ახალი შეტყობინების ნახვა'; +$messages['sendingmessage'] = 'შეტყობინების გაგზავნა'; +$messages['messagesent'] = 'შეტყობინება გაიგზავნა წარმატებით'; +$messages['savingmessage'] = 'შეტყობინების შენახვა...'; +$messages['messagesaved'] = 'შეტყობინების დროებით შენახვა'; +$messages['successfullysaved'] = 'წარმატებით შეინახა'; +$messages['addedsuccessfully'] = 'კონტაქტი წარმატებით დაემატა მისამართებში'; +$messages['contactexists'] = 'კონტაქტი ამ მისამართზე უკვე არსებობს'; +$messages['blockedimages'] = 'უსაფრთხოების მიზნით სურათების ჩვენება შეზღუდულია'; +$messages['encryptedmessage'] = 'შეტყობინება დაშიფრულია და სამწუხაროდ ჩვენება შეუძლებელია'; +$messages['nocontactsfound'] = 'კონტაქტი ვერ მოიძებნა'; +$messages['contactnotfound'] = 'მოთხოვნილი კონტაქტი ვერ მოიძებნა'; +$messages['sendingfailed'] = 'შეტყობინება ვერ გაიგზავნა'; +$messages['errorsaving'] = 'შენახვის დროს მოხდა შეცდომა'; +$messages['errormoving'] = 'შეტყობინების გადატანა შეუძლებელია'; +$messages['errordeleting'] = 'შეტყობინების წაშლა შეუძლებელია'; +$messages['deletecontactconfirm'] = 'ნამდვილად გსურთ მონიშნული კონტაქტების წაშლა?'; +$messages['deletemessagesconfirm'] = 'ნამდვილად გსურთ მონიშნული შეტყობინებების წაშლა?'; +$messages['deletefolderconfirm'] = 'ნამდვილად გსურთ ამ საქაღალდის წაშლა?'; +$messages['purgefolderconfirm'] = 'ნამდვილად გსურთ ყველა შეტყობინების წაშლა აღნიშნულ საქაღალდეში?'; +$messages['formincomplete'] = 'ყველა ველი არ არის შევსებული'; +$messages['noemailwarning'] = 'მიუთითეთ სწორი ელ–ფოსტის მისამართი'; +$messages['nonamewarning'] = 'მიუთითეთ სახელი'; +$messages['nopagesizewarning'] = 'მიუთითეთ ფურცლის ზომა'; +$messages['norecipientwarning'] = 'მიუთითეთ მიმღები'; +$messages['nosubjectwarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უსათაუროდ?'; +$messages['nobodywarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უტექსტოდ?'; +$messages['notsentwarning'] = 'შეტყობინება ვერ იქნა გაგზავნილი. გსურთ თუ არა გზავნილის გაუქმება?'; +$messages['noldapserver'] = 'მიუთითეთ LDAP სერვერი ძიებისთვის'; +$messages['nocontactsreturned'] = 'კონტაქტები ვერ მოძებნა'; +$messages['nosearchname'] = 'მიუთითეთ სახელი ან ელ–ფოსტის მისამართი'; +$messages['searchsuccessful'] = '$nr შეტყობინეა მოიძებნა'; +$messages['searchnomatch'] = 'შეტყობინება ვერ მოიძებნა'; +$messages['searching'] = 'ძიება...'; +$messages['checking'] = 'შემოწმება...'; +$messages['nospellerrors'] = 'ორთოგრაფიული შეცდომა არ არის'; +$messages['folderdeleted'] = 'საქაღალდე წარმატებით წაიშალა'; +$messages['deletedsuccessfully'] = 'წარმატებით წაიშალა'; +$messages['converting'] = 'შეტყობინების ფორმატირების გაუქმება...'; +$messages['messageopenerror'] = 'შეტყობინება ვერ ჩაიტვირთა სერვერიდან'; +$messages['fileuploaderror'] = 'ფაილი ვერ აიტვირთა'; +$messages['filesizeerror'] = 'ატვირთული ფაილის ზომა მეტია დასაშვებ ფაილის მაქსიმალურ ზომაზე ($size)'; +$messages['copysuccess'] = 'წარმატებით დაკოპირდა $nr მისამართი'; +$messages['copyerror'] = 'ვერცერთი მისამართი ვერ დაკოპირდა'; +$messages['sourceisreadonly'] = 'აღნიშნული მისამართის მხოლოდ წაკითხვაა შესაძლებელი'; +$messages['errorsavingcontact'] = 'საკონტაქტო მისამართის შენახვა შეუძლებელია'; +$messages['movingmessage'] = 'შეტყობინების გადატანა...'; + +?> diff --git a/program/localization/gl/labels.inc b/program/localization/gl/labels.inc index 33898ff..4203d25 100644 --- a/program/localization/gl/labels.inc +++ b/program/localization/gl/labels.inc @@ -5,11 +5,11 @@ | language/gl/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2006, RoundQube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: David Garabana Barro | + | Author: David Garabana Barro | +-----------------------------------------------------------------------+ */ @@ -84,6 +84,9 @@ $labels['lastmessage'] = 'Amosar a última mensaxe'; $labels['lastmessages'] = 'Amosar o último grupo de mensaxes'; $labels['backtolist'] = 'Voltar á lista de mensaxes'; $labels['viewsource'] = 'Ver fonte'; +$labels['markmessages'] = 'Marcar mensaxes'; +$labels['markread'] = 'Coma lidos'; +$labels['markunread'] = 'Coma non lidos'; $labels['select'] = 'Seleccionar'; $labels['all'] = 'Todas'; $labels['none'] = 'Ningunha'; @@ -121,6 +124,10 @@ $labels['plaintoggle'] = 'Texto claro'; $labels['addcc'] = 'Engadir Copia (CC)'; $labels['addbcc'] = 'Engadir Copia Oculta (BCC)'; $labels['addreplyto'] = 'Engadir Respostar a (Reply-To)'; +$labels['mdnrequest'] = 'O remitente desta mensaxe pediu ser notificado cando vostede lea esta mensaxe. Quere notificar ao remitente?'; +$labels['receiptread'] = 'Notificación da disposición da mensaxe (lectura)'; +$labels['yourmessage'] = 'Esta é unha notificación de disposición para a súa mensaxe'; +$labels['receiptnote'] = 'Nota: Esta notificación só confirma que a mensaxe se abriu no computador do destinatario. Non asegura que o destinatario o lera ou entendera o seu contido.'; $labels['name'] = 'Nome completo'; $labels['firstname'] = 'Nome'; $labels['surname'] = 'Apelidos'; @@ -168,6 +175,7 @@ $labels['folder'] = 'Cartafol'; $labels['folders'] = 'Cartafoles'; $labels['foldername'] = 'Nome do cartafol'; $labels['subscribed'] = 'Subscrito'; +$labels['messagecount'] = 'Mensaxes'; $labels['create'] = 'Crear'; $labels['createfolder'] = 'Crear novo cartafol'; $labels['rename'] = 'Renomear'; diff --git a/program/localization/gl/messages.inc b/program/localization/gl/messages.inc index 05ff976..2ba57d0 100644 --- a/program/localization/gl/messages.inc +++ b/program/localization/gl/messages.inc @@ -5,7 +5,7 @@ | language/gl/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2006, RoundQube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -20,7 +20,7 @@ $messages['cookiesdisabled'] = 'O seu navegador non acepta galletas'; $messages['sessionerror'] = 'A súa sesión non é válida ou expirou'; $messages['imaperror'] = 'Fallou a conexión co servidor IMAP'; $messages['nomessagesfound'] = 'Non se atoparon mensaxes nesta caixa de correo'; -$messages['loggedout'] = 'Rematou correctamente a súa sesión. ¡Ata logo!'; +$messages['loggedout'] = 'Rematou correctamente a súa sesión. Ata logo!'; $messages['mailboxempty'] = 'A caixa de correo está vacía'; $messages['loading'] = 'Cargando...'; $messages['loadingdata'] = 'Cargando datos...'; @@ -33,25 +33,25 @@ $messages['successfullysaved'] = 'Gardada correctamente'; $messages['addedsuccessfully'] = 'O contacto engadiuse correctamente ao caderno de enderezos'; $messages['contactexists'] = 'Xa existe un contacto con este enderezo de correo electrónico'; $messages['blockedimages'] = 'Estanse a bloquear as imaxes remotas para protexer a súa privacidade'; -$messages['encryptedmessage'] = '¡Síntoo!. Non se pode amosar a mensaxe porque está cifrada'; +$messages['encryptedmessage'] = 'Síntoo!. Non se pode amosar a mensaxe porque está cifrada'; $messages['nocontactsfound'] = 'Non se atoparon contactos'; $messages['contactnotfound'] = 'Non se atopou o contacto solicitado'; $messages['sendingfailed'] = 'Fallou o envío da mensaxe'; $messages['errorsaving'] = 'Ocurriu un erro mentres se gardaba'; $messages['errormoving'] = 'Non puiden mover a mensaxe'; $messages['errordeleting'] = 'Non puiden borrar a mensaxe'; -$messages['deletecontactconfirm'] = '¿Quere borrar o(s) contacto(s) seleccionados?'; -$messages['deletemessagesconfirm'] = '¿Quere borrar a(s) mensaxe(s) seleccionadas?'; -$messages['deletefolderconfirm'] = '¿Quere borrar este cartafol?'; -$messages['purgefolderconfirm'] = '¿Quere borrar tódalas mensaxes neste cartafol?'; +$messages['deletecontactconfirm'] = 'Quere borrar o(s) contacto(s) seleccionados?'; +$messages['deletemessagesconfirm'] = 'Quere borrar a(s) mensaxe(s) seleccionadas?'; +$messages['deletefolderconfirm'] = 'Quere borrar este cartafol?'; +$messages['purgefolderconfirm'] = 'Quere borrar tódalas mensaxes neste cartafol?'; $messages['formincomplete'] = 'Non se cumprimentou completamente o formulario'; $messages['noemailwarning'] = 'Por favor, introduza un enderezo de correo electrónico válida'; $messages['nonamewarning'] = 'Por favor, introduza un nome'; $messages['nopagesizewarning'] = 'Por favor, introduza un tamaño de páxina'; $messages['norecipientwarning'] = 'Por favor, introduza polo menos un destinatario'; -$messages['nosubjectwarning'] = 'O campo "tema" está baleiro. ¿Quere introducir un?'; -$messages['nobodywarning'] = '¿Quere enviar esta mensaxe sen texto?'; -$messages['notsentwarning'] = 'A mensaxe non se enviou. ¿Quere descartala?'; +$messages['nosubjectwarning'] = 'O campo "tema" está baleiro. Quere introducir un?'; +$messages['nobodywarning'] = 'Quere enviar esta mensaxe sen texto?'; +$messages['notsentwarning'] = 'A mensaxe non se enviou. Quere descartala?'; $messages['noldapserver'] = 'Por favor, elixa un servidor LDAP para buscar'; $messages['nocontactsreturned'] = 'Non se atoparon contactos'; $messages['nosearchname'] = 'Por favor, introduza un contacto ou un enderezo de correo electrónico'; @@ -71,5 +71,9 @@ $messages['copyerror'] = 'Non puiden copiar ningún enderezo'; $messages['sourceisreadonly'] = 'A orixe é de só lectura'; $messages['errorsavingcontact'] = 'Non puiden gardar o contacto'; $messages['movingmessage'] = 'Movendo mensaxe...'; +$messages['receiptsent'] = 'A notificación de disposición enviouse correctamente'; +$messages['errorsendingreceipt'] = 'Non se puido enviar a notificación'; +$messages['nodeletelastidentity'] = 'Non pode borrar esta identidade, é a última'; +$messages['addsubfolderhint'] = 'Este cartafol vaise crear coma un subcartafol do seleccionado'; -?> \ No newline at end of file +?> diff --git a/program/localization/he/labels.inc b/program/localization/he/labels.inc new file mode 100644 index 0000000..b51a586 --- /dev/null +++ b/program/localization/he/labels.inc @@ -0,0 +1,188 @@ + | + +-----------------------------------------------------------------------+ +*/ + +$labels = array(); +$labels['welcome'] = 'ברוך בואך אל $product'; +$labels['username'] = 'שם'; +$labels['password'] = 'סיסמה'; +$labels['server'] = 'שרת'; +$labels['login'] = 'כניסה'; +$labels['logout'] = 'יציאה'; +$labels['mail'] = 'תיבת דואר'; +$labels['settings'] = 'הגדרות אישיות'; +$labels['addressbook'] = 'פנקס כתובות'; +$labels['inbox'] = 'נכנס'; +$labels['drafts'] = 'טיוטות'; +$labels['sent'] = 'נשלח'; +$labels['trash'] = 'אשפה'; +$labels['junk'] = 'זבל'; +$labels['subject'] = 'נושא'; +$labels['from'] = 'מאת'; +$labels['to'] = 'אל'; +$labels['cc'] = 'לידיעה'; +$labels['bcc'] = 'מכותב מוסתר'; +$labels['replyto'] = 'מענה לשולח'; +$labels['date'] = 'תאריך'; +$labels['size'] = 'גודל'; +$labels['priority'] = 'עדיפות'; +$labels['organization'] = 'ארגון'; +$labels['reply-to'] = 'מענה לשולח'; +$labels['mailboxlist'] = 'תיקים'; +$labels['messagesfromto'] = 'הודעות $from עד $to מתוך $count'; +$labels['messagenrof'] = 'הודעה $nr מתוך $count'; +$labels['moveto'] = 'תיוק ב..'; +$labels['download'] = 'הורדה'; +$labels['filename'] = 'שם קובץ'; +$labels['filesize'] = 'גודל קובץ'; +$labels['preferhtml'] = 'הצגת HTML'; +$labels['htmlmessage'] = 'תוכן HTML'; +$labels['prettydate'] = 'תאריכים מעוצבים'; +$labels['addtoaddressbook'] = 'הוספה לפנקס כתובות'; +$labels['sun'] = 'יום א'; +$labels['mon'] = 'יום ב'; +$labels['tue'] = 'יום ג'; +$labels['wed'] = 'יום ד'; +$labels['thu'] = 'יום ה'; +$labels['fri'] = 'יום ו'; +$labels['sat'] = 'יום ש'; +$labels['sunday'] = 'ראשון'; +$labels['monday'] = 'שני'; +$labels['tuesday'] = 'שלישי'; +$labels['wednesday'] = 'רביעי'; +$labels['thursday'] = 'חמישי'; +$labels['friday'] = 'ששי'; +$labels['saturday'] = 'שבת'; +$labels['today'] = 'היום'; +$labels['checkmail'] = 'בדיקת תיבה'; +$labels['writenewmessage'] = 'מכתב חדש'; +$labels['replytomessage'] = 'מענה למכתב'; +$labels['replytoallmessage'] = 'מענה לשולח ולכל הנמענים'; +$labels['forwardmessage'] = 'העברת מכתב'; +$labels['deletemessage'] = 'מחיקה'; +$labels['movemessagetotrash'] = 'השלכה לאשפה'; +$labels['printmessage'] = 'הדפסה'; +$labels['previousmessage'] = 'הצגת מכתב קודם'; +$labels['previousmessages'] = 'הצגת רשימה קודמת'; +$labels['firstmessage'] = 'הצגת המכתב הראשון'; +$labels['firstmessages'] = 'הצגה של קבוצת המכתבים הראשונה'; +$labels['nextmessage'] = 'הצגת המכתב הבא'; +$labels['nextmessages'] = 'הצגה של קבוצת המכתבים הבאה'; +$labels['lastmessage'] = 'הצגת המכתב האחרון'; +$labels['lastmessages'] = 'הצגה של קבוצת המכתבים האחרונה'; +$labels['backtolist'] = 'חזרה אל רשימת המכתבים'; +$labels['viewsource'] = 'הצגת קוד מקור'; +$labels['markmessages'] = 'סימון הודעות'; +$labels['markread'] = 'כנקראו'; +$labels['markunread'] = 'כלא נקראו'; +$labels['select'] = 'בחירה'; +$labels['all'] = 'הכל'; +$labels['none'] = 'כלום'; +$labels['unread'] = 'לא נקראו'; +$labels['compact'] = 'פינוי שטח לא מנוצל'; +$labels['empty'] = 'ריקון'; +$labels['purge'] = 'מחיקה'; +$labels['quota'] = 'ניצול קיבולת'; +$labels['unknown'] = 'לא ידוע'; +$labels['unlimited'] = 'ללא הגבלה'; +$labels['quicksearch'] = 'חיפוש מהיר'; +$labels['resetsearch'] = 'ניקוי תיבת החיפוש'; +$labels['compose'] = 'מכתב חדש'; +$labels['savemessage'] = 'שמירת טיוטה'; +$labels['sendmessage'] = 'משלוח מיידי'; +$labels['addattachment'] = 'צירוף קובץ'; +$labels['charset'] = 'קידוד'; +$labels['editortype'] = 'סוג עורך'; +$labels['returnreceipt'] = 'אישור קבלה'; +$labels['checkspelling'] = 'בדיקת איות'; +$labels['resumeediting'] = 'המשך עריכה'; +$labels['revertto'] = 'חזור למצב קודם'; +$labels['attachments'] = 'קבצים מצורפים'; +$labels['upload'] = 'העלאה'; +$labels['close'] = 'סגירה'; +$labels['low'] = 'נמוך'; +$labels['lowest'] = 'נמוך ביותר'; +$labels['normal'] = 'רגיל'; +$labels['high'] = 'גבוה'; +$labels['highest'] = 'גבוה ביותר'; +$labels['nosubject'] = '(ללא נושא)'; +$labels['showimages'] = 'הצגת תמונות'; +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'ללא עיצוב'; +$labels['addcc'] = 'הוספת מכותב לידיעה'; +$labels['addbcc'] = 'הוספת מכותב נסתר'; +$labels['addreplyto'] = 'הוספת כתובת למענה'; +$labels['mdnrequest'] = 'השולח ביקש לדעת אם המכתב נקרא. האם להודיע לשולח?'; +$labels['receiptread'] = '(אישור קבלה (נקרא'; +$labels['yourmessage'] = 'זה אישור קבלה למכתבך'; +$labels['receiptnote'] = 'זה אישור על כך שהמכתב הוצג אבל אינו מבטיח שהתוכן נקרא או הובן'; +$labels['name'] = 'שם להצגה'; +$labels['firstname'] = 'שם פרטי'; +$labels['surname'] = 'שם משפחה'; +$labels['email'] = 'כתובת דוא"ל'; +$labels['addcontact'] = 'הוספת איש קשר'; +$labels['editcontact'] = 'עריכת איש קשר'; +$labels['edit'] = 'עריכה'; +$labels['cancel'] = 'ביטול'; +$labels['save'] = 'שמירה'; +$labels['delete'] = 'מחיקה'; +$labels['newcontact'] = 'איש קשר חדש'; +$labels['deletecontact'] = 'מחיקת אנשי קשר מסומנים'; +$labels['composeto'] = 'משלוח מכתב אל'; +$labels['contactsfromto'] = 'אנשי קשר $from עד $to מתוך $count'; +$labels['print'] = 'הדפסה'; +$labels['export'] = 'ייצוא'; +$labels['previouspage'] = 'הצגת הקבוצה הקודמת'; +$labels['firstpage'] = 'הצגת הקבוצה הראשונה'; +$labels['nextpage'] = 'הצגת הקבוצה הבאה'; +$labels['lastpage'] = 'הצגת הקבוצה האחרונה'; +$labels['groups'] = 'קבוצות'; +$labels['personaladrbook'] = 'כתובות פרטיות'; +$labels['settingsfor'] = 'הגדרות עבור'; +$labels['preferences'] = 'העדפות'; +$labels['userpreferences'] = 'העדפות משתמש'; +$labels['editpreferences'] = 'עריכה של העדפות משתמש'; +$labels['identities'] = 'זהויות'; +$labels['manageidentities'] = 'ניהול זהויות לחשבון זה'; +$labels['newidentity'] = 'זהות חדשה'; +$labels['newitem'] = 'פריט חדש'; +$labels['edititem'] = 'עריכת פריט'; +$labels['setdefault'] = 'קביעה של ברירת מחדל'; +$labels['language'] = 'שפה'; +$labels['timezone'] = 'איזור זמן'; +$labels['pagesize'] = 'מספר שורות בדף'; +$labels['signature'] = 'חתימה'; +$labels['dstactive'] = 'שעון קיץ'; +$labels['htmleditor'] = 'יצירת הודעה מעוצבת'; +$labels['htmlsignature'] = 'חתימה מעוצבת'; +$labels['previewpane'] = 'הצג הצצה מוקדמת'; +$labels['autosavedraft'] = 'שמירה אוטומטית של טיוטה'; +$labels['everynminutes'] = 'כל $n דקות'; +$labels['never'] = 'אף פעם'; +$labels['folder'] = 'תיק'; +$labels['folders'] = 'תיקים'; +$labels['foldername'] = 'שם תיק'; +$labels['subscribed'] = 'מנוי'; +$labels['messagecount'] = 'הודעות'; +$labels['create'] = 'יצירה'; +$labels['createfolder'] = 'יצירת תיק חדש'; +$labels['rename'] = 'שינוי שם'; +$labels['renamefolder'] = 'שינוי שם תיק'; +$labels['deletefolder'] = 'מחיקת תיק'; +$labels['managefolders'] = 'ניהול תיקים'; +$labels['sortby'] = 'מיון לפי'; +$labels['sortasc'] = 'מיון בסדר עולה'; +$labels['sortdesc'] = 'מיון בסדר יורד'; + +?> \ No newline at end of file diff --git a/program/localization/he/messages.inc b/program/localization/he/messages.inc new file mode 100644 index 0000000..b25ffdc --- /dev/null +++ b/program/localization/he/messages.inc @@ -0,0 +1,79 @@ + | + +-----------------------------------------------------------------------+ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'הכניסה נכשלה'; +$messages['cookiesdisabled'] = 'הדפדפן אינו מקבל עוגיות'; +$messages['sessionerror'] = 'הקשר שלך אינו חוקי או שפג תוקפו'; +$messages['imaperror'] = 'הקשר לשרת נכשל'; +$messages['nomessagesfound'] = 'לא נמצאו מכתבים בתיבה זו'; +$messages['loggedout'] = 'הקשר הסתיים. להתראות!'; +$messages['mailboxempty'] = 'התיבה ריקה'; +$messages['loading'] = 'טעינה...'; +$messages['loadingdata'] = 'טעינת מידע..'; +$messages['checkingmail'] = 'בדיקת קיום מכתבים חדשים...'; +$messages['sendingmessage'] = 'משלוח מכתבים'; +$messages['messagesent'] = 'מכתב נשלח בהצלחה'; +$messages['savingmessage'] = 'שמירת מכתב...'; +$messages['messagesaved'] = 'המכתב נשמר כטיוטה'; +$messages['successfullysaved'] = 'נשמר בהצלחה'; +$messages['addedsuccessfully'] = 'איש הקשר נוסף לפנקס בהצלחה'; +$messages['contactexists'] = 'קיים כבר איש קשר עם כתובת דוא"ל זו'; +$messages['blockedimages'] = 'תמונות משרת אחר נחסמו כדי לשמור על הפרטיות'; +$messages['encryptedmessage'] = 'זו הודעת מוצפנת ולכן לא ניתן להציגה'; +$messages['nocontactsfound'] = 'לא נמצאו אנשי קשר'; +$messages['contactnotfound'] = 'איש הקשר המבוקש לא נמצא'; +$messages['sendingfailed'] = 'שליחת המכתב נכשלה'; +$messages['errorsaving'] = 'נגרמה שגיאה במהלך השמירה'; +$messages['errormoving'] = 'לא ניתן לתייק את המכתב'; +$messages['errordeleting'] = 'לא ניתן למחוק את המכתב'; +$messages['deletecontactconfirm'] = 'האם למחוק את איש הקשר?'; +$messages['deletemessagesconfirm'] = 'האם למחוק את המכתבים נמסומנים?'; +$messages['deletefolderconfirm'] = 'האם למחוק תיק זה?'; +$messages['purgefolderconfirm'] = 'האם למחוק את כל ההודעות בתיק זה?'; +$messages['formincomplete'] = 'לא הושלמו כל הפרטים בטופס זה'; +$messages['noemailwarning'] = 'נא להוסיף כתובת דוא"ל חוקית'; +$messages['nonamewarning'] = 'נא להוסיף שם'; +$messages['nopagesizewarning'] = 'נא להוסיף גודל דף'; +$messages['norecipientwarning'] = 'נא להוסיף לפחות נמען אחד'; +$messages['nosubjectwarning'] = 'שורת הנושא ריקה. האם ברצונך להוסיף נושא כעת?'; +$messages['nobodywarning'] = 'האם לשלוח מכתב ללא תוכן?'; +$messages['notsentwarning'] = 'המכתב לא נשלח. האם לבטלו?'; +$messages['noldapserver'] = 'נא לבחור שרת כתובות לחיפוש'; +$messages['nocontactsreturned'] = 'לא נמצאו אנשי קשר'; +$messages['nosearchname'] = 'נא להוסיף איש קשר או כתובת דוא"ל'; +$messages['searchsuccessful'] = 'נמצאו $nr מכתבים'; +$messages['searchnomatch'] = 'החיפוש לא מצא דבר'; +$messages['searching'] = 'חיפוש...'; +$messages['checking'] = 'בדיקה...'; +$messages['nospellerrors'] = 'לא נמצאו שגיאות כתיב'; +$messages['folderdeleted'] = 'התיק נמחק בהצלחה'; +$messages['deletedsuccessfully'] = 'המחיקה הסתימה בהצלחה'; +$messages['converting'] = 'הסרת העיצוב מהמכתב'; +$messages['messageopenerror'] = 'לא ניתן לטעון המכתב מהשרת'; +$messages['fileuploaderror'] = 'העלאת הקובץ נכשלה'; +$messages['filesizeerror'] = 'הקובץ לטעינה גדול מהגודל המקסימלי שהוא $size'; +$messages['copysuccess'] = '$nr כתובות הועתקו בהצלחה'; +$messages['copyerror'] = 'לא ניתן היה להעתיק כתובת כלשהי'; +$messages['sourceisreadonly'] = 'המקור לכתובת הוא לקריאה בלבד'; +$messages['errorsavingcontact'] = 'לא ניתן לשמור את כתובת איש הקשר'; +$messages['movingmessage'] = 'תיוק המכתב..'; +$messages['receiptsent'] = 'אישור הקבלה נשלח בהצלחה'; +$messages['errorsendingreceipt'] = 'לא ניתן לשלוח אישור קבלה'; +$messages['nodeletelastidentity'] = 'זו הזהות האחרונה ולכן לא ניתן לבטלה'; +$messages['addsubfolderhint'] = 'תיקיה זו תוקם תחת התיקיה שנבחרה'; + +?> \ No newline at end of file diff --git a/program/localization/hi/labels.inc b/program/localization/hi/labels.inc new file mode 100644 index 0000000..d286659 --- /dev/null +++ b/program/localization/hi/labels.inc @@ -0,0 +1,239 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$labels = array(); + +// login page +$labels['welcome'] = '$product में स्वागत है'; +$labels['username'] = 'यूसरनाम'; +$labels['password'] = 'पासवर्ड'; +$labels['server'] = 'सर्वर'; +$labels['login'] = 'लॉगिन'; + +// taskbar +$labels['logout'] = 'लॉगआऊट'; +$labels['mail'] = 'ई-मेल'; +$labels['settings'] = 'निजी सैटिंग'; +$labels['addressbook'] = 'पता खाता'; + +// mailbox names +$labels['inbox'] = 'इनबॉक्स'; +$labels['drafts'] = 'ड्राफ़ट'; +$labels['sent'] = 'भेजा गया'; +$labels['trash'] = 'रद्दी'; +$labels['junk'] = 'स्पैम'; + +// message listing +$labels['subject'] = 'विशय'; +$labels['from'] = 'भेजने वाला'; +$labels['to'] = 'पाने वाला'; +$labels['cc'] = 'कार्बन'; +$labels['bcc'] = 'अंधा कार्बन'; +$labels['replyto'] = 'जवाब यहाँ'; +$labels['date'] = 'तारीख'; +$labels['size'] = 'माप'; +$labels['priority'] = 'मेल की महत्वपूर्णता'; +$labels['organization'] = 'संस्था'; + +// aliases +$labels['reply-to'] = $labels['replyto']; + +$labels['mailboxlist'] = 'फ़ोलडर'; +$labels['messagesfromto'] = '$from से ले कर $to, $count मेल में से'; +$labels['messagenrof'] = '$nr नम्बर मेल, $count में से'; + +$labels['moveto'] = 'खीस्काऐं...'; +$labels['download'] = 'डाऊनलोड'; + +$labels['filename'] = 'फ़ाईल नाम'; +$labels['filesize'] = 'फ़ाईल माप'; + +$labels['preferhtml'] = 'ऐच-टी-ऐम-ऐल(HTML) दिखाऐं'; +$labels['htmlmessage'] = 'ऐच-टी-ऐम-ऐल (HTML) रूप मेल करें'; +$labels['prettydate'] = 'सुनदर तारीखें'; + +$labels['addtoaddressbook'] = 'पता खाते में जोडें'; + +// weekdays short +$labels['sun'] = 'रवि'; +$labels['mon'] = 'सोम'; +$labels['tue'] = 'मंग'; +$labels['wed'] = 'बुध'; +$labels['thu'] = 'गुरु'; +$labels['fri'] = 'शुक्र'; +$labels['sat'] = 'शनि'; + +// weekdays long +$labels['sunday'] = 'रविवार'; +$labels['monday'] = 'सोमवार'; +$labels['tuesday'] = 'मंगलवार'; +$labels['wednesday'] = 'बुधवार'; +$labels['thursday'] = 'गुरुवार'; +$labels['friday'] = 'शुक्रवार'; +$labels['saturday'] = 'शनिवार'; + +$labels['today'] = 'आज'; + +// toolbar buttons +$labels['checkmail'] = 'नये मेल लाऐं'; +$labels['writenewmessage'] = 'मेल लिखें'; +$labels['replytomessage'] = 'मेल का जवाब दें'; +$labels['replytoallmessage'] = 'सभी को जवाब लिखें'; +$labels['forwardmessage'] = 'आगे भेजें'; +$labels['deletemessage'] = 'रद्द करें'; +$labels['printmessage'] = 'मेल छापें'; +$labels['previousmessage'] = 'पीछे के मेल दिखाऐं'; +$labels['previousmessages'] = 'पीछे के मेल का बन्डल दिखाऐं'; +$labels['firstmessage'] = 'पहला मेल दिखाऐं'; +$labels['firstmessages'] = 'पहला मेल का बन्डल दिखाऐं'; +$labels['nextmessage'] = 'अगला मेल दिखाऐं'; +$labels['nextmessages'] = 'अगले मेल का बन्डल दिखाऐं'; +$labels['lastmessage'] = 'आखीरी मेल दिखाऐं'; +$labels['lastmessages'] = 'आखिरी मेल का बन्डल दिखाऐं'; +$labels['backtolist'] = 'मेल सूची देखें'; +$labels['viewsource'] = 'सोर्स दिखाऐं'; + +$labels['select'] = 'चुनें'; +$labels['all'] = 'सभी'; +$labels['none'] = 'कोई नहीं'; +$labels['unread'] = 'अनदेखी'; + +$labels['compact'] = 'छोटा करें'; +$labels['empty'] = 'मेल रद्दी में डालें'; +$labels['purge'] = 'मिटाऐं'; + +$labels['quota'] = 'डिस्क उपयोग'; +$labels['unknown'] = 'अज्ञात'; +$labels['unlimited'] = 'असीम'; + +$labels['quicksearch'] = 'तेज़ खोज'; +$labels['resetsearch'] = 'खोज खाली करें'; + + +// message compose +$labels['compose'] = 'मेल लिखें'; +$labels['sendmessage'] = 'मेल भेजें'; +$labels['savemessage'] = 'ड्राफ़ट सहेजें'; +$labels['addattachment'] = 'फ़ाईल जोडें'; +$labels['charset'] = 'कैरेक्टर सैट'; +$labels['editortype'] = 'सम्पादक प्राकार'; +$labels['returnreceipt'] = 'मेल रसीद'; + +$labels['checkspelling'] = 'स्पैलिंग जाँचें'; +$labels['resumeediting'] = 'सम्पादन फिर शुरू करें'; +$labels['revertto'] = 'पहले की स्थिती पर जाऐं'; + +$labels['attachments'] = 'जुडे फाईल'; +$labels['upload'] = 'अपलोड'; +$labels['close'] = 'बंद'; + +$labels['low'] = 'कम'; +$labels['lowest'] = 'सबसे कम'; +$labels['normal'] = 'साधारण'; +$labels['high'] = 'उच्च'; +$labels['highest'] = 'उच्चतम'; + +$labels['nosubject'] = '(कोई विशय नहीं)'; +$labels['showimages'] = 'चित्र दिखाऐं'; + +$labels['htmltoggle'] = 'ऐच-टी-ऐम-एल (HTML)'; +$labels['plaintoggle'] = 'सादा पाठ'; + + +// address boook +$labels['name'] = 'दिखने वाला नाम'; +$labels['firstname'] = 'पहला नाम'; +$labels['surname'] = 'उपनाम'; +$labels['email'] = 'मेल'; + +$labels['addcontact'] = 'नया पता जोडें'; +$labels['editcontact'] = 'पता सम्पाद'; + +$labels['edit'] = 'सम्पाद'; +$labels['cancel'] = 'रद्द'; +$labels['save'] = 'सहेज'; +$labels['delete'] = 'मिटा'; + +$labels['newcontact'] = 'नया पता कार्ड बनाऐं'; +$labels['deletecontact'] = 'चुने पते मिटाऐं'; +$labels['composeto'] = 'को मेल भेजें'; +$labels['contactsfromto'] = '$from से ले कर $to, $count पते में से'; +$labels['print'] = 'छापें'; +$labels['export'] = 'ऐक्स्पोर्ट'; + +$labels['previouspage'] = 'इससे पहले के बन्डल को दिखाऐं'; +$labels['firstpage'] = 'पहला बन्डल दिखाऐं'; +$labels['nextpage'] = 'अगला बन्डल दिखाऐं'; +$labels['lastpage'] = 'आखिरी बन्डल दिखाऐं'; + + +// LDAP search +$labels['ldapsearch'] = 'ऐलडैप (LDAP) डाईरेक्टरी खोजें'; + +$labels['ldappublicsearchname'] = 'पता का नाम'; +$labels['ldappublicsearchtype'] = 'सख़त मैच?'; +$labels['ldappublicserverselect'] = 'सर्वर चुनें'; +$labels['ldappublicsearchfield'] = 'यहाँ खोजें'; +$labels['ldappublicsearchform'] = 'पता के लिये खोजें'; +$labels['ldappublicsearch'] = 'खोज'; + + +// settings +$labels['settingsfor'] = 'इनके विन्यास:'; + +$labels['preferences'] = 'पसंद'; +$labels['userpreferences'] = 'यूसर पसंद'; +$labels['editpreferences'] = 'यूसर पसंद सम्पादें'; + +$labels['identities'] = 'पहचान'; +$labels['manageidentities'] = 'इस खाते के पहचान व्यवस्थित करें'; +$labels['newidentity'] = 'नया पहचान'; + +$labels['newitem'] = 'नया चीज़'; +$labels['edititem'] = 'चीज़ सम्पादें'; + +$labels['setdefault'] = 'तयशुदा चुनें'; +$labels['language'] = 'भाषा'; +$labels['timezone'] = 'समय क्षेत्र'; +$labels['pagesize'] = 'हर पन्ने पर इतने'; +$labels['signature'] = 'दस्तखत'; +$labels['dstactive'] = 'रौशनी बचाव'; +$labels['htmleditor'] = 'मेल ऐच-टी-ऐम-एल (HTML) मे लिखें'; +$labels['htmlsignature'] = 'ऐच-टी-ऐम-एल (HTML) दस्तखत'; +$labels['previewpane'] = 'झलक पट्टी दिखाऐं'; + +$labels['autosavedraft'] = 'ड्राफ़ट अपने आप सहेजते जाऐं'; +$labels['everynminutes'] = 'हर $n मिनट'; +$labels['never'] = 'कभी नहाीं'; + +$labels['folder'] = 'फ़ोल्डर'; +$labels['folders'] = 'फ़ोल्डर'; +$labels['foldername'] = 'फ़ोल्डर नाम'; +$labels['subscribed'] = 'सबस्क्राईब किया गया'; +$labels['create'] = 'बनाऐं'; +$labels['createfolder'] = 'फ़ोलडर बनाऐं'; +$labels['rename'] = 'नाम बदलें'; +$labels['renamefolder'] = 'फ़ोलडर का नाम बदलें'; +$labels['deletefolder'] = 'फ़ोलडर मिटाऐं'; +$labels['managefolders'] = 'फ़ोलडर को व्यवस्थित करें'; + +$labels['sortby'] = 'ऐसे तय करें'; +$labels['sortasc'] = 'पहले से आखीरी तय करें'; +$labels['sortdesc'] = 'आखीरी से पहले तय करें'; + +?> \ No newline at end of file diff --git a/program/localization/hi/messages.inc b/program/localization/hi/messages.inc new file mode 100644 index 0000000..a32a524 --- /dev/null +++ b/program/localization/hi/messages.inc @@ -0,0 +1,72 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$messages = array(); + +$messages['loginfailed'] = 'लॉगिन नहीं हो पाया'; +$messages['cookiesdisabled'] = 'आपका ब्राऊसर कुकी स्वीकार नहीं कर रहा है'; +$messages['sessionerror'] = 'सत्र समाप्त या अवैद्य'; +$messages['imaperror'] = 'आईमैप (IMAP) सर्वर से सम्पर्क नहीं हो पाया'; +$messages['nomessagesfound'] = 'इस मेलबॉक्स में कोई मेल नहीं है'; +$messages['loggedout'] = 'सत्र समाप्त. टा टा!'; +$messages['mailboxempty'] = 'मेलबॉक्स खाली है'; +$messages['loading'] = 'लोड हो रहा है'; +$messages['loadingdata'] = 'डाटा लोड हो रहा है...'; +$messages['checkingmail'] = 'क्या नया मेल है?...'; +$messages['sendingmessage'] = 'मेल भेजा जा रहा है...'; +$messages['messagesent'] = 'मेल भेजा गया है'; +$messages['savingmessage'] = 'मेल सहेजा जा रहा है...'; +$messages['messagesaved'] = 'मेल ड्राफ़्ट फोल्डर में जमा हो रहा है'; +$messages['successfullysaved'] = 'सहेजा गया है'; +$messages['addedsuccessfully'] = 'पता खाते में पता जोडा गया है'; +$messages['contactexists'] = 'इस ई-मेल पता से एक पता पेहले से है'; +$messages['blockedimages'] = 'आप के प्राईवेसी के लिये और स्पैम से बचने के लिये इस मेल में सदूर चित्र नहीं दिखाये गये हैं।'; +$messages['encryptedmessage'] = 'माफ़ कीजिये, यह मेल कूट रूप में है, इस कारण दिखाया नहीं जा सकता।'; +$messages['nocontactsfound'] = 'कोई पता नहीं मिला'; +$messages['sendingfailed'] = 'मेल नहीं भिज पाया'; +$messages['errorsaving'] = 'सहेजते-सहेजते गडबड हो गया'; +$messages['errormoving'] = 'मेल खिस्का नहीं'; +$messages['errordeleting'] = 'मेल मिटा नहीं'; +$messages['deletecontactconfirm'] = 'चुने गये पते को सचमुच मिटाना है ?'; +$messages['deletemessagesconfirm'] = 'चुने गये मेल को सचमुच मिटाना है ?'; +$messages['deletefolderconfirm'] = 'फ़ोल्डर को सचमुच मिटाऐं ?'; +$messages['purgefolderconfirm'] = 'फ़ोल्डर में पडे सारे मेल को सचमुच मिटाना है?'; +$messages['formincomplete'] = 'फ़ॉर्म पूरी तरह से भरा नहीं'; +$messages['noemailwarning'] = 'वैद्य मेल पता भरें'; +$messages['nonamewarning'] = 'नाम भरें'; +$messages['nopagesizewarning'] = 'पन्ना माप भरें'; +$messages['norecipientwarning'] = 'कम-से-कम एक पाने वाले का पता भरें'; +$messages['nosubjectwarning'] = 'मेल का कोई विशय नहीं बताया गया है। क्या आप विशय डालना चाहते हैं ?'; +$messages['nobodywarning'] = 'बिना कुछ लिखे मेल भेजें?'; +$messages['notsentwarning'] = 'मेल भिजा नहीं. मेल रद्द करें ?'; +$messages['noldapserver'] = 'खोज के लिये एक ऐलडैप सर्वर चुनें'; +$messages['nocontactsreturned'] = 'कोई पते नहीं मिले'; +$messages['nosearchname'] = 'पता या पते का नाम भरें'; +$messages['searchsuccessful'] = '$nr मेल मिले'; +$messages['searchnomatch'] = 'खोज असफ़ल'; +$messages['searching'] = 'खोजा रहे हैं...'; +$messages['checking'] = 'चाँचा चा रहा है...'; +$messages['nospellerrors'] = 'कोई स्पैलिंग गलती नहीं मिली'; +$messages['folderdeleted'] = 'फ़ोल्डर मिट गया'; +$messages['deletedsuccessfully'] = "मिट गया"; +$messages['converting'] = 'मेल से फ़ॉर्मैटिंग निकाला जा रहा है...'; +$messages['messageopenerror'] = 'सर्वर से मेल लोड नहीं हो पाया'; +$messages['fileuploaderror'] = 'फ़ाईल अपलोड नहीं हो पाया'; +$messages['filesizeerror'] = 'अपलोड के लिये फ़ाईल हद $size से बड़ा है'; + +?> \ No newline at end of file diff --git a/program/localization/hr/labels.inc b/program/localization/hr/labels.inc index b376082..56bf1cc 100644 --- a/program/localization/hr/labels.inc +++ b/program/localization/hr/labels.inc @@ -6,14 +6,14 @@ | language/hr/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Edi Budimilic | + | Author: Edi Budimilic | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 627 2007-06-27 07:07:02Z tomekp $ + @version $Id: labels.inc 1143 2008-02-26 20:50:10Z yllar $ */ @@ -37,13 +37,13 @@ $labels['from'] = 'Od'; $labels['to'] = 'Za'; $labels['cc'] = 'Cc'; $labels['bcc'] = 'Bcc'; -$labels['replyto'] = 'Reply-To'; +$labels['replyto'] = 'Odgovor-na'; $labels['date'] = 'Datum'; $labels['size'] = 'Veličina'; $labels['priority'] = 'Prioritet'; $labels['organization'] = 'Organizacija'; -$labels['reply-to'] = 'Reply-To'; -$labels['mailboxlist'] = 'Folderi'; +$labels['reply-to'] = 'Odgovor-na'; +$labels['mailboxlist'] = 'Mape'; $labels['messagesfromto'] = 'Poruke od $from do $to od ukupno $count'; $labels['messagenrof'] = 'Poruka broj $nr od $count'; $labels['moveto'] = 'prebaci u...'; @@ -74,8 +74,9 @@ $labels['writenewmessage'] = 'Nova poruka'; $labels['replytomessage'] = 'Odgovori na poruku'; $labels['replytoallmessage'] = 'Odgovori poÅ¡iljaocu i svim primateljima'; $labels['forwardmessage'] = 'Prosljedi poruku'; -$labels['deletemessage'] = 'Prebaci poruku u folder (Smeće)'; -$labels['printmessage'] = 'Isprintajte poruku'; +$labels['deletemessage'] = 'Prebaci poruku u mapu smeće'; +$labels['movemessagetotrash'] = 'Preseli poruke u smeće'; +$labels['printmessage'] = 'Print poruke'; $labels['previousmessage'] = 'Prikaži prethodnu poruku'; $labels['previousmessages'] = 'PrijaÅ¡nje poruke'; $labels['firstmessage'] = 'Prikaži prvu poruku'; @@ -86,6 +87,9 @@ $labels['lastmessage'] = 'Prikaži zadnju poruku'; $labels['lastmessages'] = 'Prikaži zadnju skupinu poruka'; $labels['backtolist'] = 'Povratak na listu poruka'; $labels['viewsource'] = 'Prikaži poruku u izvornom obliku'; +$labels['markmessages'] = 'Označi poruke'; +$labels['markread'] = 'Kao pročitano'; +$labels['markunread'] = 'Kao nepročitano'; $labels['select'] = 'Oznaći'; $labels['all'] = 'Sve'; $labels['none'] = 'Nijednu'; @@ -99,15 +103,15 @@ $labels['unlimited'] = 'beskonačna'; $labels['quicksearch'] = 'Brza pretraga'; $labels['resetsearch'] = 'Prikaži sve poruke'; $labels['compose'] = 'Nova poruka'; -$labels['sendmessage'] = 'PoÅ¡alji poruku'; $labels['savemessage'] = 'Spremi u \'PredloÅ¡ci\''; +$labels['sendmessage'] = 'PoÅ¡alji poruku'; $labels['addattachment'] = 'Priloži datoteku'; $labels['charset'] = 'Charset'; $labels['editortype'] = 'Tip editora'; $labels['returnreceipt'] = 'Potvrda o primitku poruke'; $labels['checkspelling'] = 'Provjera pravopisa'; $labels['resumeediting'] = 'Povratak u pisanje'; -$labels['revertto'] = 'Revert to'; +$labels['revertto'] = 'Vrati na'; $labels['attachments'] = 'Privitci (Attachments)'; $labels['upload'] = 'Dodaj'; $labels['close'] = 'Zatvori'; @@ -120,6 +124,13 @@ $labels['nosubject'] = '(bez naslova)'; $labels['showimages'] = 'Prikaži slike'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Samo teks'; +$labels['addcc'] = 'Dodaj Cc'; +$labels['addbcc'] = 'Dodaj Bcc'; +$labels['addreplyto'] = 'Dodaj Odgovori-na'; +$labels['mdnrequest'] = 'PoÅ¡iljaoc ove poruke je tražio da bude obavijeÅ¡ten po primitku ove poruke. Želite li obavijestiti poÅ¡iljaoca?'; +$labels['receiptread'] = 'Vrati potvrdu (pročitano)'; +$labels['yourmessage'] = 'Ovo je vraćena potvrda vaÅ¡e poruke'; +$labels['receiptnote'] = 'Info: Ova potvrda samo potvrđuje da se poruka prikazala na računalu primaoca. Nema garancije da je primaoc pročitao ili razumio sadržaj poruke.'; $labels['name'] = 'Puno ime'; $labels['firstname'] = 'Ime'; $labels['surname'] = 'Prezime'; @@ -144,7 +155,7 @@ $labels['groups'] = 'Grupe'; $labels['personaladrbook'] = 'Privatna adresa'; $labels['settingsfor'] = 'Postavke za'; $labels['preferences'] = 'Postavke'; -$labels['userpreferences'] = 'Korisnićke postavke'; +$labels['userpreferences'] = 'Korisničke postavke'; $labels['editpreferences'] = 'Izmjena postavki'; $labels['identities'] = 'Identiteti'; $labels['manageidentities'] = 'Podesi identitete za ovaj nalog'; @@ -167,6 +178,7 @@ $labels['folder'] = 'Folder'; $labels['folders'] = 'Folderi'; $labels['foldername'] = 'Ime foldera'; $labels['subscribed'] = 'Pretplata'; +$labels['messagecount'] = 'Poruke'; $labels['create'] = 'Napravi'; $labels['createfolder'] = 'Napravi novi folder'; $labels['rename'] = 'Preimenuj'; diff --git a/program/localization/hr/messages.inc b/program/localization/hr/messages.inc index 4a4b95c..5d91898 100644 --- a/program/localization/hr/messages.inc +++ b/program/localization/hr/messages.inc @@ -6,14 +6,14 @@ | language/hr/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Edi Budimilic | + | Author: Edi Budimilic | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 627 2007-06-27 07:07:02Z tomekp $ + @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $ */ @@ -23,14 +23,14 @@ $messages['cookiesdisabled'] = 'VaÅ¡ pretraživač ne podržava kolačiće (cook $messages['sessionerror'] = 'Morate se ponovno ulogirati'; $messages['imaperror'] = 'NeuspjeÅ¡na konekcija na IMAP server'; $messages['nomessagesfound'] = 'Nema poruka u sandučiću'; -$messages['loggedout'] = 'UspjeÅ¡no ste se odjavili.'; +$messages['loggedout'] = 'UspjeÅ¡na odjava.'; $messages['mailboxempty'] = 'Sandučuć je prazan'; $messages['loading'] = 'Učitavanje...'; $messages['loadingdata'] = 'Učitavanje podataka...'; $messages['checkingmail'] = 'Provjera novih poruka u tijeku...'; $messages['sendingmessage'] = 'Poruka se Å¡alje...'; $messages['messagesent'] = 'Poruka je uspjeÅ¡no poslana'; -$messages['savingmessage'] = 'Poruka se snima...'; +$messages['savingmessage'] = 'Poruka se sprema...'; $messages['messagesaved'] = 'Poruka uspjeÅ¡no spremljena u \'PredloÅ¡ci\''; $messages['successfullysaved'] = 'Spremanje uspjeÅ¡no obavljeno'; $messages['addedsuccessfully'] = 'Kontakt uspjeÅ¡no dodan u imenik'; @@ -38,15 +38,15 @@ $messages['contactexists'] = 'Kontakt sa ovom e-mail adresom već postoji u imen $messages['blockedimages'] = 'Zbog zaÅ¡tite privatnosti, slike sa udaljenih servera su blokirane.'; $messages['encryptedmessage'] = 'Ova poruka je zaÅ¡tićena pa se ne može prikazati'; $messages['nocontactsfound'] = 'Imenik je prazan'; -$messages['contactnotfound'] = 'Traženi kontak nije pronađen'; +$messages['contactnotfound'] = 'Traženi kontakt nije pronađen'; $messages['sendingfailed'] = 'GreÅ¡ka pri slanju poruke'; $messages['errorsaving'] = 'GreÅ¡ka pri spremanju'; $messages['errormoving'] = 'GreÅ¡ka pri premjeÅ¡tanju poruke'; $messages['errordeleting'] = 'GreÅ¡ka pri brisanju poruke'; $messages['deletecontactconfirm'] = 'Želite li obrisati izabrane kontakte?'; $messages['deletemessagesconfirm'] = 'Sigurno želite obrisati odabrane poruke?'; -$messages['deletefolderconfirm'] = 'Želite li obrisati ovaj folder?'; -$messages['purgefolderconfirm'] = 'Želite li obrisati sve poruke u folderu?'; +$messages['deletefolderconfirm'] = 'Želite li obrisati ovu mapu?'; +$messages['purgefolderconfirm'] = 'Želite li obrisati sve poruke u mapi?'; $messages['formincomplete'] = 'Forma nije u cjelosti popunjena'; $messages['noemailwarning'] = 'Unesite valjanu e-mail adresu'; $messages['nonamewarning'] = 'Unesite ime'; @@ -63,15 +63,20 @@ $messages['searchnomatch'] = 'Traženi termin nije pronađen ni u jednoj poruci' $messages['searching'] = 'Pretraga u tijeku...'; $messages['checking'] = 'Provjera u tijeku...'; $messages['nospellerrors'] = 'Nije pronađena niti jedna pravopisna greÅ¡ka'; -$messages['folderdeleted'] = 'Folder uspjeÅ¡no obrisan'; +$messages['folderdeleted'] = 'Mapa uspjeÅ¡no obrisana'; $messages['deletedsuccessfully'] = 'UspjeÅ¡no obrisano'; -$messages['converting'] = 'Mičem formatiranje poruke'; +$messages['converting'] = 'Formatiranje poruke'; $messages['messageopenerror'] = 'Nije moguće '; $messages['fileuploaderror'] = 'Prijenos datoteke nije uspio'; -$messages['filesizeerror'] = 'Datoteka je prevelika. DopuÅ¡tena maksimalna je $size'; +$messages['filesizeerror'] = 'Datoteka je prevelika. Maksimalna veličina je $size'; $messages['copysuccess'] = 'UspjeÅ¡no kopirano $n adresa'; $messages['copyerror'] = 'Nije uspjelo kopiranje adresa'; $messages['sourceisreadonly'] = 'Ovaj resurs adresa je samo za čitanje'; $messages['errorsavingcontact'] = 'Nije uspjelo spremanje adrese kontakta'; +$messages['movingmessage'] = 'PremjeÅ¡tanje poruke...'; +$messages['receiptsent'] = 'UspjeÅ¡no poslana potvrda (pročitano)'; +$messages['errorsendingreceipt'] = 'Ne može poslati potvrdu'; +$messages['nodeletelastidentity'] = 'Ne možete izbrisati zadnji identitet.'; +$messages['addsubfolderhint'] = 'Ova mapa će biti stvorena kao podmapa na trenutno označenoj'; ?> \ No newline at end of file diff --git a/program/localization/hu/labels.inc b/program/localization/hu/labels.inc index 89a127d..06f2d4f 100644 --- a/program/localization/hu/labels.inc +++ b/program/localization/hu/labels.inc @@ -6,7 +6,7 @@ | language/hu/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Ervin Hegedüs | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 890 2007-10-20 18:01:01Z thomasb $ + @version $Id: labels.inc 1069 2008-02-13 19:33:10Z yllar $ */ @@ -76,6 +76,7 @@ $labels['replytomessage'] = 'Válasz'; $labels['replytoallmessage'] = 'Válasz a feladónak és az összes címzettnek'; $labels['forwardmessage'] = 'Továbbítás'; $labels['deletemessage'] = 'Törlés'; +$labels['movemessagetotrash'] = 'Üzenet törlése'; $labels['printmessage'] = 'Nyomtatás'; $labels['previousmessage'] = 'Előző levél mutatása'; $labels['previousmessages'] = 'Előző rész mutatása'; @@ -87,6 +88,9 @@ $labels['lastmessage'] = 'Utolsó levél mutatása'; $labels['lastmessages'] = 'Utolsó rész mutatása'; $labels['backtolist'] = 'Vissza az üzenetekhez'; $labels['viewsource'] = 'Forrás megtekintése'; +$labels['markmessages'] = 'Üzenetek megjelölése'; +$labels['markread'] = 'Olvasottként'; +$labels['markunread'] = 'Olvasatlanként'; $labels['select'] = 'Kijelölés'; $labels['all'] = 'Összes'; $labels['none'] = 'Nincs'; @@ -100,8 +104,8 @@ $labels['unlimited'] = 'korlátlan'; $labels['quicksearch'] = 'Gyorskeresés'; $labels['resetsearch'] = 'Alapállapot'; $labels['compose'] = 'Üzenet létrehozása'; -$labels['sendmessage'] = 'Üzenet azonnali küldése'; $labels['savemessage'] = 'Vázlat mentése'; +$labels['sendmessage'] = 'Üzenet azonnali küldése'; $labels['addattachment'] = 'File csatolása'; $labels['charset'] = 'Karakterkészlet'; $labels['editortype'] = 'Szerkesztő típusa'; @@ -121,6 +125,13 @@ $labels['nosubject'] = '(nincs tárgy)'; $labels['showimages'] = 'Képek megjelenítése'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Egyszerű szöveg'; +$labels['addcc'] = 'Cc (Másolati cím) hozzáadása'; +$labels['addbcc'] = 'Bcc (Titkos másolati cím) hozzáadása'; +$labels['addreplyto'] = 'Válaszcím hozzáadása'; +$labels['mdnrequest'] = 'Az üzenet küldője értesítést kér arról hogy elolvastad a levelet. Elküdjük az Olvasási Értesítést?'; +$labels['receiptread'] = 'Olvasási Értesítés (olvasott)'; +$labels['yourmessage'] = 'Ez az üzeneted Olvasási Értesítése'; +$labels['receiptnote'] = 'Megjegyzés: Ez az Olvasási Értesítés csak azt igazolja, hogy az üzenet megjelenítésre került a címzett számítógépén. Nincs rá garancia, hogy a címzett elolvasta volna az üzenetet illetve megértette volna annak tartalmát.'; $labels['name'] = 'Megjelenített név'; $labels['firstname'] = 'Keresztnév'; $labels['surname'] = 'Vezetéknév'; @@ -168,6 +179,7 @@ $labels['folder'] = 'Mappa'; $labels['folders'] = 'Mappák'; $labels['foldername'] = 'Mappa neve'; $labels['subscribed'] = 'Feliratkozás'; +$labels['messagecount'] = 'Üzenet'; $labels['create'] = 'Létrehozás'; $labels['createfolder'] = 'Új mappa létrehozása'; $labels['rename'] = 'Átnevezés'; diff --git a/program/localization/hu/messages.inc b/program/localization/hu/messages.inc index 413ee66..fd6e2ed 100644 --- a/program/localization/hu/messages.inc +++ b/program/localization/hu/messages.inc @@ -6,73 +6,78 @@ | language/hu/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Levente Farkas | - | Ervin Hegedüs | + | Author: Levente Farkas | + | Ervin Hegedüs | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 890 2007-10-20 18:01:01Z thomasb $ + @version $Id: messages.inc 1069 2008-02-13 19:33:10Z yllar $ */ $messages = array(); -$messages['loginfailed'] = 'Sikertelen belépés'; -$messages['cookiesdisabled'] = 'A böngésző nem támogatja a sütik használatát'; -$messages['sessionerror'] = 'Érvénytelen vagy lejárt munkamenet'; -$messages['imaperror'] = 'Nem sikerült a kapcsolódás az IMAP szerverhez'; -$messages['nomessagesfound'] = 'A fiók nem tartalmaz leveleket'; -$messages['loggedout'] = 'Sikeres kijelentkezés. Viszont látásra!'; -$messages['mailboxempty'] = 'A fiók üres'; -$messages['loading'] = 'Betöltés...'; -$messages['loadingdata'] = 'Az adatok betöltése...'; -$messages['checkingmail'] = 'Új üzenetek keresése...'; -$messages['sendingmessage'] = 'Az üzenet küldése...'; -$messages['messagesent'] = 'Az üzenet elküldve'; -$messages['savingmessage'] = 'Az üzenet mentése...'; -$messages['messagesaved'] = 'Az üzenet elmentve a Sablonokhoz'; -$messages['successfullysaved'] = 'A mentés sikerült'; -$messages['addedsuccessfully'] = 'A cím hozzáadása a címjegyzékhez megtörtént'; -$messages['contactexists'] = 'A kapcsolat már létezik ezzel az e-mail címmel'; -$messages['blockedimages'] = 'Biztonsági okokból a távoli képek letöltése tiltott.'; -$messages['encryptedmessage'] = 'Az üzenet titkosított, emiatt nem tudom megjeleníteni.'; +$messages['loginfailed'] = 'Sikertelen belépés'; +$messages['cookiesdisabled'] = 'A böngészõ nem támogatja a sütik használatát'; +$messages['sessionerror'] = 'Érvénytelen vagy lejárt munkamenet'; +$messages['imaperror'] = 'Nem sikerült a kapcsolódás az IMAP szerverhez'; +$messages['nomessagesfound'] = 'A fiók nem tartalmaz leveleket'; +$messages['loggedout'] = 'Sikeres kijelentkezés. Viszont látásra!'; +$messages['mailboxempty'] = 'A fiók üres'; +$messages['loading'] = 'Betöltés...'; +$messages['loadingdata'] = 'Az adatok betöltése...'; +$messages['checkingmail'] = 'Új üzenetek keresése...'; +$messages['sendingmessage'] = 'Az üzenet küldése...'; +$messages['messagesent'] = 'Az üzenet elküldve'; +$messages['savingmessage'] = 'Az üzenet mentése...'; +$messages['messagesaved'] = 'Az üzenet elmentve a Sablonokhoz'; +$messages['successfullysaved'] = 'A mentés sikerült'; +$messages['addedsuccessfully'] = 'A cím hozzáadása a címjegyzékhez megtörtént'; +$messages['contactexists'] = 'A kapcsolat már létezik ezzel az e-mail címmel'; +$messages['blockedimages'] = 'Biztonsági okokból a távoli képek letöltése tiltott.'; +$messages['encryptedmessage'] = 'Az üzenet titkosított, emiatt nem tudom megjeleníteni.'; $messages['nocontactsfound'] = 'Nincs kapcsolat'; -$messages['contactnotfound'] = 'A kiválasztott kapcsolat nem található'; -$messages['sendingfailed'] = 'Az üzenet elküldése nem sikerült'; -$messages['errorsaving'] = 'A mentés során hiba lépett fel'; -$messages['errormoving'] = 'Az üzenetet nem sikerült áthelyezni'; -$messages['errordeleting'] = 'Az üzenetet nem sikerült törölni'; -$messages['deletecontactconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt címe(ke)t?'; -$messages['deletemessagesconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt üzenete(ke)t?'; -$messages['deletefolderconfirm'] = 'Biztos, hogy törölni szeretnéd ezt a mappát?'; -$messages['purgefolderconfirm'] = 'Biztos vagy benne, hogy az összes üzenet törölhető?'; -$messages['formincomplete'] = 'Az űrlap hiányosan lett kitöltve'; -$messages['noemailwarning'] = 'Adj meg egy valós e-mail címet'; +$messages['contactnotfound'] = 'A kiválasztott kapcsolat nem található'; +$messages['sendingfailed'] = 'Az üzenet elküldése nem sikerült'; +$messages['errorsaving'] = 'A mentés során hiba lépett fel'; +$messages['errormoving'] = 'Az üzenetet nem sikerült áthelyezni'; +$messages['errordeleting'] = 'Az üzenetet nem sikerült törölni'; +$messages['deletecontactconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt címe(ke)t?'; +$messages['deletemessagesconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt üzenete(ke)t?'; +$messages['deletefolderconfirm'] = 'Biztos, hogy törölni szeretnéd ezt a mappát?'; +$messages['purgefolderconfirm'] = 'Biztos vagy benne, hogy az összes üzenet törölhetõ?'; +$messages['formincomplete'] = 'Az ûrlap hiányosan lett kitöltve'; +$messages['noemailwarning'] = 'Adj meg egy valós e-mail címet'; $messages['nonamewarning'] = 'Adj meg egy nevet'; -$messages['nopagesizewarning'] = 'Add meg a papír méretét'; -$messages['norecipientwarning'] = 'Legalább egy címzettet adj meg'; -$messages['nosubjectwarning'] = 'A "Tárgy" mező üres. Szeretnéd most kitölteni?'; -$messages['nobodywarning'] = 'Elküldöd az üzenetet tárgy nélkül?'; -$messages['notsentwarning'] = 'Az üzenet még nem küldtem el. Eldobod az üzenetet?'; -$messages['noldapserver'] = 'Adj meg egy LDAP szervert a kereséshez'; -$messages['nocontactsreturned'] = 'Nem találtam kapcsolatot'; -$messages['nosearchname'] = 'Add meg a kapcsolat nevét vagy e-mail címét'; -$messages['searchsuccessful'] = '$nr üzenetet találtam'; -$messages['searchnomatch'] = 'Nincs találat'; -$messages['searching'] = 'Keresés...'; -$messages['checking'] = 'Ellenőrzés...'; -$messages['nospellerrors'] = 'Nem találtam helyesírási hibát'; -$messages['folderdeleted'] = 'A mappa sikeresen törölve'; -$messages['deletedsuccessfully'] = 'Törölve'; -$messages['converting'] = 'Formázás eltávolítása az üzenetből...'; -$messages['messageopenerror'] = 'Nem tudom letölteni a leveleket a szerverről'; -$messages['fileuploaderror'] = 'Feltöltés sikertelen'; -$messages['filesizeerror'] = 'A feltöltött file mérete meghaladja a maximális méretet $size'; -$messages['copysuccess'] = 'Sikeresen másoltunk $nr címet'; -$messages['copyerror'] = 'Nem tudtunk másolni egyetlen címet sem'; -$messages['sourceisreadonly'] = 'Ez a címforrás csak olvasható'; -$messages['errorsavingcontact'] = 'Nem tudtuk menteni a kapcsolat címét'; +$messages['nopagesizewarning'] = 'Add meg a papír méretét'; +$messages['norecipientwarning'] = 'Legalább egy címzettet adj meg'; +$messages['nosubjectwarning'] = 'A "Tárgy" mezõ üres. Szeretnéd most kitölteni?'; +$messages['nobodywarning'] = 'Elküldöd az üzenetet tárgy nélkül?'; +$messages['notsentwarning'] = 'Az üzenet még nem küldtem el. Eldobod az üzenetet?'; +$messages['noldapserver'] = 'Adj meg egy LDAP szervert a kereséshez'; +$messages['nocontactsreturned'] = 'Nem találtam kapcsolatot'; +$messages['nosearchname'] = 'Add meg a kapcsolat nevét vagy e-mail címét'; +$messages['searchsuccessful'] = '$nr üzenetet találtam'; +$messages['searchnomatch'] = 'Nincs találat'; +$messages['searching'] = 'Keresés...'; +$messages['checking'] = 'Ellenõrzés...'; +$messages['nospellerrors'] = 'Nem találtam helyesírási hibát'; +$messages['folderdeleted'] = 'A mappa sikeresen törölve'; +$messages['deletedsuccessfully'] = 'Törölve'; +$messages['converting'] = 'Formázás eltávolítása az üzenetbõl...'; +$messages['messageopenerror'] = 'Nem tudom letölteni a leveleket a szerverrõl'; +$messages['fileuploaderror'] = 'Feltöltés sikertelen'; +$messages['filesizeerror'] = 'A feltöltött file mérete meghaladja a maximális méretet $size'; +$messages['copysuccess'] = 'Sikeresen másoltunk $nr címet'; +$messages['copyerror'] = 'Nem tudtunk másolni egyetlen címet sem'; +$messages['sourceisreadonly'] = 'Ez a címforrás csak olvasható'; +$messages['errorsavingcontact'] = 'Nem tudtuk menteni a kapcsolat címét'; +$messages['movingmessage'] = 'Üzenet mozgatása...'; +$messages['receiptsent'] = 'Az Olvasási Értesítést elküldtük'; +$messages['errorsendingreceipt'] = 'Az Olvasási Értesítést nem sikerült elküldeni'; +$messages['nodeletelastidentity'] = 'Nem törölheti ezt a profilt, ez az egyetlen'; +$messages['addsubfolderhint'] = 'Az új könyvtárat az aktuálisan kiválasztott alkönyvtáraként fogjuk létrehozni'; ?> \ No newline at end of file diff --git a/program/localization/id_ID/labels.inc b/program/localization/id_ID/labels.inc new file mode 100644 index 0000000..1cf1a72 --- /dev/null +++ b/program/localization/id_ID/labels.inc @@ -0,0 +1,192 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$labels = array(); +$labels['welcome'] = 'Selamat datang di $product'; +$labels['username'] = 'Username'; +$labels['password'] = 'Password'; +$labels['server'] = 'Server'; +$labels['login'] = 'Masuk'; +$labels['logout'] = 'Keluar'; +$labels['mail'] = 'E-Mail'; +$labels['settings'] = 'Pengaturan Pribadi'; +$labels['addressbook'] = 'Buku Alamat'; +$labels['inbox'] = 'Kotak Masuk'; +$labels['drafts'] = 'Daftar tunggu'; +$labels['sent'] = 'Terkirim'; +$labels['trash'] = 'Item-itenm tergapus'; +$labels['junk'] = 'Sampah'; +$labels['subject'] = 'Judul'; +$labels['from'] = 'Pengirim'; +$labels['to'] = 'Penerima'; +$labels['cc'] = 'Lampiran'; +$labels['bcc'] = 'Lampiran tersembunyi'; +$labels['replyto'] = 'Balas kepada'; +$labels['date'] = 'Tangal'; +$labels['size'] = 'Ukuran'; +$labels['priority'] = 'Prioritas'; +$labels['organization'] = 'Organisasi'; +$labels['reply-to'] = 'Balas kepada'; +$labels['mailboxlist'] = 'Map-map'; +$labels['messagesfromto'] = 'Pesan $from kepada $to sebanyak $count'; +$labels['messagenrof'] = 'Pesan $nr sebanyak $count'; +$labels['moveto'] = 'dipindahkan...'; +$labels['download'] = 'unduh'; +$labels['filename'] = 'Nama berkas'; +$labels['filesize'] = 'Ukuran berkas'; +$labels['preferhtml'] = 'Lebih suka HTML'; +$labels['htmlmessage'] = 'Pesan HTML'; +$labels['prettydate'] = 'Tanggal cantik'; +$labels['addtoaddressbook'] = 'Tambahkan ke buku tamu'; +$labels['sun'] = 'Min'; +$labels['mon'] = 'Sen'; +$labels['tue'] = 'Sel'; +$labels['wed'] = 'Rab'; +$labels['thu'] = 'Kam'; +$labels['fri'] = 'Jum'; +$labels['sat'] = 'Sab'; +$labels['sunday'] = 'Minggu'; +$labels['monday'] = 'Senin'; +$labels['tuesday'] = 'Selasa'; +$labels['wednesday'] = 'Rabu'; +$labels['thursday'] = 'Kamis'; +$labels['friday'] = 'Jumat'; +$labels['saturday'] = 'Sabtu'; +$labels['today'] = 'Hari ini'; +$labels['checkmail'] = 'Periksa pesan baru'; +$labels['writenewmessage'] = 'Buat pesan baru'; +$labels['replytomessage'] = 'Balas pesan'; +$labels['replytoallmessage'] = 'balas ke pengirim dan semua penerima'; +$labels['forwardmessage'] = 'Teruskan pesan'; +$labels['deletemessage'] = 'Pindahkan pesan ke tong sampah'; +$labels['movemessagetotrash'] = 'Pindahkan pesan ke tong sampah'; +$labels['printmessage'] = 'cetak pesan ini'; +$labels['previousmessage'] = 'Perlihatkan pesan sebelumnya'; +$labels['previousmessages'] = 'Perlihatkan kumpulan pesan-pesan sebelumnya'; +$labels['firstmessage'] = 'Perlihatkan pesan pertama'; +$labels['firstmessages'] = 'Perlihatkan kumpulan pesan pertama'; +$labels['nextmessage'] = 'Perlihatkan pesan berikutnya'; +$labels['nextmessages'] = 'Perlihatkan kumpulan pesan-pesan berikutnya'; +$labels['lastmessage'] = 'Perlihatkan pesan terakhir'; +$labels['lastmessages'] = 'Perlihatkan kumpulan pesan terkahir'; +$labels['backtolist'] = 'Kembali ke daftar pesan'; +$labels['viewsource'] = 'Perlihatkan kode sumber'; +$labels['markmessages'] = 'Tandai Pesan'; +$labels['markread'] = 'Terbaca'; +$labels['markunread'] = 'Belum Terbaca'; +$labels['select'] = 'Pilih'; +$labels['all'] = 'Semua'; +$labels['none'] = 'Tidak satupun'; +$labels['unread'] = 'Belum terbaca'; +$labels['compact'] = 'Ramping'; +$labels['empty'] = 'Kosong'; +$labels['purge'] = 'Kosongkan'; +$labels['quota'] = 'Penggunaan kandar'; +$labels['unknown'] = 'Tidak dikenal'; +$labels['unlimited'] = 'Tidak terbatas'; +$labels['quicksearch'] = 'Pencarian cepat'; +$labels['resetsearch'] = 'Atur ulang pencarian'; +$labels['compose'] = 'Tulis sebuah pesan'; +$labels['savemessage'] = 'Simpan daftar tunggu ini'; +$labels['sendmessage'] = 'Kirim pesan sekarang'; +$labels['addattachment'] = 'Sisipkan sebuah berkas'; +$labels['charset'] = 'set karakter'; +$labels['editortype'] = 'Tipe editor'; +$labels['returnreceipt'] = 'Kembalikan penerima'; +$labels['checkspelling'] = 'Pemeriksaan ejaan'; +$labels['resumeediting'] = 'Lanjutkan mengedit'; +$labels['revertto'] = 'Balik ke'; +$labels['attachments'] = 'Sisispan'; +$labels['upload'] = 'unggah'; +$labels['close'] = 'Tutup'; +$labels['low'] = 'Rendah'; +$labels['lowest'] = 'Terrendah'; +$labels['normal'] = 'Normal'; +$labels['high'] = 'Tinggi'; +$labels['highest'] = 'tertinggi'; +$labels['nosubject'] = '(tanpa judul)'; +$labels['showimages'] = 'Tampilkan gambar'; +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'Text murni'; +$labels['addcc'] = 'Tambah Cc'; +$labels['addbcc'] = 'Tambah Bcc'; +$labels['addreplyto'] = 'Tambah Balas Ke'; +$labels['mdnrequest'] = 'Pengirim pesan ini telah meminta untuk diberitahu ketika Anda membaca pesan ini. Apakah anda ingin memberitahu pengirim?'; +$labels['receiptread'] = 'Tanda Terima (baca)'; +$labels['yourmessage'] = 'Ini adalah Tanda Terima untuk pesan Anda'; +$labels['receiptnote'] = 'Catatan: Tanda Terima ini hanya mengesahkan bahwa pesan telah diperlihatkan pada komputer penerima. Tidak ada jaminan bahwa penerima telah membaca atau mengerti isi pesan.'; +$labels['name'] = 'Tampilkan nama'; +$labels['firstname'] = 'Nama depan'; +$labels['surname'] = 'Nama belakang'; +$labels['email'] = 'E-Mail'; +$labels['addcontact'] = 'Tambah kontak baru'; +$labels['editcontact'] = 'Ubah kontak'; +$labels['edit'] = 'Ubah'; +$labels['cancel'] = 'Batal'; +$labels['save'] = 'Simpan'; +$labels['delete'] = 'Hapus'; +$labels['newcontact'] = 'Buat kartu kontak baru'; +$labels['deletecontact'] = 'Hapus kontak terpilih'; +$labels['composeto'] = 'Tulis surat kepada'; +$labels['contactsfromto'] = 'Kontak $from kepada $to sebanyak $count'; +$labels['print'] = 'Cetak'; +$labels['export'] = 'Ekspor'; +$labels['previouspage'] = 'Perlihatkan kumpulan sebelumnya'; +$labels['firstpage'] = 'Perlihatkan kumpulan pertama'; +$labels['nextpage'] = 'Perlihatkan kumpulan selanjutnya'; +$labels['lastpage'] = 'Perlihatkan kumpulan terakhir'; +$labels['groups'] = 'Kelompok'; +$labels['personaladrbook'] = 'Alamat personal'; +$labels['settingsfor'] = 'Pengaturan untuk'; +$labels['preferences'] = 'Pilihan'; +$labels['userpreferences'] = 'Pilihan pengguna'; +$labels['editpreferences'] = 'Ubah pilihan pengguna'; +$labels['identities'] = 'Identitas'; +$labels['manageidentities'] = 'Atur identitas untuk akun ini'; +$labels['newidentity'] = 'Identitas baru'; +$labels['newitem'] = 'Item baru'; +$labels['edititem'] = 'Ubah item'; +$labels['setdefault'] = 'Pengaturan Awal'; +$labels['language'] = 'Bahasa'; +$labels['timezone'] = 'Daerah Waktu'; +$labels['pagesize'] = 'Baris per halaman'; +$labels['signature'] = 'Tanda tangan'; +$labels['dstactive'] = 'Waktu Musim Panas'; +$labels['htmleditor'] = 'Tulis pesan HTML'; +$labels['htmlsignature'] = 'Tandatangan HTML'; +$labels['previewpane'] = 'Perlihatkan tempat melihat'; +$labels['autosavedraft'] = 'Otomatis menyimpan pesan tertunda'; +$labels['everynminutes'] = 'setiap $n menit'; +$labels['never'] = 'tidak pernah'; +$labels['folder'] = 'Map'; +$labels['folders'] = 'Map-map'; +$labels['foldername'] = 'Nama map'; +$labels['subscribed'] = 'Subscribed'; +$labels['messagecount'] = 'Pesan-pesan'; +$labels['create'] = 'Buat'; +$labels['createfolder'] = 'Buat map baru'; +$labels['rename'] = 'Namai ulang'; +$labels['renamefolder'] = 'Namai ulang map'; +$labels['deletefolder'] = 'Hapus map'; +$labels['managefolders'] = 'Atur map'; +$labels['sortby'] = 'Urut berdasarkan'; +$labels['sortasc'] = 'Urut menaik'; +$labels['sortdesc'] = 'Urut menurun'; + +?> diff --git a/program/localization/id_ID/messages.inc b/program/localization/id_ID/messages.inc new file mode 100644 index 0000000..f4d62f8 --- /dev/null +++ b/program/localization/id_ID/messages.inc @@ -0,0 +1,82 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'Gagal masuk'; +$messages['cookiesdisabled'] = 'Browser Anda tidak menerima cookies'; +$messages['sessionerror'] = 'Session Anda invalid atau kadaluwarsa'; +$messages['imaperror'] = 'Koneksi ke IMAP server gagal'; +$messages['nomessagesfound'] = 'Surat tidak ditemukan di kotak masuk ini'; +$messages['loggedout'] = 'Anda berhasil mengakhiri session. Selamat Tinggal!'; +$messages['mailboxempty'] = 'Kotak masuk kosong'; +$messages['loading'] = 'Loading...'; +$messages['loadingdata'] = 'Loading data...'; +$messages['checkingmail'] = 'Memeriksa pesan baru...'; +$messages['sendingmessage'] = 'Mengirim pesan...'; +$messages['messagesent'] = 'Pesan terkirim'; +$messages['savingmessage'] = 'Menyimpan pesan...'; +$messages['messagesaved'] = 'MMenyimpan pesan ke daftar tunggu'; +$messages['successfullysaved'] = 'Berhasil disimpan'; +$messages['addedsuccessfully'] = 'Kontak berhasil ditambahkan ke buku alamat'; +$messages['contactexists'] = 'Konatk dengan alamat e-mail ini sudah ada'; +$messages['blockedimages'] = 'Untuk melindungi privasi Anda, gambar-gambar diluar server diblok pada pesan ini.'; +$messages['encryptedmessage'] = 'Pesan ini terenkripsi dan tidak bisa ditampilkan. Maaf!'; +$messages['nocontactsfound'] = 'Kontak tidak ditemukan'; +$messages['contactnotfound'] = 'Kontak yang diminta tidak ditemukan'; +$messages['sendingfailed'] = 'Pengiriman pesan gagal'; +$messages['errorsaving'] = 'Error ketika menyimpan'; +$messages['errormoving'] = 'Pesan tidak bisa dipindahkan'; +$messages['errordeleting'] = 'Pesan tidak bisa dihapus'; +$messages['deletecontactconfirm'] = 'Apakah anda yakin untuk menghapus kontak terpilih?'; +$messages['deletemessagesconfirm'] = 'Yakin menghapus pesan terpilih?'; +$messages['deletefolderconfirm'] = 'Apakah anda benar-benar ingin menghapus map ini?'; +$messages['purgefolderconfirm'] = 'Yakin menghapus semua pesan pada map ini?'; +$messages['formincomplete'] = 'Blangko tidak terisi semua'; +$messages['noemailwarning'] = 'Tolong masukkan alamat email yang valid'; +$messages['nonamewarning'] = 'Tolong masukkan nama'; +$messages['nopagesizewarning'] = 'Tolong masukkan ukuran halaman'; +$messages['norecipientwarning'] = 'Tolong masukkan sedikitnya satu penerima'; +$messages['nosubjectwarning'] = '\\"Judul\\" kosong. Isi judul sekarang?'; +$messages['nobodywarning'] = 'Kirim pesan ini tanpa teks?'; +$messages['notsentwarning'] = 'Pesan belum terkirim. Buang pesan Anda?'; +$messages['noldapserver'] = 'Tolong pilih server LDAP untuk pencarian'; +$messages['nocontactsreturned'] = 'Kontak kosong'; +$messages['nosearchname'] = 'Tolong masukkan nama kontak atau alamat email'; +$messages['searchsuccessful'] = '$nr pesan ditemukan'; +$messages['searchnomatch'] = 'Pencarian kosong'; +$messages['searching'] = 'Mencari...'; +$messages['checking'] = 'Memeriksa...'; +$messages['nospellerrors'] = 'Tidak ditemkan kesalahan ejaan'; +$messages['folderdeleted'] = 'Map berhasil dihapus'; +$messages['deletedsuccessfully'] = 'Berhasil dihapus'; +$messages['converting'] = 'Mengembalikan pesan ke format awal...'; +$messages['messageopenerror'] = 'Tidak dapat mengambil pesan dari server'; +$messages['fileuploaderror'] = 'Gagal mengunggah berkas'; +$messages['filesizeerror'] = 'Berkas terunggah mencapai ukuran maksimal dari $size'; +$messages['copysuccess'] = 'Berhasil menyalin $nr alamat'; +$messages['copyerror'] = 'Tidak bisa menyalin alamat manapun'; +$messages['sourceisreadonly'] = 'Sumber dari alamat ini hanya dapat dibaca'; +$messages['errorsavingcontact'] = 'Tidak bisa menyimpan alamat kontak'; +$messages['movingmessage'] = 'Memindahkan pesan...'; +$messages['receiptsent'] = 'Berhasil mengirim pemberitahuan tanda terima telah terbaca'; +$messages['errorsendingreceipt'] = 'Tidak dapat mengirim tanda terima'; +$messages['nodeletelastidentity'] = 'Anda tidak bida mengapus identitas ini, ini identitas yang terakhir'; +$messages['addsubfolderhint'] = 'Folder ini akan dibuat sebagai subfolder pada folder yang terpilih'; + +?> diff --git a/program/localization/index.inc b/program/localization/index.inc index cf6ee4e..782b848 100644 --- a/program/localization/index.inc +++ b/program/localization/index.inc @@ -5,7 +5,7 @@ | program/localization/index.inc | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -16,82 +16,85 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: index.inc 886 2007-10-19 07:24:53Z yllar $ - - */ + $Id: index.inc 1160 2008-03-01 15:32:44Z yllar $ + +*/ $rcube_languages = array( - 'en_US' => 'English (US)', - 'en_GB' => 'English (GB)', - 'ar' => 'Arabic', - 'am' => 'Armenian', - 'bg' => 'Bulgarian', - 'bs_BA' => 'Bosnian (Bosanski)', - 'zh_TW' => 'Chinese (Traditional)', - 'zh_CN' => 'Chinese (Simplified)', - 'ca' => 'Català', - 'cz' => 'Czech', - 'da' => 'Dansk', - 'de_DE' => 'Deutsch (Deutsch)', - 'de_CH' => 'Deutsch (Schweiz)', - 'eo' => 'Esperanto', - 'es' => 'Español', - 'et_EE' => 'Estonian', - 'eu' => 'Euskara', - 'fr' => 'Français', - 'gl' => 'Galego', - 'ga_IE' => 'Irish', - 'el' => 'Greek', - 'hi' => 'Hindi', - 'hr' => 'Hrvatski', - 'hu' => 'Hungarian', - 'id_ID' => 'Indonesian', - 'it' => 'Italiano', - 'ja' => 'Japanese (日本語)', - 'kr' => 'Korean', - 'kur_KU' => 'Kurdish (Kurmancî)', - 'lv' => 'Latvian', - 'lt' => 'Lithuanian', - 'mk' => 'Macedonian (Slavic FYROM)', - 'ms_MY' => 'Malay', - 'nl_NL' => 'Nederlands', - 'nl_BE' => 'Flemish', - 'nb_NO' => 'Norsk (bokmÃ¥l)', - 'nn_NO' => 'Norsk (nynorsk)', - 'fa' => 'Persian', - 'pl' => 'Polski', - 'pt_PT' => 'Portuguese (Standard)', - 'pt_BR' => 'Portuguese (Brazilian)', - 'ro' => 'Romanian', - 'ru' => 'Russian', - 'fi' => 'Suomi', - 'se' => 'Svenska', - 'si' => 'Sinhala', - 'sl' => 'Slovenian', - 'sk' => 'Slovak', - 'sr_latin' => 'Serbian Latin', - 'sr_cyrillic' => 'Serbian Cyrillic', - 'tr' => 'Turkish', - 'th_TH' => 'Thai', - 'uk' => 'Ukrainian', - 'vn' => 'Vietnamese' + 'sq_AL' => 'Albanian', + 'ar' => 'Arabic', + 'am' => 'Armenian', + 'bs_BA' => 'Bosnian (Bosanski)', + 'bg' => 'Bulgarian', + 'ca' => 'Català', + 'zh_CN' => 'Chinese (Simplified)', + 'zh_TW' => 'Chinese (Traditional)', + 'hr' => 'Croatian (Hrvatski)', + 'cz' => 'Czech', + 'da' => 'Dansk', + 'de_DE' => 'Deutsch (Deutsch)', + 'de_CH' => 'Deutsch (Schweiz)', + 'en_GB' => 'English (GB)', + 'en_US' => 'English (US)', + 'es' => 'Español', + 'eo' => 'Esperanto', + 'et_EE' => 'Estonian', + 'eu' => 'Euskara', + 'nl_BE' => 'Flemish', + 'fr' => 'Français', + 'gl' => 'Galego', + 'ge' => 'Georgian', + 'el' => 'Greek', + 'he' => 'Hebrew', + 'hi' => 'Hindi', + 'hu' => 'Hungarian', + 'is' => 'Icelandic', + 'id_ID' => 'Indonesian', + 'ga_IE' => 'Irish', + 'it' => 'Italiano', + 'ja' => 'Japanese (日本語)', + 'kr' => 'Korean', + 'lv' => 'Latvian', + 'lt' => 'Lithuanian', + 'mk' => 'Macedonian', + 'ms_MY' => 'Malay', + 'nl_NL' => 'Nederlands', + 'ne' => 'Nepali', + 'nb_NO' => 'Norsk (bokmÃ¥l)', + 'nn_NO' => 'Norsk (nynorsk)', + 'fa' => 'Persian', + 'pl' => 'Polski', + 'pt_BR' => 'Portuguese (Brazilian)', + 'pt_PT' => 'Portuguese (Standard)', + 'ro' => 'Romanian', + 'ru' => 'Russian', + 'sr_cyrillic' => 'Serbian Cyrillic', + 'sr_latin' => 'Serbian Latin', + 'si' => 'Sinhala', + 'sk' => 'Slovak', + 'sl' => 'Slovenian', + 'fi' => 'Suomi', + 'se' => 'Svenska', + 'th_TH' => 'Thai', + 'tr' => 'Turkish', + 'uk' => 'Ukrainian', + 'vn' => 'Vietnamese' ); $rcube_language_aliases = array( - 'ee' => 'et_EE', - 'bs' => 'bs_BA', - 'cn' => 'zh_CN', - 'de' => 'de_DE', - 'en' => 'en_US', - 'ga' => 'ga_IE', - 'nl' => 'nl_NL', - 'no' => 'nn_NO', - 'pt' => 'pt_PT', - 'th' => 'th_TH', - 'tw' => 'zh_TW' + 'ee' => 'et_EE', + 'bs' => 'bs_BA', + 'cn' => 'zh_CN', + 'de' => 'de_DE', + 'en' => 'en_US', + 'ga' => 'ga_IE', + 'nl' => 'nl_NL', + 'no' => 'nn_NO', + 'pt' => 'pt_PT', + 'th' => 'th_TH', + 'tw' => 'zh_TW' ); $rcube_charsets = array(); - ?> diff --git a/program/localization/is/labels.inc b/program/localization/is/labels.inc new file mode 100644 index 0000000..c6b8b0a --- /dev/null +++ b/program/localization/is/labels.inc @@ -0,0 +1,220 @@ + diff --git a/program/localization/is/messages.inc b/program/localization/is/messages.inc new file mode 100644 index 0000000..fdc1abb --- /dev/null +++ b/program/localization/is/messages.inc @@ -0,0 +1,64 @@ + \ No newline at end of file diff --git a/program/localization/it/labels.inc b/program/localization/it/labels.inc index bfd1016..1e29225 100644 --- a/program/localization/it/labels.inc +++ b/program/localization/it/labels.inc @@ -6,7 +6,7 @@ | language/it/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Yusef Maali | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 869 2007-10-15 13:27:08Z yllar $ + @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $ */ @@ -88,6 +88,9 @@ $labels['lastmessage'] = 'Visualizza l\'ultimo messaggio'; $labels['lastmessages'] = 'Visualizza l\'ultimo set di messaggi'; $labels['backtolist'] = 'Torna alla lista messaggi'; $labels['viewsource'] = 'Visualizza sorgente messaggio'; +$labels['markmessages'] = 'Marca i messaggi'; +$labels['markread'] = 'Letti'; +$labels['markunread'] = 'Non letti'; $labels['select'] = 'Seleziona'; $labels['all'] = 'Tutti'; $labels['none'] = 'Nessuno'; @@ -125,6 +128,10 @@ $labels['plaintoggle'] = 'Testo semplice'; $labels['addcc'] = 'Aggiungi Cc'; $labels['addbcc'] = 'Aggiungi Bcc'; $labels['addreplyto'] = 'Aggiungi Rispondi a'; +$labels['mdnrequest'] = 'Il mittente richiede di ricevere una notifica dell\'avvenuta lettura del messaggio. Si desidera inviare tale notifica?'; +$labels['receiptread'] = 'Ricevuta di ritorno (letto)'; +$labels['yourmessage'] = 'Questa è la ricevuta di ritorno del mesaggio inviato'; +$labels['receiptnote'] = 'Nota: questa Ricevuta di ritorno attesta solamente che il messaggio è stato visualizzato nel computer del destinatario. Non c\'è pertanto alcuna garanzia che il destinatario abbia letto o compreso il suo contenuto.'; $labels['name'] = 'Nome visualizzato'; $labels['firstname'] = 'Nome'; $labels['surname'] = 'Cognome'; @@ -172,6 +179,7 @@ $labels['folder'] = 'Cartella'; $labels['folders'] = 'Cartelle'; $labels['foldername'] = 'Nome cartella'; $labels['subscribed'] = 'Sottoscritta'; +$labels['messagecount'] = 'Messaggi'; $labels['create'] = 'Crea'; $labels['createfolder'] = 'Crea nuova cartella'; $labels['rename'] = 'Rinomina'; diff --git a/program/localization/it/messages.inc b/program/localization/it/messages.inc index 07fc7f4..6b8cd51 100644 --- a/program/localization/it/messages.inc +++ b/program/localization/it/messages.inc @@ -6,7 +6,7 @@ | language/it/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Yusef Maali | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 869 2007-10-15 13:27:08Z yllar $ + @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $ */ @@ -75,5 +75,9 @@ $messages['copyerror'] = 'Impossibile copiare gli indirizzi'; $messages['sourceisreadonly'] = 'La rubrica è in sola lettura'; $messages['errorsavingcontact'] = 'Impossibile salvare il contatto'; $messages['movingmessage'] = 'Sposto il messaggio...'; +$messages['receiptsent'] = 'Ricevuta di ritorno inviata con successo'; +$messages['errorsendingreceipt'] = 'Impossibile spedire la ricevuta di ritorno'; +$messages['nodeletelastidentity'] = 'Impossibile eliminare l\'unica identità disponibile'; +$messages['addsubfolderhint'] = 'La cartella verrà creata come sotto cartella della cartella corrente'; ?> \ No newline at end of file diff --git a/program/localization/ja/labels.inc b/program/localization/ja/labels.inc index 15dc25e..142c97f 100644 --- a/program/localization/ja/labels.inc +++ b/program/localization/ja/labels.inc @@ -6,7 +6,7 @@ | language/ja/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Takashi Takamatsu | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: labels.inc 1154 2008-02-28 20:05:47Z thomasb $ */ @@ -75,7 +75,8 @@ $labels['writenewmessage'] = '新規メールの作成'; $labels['replytomessage'] = '返信'; $labels['replytoallmessage'] = '送信者とすべての受信者に返信'; $labels['forwardmessage'] = '転送'; -$labels['deletemessage'] = 'ごみ箱に移動'; +$labels['deletemessage'] = '削除'; +$labels['movemessagetotrash'] = 'ごみ箱に移動'; $labels['printmessage'] = '印刷'; $labels['previousmessage'] = '前のメッセージへ'; $labels['previousmessages'] = '前の一覧へ'; @@ -87,6 +88,9 @@ $labels['lastmessage'] = '最後のメッセージへ'; $labels['lastmessages'] = '最後の一覧へ'; $labels['backtolist'] = '一覧に戻る'; $labels['viewsource'] = 'ソースの表示'; +$labels['markmessages'] = 'マークを付ける'; +$labels['markread'] = '既読にする'; +$labels['markunread'] = '未読にする'; $labels['select'] = '選択'; $labels['all'] = 'すべて'; $labels['none'] = 'なし'; @@ -100,8 +104,8 @@ $labels['unlimited'] = '無制限'; $labels['quicksearch'] = 'Quick search'; $labels['resetsearch'] = 'Reset search'; $labels['compose'] = 'メッセージの作成'; -$labels['sendmessage'] = '今すぐ送信'; $labels['savemessage'] = '草稿に保存'; +$labels['sendmessage'] = '今すぐ送信'; $labels['addattachment'] = 'ファイルの添付'; $labels['charset'] = '文字エンコード'; $labels['editortype'] = 'エディターの種類'; @@ -121,6 +125,13 @@ $labels['nosubject'] = '(件名なし)'; $labels['showimages'] = '画像の表示'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'テキスト'; +$labels['addcc'] = 'Cc 追加'; +$labels['addbcc'] = 'Bcc 追加'; +$labels['addreplyto'] = 'Reply-To 追加'; +$labels['mdnrequest'] = 'メッセージの送信者は開封確認の送付を求めています。開封確認のメッセージを送付しますか?'; +$labels['receiptread'] = '開封確認 (表示済)'; +$labels['yourmessage'] = 'これはあなたが送信したメッセージに対する開封確認です。'; +$labels['receiptnote'] = '注意: この開封確認はメッセージが受信者に表示されたことの通知です。受信者がメッセージを読んだこと、内容を理解したことを保証するものではありません。'; $labels['name'] = '表示名'; $labels['firstname'] = '名前'; $labels['surname'] = '名字'; @@ -168,6 +179,7 @@ $labels['folder'] = 'フォルダ'; $labels['folders'] = 'フォルダ一覧'; $labels['foldername'] = 'フォルダ名'; $labels['subscribed'] = '購読済'; +$labels['messagecount'] = 'メッセージ'; $labels['create'] = '作成'; $labels['createfolder'] = 'フォルダの新規作成'; $labels['rename'] = '名前の変更'; @@ -178,4 +190,4 @@ $labels['sortby'] = '整列の基準にする'; $labels['sortasc'] = '昇順で整列'; $labels['sortdesc'] = '降順で整列'; -?> \ No newline at end of file +?> diff --git a/program/localization/ja/messages.inc b/program/localization/ja/messages.inc index eb19674..46ea7fe 100644 --- a/program/localization/ja/messages.inc +++ b/program/localization/ja/messages.inc @@ -6,7 +6,7 @@ | language/ja/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,15 +14,15 @@ | Takashi Takamatsu | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: messages.inc 1154 2008-02-28 20:05:47Z thomasb $ */ $messages = array(); $messages['loginfailed'] = 'ログインに失敗しました。'; -$messages['cookiesdisabled'] = 'ブラウザーで Cookie が無効に設定されています。'; +$messages['cookiesdisabled'] = 'ブラウザで Cookie が無効に設定されています。'; $messages['sessionerror'] = 'セッションが正しくないか期限切れです。'; -$messages['imaperror'] = 'IMAP サーバーへの接続に失敗しました。'; +$messages['imaperror'] = 'IMAP サーバへの接続に失敗しました。'; $messages['nomessagesfound'] = 'メールはありません。'; $messages['loggedout'] = 'ログアウトしました。'; $messages['mailboxempty'] = 'メールボックスは空です。'; @@ -46,7 +46,7 @@ $messages['errormoving'] = 'メールを移動できません。'; $messages['errordeleting'] = 'メールを削除できません。'; $messages['deletecontactconfirm'] = '選択した連絡先を本当に削除しますか?'; $messages['deletemessagesconfirm'] = '選択したメールを本当に削除しますか?'; -$messages['deletefolderconfirm'] = 'このフォルダーを本当に削除しますか?'; +$messages['deletefolderconfirm'] = 'このフォルダを本当に削除しますか?'; $messages['purgefolderconfirm'] = 'このフォルダの全てのメールを本当に削除しますか?'; $messages['formincomplete'] = 'フォームの項目が完全に入力されていません。'; $messages['noemailwarning'] = '有効なメールアドレスを入力して下さい。'; @@ -64,7 +64,7 @@ $messages['searchnomatch'] = '一致するメールはありません。'; $messages['searching'] = '検索中です...'; $messages['checking'] = '確認中です...'; $messages['nospellerrors'] = 'スペルミスは見つかりませんでした。'; -$messages['folderdeleted'] = 'フォルダーを削除しました。'; +$messages['folderdeleted'] = 'フォルダを削除しました。'; $messages['deletedsuccessfully'] = '削除しました。'; $messages['converting'] = 'メールから書式を削除中です...'; $messages['messageopenerror'] = 'サーバからメールを取得できません。'; @@ -75,5 +75,9 @@ $messages['copyerror'] = 'アドレスをコピーできません。'; $messages['sourceisreadonly'] = 'このアドレス情報は読み取り専用です。'; $messages['errorsavingcontact'] = '連絡先のアドレスを保存できません。'; $messages['movingmessage'] = '移動中です...'; +$messages['receiptsent'] = '開封確認を送信しました。'; +$messages['errorsendingreceipt'] = '開封確認を送信できません。'; +$messages['nodeletelastidentity'] = '削除できません。少なくとも1つの個人情報が必要です。'; +$messages['addsubfolderhint'] = '現在選択しているフォルダのサブフォルダとして作成されます。'; -?> \ No newline at end of file +?> diff --git a/program/localization/kr/labels.inc b/program/localization/kr/labels.inc new file mode 100644 index 0000000..4df78c6 --- /dev/null +++ b/program/localization/kr/labels.inc @@ -0,0 +1,192 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $ + +*/ + +$labels['welcome'] = '$product에 오신 것을 환영합니다'; +$labels['welcome'] = '$product에 오신 것을 환영합니다'; +$labels['username'] = '사용자명'; +$labels['password'] = '비밀번호'; +$labels['server'] = '서버'; +$labels['login'] = '로그인'; +$labels['logout'] = '로그아웃'; +$labels['mail'] = '이메일'; +$labels['settings'] = '개인 설정'; +$labels['addressbook'] = '주소록'; +$labels['inbox'] = '받은편지함'; +$labels['drafts'] = '임시저장'; +$labels['sent'] = '보낸편지함'; +$labels['trash'] = '휴지통'; +$labels['junk'] = '정크메일'; +$labels['subject'] = '제목'; +$labels['from'] = '보내는 사람'; +$labels['to'] = '받는 사람'; +$labels['cc'] = '참조'; +$labels['bcc'] = '숨은 참조'; +$labels['replyto'] = '회신 주소'; +$labels['date'] = '날짜'; +$labels['size'] = '크기'; +$labels['priority'] = '우선순위'; +$labels['organization'] = '기관'; +$labels['reply-to'] = '회신 주소'; +$labels['mailboxlist'] = '폴더'; +$labels['messagesfromto'] = '$from 이 $to에게 보낸 메시지 $count 개'; +$labels['messagenrof'] = '메시지 $count 개 중 $nr 개'; +$labels['moveto'] = '이동...'; +$labels['download'] = '다운로드'; +$labels['filename'] = '파일 이름'; +$labels['filesize'] = '파일 크기'; +$labels['preferhtml'] = 'HTML 보이기'; +$labels['htmlmessage'] = 'HTML 메시지'; +$labels['prettydate'] = '날짜 형식'; +$labels['addtoaddressbook'] = '주소록에 추가'; +$labels['sun'] = '일'; +$labels['mon'] = '월'; +$labels['tue'] = '화'; +$labels['wed'] = '수'; +$labels['thu'] = '목'; +$labels['fri'] = '금'; +$labels['sat'] = '토'; +$labels['sunday'] = '일요일'; +$labels['monday'] = '월요일'; +$labels['tuesday'] = '화요일'; +$labels['wednesday'] = '수요일'; +$labels['thursday'] = '목요일'; +$labels['friday'] = '금요일'; +$labels['saturday'] = '토요일'; +$labels['today'] = '오늘'; +$labels['checkmail'] = '새 메일 확인'; +$labels['writenewmessage'] = '새 메일 작성'; +$labels['replytomessage'] = '회신 작성'; +$labels['replytoallmessage'] = '보낸이와 모든 수신자에게 회신'; +$labels['forwardmessage'] = '메일 전달'; +$labels['deletemessage'] = '메일 삭제'; +$labels['movemessagetotrash'] = '메일 휴지통으로 이동'; +$labels['printmessage'] = '메일 인쇄'; +$labels['previousmessage'] = '이전 메일 보기'; +$labels['previousmessages'] = '이전 메일 세트 보기'; +$labels['firstmessage'] = '처음 메일 보기'; +$labels['firstmessages'] = '처음 메일 세트 보기'; +$labels['nextmessage'] = '다음 메일 보기'; +$labels['nextmessages'] = '다음 메일 세트 보기'; +$labels['lastmessage'] = '마지막 메일 보기'; +$labels['lastmessages'] = '마지막 메일 세트 보기'; +$labels['backtolist'] = '메일 목록으로'; +$labels['viewsource'] = '소스 보기'; +$labels['markmessages'] = '메시지 표시'; +$labels['markread'] = '읽은 것으로'; +$labels['markunread'] = '읽지 않은 것으로'; +$labels['select'] = '선택'; +$labels['all'] = '모두'; +$labels['none'] = '없음'; +$labels['unread'] = '읽지 않음'; +$labels['compact'] = '간단하게'; +$labels['empty'] = '비우기'; +$labels['purge'] = '삭제'; +$labels['quota'] = '디스크 사용'; +$labels['unknown'] = '알수 없음'; +$labels['unlimited'] = '제한 없음'; +$labels['quicksearch'] = '빨리 찾기'; +$labels['resetsearch'] = '찾기 리셋'; +$labels['compose'] = '메일 쓰기'; +$labels['savemessage'] = '드래프트 저장'; +$labels['sendmessage'] = '메일 지금 보냄'; +$labels['addattachment'] = '파일 첨부'; +$labels['charset'] = '문자셋'; +$labels['editortype'] = '편집기 형태'; +$labels['returnreceipt'] = '수신 확인'; +$labels['checkspelling'] = '스펠링 체크'; +$labels['resumeediting'] = '편집 계속'; +$labels['revertto'] = '돌아감'; +$labels['attachments'] = '첨부 파일'; +$labels['upload'] = '업로드'; +$labels['close'] = '닫기'; +$labels['low'] = '낮음'; +$labels['lowest'] = '가장 낮음'; +$labels['normal'] = '보통'; +$labels['high'] = '높음'; +$labels['highest'] = '가장 높음'; +$labels['nosubject'] = '(제목 없음)'; +$labels['showimages'] = '이미지 표시'; +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = '일반 텍스트'; +$labels['addcc'] = '참조 넣기'; +$labels['addbcc'] = '숨은참조 넣기'; +$labels['addreplyto'] = '회신주소 넣기'; +$labels['mdnrequest'] = '이 메시지를 보낸 분이 읽음 확인 요청을 했습니다. 확인할까요?'; +$labels['receiptread'] = '읽음 확인 보내기'; +$labels['yourmessage'] = '당신의 메시지를 읽었습니다.'; +$labels['receiptnote'] = '주의: 이 확인은 이 메시지가 수신자의 컴퓨터에 표시된 것만을 의미합니다. 수신자가 반드시 이 메일을 읽거나 이해했다는 것은 아닙니다.'; +$labels['name'] = '표시 이름'; +$labels['firstname'] = '이름'; +$labels['surname'] = '성'; +$labels['email'] = '이메일'; +$labels['addcontact'] = '새 연락처 추가'; +$labels['editcontact'] = '연락처 편집'; +$labels['edit'] = '편집'; +$labels['cancel'] = '취소'; +$labels['save'] = '저장'; +$labels['delete'] = '삭제'; +$labels['newcontact'] = '새 연락처 카드 만들기'; +$labels['deletecontact'] = '선택한 연락처 삭제'; +$labels['composeto'] = '새 메일 작성'; +$labels['contactsfromto'] = '$from 에서 $to 로의 연락처 $count 개'; +$labels['print'] = '인쇄'; +$labels['export'] = '내보내기'; +$labels['previouspage'] = '이전 세트 보기'; +$labels['firstpage'] = '처음 세트 보기'; +$labels['nextpage'] = '다음 세트 보기'; +$labels['lastpage'] = '마지막 세트 보기'; +$labels['groups'] = '그룹'; +$labels['personaladrbook'] = '개인 주소'; +$labels['settingsfor'] = '설정'; +$labels['preferences'] = '환경 설정'; +$labels['userpreferences'] = '사용자 환경'; +$labels['editpreferences'] = '사용자 환경 편집'; +$labels['identities'] = '신원'; +$labels['manageidentities'] = '이 계정의 신원 관리'; +$labels['newidentity'] = '새 신원'; +$labels['newitem'] = '새 아이템'; +$labels['edititem'] = '아이템 편집'; +$labels['setdefault'] = '기본으로 설정'; +$labels['language'] = '언어'; +$labels['timezone'] = '시간대'; +$labels['pagesize'] = '페이지당 줄 수'; +$labels['signature'] = '서명'; +$labels['dstactive'] = '서머타임'; +$labels['htmleditor'] = 'HTML 메일 쓰기'; +$labels['htmlsignature'] = 'HTML 서명'; +$labels['previewpane'] = '이전 구역 보기'; +$labels['autosavedraft'] = '드래프트 자동 저장'; +$labels['everynminutes'] = '$n 분마다'; +$labels['never'] = '하지 않음'; +$labels['folder'] = '폴더'; +$labels['folders'] = '폴더'; +$labels['foldername'] = '폴더 이름'; +$labels['subscribed'] = '가입됨'; +$labels['messagecount'] = '메시지'; +$labels['create'] = '만들기'; +$labels['createfolder'] = '새 폴더 만들기'; +$labels['rename'] = '이름 바꾸기'; +$labels['renamefolder'] = '폴더 이름 바꾸기'; +$labels['deletefolder'] = '폴더 지우기'; +$labels['managefolders'] = '폴더 관리'; +$labels['sortby'] = '정렬'; +$labels['sortasc'] = '오름차순으로 정렬'; +$labels['sortdesc'] = '내림차순으로 정렬'; + +?> \ No newline at end of file diff --git a/program/localization/kr/messages.inc b/program/localization/kr/messages.inc new file mode 100644 index 0000000..95d591e --- /dev/null +++ b/program/localization/kr/messages.inc @@ -0,0 +1,82 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $ + +*/ + +$messages['loginfailed'] = '로그인 실패'; +$messages['loginfailed'] = '로그인 실패'; +$messages['cookiesdisabled'] = '브라우저가 쿠키를 지원하지 않습니다'; +$messages['sessionerror'] = '세션이 유효하지 않거나 종료되었습니다'; +$messages['imaperror'] = 'IMAP 서버 연결 실패'; +$messages['nomessagesfound'] = '이 메일함에 메일이 없습니다'; +$messages['loggedout'] = '세션을 성공적으로 종료하였습니다. 안녕히 가십시오!'; +$messages['mailboxempty'] = '메일함이 비어있습니다'; +$messages['loading'] = '불러오는 중...'; +$messages['loadingdata'] = '데이터 불러오는 중...'; +$messages['checkingmail'] = '새 메일 확인 중...'; +$messages['sendingmessage'] = '메일 보내는 중...'; +$messages['messagesent'] = '메일을 성공적으로 보냈습니다'; +$messages['savingmessage'] = '메일 저장 중...'; +$messages['messagesaved'] = '메일이 드래프트 폴더에 저장되었습니다'; +$messages['successfullysaved'] = '성공적으로 저장'; +$messages['addedsuccessfully'] = '연락처가 주소록에 성공적으로 추가되었습니다'; +$messages['contactexists'] = '이 메일로 지정된 연락처가 이미 있습니다'; +$messages['blockedimages'] = '보안 유지를 위해, 이 메일의 외부 이미지를 차단하였습니다'; +$messages['encryptedmessage'] = '이 메일은 암호화되어 ë³¼ 수 없습니다. 죄송합니다!'; +$messages['nocontactsfound'] = '연락처 없음'; +$messages['contactnotfound'] = '요청한 연락처가 없습니다'; +$messages['sendingfailed'] = '메일을 보내지 못했습니다'; +$messages['errorsaving'] = '저장 중 에러가 발생했습니다'; +$messages['errormoving'] = '메일을 옮길 수 없습니다'; +$messages['errordeleting'] = '메일을 지울 수 없습니다'; +$messages['deletecontactconfirm'] = '정말 선택한 연락처들을 삭제하시겠습니까?'; +$messages['deletemessagesconfirm'] = '정말 선택한 메일들을 삭제하시겠습니까?'; +$messages['deletefolderconfirm'] = '정말 이 폴더를 삭제하시겠습니까?'; +$messages['purgefolderconfirm'] = '정말 이 폴더의 모든 메일을 삭제하시겠습니까?'; +$messages['formincomplete'] = '양식을 완전히 채우지 않았습니다'; +$messages['noemailwarning'] = '유효한 이메일 주소를 넣어주십시오'; +$messages['nonamewarning'] = '이름을 넣어주십시오'; +$messages['nopagesizewarning'] = '페이지 크기를 넣어주십시오'; +$messages['norecipientwarning'] = '적어도 한 개 이상의 수신 주소를 넣어주십시오'; +$messages['nosubjectwarning'] = '"제목"이 없습니다. 제목을 넣으시겠습니까?'; +$messages['nobodywarning'] = '텍스트 없이 메일을 보낼까요?'; +$messages['notsentwarning'] = '메일을 보내지 않았습니다. 메일을 버리시겠습니까?'; +$messages['noldapserver'] = '검색할 LDAP 서버를 선택하세요'; +$messages['nocontactsreturned'] = '연락처가 없습니다'; +$messages['nosearchname'] = '연락처 이름이나 메일 주소를 넣으세요'; +$messages['searchsuccessful'] = '$nr개의 메일 발견'; +$messages['searchnomatch'] = '검색 결과가 없습니다'; +$messages['searching'] = '검색 중...'; +$messages['checking'] = '체크 중...'; +$messages['nospellerrors'] = '스펠링 에러가 없습니다'; +$messages['folderdeleted'] = '폴더를 성공적으로 삭제하였습니다'; +$messages['deletedsuccessfully'] = '성공적으로 삭제하였습니다'; +$messages['converting'] = '메일의 포맷을 지우는 중...'; +$messages['messageopenerror'] = '서버에서 메일을 가져올 수 없습니다'; +$messages['fileuploaderror'] = '파일 업로드 실패'; +$messages['filesizeerror'] = '올린 파일이 $size의 최대 크기를 초과했습니다'; +$messages['copysuccess'] = '$nr개의 주소를 성공적으로 복사했습니다'; +$messages['copyerror'] = '주소를 복사할 수 없습니다'; +$messages['sourceisreadonly'] = '이 주소 소스는 읽기 전용입니다'; +$messages['errorsavingcontact'] = '연락처 주소를 저장할 수 없습니다'; +$messages['movingmessage'] = '메시지 이동 중...'; +$messages['receiptsent'] = '메일 읽음 확인을 보냈습니다'; +$messages['errorsendingreceipt'] = '읽음 확인을 보낼 수 없습니다'; +$messages['nodeletelastidentity'] = '이 정보는 마지막 남은 것이므로 지울 수 없습니다'; +$messages['addsubfolderhint'] = '이 폴더는 현재 선택된 폴더의 서브 폴더로 만들어질 것입니다'; + +?> \ No newline at end of file diff --git a/program/localization/lt/labels.inc b/program/localization/lt/labels.inc index 9b9c16a..6f161d6 100644 --- a/program/localization/lt/labels.inc +++ b/program/localization/lt/labels.inc @@ -6,14 +6,14 @@ | language/lt/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Martynas Bendorius | + | Author: Martynas Bendorius | +-----------------------------------------------------------------------+' - @version $Id: labels.inc 853 2007-10-03 19:47:40Z yllar $ + @version $Id: labels.inc 1128 2008-02-21 07:43:23Z yllar $ */ @@ -87,6 +87,9 @@ $labels['lastmessage'] = 'Rodyti paskutinį laiÅ¡ką'; $labels['lastmessages'] = 'Rodyti paskutinius laiÅ¡kus'; $labels['backtolist'] = 'Grižti į laiÅ¡kų sarašą'; $labels['viewsource'] = 'Rodyti Å¡altinį'; +$labels['markmessages'] = 'Pažymėti laiÅ¡kus'; +$labels['markread'] = 'Kaip perskaitytus'; +$labels['markunread'] = 'Kaip neperskaitytus'; $labels['select'] = 'Pažymėti'; $labels['all'] = 'Visus'; $labels['none'] = 'Nieko'; @@ -124,6 +127,10 @@ $labels['plaintoggle'] = 'Paprastas tekstas'; $labels['addcc'] = 'Pridėti Cc'; $labels['addbcc'] = 'Pridėti Bcc'; $labels['addreplyto'] = 'Pridėti Reply-To'; +$labels['mdnrequest'] = 'Žinutės siuntėjas paprašė patvirtinti, kad jÅ«s ją perskaitėte. Ar norite iÅ¡siųsti patvirtinimą?'; +$labels['receiptread'] = 'Patvirtinimas (skaitymo)'; +$labels['yourmessage'] = 'JÅ«sų laiÅ¡ko perskaitymo patvirtinimas'; +$labels['receiptnote'] = 'Pastaba: Å¡is laiÅ¡ko perskaitymo patvirtinimas nurodo, jog laiÅ¡kas buvo atidarytas gavėjo kompiuteryje, tačiau negarantuoja, jog gavėjas perskaitė ir suprato laiÅ¡ko turinį.'; $labels['name'] = 'Rodomas vardas'; $labels['firstname'] = 'Vardas'; $labels['surname'] = 'Pavardė'; @@ -171,6 +178,7 @@ $labels['folder'] = 'Aplankas'; $labels['folders'] = 'Aplankai'; $labels['foldername'] = 'Aplanko vardas'; $labels['subscribed'] = 'Užsakytas'; +$labels['messagecount'] = 'LaiÅ¡kai'; $labels['create'] = 'Sukurti'; $labels['createfolder'] = 'Sukurti naują aplanką'; $labels['rename'] = 'Pervadinti'; diff --git a/program/localization/lt/messages.inc b/program/localization/lt/messages.inc index eb90411..24cd96f 100644 --- a/program/localization/lt/messages.inc +++ b/program/localization/lt/messages.inc @@ -6,14 +6,14 @@ | language/lt/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Martynas Bendorius | + | Author: Martynas Bendorius | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 853 2007-10-03 19:47:40Z yllar $ + @version $Id: messages.inc 1128 2008-02-21 07:43:23Z yllar $ */ @@ -74,5 +74,9 @@ $messages['copyerror'] = 'Adresų kopijuoti negalima'; $messages['sourceisreadonly'] = 'Å is adreso Å¡altinis yra tik skaitymui'; $messages['errorsavingcontact'] = 'Kontakto adreso iÅ¡saugoti negalima'; $messages['movingmessage'] = 'Perkeliamas laiÅ¡kas...'; +$messages['receiptsent'] = 'Sėkmingai iÅ¡siųstas laiÅ¡ko perskaitymo patvirtinimas'; +$messages['errorsendingreceipt'] = 'Nepavyko iÅ¡siųsti laiÅ¡ko perskaitymo patvirtinimo'; +$messages['nodeletelastidentity'] = 'JÅ«s negalite iÅ¡trinti Å¡ios tapatybės, kadangi ji yra vienintelė likusi.'; +$messages['addsubfolderhint'] = 'Å is aplankas bus sukurtas kaip poaplankis, kurį esate pažymėjęs'; -?> +?> diff --git a/program/localization/lv/labels.inc b/program/localization/lv/labels.inc index 54716a2..0d2f591 100644 --- a/program/localization/lv/labels.inc +++ b/program/localization/lv/labels.inc @@ -6,15 +6,15 @@ | language/lv/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Rudolfs Osins | - | Updated for 0.1-rc1: Mikelis Zalais | + | Mikelis Zalais | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 557 2007-05-15 06:41:32Z yllar $ + @version $Id: labels.inc 1093 2008-02-16 11:40:18Z tomekp $ */ @@ -75,7 +75,8 @@ $labels['writenewmessage'] = 'RakstÄ«t jaunu vēstuli'; $labels['replytomessage'] = 'Atbildēt uz vēstuli'; $labels['replytoallmessage'] = 'Atbildēt sÅ«tÄ«tājam un visiem saņēmējiem'; $labels['forwardmessage'] = 'PārsÅ«tÄ«t vēstuli'; -$labels['deletemessage'] = 'Pārvietot vēstuli uz miskasti'; +$labels['deletemessage'] = 'Dzēst vēstuli'; +$labels['movemessagetotrash'] = 'Pārvietot vēstuli uz miskasti'; $labels['printmessage'] = 'Izdrukāt Å¡o vēstuli'; $labels['previousmessage'] = 'ParādÄ«t iepriekšējo vēstuli'; $labels['previousmessages'] = 'ParādÄ«t iepriekšējo vēstuļu kopu'; @@ -87,6 +88,9 @@ $labels['lastmessage'] = 'ParādÄ«t pēdējo vēstuli'; $labels['lastmessages'] = 'ParādÄ«t pēdējo vēstuļu kopu'; $labels['backtolist'] = 'Atpakaļ uz vēstuļu sarakstu'; $labels['viewsource'] = 'RādÄ«t pirmtekstu'; +$labels['markmessages'] = 'AtzÄ«mēt vēstules'; +$labels['markread'] = 'Kā lasÄ«tas'; +$labels['markunread'] = 'Kā nelasÄ«tas'; $labels['select'] = 'IezÄ«mēt'; $labels['all'] = 'Visas'; $labels['none'] = 'Nevienu'; @@ -100,8 +104,8 @@ $labels['unlimited'] = 'neierobežots'; $labels['quicksearch'] = 'Ārtā meklēšana'; $labels['resetsearch'] = 'AtstatÄ«t meklēšanu'; $labels['compose'] = 'RakstÄ«t vēstuli'; -$labels['sendmessage'] = 'SÅ«tÄ«t vēstuli'; $labels['savemessage'] = 'Saglabāt uzmetumu'; +$labels['sendmessage'] = 'SÅ«tÄ«t vēstuli'; $labels['addattachment'] = 'Pievienot failu'; $labels['charset'] = 'RakstzÄ«mju kopa'; $labels['editortype'] = 'Redaktora tips'; @@ -121,6 +125,13 @@ $labels['nosubject'] = '(no subject)'; $labels['showimages'] = 'RādÄ«t attēlus'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'VienkārÅ¡s teksts'; +$labels['addcc'] = 'Pievienot Cc'; +$labels['addbcc'] = 'Pievienot Bcc'; +$labels['addreplyto'] = 'Pievienot Reply-To'; +$labels['mdnrequest'] = 'Å Ä«s vēstules sÅ«tÄ«tājs vēlas redzēt vēstules saņemÅ¡anas apstiprinājumu. Vai jÅ«s vēlaties nosÅ«tÄ«t apstiprinājumu?'; +$labels['receiptread'] = 'SaņemÅ¡anas apstiprinājums'; +$labels['yourmessage'] = 'Å Ä«s ir jÅ«su vēstules saņemÅ¡anas apstiprinājums'; +$labels['receiptnote'] = 'PiezÄ«me: Å Ä«s apsiprinājums nozÄ«mē tikai to, ka vēstule tika parādÄ«ta uz saņēmāja datora. Tas nenozÄ«mē, ka saņēmējs ir izlasÄ«jis vai izpratis vēstules saturu.'; $labels['name'] = 'UzrādÄ«tais vārds'; $labels['firstname'] = 'Vārds'; $labels['surname'] = 'Uzvārds'; @@ -168,6 +179,7 @@ $labels['folder'] = 'Mape'; $labels['folders'] = 'Mapes'; $labels['foldername'] = 'Mapes nosaukums'; $labels['subscribed'] = 'Abonētās'; +$labels['messagecount'] = 'Vēstules'; $labels['create'] = 'Izveidot'; $labels['createfolder'] = 'Izveidot jaunu mapi'; $labels['rename'] = 'Pārsaukt'; diff --git a/program/localization/lv/messages.inc b/program/localization/lv/messages.inc index 753961b..7ba47ed 100644 --- a/program/localization/lv/messages.inc +++ b/program/localization/lv/messages.inc @@ -6,15 +6,15 @@ | language/lv/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Rudolfs Osins | - | Updated for 0.1-rc1: Mikelis Zalais | + | Mikelis Zalais | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 557 2007-05-15 06:41:32Z yllar $ + @version $Id: messages.inc 1093 2008-02-16 11:40:18Z tomekp $ */ @@ -74,5 +74,10 @@ $messages['copysuccess'] = 'VeiksmÄ«gi nokopētas $nr vēstules'; $messages['copyerror'] = 'Nevarēja nokopēt nevienu adresi'; $messages['sourceisreadonly'] = 'Adreses avots ir lasīšanas režīmā tikai'; $messages['errorsavingcontact'] = 'Nevarēja saglabāt kontakta adreses'; +$messages['movingmessage'] = 'Pārvietoju vēstules...'; +$messages['receiptsent'] = 'SaņemÅ¡anas apstiprinājums nosÅ«tÄ«ts'; +$messages['errorsendingreceipt'] = 'Neizdevās nosÅ«tÄ«t apstiprinājumu'; +$messages['nodeletelastidentity'] = 'Å o identitāti nevar izdzēst, tā ir pati pēdējā.'; +$messages['addsubfolderhint'] = 'Å is folderis tiks izveidots kā apakÅ¡folderis tam, kurÅ¡ patreiz ir izvēlēts'; ?> \ No newline at end of file diff --git a/program/localization/mk/labels.inc b/program/localization/mk/labels.inc index 3a42fe4..40e2b1a 100755 --- a/program/localization/mk/labels.inc +++ b/program/localization/mk/labels.inc @@ -1,177 +1,191 @@ - \ No newline at end of file diff --git a/program/localization/mk/messages.inc b/program/localization/mk/messages.inc index f20b7d9..15b6645 100755 --- a/program/localization/mk/messages.inc +++ b/program/localization/mk/messages.inc @@ -1,74 +1,81 @@ - \ No newline at end of file diff --git a/program/localization/ms_MY/labels.inc b/program/localization/ms_MY/labels.inc index b511c75..6be01bc 100644 --- a/program/localization/ms_MY/labels.inc +++ b/program/localization/ms_MY/labels.inc @@ -6,7 +6,7 @@ | language/ms_MY/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ diff --git a/program/localization/ms_MY/messages.inc b/program/localization/ms_MY/messages.inc index 6cbd92b..d6c9fb1 100644 --- a/program/localization/ms_MY/messages.inc +++ b/program/localization/ms_MY/messages.inc @@ -3,10 +3,10 @@ /* +-----------------------------------------------------------------------+ - | language/ms_MY/messages.inc | + | language/ms_MY/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ diff --git a/program/localization/nb_NO/labels.inc b/program/localization/nb_NO/labels.inc index 1b46546..8e1b07e 100644 --- a/program/localization/nb_NO/labels.inc +++ b/program/localization/nb_NO/labels.inc @@ -6,14 +6,15 @@ | language/nb_NO/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | - | All rights reserved. | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | + | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Kjetil Waage - Nextline AS | + | Author: Tor Erik Linnerud - JKLM | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 553 2007-05-13 16:31:19Z thomasb $ + @version $Id: labels.inc 1093 2008-02-16 11:40:18Z tomekp $ */ @@ -29,9 +30,9 @@ $labels['settings'] = 'Personlige innstillinger'; $labels['addressbook'] = 'Adressebok'; $labels['inbox'] = 'Innboks'; $labels['drafts'] = 'Kladder'; -$labels['sent'] = 'Sendt post'; +$labels['sent'] = 'Sendt'; $labels['trash'] = 'Søppel'; -$labels['junk'] = 'Junk'; +$labels['junk'] = 'Spam'; $labels['subject'] = 'Emne'; $labels['from'] = 'Avsender'; $labels['to'] = 'Mottaker'; @@ -51,7 +52,7 @@ $labels['download'] = 'last ned'; $labels['filename'] = 'Filnavn'; $labels['filesize'] = 'Filstørrelse'; $labels['preferhtml'] = 'Foretrekk HTML'; -$labels['htmlmessage'] = 'HTML besked'; +$labels['htmlmessage'] = 'HTML-beskjed'; $labels['prettydate'] = 'Pen datovisning'; $labels['addtoaddressbook'] = 'Tilføy til adresseboken'; $labels['sun'] = 'Søn'; @@ -71,14 +72,15 @@ $labels['saturday'] = 'Lørdag'; $labels['today'] = 'I dag'; $labels['checkmail'] = 'Sjekk for nye beskjeder'; $labels['writenewmessage'] = 'Opprett en ny e-post'; -$labels['replytomessage'] = 'Svar pÃ¥ denne e-post'; +$labels['replytomessage'] = 'Svar pÃ¥ denne e-posten'; $labels['replytoallmessage'] = 'Svar til alle mottakere'; -$labels['forwardmessage'] = 'Videresend denne e-post'; -$labels['deletemessage'] = 'Flytt e-posten til søppel'; -$labels['printmessage'] = 'Skriv ut denne e-post'; +$labels['forwardmessage'] = 'Videresend denne e-posten'; +$labels['deletemessage'] = 'Slett e-posten'; +$labels['movemessagetotrash'] = 'Flytt e-posten til søppel'; +$labels['printmessage'] = 'Skriv ut denne e-posten'; $labels['previousmessage'] = 'Vis forrige melding'; $labels['previousmessages'] = 'Vis forrige side'; -$labels['firstmessage'] = 'Vis første meldingen'; +$labels['firstmessage'] = 'Vis første melding'; $labels['firstmessages'] = 'Vis første side med meldinger'; $labels['nextmessage'] = 'Vis neste melding'; $labels['nextmessages'] = 'Vis neste side'; @@ -86,6 +88,9 @@ $labels['lastmessage'] = 'Vis siste melding'; $labels['lastmessages'] = 'Vis siste side med meldinger'; $labels['backtolist'] = 'Tilbake til e-postlisten'; $labels['viewsource'] = 'Vis kilde'; +$labels['markmessages'] = 'Merk e-postene'; +$labels['markread'] = 'som lest'; +$labels['markunread'] = 'som ulest'; $labels['select'] = 'Velg'; $labels['all'] = 'Alle'; $labels['none'] = 'Ingen'; @@ -93,14 +98,14 @@ $labels['unread'] = 'Uleste'; $labels['compact'] = 'Rydd opp'; $labels['empty'] = 'Tøm'; $labels['purge'] = 'Tøm'; -$labels['quota'] = 'Disk forbruk'; +$labels['quota'] = 'Plassforbruk'; $labels['unknown'] = 'ukjent'; $labels['unlimited'] = 'ubegrenset'; $labels['quicksearch'] = 'Hurtigsøk'; $labels['resetsearch'] = 'Nullstill søk'; -$labels['compose'] = 'Lag ny e-post'; -$labels['sendmessage'] = 'Send e-posten'; +$labels['compose'] = 'Skriv ny e-post'; $labels['savemessage'] = 'Lagre kladd'; +$labels['sendmessage'] = 'Send e-posten'; $labels['addattachment'] = 'Vedlegg'; $labels['charset'] = 'Tegnsett'; $labels['editortype'] = 'Format'; @@ -116,11 +121,18 @@ $labels['lowest'] = 'Lavest'; $labels['normal'] = 'Normal'; $labels['high'] = 'Høy'; $labels['highest'] = 'Høyest'; -$labels['nosubject'] = '(ingen emne)'; +$labels['nosubject'] = '(intet emne)'; $labels['showimages'] = 'Vis bilder'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Ren tekst'; -$labels['name'] = 'Vist navn'; +$labels['addcc'] = 'Legg til Cc'; +$labels['addbcc'] = 'Legg til Bcc'; +$labels['addreplyto'] = 'Legg til Reply-To'; +$labels['mdnrequest'] = 'Senderen av denne meldingen har bedt om Ã¥ bli gjort oppmerksom pÃ¥ at denne meldingen er lest. Ønsker du Ã¥ sende denne bekreftelsen?'; +$labels['receiptread'] = 'Kvittering (lest)'; +$labels['yourmessage'] = 'Dette er en kvittering for at din e-post er mottatt'; +$labels['receiptnote'] = 'Merknad: Denne kvitteringen bekrefter bare at e-posten ble vist hos mottakeren. Det er ingen garanti for at mottakeren har lest eller forstÃ¥tt innholdet i e-posten.'; +$labels['name'] = 'Visningsnavn'; $labels['firstname'] = 'Fornavn'; $labels['surname'] = 'Etternavn'; $labels['email'] = 'E-post'; @@ -151,22 +163,23 @@ $labels['manageidentities'] = 'Administrer identitetene for denne kontoen'; $labels['newidentity'] = 'Ny identitet'; $labels['newitem'] = 'Nytt punkt'; $labels['edititem'] = 'Rediger punkt'; -$labels['setdefault'] = 'Sett standard'; +$labels['setdefault'] = 'Sett som standard'; $labels['language'] = 'SprÃ¥k'; $labels['timezone'] = 'Tidssone'; $labels['pagesize'] = 'Linjer per side'; $labels['signature'] = 'Signatur'; $labels['dstactive'] = 'Sommertid'; -$labels['htmleditor'] = 'Bruk HTML editor'; -$labels['htmlsignature'] = 'HTML signatur'; +$labels['htmleditor'] = 'Bruk HTML-editor'; +$labels['htmlsignature'] = 'HTML-signatur'; $labels['previewpane'] = 'ForhÃ¥ndsvisning'; $labels['autosavedraft'] = 'Autolagring av utkast'; -$labels['everynminutes'] = 'Hver $n minutt'; +$labels['everynminutes'] = 'Hvert $n. minutt'; $labels['never'] = 'Aldri'; $labels['folder'] = 'Mappe'; $labels['folders'] = 'Mapper'; $labels['foldername'] = 'Mappenavn'; $labels['subscribed'] = 'Abonnere'; +$labels['messagecount'] = 'Meldinger'; $labels['create'] = 'Opprett'; $labels['createfolder'] = 'Lag ny mappe'; $labels['rename'] = 'Endre navn'; diff --git a/program/localization/nb_NO/messages.inc b/program/localization/nb_NO/messages.inc index 0da3335..2ea63a7 100644 --- a/program/localization/nb_NO/messages.inc +++ b/program/localization/nb_NO/messages.inc @@ -6,23 +6,24 @@ | language/nb_NO/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | - | All rights reserved. | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | + | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Kjetil Waage - Nextline AS | + | Author: Tor Erik Linnerud - JKLM | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 553 2007-05-13 16:31:19Z thomasb $ + @version $Id: messages.inc 1093 2008-02-16 11:40:18Z tomekp $ */ $messages = array(); -$messages['loginfailed'] = 'Mislykket pÃ¥logging'; +$messages['loginfailed'] = 'PÃ¥logging mislyktes'; $messages['cookiesdisabled'] = 'Din nettleser aksepterer ikke cookies'; $messages['sessionerror'] = 'Din session er ugyldig eller utløpt'; $messages['imaperror'] = 'Forbindelsen til IMAP serveren sviktet'; -$messages['nomessagesfound'] = 'Det ble ikke funnet noen beskjeder i denne postkassen'; +$messages['nomessagesfound'] = 'Det ble ikke funnet noen beskjeder i denne innboksen'; $messages['loggedout'] = 'Du er logget av webmail. Ha det bra!'; $messages['mailboxempty'] = 'Postkassen er tom!'; $messages['loading'] = 'Laster...'; @@ -34,7 +35,7 @@ $messages['savingmessage'] = 'Lagrer beskjed...'; $messages['messagesaved'] = 'Beskjed er lagret i "kladder" mappen'; $messages['successfullysaved'] = 'Lagret'; $messages['addedsuccessfully'] = 'Kontakten ble tilføyd i adresseboken'; -$messages['contactexists'] = 'Der er allerede en kontakt med denne e-post adressen'; +$messages['contactexists'] = 'Der er allerede en kontakt med denne e-postadressen'; $messages['blockedimages'] = 'Bilder fra eksterne servere er blokkert i denne e-posten.'; $messages['encryptedmessage'] = 'Dette er en krypteret beskjed og kan ikke vises. Beklager!'; $messages['nocontactsfound'] = 'Ingen kontakter ble funnet'; @@ -44,7 +45,7 @@ $messages['errorsaving'] = 'Det oppstod en feil ved lagring av data'; $messages['errormoving'] = 'Kunne ikke flytte beskjeden'; $messages['errordeleting'] = 'Kunne ikke slette beskjeden'; $messages['deletecontactconfirm'] = 'Vil du virkelig slette valgte kontakt(er)?'; -$messages['deletemessagesconfirm'] = 'Vil du virkelig slette valgte meldingen(e)?'; +$messages['deletemessagesconfirm'] = 'Vil du virkelig slette de valgte meldingen(e)?'; $messages['deletefolderconfirm'] = 'Vil du virkelig slette denne mappen?'; $messages['purgefolderconfirm'] = 'Vil du virkelig slette alle meldingene i denne mappen?'; $messages['formincomplete'] = 'Skjemaet var ikke fullstendig fylt ut'; @@ -57,7 +58,7 @@ $messages['nobodywarning'] = 'Send denne e-post uten tekst?'; $messages['notsentwarning'] = 'E-posten ble ikke sendt. Vil du slette meldingen?'; $messages['noldapserver'] = 'Venligst velg hvilken LDAP server det skal søkes i'; $messages['nocontactsreturned'] = 'Ingen kontakter ble funnet'; -$messages['nosearchname'] = 'Venligst skriv inn kontaktens navn eller e-post adresse'; +$messages['nosearchname'] = 'Venligst skriv inn kontaktens navn eller e-postadresse'; $messages['searchsuccessful'] = '$nr meldinger funnet'; $messages['searchnomatch'] = 'Søket ga ingen resultater'; $messages['searching'] = 'Søker...'; @@ -73,5 +74,10 @@ $messages['copysuccess'] = '$nr adresser ble kopiert'; $messages['copyerror'] = 'Kunne ikke kopiere'; $messages['sourceisreadonly'] = 'Denne adressekilden er skrivebeskyttet'; $messages['errorsavingcontact'] = 'Kunne ikke lagre adressen'; +$messages['movingmessage'] = 'Flytter e-post...'; +$messages['receiptsent'] = 'Kvittering har blitt sent'; +$messages['errorsendingreceipt'] = 'Kunne ikke sende kvittering'; +$messages['nodeletelastidentity'] = 'Du kan ikke slette denne identiteten, det er din siste.'; +$messages['addsubfolderhint'] = 'Mappen vil bli opprettet som en undermappe av den nÃ¥værende valgte mappe'; ?> \ No newline at end of file diff --git a/program/localization/ne/labels.inc b/program/localization/ne/labels.inc new file mode 100644 index 0000000..1b1e899 --- /dev/null +++ b/program/localization/ne/labels.inc @@ -0,0 +1,178 @@ +, | + | RoundCubeAuthor: Thomas Bruederli | + +-----------------------------------------------------------------------+ +*/ + +$labels = array(); +$labels['welcome'] = '$product मा स्वागत छ'; +$labels['username'] = 'युसरनेम'; +$labels['password'] = 'पासवर्ड'; +$labels['server'] = 'सर्भर'; +$labels['login'] = 'लगईन'; +$labels['logout'] = 'लगआउट'; +$labels['mail'] = 'ई-मेल'; +$labels['settings'] = 'व्यक्तिगत रोजाईहरु'; +$labels['addressbook'] = 'ठेगाना किताब'; +$labels['inbox'] = 'इनबक्स'; +$labels['drafts'] = 'ड्राफ्ट'; +$labels['sent'] = 'पठईएका मेलहरु'; +$labels['trash'] = 'रद्दी टोकरी'; +$labels['junk'] = 'स्पाम'; +$labels['subject'] = 'विषय'; +$labels['from'] = 'प्रेषक'; +$labels['to'] = 'प्रापक'; +$labels['cc'] = 'कार्बन कपि'; +$labels['bcc'] = 'अंधो कार्बन कपि'; +$labels['replyto'] = 'पुन: जवाब'; +$labels['date'] = 'तारिख'; +$labels['size'] = 'नाप'; +$labels['priority'] = 'मेलको प्राथमिकता'; +$labels['organization'] = 'संस्था'; +$labels['reply-to'] = 'पुन: जवाब'; +$labels['mailboxlist'] = 'फोलडर'; +$labels['messagesfromto'] = 'मेलहरु $from बाट $to सम्म, $count मध्यबाट'; +$labels['messagenrof'] = '$nr नम्बर मेल, $count मध्यबाट'; +$labels['moveto'] = 'सार्नुहोस...'; +$labels['download'] = 'डाऊनलोड'; +$labels['filename'] = 'फाईलको नाम'; +$labels['filesize'] = 'फाईलको नाप'; +$labels['preferhtml'] = 'ऐच-टी-ऐम-ऐल(HTML) देखाउनुहोस'; +$labels['htmlmessage'] = 'ऐच-टी-ऐम-ऐल (HTML) रूपका मेल'; +$labels['prettydate'] = 'सुन्दर तारिख'; +$labels['addtoaddressbook'] = 'ठेगाना पुस्तिकामा जोड्नुहोस'; +$labels['sun'] = 'आइत'; +$labels['mon'] = 'सोम'; +$labels['tue'] = 'मंगल'; +$labels['wed'] = 'बुध'; +$labels['thu'] = 'विहि'; +$labels['fri'] = 'शुक'; +$labels['sat'] = 'शनि'; +$labels['sunday'] = 'आइतवार'; +$labels['monday'] = 'सोमवार'; +$labels['tuesday'] = 'मंगलवार'; +$labels['wednesday'] = 'बुधवार'; +$labels['thursday'] = 'विहिवार'; +$labels['friday'] = 'शुक्रवार'; +$labels['saturday'] = 'शनिवार'; +$labels['today'] = 'आज'; +$labels['checkmail'] = 'नया मेल खोज्नुहोस'; +$labels['writenewmessage'] = 'नया मेल लेखनुहोस'; +$labels['replytomessage'] = 'मेलको जवाफ दिनुहोस'; +$labels['replytoallmessage'] = 'प्रेषक लगायत सबैलाई जवाफ दिनुहोस'; +$labels['forwardmessage'] = 'मेल अगाडि पठाउनुहोस'; +$labels['deletemessage'] = 'रद्दी टोकरीमा सार्नुहोस'; +$labels['printmessage'] = 'मेल छाप्नुहोस'; +$labels['previousmessage'] = 'पछाडिको मेल देखाउनुहोस'; +$labels['previousmessages'] = 'पछाडिको मेलका सेटहरु देखाउनुहोस'; +$labels['firstmessage'] = 'पहलो मेल देखाउनुहोस'; +$labels['firstmessages'] = 'पहलो मेलका सेटहरु देखाउनुहोस'; +$labels['nextmessage'] = 'अगाडिको मेल देखाउनुहोस'; +$labels['nextmessages'] = 'अगाडिको मेलका सेटहरु देखाउनुहोस'; +$labels['lastmessage'] = 'अन्तिम मेल देखाउनुहोस'; +$labels['lastmessages'] = 'अन्तिम मेलका सेटहरु देखाउनुहोस'; +$labels['backtolist'] = 'मेल सूची देखाउनुहोस'; +$labels['viewsource'] = 'श्रोत देखाउनुहोस'; +$labels['select'] = 'चुन्नुहोस'; +$labels['all'] = 'सबै |'; +$labels['none'] = 'हैन'; +$labels['unread'] = 'नपढिएका |'; +$labels['compact'] = 'छोटो गर्नुहोस'; +$labels['empty'] = 'खाली गर्ने'; +$labels['purge'] = 'नाम निशाना मेटाउनुहोस'; +$labels['quota'] = 'डिस्कको उपभोग'; +$labels['unknown'] = 'अज्ञात'; +$labels['unlimited'] = 'अनगिन्ति'; +$labels['quicksearch'] = 'स्फुर्ति खोज'; +$labels['resetsearch'] = 'पन: खोज'; +$labels['compose'] = 'मेल लखन गर्नुहोस'; +$labels['sendmessage'] = 'तुरुन्तै मेल पठाउनुहोस'; +$labels['savemessage'] = 'ड्राफ्ट जोगाउनुहोस'; +$labels['addattachment'] = 'फाइल टाँस्नुहोस'; +$labels['charset'] = 'क्यारेक्टर सेट'; +$labels['editortype'] = 'सम्पादकको प्रकार'; +$labels['returnreceipt'] = 'फिर्ति रसीद'; +$labels['checkspelling'] = 'हिज्जे जाँच'; +$labels['resumeediting'] = 'पुन: सम्पादन गर्नुहोस'; +$labels['revertto'] = 'पहिलेको स्थितीमा जानुहोस'; +$labels['attachments'] = 'टाँसिएका फाईलहरु'; +$labels['upload'] = 'अपलोड'; +$labels['close'] = 'बन्द'; +$labels['low'] = 'कम'; +$labels['lowest'] = 'सबै भन्दा कम'; +$labels['normal'] = 'साधारण'; +$labels['high'] = 'उच्च'; +$labels['highest'] = 'उच्चतम'; +$labels['nosubject'] = '(बिना विषयको)'; +$labels['showimages'] = 'चित्र देखाउनुहोस'; +$labels['htmltoggle'] = 'ऐच-टी-ऐम-एल (HTML)'; +$labels['plaintoggle'] = 'सादा अक्षर'; +$labels['name'] = 'देखाउने नाम'; +$labels['firstname'] = 'पहिलो नाम'; +$labels['surname'] = 'थर'; +$labels['email'] = 'ई-मेल'; +$labels['addcontact'] = 'नया सम्पर्क जोड्नुहोस'; +$labels['editcontact'] = 'सम्पर्क सच्याउनुहोस'; +$labels['edit'] = 'सच्याउनुहोस'; +$labels['cancel'] = 'खारेज गर्नुहोस'; +$labels['save'] = 'जोगाउनुहोस'; +$labels['delete'] = 'मेटाउनुहोस'; +$labels['newcontact'] = 'नया सम्पर्क कार्ड बनाउनुहोस'; +$labels['deletecontact'] = 'छानिएका सम्पर्कहरु मेटाउनुहोस'; +$labels['composeto'] = 'मेल लेखी पठाउनुहोस'; +$labels['contactsfromto'] = 'सम्पर्कहरु $from बाट $to सम्म, $count मध्यबाट'; +$labels['print'] = 'छाप्नुहोस'; +$labels['export'] = 'ऐक्स्पोर्ट गर्नुहोस'; +$labels['previouspage'] = 'पहिलेको सेट देखाउनुहोस'; +$labels['firstpage'] = 'पहिलो सेट देखाउनुहोस'; +$labels['nextpage'] = 'अर्को सेट देखाउनुहोस'; +$labels['lastpage'] = 'अन्तिम सेट देखाउनुहोस'; +$labels['groups'] = 'समूहहरु'; +$labels['personaladrbook'] = 'व्यक्तिगत ठेगानाहरु'; +$labels['settingsfor'] = 'तय'; +$labels['preferences'] = 'रोजाइहरु'; +$labels['userpreferences'] = 'यूसरका रोजाइहरु'; +$labels['editpreferences'] = 'यूसरका रोजाइहर सम्पादन गर्नुहोस'; +$labels['identities'] = 'पहिचानहरु'; +$labels['manageidentities'] = 'यो खाताको पहिचानहरको व्यवस्था गर्नुहोस'; +$labels['newidentity'] = 'नया पहिचान'; +$labels['newitem'] = 'नया प्रकार'; +$labels['edititem'] = 'प्रकार सम्पादन गर्नुहोस'; +$labels['setdefault'] = 'तय गर्नुहोस'; +$labels['language'] = 'भाषा'; +$labels['timezone'] = 'समय क्षेत्र'; +$labels['pagesize'] = 'हरेक पन्नामा यति'; +$labels['signature'] = 'हस्ताक्षर'; +$labels['dstactive'] = 'प्रकाश बचाव'; +$labels['htmleditor'] = 'ऐच-टी-ऐम-एल (HTML) मेल लखन गर्नुहोस'; +$labels['htmlsignature'] = 'ऐच-टी-ऐम-एल (HTML) हस्ताक्षर'; +$labels['previewpane'] = 'पूर्व दृष्य देखाउनुहोस'; +$labels['autosavedraft'] = 'स्वत ड्राफ्ट जोगाउनुहोस'; +$labels['everynminutes'] = 'प्रत्येक $n मिनटमा'; +$labels['never'] = 'काहिलै नहुने'; +$labels['folder'] = 'फोल्डर'; +$labels['folders'] = 'फोल्डरहरु'; +$labels['foldername'] = 'फोल्डरको नाम'; +$labels['subscribed'] = 'सबस्क्राईब गरियो'; +$labels['create'] = 'बनाउनुहोस'; +$labels['createfolder'] = 'नया फोलडर बनाउनुहोस'; +$labels['rename'] = 'नाम बदल्नुहोस'; +$labels['renamefolder'] = 'फोलडरको नाम बदल्नुहोस'; +$labels['deletefolder'] = 'फोलडर मेट्नुहोस'; +$labels['managefolders'] = 'फोलडर व्यवस्थित गर्नुहोस'; +$labels['sortby'] = 'यसरी तय गर्नुहोस'; +$labels['sortasc'] = 'पहिलो देखि अन्तिम सम्म तय गर्नुहोस'; +$labels['sortdesc'] = 'अन्तिम देखि पहिलो सम्म तय गर्नुहोस'; + +?> diff --git a/program/localization/ne/messages.inc b/program/localization/ne/messages.inc new file mode 100644 index 0000000..bd28199 --- /dev/null +++ b/program/localization/ne/messages.inc @@ -0,0 +1,75 @@ +, | + | RoundCubeAuthor: Thomas Bruederli | + +-----------------------------------------------------------------------+ +*/ + +$messages = array(); +$messages['loginfailed'] = 'लागईन हुन पाएन'; +$messages['cookiesdisabled'] = 'तपाईको ब्राऊसरले कुकी स्वीकार गारिरहेको छैन'; +$messages['sessionerror'] = 'सत्र समाप्त वा अवैद्य'; +$messages['imaperror'] = 'सर्वर संग सम्पर्क हुन पाएन'; +$messages['nomessagesfound'] = 'यो मेलबक्स मा कुनै मेल छैन'; +$messages['loggedout'] = 'सत्र समाप्त । नमास्कार!'; +$messages['mailboxempty'] = 'मेल बक्स खाली छ'; +$messages['loading'] = 'लोड भईरहेको छ...'; +$messages['loadingdata'] = 'डाटा लोड भईरहेको छै...'; +$messages['checkingmail'] = 'नया मेलको खोजी भईरहेको छ...'; +$messages['sendingmessage'] = 'मेल पठाईदै रहेको छ...'; +$messages['messagesent'] = 'मेल सफल्तापूर्वक पठाईयो'; +$messages['savingmessage'] = 'मेल जोगाईदै छ...'; +$messages['messagesaved'] = 'मेल ड्राफ्ट फोल्डरमा जोगाईयो'; +$messages['successfullysaved'] = 'सफल्तापूर्वक जोगाईयो'; +$messages['addedsuccessfully'] = 'सम्पर्क पुस्तिकामा सफल्तापूर्वक सम्पर्क प्रविष्ट गारियो'; +$messages['contactexists'] = 'यो ई-मेल पहिलै लिईसकिएको छ'; +$messages['blockedimages'] = 'तपाईको प्राईवेसी को लागि तथा अन्य स्पामबाट बच्नकोलागि यो मेलमा चित्रहुरु देखाईएका छैनन्।'; +$messages['encryptedmessage'] = 'माफ गर्नुहोसे, यो मेल ईन्क्रिफ्ट गरिएको रूपमा छ, त्यसैले देखाउन सकिदैन!'; +$messages['nocontactsfound'] = 'कुनै सम्पर्क भेटिएन'; +$messages['contactnotfound'] = 'अनुरोध गारिएको सम्पर्क भेटिएन'; +$messages['sendingfailed'] = 'मेल पठाउन सकिएन'; +$messages['errorsaving'] = 'जोगाउदा-जोगाउदै गडबड भायो'; +$messages['errormoving'] = 'मेल सार्न सकिएन'; +$messages['errordeleting'] = 'मेल मेटाउन सकिएन'; +$messages['deletecontactconfirm'] = 'तापाईले छान्नुभएको सम्पर्कहरु, साँचै मेट्न चहानुहुन्छ?'; +$messages['deletemessagesconfirm'] = 'तापाईले छान्नु भएको मेलहरु, साँचै मेट्न चहानुहुन्छ?'; +$messages['deletefolderconfirm'] = 'तापाईले साँचै यो फोल्डर मेट्न चहानु हुन्छ?'; +$messages['purgefolderconfirm'] = 'तापाईले साँचै यो फोल्डरमा भएका सबै मेलहरु मेट्न चहानुहुन्छ?'; +$messages['formincomplete'] = 'फर्म पूर्ण रुपमा भरिएको छैन'; +$messages['noemailwarning'] = 'कृपया वैद्य ई-मेल भर्नुहोस'; +$messages['nonamewarning'] = 'कृपया नाम भर्नुहोस'; +$messages['nopagesizewarning'] = 'कृपया पन्नाको नाप भर्नुहोस'; +$messages['norecipientwarning'] = 'कृपया कम-से-कम एउटा प्रापकको विवरण भर्नुहोस'; +$messages['nosubjectwarning'] = 'मेलको कुनै विषय तोकिएको छैनै। केहि तोक्न चहानुहुन्छ ?'; +$messages['nobodywarning'] = 'बिना केहि लेखि पठाउने?'; +$messages['notsentwarning'] = 'मेल पठएको छैन.. मेल रद्द गर्न चहानुहुन्छ?'; +$messages['noldapserver'] = 'कृपया खोजको निम्ति एउटा ऐलडाप सर्वर छान्नहोस'; +$messages['nocontactsreturned'] = 'कुनै सम्पर्क फेला परेनन्'; +$messages['nosearchname'] = 'कृपया सम्पर्कको नाम या ई-मेल भर्नुहोस'; +$messages['searchsuccessful'] = '$nr मेलहरु पाइयो'; +$messages['searchnomatch'] = 'खोज असफल रहयो'; +$messages['searching'] = 'खोजि भईरहेको छ...'; +$messages['checking'] = 'जाँच भईरहेको छ...'; +$messages['nospellerrors'] = 'कुनै गलत हिज्जे फेला परेनन्'; +$messages['folderdeleted'] = 'फोल्डर सफल्तापूर्वक मेटियो'; +$messages['deletedsuccessfully'] = 'सफल्तापूर्वक मेटियो'; +$messages['converting'] = 'मेलबाट फोर्माटिङ हटाईदै छ...'; +$messages['messageopenerror'] = 'सर्वरबाट मेल लोड हुन सकेन'; +$messages['fileuploaderror'] = 'फाईल अपलोड हुन असफल'; +$messages['filesizeerror'] = 'अपलोड गरिएको फाईल हद $size भन्दा ठूलो छ'; +$messages['copysuccess'] = 'सफल्तापूर्वक $nr ठेगानाहरु उतारियो'; +$messages['copyerror'] = 'कुनै पनि ठेगानाहरु उतार्न सकिएन'; +$messages['sourceisreadonly'] = 'यो ठेगाना को श्रोत पढ्नको लागि मात्र उपलब्ध छ'; +$messages['errorsavingcontact'] = 'स्मपर्कको ठेगाना जोगाउन सकिएन'; + +?> diff --git a/program/localization/nl_BE/labels.inc b/program/localization/nl_BE/labels.inc new file mode 100644 index 0000000..b69e5f0 --- /dev/null +++ b/program/localization/nl_BE/labels.inc @@ -0,0 +1,192 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id: labels.inc 1108 2008-02-17 20:08:44Z thomasb $ + +*/ + +$labels = array(); +$labels['welcome'] = 'Welkom bij $product'; +$labels['username'] = 'Gebruikersnaam'; +$labels['password'] = 'Wachtwoord'; +$labels['server'] = 'Server'; +$labels['login'] = 'Aanmelden'; +$labels['logout'] = 'Afmelden'; +$labels['mail'] = 'Berichten'; +$labels['settings'] = 'Instellingen'; +$labels['addressbook'] = 'Contactpersonen'; +$labels['inbox'] = 'Postvak IN'; +$labels['drafts'] = 'Concepten'; +$labels['sent'] = 'Verzonden berichten'; +$labels['trash'] = 'Prullenbak'; +$labels['junk'] = 'Spam'; +$labels['subject'] = 'Onderwerp'; +$labels['from'] = 'Van'; +$labels['to'] = 'Aan'; +$labels['cc'] = 'Cc'; +$labels['bcc'] = 'Bcc'; +$labels['replyto'] = 'Antwoorden aan'; +$labels['date'] = 'Datum'; +$labels['size'] = 'Grootte'; +$labels['priority'] = 'Prioriteit'; +$labels['organization'] = 'Organisatie'; +$labels['reply-to'] = 'Antwoorden aan'; +$labels['mailboxlist'] = 'Mappen'; +$labels['messagesfromto'] = 'Berichten $from - $to van $count'; +$labels['messagenrof'] = 'Bericht $nr van $count'; +$labels['moveto'] = 'verplaats naar...'; +$labels['download'] = 'downloaden'; +$labels['filename'] = 'Bestandsnaam'; +$labels['filesize'] = 'Bestandsgrootte'; +$labels['preferhtml'] = 'Gebruik HTML-opmaak'; +$labels['htmlmessage'] = 'HTML-bericht'; +$labels['prettydate'] = 'Uitgebreide datumweergave'; +$labels['addtoaddressbook'] = 'Voeg toe aan lijst met contactpersonen'; +$labels['sun'] = 'Zo'; +$labels['mon'] = 'Ma'; +$labels['tue'] = 'Di'; +$labels['wed'] = 'Wo'; +$labels['thu'] = 'Do'; +$labels['fri'] = 'Vr'; +$labels['sat'] = 'Za'; +$labels['sunday'] = 'Zondag'; +$labels['monday'] = 'Maandag'; +$labels['tuesday'] = 'Dinsdag'; +$labels['wednesday'] = 'Woensdag'; +$labels['thursday'] = 'Donderdag'; +$labels['friday'] = 'Vrijdag'; +$labels['saturday'] = 'Zaterdag'; +$labels['today'] = 'Vandaag'; +$labels['checkmail'] = 'Controleer op nieuwe berichten'; +$labels['writenewmessage'] = 'Nieuw bericht'; +$labels['replytomessage'] = 'Beantwoorden'; +$labels['replytoallmessage'] = 'Allen beantwoorden'; +$labels['forwardmessage'] = 'Doorsturen'; +$labels['deletemessage'] = 'Dit bericht verwijderen'; +$labels['movemessagetotrash'] = 'Verplaats bericht naar verwijderde items'; +$labels['printmessage'] = 'Afdrukken'; +$labels['previousmessage'] = 'Vorig bericht'; +$labels['previousmessages'] = 'Vorige berichten'; +$labels['firstmessage'] = 'Eerste bericht'; +$labels['firstmessages'] = 'Eerste berichten'; +$labels['nextmessage'] = 'Volgende bericht'; +$labels['nextmessages'] = 'Volgende berichten'; +$labels['lastmessage'] = 'Laatste bericht'; +$labels['lastmessages'] = 'Laatste berichten'; +$labels['backtolist'] = 'Terug naar berichtenlijst'; +$labels['viewsource'] = 'Broncode bericht weergeven'; +$labels['markmessages'] = 'Markeer berichten'; +$labels['markread'] = 'Als gelezen'; +$labels['markunread'] = 'Als ongelezen'; +$labels['select'] = 'Selecteren'; +$labels['all'] = 'Alles'; +$labels['none'] = 'Geen'; +$labels['unread'] = 'Ongelezen'; +$labels['compact'] = 'Comprimeren'; +$labels['empty'] = 'Legen'; +$labels['purge'] = 'Opruimen'; +$labels['quota'] = 'Gebruikte schijfruimte'; +$labels['unknown'] = 'onbekend'; +$labels['unlimited'] = 'ongelimiteerd'; +$labels['quicksearch'] = 'Snelzoeken'; +$labels['resetsearch'] = 'Zoek opnieuw'; +$labels['compose'] = 'Nieuw bericht opstellen'; +$labels['savemessage'] = 'Bewaar als concept'; +$labels['sendmessage'] = 'Verzenden'; +$labels['addattachment'] = 'Bestand toevoegen als bijlage'; +$labels['charset'] = 'Karakterset'; +$labels['editortype'] = 'Opmaak'; +$labels['returnreceipt'] = 'Ontvangstbevestiging'; +$labels['checkspelling'] = 'Controleer spelling'; +$labels['resumeediting'] = 'Hervat bewerken'; +$labels['revertto'] = 'Ongedaan maken'; +$labels['attachments'] = 'Bijlagen'; +$labels['upload'] = 'Toevoegen'; +$labels['close'] = 'Sluiten'; +$labels['low'] = 'Laag'; +$labels['lowest'] = 'Laagste'; +$labels['normal'] = 'Normaal'; +$labels['high'] = 'Hoog'; +$labels['highest'] = 'Hoogste'; +$labels['nosubject'] = '(geen onderwerp)'; +$labels['showimages'] = 'Toon afbeeldingen'; +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'Platte tekst'; +$labels['addcc'] = 'Cc toevoegen'; +$labels['addbcc'] = 'Bcc toevoegen'; +$labels['addreplyto'] = 'Antwoorden aan toevoegen'; +$labels['mdnrequest'] = 'De afzender heeft een ontvangstbevestiging gevraagd. Wilt u deze versturen?'; +$labels['receiptread'] = 'Ontvangstbevestiging (gelezen)'; +$labels['yourmessage'] = 'Dir is een onvangstbevestiging voor uw bericht'; +$labels['receiptnote'] = 'Opmerking: deze ontvangstbevestiging houdt enkel in dat het bericht was weergegeven bij de ontvanger. Er is geen garantie dat de ontvanger het bericht daadwerkelijk heeft gelezen en/of begrepen.'; +$labels['name'] = 'Naam'; +$labels['firstname'] = 'Voornaam'; +$labels['surname'] = 'Achternaam'; +$labels['email'] = 'E-mailadres'; +$labels['addcontact'] = 'Geselecteerde contactpersoon toevoegen'; +$labels['editcontact'] = 'Contactpersoon bewerken'; +$labels['edit'] = 'Bewerken'; +$labels['cancel'] = 'Annuleren'; +$labels['save'] = 'Opslaan'; +$labels['delete'] = 'Verwijderen'; +$labels['newcontact'] = 'Contactpersoon toevoegen'; +$labels['deletecontact'] = 'Verwijder geselecteerde contactpersonen'; +$labels['composeto'] = 'Mail sturen aan'; +$labels['contactsfromto'] = 'Contactpersonen $from - $to van $count'; +$labels['print'] = 'Afdrukken'; +$labels['export'] = 'Exporteren'; +$labels['previouspage'] = 'Toon vorige'; +$labels['firstpage'] = 'Toon eerste'; +$labels['nextpage'] = 'Toon volgende'; +$labels['lastpage'] = 'Toon laatste'; +$labels['groups'] = 'Groepen'; +$labels['personaladrbook'] = 'Personlijke adressen'; +$labels['settingsfor'] = 'Instellingen voor'; +$labels['preferences'] = 'Voorkeuren'; +$labels['userpreferences'] = 'Gebruikersvoorkeuren'; +$labels['editpreferences'] = 'Gebruikersvoorkeuren bewerken'; +$labels['identities'] = 'Identiteiten'; +$labels['manageidentities'] = 'Beheer de identiteiten voor deze gebruiker'; +$labels['newidentity'] = 'Nieuwe identiteit'; +$labels['newitem'] = 'Nieuw'; +$labels['edititem'] = 'Bewerken'; +$labels['setdefault'] = 'Als standaard instellen'; +$labels['language'] = 'Taal'; +$labels['timezone'] = 'Tijdzone'; +$labels['pagesize'] = 'Berichten per pagina'; +$labels['signature'] = 'Handtekening'; +$labels['dstactive'] = 'Zomer/wintertijd'; +$labels['htmleditor'] = 'HTML berichten opmaken'; +$labels['htmlsignature'] = 'HTML handtekening'; +$labels['previewpane'] = 'Toon voorbeeldvenster'; +$labels['autosavedraft'] = 'Automatisch als concept opslaan'; +$labels['everynminutes'] = 'elke $n minuten'; +$labels['never'] = 'nooit'; +$labels['folder'] = 'Map'; +$labels['folders'] = 'Mappen'; +$labels['foldername'] = 'Naam'; +$labels['subscribed'] = 'Gebruiken'; +$labels['messagecount'] = 'Berichten'; +$labels['create'] = 'Aanmaken'; +$labels['createfolder'] = 'Nieuwe map aanmaken'; +$labels['rename'] = 'Hernoemen'; +$labels['renamefolder'] = 'Hernoem map'; +$labels['deletefolder'] = 'Map verwijderen'; +$labels['managefolders'] = 'Mappen beheren'; +$labels['sortby'] = 'Sorteren op'; +$labels['sortasc'] = 'Oplopend sorteren'; +$labels['sortdesc'] = 'Aflopend sorteren'; + +?> diff --git a/program/localization/nl_BE/messages.inc b/program/localization/nl_BE/messages.inc new file mode 100644 index 0000000..aba3010 --- /dev/null +++ b/program/localization/nl_BE/messages.inc @@ -0,0 +1,82 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id: messages.inc 1108 2008-02-17 20:08:44Z thomasb $ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'Aanmelden mislukt...'; +$messages['cookiesdisabled'] = 'Uw browser accepteert geen cookies...'; +$messages['sessionerror'] = 'Sessie is reeds beëindigd of is ongeldig...'; +$messages['imaperror'] = 'Kon geen verbinding maken met de IMAP server...'; +$messages['nomessagesfound'] = 'Er zijn geen berichten in deze map...'; +$messages['loggedout'] = 'U bent nu afgemeld. Tot ziens!'; +$messages['mailboxempty'] = 'Mailbox is leeg...'; +$messages['loading'] = 'Bezig met ophalen gegevens...'; +$messages['loadingdata'] = 'Bezig met gegevens ophalen...'; +$messages['checkingmail'] = 'Controleer op nieuwe berichten...'; +$messages['sendingmessage'] = 'Bericht wordt verstuurd...'; +$messages['messagesent'] = 'Het bericht is verzonden...'; +$messages['savingmessage'] = 'Bericht wordt bewaard...'; +$messages['messagesaved'] = 'Bericht bewaard in Concepten'; +$messages['successfullysaved'] = 'Succesvol opgeslagen...'; +$messages['addedsuccessfully'] = 'Contactpersoon is toegevoegd...'; +$messages['contactexists'] = 'Er bestaat reeds een contactpersoon met dit e-mailadres...'; +$messages['blockedimages'] = 'Om uw privacy te beschermen worden de afbeeldingen in dit bericht niet getoond...'; +$messages['encryptedmessage'] = 'Dit bericht is geëncrypteerd en kan niet worden weergegeven, sorry...'; +$messages['nocontactsfound'] = 'Geen contactpersonen gevonden...'; +$messages['contactnotfound'] = 'De gevraagde contactpersoon was niet gevonden'; +$messages['sendingfailed'] = 'Kon het bericht niet versturen...'; +$messages['errorsaving'] = 'Er is een fout opgetreden bij het opslaan van het bericht...'; +$messages['errormoving'] = 'Kon het bericht niet verplaatsen...'; +$messages['errordeleting'] = 'Kon het bericht niet verwijderen...'; +$messages['deletecontactconfirm'] = 'Bent u zeker dat u de geselecteerde contactpers(o)on(en) wilt verwijderen?'; +$messages['deletemessagesconfirm'] = 'Bent u zeker dat u de geselecteerde bericht(en) wilt verwijderen?'; +$messages['deletefolderconfirm'] = 'Weet u zeker dat u deze map wilt verwijderen?'; +$messages['purgefolderconfirm'] = 'Bent u zeker dat u alle berichten in deze map wilt verwijderen?'; +$messages['formincomplete'] = 'Het formulier is niet volledig ingevuld...'; +$messages['noemailwarning'] = 'Geef een geldig e-mailadres op...'; +$messages['nonamewarning'] = 'Geef een naam op...'; +$messages['nopagesizewarning'] = 'Geef een geldig aantal berichten per pagina op...'; +$messages['norecipientwarning'] = 'Geef minstens één bestemmeling op...'; +$messages['nosubjectwarning'] = 'Geen onderwerp opgegeven. Wenst u alsnog een onderwerp te geven?'; +$messages['nobodywarning'] = 'Wilt u dit lege bericht versturen?'; +$messages['notsentwarning'] = 'Het bericht is niet verzonden. Wilt u het bericht verwijderen?'; +$messages['noldapserver'] = 'Kies een LDAP server waarop gezocht moet worden...'; +$messages['nocontactsreturned'] = 'Geen contactpersonen gevonden'; +$messages['nosearchname'] = 'Geen een contacpersoon of e-mailadres op...'; +$messages['searchsuccessful'] = '$nr berichten gevonden'; +$messages['searchnomatch'] = 'Zoekopdracht leverde geen resultaten'; +$messages['searching'] = 'Bezig met zoeken...'; +$messages['checking'] = 'Bezig met controleren...'; +$messages['nospellerrors'] = 'Geen spelfouten gevonden'; +$messages['folderdeleted'] = 'Mappen met succes verwijderd'; +$messages['deletedsuccessfully'] = 'Succesvol verwijderd'; +$messages['converting'] = 'Opmaak van het bericht wordt gewist...'; +$messages['messageopenerror'] = 'Kon het bericht niet ophalen van de server'; +$messages['fileuploaderror'] = 'Bestandupload mislukt'; +$messages['filesizeerror'] = 'Het bestand overschrijdt de maximum grootte van $size'; +$messages['copysuccess'] = '$nr adressen met succes gekopiëerd'; +$messages['copyerror'] = 'Kon de adressen niet kopiëren'; +$messages['sourceisreadonly'] = 'Het adres kan niet worden opgeslagen'; +$messages['errorsavingcontact'] = 'Kon de contactpersoon niet bewaren'; +$messages['movingmessage'] = 'Bericht wordt verplaatst...'; +$messages['receiptsent'] = 'Ontvangstbevestiging verstuurd'; +$messages['errorsendingreceipt'] = 'Kon de ontvangstbevestigign niet versturen'; +$messages['nodeletelastidentity'] = 'U kunt dit laatste afzendadres niet verwijderen.'; +$messages['addsubfolderhint'] = 'De map wordt aangemaakt als submap van de geselecteerde map.'; + +?> diff --git a/program/localization/nl_NL/labels.inc b/program/localization/nl_NL/labels.inc index d0c4130..94f2330 100644 --- a/program/localization/nl_NL/labels.inc +++ b/program/localization/nl_NL/labels.inc @@ -6,14 +6,14 @@ | language/nl_NL/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Mark Moses | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 844 2007-10-02 05:33:18Z tomekp $ + @version $Id: labels.inc 1183 2008-03-04 22:10:15Z yllar $ */ @@ -22,7 +22,7 @@ $labels['welcome'] = 'Welkom bij $product'; $labels['username'] = 'Gebruikersnaam'; $labels['password'] = 'Wachtwoord'; $labels['server'] = 'Server'; -$labels['login'] = 'Login'; +$labels['login'] = 'Inloggen'; $labels['logout'] = 'Uitloggen'; $labels['mail'] = 'E-Mail'; $labels['settings'] = 'Persoonlijke Instellingen'; @@ -35,7 +35,7 @@ $labels['junk'] = 'SPAM'; $labels['subject'] = 'Onderwerp'; $labels['from'] = 'Afzender'; $labels['to'] = 'Ontvanger'; -$labels['cc'] = 'kopie'; +$labels['cc'] = 'Kopie'; $labels['bcc'] = 'Bcc'; $labels['replyto'] = 'Antwoord-aan'; $labels['date'] = 'Datum'; @@ -87,6 +87,9 @@ $labels['lastmessage'] = 'Toon het laatste bericht'; $labels['lastmessages'] = 'Toon laatste lijst met berichten'; $labels['backtolist'] = 'Terug naar berichtenoverzicht'; $labels['viewsource'] = 'Toon bron'; +$labels['markmessages'] = 'Markeer berichten'; +$labels['markread'] = 'Gelezen'; +$labels['markunread'] = 'Ongelezen'; $labels['select'] = 'Selecteer'; $labels['all'] = 'Allemaal'; $labels['none'] = 'Geen'; @@ -103,7 +106,7 @@ $labels['compose'] = 'Maak een bericht'; $labels['savemessage'] = 'Bewaar als concept'; $labels['sendmessage'] = 'Verstuur het bericht nu'; $labels['addattachment'] = 'Voeg een bijlage toe'; -$labels['charset'] = 'karakterset'; +$labels['charset'] = 'Karakterset'; $labels['editortype'] = 'Opmaak'; $labels['returnreceipt'] = 'Ontvangstbevestiging'; $labels['checkspelling'] = 'Controleer spelling'; @@ -124,6 +127,10 @@ $labels['plaintoggle'] = 'Gewone tekst'; $labels['addcc'] = 'Kopie toevoegen'; $labels['addbcc'] = 'Bcc toevoegen'; $labels['addreplyto'] = 'Antwoord-aan toevoegen'; +$labels['mdnrequest'] = 'De afzender van dit bericht heeft gevraagd of er een melding kan worden verzonden als dit bericht is ontvangen. Wilt u de een melding verzenden?'; +$labels['receiptread'] = 'Ontvangstbevestiging (gelezen)'; +$labels['yourmessage'] = 'Dit is een ontvangstbevestiging voor uw bericht'; +$labels['receiptnote'] = 'Let op: Deze bevestigt alleen dat uw bericht bij de geaddresseerde is binnen gekomen. Er is geen garantie dat de geaddresseerde het bericht daadwerkelijk heeft gelezen of de inhoud heeft begrepen.'; $labels['name'] = 'Naam'; $labels['firstname'] = 'Voornaam'; $labels['surname'] = 'Achternaam'; @@ -171,6 +178,7 @@ $labels['folder'] = 'Map'; $labels['folders'] = 'Mappen'; $labels['foldername'] = 'Mapnaam'; $labels['subscribed'] = 'Geabonneerd'; +$labels['messagecount'] = 'Berichten'; $labels['create'] = 'Nieuw'; $labels['createfolder'] = 'Maak nieuwe map'; $labels['rename'] = 'Wijzig naam'; @@ -181,4 +189,4 @@ $labels['sortby'] = 'Sorteer op'; $labels['sortasc'] = 'Sorteer oplopend'; $labels['sortdesc'] = 'Sorteer aflopend'; -?> \ No newline at end of file +?> diff --git a/program/localization/nl_NL/messages.inc b/program/localization/nl_NL/messages.inc index 3a961eb..0930ced 100644 --- a/program/localization/nl_NL/messages.inc +++ b/program/localization/nl_NL/messages.inc @@ -6,14 +6,14 @@ | language/nl_NL/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Mark Moses | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 844 2007-10-02 05:33:18Z tomekp $ + @version $Id: messages.inc 1087 2008-02-15 07:49:48Z robin $ */ @@ -74,5 +74,8 @@ $messages['copyerror'] = 'Kan geen adressen kopiëren'; $messages['sourceisreadonly'] = 'Het adres kan niet worden opgeslagen'; $messages['errorsavingcontact'] = 'Kan het ontvanger-adres niet opslaan'; $messages['movingmessage'] = 'Bericht verplaatsen...'; - -?> \ No newline at end of file +$messages['receiptsent'] = 'Ontvangstbevestiging is verstuurd'; +$messages['errorsendingreceipt'] = 'Kan de ontvangstbevestiging niet versturen'; +$messages['nodeletelastidentity'] = 'U kunt dit afzenderadres niet verwijderen'; +$messages['addsubfolderhint'] = 'Deze map zal worden aangemaakt onder de geselecteerde map'; +?> diff --git a/program/localization/nn_NO/labels.inc b/program/localization/nn_NO/labels.inc new file mode 100644 index 0000000..d539015 --- /dev/null +++ b/program/localization/nn_NO/labels.inc @@ -0,0 +1,174 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $ + +*/ + +$labels = array(); + +// login page +$labels['welcome'] = 'Welcome to Roundcube|Mail'; +$labels['username'] = 'Brukarnamn'; +$labels['password'] = 'Passord'; +$labels['server'] = 'Tenar'; +$labels['login'] = 'Logg inn'; + +// taskbar +$labels['logout'] = 'Logg ut'; +$labels['mail'] = 'E-post'; +$labels['settings'] = 'Personlege innstillingar'; +$labels['addressbook'] = 'Adressebok'; + +// mailbox names +$labels['inbox'] = 'Innboks'; +$labels['sent'] = 'Sende element'; +$labels['trash'] = 'Sletta element'; +$labels['drafts'] = 'Kladd'; +$labels['junk'] = 'Søppel'; + +// message listing +$labels['subject'] = 'Emne'; +$labels['from'] = 'Sendar'; +$labels['to'] = 'Mottakar'; +$labels['cc'] = 'Kopi'; +$labels['bcc'] = 'Blindkopi'; +$labels['replyto'] = 'Svar-til'; +$labels['date'] = 'Dato'; +$labels['size'] = 'Storleik'; +$labels['priority'] = 'Prioritet'; +$labels['organization'] = 'Organisasjon'; + +// aliases +$labels['reply-to'] = $labels['replyto']; + +$labels['mailboxlist'] = 'Katalogar'; +$labels['messagesfromto'] = 'Meldingar $from til $to av $count'; +$labels['messagenrof'] = 'Melding $nr av $count'; + +$labels['moveto'] = 'flytt til...'; +$labels['download'] = 'last ned'; + +$labels['filename'] = 'Filnamn'; +$labels['filesize'] = 'Filstorleik'; + +$labels['preferhtml'] = 'Føretrekk HTML'; +$labels['htmlmessage'] = 'HTML-melding'; +$labels['prettydate'] = 'Pene datoar'; + +$labels['addtoaddressbook'] = 'Legg til i adressebok'; + +// weekdays short +$labels['sun'] = 'Sun'; +$labels['mon'] = 'MÃ¥n'; +$labels['tue'] = 'Tys'; +$labels['wed'] = 'Ons'; +$labels['thu'] = 'Tor'; +$labels['fri'] = 'Fre'; +$labels['sat'] = 'Lau'; + +// weekdays long +$labels['sunday'] = 'Sundag'; +$labels['monday'] = 'MÃ¥ndag'; +$labels['tuesday'] = 'Tysdag'; +$labels['wednesday'] = 'Onsdag'; +$labels['thursday'] = 'Torsdag'; +$labels['friday'] = 'Fredag'; +$labels['saturday'] = 'Laurdag'; + +$labels['today'] = 'I dag'; + +// toolbar buttons +$labels['writenewmessage'] = 'Skriv ei ny melding'; +$labels['replytomessage'] = 'Svar pÃ¥ meldinga'; +$labels['forwardmessage'] = 'Vidaresend meldinga'; +$labels['deletemessage'] = 'Flytt melding til Sletta element'; +$labels['printmessage'] = 'Skriv ut meldinga'; +$labels['previousmessages'] = 'Vis føregÃ¥ande side med meldingar'; +$labels['nextmessages'] = 'Vis neste side med med meldingar'; +$labels['backtolist'] = 'Tilbake til meldingslista'; +$labels['viewsource'] = 'Vis kjelde'; + +$labels['select'] = 'Vel'; +$labels['all'] = 'Alle'; +$labels['none'] = 'Ingen'; +$labels['unread'] = 'Uleste'; + +// message compose +$labels['compose'] = 'Skriv ei melding'; +$labels['sendmessage'] = 'Send meldinga no'; +$labels['addattachment'] = 'Legg ved ei fil'; + +$labels['attachments'] = 'Vedlegg'; +$labels['upload'] = 'Last opp'; +$labels['close'] = 'Steng'; + +$labels['low'] = 'LÃ¥g'; +$labels['lowest'] = 'LÃ¥gast'; +$labels['normal'] = 'Normal'; +$labels['high'] = 'Høg'; +$labels['highest'] = 'Høgast'; + +$labels['showimages'] = 'Vis bilete'; + +// address book +$labels['name'] = 'Visingsnamn'; +$labels['firstname'] = 'Førenamn'; +$labels['surname'] = 'Etternamn'; +$labels['email'] = 'E-post'; + +$labels['addcontact'] = 'Legg til ny kontakt'; +$labels['editcontact'] = 'Redigere kontakt'; + +$labels['edit'] = 'Redigere'; +$labels['cancel'] = 'Avbryt'; +$labels['save'] = 'Lagre'; +$labels['delete'] = 'Slette'; + +$labels['newcontact'] = 'Opprett nytt kontaktkort'; +$labels['deletecontact'] = 'Slett valde kontaktar'; +$labels['composeto'] = 'Ny melding til'; +$labels['contactsfromto'] = 'Kontaktar $from til $to av $count'; +$labels['print'] = 'Skriv ut'; +$labels['export'] = 'Eksport'; + +// settings +$labels['settingsfor'] = 'Innstillingar for'; + +$labels['preferences'] = 'Innstillingar'; +$labels['userpreferences'] = 'Brukarinnstillingar'; +$labels['editpreferences'] = 'Redigere brukarinnstillingar'; + +$labels['identities'] = 'Identitetar'; +$labels['manageidentities'] = 'Administrere identitetar for denne kontoen'; +$labels['newidentity'] = 'Ny identitet'; + +$labels['newitem'] = 'Nytt element'; +$labels['edititem'] = 'Redigere element'; + +$labels['setdefault'] = 'Set som standard'; +$labels['language'] = 'SprÃ¥k'; +$labels['timezone'] = 'Tidssone'; +$labels['pagesize'] = 'Rader pr side'; + +$labels['folders'] = 'Mapper'; +$labels['foldername'] = 'Mappenamn'; +$labels['subscribed'] = 'Abonnert'; +$labels['create'] = 'Opprette'; +$labels['createfolder'] = 'Opprett ny mappe'; +$labels['deletefolder'] = 'Slett mappe'; +$labels['managefolders'] = 'Administrere mapper'; + +?> \ No newline at end of file diff --git a/program/localization/nn_NO/messages.inc b/program/localization/nn_NO/messages.inc new file mode 100644 index 0000000..4cb38ad --- /dev/null +++ b/program/localization/nn_NO/messages.inc @@ -0,0 +1,41 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'Feil ved innlogging'; +$messages['cookiesdisabled'] = 'Nettlesaren din tillet ikkje informasjonskapslar (cookies)'; +$messages['sessionerror'] = 'Sesjonen din er ulovleg eller har gÃ¥tt ut pÃ¥ tid'; +$messages['imaperror'] = 'Feil ved tilkopling til IMAP-tenar'; +$messages['nomessagesfound'] = 'Ingen meldingar i denne postkassa'; +$messages['loggedout'] = 'Du har avslutta sesjonen. Ha det bra!'; +$messages['mailboxempty'] = 'Postkassa er tom'; +$messages['loadingdata'] = 'Lastar inn data...'; +$messages['messagesent'] = 'Meldinga vart send'; +$messages['successfullysaved'] = 'Meldinga vart lagra'; +$messages['addedsuccessfully'] = 'Kontakta vart lagt til i adresseboka'; +$messages['contactexists'] = 'Ei kontakt med denne e-postadressa eksisterer allereie'; +$messages['blockedimages'] = 'For Ã¥ ta vare pÃ¥ privatlivet ditt er eksterne bilete blokkert i denne meldinga.'; +$messages['encryptedmessage'] = 'Dette er ei kryptert melding og kan ikkje visast. Orsak!'; +$messages['nocontactsfound'] = 'Fann ingen kontaktar'; +$messages['sendingfailed'] = 'Kunne ikkje sende meldinga'; +$messages['errorsaving'] = 'Det skjedde ein feil ved lagring'; +$messages['errormoving'] = 'Kunne ikkje flytte meldinga'; +$messages['errordeleting'] = 'Kunne ikkje slette meldinga'; + +?> \ No newline at end of file diff --git a/program/localization/pl/labels.inc b/program/localization/pl/labels.inc index 45093e4..9158e4f 100644 --- a/program/localization/pl/labels.inc +++ b/program/localization/pl/labels.inc @@ -6,16 +6,18 @@ | language/pl/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Tomasz Pajor | - | Sławomir Cichoń | - | Janusz Zamecki | + | Author: Tomasz Pajor | + | Sławomir Cichoń | + | Janusz Zamecki | + | Mariusz Szulerecki | + | Wojciech Szczepucha | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 819 2007-09-26 08:26:58Z tomekp $ + @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $ */ @@ -89,11 +91,14 @@ $labels['lastmessage'] = 'Pokaż ostatnią'; $labels['lastmessages'] = 'Pokaż ostatnie'; $labels['backtolist'] = 'Pokaż listę wiadomości'; $labels['viewsource'] = 'Pokaż źródło'; -$labels['select'] = 'Wybierz'; -$labels['all'] = 'Zaznacz wszystkie'; -$labels['none'] = 'Anuluj zaznaczenie'; -$labels['unread'] = 'Zaznacz nieprzeczytane'; -$labels['compact'] = 'Kompaktuj'; +$labels['markmessages'] = 'Oznacz wiadomość'; +$labels['markread'] = 'Jako przeczytaną'; +$labels['markunread'] = 'Jako nieprzeczytaną'; +$labels['select'] = 'Zaznacz'; +$labels['all'] = 'Wszystkie'; +$labels['none'] = 'Anuluj'; +$labels['unread'] = 'Nieprzeczytane'; +$labels['compact'] = 'Upakuj'; $labels['empty'] = 'Opróżnij'; $labels['purge'] = 'Oczyść'; $labels['quota'] = 'Użyte miejsce'; @@ -123,9 +128,13 @@ $labels['nosubject'] = '(brak tematu)'; $labels['showimages'] = 'Wyświetl obrazki'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Zwykły tekst'; -$labels['addcc'] = 'Dodaj Cc'; -$labels['addbcc'] = 'Dodaj Bcc'; +$labels['addcc'] = 'Dodaj Cc'; +$labels['addbcc'] = 'Dodaj Bcc'; $labels['addreplyto'] = 'Dodaj Reply-To'; +$labels['mdnrequest'] = 'Nadawca poprosił o potwierdzenie przeczytania tej wiadomości. Czy chcesz go powiadomić?'; +$labels['receiptread'] = 'Potwierdzenie odbioru'; +$labels['yourmessage'] = 'To jest potwierdzenie dostarczenia Twojej wiadomości'; +$labels['receiptnote'] = 'Uwaga: To potwierdzenie dostarczenia wiadomości oznacza tylko, że wiadomość została wyświetlona na komputerze adresata. Nie ma żadnej gwarancji, że odbiorca przeczytał czy też zrozumiał treść wiadomości.'; $labels['name'] = 'Nazwa'; $labels['firstname'] = 'Imię'; $labels['surname'] = 'Nazwisko'; @@ -173,6 +182,7 @@ $labels['folder'] = 'Folder'; $labels['folders'] = 'Foldery'; $labels['foldername'] = 'Nazwa folderu'; $labels['subscribed'] = 'Zasubskrybowany'; +$labels['messagecount'] = 'Wiadomości'; $labels['create'] = 'Utwórz'; $labels['createfolder'] = 'Utwórz nowy folder'; $labels['rename'] = 'Zmień nazwę'; @@ -183,4 +193,4 @@ $labels['sortby'] = 'Sortuj wg'; $labels['sortasc'] = 'Rosnąco'; $labels['sortdesc'] = 'Malejąco'; -?> \ No newline at end of file +?> diff --git a/program/localization/pl/messages.inc b/program/localization/pl/messages.inc index eeb487c..02cf26b 100644 --- a/program/localization/pl/messages.inc +++ b/program/localization/pl/messages.inc @@ -6,16 +6,18 @@ | language/pl/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Tomasz Pajor | - | Author: Sławomir Cichoń | - | Janusz Zamecki | + | Author: Tomasz Pajor | + | Author: Sławomir Cichoń | + | Janusz Zamecki | + | Mariusz Szulerecki | + | Wojciech Szczepucha | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 815 2007-09-26 08:03:07Z tomekp $ + @version $Id: messages.inc 1086 2008-02-15 05:43:32Z tomekp $ */ @@ -76,5 +78,9 @@ $messages['copyerror'] = 'Nie można skopiować żadnego adresu'; $messages['sourceisreadonly'] = 'Źródło adresu jest tylko do odczytu'; $messages['errorsavingcontact'] = 'Nie można było zapisać adresu kontaktu'; $messages['movingmessage'] = 'Przenoszenie wiadomości...'; +$messages['receiptsent'] = 'Pomyślnie wysłano potwierdzenie dostarczenia'; +$messages['errorsendingreceipt'] = 'Nie można wysłać potwierdzenia'; +$messages['nodeletelastidentity'] = 'Nie można skasować tej tożsamości, ponieważ jest ostatnią.'; +$messages['addsubfolderhint'] = 'Ten folder zostanie utworzony jako podfolder aktualnie wybranego.'; ?> \ No newline at end of file diff --git a/program/localization/pt_BR/labels.inc b/program/localization/pt_BR/labels.inc index 1c3e433..4c4696b 100644 --- a/program/localization/pt_BR/labels.inc +++ b/program/localization/pt_BR/labels.inc @@ -6,73 +6,56 @@ | language/pt_BR/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Anderson S. Ferreira | - | Updated by: Robson F. Ramaldes | - | Updated by: Alessandro Lenzi | + | Robson F. Ramaldes | + | Alessandro Lenzi | +-----------------------------------------------------------------------+ - $Id: labels.inc 870 2007-10-16 06:50:49Z thomasb $ + @version $Id: labels.inc 1113 2008-02-18 12:47:25Z yllar $ */ $labels = array(); - -// login page -$labels['welcome'] = 'Bem Vindo ao $product'; -$labels['username'] = 'Usuário'; -$labels['password'] = 'Senha'; -$labels['server'] = 'Servidor'; -$labels['login'] = 'Entrar'; - -// taskbar -$labels['logout'] = 'Sair'; -$labels['mail'] = 'E-mail'; +$labels['welcome'] = 'Bem Vindo ao $product'; +$labels['username'] = 'Usuário'; +$labels['password'] = 'Senha'; +$labels['server'] = 'Servidor'; +$labels['login'] = 'Entrar'; +$labels['logout'] = 'Sair'; +$labels['mail'] = 'E-mail'; $labels['settings'] = 'Configurações pessoais'; $labels['addressbook'] = 'Catálogo de endereços'; - -// mailbox names -$labels['inbox'] = 'Entrada'; +$labels['inbox'] = 'Entrada'; $labels['drafts'] = 'Rascunhos'; -$labels['sent'] = 'Enviados'; -$labels['trash'] = 'Lixeira'; -$labels['junk'] = 'Junk'; - -// message listing +$labels['sent'] = 'Enviados'; +$labels['trash'] = 'Lixeira'; +$labels['junk'] = 'Junk'; $labels['subject'] = 'Assunto'; -$labels['from'] = 'Remetente'; -$labels['to'] = 'Para'; -$labels['cc'] = 'Cópia'; -$labels['bcc'] = 'Cópia Oculta'; +$labels['from'] = 'Remetente'; +$labels['to'] = 'Para'; +$labels['cc'] = 'Cópia'; +$labels['bcc'] = 'Cópia Oculta'; $labels['replyto'] = 'Responder para'; -$labels['date'] = 'Data'; -$labels['size'] = 'Tamanho'; +$labels['date'] = 'Data'; +$labels['size'] = 'Tamanho'; $labels['priority'] = 'Prioridade'; $labels['organization'] = 'Organização'; - -// aliases -$labels['reply-to'] = $labels['replyto']; - +$labels['reply-to'] = 'Responder para'; $labels['mailboxlist'] = 'Pastas'; $labels['messagesfromto'] = 'Mensagens $from - $to de $count'; $labels['messagenrof'] = 'Mensagem $nr de $count'; - -$labels['moveto'] = 'mover para...'; +$labels['moveto'] = 'mover para...'; $labels['download'] = 'download'; - $labels['filename'] = 'Arquivo'; $labels['filesize'] = 'Tamanho'; - $labels['preferhtml'] = 'Preferir HTML'; $labels['htmlmessage'] = 'Mensagem HTML'; $labels['prettydate'] = 'Formatar datas'; - $labels['addtoaddressbook'] = 'Incluir no catálogo de endereços'; - -// weekdays short $labels['sun'] = 'Dom'; $labels['mon'] = 'Seg'; $labels['tue'] = 'Ter'; @@ -80,160 +63,132 @@ $labels['wed'] = 'Qua'; $labels['thu'] = 'Qui'; $labels['fri'] = 'Sex'; $labels['sat'] = 'Sáb'; - -// weekdays long -$labels['sunday'] = 'Domingo'; -$labels['monday'] = 'Segunda-feira'; -$labels['tuesday'] = 'Terça-feira'; +$labels['sunday'] = 'Domingo'; +$labels['monday'] = 'Segunda-feira'; +$labels['tuesday'] = 'Terça-feira'; $labels['wednesday'] = 'Quarta-feira'; -$labels['thursday'] = 'Quinta-feira'; -$labels['friday'] = 'Sexta-feira'; -$labels['saturday'] = 'Sábado'; - +$labels['thursday'] = 'Quinta-feira'; +$labels['friday'] = 'Sexta-feira'; +$labels['saturday'] = 'Sábado'; $labels['today'] = 'Hoje'; - -// toolbar buttons -$labels['checkmail'] = 'Verificar se há novas mensagens.'; -$labels['writenewmessage'] = 'Criar nova mensagem'; -$labels['replytomessage'] = 'Responder'; +$labels['checkmail'] = 'Verificar se há novas mensagens.'; +$labels['writenewmessage'] = 'Criar nova mensagem'; +$labels['replytomessage'] = 'Responder'; $labels['replytoallmessage'] = 'Responder para todos'; -$labels['forwardmessage'] = 'Encaminhar'; -$labels['deletemessage'] = 'Excluir'; +$labels['forwardmessage'] = 'Encaminhar'; +$labels['deletemessage'] = 'Excluir'; $labels['movemessagetotrash'] = 'Mover para Lixeira'; -$labels['printmessage'] = 'Imprimir'; -$labels['previousmessage'] = 'Mensagem Anterior'; +$labels['printmessage'] = 'Imprimir'; +$labels['previousmessage'] = 'Mensagem Anterior'; $labels['previousmessages'] = 'Página Anterior'; -$labels['firstmessage'] = 'Primeira Mensagem'; -$labels['firstmessages'] = 'Primeira Página'; -$labels['nextmessage'] = 'Próxima Mensagem'; -$labels['nextmessages'] = 'Próxima Página'; -$labels['lastmessage'] = 'Ultima Mensagem'; -$labels['lastmessages'] = 'Ultima Página'; -$labels['backtolist'] = 'Voltar'; -$labels['viewsource'] = 'Exibir código fonte'; - +$labels['firstmessage'] = 'Primeira Mensagem'; +$labels['firstmessages'] = 'Primeira Página'; +$labels['nextmessage'] = 'Próxima Mensagem'; +$labels['nextmessages'] = 'Próxima Pána'; +$labels['lastmessage'] = 'Última Mensagem'; +$labels['lastmessages'] = 'Última Página'; +$labels['backtolist'] = 'Voltar'; +$labels['viewsource'] = 'Exibir código fonte'; +$labels['markmessages'] = 'Marcar mensagens'; +$labels['markread'] = 'como lidas'; +$labels['markunread'] = 'como não lidas'; $labels['select'] = 'Selecionar'; $labels['all'] = 'Todas'; $labels['none'] = 'Nenhuma'; $labels['unread'] = 'Não lidas'; - $labels['compact'] = 'Compactar'; $labels['empty'] = 'Esvaziar'; $labels['purge'] = 'Apagar'; - $labels['quota'] = 'Utilização'; -$labels['unknown'] = 'desconhecido'; -$labels['unlimited'] = 'Sem limitação'; - +$labels['unknown'] = 'desconhecido'; +$labels['unlimited'] = 'Sem limitação'; $labels['quicksearch'] = 'Pesquisa Rápida'; $labels['resetsearch'] = 'Limpar'; - - -// message compose -$labels['compose'] = 'Escrever mensagem'; -$labels['sendmessage'] = 'Enviar'; -$labels['savemessage'] = 'Salvar Rascunho'; -$labels['addattachment'] = 'Anexar'; -$labels['charset'] = 'Codificação'; -$labels['editortype'] = 'Tipo'; -$labels['returnreceipt'] = 'Receber Confirmação'; - +$labels['compose'] = 'Escrever mensagem'; +$labels['savemessage'] = 'Salvar Rascunho'; +$labels['sendmessage'] = 'Enviar'; +$labels['addattachment'] = 'Anexar'; +$labels['charset'] = 'Codificação'; +$labels['editortype'] = 'Tipo'; +$labels['returnreceipt'] = 'Receber Confirmação'; $labels['checkspelling'] = 'Verificar Ortografia'; $labels['resumeediting'] = 'Continuar'; -$labels['revertto'] = 'Reverter para'; - +$labels['revertto'] = 'Reverter para'; $labels['attachments'] = 'Anexos'; $labels['upload'] = 'Enviar'; -$labels['close'] = 'Fechar'; - -$labels['low'] = 'Mais baixa'; -$labels['lowest'] = 'Baixa'; -$labels['normal'] = 'Normal'; -$labels['high'] = 'Alta'; +$labels['close'] = 'Fechar'; +$labels['low'] = 'Mais baixa'; +$labels['lowest'] = 'Baixa'; +$labels['normal'] = 'Normal'; +$labels['high'] = 'Alta'; $labels['highest'] = 'Mais alta'; - -$labels['nosubject'] = '(Sem assunto)'; +$labels['nosubject'] = '(Sem assunto)'; $labels['showimages'] = 'Exibir imagens'; - $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Texto Puro'; - $labels['addcc'] = 'Cópia'; $labels['addbcc'] = 'Cópia Oculta'; $labels['addreplyto'] = 'Responder para'; - - -// address boook -$labels['name'] = 'Nome completo'; +$labels['mdnrequest'] = 'O remetente desta mensagem deseja ser notificado quando você ler esta mensagem. Você permite o envio desta notificação?'; +$labels['receiptread'] = 'Confirmacao de Leitura (Exibida)'; +$labels['yourmessage'] = 'Esta e uma confirmacao de leitura da sua mensagem.'; +$labels['receiptnote'] = 'Nota: Esta confirmacao de leitura somente informa que a mensagem foi aberta no computador do destinatario.\\n Nao ha garantia que o destinatario tenha lido ou compreendido o conteudo da mensagem.'; +$labels['name'] = 'Nome completo'; $labels['firstname'] = 'Primeiro nome'; -$labels['surname'] = 'Sobrenome'; -$labels['email'] = 'E-Mail'; - +$labels['surname'] = 'Sobrenome'; +$labels['email'] = 'E-Mail'; $labels['addcontact'] = 'Incluir novo contato'; $labels['editcontact'] = 'Editar contato'; - -$labels['edit'] = 'Editar'; +$labels['edit'] = 'Editar'; $labels['cancel'] = 'Cancelar'; -$labels['save'] = 'Salvar'; +$labels['save'] = 'Salvar'; $labels['delete'] = 'Apagar'; - -$labels['newcontact'] = 'Criar novo contato'; -$labels['deletecontact'] = 'Apagar contatos selecionados'; -$labels['composeto'] = 'Escrever mensagem para'; +$labels['newcontact'] = 'Criar novo contato'; +$labels['deletecontact'] = 'Apagar contatos selecionados'; +$labels['composeto'] = 'Escrever mensagem para'; $labels['contactsfromto'] = 'Contatos de $from à $to de $count'; -$labels['print'] = 'Imprimir'; -$labels['export'] = 'Exportar'; - -$labels['previouspage'] = 'Página Anterior'; -$labels['firstpage'] = 'Primeira Página '; -$labels['nextpage'] = 'Próxima Página'; -$labels['lastpage'] = 'Última Página'; - +$labels['print'] = 'Imprimir'; +$labels['export'] = 'Exportar'; +$labels['previouspage'] = 'Página Anterior'; +$labels['firstpage'] = 'Primeira Página '; +$labels['nextpage'] = 'Próxima Página'; +$labels['lastpage'] = 'Última Página'; $labels['groups'] = 'Grupos'; $labels['personaladrbook'] = 'Endereços Pessoais'; - - -// settings -$labels['settingsfor'] = 'Configurações para'; - -$labels['preferences'] = 'Preferências'; -$labels['userpreferences'] = 'Preferências do usuário'; -$labels['editpreferences'] = 'Editar preferências do usuário'; - -$labels['identities'] = 'Identidades'; -$labels['manageidentities'] = 'Gerenciar identidades para esta conta'; -$labels['newidentity'] = 'Nova identidade'; - -$labels['newitem'] = 'Novo item'; -$labels['edititem'] = 'Editar item'; - -$labels['setdefault'] = 'Padrão'; -$labels['language'] = 'Idioma'; -$labels['timezone'] = 'Fuso Horário'; -$labels['pagesize'] = 'Linhas por página'; +$labels['settingsfor'] = 'Configurações para'; +$labels['preferences'] = 'Preferências'; +$labels['userpreferences'] = 'Preferências do usuário'; +$labels['editpreferences'] = 'Editar preferências do usuário'; +$labels['identities'] = 'Identidades'; +$labels['manageidentities'] = 'Gerenciar identidades para esta conta'; +$labels['newidentity'] = 'Nova identidade'; +$labels['newitem'] = 'Novo item'; +$labels['edititem'] = 'Editar item'; +$labels['setdefault'] = 'Padrão'; +$labels['language'] = 'Idioma'; +$labels['timezone'] = 'Fuso Horário'; +$labels['pagesize'] = 'Linhas por página'; $labels['signature'] = 'Assinatura'; -$labels['dstactive'] = 'Horário de Verão'; +$labels['dstactive'] = 'Horário de Verão'; $labels['htmleditor'] = 'Criar mensagens em HTML'; $labels['htmlsignature'] = 'Assinatura em HTML'; -$labels['previewpane'] = 'Exibir Pré-Visualização'; - -$labels['autosavedraft'] = 'Salvar Rascunho automaticamente'; -$labels['everynminutes'] = 'a cada $n minutos'; -$labels['never'] = 'nunca'; - -$labels['folder'] = 'Pasta'; -$labels['folders'] = 'Pastas'; -$labels['foldername'] = 'Nome da pasta'; -$labels['subscribed'] = 'Assinado'; -$labels['create'] = 'Criar'; -$labels['createfolder'] = 'Criar nova pasta'; +$labels['previewpane'] = 'Exibir Pré-visualização'; +$labels['autosavedraft'] = 'Salvar Rascunho automaticamente'; +$labels['everynminutes'] = 'a cada $n minutos'; +$labels['never'] = 'nunca'; +$labels['folder'] = 'Pasta'; +$labels['folders'] = 'Pastas'; +$labels['foldername'] = 'Nome da pasta'; +$labels['subscribed'] = 'Assinado'; +$labels['messagecount'] = 'Mensagens'; +$labels['create'] = 'Criar'; +$labels['createfolder'] = 'Criar nova pasta'; $labels['rename'] = 'Renomear'; $labels['renamefolder'] = 'Renomear Pasta'; -$labels['deletefolder'] = 'Apagar pasta'; -$labels['managefolders'] = 'Gerenciar pastas'; - +$labels['deletefolder'] = 'Apagar pasta'; +$labels['managefolders'] = 'Gerenciar pastas'; $labels['sortby'] = 'Ordenado por'; -$labels['sortasc'] = 'Ascendente'; +$labels['sortasc'] = 'Ascendente'; $labels['sortdesc'] = 'Descendente'; ?> \ No newline at end of file diff --git a/program/localization/pt_BR/messages.inc b/program/localization/pt_BR/messages.inc index 9898118..6f5d460 100644 --- a/program/localization/pt_BR/messages.inc +++ b/program/localization/pt_BR/messages.inc @@ -6,25 +6,25 @@ | language/pt_BR/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Anderson S. Ferreira | - | Updated by: Robson F. Ramaldes | - | Updated by: Alessandro Lenzi | + | Robson F. Ramaldes | + | Alessandro Lenzi | +-----------------------------------------------------------------------+ - $Id: messages.inc 830 2007-09-27 04:33:46Z tomekp $ + @version $Id: messages.inc 1113 2008-02-18 12:47:25Z yllar $ */ $messages = array(); -$messages['loginfailed'] = 'Falha no login.'; +$messages['loginfailed'] = 'Falha no login.'; $messages['cookiesdisabled'] = 'Seu navegador não suporta cookies.'; $messages['sessionerror'] = 'A sessão do seu navegador é inválida ou expirou.'; -$messages['imaperror'] = 'A conexão com o servidor IMAP falhou.'; -$messages['nomessagesfound'] = 'Não foi encontrada nenhuma mensagem.'; +$messages['imaperror'] = 'Falha na conexão com o servidor IMAP.'; +$messages['nomessagesfound'] = 'Nenhuma mensagem foi encontrada.'; $messages['loggedout'] = 'Sua sessão foi finalizada com sucesso. Até breve!'; $messages['mailboxempty'] = 'A caixa de mensagens está vazia.'; $messages['loading'] = 'Carregando...'; @@ -41,7 +41,6 @@ $messages['blockedimages'] = 'Para proteger sua privacidade, as imagens desta me $messages['encryptedmessage'] = 'Esta mensagem está criptografada e não pode ser exibida. Desculpe.'; $messages['nocontactsfound'] = 'Nenhum contato foi encontrado'; $messages['contactnotfound'] = 'O contato solicitado não foi encontrado'; - $messages['sendingfailed'] = 'Falha no envio da mensagem'; $messages['errorsaving'] = 'Ocorreu um erro ao Salvar'; $messages['errormoving'] = 'Não foi possível mover a mensagem'; @@ -52,10 +51,10 @@ $messages['deletefolderconfirm'] = 'Deseja realmente excluir esta pasta?'; $messages['purgefolderconfirm'] = 'Deseja realmente excluir todas mensagens desta pasta?'; $messages['formincomplete'] = 'Os campos não foram completamente preenchidos.'; $messages['noemailwarning'] = 'Por favor, informe um endereço de e-mail válido.'; -$messages['nonamewarning'] = 'Por favor, informe o nome.'; +$messages['nonamewarning'] = 'Por favor, informe o nome.'; $messages['nopagesizewarning'] = 'Por favor, informe o tamanho da página.'; $messages['norecipientwarning'] = 'Por favor, informe pelo menos um destinatário.'; -$messages['nosubjectwarning'] = 'O campo assunto não foi informado. Deseja incluí-lo agora?'; +$messages['nosubjectwarning'] = 'O campo assunto não foi informado. Deseja incluí-lo agora?'; $messages['nobodywarning'] = 'Enviar a mensagem sem texto?'; $messages['notsentwarning'] = 'A mensegem não foi enviada, deseja excluí-la?'; $messages['noldapserver'] = 'Por favor, selecione um servidor LDAP para a pesquisa'; @@ -72,11 +71,14 @@ $messages['converting'] = 'Removendo formatação da Mensagem...'; $messages['messageopenerror'] = 'Não foi possível carregar a mensagem do servidor'; $messages['fileuploaderror'] = 'Falha ao enviar o arquivo'; $messages['filesizeerror'] = 'O Arquivo enviado excede o tamanho máximo de $size'; - -$messages['copysuccess'] = '$nr endereços copiados com sucesso'; +$messages['copysuccess'] = '$nr endereço(s) copiado(s) com sucesso'; $messages['copyerror'] = 'Não foi possível copiar quaisquer endereços'; -$messages['sourceisreadonly'] = 'Esta fonte de endereços é somente leitura'; +$messages['sourceisreadonly'] = 'Esta fonte de endereço é somente leitura'; $messages['errorsavingcontact'] = 'Não foi possível salvar o endereço de contato.'; $messages['movingmessage'] = 'Movendo mensagem...'; +$messages['receiptsent'] = 'Confirmação de Leitura enviada com sucesso.'; +$messages['errorsendingreceipt'] = 'Não foi possível enviar a confirmação de leitura.'; +$messages['nodeletelastidentity'] = 'Você não pode excluir sua única identidade.'; +$messages['addsubfolderhint'] = 'Esta pasta será criada como uma sub-pasta da que está selecionada.'; ?> \ No newline at end of file diff --git a/program/localization/pt_PT/labels.inc b/program/localization/pt_PT/labels.inc index b346ee6..9b6391e 100644 --- a/program/localization/pt_PT/labels.inc +++ b/program/localization/pt_PT/labels.inc @@ -6,7 +6,7 @@ | language/pt_PT/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -15,7 +15,7 @@ | Fernando Silva | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 873 2007-10-16 19:06:34Z yllar $ + @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $ */ @@ -89,6 +89,9 @@ $labels['lastmessage'] = 'Última mensagem'; $labels['lastmessages'] = 'Última página'; $labels['backtolist'] = 'Voltar'; $labels['viewsource'] = 'Mostrar código fonte'; +$labels['markmessages'] = 'Marcar mensagens'; +$labels['markread'] = 'Como lidas'; +$labels['markunread'] = 'Como não lidas'; $labels['select'] = 'Seleccionar'; $labels['all'] = 'Todas'; $labels['none'] = 'Nenhuma'; @@ -126,6 +129,10 @@ $labels['plaintoggle'] = 'Texto simples'; $labels['addcc'] = 'Adicionar Cc'; $labels['addbcc'] = 'Adicionar Bcc'; $labels['addreplyto'] = 'Adicionar "Responder para"'; +$labels['mdnrequest'] = 'O remetente desta mensagem pediu para ser notificado quando esta fosse lida. Deseja enviar uma notificação?'; +$labels['receiptread'] = 'Recibo de leitura'; +$labels['yourmessage'] = 'Isto é um recibo de leitura da sua mensagem'; +$labels['receiptnote'] = 'Nota: este recibo apenas indica que a mensagem foi aberta pelo destinatário. Não garante que a mensagem foi lida ou compreendida.'; $labels['name'] = 'Nome completo'; $labels['firstname'] = 'Primeiro nome'; $labels['surname'] = 'Apelido'; @@ -173,6 +180,7 @@ $labels['folder'] = 'Pasta'; $labels['folders'] = 'Pastas'; $labels['foldername'] = 'Nome da pasta'; $labels['subscribed'] = 'Subscrito'; +$labels['messagecount'] = 'Mensagens'; $labels['create'] = 'Criar'; $labels['createfolder'] = 'Criar nova pasta'; $labels['rename'] = 'Renomear'; diff --git a/program/localization/pt_PT/messages.inc b/program/localization/pt_PT/messages.inc index ccb4fa1..9d27310 100644 --- a/program/localization/pt_PT/messages.inc +++ b/program/localization/pt_PT/messages.inc @@ -6,7 +6,7 @@ | language/pt_PT/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | João Vale | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 873 2007-10-16 19:06:34Z yllar $ + @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $ */ @@ -75,5 +75,9 @@ $messages['copyerror'] = 'Não foi possível copiar os endereços'; $messages['sourceisreadonly'] = 'Esta fonte de endereços é só de leitura'; $messages['errorsavingcontact'] = 'Não foi possível guardar o endereço de contacto'; $messages['movingmessage'] = 'Movendo mensagem...'; +$messages['receiptsent'] = 'Recibo de leitura enviado'; +$messages['errorsendingreceipt'] = 'Não foi possível enviar o recibo'; +$messages['nodeletelastidentity'] = 'Esta é a última identidade, não é possível apagá-la.'; +$messages['addsubfolderhint'] = 'Esta pasta será criada como uma sub-pasta da que está seleccionada'; ?> diff --git a/program/localization/ro/labels.inc b/program/localization/ro/labels.inc index 0712c42..2ca0e5d 100644 --- a/program/localization/ro/labels.inc +++ b/program/localization/ro/labels.inc @@ -6,15 +6,15 @@ | language/ro/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Daniel Anechitoaie - danieLs | + | Author: Daniel Anechitoaie - danieLs | | Ispas Dorin | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 550 2007-05-01 19:07:56Z thomasb $ + @version $Id: labels.inc 1149 2008-02-28 19:52:09Z thomasb $ */ @@ -75,7 +75,8 @@ $labels['writenewmessage'] = 'Creaza mesaj nou'; $labels['replytomessage'] = 'Raspunde la mesaj'; $labels['replytoallmessage'] = 'Raspunde la toti'; $labels['forwardmessage'] = 'Trimite mesajul mai departe'; -$labels['deletemessage'] = 'Trimmite mesajul la gunoi'; +$labels['deletemessage'] = 'Trimite mesajul la gunoi'; +$labels['movemessagetotrash'] = 'Muta mesajul la gunoi'; $labels['printmessage'] = 'Listeaza mesajul'; $labels['previousmessage'] = 'Afiseaza mesajul anterior'; $labels['previousmessages'] = 'Afiseaza setul anterior de mesaje'; @@ -87,6 +88,9 @@ $labels['lastmessage'] = 'Afiseaza ultimul mesaj'; $labels['lastmessages'] = 'Afiseaza ultimul set de mesaje'; $labels['backtolist'] = 'Inapoi la lista cu mesaje'; $labels['viewsource'] = 'Afiseaza sursa'; +$labels['markmessages'] = 'Marcheaza mesajele'; +$labels['markread'] = 'Ca citit'; +$labels['markunread'] = 'Ca necitit'; $labels['select'] = 'Selecteaza'; $labels['all'] = 'Toate'; $labels['none'] = 'Nici unul'; @@ -100,8 +104,8 @@ $labels['unlimited'] = 'nelimitat'; $labels['quicksearch'] = 'Cautare rapida'; $labels['resetsearch'] = 'Resetare cautare'; $labels['compose'] = 'Compune mesaj'; -$labels['sendmessage'] = 'Trimite mesaj'; $labels['savemessage'] = 'Salveaza aceasta ciorna'; +$labels['sendmessage'] = 'Trimite mesaj'; $labels['addattachment'] = 'Ataseaza fisier'; $labels['charset'] = 'Set de caractere'; $labels['editortype'] = 'Tip de editor'; @@ -121,6 +125,13 @@ $labels['nosubject'] = '(fara subiect)'; $labels['showimages'] = 'Afiseaza imagini'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Text simplu'; +$labels['addcc'] = 'Adauga Cc'; +$labels['addbcc'] = 'Adauga Bcc'; +$labels['addreplyto'] = 'Adauga Raspunde-La'; +$labels['mdnrequest'] = 'Expeditorul acestui mesaj a solicitat sa fie notificat la cititrea mesajului. Doriti sa notificati expeditorul?'; +$labels['receiptread'] = 'Returneaza confirmare (citit)'; +$labels['yourmessage'] = 'Aceasta este o confirmare a mesajului dumneavoastra.'; +$labels['receiptnote'] = 'Nota: Aceasta confirmare doar va informeaza ca mesajul a fost afisat pe calculatorul destinatarului. Nu este nici o garantie ca destinatarul a citit sau a inteles continutul mesajului.'; $labels['name'] = 'Nume de afisat'; $labels['firstname'] = 'Nume'; $labels['surname'] = 'Prenume'; @@ -168,6 +179,7 @@ $labels['folder'] = 'Dosar'; $labels['folders'] = 'Dosare'; $labels['foldername'] = 'Nume dosar'; $labels['subscribed'] = 'Inscris'; +$labels['messagecount'] = 'Mesaje'; $labels['create'] = 'Creaza'; $labels['createfolder'] = 'Creaza dosar nou'; $labels['rename'] = 'Redenumeste'; diff --git a/program/localization/ro/messages.inc b/program/localization/ro/messages.inc index 9e8f6ec..562bab7 100644 --- a/program/localization/ro/messages.inc +++ b/program/localization/ro/messages.inc @@ -6,7 +6,7 @@ | language/ro/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Ispas Dorin | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 550 2007-05-01 19:07:56Z thomasb $ + @version $Id: messages.inc 1149 2008-02-28 19:52:09Z thomasb $ */ @@ -23,7 +23,7 @@ $messages['loginfailed'] = 'Autentificare esuata'; $messages['cookiesdisabled'] = 'Browserul dumneavoastra nu accepta cookies'; $messages['sessionerror'] = 'Sesiunea dumneavoastra este invalida sau a expirat'; $messages['imaperror'] = 'Conectarea la serverul IMAP a esuat'; -$messages['nomessagesfound'] = 'Nu a fost gasit niciun mesaj in aceasta casuta postala'; +$messages['nomessagesfound'] = 'Nu a fost gasit nici un mesaj in aceasta casuta postala'; $messages['loggedout'] = 'Sesiune incheiata cu succes. La revedere!'; $messages['mailboxempty'] = 'Casuta postala este goala'; $messages['loading'] = 'Se incarca...'; @@ -38,7 +38,7 @@ $messages['addedsuccessfully'] = 'Contactul a fost adaugat cu succes in agenda'; $messages['contactexists'] = 'Mai exista un contact cu aceasta adresa de e-mail'; $messages['blockedimages'] = 'Pentru a va proteja intimitatea imaginile externe au fost blocate.'; $messages['encryptedmessage'] = 'Acesta este un mesaj criptat si nu poate fi afisat. Ne pare rau.'; -$messages['nocontactsfound'] = 'Nu s-a gasit niciun contact'; +$messages['nocontactsfound'] = 'Nu s-a gasit nici un contact'; $messages['contactnotfound'] = 'Contactul solicitat nu a fost gasit.'; $messages['sendingfailed'] = 'Nu s-a reusit trimiterea mesajului'; $messages['errorsaving'] = 'A intervenit o eroare in timp ce se efectua salvarea'; @@ -57,10 +57,10 @@ $messages['nosubjectwarning'] = 'Mesajul nu are subiect. Vreti sa introduceti un $messages['nobodywarning'] = 'Trimiteti acest mesaj fara text?'; $messages['notsentwarning'] = 'Mesajul nu a fost trimis. Vreti sa renuntatati la el?'; $messages['noldapserver'] = 'Va rugam alegeti un server ldap pentru cautare'; -$messages['nocontactsreturned'] = 'Nu s-a gasit niciun contact'; +$messages['nocontactsreturned'] = 'Nu s-a gasit nici un contact'; $messages['nosearchname'] = 'Va rugam introduceti un nume de contact sau adresa de e-mail'; $messages['searchsuccessful'] = '$nr mesaje gasite'; -$messages['searchnomatch'] = 'Cautarea nu a returnat niciun rezultat'; +$messages['searchnomatch'] = 'Cautarea nu a returnat nici un rezultat'; $messages['searching'] = 'Se cauta...'; $messages['checking'] = 'Se verifica...'; $messages['nospellerrors'] = 'Nu s-a gasit nicio greseala de ortografie'; @@ -74,5 +74,10 @@ $messages['copysuccess'] = 'Am copiat cu succes $nr de adrese'; $messages['copyerror'] = 'Nu am putut copia nici o adresa'; $messages['sourceisreadonly'] = 'Sursa adrese este "read-only"(se poate doar citi)'; $messages['errorsavingcontact'] = 'Nu am putut salva adresa de contact'; +$messages['movingmessage'] = 'Mutare mesaj....'; +$messages['receiptsent'] = 'Confirmarea a fost trimisa cu succes'; +$messages['errorsendingreceipt'] = 'Confirmarea nu a putut fi trimisa'; +$messages['nodeletelastidentity'] = 'Nu putesti sterge aceasta identitate, este ultima.'; +$messages['addsubfolderhint'] = 'Acest dosar va fi creat ca subdosar al celui selectat.'; ?> \ No newline at end of file diff --git a/program/localization/ru/labels.inc b/program/localization/ru/labels.inc index 6c13682..a7ba517 100644 --- a/program/localization/ru/labels.inc +++ b/program/localization/ru/labels.inc @@ -6,15 +6,16 @@ | language/ru_RU/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Maxim Zenin | | Vladimir Kulev | + | Artur Smolkin | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 584 2007-05-24 03:49:19Z estadtherr $ + @version $Id: labels.inc 1134 2008-02-22 15:05:18Z yllar $ */ @@ -76,6 +77,7 @@ $labels['replytomessage'] = 'Ответить'; $labels['replytoallmessage'] = 'Ответить всем'; $labels['forwardmessage'] = 'Переслать'; $labels['deletemessage'] = 'В корзину'; +$labels['movemessagetotrash'] = 'Переместить сообщение в корзину'; $labels['printmessage'] = 'Печать'; $labels['previousmessage'] = 'Показать предыдущее сообщение'; $labels['previousmessages'] = 'Предыдущее'; @@ -87,6 +89,9 @@ $labels['lastmessage'] = 'Показать последнее сообщение $labels['lastmessages'] = 'Последнее сообщение'; $labels['backtolist'] = 'К списку сообщений'; $labels['viewsource'] = 'Исходный текст'; +$labels['markmessages'] = 'Отметить сообщение'; +$labels['markread'] = 'как прочитанное'; +$labels['markunread'] = 'как непрочитанное'; $labels['select'] = 'Выбрать'; $labels['all'] = 'Все'; $labels['none'] = 'Ничего'; @@ -100,8 +105,8 @@ $labels['unlimited'] = 'без ограничений'; $labels['quicksearch'] = 'Быстрый поиск'; $labels['resetsearch'] = 'Сброс'; $labels['compose'] = 'Написать сообщение'; -$labels['sendmessage'] = 'Отправить сейчас'; $labels['savemessage'] = 'Сохранить черновик'; +$labels['sendmessage'] = 'Отправить сейчас'; $labels['addattachment'] = 'Добавить вложение'; $labels['charset'] = 'Кодировка'; $labels['editortype'] = 'Редактор'; @@ -121,6 +126,13 @@ $labels['nosubject'] = '(без темы)'; $labels['showimages'] = 'Показать изображения'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Обычный текст'; +$labels['addcc'] = 'Копия'; +$labels['addbcc'] = 'Скрытая копия'; +$labels['addreplyto'] = 'Обратный адрес'; +$labels['mdnrequest'] = 'Отправитель этого сообщения запросил уведомление о прочтении. Отправить уведомление?'; +$labels['receiptread'] = 'Уведомление о прочтении'; +$labels['yourmessage'] = 'Это уведомление о прочтении вашего сообщения'; +$labels['receiptnote'] = 'Это уведомление означает только, что сообщение было открыто получателем, и не гарантирует того, что оно было прочитано и (или) понято.'; $labels['name'] = 'Отображаемое имя'; $labels['firstname'] = 'Имя'; $labels['surname'] = 'Фамилия'; @@ -168,6 +180,7 @@ $labels['folder'] = 'Папка'; $labels['folders'] = 'Папки'; $labels['foldername'] = 'Имя папки'; $labels['subscribed'] = 'Подписан'; +$labels['messagecount'] = 'сообщения'; $labels['create'] = 'Создать'; $labels['createfolder'] = 'Создать новую папку'; $labels['rename'] = 'Переименовать'; diff --git a/program/localization/ru/messages.inc b/program/localization/ru/messages.inc index 2e57616..8e54291 100644 --- a/program/localization/ru/messages.inc +++ b/program/localization/ru/messages.inc @@ -6,15 +6,16 @@ | language/ru_RU/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Maxim Zenin | | Vladimir Kulev | + | Artur Smolkin | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 584 2007-05-24 03:49:19Z estadtherr $ + @version $Id: messages.inc 1134 2008-02-22 15:05:18Z yllar $ */ @@ -74,5 +75,10 @@ $messages['copysuccess'] = 'Скопировано $nr адресов'; $messages['copyerror'] = 'Невозможно скопировать адреса'; $messages['sourceisreadonly'] = 'Данный источник адресов только для чтения'; $messages['errorsavingcontact'] = 'Невозможно сохранить адрес контакта'; +$messages['movingmessage'] = 'Перемещение сообщения…'; +$messages['receiptsent'] = 'Уведомление о прочтении отправлено'; +$messages['errorsendingreceipt'] = 'Уведомление о прочтении не отправлено'; +$messages['nodeletelastidentity'] = 'Вы не можете удалить этот профиль, он у вас последний'; +$messages['addsubfolderhint'] = 'Эта папка будет создана как подпапка в текущей папке'; ?> \ No newline at end of file diff --git a/program/localization/se/labels.inc b/program/localization/se/labels.inc index c1e19f5..d8fa1bd 100644 --- a/program/localization/se/labels.inc +++ b/program/localization/se/labels.inc @@ -6,15 +6,16 @@ | language/se/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Fredrik Nygren | - | Andreas Henriksson | + | Andreas Henriksson | + | Jonas Näsholm | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: labels.inc 1143 2008-02-26 20:50:10Z yllar $ */ @@ -25,7 +26,7 @@ $labels['password'] = 'Lösenord'; $labels['server'] = 'Server'; $labels['login'] = 'Logga in'; $labels['logout'] = 'Logga ut'; -$labels['mail'] = 'E-post'; +$labels['mail'] = 'Meddelanden'; $labels['settings'] = 'Personliga inställningar'; $labels['addressbook'] = 'Adressbok'; $labels['inbox'] = 'Inkorg'; @@ -45,7 +46,7 @@ $labels['priority'] = 'Prioritet'; $labels['organization'] = 'Organisation'; $labels['reply-to'] = 'Svara till'; $labels['mailboxlist'] = 'Mappar'; -$labels['messagesfromto'] = 'Meddelanden $from till $to av $count'; +$labels['messagesfromto'] = 'Meddelande $from till $to av $count'; $labels['messagenrof'] = 'Meddelande $nr av $count'; $labels['moveto'] = 'flytta till...'; $labels['download'] = 'ladda ner'; @@ -70,12 +71,13 @@ $labels['thursday'] = 'Torsdag'; $labels['friday'] = 'Fredag'; $labels['saturday'] = 'Lördag'; $labels['today'] = 'Idag'; -$labels['checkmail'] = 'Hämta ny e-post'; +$labels['checkmail'] = 'Hämta nya meddelanden'; $labels['writenewmessage'] = 'Skapa nytt meddelande'; -$labels['replytomessage'] = 'Svar pÃ¥ meddelande'; -$labels['replytoallmessage'] = 'Svar till avsändare och alla mottagare'; +$labels['replytomessage'] = 'Svara avsändaren'; +$labels['replytoallmessage'] = 'Svara avsändaren och alla mottagare'; $labels['forwardmessage'] = 'Vidarebefordra meddelande'; -$labels['deletemessage'] = 'Flytta meddelande till papperskorgen'; +$labels['deletemessage'] = 'Radera meddelande'; +$labels['movemessagetotrash'] = 'Flytta meddelande till papperskorgen'; $labels['printmessage'] = 'Skriv ut'; $labels['previousmessage'] = 'Visa föregÃ¥ende meddelande'; $labels['previousmessages'] = 'Visa tidigare grupp av meddelanden'; @@ -87,12 +89,15 @@ $labels['lastmessage'] = 'Visa sista meddelandet'; $labels['lastmessages'] = 'Visa sista gruppen av meddelanden'; $labels['backtolist'] = 'Tillbaka till meddelandelistan'; $labels['viewsource'] = 'Visa källa'; +$labels['markmessages'] = 'Markera meddelande'; +$labels['markread'] = 'Som läst'; +$labels['markunread'] = 'Som oläst'; $labels['select'] = 'Välj'; $labels['all'] = 'Alla'; $labels['none'] = 'Ingen'; -$labels['unread'] = 'Oläst'; +$labels['unread'] = 'Olästa'; $labels['compact'] = 'Packa'; -$labels['empty'] = 'Tom'; +$labels['empty'] = 'Töm'; $labels['purge'] = 'Rensa'; $labels['quota'] = 'Diskutrymme'; $labels['unknown'] = 'okänd'; @@ -100,9 +105,9 @@ $labels['unlimited'] = 'obegränsad'; $labels['quicksearch'] = 'Snabbsök'; $labels['resetsearch'] = 'Återställ sökning'; $labels['compose'] = 'Skapa nytt meddelande'; -$labels['sendmessage'] = 'Skicka meddelande nu'; $labels['savemessage'] = 'Spara utkast'; -$labels['addattachment'] = 'Bifoga en fil'; +$labels['sendmessage'] = 'Skicka meddelande'; +$labels['addattachment'] = 'Bifoga fil'; $labels['charset'] = 'Teckenkodning'; $labels['editortype'] = 'Typ av redigerare'; $labels['returnreceipt'] = 'Mottagarkvitto'; @@ -110,7 +115,7 @@ $labels['checkspelling'] = 'Kontrollera stavning'; $labels['resumeediting'] = 'Återuppta redigering'; $labels['revertto'] = 'ÅtergÃ¥ till'; $labels['attachments'] = 'Bilagor'; -$labels['upload'] = 'Uppladdning'; +$labels['upload'] = 'Bifoga'; $labels['close'] = 'Stäng'; $labels['low'] = 'LÃ¥g'; $labels['lowest'] = 'Lägst'; @@ -121,10 +126,17 @@ $labels['nosubject'] = '(inget ämne)'; $labels['showimages'] = 'Visa bilder'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Oformaterad text'; +$labels['addcc'] = 'Kopia'; +$labels['addbcc'] = 'Hemlig kopia'; +$labels['addreplyto'] = 'Svara till'; +$labels['mdnrequest'] = 'Avsändaren har bett om att bli uppmärksammad när du läst det här meddelandet. Vill du skicka uppmärksamma avsändaren?'; +$labels['receiptread'] = 'Svarskvitto (läst)'; +$labels['yourmessage'] = 'Det här är ett svarskvitto för ditt meddelande'; +$labels['receiptnote'] = 'Notera: Det här kvittot berättar bara att meddelandet visats pÃ¥ mottagarens dator. Det finns ingen garanti att mottagaren har läst och förstÃ¥tt innehÃ¥llet i meddelandet'; $labels['name'] = 'Visa namn'; $labels['firstname'] = 'Förnamn'; $labels['surname'] = 'Efternamn'; -$labels['email'] = 'E-post'; +$labels['email'] = 'Meddelande'; $labels['addcontact'] = 'Lägg till ny kontakt'; $labels['editcontact'] = 'Redigera kontakt'; $labels['edit'] = 'Redigera'; @@ -133,7 +145,7 @@ $labels['save'] = 'Spara'; $labels['delete'] = 'Radera'; $labels['newcontact'] = 'Skapa nytt kontaktkort'; $labels['deletecontact'] = 'Radera valda kontakter'; -$labels['composeto'] = 'Skriv e-post till'; +$labels['composeto'] = 'Skriv meddelande till'; $labels['contactsfromto'] = 'Kontakter $from till $to av $count'; $labels['print'] = 'Skriv ut'; $labels['export'] = 'Exportera'; @@ -168,6 +180,7 @@ $labels['folder'] = 'Mapp'; $labels['folders'] = 'Mappar'; $labels['foldername'] = 'Mappnamn'; $labels['subscribed'] = 'Ansluten'; +$labels['messagecount'] = 'Meddelanden'; $labels['create'] = 'Skapa'; $labels['createfolder'] = 'Skapa ny mapp'; $labels['rename'] = 'Byt namn'; diff --git a/program/localization/se/messages.inc b/program/localization/se/messages.inc index a51cc5c..fa8a153 100644 --- a/program/localization/se/messages.inc +++ b/program/localization/se/messages.inc @@ -6,42 +6,43 @@ | language/se/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Fredrik Nygren | - | Andreas Henriksson | + | Andreas Henriksson | + | Jonas Näsholm | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $ */ $messages = array(); $messages['loginfailed'] = 'Inloggningen misslyckades'; $messages['cookiesdisabled'] = 'Din webbläsare accepterar inte cookies'; -$messages['sessionerror'] = 'Din session är felaktig eller har gÃ¥tt ut'; +$messages['sessionerror'] = 'Din inloggning är felaktig eller har gÃ¥tt ut'; $messages['imaperror'] = 'Kontakt med IMAP-servern misslyckades'; -$messages['nomessagesfound'] = 'Inga meddelanden hittades i din inkorg'; -$messages['loggedout'] = 'Du har framgÃ¥ngsrikt avslutat din session. Hej dÃ¥!'; -$messages['mailboxempty'] = 'PostlÃ¥dan är tom'; +$messages['nomessagesfound'] = 'Inga meddelanden'; +$messages['loggedout'] = 'Du är utloggad. Välkommen Ã¥ter!'; +$messages['mailboxempty'] = 'Mappen är tom'; $messages['loading'] = 'Laddar...'; $messages['loadingdata'] = 'Laddar data...'; -$messages['checkingmail'] = 'Letar efter ny e-post...'; +$messages['checkingmail'] = 'Letar efter nya meddelanden...'; $messages['sendingmessage'] = 'Skickar meddelande...'; $messages['messagesent'] = 'Meddelandet har skickats'; $messages['savingmessage'] = 'Sparar meddelande...'; $messages['messagesaved'] = 'Meddelande sparades till utkast'; $messages['successfullysaved'] = 'Sparat'; $messages['addedsuccessfully'] = 'Kontakten har lagts till i adressboken'; -$messages['contactexists'] = 'En kontakt med den här e-postadressen finns redan'; +$messages['contactexists'] = 'En kontakt med den här adressen finns redan'; $messages['blockedimages'] = 'För att skydda dig är bilder blockerade.'; -$messages['encryptedmessage'] = 'Det här ett krypterat meddelande som inte kan visas. Tyvärr!'; +$messages['encryptedmessage'] = 'Meddelandet är krypterat och kan tyvärr inte visas.'; $messages['nocontactsfound'] = 'Inga kontakter hittades'; $messages['contactnotfound'] = 'Den efterfrÃ¥gade kontanten hittades inte'; -$messages['sendingfailed'] = 'Misslyckades med att skicka meddelandet'; -$messages['errorsaving'] = 'Ett fel uppstod vid sparandet'; +$messages['sendingfailed'] = 'Meddelandet kunde inte skickas'; +$messages['errorsaving'] = 'Ett fel uppstod när meddelandet sparades'; $messages['errormoving'] = 'Meddelandet kunde inte flyttas'; $messages['errordeleting'] = 'Meddelandet kunde inte raderas'; $messages['deletecontactconfirm'] = 'Vill du verkligen radera valda kontakter?'; @@ -49,7 +50,7 @@ $messages['deletemessagesconfirm'] = 'Vill du verkligen ta bort valda meddelande $messages['deletefolderconfirm'] = 'Vill du verkligen radera den här mappen?'; $messages['purgefolderconfirm'] = 'Vill du verkligen radera alla meddelanden i den här mappen?'; $messages['formincomplete'] = 'Formuläret var inte ifyllt i sin helhet'; -$messages['noemailwarning'] = 'Vänligen ange en giltig e-postadress'; +$messages['noemailwarning'] = 'Vänligen ange en giltig adress'; $messages['nonamewarning'] = 'Vänligen ange ett namn'; $messages['nopagesizewarning'] = 'Vänligen ange en sidstorlek'; $messages['norecipientwarning'] = 'Vänligen ange minst en mottagare'; @@ -58,7 +59,7 @@ $messages['nobodywarning'] = 'Skicka det här meddelandet utan text?'; $messages['notsentwarning'] = 'Meddelande har inte skickats. Vill du avbryta meddelandet?'; $messages['noldapserver'] = 'Vänligen ange en LDAP-server att söka'; $messages['nocontactsreturned'] = 'Inga kontakter hittades'; -$messages['nosearchname'] = 'Vänligen ange ett kontaktnamn eller e-postadress'; +$messages['nosearchname'] = 'Vänligen ange ett kontaktnamn eller en adress'; $messages['searchsuccessful'] = '$nr meddelanden hittades'; $messages['searchnomatch'] = 'Sökningen returnerade inga träffar'; $messages['searching'] = 'Söker...'; @@ -74,5 +75,10 @@ $messages['copysuccess'] = 'Lyckad kopiering av $nr adresser'; $messages['copyerror'] = 'Kunde inte kopiera nÃ¥gra adresser'; $messages['sourceisreadonly'] = 'Denna adresskälla är skrivskyddad'; $messages['errorsavingcontact'] = 'Kunde inte spara kontakt-adressen'; +$messages['movingmessage'] = 'Flyttar meddelande...'; +$messages['receiptsent'] = 'Ett läskvitto har skickats'; +$messages['errorsendingreceipt'] = 'Kunde inte skicka läskvittot'; +$messages['nodeletelastidentity'] = 'Du kan inte radera den här identiteten, det är din sista.'; +$messages['addsubfolderhint'] = 'Den här mappen kommer att skapas som en underkatalog till den valda'; ?> \ No newline at end of file diff --git a/program/localization/si/labels.inc b/program/localization/si/labels.inc index 98ab215..4bd6306 100644 --- a/program/localization/si/labels.inc +++ b/program/localization/si/labels.inc @@ -1,177 +1,191 @@ - | - +-----------------------------------------------------------------------+ - -*/ - -$labels = array(); -$labels['welcome'] = '$product ආයුබොවන්'; -$labels['username'] = 'නම'; -$labels['password'] = 'මුරපදය'; -$labels['server'] = 'පද්ධතිය'; -$labels['login'] = 'අතුල්වීම'; -$labels['logout'] = 'පිටවීම'; -$labels['mail'] = 'විද්යුත් තැපෑල'; -$labels['settings'] = 'පොද්ගලික කට්ටල අංග'; -$labels['addressbook'] = 'ලිපින පොත'; -$labels['inbox'] = 'ඇතුල්වීම්'; -$labels['drafts'] = 'කටු සටහන්'; -$labels['sent'] = 'පිටවුම්'; -$labels['trash'] = 'ලටපට'; -$labels['junk'] = 'සුන්බුන්'; -$labels['subject'] = 'මාතෘකාව'; -$labels['from'] = 'යවන්නා'; -$labels['to'] = 'ලබන්නා'; -$labels['cc'] = 'පිටපත් කිරීම්'; -$labels['bcc'] = 'අඳ පිටපත් කිරීම්'; -$labels['replyto'] = 'පිළිතුරු සඳහා'; -$labels['date'] = 'දිනය'; -$labels['size'] = 'ප්රමාණය'; -$labels['priority'] = 'ප්රමුඛතාව'; -$labels['organization'] = 'සංවිධානය'; -$labels['reply-to'] = 'පිළිතුරු සඳහා'; -$labels['mailboxlist'] = 'ෆෝල්ඩරය'; -$labels['messagesfromto'] = '$from ගෙන් $to පනිවුඩ $count'; -$labels['messagenrof'] = 'පනිවුඩය $count න් $nr '; -$labels['moveto'] = 'ගෙනයෑම...'; -$labels['download'] = 'බාගතකිරීම'; -$labels['filename'] = 'ගොනුවේ නම'; -$labels['filesize'] = 'ගොනුවේ ප්රමාණය'; -$labels['preferhtml'] = 'HTML විදහා පෙන්වීම'; -$labels['htmlmessage'] = 'HTML පනිවුඩය'; -$labels['prettydate'] = 'සුරුබුහුටි දින'; -$labels['addtoaddressbook'] = 'ලිපින පොතට එකතු කරන්න'; -$labels['sun'] = 'ඉරිදා'; -$labels['mon'] = 'සඳුදා'; -$labels['tue'] = 'අගහ'; -$labels['wed'] = 'බදාදා'; -$labels['thu'] = 'බ්රහස්'; -$labels['fri'] = 'සිකුරා'; -$labels['sat'] = 'සෙනසු'; -$labels['sunday'] = 'ඉරිදා'; -$labels['monday'] = 'සඳුදා'; -$labels['tuesday'] = 'අගහරුවාදා'; -$labels['wednesday'] = 'බදාදා'; -$labels['thursday'] = 'බ්රහස්පතිනිදා'; -$labels['friday'] = 'සිකුරාදා'; -$labels['saturday'] = 'සෙනසුරාදා'; -$labels['today'] = 'අද'; -$labels['checkmail'] = 'අඵත් පනිවුඩ සඳහා පිරික්සීම'; -$labels['writenewmessage'] = 'අඵත් පනිවුඩක්'; -$labels['replytomessage'] = 'පනිවුඩයට පිළිතුරු'; -$labels['replytoallmessage'] = 'එවන්නාට සහ සැමට පිළිතුරු'; -$labels['forwardmessage'] = 'පනිවුඩය ඉදිරියට'; -$labels['deletemessage'] = 'පනිවුඩය ලටපට තුලට ගෙනයන්න'; -$labels['printmessage'] = 'පනිවුඩය මුද්රනය කරන්න'; -$labels['previousmessage'] = 'කලින් පනිවුඩය පෙන්නන්න'; -$labels['previousmessages'] = 'කලින් පනිවුඩ කට්ටලය පෙන්නන්න'; -$labels['firstmessage'] = 'පළමුවන පනිවුඩය පෙන්නන්න'; -$labels['firstmessages'] = 'පළමුවන පනිවුඩ කට්ටලය පෙන්නන්න'; -$labels['nextmessage'] = 'මීළඟ පනිවුඩය පෙන්නන්න'; -$labels['nextmessages'] = 'මීළඟ පනිවුඩ කට්ටලය පෙන්නන්න'; -$labels['lastmessage'] = 'අවසාන පනිවුඩය පෙන්නන්න'; -$labels['lastmessages'] = 'අවසාන පනිවුඩ කට්ටලය පෙන්නන්න'; -$labels['backtolist'] = 'නැවතත් පනිවුඩ ලැයිස්තුවට'; -$labels['viewsource'] = 'මූලාශ්රය පෙන්නන්න'; -$labels['select'] = 'තෝරාගන්න'; -$labels['all'] = 'සියලු'; -$labels['none'] = 'තෝරානොගත්'; -$labels['unread'] = 'නොකියවූ'; -$labels['compact'] = 'සංයුක්ත'; -$labels['empty'] = 'රික්ත'; -$labels['purge'] = 'විරේචන'; -$labels['quota'] = 'භාවිතය'; -$labels['unknown'] = 'නාඳුනන'; -$labels['unlimited'] = 'අසීමිත'; -$labels['quicksearch'] = 'ඉක්මන් සෙවුම'; -$labels['resetsearch'] = 'සෙවුම යලි පිහිටවීම'; -$labels['compose'] = 'පනිවුඩයක් සෑදීම'; -$labels['sendmessage'] = 'පනිවුඩය දැන් යවන්න'; -$labels['savemessage'] = 'කටු සටහනේ තැන්පත කරන්න'; -$labels['addattachment'] = 'ගොනුවක් ඇතුලත් කිරීම'; -$labels['charset'] = 'අකුරැ කට්ටලය'; -$labels['editortype'] = 'සම්පාදන ආකාරය'; -$labels['returnreceipt'] = 'නැවත ලබන්නා'; -$labels['checkspelling'] = 'වචන පරීක්ෂාව'; -$labels['resumeediting'] = 'සම්පාදන නැවත ඇරඹීම'; -$labels['revertto'] = 'ආපසු ඒම'; -$labels['attachments'] = 'ගොනු'; -$labels['upload'] = 'ඇතුල් කරීම'; -$labels['close'] = 'වැසීම'; -$labels['low'] = 'අඩු'; -$labels['lowest'] = 'අඩුම'; -$labels['normal'] = 'සමක'; -$labels['high'] = 'ඉහළ'; -$labels['highest'] = 'ඉහළම'; -$labels['nosubject'] = '(මාතෘකාව නොමැති)'; -$labels['showimages'] = 'රූප පෙන්නන්න'; -$labels['htmltoggle'] = 'HTML'; -$labels['plaintoggle'] = 'පැහැදිලි අකුරු'; -$labels['name'] = 'නම පෙන්නන්න'; -$labels['firstname'] = 'පළමු නම'; -$labels['surname'] = 'අවසාන නම'; -$labels['email'] = 'ද්යුත් තැපෑල'; -$labels['addcontact'] = 'ලිපින පොතට එකතු කරන්න'; -$labels['editcontact'] = 'ලිපිනය වෙනස් කිරීම'; -$labels['edit'] = 'වෙනස් කිරීම'; -$labels['cancel'] = 'අවලංගු කරීම'; -$labels['save'] = 'තැන්පත් කිරීම'; -$labels['delete'] = 'මකා දැමීම'; -$labels['newcontact'] = 'අඵත් ලිපින පතක් සෑදීම'; -$labels['deletecontact'] = 'තෝරාගත් ලිපින මකා දැමන්න'; -$labels['composeto'] = 'පනිවුඩයක් සෑදීම'; -$labels['contactsfromto'] = '$from ගෙන් $to ලිපින $count'; -$labels['print'] = 'මුද්රණය'; -$labels['export'] = 'නිර්යාත'; -$labels['previouspage'] = 'කලින් කට්ටලය පෙන්නන්න'; -$labels['firstpage'] = 'පළමුවන කට්ටලය පෙන්නන්න'; -$labels['nextpage'] = 'මීළඟ කට්ටලය පෙන්නන්න'; -$labels['lastpage'] = 'අවසාන කට්ටලය පෙන්නන්න'; -$labels['groups'] = 'කණ්ඩායම්'; -$labels['personaladrbook'] = 'පොද්ගලික ලිපිනය'; -$labels['settingsfor'] = 'සඳහා කට්ටල අංග'; -$labels['preferences'] = 'අභිමතය'; -$labels['userpreferences'] = 'පරිශීලක අභිමතය'; -$labels['editpreferences'] = 'පරිශීලක අභිමතය වෙනස් කිරීම්'; -$labels['identities'] = 'අනන්නයතාව'; -$labels['manageidentities'] = 'මෙම ගිණුමෙ අනන්නයතාව හැසිරවීම'; -$labels['newidentity'] = 'අඵත් අනන්නයතාව'; -$labels['newitem'] = 'අඵත් අයිතම'; -$labels['edititem'] = 'අයිතම වෙනස් කිරීම්'; -$labels['setdefault'] = 'පළමු තත්වයට'; -$labels['language'] = 'භාෂාව'; -$labels['timezone'] = 'කාල කලාපය'; -$labels['pagesize'] = 'පිටුවකටඅ පේළි'; -$labels['signature'] = 'අත්සන'; -$labels['dstactive'] = 'දිවා එළිය ඉතිරි කිරීම'; -$labels['htmleditor'] = 'HTML පනිවුඩයක් සෑදීම'; -$labels['htmlsignature'] = 'HTML අත්සන'; -$labels['previewpane'] = 'පූර්වදර්ශන කොටස පෙන්නන්න'; -$labels['autosavedraft'] = 'ස්වයංක්රීයව කටු සටහනේ තැන්පත් කරන්න'; -$labels['everynminutes'] = 'සෑම මිනිත්තු $n'; -$labels['never'] = 'කිසි විටෙකත් නැති'; -$labels['folder'] = 'ෆෝල්ඩරය'; -$labels['folders'] = 'ෆෝල්ඩර'; -$labels['foldername'] = 'ෆෝල්ඩරයේ නම'; -$labels['subscribed'] = 'සාමාජික'; -$labels['create'] = 'සෑදීම'; -$labels['createfolder'] = 'අඵත් ෆෝල්ඩරයක් සෑදීම'; -$labels['rename'] = 'නැවත නම් කිරීම'; -$labels['renamefolder'] = 'ෆෝල්ඩරය නැවත නම් කිරීම'; -$labels['deletefolder'] = 'ෆෝල්ඩරය මකා දැමීම'; -$labels['managefolders'] = 'හැසිරවීම හැසිරවීම'; -$labels['sortby'] = 'චිසින් වර්ග කිරීම'; -$labels['sortasc'] = 'ආරෝහණ වර්ග කිරීම'; -$labels['sortdesc'] = 'අවරෝහණ වර්ග කිරීම'; - + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$labels = array(); +$labels['welcome'] = '$product ආයුබොවන්'; +$labels['username'] = 'නම'; +$labels['password'] = 'මුරපදය'; +$labels['server'] = 'පද්ධතිය'; +$labels['login'] = 'අතුල්වීම'; +$labels['logout'] = 'පිටවීම'; +$labels['mail'] = 'විද්යුත් තැපෑල'; +$labels['settings'] = 'පොද්ගලික කට්ටල අංග'; +$labels['addressbook'] = 'ලිපින පොත'; +$labels['inbox'] = 'ඇතුල්වීම්'; +$labels['drafts'] = 'කටු සටහන්'; +$labels['sent'] = 'පිටවුම්'; +$labels['trash'] = 'ලටපට'; +$labels['junk'] = 'සුන්බුන්'; +$labels['subject'] = 'මාතෘකාව'; +$labels['from'] = 'යවන්නා'; +$labels['to'] = 'ලබන්නා'; +$labels['cc'] = 'පිටපත් කිරීම්'; +$labels['bcc'] = 'අඳ පිටපත් කිරීම්'; +$labels['replyto'] = 'පිළිතුරු සඳහා'; +$labels['date'] = 'දිනය'; +$labels['size'] = 'ප්රමාණය'; +$labels['priority'] = 'ප්රමුඛතාව'; +$labels['organization'] = 'සංවිධානය'; +$labels['reply-to'] = 'පිළිතුරු සඳහා'; +$labels['mailboxlist'] = 'ෆෝල්ඩරය'; +$labels['messagesfromto'] = '$from ගෙන් $to පනිවුඩ $count'; +$labels['messagenrof'] = 'පනිවුඩය $count න් $nr '; +$labels['moveto'] = 'ගෙනයෑම...'; +$labels['download'] = 'බාගතකිරීම'; +$labels['filename'] = 'ගොනුවේ නම'; +$labels['filesize'] = 'ගොනුවේ ප්රමාණය'; +$labels['preferhtml'] = 'HTML විදහා පෙන්වීම'; +$labels['htmlmessage'] = 'HTML පනිවුඩය'; +$labels['prettydate'] = 'සුරුබුහුටි දින'; +$labels['addtoaddressbook'] = 'ලිපින පොතට එකතු කරන්න'; +$labels['sun'] = 'ඉරිදා'; +$labels['mon'] = 'සඳුදා'; +$labels['tue'] = 'අගහ'; +$labels['wed'] = 'බදාදා'; +$labels['thu'] = 'බ්රහස්'; +$labels['fri'] = 'සිකුරා'; +$labels['sat'] = 'සෙනසු'; +$labels['sunday'] = 'ඉරිදා'; +$labels['monday'] = 'සඳුදා'; +$labels['tuesday'] = 'අගහරුවාදා'; +$labels['wednesday'] = 'බදාදා'; +$labels['thursday'] = 'බ්රහස්පතිනිදා'; +$labels['friday'] = 'සිකුරාදා'; +$labels['saturday'] = 'සෙනසුරාදා'; +$labels['today'] = 'අද'; +$labels['checkmail'] = 'අඵත් පනිවුඩ සඳහා පිරික්සීම'; +$labels['writenewmessage'] = 'අඵත් පනිවුඩක්'; +$labels['replytomessage'] = 'පනිවුඩයට පිළිතුරු'; +$labels['replytoallmessage'] = 'එවන්නාට සහ සැමට පිළිතුරු'; +$labels['forwardmessage'] = 'පනිවුඩය ඉදිරියට'; +$labels['deletemessage'] = 'පනිවුඩය ලටපට තුලට ගෙනයන්න'; +$labels['movemessagetotrash'] = 'පණිවුඩය ලටපට වෙත ගෙන යන්න'; +$labels['printmessage'] = 'පනිවුඩය මුද්රනය කරන්න'; +$labels['previousmessage'] = 'කලින් පනිවුඩය පෙන්නන්න'; +$labels['previousmessages'] = 'කලින් පනිවුඩ කට්ටලය පෙන්නන්න'; +$labels['firstmessage'] = 'පළමුවන පනිවුඩය පෙන්නන්න'; +$labels['firstmessages'] = 'පළමුවන පනිවුඩ කට්ටලය පෙන්නන්න'; +$labels['nextmessage'] = 'මීළඟ පනිවුඩය පෙන්නන්න'; +$labels['nextmessages'] = 'මීළඟ පනිවුඩ කට්ටලය පෙන්නන්න'; +$labels['lastmessage'] = 'අවසාන පනිවුඩය පෙන්නන්න'; +$labels['lastmessages'] = 'අවසාන පනිවුඩ කට්ටලය පෙන්නන්න'; +$labels['backtolist'] = 'නැවතත් පනිවුඩ ලැයිස්තුවට'; +$labels['viewsource'] = 'මූලාශ්රය පෙන්නන්න'; +$labels['markmessages'] = 'පණිවුඩ'; +$labels['markread'] = 'කියවු ලෙස සළකුණු කරන්න'; +$labels['markunread'] = 'නොකියවු ලෙස සළකුණු කරන්න'; +$labels['select'] = 'තෝරාගන්න'; +$labels['all'] = 'සියලු'; +$labels['none'] = 'තෝරානොගත්'; +$labels['unread'] = 'නොකියවූ'; +$labels['compact'] = 'සංයුක්ත'; +$labels['empty'] = 'රික්ත'; +$labels['purge'] = 'විරේචන'; +$labels['quota'] = 'භාවිතය'; +$labels['unknown'] = 'නාඳුනන'; +$labels['unlimited'] = 'අසීමිත'; +$labels['quicksearch'] = 'ඉක්මන් සෙවුම'; +$labels['resetsearch'] = 'සෙවුම යලි පිහිටවීම'; +$labels['compose'] = 'පනිවුඩයක් සෑදීම'; +$labels['savemessage'] = 'කටු සටහනේ තැන්පත කරන්න'; +$labels['sendmessage'] = 'පනිවුඩය දැන් යවන්න'; +$labels['addattachment'] = 'ගොනුවක් ඇතුලත් කිරීම'; +$labels['charset'] = 'අකුරැ කට්ටලය'; +$labels['editortype'] = 'සම්පාදන ආකාරය'; +$labels['returnreceipt'] = 'නැවත ලබන්නා'; +$labels['checkspelling'] = 'වචන පරීක්ෂාව'; +$labels['resumeediting'] = 'සම්පාදන නැවත ඇරඹීම'; +$labels['revertto'] = 'ආපසු ඒම'; +$labels['attachments'] = 'ගොනු'; +$labels['upload'] = 'ඇතුල් කරීම'; +$labels['close'] = 'වැසීම'; +$labels['low'] = 'අඩු'; +$labels['lowest'] = 'අඩුම'; +$labels['normal'] = 'සමක'; +$labels['high'] = 'ඉහළ'; +$labels['highest'] = 'ඉහළම'; +$labels['nosubject'] = '(මාතෘකාව නොමැති)'; +$labels['showimages'] = 'රූප පෙන්නන්න'; +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'පැහැදිලි අකුරු'; +$labels['addcc'] = 'Cc එක් කරන්න'; +$labels['addbcc'] = 'Bcc එක් කරන්න'; +$labels['addreplyto'] = '\'පිළිතුරු සඳහා\' එක් කරන්න'; +$labels['mdnrequest'] = 'මෙම පණිවුඩය එවන්නා ඔබ එය කියවු බව අසයි. එය දැන්වීමට ඔබ කැමතිද?'; +$labels['receiptread'] = 'ලැබීම් ලදුපත (කියවීම)'; +$labels['yourmessage'] = 'මෙය ඔබගේ පණිවුඩයේ ලැබීම් ලදුපතයි'; +$labels['receiptnote'] = 'සටහන: ලැබීම් ලදුපත මගින් මෙම පණිවුඩය කියවූ බව හෝ තේරුම් ගත් බව ගම්‍ය නොවේ. පණිවුඩය ලබන්නාට පෙන්නුම් කල බවටට සාක්ෂියක් පමණි'; +$labels['name'] = 'නම පෙන්නන්න'; +$labels['firstname'] = 'පළමු නම'; +$labels['surname'] = 'අවසාන නම'; +$labels['email'] = 'ද්යුත් තැපෑල'; +$labels['addcontact'] = 'ලිපින පොතට එකතු කරන්න'; +$labels['editcontact'] = 'ලිපිනය වෙනස් කිරීම'; +$labels['edit'] = 'වෙනස් කිරීම'; +$labels['cancel'] = 'අවලංගු කරීම'; +$labels['save'] = 'තැන්පත් කිරීම'; +$labels['delete'] = 'මකා දැමීම'; +$labels['newcontact'] = 'අඵත් ලිපින පතක් සෑදීම'; +$labels['deletecontact'] = 'තෝරාගත් ලිපින මකා දැමන්න'; +$labels['composeto'] = 'පනිවුඩයක් සෑදීම'; +$labels['contactsfromto'] = '$from ගෙන් $to ලිපින $count'; +$labels['print'] = 'මුද්රණය'; +$labels['export'] = 'නිර්යාත'; +$labels['previouspage'] = 'කලින් කට්ටලය පෙන්නන්න'; +$labels['firstpage'] = 'පළමුවන කට්ටලය පෙන්නන්න'; +$labels['nextpage'] = 'මීළඟ කට්ටලය පෙන්නන්න'; +$labels['lastpage'] = 'අවසාන කට්ටලය පෙන්නන්න'; +$labels['groups'] = 'කණ්ඩායම්'; +$labels['personaladrbook'] = 'පොද්ගලික ලිපිනය'; +$labels['settingsfor'] = 'සඳහා කට්ටල අංග'; +$labels['preferences'] = 'අභිමතය'; +$labels['userpreferences'] = 'පරිශීලක අභිමතය'; +$labels['editpreferences'] = 'පරිශීලක අභිමතය වෙනස් කිරීම්'; +$labels['identities'] = 'අනන්නයතාව'; +$labels['manageidentities'] = 'මෙම ගිණුමෙ අනන්නයතාව හැසිරවීම'; +$labels['newidentity'] = 'අඵත් අනන්නයතාව'; +$labels['newitem'] = 'අඵත් අයිතම'; +$labels['edititem'] = 'අයිතම වෙනස් කිරීම්'; +$labels['setdefault'] = 'පළමු තත්වයට'; +$labels['language'] = 'භාෂාව'; +$labels['timezone'] = 'කාල කලාපය'; +$labels['pagesize'] = 'පිටුවකටඅ පේළි'; +$labels['signature'] = 'අත්සන'; +$labels['dstactive'] = 'දිවා එළිය ඉතිරි කිරීම'; +$labels['htmleditor'] = 'HTML පනිවුඩයක් සෑදීම'; +$labels['htmlsignature'] = 'HTML අත්සන'; +$labels['previewpane'] = 'පූර්වදර්ශන කොටස පෙන්නන්න'; +$labels['autosavedraft'] = 'ස්වයංක්රීයව කටු සටහනේ තැන්පත් කරන්න'; +$labels['everynminutes'] = 'සෑම මිනිත්තු $n'; +$labels['never'] = 'කිසි විටෙකත් නැති'; +$labels['folder'] = 'ෆෝල්ඩරය'; +$labels['folders'] = 'ෆෝල්ඩර'; +$labels['foldername'] = 'ෆෝල්ඩරයේ නම'; +$labels['subscribed'] = 'සාමාජික'; +$labels['messagecount'] = 'පනිවුඩ'; +$labels['create'] = 'සෑදීම'; +$labels['createfolder'] = 'අඵත් ෆෝල්ඩරයක් සෑදීම'; +$labels['rename'] = 'නැවත නම් කිරීම'; +$labels['renamefolder'] = 'ෆෝල්ඩරය නැවත නම් කිරීම'; +$labels['deletefolder'] = 'ෆෝල්ඩරය මකා දැමීම'; +$labels['managefolders'] = 'හැසිරවීම හැසිරවීම'; +$labels['sortby'] = 'චිසින් වර්ග කිරීම'; +$labels['sortasc'] = 'ආරෝහණ වර්ග කිරීම'; +$labels['sortdesc'] = 'අවරෝහණ වර්ග කිරීම'; + ?> \ No newline at end of file diff --git a/program/localization/si/messages.inc b/program/localization/si/messages.inc index 3d5d922..3729cba 100644 --- a/program/localization/si/messages.inc +++ b/program/localization/si/messages.inc @@ -1,73 +1,81 @@ - | - +-----------------------------------------------------------------------+ - -*/ - -$messages = array(); -$messages['loginfailed'] = 'ඇතුල්වීම අසාර්ථකයි'; -$messages['cookiesdisabled'] = 'ඔබේ බෞසරය කුකී බාර ගන්නේ නැත'; -$messages['sessionerror'] = 'ඔබේ වාරය අවලංගු හෝ කාලය ඉකුත් වී ඇත'; -$messages['imaperror'] = 'IMAP සම්බන්ධතාවය අසාර්ථකයි'; -$messages['nomessagesfound'] = 'ලියුම් පෙට්ටියේ පනිවුඩ නැත'; -$messages['loggedout'] = 'ඔබගේ වාරය සාර්ථකව අවසන් විය. අයුබොවන්!'; -$messages['mailboxempty'] = 'ලියුම් පෙට්ටිය හිස්'; -$messages['loading'] = 'පූරනය...'; -$messages['loadingdata'] = 'දත්ත පූරනය...'; -$messages['checkingmail'] = 'අලුත් පනිවුඩ පරීක්ෂා කිරීම...'; -$messages['sendingmessage'] = 'පනිවුඩය යැවීම...'; -$messages['messagesent'] = 'පනිවුඩය සාර්ථකව යවන ලදී'; -$messages['savingmessage'] = 'පනිවුඩය තැන්පත් කීරීම...'; -$messages['messagesaved'] = 'පනිවුඩය කටු සටහනේ තැන්පත් විය'; -$messages['successfullysaved'] = 'සාර්ථකව තැන්පත විය'; -$messages['addedsuccessfully'] = 'ලිපිනය සාර්ථකව ලිපින පොතට එකතු කරන ලදී'; -$messages['contactexists'] = 'ඉහත ලිපිනය සහිත විද්යුත් තැපැල් ලිපිනයක් ලිපින පොතේ ඇත'; -$messages['blockedimages'] = 'ඔබගෙ පොද්ගලිකත්වය හේතුවෙන්, දුරස්ථ රූප අවහිර කර ඇත.'; -$messages['encryptedmessage'] = 'මෙම පනිවුඩය රහස් කේතනය කර ඇති බැවින් පෙන්විය නොහැක. සමාවන්න!'; -$messages['nocontactsfound'] = 'ලිපින සොයා ගත නොහැක'; -$messages['contactnotfound'] = 'ඉල්ලූ ලිපිනය සොයාගත නොහැක'; -$messages['sendingfailed'] = 'පනිවුඩය යැවීම අසාර්ථකයි'; -$messages['errorsaving'] = 'පනිවුඩය තැන්පත් කීරීමේදී දොෂයක් සිදු විය'; -$messages['errormoving'] = 'පනිවුඩය ගෙන යාමට නොහැක'; -$messages['errordeleting'] = 'පනිවුඩය මකා දැමීමට නොහැක'; -$messages['deletecontactconfirm'] = 'තෝරා ඇති ලිපින ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?'; -$messages['deletemessagesconfirm'] = 'තෝරා ඇත පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?'; -$messages['deletefolderconfirm'] = 'ෆෝල්ඩරය මකා දැමීමට සැබවින්ම වුවමනාද?'; -$messages['purgefolderconfirm'] = 'මෙම ෆෝල්ඩරයේ ඇති සියලුම පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?'; -$messages['formincomplete'] = 'පෝරමය සම්පූර්ණයෙන් පුරවා නොමැත'; -$messages['noemailwarning'] = 'කරුණාකර වලංගු විද්යුත් තැපැල් ලිපිනයක් ඇතුලත් කරන්න'; -$messages['nonamewarning'] = 'කරුණාකර නම ඇතුලත් කරන්න'; -$messages['nopagesizewarning'] = 'කරුණාකර පිටුවේ ප්රමානය ඇතුලත් කරන්න'; -$messages['norecipientwarning'] = 'කරුණාකර යටත් පිරිසෙයින් එක් ලබන්නෙකු හෝ ඇතුලත් කරන්න'; -$messages['nosubjectwarning'] = '"මාතෘකාව" හිස්. මාතෘකාවක් අතුලත් කිරීමට ඔබ කැමතිද?'; -$messages['nobodywarning'] = 'මෙම හිස් පනිවුඩය යවන්නද?'; -$messages['notsentwarning'] = 'පනිවුඩය යැවීමට නොහැකි විය. ඔබට එය බැහැර කිරීමට වුවමනාද?'; -$messages['noldapserver'] = 'සෙවුම සඳහා කරුණාකර ldap සම්බන්ධතාවයක් තෝරා ගන්න'; -$messages['nocontactsreturned'] = 'ලිපින/ය සොයා ගත නොහැක'; -$messages['nosearchname'] = 'කරුණාකර ලිපිනයෙහි නම හෝ විද්යුත් තැපැල් ලිපිනය ඇතුලත් කරන්න'; -$messages['searchsuccessful'] = '$nr පනිවුඩය හමු විය'; -$messages['searchnomatch'] = 'සෙවුමට අදාල ගැලපීමක් නොමැත'; -$messages['searching'] = 'සොයමින් පවතී...'; -$messages['checking'] = 'පිරික්සමින් පවතී...'; -$messages['nospellerrors'] = 'වියාකරන දොෂ නොමැත'; -$messages['folderdeleted'] = 'ෆෝල්ඩරය සාර්ථකව මකා දමන ලදී'; -$messages['deletedsuccessfully'] = 'සාර්ථකව මකා දමන ලදී'; -$messages['converting'] = 'පනිවුඩයෙන් ආකෘතීකරණය ඉවත් කිරීම'; -$messages['messageopenerror'] = 'පනිවුඩය පූරනය කිරීමට නොහැක'; -$messages['fileuploaderror'] = 'ගොනුව ඇතුලත් කිරීමට නොහැක'; -$messages['filesizeerror'] = 'ඇතුලත් කල ගොනුවෙ ප්රමාණය උපරිම අගය $size ඉක්මවා ඇත'; -$messages['copysuccess'] = '$nr ලිපිනය සාර්ථකව පිටපත් කරන ලදී'; -$messages['copyerror'] = 'කවර ලිපිනයක්වත් හෝ පිටපත් කල නොහැක'; -$messages['sourceisreadonly'] = 'මෙම ලිපින මූලාශ්රය කියවීම සඳහා පමනි'; -$messages['errorsavingcontact'] = 'ලිපිනය තැන්පත් කීරීමට නොහැක'; - + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'ඇතුල්වීම අසාර්ථකයි'; +$messages['cookiesdisabled'] = 'ඔබේ බෞසරය කුකී බාර ගන්නේ නැත'; +$messages['sessionerror'] = 'ඔබේ වාරය අවලංගු හෝ කාලය ඉකුත් වී ඇත'; +$messages['imaperror'] = 'IMAP සම්බන්ධතාවය අසාර්ථකයි'; +$messages['nomessagesfound'] = 'ලියුම් පෙට්ටියේ පනිවුඩ නැත'; +$messages['loggedout'] = 'ඔබගේ වාරය සාර්ථකව අවසන් විය. අයුබොවන්!'; +$messages['mailboxempty'] = 'ලියුම් පෙට්ටිය හිස්'; +$messages['loading'] = 'පූරනය...'; +$messages['loadingdata'] = 'දත්ත පූරනය...'; +$messages['checkingmail'] = 'අලුත් පනිවුඩ පරීක්ෂා කිරීම...'; +$messages['sendingmessage'] = 'පනිවුඩය යැවීම...'; +$messages['messagesent'] = 'පනිවුඩය සාර්ථකව යවන ලදී'; +$messages['savingmessage'] = 'පනිවුඩය තැන්පත් කීරීම...'; +$messages['messagesaved'] = 'පනිවුඩය කටු සටහනේ තැන්පත් විය'; +$messages['successfullysaved'] = 'සාර්ථකව තැන්පත විය'; +$messages['addedsuccessfully'] = 'ලිපිනය සාර්ථකව ලිපින පොතට එකතු කරන ලදී'; +$messages['contactexists'] = 'ඉහත ලිපිනය සහිත විද්යුත් තැපැල් ලිපිනයක් ලිපින පොතේ ඇත'; +$messages['blockedimages'] = 'ඔබගෙ පොද්ගලිකත්වය හේතුවෙන්, දුරස්ථ රූප අවහිර කර ඇත.'; +$messages['encryptedmessage'] = 'මෙම පනිවුඩය රහස් කේතනය කර ඇති බැවින් පෙන්විය නොහැක. සමාවන්න!'; +$messages['nocontactsfound'] = 'ලිපින සොයා ගත නොහැක'; +$messages['contactnotfound'] = 'ඉල්ලූ ලිපිනය සොයාගත නොහැක'; +$messages['sendingfailed'] = 'පනිවුඩය යැවීම අසාර්ථකයි'; +$messages['errorsaving'] = 'පනිවුඩය තැන්පත් කීරීමේදී දොෂයක් සිදු විය'; +$messages['errormoving'] = 'පනිවුඩය ගෙන යාමට නොහැක'; +$messages['errordeleting'] = 'පනිවුඩය මකා දැමීමට නොහැක'; +$messages['deletecontactconfirm'] = 'තෝරා ඇති ලිපින ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?'; +$messages['deletemessagesconfirm'] = 'තෝරා ඇත පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?'; +$messages['deletefolderconfirm'] = 'ෆෝල්ඩරය මකා දැමීමට සැබවින්ම වුවමනාද?'; +$messages['purgefolderconfirm'] = 'මෙම ෆෝල්ඩරයේ ඇති සියලුම පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?'; +$messages['formincomplete'] = 'පෝරමය සම්පූර්ණයෙන් පුරවා නොමැත'; +$messages['noemailwarning'] = 'කරුණාකර වලංගු විද්යුත් තැපැල් ලිපිනයක් ඇතුලත් කරන්න'; +$messages['nonamewarning'] = 'කරුණාකර නම ඇතුලත් කරන්න'; +$messages['nopagesizewarning'] = 'කරුණාකර පිටුවේ ප්රමානය ඇතුලත් කරන්න'; +$messages['norecipientwarning'] = 'කරුණාකර යටත් පිරිසෙයින් එක් ලබන්නෙකු හෝ ඇතුලත් කරන්න'; +$messages['nosubjectwarning'] = '"මාතෘකාව" හිස්. මාතෘකාවක් අතුලත් කිරීමට ඔබ කැමතිද?'; +$messages['nobodywarning'] = 'මෙම හිස් පනිවුඩය යවන්නද?'; +$messages['notsentwarning'] = 'පනිවුඩය යැවීමට නොහැකි විය. ඔබට එය බැහැර කිරීමට වුවමනාද?'; +$messages['noldapserver'] = 'සෙවුම සඳහා කරුණාකර ldap සම්බන්ධතාවයක් තෝරා ගන්න'; +$messages['nocontactsreturned'] = 'ලිපින/ය සොයා ගත නොහැක'; +$messages['nosearchname'] = 'කරුණාකර ලිපිනයෙහි නම හෝ විද්යුත් තැපැල් ලිපිනය ඇතුලත් කරන්න'; +$messages['searchsuccessful'] = '$nr පනිවුඩය හමු විය'; +$messages['searchnomatch'] = 'සෙවුමට අදාල ගැලපීමක් නොමැත'; +$messages['searching'] = 'සොයමින් පවතී...'; +$messages['checking'] = 'පිරික්සමින් පවතී...'; +$messages['nospellerrors'] = 'වියාකරන දොෂ නොමැත'; +$messages['folderdeleted'] = 'ෆෝල්ඩරය සාර්ථකව මකා දමන ලදී'; +$messages['deletedsuccessfully'] = 'සාර්ථකව මකා දමන ලදී'; +$messages['converting'] = 'පනිවුඩයෙන් ආකෘතීකරණය ඉවත් කිරීම'; +$messages['messageopenerror'] = 'පනිවුඩය පූරනය කිරීමට නොහැක'; +$messages['fileuploaderror'] = 'ගොනුව ඇතුලත් කිරීමට නොහැක'; +$messages['filesizeerror'] = 'ඇතුලත් කල ගොනුවෙ ප්රමාණය උපරිම අගය $size ඉක්මවා ඇත'; +$messages['copysuccess'] = '$nr ලිපිනය සාර්ථකව පිටපත් කරන ලදී'; +$messages['copyerror'] = 'කවර ලිපිනයක්වත් හෝ පිටපත් කල නොහැක'; +$messages['sourceisreadonly'] = 'මෙම ලිපින මූලාශ්රය කියවීම සඳහා පමනි'; +$messages['errorsavingcontact'] = 'ලිපිනය තැන්පත් කීරීමට නොහැක'; +$messages['movingmessage'] = 'පනිවුඩය ගෙනයමින් පවතී...'; +$messages['receiptsent'] = 'කියවීම් භාර ගැනීම සාර්ථකව යවන ලදී'; +$messages['errorsendingreceipt'] = 'කියවීම් භාර ගැනීම යැවීමට නොහැක'; +$messages['nodeletelastidentity'] = 'අවසාන අනන්‍යතාවය මකා දැමිය නොහැක'; +$messages['addsubfolderhint'] = 'ෆෝල්ඩරය දැනට තෝරාගෙන ඇති ෆෝල්ඩරයෙහි අනු ෆෝල්ඩරයක් ලෙස සෑදේ'; + ?> \ No newline at end of file diff --git a/program/localization/sk/labels.inc b/program/localization/sk/labels.inc index 624e5c3..14ef06d 100644 --- a/program/localization/sk/labels.inc +++ b/program/localization/sk/labels.inc @@ -6,15 +6,15 @@ | language/sk/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Lukas Kraic | - | Marek Kutnar marek19@zmail.sk> | + | Author: Marek Kutnar | + | Lukas Kraic | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: labels.inc 1153 2008-02-28 20:04:12Z thomasb $ */ @@ -75,7 +75,8 @@ $labels['writenewmessage'] = 'Vytvor novú správu'; $labels['replytomessage'] = 'OdpovedaÅ¥'; $labels['replytoallmessage'] = 'OdpovedaÅ¥ vÅ¡etkým'; $labels['forwardmessage'] = 'PoslaÅ¥ ďalej'; -$labels['deletemessage'] = 'Presuň správu do koÅ¡a'; +$labels['deletemessage'] = 'ZmazaÅ¥ správu'; +$labels['movemessagetotrash'] = 'Presunúť správu do koÅ¡a'; $labels['printmessage'] = 'Vytlač správu'; $labels['previousmessage'] = 'ZobraziÅ¥ predchádzajúcu správu'; $labels['previousmessages'] = 'ZobraziÅ¥ predchádzajúcu stránku správ'; @@ -87,6 +88,9 @@ $labels['lastmessage'] = 'ZobraziÅ¥ poslednú správu'; $labels['lastmessages'] = 'ZobraziÅ¥ poslednú stránku správ'; $labels['backtolist'] = 'Späť na zoznam správ'; $labels['viewsource'] = 'Ukáž zdroj správy'; +$labels['markmessages'] = 'Označ správy'; +$labels['markread'] = 'Ako prečítané'; +$labels['markunread'] = 'Ako neprečítané'; $labels['select'] = 'Výber'; $labels['all'] = 'VÅ¡etky'; $labels['none'] = 'Žiadnu'; @@ -100,8 +104,8 @@ $labels['unlimited'] = 'neobmedzené'; $labels['quicksearch'] = 'Rýchle vyhľadávanie'; $labels['resetsearch'] = 'Vyčisti vyhľadávanie'; $labels['compose'] = 'VytvoriÅ¥ správu'; -$labels['sendmessage'] = 'OdoslaÅ¥ správu'; $labels['savemessage'] = 'UložiÅ¥ do rozpísaných'; +$labels['sendmessage'] = 'OdoslaÅ¥ správu'; $labels['addattachment'] = 'PridaÅ¥ prílohu'; $labels['charset'] = 'Znaková sada'; $labels['editortype'] = 'Typ editora'; @@ -121,6 +125,13 @@ $labels['nosubject'] = '(bez predmetu)'; $labels['showimages'] = 'Ukáž obrázky'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Čisty text'; +$labels['addcc'] = 'PridaÅ¥ kópiu'; +$labels['addbcc'] = 'PridaÅ¥ skrytú kopiu'; +$labels['addreplyto'] = 'PridaÅ¥ odpoveď'; +$labels['mdnrequest'] = 'Odosielateľ tejto správy chce byÅ¥ upozornený na to, že ste správu obdržali. Chcete potvrdiÅ¥ prijatie správy?'; +$labels['receiptread'] = 'Potvrdenie o prijatí správy'; +$labels['yourmessage'] = 'Toto je potvrdenie o prijatí VaÅ¡ej správy'; +$labels['receiptnote'] = 'Poznámka: Toto potvrdenie negarantuje, že správa bola príjemcom prečítaná a porozumel jej obsahu.'; $labels['name'] = 'Celé meno'; $labels['firstname'] = 'Meno'; $labels['surname'] = 'Priezvisko'; @@ -168,6 +179,7 @@ $labels['folder'] = 'Zložka'; $labels['folders'] = 'Zložky'; $labels['foldername'] = 'Meno zložky'; $labels['subscribed'] = 'Podpísaný'; +$labels['messagecount'] = 'Počet správ'; $labels['create'] = 'VytvoriÅ¥'; $labels['createfolder'] = 'Vytvor novú zložku'; $labels['rename'] = 'PremenovaÅ¥'; @@ -178,4 +190,4 @@ $labels['sortby'] = 'TriediÅ¥ podľa'; $labels['sortasc'] = 'TriediÅ¥ vzostupne'; $labels['sortdesc'] = 'TriediÅ¥ zostupne'; -?> \ No newline at end of file +?> diff --git a/program/localization/sk/messages.inc b/program/localization/sk/messages.inc index efad6ba..9556810 100644 --- a/program/localization/sk/messages.inc +++ b/program/localization/sk/messages.inc @@ -6,15 +6,15 @@ | language/sk/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: Lukas Kraic | - | Marek Kutnar marek19@zmail.sk> | + | Author: Marek Kutnar | + | Lukas Kraic | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $ + @version $Id: messages.inc 1153 2008-02-28 20:04:12Z thomasb $ */ @@ -74,5 +74,10 @@ $messages['copysuccess'] = 'ÚspeÅ¡ne skopírovanie $nr adries'; $messages['copyerror'] = 'Nemôžem skopírovaÅ¥ žiadnu adresu'; $messages['sourceisreadonly'] = 'Tento zdroj adries je len na čítanie'; $messages['errorsavingcontact'] = 'Nemôžem uložit adresu kontaktu'; +$messages['movingmessage'] = 'Presúvam správu...'; +$messages['receiptsent'] = 'Potvrdenie o prijatí správy odoslané'; +$messages['errorsendingreceipt'] = 'Potvrdenie o prijatí správy nebolo možné odoslaÅ¥'; +$messages['nodeletelastidentity'] = 'Identita sa nedá odstrániÅ¥, je posledná a musí zostaÅ¥.'; +$messages['addsubfolderhint'] = 'Táto zložka bude vytvorená ako podzložka aktualne zvolenej zložky'; -?> \ No newline at end of file +?> diff --git a/program/localization/sl/labels.inc b/program/localization/sl/labels.inc index 3239628..98e7fa9 100644 --- a/program/localization/sl/labels.inc +++ b/program/localization/sl/labels.inc @@ -2,19 +2,19 @@ /* - +--------------------------------------------------------------------------------------+ - | language/si/labels.inc | - | | - | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | - | Licensed under the GNU GPL | - | | - +--------------------------------------------------------------------------------------+ - | Author: Andrej Sossi | - | Andrej Mocilnik | - +--------------------------------------------------------------------------------------+ ++-----------------------------------------------------------------------+ +| language/sl/labels.inc | +| | +| Language file of the RoundCube Webmail client | +| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | +| Licensed under the GNU GPL | +| | ++-----------------------------------------------------------------------+ +| Author: Andrej Sossi | +| Andrej Mocilnik | ++-----------------------------------------------------------------------+ - @version $Id: labels.inc 842 2007-10-01 13:55:02Z tomekp $ +@version $Id: labels.inc 1109 2008-02-17 20:22:05Z thomasb $ */ @@ -36,7 +36,7 @@ $labels['junk'] = 'Nezaželena sporočila'; $labels['subject'] = 'Zadeva'; $labels['from'] = 'PoÅ¡iljatelj'; $labels['to'] = 'Prejemnik'; -$labels['cc'] = 'Kopija'; +$labels['cc'] = 'Kp'; $labels['bcc'] = 'Skp'; $labels['replyto'] = 'Odgovor na'; $labels['date'] = 'Datum'; @@ -53,7 +53,7 @@ $labels['filename'] = 'Ime datoteke'; $labels['filesize'] = 'Velikost datoteke'; $labels['preferhtml'] = 'Prednostno HTML'; $labels['htmlmessage'] = 'HTML sporočilo'; -$labels['prettydate'] = 'ČitljivejÅ¡i datumi'; +$labels['prettydate'] = 'Bolj čitljivi datumi'; $labels['addtoaddressbook'] = 'Dodaj v stike'; $labels['sun'] = 'Ned'; $labels['mon'] = 'Pon'; @@ -76,22 +76,26 @@ $labels['replytomessage'] = 'Odgovori na sporočilo'; $labels['replytoallmessage'] = 'Odgovori poÅ¡iljatelju in vsem prejemnikom'; $labels['forwardmessage'] = 'Posreduj sporočilo'; $labels['deletemessage'] = 'Premakni sporočilo v smeti'; -$labels['printmessage'] = 'Tiskaj to sporočilo'; +$labels['movemessagetotrash'] = 'Premakni v smetnjak'; +$labels['printmessage'] = 'Natisni to sporočilo'; $labels['previousmessage'] = 'Prikaži prejÅ¡nje sporočilo'; -$labels['previousmessages'] = 'Prikaži prejÅ¡ni set sporočil'; +$labels['previousmessages'] = 'Prikaži prejÅ¡nja sporočila'; $labels['firstmessage'] = 'Prikaži prvo sporočilo'; -$labels['firstmessages'] = 'Prikaži prvi set sporočil'; +$labels['firstmessages'] = 'Prikaži prva sporočila'; $labels['nextmessage'] = 'Prikaži naslednjo sporočilo'; -$labels['nextmessages'] = 'Prikaži naslednji set sporočil'; +$labels['nextmessages'] = 'Prikaži naslednja sporočila'; $labels['lastmessage'] = 'Prikaži zadnjo sporočilo'; -$labels['lastmessages'] = 'Prikaži zadnji set sporočil'; +$labels['lastmessages'] = 'Prikaži zadnja sporočila'; $labels['backtolist'] = 'Nazaj na seznam sporočil'; $labels['viewsource'] = 'Prikaži izvirno kodo'; +$labels['markmessages'] = 'Označi sporočilo'; +$labels['markread'] = 'Kot prebrano'; +$labels['markunread'] = 'Kot neprebrano'; $labels['select'] = 'Izberi'; $labels['all'] = 'Vse'; $labels['none'] = 'Nobenih'; $labels['unread'] = 'Neprebrano'; -$labels['compact'] = 'Stistni'; +$labels['compact'] = 'Stisni'; $labels['empty'] = 'Izprazni'; $labels['purge'] = 'Počisti'; $labels['quota'] = 'Poraba diska'; @@ -100,8 +104,8 @@ $labels['unlimited'] = 'neomejena'; $labels['quicksearch'] = 'Hitri iskalnik'; $labels['resetsearch'] = 'Prekliči iskanje'; $labels['compose'] = 'Sestavi sporočilo'; -$labels['sendmessage'] = 'PoÅ¡lji sporočilo zdaj'; $labels['savemessage'] = 'Shrani kot osnutek'; +$labels['sendmessage'] = 'PoÅ¡lji sporočilo zdaj'; $labels['addattachment'] = 'Pripni datoteko'; $labels['charset'] = 'Nabor znakov'; $labels['editortype'] = 'Vrsta urejevalnika'; @@ -121,6 +125,13 @@ $labels['nosubject'] = '(brez naslova)'; $labels['showimages'] = 'Prikaži slike'; $labels['htmltoggle'] = 'Obogateno besedilo (HTML)'; $labels['plaintoggle'] = 'Samo besedilo'; +$labels['addcc'] = 'Dodaj Kp'; +$labels['addbcc'] = 'Dodaj Skp'; +$labels['addreplyto'] = 'Dodaj naslov za odgovor'; +$labels['mdnrequest'] = 'PoÅ¡iljatelj tega sporočila je zaprosil za portdilo, ko vi preberete to sporočilo. Hočete poslati obvestilo?'; +$labels['receiptread'] = 'Potrdilo o prebranem sporočilu'; +$labels['yourmessage'] = 'To je potrdilo, da je bilo vaÅ¡e sporočilo prebrano'; +$labels['receiptnote'] = 'Pozor: to je samo potrdilo, da vaÅ¡e sporočilo je bilo prikazano na prejemnikovem računalniku. To Å¡e ne pomeni, da je prejemnik prebral ali razumel vsebino vaÅ¡ega sporočila.'; $labels['name'] = 'Ime za prikaz'; $labels['firstname'] = 'Ime'; $labels['surname'] = 'Priimek'; @@ -168,6 +179,7 @@ $labels['folder'] = 'Mapa'; $labels['folders'] = 'Mape'; $labels['foldername'] = 'Ime mape'; $labels['subscribed'] = 'Vpisan'; +$labels['messagecount'] = 'Sporočila'; $labels['create'] = 'Ustvari'; $labels['createfolder'] = 'Ustvari novo mapo'; $labels['rename'] = 'Preimenuj'; @@ -178,4 +190,4 @@ $labels['sortby'] = 'Uredi po'; $labels['sortasc'] = 'Uredi naraščajoče'; $labels['sortdesc'] = 'Uredi padajoče'; -?> \ No newline at end of file +?> diff --git a/program/localization/sl/messages.inc b/program/localization/sl/messages.inc index f19a403..fab3c20 100644 --- a/program/localization/sl/messages.inc +++ b/program/localization/sl/messages.inc @@ -2,19 +2,19 @@ /* - +--------------------------------------------------------------------------------------+ - | language/si/messages.inc | - | | - | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | - | Licensed under the GNU GPL | - | | - +--------------------------------------------------------------------------------------+ - | Author: Andrej Sossi | - | Andrej Mocilnik | - +--------------------------------------------------------------------------------------+ ++-----------------------------------------------------------------------+ +| language/sl/messages.inc | +| | +| Language file of the RoundCube Webmail client | +| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | +| Licensed under the GNU GPL | +| | ++-----------------------------------------------------------------------+ +| Author: Andrej Sossi | +| Andrej Mocilnik | ++-----------------------------------------------------------------------+ - @version $Id: messages.inc 842 2007-10-01 13:55:02Z tomekp $ +@version $Id: messages.inc 1109 2008-02-17 20:22:05Z thomasb $ */ @@ -31,7 +31,7 @@ $messages['loadingdata'] = 'Nalagam podatke...'; $messages['checkingmail'] = 'Iščem nova sporočila...'; $messages['sendingmessage'] = 'PoÅ¡iljam sporočilo...'; $messages['messagesent'] = 'Sporočilo uspeÅ¡no poslano'; -$messages['savingmessage'] = 'Shrenjujem sporočilo'; +$messages['savingmessage'] = 'Shranjujem sporočilo'; $messages['messagesaved'] = 'Sporočilo shranjeno v osnutke'; $messages['successfullysaved'] = 'UspeÅ¡no shranjeno'; $messages['addedsuccessfully'] = 'Vizitka uspeÅ¡no dodana'; @@ -74,5 +74,10 @@ $messages['copysuccess'] = 'Å tevilo prepisanih naslovov: $nr'; $messages['copyerror'] = 'Ne morem prepisati nobenega naslova'; $messages['sourceisreadonly'] = 'Izvirnik naslova je samo berljiv'; $messages['errorsavingcontact'] = 'Ne morem shraniti vizitke'; +$messages['movingmessage'] = 'Premakni besedilo...'; +$messages['receiptsent'] = 'Potrdilo o prebranem sporočilu je bilo uspeÅ¡no poslano'; +$messages['errorsendingreceipt'] = 'Nemogoče poslati potrdilo o prebranem sporočilu'; +$messages['nodeletelastidentity'] = 'Nemogoče zbrisati identitete. Ta je edina, ki imate.'; +$messages['addsubfolderhint'] = 'Mapa bo narejena kot podmapa trenutno izbrane mape'; -?> \ No newline at end of file +?> diff --git a/program/localization/sq_AL/labels.inc b/program/localization/sq_AL/labels.inc new file mode 100644 index 0000000..127bb88 --- /dev/null +++ b/program/localization/sq_AL/labels.inc @@ -0,0 +1,192 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$labels = array(); +$labels['welcome'] = 'Mirëseerdhe te $product'; +$labels['username'] = 'Përdoruesi'; +$labels['password'] = 'Fjalëkalimi'; +$labels['server'] = 'Serveri'; +$labels['login'] = 'Hyr'; +$labels['logout'] = 'Dil'; +$labels['mail'] = 'Mesazhet'; +$labels['settings'] = 'Konfigurimi Personal'; +$labels['addressbook'] = 'Libri i Adresave'; +$labels['inbox'] = 'Ardhjet'; +$labels['drafts'] = 'Drafte'; +$labels['sent'] = 'Dërguar'; +$labels['trash'] = 'Fshirë'; +$labels['junk'] = 'Reklama'; +$labels['subject'] = 'Tema'; +$labels['from'] = 'Dërguesi'; +$labels['to'] = 'Marrësi'; +$labels['cc'] = 'Kopje'; +$labels['bcc'] = 'Bcc'; +$labels['replyto'] = 'Reply-To'; +$labels['date'] = 'Data'; +$labels['size'] = 'Madhësia'; +$labels['priority'] = 'Përparësia'; +$labels['organization'] = 'Organizata'; +$labels['reply-to'] = 'Reply-To'; +$labels['mailboxlist'] = 'Dosjet'; +$labels['messagesfromto'] = 'Mesazhet $from në $to nga $count'; +$labels['messagenrof'] = 'Mesazhi $nr nga $count'; +$labels['moveto'] = 'ço te...'; +$labels['download'] = 'shkarko'; +$labels['filename'] = 'Emër skedari'; +$labels['filesize'] = 'Madhësi skedari'; +$labels['preferhtml'] = 'Shfaq HTML'; +$labels['htmlmessage'] = 'Mesazh HTML'; +$labels['prettydate'] = 'Data të këndshme'; +$labels['addtoaddressbook'] = 'Shto në librin e adresave'; +$labels['sun'] = 'Dje'; +$labels['mon'] = 'Hën'; +$labels['tue'] = 'Mar'; +$labels['wed'] = 'Mër'; +$labels['thu'] = 'Enj'; +$labels['fri'] = 'Pre'; +$labels['sat'] = 'Sht'; +$labels['sunday'] = 'e djelë'; +$labels['monday'] = 'e hënë'; +$labels['tuesday'] = 'e martë'; +$labels['wednesday'] = 'e mërkurë'; +$labels['thursday'] = 'e enjte'; +$labels['friday'] = 'e premte'; +$labels['saturday'] = 'e shtunë'; +$labels['today'] = 'sot'; +$labels['checkmail'] = 'Shiko për mesazhe të reja'; +$labels['writenewmessage'] = 'Krijo një mesazh të ri'; +$labels['replytomessage'] = 'Ktheji përgjigje mesazhit'; +$labels['replytoallmessage'] = 'Ktheji përgjigje dërguesit dhe të gjithë marrësve'; +$labels['forwardmessage'] = 'Pasoje mesazhin'; +$labels['deletemessage'] = 'Fshije mesazhin'; +$labels['movemessagetotrash'] = 'Hidhe mesazhin në kosh'; +$labels['printmessage'] = 'Shtype këtë mesazh'; +$labels['previousmessage'] = 'Shfaq mesazhin e mëparshëm'; +$labels['previousmessages'] = 'Shfaq grupin e mëparshëm të mesazheve'; +$labels['firstmessage'] = 'Shfaq mesazhin e parë'; +$labels['firstmessages'] = 'Shfaq grupin e parë të mesazheve'; +$labels['nextmessage'] = 'Shfaq mesazhin pasardhës'; +$labels['nextmessages'] = 'Shfaq grupin tjetër të mesazheve'; +$labels['lastmessage'] = 'Shfaq mesazhin e fundit'; +$labels['lastmessages'] = 'Shfaq grupin e fundit të mesazheve'; +$labels['backtolist'] = 'Kthehu te lista e mesazheve'; +$labels['viewsource'] = 'Shfaq tekstin'; +$labels['markmessages'] = 'Shëno mesazhet'; +$labels['markread'] = 'Si të lexuara'; +$labels['markunread'] = 'Si të palexuara'; +$labels['select'] = 'Zgjidh'; +$labels['all'] = 'Të gjitha'; +$labels['none'] = 'Asnjë'; +$labels['unread'] = 'Palexuar'; +$labels['compact'] = 'Zvogëlo'; +$labels['empty'] = 'Boshatis'; +$labels['purge'] = 'Pastro'; +$labels['quota'] = 'Përdorimi i diskut'; +$labels['unknown'] = 'i panjohur'; +$labels['unlimited'] = 'i pakufizuar'; +$labels['quicksearch'] = 'Kërkim i shpejtë'; +$labels['resetsearch'] = 'Pastro kërkimin'; +$labels['compose'] = 'Shkruaj një mesazh'; +$labels['savemessage'] = 'Ruaje si draft'; +$labels['sendmessage'] = 'Dërgoje mesazhin tani'; +$labels['addattachment'] = 'Bashkangjit një skedar'; +$labels['charset'] = 'Bashkësi shkronjash'; +$labels['editortype'] = 'Lloj editori'; +$labels['returnreceipt'] = 'Njoftim marrje'; +$labels['checkspelling'] = 'Kontroll gabimesh'; +$labels['resumeediting'] = 'Vazhdo editimin'; +$labels['revertto'] = 'Ktheje te'; +$labels['attachments'] = 'Bashkangjitjet'; +$labels['upload'] = 'Ngarko'; +$labels['close'] = 'Mbyll'; +$labels['low'] = 'I ulët'; +$labels['lowest'] = 'Më i ulëti'; +$labels['normal'] = 'Normal'; +$labels['high'] = 'I lartë'; +$labels['highest'] = 'Më i larti'; +$labels['nosubject'] = '(pa subjekt)'; +$labels['showimages'] = 'Shfaq imazhet'; +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'TEXT'; +$labels['addcc'] = 'Shto Cc'; +$labels['addbcc'] = 'Shto Bcc'; +$labels['addreplyto'] = 'Shto Reply-To'; +$labels['mdnrequest'] = 'Dërguesi i këtij mesazhi ka kërkuar që të njoftohet kur ju të lexoni këtë mesazh. Dëshironi ta njoftoni dërguesin?'; +$labels['receiptread'] = 'Njoftim Leximi'; +$labels['yourmessage'] = 'Ky është një njoftim leximi për mesazhin tuaj'; +$labels['receiptnote'] = 'Shënim: Ky njoftim tregon vetëm që mesazhi u shfaq në kompjuterin e marrësit. Nuk ka siguri që marrësi e ka lexuar ose e ka kuptuar përmbajtjen e mesazhit.'; +$labels['name'] = 'Emri që thirret'; +$labels['firstname'] = 'Emri'; +$labels['surname'] = 'Mbiemri'; +$labels['email'] = 'E-Mail'; +$labels['addcontact'] = 'Shto një kontakt të ri'; +$labels['editcontact'] = 'Ndrysho kontaktin'; +$labels['edit'] = 'Ndrysho'; +$labels['cancel'] = 'Anullo'; +$labels['save'] = 'Ruaj'; +$labels['delete'] = 'Fshi'; +$labels['newcontact'] = 'Krijo nje kartë të re kontakti'; +$labels['deletecontact'] = 'Fshi kontaktet e zgjedhura'; +$labels['composeto'] = 'Shkruaj email për'; +$labels['contactsfromto'] = 'Kontaktet $from në $to nga $count'; +$labels['print'] = 'Shtyp'; +$labels['export'] = 'Eksporto'; +$labels['previouspage'] = 'Shfaq grupin e mëparshëm'; +$labels['firstpage'] = 'Shfaq grupin e parë'; +$labels['nextpage'] = 'Shfaq grupin tjetër'; +$labels['lastpage'] = 'Shfaq grupin e fundit'; +$labels['groups'] = 'Grupet'; +$labels['personaladrbook'] = 'Adresat Personale'; +$labels['settingsfor'] = 'Konfigurimet për'; +$labels['preferences'] = 'Preferencat'; +$labels['userpreferences'] = 'Preferencat e përdoruesit'; +$labels['editpreferences'] = 'Ndrysho preferencat e përdoruesit'; +$labels['identities'] = 'Identitetet'; +$labels['manageidentities'] = 'Manaxho identitetet per këtë llogari'; +$labels['newidentity'] = 'Identitet i ri'; +$labels['newitem'] = 'Element i ri'; +$labels['edititem'] = 'Ndrysho element'; +$labels['setdefault'] = 'Bëje identitet kryesor'; +$labels['language'] = 'Gjuha'; +$labels['timezone'] = 'Brezi orar'; +$labels['pagesize'] = 'Rreshtat për faqe'; +$labels['signature'] = 'Nënshkrim'; +$labels['dstactive'] = 'Ndryshim ore'; +$labels['htmleditor'] = 'Shkruaj mesazhe HTML'; +$labels['htmlsignature'] = 'Nënshkrimi HTML'; +$labels['previewpane'] = 'Shiko si duket'; +$labels['autosavedraft'] = 'Ruaje automatikisht si draft'; +$labels['everynminutes'] = 'çdo $n minuta'; +$labels['never'] = 'kurrë'; +$labels['folder'] = 'Kutia'; +$labels['folders'] = 'Kutitë'; +$labels['foldername'] = 'Emër kutie'; +$labels['subscribed'] = 'Regjistruar'; +$labels['messagecount'] = 'Mesazhe'; +$labels['create'] = 'Krijo'; +$labels['createfolder'] = 'Krijo kuti të re'; +$labels['rename'] = 'Riemëro'; +$labels['renamefolder'] = 'Riemëro kutinë'; +$labels['deletefolder'] = 'Fshi kutinë'; +$labels['managefolders'] = 'Sistemo kutitë'; +$labels['sortby'] = 'Rradhit sipas'; +$labels['sortasc'] = 'Rradhitje rritëse'; +$labels['sortdesc'] = 'Rradhitje zbritëse'; + +?> diff --git a/program/localization/sq_AL/messages.inc b/program/localization/sq_AL/messages.inc new file mode 100644 index 0000000..f00e205 --- /dev/null +++ b/program/localization/sq_AL/messages.inc @@ -0,0 +1,82 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'Hyrja dështoi'; +$messages['cookiesdisabled'] = 'Shfletuesi juaj nuk i pranon sheqerkat'; +$messages['sessionerror'] = 'Sesioni juaj është i pavlefshëm ose i ka kaluar afati'; +$messages['imaperror'] = 'Lidhja me serverin IMAP dështoi'; +$messages['nomessagesfound'] = 'Nuk ka mesazhe në këtë kuti postare'; +$messages['loggedout'] = 'Sesionin e mbyllët me sukses. Mirupafshim!'; +$messages['mailboxempty'] = 'Kutia postare është bosh'; +$messages['loading'] = 'Po ngarkohet...'; +$messages['loadingdata'] = 'Po ngarkohen të dhëna...'; +$messages['checkingmail'] = 'Po shoh për mesazhe të reja...'; +$messages['sendingmessage'] = 'Po dërgoj mesazhin...'; +$messages['messagesent'] = 'Mesazhi u dërgua me sukses'; +$messages['savingmessage'] = 'Po ruaj mesazhin...'; +$messages['messagesaved'] = 'Mesazhi u ruajt te kutia Drafte'; +$messages['successfullysaved'] = 'U ruajt me sukses'; +$messages['addedsuccessfully'] = 'Kontakti u shtua me sukses në librin e adresave'; +$messages['contactexists'] = 'Këtë adresë e-mail e ka një kontakt tjetër'; +$messages['blockedimages'] = 'Për të mbrojtur fshehtësinë tuaj, imazhet e largëta të këtij mesazhi janë bllokuar.'; +$messages['encryptedmessage'] = 'Ky është një mesazh i koduar dhe nuk mund te shfaqet. Më vjen keq!'; +$messages['nocontactsfound'] = 'Nuk ka kontakte'; +$messages['contactnotfound'] = 'Kontakti që kërkoni nuk gjendet'; +$messages['sendingfailed'] = 'Dërgimi i mesazhit dështoi'; +$messages['errorsaving'] = 'Pati nje problem gjatë ruajtjes'; +$messages['errormoving'] = 'Nuk e lëviza dot mesazhin'; +$messages['errordeleting'] = 'Nuk e fshiva dot mesazhin'; +$messages['deletecontactconfirm'] = 'Me të vërtetë doni ti fshini kontaktet e zgjedhura?'; +$messages['deletemessagesconfirm'] = 'Me të vërtetë doni ti fshini mesazhet e zgjedhura?'; +$messages['deletefolderconfirm'] = 'Me të vërtetë doni ta fshini këtë kuti?'; +$messages['purgefolderconfirm'] = 'Me të vërtetë doni ti fshini të gjitha mesazhet në këtë kuti?'; +$messages['formincomplete'] = 'Formulari nuk ishte i gjithi i plotësuar'; +$messages['noemailwarning'] = 'Ju lutem jepni një adresë email të rregullt'; +$messages['nonamewarning'] = 'Ju lutem jepni një emër'; +$messages['nopagesizewarning'] = 'Ju lutem jepni nje madhësi për faqen'; +$messages['norecipientwarning'] = 'Ju lutem shënoni të paktën një marrës'; +$messages['nosubjectwarning'] = 'Fusha e temës është bosh. Dëshironi të shënoni një temë tani?'; +$messages['nobodywarning'] = 'Ta dërgoj mesazhin pa tekst?'; +$messages['notsentwarning'] = 'Mesazhi nuk u dërgua. Doni ta hidhni poshtë mesazhin?'; +$messages['noldapserver'] = 'Ju lutem jepni një server ldap për të kërkuar'; +$messages['nocontactsreturned'] = 'Nuk gjeta kontakte'; +$messages['nosearchname'] = 'Ju lutem jepni një adresë email ose një emër kontakti'; +$messages['searchsuccessful'] = 'U gjetën $nr mesazhe'; +$messages['searchnomatch'] = 'Kërkimi nuk gjeti gjë'; +$messages['searching'] = 'Po kërkoj...'; +$messages['checking'] = 'Po kontrolloj...'; +$messages['nospellerrors'] = 'Nuk u gjetën gabime'; +$messages['folderdeleted'] = 'Kutia u fshi me sukses'; +$messages['deletedsuccessfully'] = 'U fshi me sukses'; +$messages['converting'] = 'Po i heq formatimin mesazhit...'; +$messages['messageopenerror'] = 'Nuk marr dot mesazhe nga serveri'; +$messages['fileuploaderror'] = 'Ngarkimi i skedarit dështoi'; +$messages['filesizeerror'] = 'Skedari i ngarkuar e kalon madhësinë kufi prej $size'; +$messages['copysuccess'] = 'U kopjuan me sukses $nr adresa'; +$messages['copyerror'] = 'Nuk munda të kopjoj adresat'; +$messages['sourceisreadonly'] = 'Ky burim adrese është vetëm i lexueshëm'; +$messages['errorsavingcontact'] = 'Nuk e ruajta dot adresën e kontaktit'; +$messages['movingmessage'] = 'Po lëviz mesazhin...'; +$messages['receiptsent'] = 'U dërgua me sukses një njoftim leximi'; +$messages['errorsendingreceipt'] = 'Nuk mund të dërgohet njoftimi'; +$messages['nodeletelastidentity'] = 'Ju nuk mund ta fshini këtë identitet sepse nuk ju ka mbetur tjetër.'; +$messages['addsubfolderhint'] = 'Kjo kuti do të krijohet si një nënkuti e asaj që është e zgjedhur'; + +?> diff --git a/program/localization/sr_cyrillic/labels.inc b/program/localization/sr_cyrillic/labels.inc new file mode 100644 index 0000000..37ae6ec --- /dev/null +++ b/program/localization/sr_cyrillic/labels.inc @@ -0,0 +1,192 @@ + diff --git a/program/localization/sr_cyrillic/messages.inc b/program/localization/sr_cyrillic/messages.inc new file mode 100644 index 0000000..1e51f81 --- /dev/null +++ b/program/localization/sr_cyrillic/messages.inc @@ -0,0 +1,82 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'Неуспешно пријављивање'; +$messages['cookiesdisabled'] = 'Ваш интернет прегледач не подржава колачиће'; +$messages['sessionerror'] = 'Сесија није валидна или је истекла'; +$messages['imaperror'] = 'Неуспешна конекција на IMAP сервер'; +$messages['nomessagesfound'] = 'Немате порука у сандучету'; +$messages['loggedout'] = 'Успешно сте се одјавили.'; +$messages['mailboxempty'] = 'Сандуче је празно'; +$messages['loading'] = 'Учитавање...'; +$messages['loadingdata'] = 'Учитавање података...'; +$messages['checkingmail'] = 'Провера нових порука у току...'; +$messages['sendingmessage'] = 'Порука се шаље...'; +$messages['messagesent'] = 'Порука је успешно послата'; +$messages['savingmessage'] = 'Порука се снима...'; +$messages['messagesaved'] = 'Порука успешно сачувана у Снимљене'; +$messages['successfullysaved'] = 'Снимање успешно обављено'; +$messages['addedsuccessfully'] = 'Контакт успешно додат у именик'; +$messages['contactexists'] = 'Контакт са овом е-мејл адресом већ постоји у именику'; +$messages['blockedimages'] = 'Због заштите приватности, слике са удаљених сервера су блокиране'; +$messages['encryptedmessage'] = 'Ова порука је шифрована, па се не може приказати'; +$messages['nocontactsfound'] = 'Није пронађен ниједан контакт'; +$messages['contactnotfound'] = 'Жељени контакт није нађен'; +$messages['sendingfailed'] = 'Грешка при слању поруке'; +$messages['errorsaving'] = 'Грешка при снимању поруке'; +$messages['errormoving'] = 'Грешка при премештању поруке'; +$messages['errordeleting'] = 'Грешка при брисању поруке'; +$messages['deletecontactconfirm'] = 'Да ли стварно желите да обришете изабране контакте?'; +$messages['deletemessagesconfirm'] = 'Да ли стварно желите да обришете изабране поруке?'; +$messages['deletefolderconfirm'] = 'Да ли заиста желите да обришете изабрану фасциклу?'; +$messages['purgefolderconfirm'] = 'Да ли заиста желите да обришете све поруке у фасцикли?'; +$messages['formincomplete'] = 'Формулар није у целости попуњен'; +$messages['noemailwarning'] = 'Унесите валидну е-мејл адресу'; +$messages['nonamewarning'] = 'Унесите име'; +$messages['nopagesizewarning'] = 'Унесите величину странице'; +$messages['norecipientwarning'] = 'Унесите примаоца/примаоце (За)'; +$messages['nosubjectwarning'] = 'Поље \'Наслов\' је празно. Желите ли да унесете наслов?'; +$messages['nobodywarning'] = 'Да ли желите да пошаљете поруку без текста?'; +$messages['notsentwarning'] = 'Порука није послата. Да ли желите да одбаците ову поруку?'; +$messages['noldapserver'] = 'Унесите LDAP сервер за претрагу'; +$messages['nocontactsreturned'] = 'Није пронађен ниједан контакт'; +$messages['nosearchname'] = 'Унесите име или е-мејл адресу'; +$messages['searchsuccessful'] = 'Број пронађених порука: $nr'; +$messages['searchnomatch'] = 'Тражена фраза није пронађена ни у једној поруци'; +$messages['searching'] = 'Претрага у току...'; +$messages['checking'] = 'Провера у току...'; +$messages['nospellerrors'] = 'Није пронађена ниједна правописна грешка'; +$messages['folderdeleted'] = 'Фасцикла успешно обрисана'; +$messages['deletedsuccessfully'] = 'Брисање успешно'; +$messages['converting'] = 'Уклањање форматирања из поруке...'; +$messages['messageopenerror'] = 'Порука се не може учитати са сервера'; +$messages['fileuploaderror'] = 'Слање датотеке неуспешно'; +$messages['filesizeerror'] = 'Послата датотека не може да прекорачи величину од $size'; +$messages['copysuccess'] = 'Успешно копирано $nr адреса'; +$messages['copyerror'] = 'Немогуће је ископирати иједну адресу'; +$messages['sourceisreadonly'] = 'Овај извор адресе је само за читање'; +$messages['errorsavingcontact'] = 'Неуспело снимање адресе контакта'; +$messages['movingmessage'] = 'Премештам поруку...'; +$messages['receiptsent'] = 'Успешно послато обавештење о приспећу'; +$messages['errorsendingreceipt'] = 'Неуспело слање обавештења о приспећу'; +$messages['nodeletelastidentity'] = 'Не можете обрисати овај идентитет, он Вам је последњи.'; +$messages['addsubfolderhint'] = 'Ова фасцикла ће бити креирана као подфасцикла тренутне'; + +?> diff --git a/program/localization/sr_latin/labels.inc b/program/localization/sr_latin/labels.inc new file mode 100644 index 0000000..565ba9c --- /dev/null +++ b/program/localization/sr_latin/labels.inc @@ -0,0 +1,217 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$labels = array(); + +// login page +$labels['welcome'] = 'DobrodoÅ¡li na $product'; +$labels['username'] = 'Korisničko ime'; +$labels['password'] = 'Lozinka'; +$labels['server'] = 'Server'; +$labels['login'] = 'Prijava'; + +// taskbar +$labels['logout'] = 'Odjava'; +$labels['mail'] = 'Sanduče'; +$labels['settings'] = 'PodeÅ¡avanja'; +$labels['addressbook'] = 'Imenik'; + +// mailbox names +$labels['inbox'] = 'Inbox'; +$labels['drafts'] = 'Drafts'; +$labels['sent'] = 'Sent'; +$labels['trash'] = 'Trash'; +$labels['junk'] = 'Junk'; + +// message listing +$labels['subject'] = 'Naslov'; +$labels['from'] = 'Od'; +$labels['to'] = 'Za'; +$labels['cc'] = 'Cc'; +$labels['bcc'] = 'Bcc'; +$labels['replyto'] = 'Reply-To'; +$labels['date'] = 'Datum'; +$labels['size'] = 'Veličina'; +$labels['priority'] = 'Prioritet'; +$labels['organization'] = 'Organizacija'; + +// aliases +$labels['reply-to'] = $labels['replyto']; + +$labels['mailboxlist'] = 'Fascikle'; +$labels['messagesfromto'] = 'Poruke od $from do $to od ukupno $count'; +$labels['messagenrof'] = 'Poruka broj $nr od $count'; + +$labels['moveto'] = 'prebaci u...'; +$labels['download'] = 'preuzmi (download)'; + +$labels['filename'] = 'Ime datoteke'; +$labels['filesize'] = 'Veličina datoteke'; + +$labels['preferhtml'] = 'HTML format u prednosti'; +$labels['htmlmessage'] = 'HTML format poruke'; +$labels['prettydate'] = 'Formatiran datum'; + +$labels['addtoaddressbook'] = 'Dodaj u imenik'; + +// weekdays short +$labels['sun'] = 'Ned'; +$labels['mon'] = 'Pon'; +$labels['tue'] = 'Uto'; +$labels['wed'] = 'Sre'; +$labels['thu'] = 'Čet'; +$labels['fri'] = 'Pet'; +$labels['sat'] = 'Sub'; + +// weekdays long +$labels['sunday'] = 'Nedelja'; +$labels['monday'] = 'Ponedeljak'; +$labels['tuesday'] = 'Utorak'; +$labels['wednesday'] = 'Sreda'; +$labels['thursday'] = 'Četvrtak'; +$labels['friday'] = 'Petak'; +$labels['saturday'] = 'Subota'; + +$labels['today'] = 'danas'; + +// toolbar buttons +$labels['checkmail'] = 'Provera novih poruka'; +$labels['writenewmessage'] = 'Nova poruka'; +$labels['replytomessage'] = 'Odgovori na poruku'; +$labels['replytoallmessage'] = 'Odgovori poÅ¡iljaocu i svim primaocima'; +$labels['forwardmessage'] = 'Prosledi poruku'; +$labels['deletemessage'] = 'Prebaci poruku u korpu (Trash)'; +$labels['printmessage'] = 'OdÅ¡tampaj poruku'; +$labels['previousmessages'] = 'Prikaži prethodni skup poruka'; +$labels['nextmessages'] = 'Prikaži sledeći skup poruka'; +$labels['backtolist'] = 'Povratak na listu poruka'; +$labels['viewsource'] = 'Prikaži poruku u izvornom obliku'; + +$labels['select'] = 'Obeleži'; +$labels['all'] = 'Sve'; +$labels['none'] = 'Nijednu'; +$labels['unread'] = 'Nepročitane'; + +$labels['compact'] = 'Kompakcija'; +$labels['empty'] = 'Izprazni'; +$labels['purge'] = 'Očisti'; + +$labels['quota'] = 'Kvota'; +$labels['unknown'] = 'nepoznato'; +$labels['unlimited'] = 'beskonačna'; + +$labels['quicksearch'] = 'Brza pretraga'; +$labels['resetsearch'] = 'Prikaži sve poruke'; + +// message compose +$labels['compose'] = 'Nova poruka'; +$labels['savemessage'] = 'Sačuvaj u \'Drafts\''; +$labels['sendmessage'] = 'PoÅ¡alji poruku'; +$labels['addattachment'] = 'Priloži datoteku'; +$labels['charset'] = 'Karakter-set'; +$labels['returnreceipt'] = 'Potvrda o prispeću poruke'; + +$labels['checkspelling'] = 'Provera pravopisa'; +$labels['resumeediting'] = 'Povratak u režim pisanja'; +$labels['revertto'] = 'Revert to'; + +$labels['attachments'] = 'Prilozi (Attachments)'; +$labels['upload'] = 'Dodaj'; +$labels['close'] = 'Zatvori'; + +$labels['low'] = 'Nizak'; +$labels['lowest'] = 'Najniži'; +$labels['normal'] = 'Srednji'; +$labels['high'] = 'Visok'; +$labels['highest'] = 'NajviÅ¡i'; + +$labels['nosubject'] = '(bez naslova)'; +$labels['showimages'] = 'Prikaži slike'; + +// address boook +$labels['name'] = 'Puno ime'; +$labels['firstname'] = 'Ime'; +$labels['surname'] = 'Prezime'; +$labels['email'] = 'E-Mail'; + +$labels['addcontact'] = 'Dodaj novi kontakt'; +$labels['editcontact'] = 'Izmeni kontakt'; + +$labels['edit'] = 'Izmeni'; +$labels['cancel'] = 'Otkaži'; +$labels['save'] = 'Sačuvaj'; +$labels['delete'] = 'ObriÅ¡i'; + +$labels['newcontact'] = 'Dodaj novi kontakt'; +$labels['deletecontact'] = 'ObriÅ¡i odabrane kontakte'; +$labels['composeto'] = 'NapiÅ¡i mail...'; +$labels['contactsfromto'] = 'Kontakti od $from do $to od ukupno $count'; +$labels['print'] = 'Å tampaj'; +$labels['export'] = 'Izvezi'; + +$labels['previouspage'] = 'Prikaži predhodni skup'; +$labels['nextpage'] = 'Prikaži sledeći skup'; + +// LDAP search +$labels['ldapsearch'] = 'Pretraga LDAP imenika'; + +$labels['ldappublicsearchname'] = 'Ime kontakta'; +$labels['ldappublicsearchtype'] = 'Potpuna fraza?'; +$labels['ldappublicserverselect'] = 'Odaberi servere'; +$labels['ldappublicsearchfield'] = 'Pretraži na'; +$labels['ldappublicsearchform'] = 'Pretraži kontakte'; +$labels['ldappublicsearch'] = 'Pretraga'; + +// settings +$labels['settingsfor'] = 'PodeÅ¡avanja za'; + +$labels['preferences'] = 'PodeÅ¡avanja'; +$labels['userpreferences'] = 'OpÅ¡ta podeÅ¡avanja'; +$labels['editpreferences'] = 'Izmena opÅ¡tih podeÅ¡avanja'; + +$labels['identities'] = 'Identiteti'; +$labels['manageidentities'] = 'Podesi identitete za ovaj nalog'; +$labels['newidentity'] = 'Dodaj identitet'; + +$labels['newitem'] = 'New item'; +$labels['edititem'] = 'Edit item'; + +$labels['setdefault'] = 'Set default'; +$labels['language'] = 'Jezik'; +$labels['timezone'] = 'Vremenska zona'; +$labels['pagesize'] = 'Redova po stranici'; +$labels['signature'] = 'Potpis'; +$labels['dstactive'] = 'Letnje pomeranje vremena'; + +$labels['folder'] = 'Fascikla'; +$labels['folders'] = 'Fascikle'; +$labels['foldername'] = 'Ime fascikle'; +$labels['subscribed'] = 'Subscribed'; +$labels['create'] = 'Kreiraj'; +$labels['createfolder'] = 'Kreiraj novu fasciklu'; +$labels['rename'] = 'Preimenuj'; +$labels['renamefolder'] = 'Preimenuj Fasciklu'; +$labels['deletefolder'] = 'ObriÅ¡i Fasciklu'; +$labels['managefolders'] = 'Podesi Fasciklu'; + +$labels['sortby'] = 'Sortiraj po'; +$labels['sortasc'] = 'Sortiraj rastućim nizom'; +$labels['sortdesc'] = 'Sortiraj opadajućim nizom'; + +?> \ No newline at end of file diff --git a/program/localization/sr_latin/messages.inc b/program/localization/sr_latin/messages.inc new file mode 100644 index 0000000..dfdbcc3 --- /dev/null +++ b/program/localization/sr_latin/messages.inc @@ -0,0 +1,66 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'Prijava neuspeÅ¡na'; +$messages['cookiesdisabled'] = 'VaÅ¡ pretraživač ne podržava kolačiće (cookies)'; +$messages['sessionerror'] = 'Sesija je nije validna ili je istekla'; +$messages['imaperror'] = 'NeuspeÅ¡na konekcija na IMAP server'; +$messages['nomessagesfound'] = 'Nema poruka u sandučetu'; +$messages['loggedout'] = 'UspeÅ¡no ste se odjavili.'; +$messages['mailboxempty'] = 'SanduÅ¡e je prazno'; +$messages['loading'] = 'Učitavanje...'; +$messages['loadingdata'] = 'Učitavanje podataka...'; +$messages['checkingmail'] = 'Provera novih poruka u toku...'; +$messages['sendingmessage'] = 'Poruka se Å¡alje...'; +$messages['messagesent'] = 'Poruka je uspeÅ¡no poslana'; +$messages['savingmessage'] = 'Poruka se snima...'; +$messages['messagesaved'] = 'Poruka uspeÅ¡no sačuvana u \'Drafts\''; +$messages['successfullysaved'] = 'Snimanje uspeÅ¡no obavljeno'; +$messages['addedsuccessfully'] = 'Kontakt uspeÅ¡no dodat u imenik'; +$messages['contactexists'] = 'Kontakt sa ovom e-mail adresom već postoji u imeniku'; +$messages['blockedimages'] = 'Zbog zaÅ¡tite privatnosti, slike sa udaljenih servera su blokirane.'; +$messages['encryptedmessage'] = 'Ova poruka je Å¡ifrovana pa se ne može prikazati'; +$messages['nocontactsfound'] = 'Imenik je prazan'; +$messages['sendingfailed'] = 'GreÅ¡ka pri slanju poruke'; +$messages['errorsaving'] = 'GreÅ¡ka pri snimanju'; +$messages['errormoving'] = 'GreÅ¡ka pri premeÅ¡tanju poruke'; +$messages['errordeleting'] = 'GreÅ¡ka pri brisanju poruke'; +$messages['deletecontactconfirm'] = 'Da li želite da obriÅ¡ete izabrane kontakte?'; +$messages['deletefolderconfirm'] = 'Da li zaista želite da obriÅ¡ete ovu fasciklu?'; +$messages['purgefolderconfirm'] = 'Da li zaista želite da obriÅ¡ete sve poruke u fascilli?'; +$messages['formincomplete'] = 'Forma nije u celosti popunjena'; +$messages['noemailwarning'] = 'Unesite validnu e-mail adresu'; +$messages['nonamewarning'] = 'Unesite ime'; +$messages['nopagesizewarning'] = 'Unesite veličinu stranice'; +$messages['norecipientwarning'] = 'Unesite primaoca / primaoce (ZA)'; +$messages['nosubjectwarning'] = 'Polje \'Naslov\' je prazno. Želite li da unesete naslov?'; +$messages['nobodywarning'] = 'Da li želite da poÅ¡aljete poruku bez teksta?'; +$messages['notsentwarning'] = 'Poruka nije poslana. Da li želite da odbacite ovu poruku?'; +$messages['noldapserver'] = 'Unesite LDAP server za pretragu'; +$messages['nocontactsreturned'] = 'Nije pronađen ni jedan kontakt'; +$messages['nosearchname'] = 'Unesite ime ili e-mail adresu'; +$messages['searchsuccessful'] = 'Broj pronađenih poruka: $nr'; +$messages['searchnomatch'] = 'Tražena fraza nije pronađena ni u jednoj poruci'; +$messages['searching'] = 'Pretraga u toku...'; +$messages['checking'] = 'Provera u toku...'; +$messages['nospellerrors'] = 'Nije pronađena ni jedna pravopisna greÅ¡ka'; +$messages['folderdeleted'] = 'Fascikla uspeÅ¡no obrisana'; + +?> \ No newline at end of file diff --git a/program/localization/th_TH/labels.inc b/program/localization/th_TH/labels.inc new file mode 100644 index 0000000..56e30b4 --- /dev/null +++ b/program/localization/th_TH/labels.inc @@ -0,0 +1,174 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$labels = array(); +$labels['welcome'] = 'ยินดีต้อนรับสู่ $product'; +$labels['username'] = 'บัญชีผู้ใช้'; +$labels['password'] = 'รหัสผ่าน'; +$labels['server'] = 'เซิร์ฟเวอร์'; +$labels['login'] = 'เข้าสู่ระบบ'; +$labels['logout'] = 'ออกจากระบบ'; +$labels['mail'] = 'อีเมล์'; +$labels['settings'] = 'ปรับแต่งค่าส่วนตัว'; +$labels['addressbook'] = 'สมุดรายชื่อ'; +$labels['inbox'] = 'กล่องขาเข้า'; +$labels['drafts'] = 'กล่องจดหมายร่าง'; +$labels['sent'] = 'กล่องขาออก'; +$labels['trash'] = 'ถังขยะ'; +$labels['junk'] = 'กล่องจดหมายขยะ'; +$labels['spam'] = 'กล่องจดหมายขยะ'; +$labels['subject'] = 'หัวจดหมาย'; +$labels['from'] = 'ผู้ส่ง'; +$labels['to'] = 'ผู้รับ'; +$labels['cc'] = 'คัดลอก'; +$labels['bcc'] = 'แอบสำเนาถึง'; +$labels['replyto'] = 'ตอบกลับ'; +$labels['date'] = 'วันที่'; +$labels['size'] = 'ขนาด'; +$labels['priority'] = 'ระดับความสำคัญ'; +$labels['organization'] = 'องค์กร'; +$labels['reply-to'] = 'ตอบกลับ'; +$labels['mailboxlist'] = 'กล่องจดหมาย'; +$labels['messagesfromto'] = 'จดหมายจาก $from ถึง $to จำนวน $count ฉบับ'; +$labels['messagenrof'] = 'จดหมายฉบับที่ $nr จาก $count ฉบับ'; +$labels['moveto'] = 'ย้ายไป...'; +$labels['download'] = 'ดาวน์โหลด'; +$labels['filename'] = 'ชื่อไฟล์'; +$labels['filesize'] = 'ขนาดไฟล์'; +$labels['preferhtml'] = 'อ่านแบบ HTML'; +$labels['htmlmessage'] = 'จดหมาย HTML'; +$labels['prettydate'] = 'แสดงวันที่แบบย่อ'; +$labels['addtoaddressbook'] = 'บันทึกในสมุดรายชื่อ'; +$labels['sun'] = 'อ'; +$labels['mon'] = 'จ'; +$labels['tue'] = 'อ'; +$labels['wed'] = 'พ'; +$labels['thu'] = 'พฤ'; +$labels['fri'] = 'ศ'; +$labels['sat'] = 'ส'; +$labels['sunday'] = 'วันอาทิตย์'; +$labels['monday'] = 'วันจันทร์'; +$labels['tuesday'] = 'วันอังคาร'; +$labels['wednesday'] = 'วันพุธ'; +$labels['thursday'] = 'วันพฤหัสบดี'; +$labels['friday'] = 'วันศุกร์'; +$labels['saturday'] = 'วันเสาร์'; +$labels['today'] = 'วันนี้'; +$labels['checkmail'] = 'ตรวจสอบจดหมายใหม่'; +$labels['writenewmessage'] = 'สร้างจดหมายใหม่'; +$labels['replytomessage'] = 'ตอบกลับจดหมาย'; +$labels['replytoallmessage'] = 'ตอบกลับถึงทุกคนในจดหมาย'; +$labels['forwardmessage'] = 'ส่งต่อจดหมาย'; +$labels['deletemessage'] = 'ลบจดหมาย'; +$labels['printmessage'] = 'พิมพ์จดหมาย'; +$labels['previousmessage'] = 'แสดงจดหมายฉบับที่แล้ว'; +$labels['previousmessages'] = 'จดหมายฉบับก่อนหน้า'; +$labels['firstmessage'] = 'แสดงจดหมายฉบับแรก'; +$labels['nextmessage'] = 'แสดงจดหมายฉบับต่อไป'; +$labels['nextmessages'] = 'จดหมายฉบับถัดไป'; +$labels['lastmessage'] = 'แสดงจดหมายฉบับล่าสุด'; +$labels['backtolist'] = 'กลับไปยังรายการจดหมาย'; +$labels['viewsource'] = 'แสดง source'; +$labels['select'] = 'เลือก'; +$labels['all'] = 'ทั้งหมด'; +$labels['none'] = 'ไม่เลือก'; +$labels['unread'] = 'จดหมายที่ไม่ได้อ่าน'; +$labels['compact'] = 'แบบย่อ'; +$labels['empty'] = 'ว่างเปล่า'; +$labels['purge'] = 'ลบทั้งหมด'; +$labels['quota'] = 'พื้นที่ใช้งาน'; +$labels['unknown'] = 'ไม่ทราบ'; +$labels['unlimited'] = 'ไม่จำกัด'; +$labels['quicksearch'] = 'ค้นหาแบบด่วน'; +$labels['resetsearch'] = 'ล้างการค้นหา'; +$labels['compose'] = 'เขียนจดหมายใหม่'; +$labels['savemessage'] = 'บันทึกฉบับร่าง'; +$labels['sendmessage'] = 'ส่งจดหมาย'; +$labels['addattachment'] = 'แนบไฟล์'; +$labels['charset'] = 'Charset'; +$labels['returnreceipt'] = 'ตอบกลับผู้รับ'; +$labels['checkspelling'] = 'ตรวจสอบคำผิด'; +$labels['resumeediting'] = 'แก้ไขต่อ'; +$labels['revertto'] = 'ย้นกลับไปยัง'; +$labels['attachments'] = 'ไฟล์แนบ'; +$labels['upload'] = 'อัพโหลด'; +$labels['close'] = 'ปิด'; +$labels['low'] = 'ต่ำ'; +$labels['lowest'] = 'ต่ำสุด'; +$labels['normal'] = 'ปกติ'; +$labels['high'] = 'สูง'; +$labels['highest'] = 'สูงสุด'; +$labels['nosubject'] = '(ไม่มีหัวข้อ)'; +$labels['showimages'] = 'แสดงรูป'; +$labels['htmltoggle'] = 'HTML'; +$labels['plaintoggle'] = 'Plain text'; +$labels['name'] = 'ชื่อแสดง'; +$labels['firstname'] = 'ชื่อ'; +$labels['surname'] = 'สกุล'; +$labels['email'] = 'อีเมล์'; +$labels['addcontact'] = 'เพิ่มรายชื่อ'; +$labels['editcontact'] = 'แก้ไขรายชื่อ'; +$labels['edit'] = 'แก้ไข'; +$labels['cancel'] = 'ยกเลิก'; +$labels['save'] = 'บันทึก'; +$labels['delete'] = 'ลบ'; +$labels['newcontact'] = 'สร้างรายชื่อใหม่'; +$labels['deletecontact'] = 'ลบรายชื่อที่เลือก'; +$labels['composeto'] = 'เขียนจดหมายถึง'; +$labels['contactsfromto'] = 'รายชื่อ $from ถึง $to จำนวน $count'; +$labels['print'] = 'พิมพ์'; +$labels['export'] = 'ส่งออก'; +$labels['previouspage'] = 'หน้าที่แล้ว'; +$labels['nextpage'] = 'หน้าถัดไป'; +$labels['settingsfor'] = 'ตั้งค่าสำหรับ'; +$labels['preferences'] = 'ปรับแต่ง'; +$labels['userpreferences'] = 'ข้อมูลส่วนตัว'; +$labels['editpreferences'] = 'แก้ไขข้อมูลส่วนตัว'; +$labels['identities'] = 'ชื่อแสดงตัว'; +$labels['manageidentities'] = 'จัดการชื่อแสดงตัวสำหรับรายชื่อนี้'; +$labels['newidentity'] = 'ชื่อแสดงตัวใหม่'; +$labels['newitem'] = 'New item'; +$labels['edititem'] = 'Edit item'; +$labels['setdefault'] = 'ตั้งเป็นค่าใช้งาน'; +$labels['language'] = 'ภาษา'; +$labels['timezone'] = 'เขตเวลา'; +$labels['pagesize'] = 'จำนวนจดหมายต่อหน้า'; +$labels['signature'] = 'ลายมือชื่อ'; +$labels['dstactive'] = 'Daylight savings'; +$labels['htmleditor'] = 'เขียนจดหมายแบบ HTML'; +$labels['htmlsignature'] = 'ลายมือชื่อแบบ HTML'; +$labels['previewpane'] = 'แสดงหน้าต่างตัวอย่างแสดงผล'; +$labels['autosavedraft'] = 'บันทึกเป็นจดหมายร่างอัตโนมัติ'; +$labels['everynminutes'] = 'ทุกๆ $n นาที'; +$labels['never'] = 'ไม่ใช้'; +$labels['folder'] = 'กล่องจดหมาย'; +$labels['folders'] = 'กล่องจดหมาย'; +$labels['foldername'] = 'ชื่อกล่องจดหมาย'; +$labels['subscribed'] = 'ลงชื่อ'; +$labels['create'] = 'สร้าง'; +$labels['createfolder'] = 'สร้างกล่องจดหมาย'; +$labels['rename'] = 'เปลื่ยนชื่อ'; +$labels['renamefolder'] = 'เปลี่ยนชื่อกล่องจดหมาย'; +$labels['deletefolder'] = 'ลบกล่องจดหมาย'; +$labels['managefolders'] = 'จัดการกล่องจดหมาย'; +$labels['sortby'] = 'เรียงตาม'; +$labels['sortasc'] = 'เรียงจากหน้าไปหลัง'; +$labels['sortdesc'] = 'เรียงจากหลังไปหน้า'; + +?> \ No newline at end of file diff --git a/program/localization/th_TH/messages.inc b/program/localization/th_TH/messages.inc new file mode 100644 index 0000000..07886ce --- /dev/null +++ b/program/localization/th_TH/messages.inc @@ -0,0 +1,79 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id: messages.inc 543 2007-04-28 18:07:12Z thomasb $ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'ไม่สามารถเข้าสู่ระบบได้'; +$messages['cookiesdisabled'] = 'Browser ของคุณไม่ได้เปิดการใช้งาน Cookie ไว้'; +$messages['sessionerror'] = 'Your session is invalid or expired'; +$messages['imaperror'] = 'ไม่สามารถติดต่อ IMAP Server ได้'; +$messages['nomessagesfound'] = 'ไม่มีจดหมายในกล่องจดหมายนี้'; +$messages['loggedout'] = 'ทำการออกจากระบบเรียบร้อย'; +$messages['mailboxempty'] = 'กล่องจดหมายนี้ว่างเปล่า'; +$messages['loading'] = 'Loading...'; +$messages['loadingdata'] = 'กำลังโหลดข้อมูล...'; +$messages['checkingmail'] = 'กำลังเช็คจดหมายใหม่...'; +$messages['sendingmessage'] = 'กำลังส่งจดหมาย...'; +$messages['messagesent'] = 'จดหมายถูกส่งเรียบร้อยแล้ว'; +$messages['savingmessage'] = 'กำลังบันทึกจดหมาย...'; +$messages['messagesaved'] = 'จดหมายถูกบันทึกเป็นจดหมายร่าง'; +$messages['successfullysaved'] = 'บันทึกเรียบร้อยแล้ว'; +$messages['addedsuccessfully'] = 'รายชื่อถูกบันทึกเรียบร้อยแล้ว'; +$messages['contactexists'] = 'อีเมล์นี้มีอยู่แล้ว'; +$messages['blockedimages'] = 'เพื่อปกป้องความส่วนตัว รูปจากภายนอกในจดหมายนี้จะถูกปิดบังไว้'; +$messages['encryptedmessage'] = 'จดหมายถูกเข้ารหัสไม่สามารถแสดงผลได้'; +$messages['nocontactsfound'] = 'ไม่พบรายชื่อที่ค้นหา'; +$messages['contactnotfound'] = 'ไม่พบรายชื่อที่ค้นหา'; + +$messages['sendingfailed'] = 'การส่งจดหมายล้มเหลว'; +$messages['errorsaving'] = 'เกิดข้อผิดพลาดระหว่างการบันทึก'; +$messages['errormoving'] = 'ไม่สามารถย้ายจดหมายได้'; +$messages['errordeleting'] = 'ไม่สามารถลบจดหมายได้'; +$messages['deletecontactconfirm'] = 'คุณมั่นใจที่ต้องการลบรายชื่อที่เลือกใช่หรือไม่?'; +$messages['deletemessagesconfirm'] = 'คุณมั่นใจที่ต้องการลบจดหมายที่เลือกใช่หรือไม่?'; +$messages['deletefolderconfirm'] = 'คุณมั่นใจที่ต้องการลบแฟ้มนี้หรือไม่?'; +$messages['purgefolderconfirm'] = 'คุณมั่นใจที่ต้องการลบจดหมายทั้งหมดในแฟ้มนี้ใช่หรือไม่?'; +$messages['formincomplete'] = 'ฟอร์มยังไม่ครบถ้วนสมบูรณ์'; +$messages['noemailwarning'] = 'โปรดใส่อีเมล์ให้ถูกต้อง'; +$messages['nonamewarning'] = 'โปรดใส่ชื่อ'; +$messages['nopagesizewarning'] = 'โปรดใส่จำนวนหน้า'; +$messages['norecipientwarning'] = 'โปรดใส่ผู้รับอย่างน้อย 1 ชื่อ'; +$messages['nosubjectwarning'] = 'หัวจดหมายว่างเปล่า คุณต้องการใส่หัวจดหมายเดี๋ยวนี้หรือไม่?'; +$messages['nobodywarning'] = 'คุณต้องการส่งจดหมายโดยไม่มีข้อความใช่หรือไม่?'; +$messages['notsentwarning'] = 'จดหมายยังไม่ถูกส่ง คุณต้องการยกเลิกหรือไม่?'; +$messages['noldapserver'] = 'โปรดเลือก LDAP Server เพื่อค้นหา'; +$messages['nocontactsreturned'] = 'ไม่พบรายชื่อ'; +$messages['nosearchname'] = 'โปรดใสชื่อหรืออีเมล์'; +$messages['searchsuccessful'] = 'พบจดหมายจำนวน $nr ฉบับ'; +$messages['searchnomatch'] = 'การค้นหาไม่พบ'; +$messages['searching'] = 'กำลังค้นหา...'; +$messages['checking'] = 'กำลังตรวจสอบ...'; +$messages['nospellerrors'] = 'ไม่พบคำที่สะกดผิด'; +$messages['folderdeleted'] = 'ลบแฟ้มเสร็จสมบูรณ์'; +$messages['deletedsuccessfully'] = "ลบเสร็จสมบูรณ์"; +$messages['converting'] = 'นำเอาหารจัดรูปแบบในจดหมายออก...'; +$messages['messageopenerror'] = 'ไม่สามารถอ่านจดหมายจาก Server ได้'; +$messages['fileuploaderror'] = 'การอัพโหลดล้มเหลว'; +$messages['filesizeerror'] = 'ไฟล์มีขนาดใหญ่เกิน $size'; + +$messages['copysuccess'] = 'คัดลอกจดหมายจำนวน $nr ฉบับเรียบร้อย'; +$messages['copyerror'] = 'ไม่สามารถคัดลอกได้'; +$messages['sourceisreadonly'] = 'จดหมายนี้เป็นแบบอ่านอย่างเดียว'; +$messages['errorsavingcontact'] = 'ไม่สามารถบันทึกรายชื่อได้'; + +?> \ No newline at end of file diff --git a/program/localization/tr/labels.inc b/program/localization/tr/labels.inc index b1fe655..401c520 100644 --- a/program/localization/tr/labels.inc +++ b/program/localization/tr/labels.inc @@ -6,14 +6,14 @@ | language/tr/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Hasan Cansız | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 837 2007-09-27 13:31:57Z thomasb $ + @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $ */ diff --git a/program/localization/tr/messages.inc b/program/localization/tr/messages.inc index 151bff6..68554f8 100644 --- a/program/localization/tr/messages.inc +++ b/program/localization/tr/messages.inc @@ -6,14 +6,14 @@ | language/tr/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Hasan Cansız | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 837 2007-09-27 13:31:57Z thomasb $ + @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $ */ diff --git a/program/localization/uk/labels.inc b/program/localization/uk/labels.inc index 2c5f192..8269934 100644 --- a/program/localization/uk/labels.inc +++ b/program/localization/uk/labels.inc @@ -6,38 +6,32 @@ | language/uk/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2007, RoundQube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Natali Stasyuk | +-----------------------------------------------------------------------+ + @version $Id$ + */ $labels = array(); - -// login page $labels['welcome'] = 'Ласкаво просимо в $product!'; $labels['username'] = 'Ім`я користувача'; $labels['password'] = 'Пароль'; $labels['server'] = 'Сервер'; $labels['login'] = 'Увійти'; - -// taskbar $labels['logout'] = 'Вийти'; $labels['mail'] = 'Пошта'; $labels['settings'] = 'Налаштування'; $labels['addressbook'] = 'Контакти'; - -// mailbox names $labels['inbox'] = 'Вхідні'; $labels['drafts'] = 'Чернетки'; $labels['sent'] = 'Відправлені'; $labels['trash'] = 'Смітник'; -$labels['spam'] = 'Спам'; - -// message listing +$labels['junk'] = 'Спам'; $labels['subject'] = 'Тема'; $labels['from'] = 'Від'; $labels['to'] = 'Кому'; @@ -48,8 +42,6 @@ $labels['date'] = 'Дата'; $labels['size'] = 'Розмір'; $labels['priority'] = 'Пріоритет'; $labels['organization'] = 'Організація'; - -// aliases $labels['reply-to'] = 'Зворотня адреса'; $labels['mailboxlist'] = 'Теки'; $labels['messagesfromto'] = 'Повідомлення з $from по $to із $count'; @@ -62,8 +54,6 @@ $labels['preferhtml'] = 'Переважно HTML'; $labels['htmlmessage'] = 'Повідомлення HTML'; $labels['prettydate'] = 'Красиві дати'; $labels['addtoaddressbook'] = 'Додати до контактів'; - -// weekdays short $labels['sun'] = 'Нд'; $labels['mon'] = 'Пн'; $labels['tue'] = 'Вт'; @@ -71,8 +61,6 @@ $labels['wed'] = 'Ср'; $labels['thu'] = 'Чт'; $labels['fri'] = 'Пт'; $labels['sat'] = 'Сб'; - -// weekdays long $labels['sunday'] = 'Неділя'; $labels['monday'] = 'Понеділок'; $labels['tuesday'] = 'Вівторок'; @@ -80,16 +68,14 @@ $labels['wednesday'] = 'Середа'; $labels['thursday'] = 'Четвер'; $labels['friday'] = 'П`ятниця'; $labels['saturday'] = 'Субота'; - $labels['today'] = 'Сьогодні'; - -// toolbar buttons $labels['checkmail'] = 'Перевірити пошту'; $labels['writenewmessage'] = 'Нове повідомлення'; $labels['replytomessage'] = 'Відповісти'; $labels['replytoallmessage'] = 'Відповісти усім'; $labels['forwardmessage'] = 'Переслати'; $labels['deletemessage'] = 'У смітник'; +$labels['movemessagetotrash'] = 'Перемістити повідомлення у смітник'; $labels['printmessage'] = 'Друкувати'; $labels['previousmessage'] = 'Показати попереднє повідомлення'; $labels['previousmessages'] = 'Попередня сторінка повідомлень'; @@ -113,11 +99,9 @@ $labels['unknown'] = 'невідомо'; $labels['unlimited'] = 'без обмеження'; $labels['quicksearch'] = 'Швидкий пошук'; $labels['resetsearch'] = 'Очистити пошук'; - -// message compose $labels['compose'] = 'Написати повідомлення'; -$labels['sendmessage'] = 'Відіслати зараз'; $labels['savemessage'] = 'Зберегти чернетку'; +$labels['sendmessage'] = 'Відіслати зараз'; $labels['addattachment'] = 'Додати вкладення'; $labels['charset'] = 'Набір символів'; $labels['editortype'] = 'Редактор'; @@ -137,8 +121,9 @@ $labels['nosubject'] = '(без теми)'; $labels['showimages'] = 'Показати зображення'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = 'Звичайний текст'; - -// address boook +$labels['addcc'] = 'Додати Cc'; +$labels['addbcc'] = 'Додати Bcc'; +$labels['addreplyto'] = 'Додати Reply-To'; $labels['name'] = 'Відображуване ім`я'; $labels['firstname'] = 'Ім`я'; $labels['surname'] = 'Прізвище'; @@ -161,8 +146,6 @@ $labels['nextpage'] = 'Показати наступний'; $labels['lastpage'] = 'Показати останній'; $labels['groups'] = 'Групи'; $labels['personaladrbook'] = 'Персональні адреси'; - -// settings $labels['settingsfor'] = 'Налаштування для'; $labels['preferences'] = 'Уподобання'; $labels['userpreferences'] = 'Уподобання користувача'; diff --git a/program/localization/uk/messages.inc b/program/localization/uk/messages.inc index c1783f4..6abef04 100644 --- a/program/localization/uk/messages.inc +++ b/program/localization/uk/messages.inc @@ -6,13 +6,15 @@ | language/uk/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2007, RoundQube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Natali Stasyuk | +-----------------------------------------------------------------------+ + @version $Id$ + */ $messages = array(); @@ -71,5 +73,6 @@ $messages['copysuccess'] = 'Скопійовано $nr адрес'; $messages['copyerror'] = 'Неможливо скопіювати адресу'; $messages['sourceisreadonly'] = 'Дане джерело адрес лише для читання'; $messages['errorsavingcontact'] = 'Неможливо зберегти адресу контакта'; +$messages['movingmessage'] = 'Переміщую повідомлення...'; ?> \ No newline at end of file diff --git a/program/localization/vn/labels.inc b/program/localization/vn/labels.inc new file mode 100644 index 0000000..e4335ec --- /dev/null +++ b/program/localization/vn/labels.inc @@ -0,0 +1,217 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$labels = array(); + +// login page +$labels['welcome'] = 'Xin mời sá»­ dụng $product'; +$labels['username'] = 'Tên người dùng'; +$labels['password'] = 'Mật khẩu'; +$labels['server'] = 'Máy chá»§?'; +$labels['login'] = 'Đăng nhập'; + +// taskbar +$labels['logout'] = 'Đăng xuất'; +$labels['mail'] = 'E-Mail'; +$labels['settings'] = 'Thiết lập'; +$labels['addressbook'] = 'Sổ địa chỉ'; + +// mailbox names +$labels['inbox'] = 'Inbox'; +$labels['drafts'] = 'Drafts'; +$labels['sent'] = 'Sent'; +$labels['trash'] = 'Trash'; +$labels['junk'] = 'Junk'; + +// message listing +$labels['subject'] = 'Tiêu đề'; +$labels['from'] = 'Người gá»­i'; +$labels['to'] = 'Người nhận'; +$labels['cc'] = 'Đồng nhận'; +$labels['bcc'] = 'Đồng nhận (2)'; +$labels['replyto'] = 'Trả lời vào'; +$labels['date'] = 'Ngày'; +$labels['size'] = 'D.Lượng'; +$labels['priority'] = 'Ưu tiên'; +$labels['organization'] = 'CÆ¡ quan'; + +// aliases +$labels['reply-to'] = $labels['replyto']; + +$labels['mailboxlist'] = 'Thư mục'; +$labels['messagesfromto'] = 'Thư $from - $to / $count'; +$labels['messagenrof'] = 'Thư $nr / $count'; + +$labels['moveto'] = 'chuyển đến...'; +$labels['download'] = 'tải xuống'; + +$labels['filename'] = 'Tên file'; +$labels['filesize'] = 'Dung lượng'; + +$labels['preferhtml'] = 'Dùng HTML'; +$labels['htmlmessage'] = 'Thư kiểu HTML'; +$labels['prettydate'] = 'Hiển thị ngày đầy đủ'; + +$labels['addtoaddressbook'] = 'Thêm và sổ địa chỉ'; + +// weekdays short +$labels['sun'] = 'CN'; +$labels['mon'] = 'T2'; +$labels['tue'] = 'T3'; +$labels['wed'] = 'T4'; +$labels['thu'] = 'T5'; +$labels['fri'] = 'T6'; +$labels['sat'] = 'T7'; + +// weekdays long +$labels['sunday'] = 'Chá»§ nhật'; +$labels['monday'] = 'Thứ hai'; +$labels['tuesday'] = 'Thứ ba'; +$labels['wednesday'] = 'Thứ tư'; +$labels['thursday'] = 'Thứ năm'; +$labels['friday'] = 'Thứ sáu'; +$labels['saturday'] = 'Thứ bẩy'; + +$labels['today'] = 'Hôm nay'; + +// toolbar buttons +$labels['checkmail'] = 'Kiểm tra thư mới'; +$labels['writenewmessage'] = 'Soạn thư mới'; +$labels['replytomessage'] = 'Trả lời thư'; +$labels['replytoallmessage'] = 'Trả lời tất cả'; +$labels['forwardmessage'] = 'Chuyển thư'; +$labels['deletemessage'] = 'Xóa thư'; +$labels['printmessage'] = 'In thư'; +$labels['previousmessages'] = 'Hiển thị các thư trước'; +$labels['nextmessages'] = 'Hiển thị các thư sau'; +$labels['backtolist'] = 'Trở về danh sách thư'; +$labels['viewsource'] = 'Hiển thị mã nguồn'; + +$labels['select'] = 'Chọn'; +$labels['all'] = 'Toàn bộ'; +$labels['none'] = 'Bỏ chọn'; +$labels['unread'] = 'Chưa đọc'; + +$labels['compact'] = 'Rút gọn'; +$labels['empty'] = 'Xóa rỗng'; +$labels['purge'] = 'Tối giản'; + +$labels['quota'] = 'Hạn mức'; +$labels['unknown'] = 'không rõ'; +$labels['unlimited'] = 'không hạn chế'; + +$labels['quicksearch'] = 'Tìm nhanh'; +$labels['resetsearch'] = 'Xóa bỏ tìm kiếm'; + +// message compose +$labels['compose'] = 'Soạn thư'; +$labels['savemessage'] = 'Lưu thư đang soạn'; +$labels['sendmessage'] = 'Gá»­i thư'; +$labels['addattachment'] = 'Gá»­i kèm'; +$labels['charset'] = 'Bộ ký tá»±'; +$labels['returnreceipt'] = 'Báo nhận'; + +$labels['checkspelling'] = 'Kiểm tra chính tả'; +$labels['resumeediting'] = 'Soạn thảo'; +$labels['revertto'] = 'Chuyển về'; + +$labels['attachments'] = 'Gá»­i kèm'; +$labels['upload'] = 'Tải lên'; +$labels['close'] = 'Đóng'; + +$labels['low'] = 'Thấp'; +$labels['lowest'] = 'Thấp nhất'; +$labels['normal'] = 'Bình thường'; +$labels['high'] = 'Khẩn'; +$labels['highest'] = 'Thượng khẩn'; + +$labels['nosubject'] = '(no subject)'; +$labels['showimages'] = 'Hiển thị ảnh'; + +// address boook +$labels['name'] = 'Tên hiển thị'; +$labels['firstname'] = 'Tên'; +$labels['surname'] = 'Họ'; +$labels['email'] = 'E-Mail'; + +$labels['addcontact'] = 'Thêm mới địa chỉ'; +$labels['editcontact'] = 'Sá»­a địa chỉ cÅ©'; + +$labels['edit'] = 'Sá»­a đổi'; +$labels['cancel'] = 'Ngưng'; +$labels['save'] = 'Lưu'; +$labels['delete'] = 'Xóa'; + +$labels['newcontact'] = 'Thêm mới địa chỉ liên hệ'; +$labels['deletecontact'] = 'Xóa địa chỉ được chọn'; +$labels['composeto'] = 'Soạn thư cho'; +$labels['contactsfromto'] = 'Địa chỉ từ $from - $to / $count'; +$labels['print'] = 'In thư'; +$labels['export'] = 'Export'; + +$labels['previouspage'] = 'Trang trước'; +$labels['nextpage'] = 'Trang tiếp'; + +// LDAP search +$labels['ldapsearch'] = 'LDAP directory search'; + +$labels['ldappublicsearchname'] = 'Tên địa chỉ'; +$labels['ldappublicsearchtype'] = 'Khớp toàn bộ?'; +$labels['ldappublicserverselect'] = 'Chọn máy chá»§'; +$labels['ldappublicsearchfield'] = 'Tìm trên'; +$labels['ldappublicsearchform'] = 'Tìm địa chỉ liên hệ'; +$labels['ldappublicsearch'] = 'Tìm kiếm'; + +// settings +$labels['settingsfor'] = 'Thiết lập cho'; + +$labels['preferences'] = 'Tham số'; +$labels['userpreferences'] = 'Tham số người dùng'; +$labels['editpreferences'] = 'Sá»­a đổi'; + +$labels['identities'] = 'Người dùng'; +$labels['manageidentities'] = 'Quản trị người dùng'; +$labels['newidentity'] = 'Người dùng mới'; + +$labels['newitem'] = 'Thêm mới'; +$labels['edititem'] = 'Sá»­a đổi'; + +$labels['setdefault'] = 'Thiết lập mặc định'; +$labels['language'] = 'Ngôn ngữ'; +$labels['timezone'] = 'Múi giờ'; +$labels['pagesize'] = 'Số dòng trên trang'; +$labels['signature'] = 'Chữ ký'; +$labels['dstactive'] = 'Giờ mùa hè'; + +$labels['folder'] = 'Thư mục'; +$labels['folders'] = 'Thư mục'; +$labels['foldername'] = 'Tên thư mục'; +$labels['subscribed'] = 'Cho sá»­ dụng'; +$labels['create'] = 'Tạo'; +$labels['createfolder'] = 'Tạo thư mục mới'; +$labels['rename'] = 'Đổi tên'; +$labels['renamefolder'] = 'Đổi tên thư mục'; +$labels['deletefolder'] = 'Xóa thư mục'; +$labels['managefolders'] = 'Quản trị thư mục'; + +$labels['sortby'] = 'Sắp xếp'; +$labels['sortasc'] = 'Xếp tăng dần'; +$labels['sortdesc'] = 'Xếp giảm dần'; + +?> \ No newline at end of file diff --git a/program/localization/vn/messages.inc b/program/localization/vn/messages.inc new file mode 100644 index 0000000..9cf2fdb --- /dev/null +++ b/program/localization/vn/messages.inc @@ -0,0 +1,66 @@ + | + +-----------------------------------------------------------------------+ + + @version $Id$ + +*/ + +$messages = array(); +$messages['loginfailed'] = 'Không đăng nhập được'; +$messages['cookiesdisabled'] = 'Trình duyệt không hỗ trợ cookies'; +$messages['sessionerror'] = 'Phiên làm việc không hợp lệ hoặc đã hết hạn'; +$messages['imaperror'] = 'Không kết nối được với máy chá»§ IMAP'; +$messages['nomessagesfound'] = 'Không có thư trong hòm thư này'; +$messages['loggedout'] = 'Phiên làm việc đã kết thúc. Hẹn gặp lại!'; +$messages['mailboxempty'] = 'Hộp thư rỗng'; +$messages['loading'] = 'Vui lòng chờ trong giây lát...'; +$messages['loadingdata'] = 'Đang nạp dữ liệu...'; +$messages['checkingmail'] = 'Kiểm tra thư mới...'; +$messages['sendingmessage'] = 'Đang gá»­i thư...'; +$messages['messagesent'] = 'Thư đã được gá»­i'; +$messages['savingmessage'] = 'Đang lưu thư...'; +$messages['messagesaved'] = 'Thư đã được gá»­i vào ngăn Drafts'; +$messages['successfullysaved'] = 'Đã lưu thành công'; +$messages['addedsuccessfully'] = 'Địa chỉ liên hệ đã được lưu'; +$messages['contactexists'] = 'Địa chỉ liên hệ với e-mail này đã được lưu trước đây'; +$messages['blockedimages'] = 'Để bảo vệ tính riêng tư, chức năng hiện ảnh từ xa bị cấm trong thư này.'; +$messages['encryptedmessage'] = 'Thư này được mã hóa, không thể xem. Rất tiếc!'; +$messages['nocontactsfound'] = 'Không tìm thấy địa chỉ liên hệ'; +$messages['sendingfailed'] = 'Không gá»­i được thư'; +$messages['errorsaving'] = 'Lỗi khi lưu'; +$messages['errormoving'] = 'Không thể chuyển được thư'; +$messages['errordeleting'] = 'Không thể xóa được thư'; +$messages['deletecontactconfirm'] = 'Xóa bỏ các địa chỉ được chọn?'; +$messages['deletefolderconfirm'] = 'Xóa bỏ thư mục này?'; +$messages['purgefolderconfirm'] = 'Xóa toàn bộ thư trong thư mục nào?'; +$messages['formincomplete'] = 'Mẫu chưa được điền xong'; +$messages['noemailwarning'] = 'Nhập địa chỉ email'; +$messages['nonamewarning'] = 'Nhập tên'; +$messages['nopagesizewarning'] = 'Nhập kích cỡ cá»§a trang'; +$messages['norecipientwarning'] = 'Thư cần có it nhất 1 người nhận'; +$messages['nosubjectwarning'] = 'Mục "Tiêu đề" chưa có. Điền tiêu đề ?'; +$messages['nobodywarning'] = 'Thư không nội dung, vẫn tiếp tục gá»­i?'; +$messages['notsentwarning'] = 'Thư chưa được gá»­i. Bỏ qua thư đang soạn?'; +$messages['noldapserver'] = 'Chọn máy chá»§ ldap server để tìm'; +$messages['nocontactsreturned'] = 'Không tìm thấy địa chỉ'; +$messages['nosearchname'] = 'Nhập địa chỉ hoặc email'; +$messages['searchsuccessful'] = '$nr messages found'; +$messages['searchnomatch'] = 'Không tìm thấy'; +$messages['searching'] = 'Tìm kiếm...'; +$messages['checking'] = 'Kiểm tra...'; +$messages['nospellerrors'] = 'Không có lỗi chính tả'; +$messages['folderdeleted'] = 'Thư mục đã được xóa'; + +?> \ No newline at end of file diff --git a/program/localization/zh_CN/labels.inc b/program/localization/zh_CN/labels.inc index aa88a11..a462589 100644 --- a/program/localization/zh_CN/labels.inc +++ b/program/localization/zh_CN/labels.inc @@ -6,15 +6,14 @@ | localization/zh_CN/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: kourge | - | Xue zhong sheng | + | Author: Xue zhong sheng | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 672 2007-08-10 14:46:53Z thomasb $ + @version $Id: labels.inc 1143 2008-02-26 20:50:10Z yllar $ */ @@ -178,4 +177,4 @@ $labels['sortby'] = '排序'; $labels['sortasc'] = '递增排序'; $labels['sortdesc'] = '递减排序'; -?> \ No newline at end of file +?> diff --git a/program/localization/zh_CN/messages.inc b/program/localization/zh_CN/messages.inc index 65c46e9..94c524a 100644 --- a/program/localization/zh_CN/messages.inc +++ b/program/localization/zh_CN/messages.inc @@ -6,15 +6,14 @@ | localization/zh_CN/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ - | Author: kourge | - | Xue zhong sheng | + | Author: Xue zhong sheng | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 672 2007-08-10 14:46:53Z thomasb $ + @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $ */ @@ -75,4 +74,4 @@ $messages['copyerror'] = '无法复制地址'; $messages['sourceisreadonly'] = '源地址为只读'; $messages['errorsavingcontact'] = '无法保存联系人的地址'; -?> \ No newline at end of file +?> diff --git a/program/localization/zh_TW/labels.inc b/program/localization/zh_TW/labels.inc index 9331789..3d256b9 100644 --- a/program/localization/zh_TW/labels.inc +++ b/program/localization/zh_TW/labels.inc @@ -6,7 +6,7 @@ | localization/tw/labels.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Ting-Hung Chiu | +-----------------------------------------------------------------------+ - @version $Id: labels.inc 584 2007-05-24 03:49:19Z estadtherr $ + @version $Id: labels.inc 1086 2008-02-15 05:43:32Z tomekp $ */ @@ -45,7 +45,7 @@ $labels['priority'] = '優先順序'; $labels['organization'] = '組織'; $labels['reply-to'] = '回覆至'; $labels['mailboxlist'] = '資料夾'; -$labels['messagesfromto'] = '郵件 $from 至 $to,共有 $count 郵件'; +$labels['messagesfromto'] = '郵件 $from 至 $to,共有 $count 封郵件'; $labels['messagenrof'] = '第 $nr 封郵件,共有 $count 封'; $labels['moveto'] = '移至...'; $labels['download'] = '下載'; @@ -75,7 +75,8 @@ $labels['writenewmessage'] = '撰寫新郵件'; $labels['replytomessage'] = '回覆'; $labels['replytoallmessage'] = '全部回覆'; $labels['forwardmessage'] = '轉寄'; -$labels['deletemessage'] = '移至垃圾郵件'; +$labels['deletemessage'] = '刪除郵件'; +$labels['movemessagetotrash'] = '移動郵件至垃圾桶'; $labels['printmessage'] = '列印此郵件'; $labels['previousmessage'] = '顯示上一封郵件'; $labels['previousmessages'] = '顯示上一頁'; @@ -87,6 +88,9 @@ $labels['lastmessage'] = '顯示最後一封郵件'; $labels['lastmessages'] = '顯示最後一頁'; $labels['backtolist'] = '回到郵件清單'; $labels['viewsource'] = '顯示原始郵件'; +$labels['markmessages'] = '標記郵件為'; +$labels['markread'] = '已讀'; +$labels['markunread'] = '未讀'; $labels['select'] = '選擇'; $labels['all'] = '全部'; $labels['none'] = '無'; @@ -96,12 +100,12 @@ $labels['empty'] = '清空'; $labels['purge'] = '清除'; $labels['quota'] = '磁碟使用量'; $labels['unknown'] = '未知'; -$labels['unlimited'] = '沒有限制'; +$labels['unlimited'] = '無限制'; $labels['quicksearch'] = '快速搜尋'; $labels['resetsearch'] = '重設搜尋'; $labels['compose'] = '撰寫新郵件'; -$labels['sendmessage'] = '立即寄出'; $labels['savemessage'] = '存至草稿匣'; +$labels['sendmessage'] = '立即寄出'; $labels['addattachment'] = '增加附件檔案'; $labels['charset'] = '字元集'; $labels['editortype'] = '編輯器類型'; @@ -121,6 +125,13 @@ $labels['nosubject'] = '(沒有主旨)'; $labels['showimages'] = '顯示圖片'; $labels['htmltoggle'] = 'HTML'; $labels['plaintoggle'] = '純文字'; +$labels['addcc'] = '新增副本'; +$labels['addbcc'] = '新增密件副本'; +$labels['addreplyto'] = '新增回覆地址'; +$labels['mdnrequest'] = '此郵件的寄件者希望在你閱讀此郵件時受到通知。你想要通知寄件者嗎?'; +$labels['receiptread'] = '郵件回條(已閱讀)'; +$labels['yourmessage'] = '這是你郵件的郵件回條'; +$labels['receiptnote'] = '注意:此回條只能確認收件者的電腦顯示了郵件,並不能保證收件者已閱讀或了解郵件的內容。'; $labels['name'] = '顯示名稱'; $labels['firstname'] = '名稱'; $labels['surname'] = '姓氏'; @@ -132,7 +143,7 @@ $labels['cancel'] = '取消'; $labels['save'] = '儲存'; $labels['delete'] = '刪除'; $labels['newcontact'] = '建立新聯絡人卡片'; -$labels['deletecontact'] = '刪除所選擇之聯絡人'; +$labels['deletecontact'] = '刪除所選擇的聯絡人'; $labels['composeto'] = '寄信至'; $labels['contactsfromto'] = '聯絡人 $from 至 $to,共有 $count 人'; $labels['print'] = '列印'; @@ -148,7 +159,7 @@ $labels['preferences'] = '設定'; $labels['userpreferences'] = '個人設定'; $labels['editpreferences'] = '編輯個人設定'; $labels['identities'] = '身份資訊'; -$labels['manageidentities'] = '管理此帳號之身分資訊'; +$labels['manageidentities'] = '管理此帳號的身份資訊'; $labels['newidentity'] = '新增身份資訊'; $labels['newitem'] = '新增項目'; $labels['edititem'] = '編輯項目'; @@ -168,6 +179,7 @@ $labels['folder'] = '資料夾'; $labels['folders'] = '資料夾'; $labels['foldername'] = '資料夾名稱'; $labels['subscribed'] = '已訂閱'; +$labels['messagecount'] = '個郵件'; $labels['create'] = '建立'; $labels['createfolder'] = '建立新資料夾'; $labels['rename'] = '重新命名'; diff --git a/program/localization/zh_TW/messages.inc b/program/localization/zh_TW/messages.inc index 6de331b..bc348a1 100644 --- a/program/localization/zh_TW/messages.inc +++ b/program/localization/zh_TW/messages.inc @@ -6,7 +6,7 @@ | localization/tw/messages.inc | | | | Language file of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -14,7 +14,7 @@ | Ting-Hung Chiu | +-----------------------------------------------------------------------+ - @version $Id: messages.inc 584 2007-05-24 03:49:19Z estadtherr $ + @version $Id: messages.inc 1086 2008-02-15 05:43:32Z tomekp $ */ @@ -41,7 +41,7 @@ $messages['encryptedmessage'] = '此郵件經過加密,因此無法顯示。 $messages['nocontactsfound'] = '沒有找到任何聯絡人'; $messages['contactnotfound'] = '找不到要求的聯絡人'; $messages['sendingfailed'] = '郵件寄出失敗'; -$messages['errorsaving'] = '儲存過程當中發生錯誤'; +$messages['errorsaving'] = '儲存時發生錯誤'; $messages['errormoving'] = '無法移動此郵件'; $messages['errordeleting'] = '無法刪除此郵件'; $messages['deletecontactconfirm'] = '你確定要刪除已選擇的聯絡人?'; @@ -74,5 +74,10 @@ $messages['copysuccess'] = '複製 $nr 個位址成功'; $messages['copyerror'] = '無法複製任何位址'; $messages['sourceisreadonly'] = '此來源位址是唯讀的'; $messages['errorsavingcontact'] = '無法儲存連絡人的位址'; +$messages['movingmessage'] = '移動郵件中...'; +$messages['receiptsent'] = '閱讀回條傳送成功'; +$messages['errorsendingreceipt'] = '無法傳送回條'; +$messages['nodeletelastidentity'] = '你不能刪除此身份,因為只剩一個身份。'; +$messages['addsubfolderhint'] = '此資料夾會成為目前所選資料夾的子資料夾'; ?> \ No newline at end of file diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc index 56a9d63..44468d1 100644 --- a/program/steps/addressbook/func.inc +++ b/program/steps/addressbook/func.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: func.inc 582 2007-05-18 14:38:11Z thomasb $ + $Id: func.inc 930 2007-11-25 17:34:19Z thomasb $ */ @@ -32,10 +32,7 @@ $CONTACTS->set_pagesize($CONFIG['pagesize']); // set list properties and session vars if (!empty($_GET['_page'])) - { - $CONTACTS->set_page(intval($_GET['_page'])); - $_SESSION['page'] = $_GET['_page']; - } + $CONTACTS->set_page(($_SESSION['page'] = intval($_GET['_page']))); else $CONTACTS->set_page(isset($_SESSION['page']) ?$_SESSION['page'] : 1); diff --git a/program/steps/mail/check_recent.inc b/program/steps/mail/check_recent.inc index a2100f1..3e03016 100644 --- a/program/steps/mail/check_recent.inc +++ b/program/steps/mail/check_recent.inc @@ -27,18 +27,26 @@ foreach ($a_mailboxes as $mbox_name) { if ($recent_count = $IMAP->messagecount(NULL, 'RECENT', TRUE)) { - $count = $IMAP->messagecount(NULL, 'ALL', TRUE); + // refresh saved search set + if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && $IMAP->search_set) + $_SESSION['search'][$search_request] = $IMAP->refresh_search(); + + $count_all = $IMAP->messagecount(NULL, 'ALL', TRUE); $unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE); - $OUTPUT->set_env('messagecount', $count); - $OUTPUT->command('set_unread_count', $mbox_name, $unread_count, true); + $OUTPUT->set_env('messagecount', $IMAP->messagecount()); + $OUTPUT->command('set_unread_count', $mbox_name, $unread_count, ($mbox_name == 'INBOX')); $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text()); $OUTPUT->command('set_quota', $IMAP->get_quota()); // add new message headers to list $a_headers = array(); - for ($i=$recent_count, $id=$count-$recent_count+1; $i>0; $i--, $id++) + for ($i=$recent_count, $id=$count_all-$recent_count+1; $i>0; $i--, $id++) { + // skip message if it does not match the current search + if (!$IMAP->in_searchset($id)) + continue; + $header = $IMAP->get_headers($id, NULL, FALSE); if ($header->recent) $a_headers[] = $header; diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index be3ef20..71dcbba 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: compose.inc 892 2007-10-20 21:47:11Z thomasb $ + $Id: compose.inc 1039 2008-02-11 17:39:31Z till $ */ @@ -30,18 +30,30 @@ define('RCUBE_COMPOSE_DRAFT', 0x0108); // remove an attachment if ($_action=='remove-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_POST['_file'], $regs)) - { +{ $id = $regs[1]; if (is_array($_SESSION['compose']['attachments'][$id])) - { + { @unlink($_SESSION['compose']['attachments'][$id]['path']); $_SESSION['compose']['attachments'][$id] = NULL; $OUTPUT->command('remove_from_attachment_list', "rcmfile$id"); $OUTPUT->send(); exit; - } } +} +if ($_action=='display-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_GET['_file'], $regs)) +{ + $id = $regs[1]; + if (is_array($_SESSION['compose']['attachments'][$id])) + { + $apath = $_SESSION['compose']['attachments'][$id]['path']; + header('Content-Type: ' . $_SESSION['compose']['attachments'][$id]['mimetype']); + header('Content-Length: ' . filesize($apath)); + readfile($apath); + } + exit; +} $MESSAGE_FORM = NULL; $MESSAGE = NULL; @@ -52,10 +64,10 @@ $MESSAGE = NULL; // compose when a "new/forward/reply/draft" is called - otherwise the old session attachments will appear if (!is_array($_SESSION['compose']) || $_SESSION['compose']['id'] != get_input_value('_id', RCUBE_INPUT_GET)) - { +{ rcmail_compose_cleanup(); $_SESSION['compose'] = array('id' => uniqid(rand())); - } +} // add some labels to client rcube_add_label('nosubject', 'norecipientwarning', 'nosubjectwarning', 'nobodywarning', 'notsentwarning', 'savingmessage', 'sendingmessage', 'messagesaved', 'converting'); @@ -63,9 +75,6 @@ rcube_add_label('nosubject', 'norecipientwarning', 'nosubjectwarning', 'nobodywa // add config parameter to client script $OUTPUT->set_env('draft_autosave', !empty($CONFIG['drafts_mbox']) ? $CONFIG['draft_autosave'] : 0); -// no html editor if globally disabled -if (!$CONFIG['enable_htmleditor']) - $CONFIG['htmleditor'] = false; // get reference message and set compose mode if ($msg_uid = get_input_value('_reply_uid', RCUBE_INPUT_GET)) @@ -77,7 +86,7 @@ else if ($msg_uid = get_input_value('_draft_uid', RCUBE_INPUT_GET)) if (!empty($msg_uid)) - { +{ // similar as in program/steps/mail/show.inc $MESSAGE = array('UID' => $msg_uid); $MESSAGE['headers'] = &$IMAP->get_headers($msg_uid); @@ -86,32 +95,29 @@ if (!empty($msg_uid)) $MESSAGE['parts'] = $IMAP->get_mime_numbers($MESSAGE['structure']); if ($compose_mode == RCUBE_COMPOSE_REPLY) - { + { $_SESSION['compose']['reply_uid'] = $msg_uid; $_SESSION['compose']['reply_msgid'] = $MESSAGE['headers']->messageID; - $_SESSION['compose']['references'] = $MESSAGE['headers']->reference; - $_SESSION['compose']['references'] .= !empty($MESSAGE['headers']->reference) ? ' ' : ''; - $_SESSION['compose']['references'] .= $MESSAGE['headers']->messageID; + $_SESSION['compose']['references'] = trim($MESSAGE['headers']->references . " " . $MESSAGE['headers']->messageID); if (!empty($_GET['_all'])) $MESSAGE['reply_all'] = 1; - } + } else if ($compose_mode == RCUBE_COMPOSE_FORWARD) - { + { $_SESSION['compose']['forward_uid'] = $msg_uid; - } + } else if ($compose_mode == RCUBE_COMPOSE_DRAFT) - { + { $_SESSION['compose']['draft_uid'] = $msg_uid; - } - } +} /****** compose mode functions ********/ function rcmail_compose_headers($attrib) - { +{ global $IMAP, $MESSAGE, $DB, $compose_mode; static $sa_recipients = array(); @@ -121,7 +127,7 @@ function rcmail_compose_headers($attrib) $part = strtolower($attrib['part']); switch ($part) - { + { case 'from': return rcmail_compose_header_from($attrib); @@ -137,16 +143,16 @@ function rcmail_compose_headers($attrib) case 'cc': if (!$fname) - { + { $fname = '_cc'; $header = 'cc'; - } + } case 'bcc': if (!$fname) - { + { $fname = '_bcc'; $header = 'bcc'; - } + } $allow_attrib = array('id', 'class', 'style', 'cols', 'rows', 'tabindex'); $field_type = 'textarea'; @@ -157,15 +163,14 @@ function rcmail_compose_headers($attrib) $fname = '_replyto'; $allow_attrib = array('id', 'class', 'style', 'size', 'tabindex'); $field_type = 'textfield'; - break; - - } + break; + } if ($fname && !empty($_POST[$fname])) $fvalue = get_input_value($fname, RCUBE_INPUT_POST, TRUE); else if ($header && $compose_mode == RCUBE_COMPOSE_REPLY) - { + { // get recipent address(es) out of the message headers if ($header=='to' && !empty($MESSAGE['headers']->replyto)) $fvalue = $MESSAGE['headers']->replyto; @@ -175,31 +180,31 @@ function rcmail_compose_headers($attrib) // add recipent of original message if reply to all else if ($header=='cc' && !empty($MESSAGE['reply_all'])) - { + { if ($v = $MESSAGE['headers']->to) $fvalue .= $v; if ($v = $MESSAGE['headers']->cc) $fvalue .= (!empty($fvalue) ? ', ' : '') . $v; - } + } // split recipients and put them back together in a unique way if (!empty($fvalue)) - { + { $to_addresses = $IMAP->decode_address_list($fvalue); $fvalue = ''; foreach ($to_addresses as $addr_part) - { + { if (!empty($addr_part['mailto']) && !in_array($addr_part['mailto'], $sa_recipients) && (!$MESSAGE['FROM'] || !in_array($addr_part['mailto'], $MESSAGE['FROM']))) - { + { $fvalue .= (strlen($fvalue) ? ', ':'').$addr_part['string']; $sa_recipients[] = $addr_part['mailto']; - } } } } + } else if ($header && $compose_mode == RCUBE_COMPOSE_DRAFT) - { + { // get drafted headers if ($header=='to' && !empty($MESSAGE['headers']->to)) $fvalue = $IMAP->decode_header($MESSAGE['headers']->to); @@ -209,11 +214,11 @@ function rcmail_compose_headers($attrib) if ($header=='bcc' && !empty($MESSAGE['headers']->bcc)) $fvalue = $IMAP->decode_header($MESSAGE['headers']->bcc); - } + } if ($fname && $field_type) - { + { // pass the following attributes to the form class $field_attrib = array('name' => $fname); foreach ($attrib as $attr => $value) @@ -223,19 +228,19 @@ function rcmail_compose_headers($attrib) // create teaxtarea object $input = new $field_type($field_attrib); $out = $input->show($fvalue); - } + } if ($form_start) $out = $form_start.$out; return $out; - } +} function rcmail_compose_header_from($attrib) - { - global $IMAP, $MESSAGE, $DB, $OUTPUT, $compose_mode; +{ + global $IMAP, $MESSAGE, $DB, $USER, $OUTPUT, $compose_mode; // pass the following attributes to the form class $field_attrib = array('name' => '_from'); @@ -246,37 +251,32 @@ function rcmail_compose_header_from($attrib) // extract all recipients of the reply-message $a_recipients = array(); if ($compose_mode == RCUBE_COMPOSE_REPLY && is_object($MESSAGE['headers'])) - { + { $MESSAGE['FROM'] = array(); $a_to = $IMAP->decode_address_list($MESSAGE['headers']->to); foreach ($a_to as $addr) - { + { if (!empty($addr['mailto'])) $a_recipients[] = $addr['mailto']; - } + } if (!empty($MESSAGE['headers']->cc)) - { + { $a_cc = $IMAP->decode_address_list($MESSAGE['headers']->cc); foreach ($a_cc as $addr) - { + { if (!empty($addr['mailto'])) $a_recipients[] = $addr['mailto']; - } } } + } // get this user's identities - $sql_result = $DB->query("SELECT identity_id, name, email, signature, html_signature - FROM ".get_table_name('identities')." - WHERE user_id=? - AND del<>1 - ORDER BY ".$DB->quoteIdentifier('standard')." DESC, name ASC", - $_SESSION['user_id']); + $sql_result = $USER->list_identities(); if ($DB->num_rows($sql_result)) - { + { $from_id = 0; $a_signatures = array(); @@ -284,22 +284,22 @@ function rcmail_compose_header_from($attrib) $select_from = new select($field_attrib); while ($sql_arr = $DB->fetch_assoc($sql_result)) - { + { $identity_id = $sql_arr['identity_id']; $select_from->add(format_email_recipient($sql_arr['email'], $sql_arr['name']), $identity_id); // add signature to array if (!empty($sql_arr['signature'])) - { + { $a_signatures[$identity_id]['text'] = $sql_arr['signature']; $a_signatures[$identity_id]['is_html'] = ($sql_arr['html_signature'] == 1) ? true : false; if ($a_signatures[$identity_id]['is_html']) - { + { $h2t = new html2text($a_signatures[$identity_id]['text'], false, false); $plainTextPart = $h2t->get_text(); $a_signatures[$identity_id]['plain_text'] = trim($plainTextPart); - } } + } // set identity if it's one of the reply-message recipients if (in_array($sql_arr['email'], $a_recipients)) @@ -310,7 +310,7 @@ function rcmail_compose_header_from($attrib) if ($compose_mode == RCUBE_COMPOSE_DRAFT && strstr($MESSAGE['headers']->from, $sql_arr['email'])) $from_id = $sql_arr['identity_id']; - } + } // overwrite identity selection with post parameter if (isset($_POST['_from'])) @@ -320,23 +320,22 @@ function rcmail_compose_header_from($attrib) // add signatures to client $OUTPUT->set_env('signatures', $a_signatures); - } + } else - { + { $input_from = new textfield($field_attrib); $out = $input_from->show($_POST['_from']); - } + } if ($form_start) $out = $form_start.$out; return $out; - } +} - function rcmail_compose_body($attrib) - { +{ global $CONFIG, $OUTPUT, $MESSAGE, $compose_mode; list($form_start, $form_end) = get_form_tags($attrib); @@ -410,12 +409,9 @@ function rcmail_compose_body($attrib) $body = rcmail_create_draft_body($body, $isHtml); } - if ($CONFIG['enable_htmleditor']) - { - $OUTPUT->include_script('tiny_mce/tiny_mce.js'); - $OUTPUT->include_script("editor.js"); - $OUTPUT->add_script('rcmail_editor_init("$__skin_path");'); - } + $OUTPUT->include_script('tiny_mce/tiny_mce.js'); + $OUTPUT->include_script("editor.js"); + $OUTPUT->add_script('rcmail_editor_init("$__skin_path");'); $out = $form_start ? "$form_start\n" : ''; @@ -470,11 +466,11 @@ function rcmail_compose_body($attrib) $out .= "\n".''; return $out; - } +} function rcmail_create_reply_body($body, $bodyIsHtml) - { +{ global $IMAP, $MESSAGE; if (! $bodyIsHtml) @@ -487,12 +483,12 @@ function rcmail_create_reply_body($body, $bodyIsHtml) // add > to each line for($n=0; $n')===0) $a_lines[$n] = '>'.$a_lines[$n]; else $a_lines[$n] = '> '.$a_lines[$n]; - } + } $body = join("\n", $a_lines); @@ -511,21 +507,21 @@ function rcmail_create_reply_body($body, $bodyIsHtml) } else { - $prefix = sprintf("

On %s, %s wrote:
", - $MESSAGE['headers']->date, - $IMAP->decode_header($MESSAGE['headers']->from)); + $prefix = sprintf("

On %s, %s wrote:
", + $MESSAGE['headers']->date, + $IMAP->decode_header($MESSAGE['headers']->from)); - $suffix = "
"; + $suffix = "
"; } return $prefix.$body.$suffix; - } +} function rcmail_create_forward_body($body, $bodyIsHtml) - { +{ global $IMAP, $MESSAGE; if (! $bodyIsHtml) @@ -541,7 +537,7 @@ function rcmail_create_forward_body($body, $bodyIsHtml) } else { - $prefix = sprintf( + $prefix = sprintf( "

-------- Original Message --------" . "" . "" . @@ -560,24 +556,28 @@ function rcmail_create_forward_body($body, $bodyIsHtml) rcmail_write_compose_attachments($MESSAGE); return $prefix.$body; - } +} function rcmail_create_draft_body($body, $bodyIsHtml) - { +{ global $IMAP, $MESSAGE; - - // add attachments - if (!isset($_SESSION['compose']['forward_attachments']) && - is_array($MESSAGE['parts']) && sizeof($MESSAGE['parts'])>1) + + /** + * add attachments + * sizeof($MESSAGE['parts'] can be 1 - e.g. attachment, but no text! + */ + if (!isset($_SESSION['compose']['forward_attachments']) + && is_array($MESSAGE['parts']) + && count($MESSAGE['parts']) > 0) rcmail_write_compose_attachments($MESSAGE); return $body; - } +} function rcmail_write_compose_attachments(&$message) - { +{ global $IMAP, $CONFIG; $temp_dir = unslashify($CONFIG['temp_dir']); @@ -586,14 +586,14 @@ function rcmail_write_compose_attachments(&$message) $_SESSION['compose']['attachments'] = array(); foreach ($message['parts'] as $pid => $part) - { - if ($part->ctype_primary != 'message' && $part->ctype_primary != 'text' && + { + if ($part->ctype_primary != 'message' && ($part->disposition=='attachment' || $part->disposition=='inline' || $part->headers['content-id'] || (empty($part->disposition) && $part->filename))) - { + { $tmp_path = tempnam($temp_dir, 'rcmAttmnt'); if ($fp = fopen($tmp_path, 'w')) - { + { fwrite($fp, $IMAP->get_message_part($message['UID'], $pid, $part->encoding)); fclose($fp); @@ -602,16 +602,16 @@ function rcmail_write_compose_attachments(&$message) 'name' => $part->filename, 'path' => $tmp_path ); - } } } + } $_SESSION['compose']['forward_attachments'] = TRUE; - } +} function rcmail_compose_subject($attrib) - { +{ global $CONFIG, $MESSAGE, $compose_mode; list($form_start, $form_end) = get_form_tags($attrib); @@ -628,21 +628,21 @@ function rcmail_compose_subject($attrib) // create a reply-subject else if ($compose_mode == RCUBE_COMPOSE_REPLY) - { + { if (eregi('^re:', $MESSAGE['subject'])) $subject = $MESSAGE['subject']; else $subject = 'Re: '.$MESSAGE['subject']; - } + } // create a forward-subject else if ($compose_mode == RCUBE_COMPOSE_FORWARD) - { + { if (eregi('^fwd:', $MESSAGE['subject'])) $subject = $MESSAGE['subject']; else $subject = 'Fwd: '.$MESSAGE['subject']; - } + } // creeate a draft-subject else if ($compose_mode == RCUBE_COMPOSE_DRAFT) @@ -653,11 +653,11 @@ function rcmail_compose_subject($attrib) $out .= $form_end ? "\n$form_end" : ''; return $out; - } +} function rcmail_compose_attachment_list($attrib) - { +{ global $OUTPUT, $CONFIG; // add ID if not given @@ -670,7 +670,7 @@ function rcmail_compose_attachment_list($attrib) $out = '\n"; if (is_array($_SESSION['compose']['attachments'])) - { + { if ($attrib['deleteicon']) $button = sprintf('%s', $CONFIG['skin_path'], @@ -687,18 +687,17 @@ function rcmail_compose_attachment_list($attrib) Q(rcube_label('delete')), $button, Q($a_prop['name'])); - } + } $OUTPUT->add_gui_object('attachmentlist', $attrib['id']); $out .= ''; return $out; - } - +} function rcmail_compose_attachment_form($attrib) - { +{ global $OUTPUT, $SESS_HIDDEN_FIELD; // add ID if not given @@ -726,21 +725,23 @@ EOF; $OUTPUT->add_gui_object('uploadbox', $attrib['id']); return $out; - } +} function rcmail_compose_attachment_field($attrib) - { +{ // allow the following attributes to be added to the tag $attrib_str = create_attrib_string($attrib, array('id', 'class', 'style', 'size')); $out = '"; return $out; - } +} function rcmail_priority_selector($attrib) - { +{ + global $MESSAGE; + list($form_start, $form_end) = get_form_tags($attrib); unset($attrib['form']); @@ -754,18 +755,20 @@ function rcmail_priority_selector($attrib) rcube_label('highest')), array(5, 4, 0, 2, 1)); - $sel = isset($_POST['_priority']) ? $_POST['_priority'] : 0; + $sel = isset($_POST['_priority']) ? $_POST['_priority'] : intval($MESSAGE['headers']->priority); $out = $form_start ? "$form_start\n" : ''; $out .= $selector->show($sel); $out .= $form_end ? "\n$form_end" : ''; return $out; - } +} function rcmail_receipt_checkbox($attrib) - { +{ + global $MESSAGE; + list($form_start, $form_end) = get_form_tags($attrib); unset($attrib['form']); @@ -777,19 +780,16 @@ function rcmail_receipt_checkbox($attrib) $checkbox = new checkbox($attrib); $out = $form_start ? "$form_start\n" : ''; - $out .= $checkbox->show(0); + $out .= $checkbox->show($MESSAGE['headers']->mdn_to ? 1 : 0); $out .= $form_end ? "\n$form_end" : ''; return $out; - } +} function rcmail_editor_selector($attrib) { global $CONFIG, $MESSAGE, $compose_mode; - - if (!$CONFIG['enable_htmleditor']) - return ''; $choices = array( 'html' => 'htmltoggle', @@ -805,17 +805,17 @@ function rcmail_editor_selector($attrib) if ($compose_mode == RCUBE_COMPOSE_REPLY || $compose_mode == RCUBE_COMPOSE_FORWARD || $compose_mode == RCUBE_COMPOSE_DRAFT) - { + { $hasHtml = rcmail_has_html_part($MESSAGE['parts']); $useHtml = ($hasHtml && $CONFIG['htmleditor']); - } + } $selector = ''; $attrib['name'] = '_editorSelect'; $attrib['onchange'] = 'return rcmail_toggle_editor(this)'; foreach ($choices as $value => $text) - { + { $checked = ''; if ((($value == 'html') && $useHtml) || (($value != 'html') && !$useHtml)) @@ -829,26 +829,26 @@ function rcmail_editor_selector($attrib) $rb->show($value), $attrib['id'], rcube_label($text)); - } + } return $selector; } function get_form_tags($attrib) - { +{ global $CONFIG, $OUTPUT, $MESSAGE_FORM, $SESS_HIDDEN_FIELD; $form_start = ''; if (!strlen($MESSAGE_FORM)) - { + { $hiddenfields = new hiddenfield(array('name' => '_task', 'value' => $GLOBALS['_task'])); $hiddenfields->add(array('name' => '_action', 'value' => 'send')); $form_start = empty($attrib['form']) ? '
' : ''; $form_start .= "\n$SESS_HIDDEN_FIELD\n"; $form_start .= $hiddenfields->show(); - } + } $form_end = (strlen($MESSAGE_FORM) && !strlen($attrib['form'])) ? '' : ''; $form_name = !empty($attrib['form']) ? $attrib['form'] : 'form'; @@ -859,7 +859,7 @@ function get_form_tags($attrib) $MESSAGE_FORM = $form_name; return array($form_start, $form_end); - } +} // register UI objects @@ -875,24 +875,54 @@ $OUTPUT->add_handlers(array( 'receiptcheckbox' => 'rcmail_receipt_checkbox', )); - /****** get contacts for this user and add them to client scripts ********/ require_once('include/rcube_contacts.inc'); +require_once('include/rcube_ldap.inc'); -$CONTACTS = new rcube_contacts($DB, $_SESSION['user_id']); +$CONTACTS = new rcube_contacts($DB, $USER->ID); $CONTACTS->set_pagesize(1000); + +$a_contacts = array(); if ($result = $CONTACTS->list_records()) - { - $a_contacts = array(); + { while ($sql_arr = $result->iterate()) if ($sql_arr['email']) $a_contacts[] = format_email_recipient($sql_arr['email'], JQ($sql_arr['name'])); + } +if (isset($CONFIG['ldap_public'])) + { + /* LDAP autocompletion */ + foreach ($CONFIG['ldap_public'] as $ldapserv_config) + { + if ($ldapserv_config['fuzzy_search'] != 1) + { + continue; + } + + $LDAP = new rcube_ldap($ldapserv_config); + $LDAP->connect(); + $LDAP->set_pagesize(1000); - $OUTPUT->set_env('contacts', $a_contacts); + $results = $LDAP->search($ldapserv_config['mail_field'], ""); + + for ($i = 0; $i < $results->count; $i++) + { + if ($results->records[$i]['email'] != '') + { + $email = $results->records[$i]['email']; + $name = $results->records[$i]['name']; + + $a_contacts[] = format_email_recipient($email, JQ($name)); + } + } + $LDAP->close(); + } } - - +if ($a_contacts) + { + $OUTPUT->set_env('contacts', $a_contacts); + } parse_template('compose'); -?> +?> \ No newline at end of file diff --git a/program/steps/mail/folders.inc b/program/steps/mail/folders.inc index 13184e7..1b740ae 100644 --- a/program/steps/mail/folders.inc +++ b/program/steps/mail/folders.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: folders.inc 850 2007-10-03 00:13:32Z ihug $ + $Id: folders.inc 1020 2008-02-05 22:56:29Z thomasb $ */ $mbox_name = $IMAP->get_mailbox_name(); @@ -39,18 +39,22 @@ if ($_action=='expunge' && ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST))) // clear mailbox else if ($_action=='purge' && ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST))) { - $success = $IMAP->clear_mailbox($mbox); - - if ($success && !empty($_REQUEST['_reload'])) + // we should only be purging trash and junk + if($mbox == $CONFIG['trash_mbox'] || $mbox == $CONFIG['junk_mbox']) { - $OUTPUT->set_env('messagecount', 0); - $OUTPUT->set_env('pagecount', 0); - $OUTPUT->command('message_list.clear'); - $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text()); - $OUTPUT->command('set_unread_count', $mbox_name, 0); + $success = $IMAP->clear_mailbox($mbox); + + if ($success && !empty($_REQUEST['_reload'])) + { + $OUTPUT->set_env('messagecount', 0); + $OUTPUT->set_env('pagecount', 0); + $OUTPUT->command('message_list.clear'); + $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text()); + $OUTPUT->command('set_unread_count', $mbox_name, 0); + } + else + $commands = "// purged: $success"; } - else - $commands = "// purged: $success"; } $OUTPUT->send($commands); diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 6d7c751..7df8dab 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -15,12 +15,13 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: func.inc 875 2007-10-17 06:50:28Z thomasb $ + $Id: func.inc 1125 2008-02-20 22:47:06Z thomasb $ */ require_once('lib/html2text.inc'); require_once('lib/enriched.inc'); +require_once('include/rcube_smtp.inc'); $EMAIL_ADDRESS_PATTERN = '/([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9]\\.[a-z]{2,5})/i'; @@ -30,16 +31,10 @@ if (empty($_SESSION['mbox'])) // set imap properties and session vars if ($mbox = get_input_value('_mbox', RCUBE_INPUT_GPC)) - { - $IMAP->set_mailbox($mbox); - $_SESSION['mbox'] = $mbox; - } + $IMAP->set_mailbox(($_SESSION['mbox'] = $mbox)); if (!empty($_GET['_page'])) - { - $IMAP->set_page((int)$_GET['_page']); - $_SESSION['page'] = (int)$_GET['_page']; - } + $IMAP->set_page(($_SESSION['page'] = intval($_GET['_page']))); // set mailbox to INBOX if not set if (empty($_SESSION['mbox'])) @@ -53,7 +48,11 @@ if (!isset($_SESSION['sort_order'])) // set message set for search result if (!empty($_REQUEST['_search']) && isset($_SESSION['search'][$_REQUEST['_search']])) + { $IMAP->set_search_set($_SESSION['search'][$_REQUEST['_search']]); + $OUTPUT->set_env('search_request', $_REQUEST['_search']); + $OUTPUT->set_env('search_text', $_SESSION['last_text_search']); + } // define url for getting message parts @@ -77,7 +76,7 @@ if (!$OUTPUT->ajax_call) // set page title if (empty($_action) || $_action == 'list') - $OUTPUT->set_pagetitle(rcube_charset_convert($IMAP->get_mailbox_name(), 'UTF-7')); + $OUTPUT->set_pagetitle(rcmail_localize_foldername($IMAP->get_mailbox_name())); @@ -291,6 +290,7 @@ function rcmail_message_list($attrib) $OUTPUT->set_env('attachmenticon', $skin_path . $attrib['attachmenticon']); $OUTPUT->set_env('messages', $a_js_message_arr); + $OUTPUT->set_env('coltypes', $a_show_cols); $OUTPUT->include_script('list.js'); @@ -482,6 +482,127 @@ function rcmail_get_messagecount_text($count=NULL, $page=NULL) } +/* Stolen from Squirrelmail */ +function sq_deent(&$attvalue, $regex, $hex=false) + { + $ret_match = false; + preg_match_all($regex, $attvalue, $matches); + if (is_array($matches) && sizeof($matches[0]) > 0) + { + $repl = Array(); + for ($i = 0; $i < sizeof($matches[0]); $i++) + { + $numval = $matches[1][$i]; + if ($hex) + $numval = hexdec($numval); + $repl{$matches[0][$i]} = chr($numval); + } + $attvalue = strtr($attvalue, $repl); + return true; + } + else + return false; + } + + +/* Stolen verbatim from Squirrelmail */ +function sq_defang(&$attvalue) + { + /* Skip this if there aren't ampersands or backslashes. */ + if ((strpos($attvalue, '&') === false) && + (strpos($attvalue, '\\') === false)) + return; + $m = false; + do + { + $m = false; + $m = $m || sq_deent($attvalue, '/\�*(\d+);*/s'); + $m = $m || sq_deent($attvalue, '/\�*((\d|[a-f])+);*/si', true); + $m = $m || sq_deent($attvalue, '/\\\\(\d+)/s', true); + } while ($m == true); + $attvalue = stripslashes($attvalue); + } + + +function rcmail_html_filter($html) + { + preg_match_all('/<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|\'.*?\'|[^\'">\s]+))?)+\s*|\s*)\/?>/', $html, $tags); + + /* From Squirrelmail: Translate all dangerous Unicode or Shift_JIS characters which are accepted by + * IE as regular characters. */ + $replace = array(array('ʟ', 'ʟ', /* L UNICODE IPA Extension */ + 'ʀ', 'ʀ', /* R UNICODE IPA Extension */ + 'ɴ', 'ɴ', /* N UNICODE IPA Extension */ + 'E', 'E', /* Unicode FULLWIDTH LATIN CAPITAL LETTER E */ + 'e', 'e', /* Unicode FULLWIDTH LATIN SMALL LETTER E */ + 'X', 'X', /* Unicode FULLWIDTH LATIN CAPITAL LETTER X */ + 'x', 'x', /* Unicode FULLWIDTH LATIN SMALL LETTER X */ + 'P', 'P', /* Unicode FULLWIDTH LATIN CAPITAL LETTER P */ + 'p', 'p', /* Unicode FULLWIDTH LATIN SMALL LETTER P */ + 'R', 'R', /* Unicode FULLWIDTH LATIN CAPITAL LETTER R */ + 'r', 'r', /* Unicode FULLWIDTH LATIN SMALL LETTER R */ + 'S', 'S', /* Unicode FULLWIDTH LATIN CAPITAL LETTER S */ + 's', 's', /* Unicode FULLWIDTH LATIN SMALL LETTER S */ + 'I', 'I', /* Unicode FULLWIDTH LATIN CAPITAL LETTER I */ + 'i', 'i', /* Unicode FULLWIDTH LATIN SMALL LETTER I */ + 'O', 'O', /* Unicode FULLWIDTH LATIN CAPITAL LETTER O */ + 'o', 'o', /* Unicode FULLWIDTH LATIN SMALL LETTER O */ + 'N', 'N', /* Unicode FULLWIDTH LATIN CAPITAL LETTER N */ + 'n', 'n', /* Unicode FULLWIDTH LATIN SMALL LETTER N */ + 'L', 'L', /* Unicode FULLWIDTH LATIN CAPITAL LETTER L */ + 'l', 'l', /* Unicode FULLWIDTH LATIN SMALL LETTER L */ + 'U', 'U', /* Unicode FULLWIDTH LATIN CAPITAL LETTER U */ + 'u', 'u', /* Unicode FULLWIDTH LATIN SMALL LETTER U */ + 'ⁿ', 'ⁿ' , /* Unicode SUPERSCRIPT LATIN SMALL LETTER N */ + "\xEF\xBC\xA5", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER E */ + /* in unicode this is some Chinese char range */ + "\xEF\xBD\x85", /* Shift JIS FULLWIDTH LATIN SMALL LETTER E */ + "\xEF\xBC\xB8", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER X */ + "\xEF\xBD\x98", /* Shift JIS FULLWIDTH LATIN SMALL LETTER X */ + "\xEF\xBC\xB0", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER P */ + "\xEF\xBD\x90", /* Shift JIS FULLWIDTH LATIN SMALL LETTER P */ + "\xEF\xBC\xB2", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER R */ + "\xEF\xBD\x92", /* Shift JIS FULLWIDTH LATIN SMALL LETTER R */ + "\xEF\xBC\xB3", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER S */ + "\xEF\xBD\x93", /* Shift JIS FULLWIDTH LATIN SMALL LETTER S */ + "\xEF\xBC\xA9", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER I */ + "\xEF\xBD\x89", /* Shift JIS FULLWIDTH LATIN SMALL LETTER I */ + "\xEF\xBC\xAF", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER O */ + "\xEF\xBD\x8F", /* Shift JIS FULLWIDTH LATIN SMALL LETTER O */ + "\xEF\xBC\xAE", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER N */ + "\xEF\xBD\x8E", /* Shift JIS FULLWIDTH LATIN SMALL LETTER N */ + "\xEF\xBC\xAC", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER L */ + "\xEF\xBD\x8C", /* Shift JIS FULLWIDTH LATIN SMALL LETTER L */ + "\xEF\xBC\xB5", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER U */ + "\xEF\xBD\x95", /* Shift JIS FULLWIDTH LATIN SMALL LETTER U */ + "\xE2\x81\xBF", /* Shift JIS FULLWIDTH SUPERSCRIPT N */ + "\xCA\x9F", /* L UNICODE IPA Extension */ + "\xCA\x80", /* R UNICODE IPA Extension */ + "\xC9\xB4"), /* N UNICODE IPA Extension */ + array('l', 'l', 'r', 'r', 'n', 'n', 'E', 'E', 'e', 'e', 'X', 'X', 'x', 'x', + 'P', 'P', 'p', 'p', 'R', 'R', 'r', 'r', 'S', 'S', 's', 's', 'I', 'I', + 'i', 'i', 'O', 'O', 'o', 'o', 'N', 'N', 'n', 'n', 'L', 'L', 'l', 'l', + 'U', 'U', 'u', 'u', 'n', 'n', 'E', 'e', 'X', 'x', 'P', 'p', 'R', 'r', + 'S', 's', 'I', 'i', 'O', 'o', 'N', 'n', 'L', 'l', 'U', 'u', 'n', 'l', 'r', 'n')); + if ((count($tags)>3) && (count($tags[3])>0)) + foreach ($tags[3] as $nr=>$value) + { + /* Remove comments */ + $newvalue = preg_replace('/(\/\*.*\*\/)/','$2',$value); + /* Translate dangerous characters */ + $newvalue = str_replace($replace[0], $replace[1], $newvalue); + sq_defang($newvalue); + /* Rename dangerous CSS */ + $newvalue = preg_replace('/expression/i', 'idiocy', $newvalue); + $newvalue = preg_replace('/url/i', 'idiocy', $newvalue); + $newattrs = preg_replace('/'.preg_quote($value, '/').'$/', $newvalue, $tags[1][$nr]); + $newtag = preg_replace('/'.preg_quote($tags[1][$nr], '/').'/', $newattrs, $tags[0][$nr]); + $html = preg_replace('/'.preg_quote($tags[0][$nr], '/').'/', $newtag, $html); + } + return $html; + } + + function rcmail_print_body($part, $safe=FALSE, $plain=FALSE) { global $IMAP, $REMOTE_OBJECTS; @@ -533,7 +654,7 @@ function rcmail_print_body($part, $safe=FALSE, $plain=FALSE) $body = preg_replace($remote_patterns, $remote_replaces, $body); } - return Q($body, 'show', FALSE); + return Q(rcmail_html_filter($body), 'show', FALSE); } // text/enriched @@ -639,7 +760,7 @@ function rcmail_parse_message(&$structure, $arg=array(), $recursive=FALSE) $structure->type = 'content'; $a_return_parts[] = &$structure; } - + // message contains alternative parts else if ($message_ctype_primary=='multipart' && $message_ctype_secondary=='alternative' && is_array($structure->parts)) { @@ -731,7 +852,7 @@ function rcmail_parse_message(&$structure, $arg=array(), $recursive=FALSE) // part text/[plain|html] OR message/delivery-status else if (($primary_type=='text' && ($secondary_type=='plain' || $secondary_type=='html') && $mail_part->disposition!='attachment') || - ($primary_type=='message' && $secondary_type=='delivery-status')) + ($primary_type=='message' && ($secondary_type=='delivery-status' || $secondary_type=='disposition-notification'))) { $mail_part->type = 'content'; $a_return_parts[] = $mail_part; @@ -745,6 +866,10 @@ function rcmail_parse_message(&$structure, $arg=array(), $recursive=FALSE) $a_return_parts = array_merge($a_return_parts, $parts); $a_attachments = array_merge($a_attachments, $attachmnts); } + + // ignore "virtual" protocol parts + else if ($primary_type=='protocol') + continue; // part is file/attachment else if ($mail_part->disposition=='attachment' || $mail_part->disposition=='inline' || $mail_part->headers['content-id'] || @@ -764,7 +889,7 @@ function rcmail_parse_message(&$structure, $arg=array(), $recursive=FALSE) else { if (!$mail_part->filename) - $mail_part->filename = 'file_'.$mail_part->mime_id; + $mail_part->filename = 'Part '.$mail_part->mime_id; $a_attachments[] = $mail_part; } } @@ -862,7 +987,7 @@ function rcmail_message_body($attrib) if (!$attrib['id']) $attrib['id'] = 'rcmailMsgBody'; - $safe_mode = (bool)$_GET['_safe']; + $safe_mode = $MESSAGE['is_safe'] || intval($_GET['_safe']); $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id')); $out = '
\n"; @@ -973,10 +1098,10 @@ function rcmail_sanitize_html($body, $container_id) // remove SCRIPT tags foreach (array('script', 'applet', 'object', 'embed', 'iframe') as $tag) { - while (($pos = strpos($body_lc, '<'.$tag)) && ($pos2 = strpos($body_lc, '', $pos))) + while (($pos = strpos($body_lc, '<'.$tag)) && (($pos2 = strpos($body_lc, '', $pos)) || ($pos3 = strpos($body_lc, '>', $pos)))) { - $pos2 += strlen(''); - $body = substr($body, 0, $pos) . substr($body, $pos2, strlen($body)-$pos2); + $end = $pos2 ? $pos2 + strlen('') : $pos3 + 1; + $body = substr($body, 0, $pos) . substr($body, $end, strlen($body)-$end); $body_lc = strtolower($body); } } @@ -985,7 +1110,7 @@ function rcmail_sanitize_html($body, $container_id) while ($body != $prev_body) { $prev_body = $body; - $body = preg_replace('/(<[^!][^>]*\s)(on[^=>]+)=([^>]+>)/im', '$1__removed=$3', $body); + $body = preg_replace('/(<[^!][^>]*\s)on(?:load|unload|click|dblclick|mousedown|mouseup|mouseover|mousemove|mouseout|focus|blur|keypress|keydown|keyup|submit|reset|select|change)=([^>]+>)/im', '$1__removed=$2', $body); $body = preg_replace('/(<[^!][^>]*\shref=["\']?)(javascript:)([^>]*?>)/im', '$1null:$3', $body); } @@ -1197,15 +1322,15 @@ function rcmail_message_part_controls() { global $CONFIG, $IMAP, $MESSAGE; - if (!is_array($MESSAGE) || !is_array($MESSAGE['parts']) || !($_GET['_uid'] && $_GET['_part']) || !$MESSAGE['parts'][$_GET['_part']]) + $part = asciiwords(get_input_value('_part', RCUBE_INPUT_GPC)); + if (!is_array($MESSAGE) || !is_array($MESSAGE['parts']) || !($_GET['_uid'] && $_GET['_part']) || !$MESSAGE['parts'][$part]) return ''; - $part = &$MESSAGE['parts'][$_GET['_part']]; - + $part = $MESSAGE['parts'][$part]; $attrib_str = create_attrib_string($attrib, array('id', 'class', 'style', 'cellspacing', 'cellpadding', 'border', 'summary')); $out = '
Subject: %s
\n"; - if ($filename) + if ($part->filename) { $out .= sprintf(''."\n", Q(rcube_label('filename')), @@ -1230,7 +1355,7 @@ function rcmail_message_part_frame($attrib) { global $MESSAGE; - $part = $MESSAGE['parts'][$_GET['_part']]; + $part = $MESSAGE['parts'][asciiwords(get_input_value('_part', RCUBE_INPUT_GPC))]; $ctype_primary = strtolower($part->ctype_primary); $attrib['src'] = Q('./?'.str_replace('_frame=', ($ctype_primary=='text' ? '_show=' : '_preload='), $_SERVER['QUERY_STRING'])); @@ -1255,6 +1380,141 @@ function rcmail_compose_cleanup() unset($_SESSION['compose']); } + + +/** + * Send the given message compose object using the configured method + */ +function rcmail_deliver_message(&$message, $from, $mailto) +{ + global $CONFIG; + + $headers = $message->headers(); + $msg_body = $message->get(); + + // send thru SMTP server using custom SMTP library + if ($CONFIG['smtp_server']) + { + // generate list of recipients + $a_recipients = array($mailto); + + if (strlen($headers['Cc'])) + $a_recipients[] = $headers['Cc']; + if (strlen($headers['Bcc'])) + $a_recipients[] = $headers['Bcc']; + + // clean Bcc from header for recipients + $send_headers = $headers; + unset($send_headers['Bcc']); + + // send message + $smtp_response = array(); + $sent = smtp_mail($from, $a_recipients, ($foo = $message->txtHeaders($send_headers)), $msg_body, $smtp_response); + + // log error + if (!$sent) + raise_error(array('code' => 800, 'type' => 'smtp', 'line' => __LINE__, 'file' => __FILE__, + 'message' => "SMTP error: ".join("\n", $smtp_response)), TRUE, FALSE); + } + + // send mail using PHP's mail() function + else + { + // unset some headers because they will be added by the mail() function + $headers_enc = $message->headers($headers); + $headers_php = $message->_headers; + unset($headers_php['To'], $headers_php['Subject']); + + // reset stored headers and overwrite + $message->_headers = array(); + $header_str = $message->txtHeaders($headers_php); + + if (ini_get('safe_mode')) + $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str); + else + $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str, "-f$from"); + } + + if ($sent) // remove MDN headers after sending + unset($headers['Return-Receipt-To'], $headers['Disposition-Notification-To']); + + $message->_headers = array(); + $message->headers($headers); + + return $sent; +} + + +function rcmail_send_mdn($uid) +{ + global $CONFIG, $USER, $IMAP; + + $message = array('UID' => $uid); + $message['headers'] = $IMAP->get_headers($message['UID']); + $message['subject'] = rcube_imap::decode_mime_string($message['headers']->subject, $message['headers']->charset); + + if ($message['headers']->mdn_to && !$message['headers']->mdn_sent) + { + $identity = $USER->get_identity(); + $sender = format_email_recipient($identity['email'], $identity['name']); + $recipient = array_shift($IMAP->decode_address_list($message['headers']->mdn_to)); + $mailto = $recipient['mailto']; + + $compose = new rc_mail_mime(rcmail_header_delm()); + $compose->setParam(array( + 'text_encoding' => 'quoted-printable', + 'html_encoding' => 'quoted-printable', + 'head_encoding' => 'quoted-printable', + 'head_charset' => RCMAIL_CHARSET, + 'html_charset' => RCMAIL_CHARSET, + 'text_charset' => RCMAIL_CHARSET, + )); + + // compose headers array + $headers = array( + 'Date' => date('r'), + 'From' => $sender, + 'To' => $message['headers']->mdn_to, + 'Subject' => rcube_label('receiptread') . ': ' . $message['subject'], + 'Message-ID' => sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), rcmail_mail_domain($_SESSION['imap_host'])), + 'X-Sender' => $identity['email'], + 'Content-Type' => 'multipart/report; report-type=disposition-notification', + ); + + if (!empty($CONFIG['useragent'])) + $headers['User-Agent'] = $CONFIG['useragent']; + + $body = rcube_label("yourmessage") . "\r\n\r\n" . + "\t" . rcube_label("to") . ': ' . rcube_imap::decode_mime_string($message['headers']->to, $message['headers']->charset) . "\r\n" . + "\t" . rcube_label("subject") . ': ' . $message['subject'] . "\r\n" . + "\t" . rcube_label("sent") . ': ' . format_date(strtotime($message['headers']->date), $CONFIG['date_long']) . "\r\n" . + "\r\n" . rcube_label("receiptnote") . "\r\n"; + + $ua = !empty($CONFIG['useragent']) ? $CONFIG['useragent'] : "RoundCube Webmail (Version ".RCMAIL_VERSION.")"; + $report = "Reporting-UA: $ua\r\n"; + + if ($message['headers']->to) + $report .= "Original-Recipient: {$message['headers']->to}\r\n"; + + $report .= "Final-Recipient: rfc822; {$identity['email']}\r\n" . + "Original-Message-ID: {$message['headers']->messageID}\r\n" . + "Disposition: manual-action/MDN-sent-manually; displayed\r\n"; + + $compose->headers($headers, true); + $compose->setTXTBody($body); + $compose->addAttachment($report, 'message/disposition-notification', 'MDNPart2.txt', false, '7bit', 'inline'); + + $sent = rcmail_deliver_message($compose, $identity['email'], $mailto); + + if ($sent) + { + $IMAP->set_flag($message['UID'], 'MDNSENT'); + return true; + } + } + + return false; +} // register UI objects diff --git a/program/steps/mail/get.inc b/program/steps/mail/get.inc index 91c1a30..c5f9480 100644 --- a/program/steps/mail/get.inc +++ b/program/steps/mail/get.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: get.inc 884 2007-10-18 09:10:35Z thomasb $ + $Id: get.inc 1026 2008-02-07 07:50:37Z thomasb $ */ @@ -88,7 +88,7 @@ else if ($pid = get_input_value('_part', RCUBE_INPUT_GET)) // we have to analyze the whole structure again to find inline objects list($new_parts, $new_attachments) = rcmail_parse_message($MESSAGE['structure'], - array('safe' => (bool)$_GET['_safe'], + array('safe' => intval($_GET['_safe']), 'prefer_html' => TRUE, 'get_url' => $GET_URL.'&_part=%s')); @@ -102,16 +102,16 @@ else if ($pid = get_input_value('_part', RCUBE_INPUT_GET)) $part->body = $IMAP->get_message_part($MESSAGE['UID'], $part->mime_id, $part); $OUTPUT = new rcube_html_page(); - $OUTPUT->write(rcmail_print_body($part, (bool)$_GET['_safe'])); + $OUTPUT->write(rcmail_print_body($part, intval($_GET['_safe']))); } else { header(sprintf('Content-Disposition: %s; filename="%s";', $_GET['_download'] ? 'attachment' : 'inline', - $part->filename ? $part->filename : "roundcube.$ctype_secondary")); + $part->filename ? abbreviate_string($part->filename, 55) : "roundcube.$ctype_secondary")); // turn off output buffering and print part content - $IMAP->get_message_part($MESSAGE['UID'], $part->mime_id, $part->encoding, true); + $IMAP->get_message_part($MESSAGE['UID'], $part->mime_id, $part, true); } exit; @@ -130,7 +130,7 @@ else $cont = ''; list($MESSAGE['parts']) = rcmail_parse_message($MESSAGE['structure'], - array('safe' => (bool)$_GET['_safe'], + array('safe' => intval($_GET['_safe']), 'get_url' => $GET_URL.'&_part=%s')); $cont = "\n\n\n"; diff --git a/program/steps/mail/getunread.inc b/program/steps/mail/getunread.inc index 0650ebe..897a10b 100644 --- a/program/steps/mail/getunread.inc +++ b/program/steps/mail/getunread.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: getunread.inc 850 2007-10-03 00:13:32Z ihug $ + $Id: getunread.inc 1019 2008-02-05 21:39:08Z thomasb $ */ @@ -24,7 +24,7 @@ $a_folders = $IMAP->list_mailboxes(); if (!empty($a_folders)) { foreach ($a_folders as $mbox_row) - $OUTPUT->command('set_unread_count', $mbox_row, $IMAP->messagecount($mbox_row, 'UNSEEN')); + $OUTPUT->command('set_unread_count', $mbox_row, $IMAP->messagecount($mbox_row, 'UNSEEN'), ($IMAP->get_mailbox_name() == 'INBOX' && $mbox_row == 'INBOX')); } $OUTPUT->send(); diff --git a/program/steps/mail/list.inc b/program/steps/mail/list.inc index 2937f78..4c948be 100644 --- a/program/steps/mail/list.inc +++ b/program/steps/mail/list.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: list.inc 850 2007-10-03 00:13:32Z ihug $ + $Id: list.inc 1019 2008-02-05 21:39:08Z thomasb $ */ @@ -40,9 +40,10 @@ else $mbox_name = $IMAP->get_mailbox_name(); // fetch message headers -if ($count = $IMAP->messagecount($mbox_name, 'ALL', !empty($_REQUEST['_refresh']))) +if ($IMAP->messagecount($mbox_name, 'ALL', !empty($_REQUEST['_refresh']))) $a_headers = $IMAP->list_headers($mbox_name, NULL, $sort_col, $sort_order); +$count = $IMAP->messagecount($mbox_name); $unseen = $IMAP->messagecount($mbox_name, 'UNSEEN', !empty($_REQUEST['_refresh'])); // update message count display @@ -51,9 +52,6 @@ $OUTPUT->set_env('messagecount', $count); $OUTPUT->set_env('pagecount', $pages); $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($count)); -// update mailboxlist -$OUTPUT->command('set_unread_count', $mbox_name, $unseen); - // add message rows if (isset($a_headers) && count($a_headers)) @@ -61,6 +59,9 @@ if (isset($a_headers) && count($a_headers)) else $OUTPUT->show_message('nomessagesfound', 'notice'); +// update mailboxlist +$OUTPUT->command('set_unread_count', $mbox_name, $unseen, ($mbox_name == 'INBOX')); + // send response $OUTPUT->send(); diff --git a/program/steps/mail/mark.inc b/program/steps/mail/mark.inc index 3958329..2010075 100644 --- a/program/steps/mail/mark.inc +++ b/program/steps/mail/mark.inc @@ -14,7 +14,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: mark.inc 573 2007-05-18 11:29:25Z thomasb $ + $Id: mark.inc 1019 2008-02-05 21:39:08Z thomasb $ */ @@ -32,7 +32,7 @@ if (($uids = get_input_value('_uid', RCUBE_INPUT_POST)) && ($flag = get_input_va if ($marked != -1) { $mbox_name = $IMAP->get_mailbox_name(); - $OUTPUT->command('set_unread_count', $mbox_name, $IMAP->messagecount($mbox_name, 'UNSEEN')); + $OUTPUT->command('set_unread_count', $mbox_name, $IMAP->messagecount($mbox_name, 'UNSEEN'), ($mbox_name == 'INBOX')); $OUTPUT->send(); } } diff --git a/program/steps/mail/move_del.inc b/program/steps/mail/move_del.inc index ffe96fd..5f518ed 100644 --- a/program/steps/mail/move_del.inc +++ b/program/steps/mail/move_del.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: move_del.inc 848 2007-10-02 08:42:18Z thomasb $ + $Id: move_del.inc 1019 2008-02-05 21:39:08Z thomasb $ */ @@ -60,7 +60,7 @@ else if ($_action=='delete' && !empty($_POST['_uid'])) else exit; -// refresh saved seach set after moving some messages +// refresh saved search set after moving some messages if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && $IMAP->search_set) $_SESSION['search'][$search_request] = $IMAP->refresh_search(); @@ -86,7 +86,7 @@ $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($msg_count)); // update mailboxlist $mbox = $IMAP->get_mailbox_name(); -$OUTPUT->command('set_unread_count', $mbox, $IMAP->messagecount($mbox, 'UNSEEN')); +$OUTPUT->command('set_unread_count', $mbox, $IMAP->messagecount($mbox, 'UNSEEN'), ($mbox == 'INBOX')); if ($_action=='moveto' && $target) $OUTPUT->command('set_unread_count', $target, $IMAP->messagecount($target, 'UNSEEN')); diff --git a/program/steps/mail/rss.inc b/program/steps/mail/rss.inc index b32bfa4..a0c20b9 100644 --- a/program/steps/mail/rss.inc +++ b/program/steps/mail/rss.inc @@ -15,7 +15,7 @@ | Author: Sjon Hortensius | +-----------------------------------------------------------------------+ - $Id: rss.inc 850 2007-10-03 00:13:32Z ihug $ + $Id: rss.inc 931 2007-11-25 19:45:38Z thomasb $ */ @@ -79,7 +79,7 @@ echo ' // Check if the user wants to override the default sortingmethode if (isset($_GET['_sort'])) - list($sort_col, $sort_order) = explode('_', $_GET['_sort']); + list($sort_col, $sort_order) = explode('_', get_input_value('_sort', RCUBE_INPUT_GET)); // Add message to output if ($messagecount > 0) diff --git a/program/steps/mail/search.inc b/program/steps/mail/search.inc index a3f6dda..66fcf47 100644 --- a/program/steps/mail/search.inc +++ b/program/steps/mail/search.inc @@ -64,7 +64,8 @@ else if (preg_match("/^body:/i", $str)) // search in subject and sender by default else { - $subject = array("HEADER SUBJECT", "HEADER FROM"); + $from = ($mbox == $CONFIG['sent_mbox'] || $mbox == $CONFIG['drafts_mbox']) ? "TO" : "FROM"; + $subject = array("HEADER SUBJECT", "HEADER $from"); $search = trim($str); } @@ -88,6 +89,7 @@ if (is_array($result) && $result[0] != '') if ($result_h != NULL) { $_SESSION['search'][$search_request] = $IMAP->get_search_set(); + $_SESSION['last_text_search'] = $str; rcmail_js_message_list($result_h); $OUTPUT->show_message('searchsuccessful', 'confirmation', array('nr' => $count)); } @@ -106,4 +108,4 @@ $OUTPUT->set_env('pagecount', $pages); $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($count, 1)); $OUTPUT->send(); -?> \ No newline at end of file +?> diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index 8ea5f13..12dd18a 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -10,19 +10,18 @@ | | | PURPOSE: | | Compose a new mail message with all headers and attachments | - | and send it using IlohaMail's SMTP methods or with PHP mail() | + | and send it using the PEAR::Net_SMTP class or with PHP mail() | | | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: sendmail.inc 816 2007-09-26 08:13:21Z thomasb $ + $Id: sendmail.inc 1120 2008-02-19 23:59:38Z thomasb $ */ //require_once('lib/smtp.inc'); -require_once('include/rcube_smtp.inc'); require_once('lib/html2text.inc'); require_once('lib/rc_mail_mime.inc'); @@ -37,26 +36,19 @@ if (!isset($_SESSION['compose']['id'])) /****** message sending functions ********/ +// get identity record function rcmail_get_identity($id) { - global $DB, $OUTPUT; + global $USER, $OUTPUT; - // get identity record - $sql_result = $DB->query("SELECT *, email AS mailto - FROM ".get_table_name('identities')." - WHERE identity_id=? - AND user_id=? - AND del<>1", - $id,$_SESSION['user_id']); - - if ($DB->num_rows($sql_result)) + if ($sql_arr = $USER->get_identity($id)) { - $sql_arr = $DB->fetch_assoc($sql_result); $out = $sql_arr; + $out['mailto'] = $sql_arr['email']; $name = strpos($sql_arr['name'], ",") ? '"'.$sql_arr['name'].'"' : $sql_arr['name']; $out['string'] = sprintf('%s <%s>', rcube_charset_convert($name, RCMAIL_CHARSET, $OUTPUT->get_charset()), - $sql_arr['mailto']); + $sql_arr['email']); return $out; } @@ -137,7 +129,7 @@ $OUTPUT->framed = TRUE; /****** check submission and compose message ********/ -if (!$savedraft && empty($_POST['_to']) && empty($_POST['_subject']) && $_POST['_message']) +if (!$savedraft && empty($_POST['_to']) && empty($_POST['_cc']) && empty($_POST['_bcc']) && empty($_POST['_subject']) && $_POST['_message']) { $OUTPUT->show_message("sendingfailed", 'error'); $OUTPUT->send('iframe'); @@ -154,28 +146,34 @@ $mailto_replace = array(', ', ', ', '', ','); // replace new lines and strip ending ', ' $mailto = preg_replace($mailto_regexp, $mailto_replace, get_input_value('_to', RCUBE_INPUT_POST, TRUE, $message_charset)); +$mailcc = preg_replace($mailto_regexp, $mailto_replace, get_input_value('_cc', RCUBE_INPUT_POST, TRUE, $message_charset)); +$mailbcc = preg_replace($mailto_regexp, $mailto_replace, get_input_value('_bcc', RCUBE_INPUT_POST, TRUE, $message_charset)); -// decode address strings -$to_address_arr = $IMAP->decode_address_list($mailto); -$identity_arr = rcmail_get_identity(get_input_value('_from', RCUBE_INPUT_POST)); +if (empty($mailto) && !empty($mailcc)) { + $mailto = $mailcc; + $mailcc = null; +} +else if (empty($mailto)) + $mailto = 'undisclosed-recipients:;'; +// get sender name and address +$identity_arr = rcmail_get_identity(get_input_value('_from', RCUBE_INPUT_POST)); $from = $identity_arr['mailto']; -$first_to = is_array($to_address_arr[0]) ? $to_address_arr[0]['mailto'] : $mailto; if (empty($identity_arr['string'])) $identity_arr['string'] = $from; // compose headers array -$headers = array('Date' => date('D, j M Y H:i:s O'), +$headers = array('Date' => date('r'), 'From' => rcube_charset_convert($identity_arr['string'], RCMAIL_CHARSET, $message_charset), 'To' => $mailto); // additional recipients -if (!empty($_POST['_cc'])) - $headers['Cc'] = preg_replace($mailto_regexp, $mailto_replace, get_input_value('_cc', RCUBE_INPUT_POST, TRUE, $message_charset)); +if (!empty($mailcc)) + $headers['Cc'] = $mailcc; -if (!empty($_POST['_bcc'])) - $headers['Bcc'] = preg_replace($mailto_regexp, $mailto_replace, get_input_value('_bcc', RCUBE_INPUT_POST, TRUE, $message_charset)); +if (!empty($mailbcc)) + $headers['Bcc'] = $mailbcc; if (!empty($identity_arr['bcc'])) $headers['Bcc'] = ($headers['Bcc'] ? $headers['Bcc'].', ' : '') . $identity_arr['bcc']; @@ -199,7 +197,7 @@ if (!empty($_SESSION['compose']['references'])) if (!empty($_POST['_priority'])) { - $priority = (int)$_POST['_priority']; + $priority = intval($_POST['_priority']); $a_priorities = array(1=>'highest', 2=>'high', 4=>'low', 5=>'lowest'); if ($str_priority = $a_priorities[$priority]) $headers['X-Priority'] = sprintf("%d (%s)", $priority, ucfirst($str_priority)); @@ -214,6 +212,12 @@ if (!empty($_POST['_receipt'])) // additional headers $headers['Message-ID'] = $message_id; $headers['X-Sender'] = $from; +$headers['Received'] = wordwrap('from ' . + (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? + gethostbyaddr($_SERVER['HTTP_X_FORWARDED_FOR']).' ['.$_SERVER['HTTP_X_FORWARDED_FOR'].'] via ' : '') . + gethostbyaddr($_SERVER['REMOTE_ADDR']).' ['.$_SERVER['REMOTE_ADDR'].'] with ' . + $_SERVER['SERVER_PROTOCOL'].' ('.$_SERVER['REQUEST_METHOD'].'); ' . date('r'), + 69, rcmail_header_delm() . "\t"); if (!empty($CONFIG['useragent'])) $headers['User-Agent'] = $CONFIG['useragent']; @@ -225,23 +229,11 @@ $message_body = get_input_value('_message', RCUBE_INPUT_POST, TRUE, $message_cha if (!$savedraft && !empty($CONFIG['generic_message_footer']) && ($footer = file_get_contents(realpath($CONFIG['generic_message_footer'])))) $message_body .= "\r\n" . rcube_charset_convert($footer, 'UTF-8', $message_charset); -// try to autodetect operating system and use the correct line endings -// use the configured delimiter for headers -if (!empty($CONFIG['mail_header_delimiter'])) - $header_delm = $CONFIG['mail_header_delimiter']; -else if (strtolower(substr(PHP_OS, 0, 3)=='win')) - $header_delm = "\r\n"; -else if (strtolower(substr(PHP_OS, 0, 3)=='mac')) - $header_delm = "\r\n"; -else - $header_delm = "\n"; - - $isHtmlVal = strtolower(get_input_value('_is_html', RCUBE_INPUT_POST)); $isHtml = ($isHtmlVal == "1"); // create extended PEAR::Mail_mime instance -$MAIL_MIME = new rc_mail_mime($header_delm); +$MAIL_MIME = new rc_mail_mime(rcmail_header_delm()); // For HTML-formatted messages, construct the MIME message with both // the HTML part and the plain-text part @@ -253,7 +245,7 @@ if ($isHtml) // add a plain text version of the e-mail as an alternative part. $h2t = new html2text($message_body); $plainTextPart = wordwrap($h2t->get_text(), 998, "\r\n", true); - $MAIL_MIME->setTXTBody($plainTextPart); + $MAIL_MIME->setTXTBody(html_entity_decode($plainTextPart, ENT_COMPAT, 'utf-8')); // look for "emoticon" images from TinyMCE and copy into message as attachments rcmail_attach_emoticons($MAIL_MIME); @@ -268,8 +260,28 @@ else // add stored attachments, if any if (is_array($_SESSION['compose']['attachments'])) - foreach ($_SESSION['compose']['attachments'] as $attachment) - $MAIL_MIME->addAttachment($attachment['path'], $attachment['mimetype'], $attachment['name'], true, 'base64', 'attachment', $message_charset); + foreach ($_SESSION['compose']['attachments'] as $id => $attachment) + { + $dispurl = '/\ssrc\s*=\s*[\'"]?\S+display-attachment\S+file=rcmfile' . $id . '[\'"]?/'; + $match = preg_match($dispurl, $message_body); + if ($isHtml && ($match > 0)) + { + $message_body = preg_replace($dispurl, ' src="'.$attachment['name'].'"', $message_body); + $MAIL_MIME->setHTMLBody($message_body); + $MAIL_MIME->addHTMLImage($attachment['path'], $attachment['mimetype'], $attachment['name']); + } + else + { + /* + We need to replace mime_content_type in a later release because the function + is deprecated in favour of File_Info + */ + $MAIL_MIME->addAttachment($attachment['path'], + rc_mime_content_type($attachment['path'], $attachment['mimetype']), + $attachment['name'], true, 'base64', + 'attachment', $message_charset); + } + } // add submitted attachments if (is_array($_FILES['_attachments']['tmp_name'])) @@ -282,80 +294,30 @@ $charset_7bit = array('ASCII', 'ISO-2022-JP', 'ISO-8859-1', 'ISO-8859-2', 'ISO-8 $transfer_encoding = in_array(strtoupper($message_charset), $charset_7bit) ? '7bit' : '8bit'; // encoding settings for mail composing -$message_param = array( +$MAIL_MIME->setParam(array( 'text_encoding' => $transfer_encoding, 'html_encoding' => 'quoted-printable', 'head_encoding' => 'quoted-printable', 'head_charset' => $message_charset, 'html_charset' => $message_charset, 'text_charset' => $message_charset, -); - -// compose message body and get headers -$msg_body = $MAIL_MIME->get($message_param); -// unset to save memory. -unset($MAIL_MIME->_parts); +)); // encoding subject header with mb_encode provides better results with asian characters if ($MBSTRING && function_exists("mb_encode_mimeheader")) { mb_internal_encoding($message_charset); - $mb_subject = mb_encode_mimeheader($headers['Subject'], $message_charset, 'Q'); + $headers['Subject'] = mb_encode_mimeheader($headers['Subject'], $message_charset, 'Q'); mb_internal_encoding(RCMAIL_CHARSET); } -// Begin SMTP Delivery Block -if (!$savedraft) { +// pass headers to message object +$MAIL_MIME->headers($headers); - // send thru SMTP server using custom SMTP library - if ($CONFIG['smtp_server']) - { - // generate list of recipients - $a_recipients = array($mailto); - - if (strlen($headers['Cc'])) - $a_recipients[] = $headers['Cc']; - if (strlen($headers['Bcc'])) - $a_recipients[] = $headers['Bcc']; - - // clean Bcc from header for recipients - $send_headers = $headers; - unset($send_headers['Bcc']); - - if (!empty($mb_subject)) - $send_headers['Subject'] = $mb_subject; - - // send message - $smtp_response = array(); - $sent = smtp_mail($from, $a_recipients, ($foo = $MAIL_MIME->txtHeaders($send_headers)), $msg_body, $smtp_response); - - // log error - if (!$sent) - raise_error(array('code' => 800, 'type' => 'smtp', 'line' => __LINE__, 'file' => __FILE__, - 'message' => "SMTP error: ".join("\n", $smtp_response)), TRUE, FALSE); - } - - // send mail using PHP's mail() function - else - { - // unset some headers because they will be added by the mail() function - $headers_enc = $MAIL_MIME->headers($headers); - $headers_php = $MAIL_MIME->_headers; - unset($headers_php['To'], $headers_php['Subject']); - - if (!empty($mb_subject)) - $headers_enc['Subject'] = $mb_subject; - - // reset stored headers and overwrite - $MAIL_MIME->_headers = array(); - $header_str = $MAIL_MIME->txtHeaders($headers_php); - - if (ini_get('safe_mode')) - $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str); - else - $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str, "-f$from"); - } - +// Begin SMTP Delivery Block +if (!$savedraft) +{ + $sent = rcmail_deliver_message($MAIL_MIME, $from, $mailto); // return to compose page if sending failed if (!$sent) @@ -365,7 +327,6 @@ if (!$savedraft) { return; } - // set repliead flag if ($_SESSION['compose']['reply_uid']) $IMAP->set_flag($_SESSION['compose']['reply_uid'], 'ANSWERED'); @@ -382,21 +343,15 @@ else if ($CONFIG[$store_target]) { - // create string of complete message headers - $header_str = $MAIL_MIME->txtHeaders($headers); - // check if mailbox exists if (!in_array_nocase($CONFIG[$store_target], $IMAP->list_mailboxes())) $store_folder = $IMAP->create_mailbox($CONFIG[$store_target], TRUE); else $store_folder = TRUE; - // add headers to message body - $msg_body = $header_str."\r\n".$msg_body; - // append message to sent box if ($store_folder) - $saved = $IMAP->save_message($CONFIG[$store_target], $msg_body); + $saved = $IMAP->save_message($CONFIG[$store_target], $MAIL_MIME->getMessage()); // raise error if saving failed if (!$saved) @@ -459,5 +414,4 @@ else $OUTPUT->send('iframe'); } - ?> diff --git a/program/steps/mail/sendmdn.inc b/program/steps/mail/sendmdn.inc new file mode 100644 index 0000000..530dcac --- /dev/null +++ b/program/steps/mail/sendmdn.inc @@ -0,0 +1,40 @@ + | + +-----------------------------------------------------------------------+ + + $Id: sendmail.inc 930 2007-11-25 17:34:19Z thomasb $ + +*/ + +require_once('lib/rc_mail_mime.inc'); + + +if (!empty($_POST['_uid'])) { + $sent = rcmail_send_mdn(get_input_value('_uid', RCUBE_INPUT_POST)); +} + +// show either confirm or error message +if ($sent) { + $OUTPUT->set_env('mdn_request', false); + $OUTPUT->show_message('receiptsent', 'confirmation'); +} +else { + $OUTPUT->show_message('errorsendingreceipt', 'error'); +} + +$OUTPUT->send(); + +?> \ No newline at end of file diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc index 3033ea3..ec79c2c 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -5,7 +5,7 @@ | program/steps/mail/show.inc | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -15,11 +15,12 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: show.inc 668 2007-08-10 08:27:40Z thomasb $ + $Id: show.inc 1046 2008-02-11 23:07:44Z thomasb $ */ require_once('Mail/mimeDecode.php'); +require_once('lib/rc_mail_mime.inc'); $PRINT_MODE = $_action=='print' ? TRUE : FALSE; @@ -41,12 +42,18 @@ if ($_GET['_uid']) return; } } + + // check if safe flag is set + if ($MESSAGE['is_safe'] = intval($_GET['_safe'])) + $_SESSION['safe_messages'][$MESSAGE['UID']] = true; + else if ($_SESSION['safe_messages'][$MESSAGE['UID']]) + $MESSAGE['is_safe'] = 1; // calculate Etag for this request - $etag = md5($MESSAGE['UID'].$IMAP->get_mailbox_name().session_id().($PRINT_MODE?1:0)); + $etag = md5($MESSAGE['UID'].$IMAP->get_mailbox_name().session_id().intval($MESSAGE['headers']->mdn_sent).intval($MESSAGE['is_safe']).intval($PRINT_MODE)); // allow caching, unless remote images are present - if ((bool)get_input_value('_safe', RCUBE_INPUT_GET)) + if ((bool)$MESSAGE['is_safe']) send_nocacheing_headers(); else if (empty($CONFIG['devel_mode'])) send_modified_header($_SESSION['login_time'], $etag); @@ -57,7 +64,7 @@ if ($_GET['_uid']) if ($MESSAGE['structure'] = $IMAP->get_structure($MESSAGE['UID'])) list($MESSAGE['parts'], $MESSAGE['attachments']) = rcmail_parse_message( $MESSAGE['structure'], - array('safe' => (bool)$_GET['_safe'], + array('safe' => $MESSAGE['is_safe'], 'prefer_html' => $CONFIG['prefer_html'], 'get_url' => $GET_URL.'&_part=%s') ); @@ -71,12 +78,28 @@ if ($_GET['_uid']) // give message uid to the client $OUTPUT->set_env('uid', $MESSAGE['UID']); - $OUTPUT->set_env('safemode', (bool)$_GET['_safe']); + $OUTPUT->set_env('safemode', $MESSAGE['is_safe']); + + // check for unset disposition notification + if ($MESSAGE['headers']->mdn_to && !$MESSAGE['headers']->mdn_sent && $IMAP->get_mailbox_name() != $CONFIG['drafts_mbox']) + { + if (intval($CONFIG['mdn_requests']) === 1) + { + if (rcmail_send_mdn($MESSAGE['UID'])) + $OUTPUT->show_message('receiptsent', 'confirmation'); + } + else if (empty($CONFIG['mdn_requests'])) + { + rcube_add_label('mdnrequest'); + $OUTPUT->set_env('mdn_request', true); + } + } + - $next = $prev = -1; + $next = $prev = $first = $last = -1; // get previous, first, next and last message UID - if (!($_SESSION['sort_col'] == 'date' && $_SESSION['sort_order'] == 'DESC') && - $IMAP->get_capability('sort')) + if ((!($_SESSION['sort_col'] == 'date' && $_SESSION['sort_order'] == 'DESC') && + $IMAP->get_capability('sort')) || !empty($_REQUEST['_search'])) { // Only if we use custom sorting $a_msg_index = $IMAP->message_index(NULL, $_SESSION['sort_col'], $_SESSION['sort_order']); @@ -177,4 +200,4 @@ else if ($_action=='preview' && template_exists('messagepreview')) parse_template('messagepreview'); else parse_template('message'); -?> \ No newline at end of file +?> diff --git a/program/steps/mail/upload.inc b/program/steps/mail/upload.inc index 693e01c..9495d99 100644 --- a/program/steps/mail/upload.inc +++ b/program/steps/mail/upload.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: upload.inc 850 2007-10-03 00:13:32Z ihug $ + $Id: upload.inc 1085 2008-02-14 23:49:30Z till $ */ @@ -36,50 +36,52 @@ if (!is_array($_SESSION['compose']['attachments'])) $response = ''; -foreach ($_FILES['_attachments']['tmp_name'] as $i => $filepath) +if (is_array($_FILES['_attachments']['tmp_name'])) { - $tmpfname = tempnam($temp_dir, 'rcmAttmnt'); - if (move_uploaded_file($filepath, $tmpfname)) + foreach ($_FILES['_attachments']['tmp_name'] as $i => $filepath) { - $id = count($_SESSION['compose']['attachments']); - $_SESSION['compose']['attachments'][] = array('name' => $_FILES['_attachments']['name'][$i], + $tmpfname = tempnam($temp_dir, 'rcmAttmnt'); + if (move_uploaded_file($filepath, $tmpfname)) + { + $id = count($_SESSION['compose']['attachments']); + $_SESSION['compose']['attachments'][] = array('name' => $_FILES['_attachments']['name'][$i], 'mimetype' => $_FILES['_attachments']['type'][$i], 'path' => $tmpfname); - if (is_file($CONFIG['skin_path'] . '/images/icons/remove-attachment.png')) - $button = sprintf( - '%s', - $CONFIG['skin_path'], - Q(rcube_label('delete'))); - else - $button = Q(rcube_label('delete')); - - $content = sprintf( - '%s%s', - JS_OBJECT_NAME, - $id, - Q(rcube_label('delete')), - $button, - Q($_FILES['_attachments']['name'][$i])); - - $OUTPUT->command('add2attachment_list', "rcmfile$id", $content); - } - else // upload failed - { - $err = $_FILES['_attachments']['error'][$i]; - if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) - $msg = rcube_label(array('name' => 'filesizeerror', 'vars' => array('size' => show_bytes(parse_bytes(ini_get('upload_max_filesize')))))); - else - $msg = rcube_label('fileuploaderror'); + if (is_file($CONFIG['skin_path'] . '/images/icons/remove-attachment.png')) + $button = sprintf( + '%s', + $CONFIG['skin_path'], + Q(rcube_label('delete'))); + else + $button = Q(rcube_label('delete')); + + $content = sprintf( + '%s%s', + JS_OBJECT_NAME, + $id, + Q(rcube_label('delete')), + $button, + Q($_FILES['_attachments']['name'][$i])); + + $OUTPUT->command('add2attachment_list', "rcmfile$id", $content); + } + else // upload failed + { + $err = $_FILES['_attachments']['error'][$i]; + if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) + $msg = rcube_label(array('name' => 'filesizeerror', 'vars' => array('size' => show_bytes(parse_bytes(ini_get('upload_max_filesize')))))); + else + $msg = rcube_label('fileuploaderror'); - $OUTPUT->command('display_message', $msg, 'error'); + $OUTPUT->command('display_message', $msg, 'error'); + } } } - // send html page with JS calls as response $OUTPUT->command('show_attachment_form', false); $OUTPUT->command('auto_save_start', false); $OUTPUT->send('iframe'); -?> +?> \ No newline at end of file diff --git a/program/steps/settings/delete_identity.inc b/program/steps/settings/delete_identity.inc index 4555a6f..8b0b0be 100644 --- a/program/steps/settings/delete_identity.inc +++ b/program/steps/settings/delete_identity.inc @@ -15,23 +15,21 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: delete_identity.inc 543 2007-04-28 18:07:12Z thomasb $ + $Id: delete_identity.inc 1035 2008-02-10 17:08:40Z till $ */ if (($ids = get_input_value('_iid', RCUBE_INPUT_GET)) && preg_match('/^[0-9]+(,[0-9]+)*$/', $ids)) { - $DB->query( - "UPDATE ".get_table_name('identities')." - SET del=1 - WHERE user_id=? - AND identity_id IN (".$ids.")", - $_SESSION['user_id']); - - $count = $DB->affected_rows(); - if ($count) - $OUTPUT->show_message('deletedsuccessfully', 'confirmation'); + if ($USER->delete_identity($ids)) + { + $OUTPUT->show_message('deletedsuccessfully', 'confirmation'); + } + else + { + $OUTPUT->show_message('nodeletelastidentity', 'error'); + } // send response if ($OUTPUT->ajax_call) $OUTPUT->send(); diff --git a/program/steps/settings/edit_identity.inc b/program/steps/settings/edit_identity.inc index 31e0ccc..30eca4a 100644 --- a/program/steps/settings/edit_identity.inc +++ b/program/steps/settings/edit_identity.inc @@ -15,20 +15,13 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: edit_identity.inc 543 2007-04-28 18:07:12Z thomasb $ + $Id: edit_identity.inc 940 2007-12-11 04:20:01Z estadtherr $ */ if (($_GET['_iid'] || $_POST['_iid']) && $_action=='edit-identity') { - $DB->query("SELECT * FROM ".get_table_name('identities')." - WHERE identity_id=? - AND user_id=? - AND del<>1", - get_input_value('_iid', RCUBE_INPUT_GPC), - $_SESSION['user_id']); - - $IDENTITY_RECORD = $DB->fetch_assoc(); + $IDENTITY_RECORD = $USER->get_identity(get_input_value('_iid', RCUBE_INPUT_GPC)); if (is_array($IDENTITY_RECORD)) $OUTPUT->set_env('iid', $IDENTITY_RECORD['identity_id']); @@ -50,7 +43,6 @@ function rcube_identity_form($attrib) $OUTPUT->add_script("tinyMCE.init({ mode : 'specific_textareas'," . "apply_source_formatting : true," . "content_css : '\$__skin_path' + '/editor_content.css'," . - "popups_css : '\$__skin_path' + '/editor_popups.css'," . "editor_css : '\$__skin_path' + '/editor_ui.css'," . "theme : 'advanced'," . "theme_advanced_toolbar_location : 'top'," . diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index 7bac1f7..f8190c0 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -15,21 +15,13 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: func.inc 892 2007-10-20 21:47:11Z thomasb $ + $Id: func.inc 1176 2008-03-03 21:47:59Z thomasb $ */ -// get user record -$sql_result = $DB->query("SELECT username, mail_host FROM ".get_table_name('users')." - WHERE user_id=?", - $_SESSION['user_id']); - -if ($USER_DATA = $DB->fetch_assoc($sql_result)) -{ - $username = $USER_DATA['username'] . (!strpos($USER_DATA['username'], '@') ? '@'.$USER_DATA['mail_host'] : ''); - $OUTPUT->set_pagetitle(sprintf('%s %s', rcube_label('settingsfor'), $username)); -} +if ($USER->ID) + $OUTPUT->set_pagetitle(rcube_label('settingsfor') . " ". $USER->get_username()); @@ -37,7 +29,7 @@ function rcmail_user_prefs_form($attrib) { global $DB, $CONFIG, $sess_user_lang; - $no_override = !empty($CONFIG['dont_override']) ? array_flip((array)$CONFIG['dont_override']) : array('preview_pane'=>true); + $no_override = is_array($CONFIG['dont_override']) ? array_flip($CONFIG['dont_override']) : array(); // add some labels to client rcube_add_label('nopagesizewarning'); @@ -110,7 +102,7 @@ function rcmail_user_prefs_form($attrib) $out .= sprintf("\n", $field_id, Q(rcube_label('timezone')), - $select_timezone->show($CONFIG['timezone'])); + $select_timezone->show((string)$CONFIG['timezone'])); } // daylight savings @@ -161,7 +153,7 @@ function rcmail_user_prefs_form($attrib) } // Show checkbox for HTML Editor - if (!isset($no_override['htmleditor']) && $CONFIG['enable_htmleditor']) + if (!isset($no_override['htmleditor'])) { $field_id = 'rcmfd_htmleditor'; $input_htmleditor = new checkbox(array('name' => '_htmleditor', 'id' => $field_id, 'value' => 1)); @@ -205,16 +197,7 @@ function rcmail_user_prefs_form($attrib) function rcmail_identities_list($attrib) { - global $DB, $CONFIG, $OUTPUT; - - - // get contacts from DB - $sql_result = $DB->query("SELECT * FROM ".get_table_name('identities')." - WHERE del<>1 - AND user_id=? - ORDER BY standard DESC, name ASC", - $_SESSION['user_id']); - + global $OUTPUT, $USER; // add id to message list table if not specified if (!strlen($attrib['id'])) @@ -224,7 +207,7 @@ function rcmail_identities_list($attrib) $a_show_cols = array('name', 'email', 'organization', 'reply-to'); // create XHTML table - $out = rcube_table_output($attrib, $sql_result, $a_show_cols, 'identity_id'); + $out = rcube_table_output($attrib, $USER->list_identities(), $a_show_cols, 'identity_id'); // set client env $OUTPUT->add_gui_object('identitieslist', $attrib['id']); @@ -271,7 +254,8 @@ function get_form_tags($attrib, $action, $add_hidden=array()) // register UI objects $OUTPUT->add_handlers(array( 'userprefs' => 'rcmail_user_prefs_form', - 'itentitieslist' => 'rcmail_identities_list' + 'identitieslist' => 'rcmail_identities_list', + 'itentitieslist' => 'rcmail_identities_list' // keep this for backward compatibility )); diff --git a/program/steps/settings/manage_folders.inc b/program/steps/settings/manage_folders.inc index 061fdf5..ee368ad 100644 --- a/program/steps/settings/manage_folders.inc +++ b/program/steps/settings/manage_folders.inc @@ -5,7 +5,7 @@ | program/steps/settings/manage_folders.inc | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: manage_folders.inc 887 2007-10-19 12:24:04Z robin $ + $Id: manage_folders.inc 1159 2008-02-29 11:49:09Z thomasb $ */ @@ -85,9 +85,9 @@ else if ($_action=='rename-folder') $display_rename = str_repeat('    ', $level) . rcube_charset_convert($foldersplit[$level], 'UTF-7'); $OUTPUT->command('replace_folder_row', $oldname, $rename, $display_rename); foreach ($a_mboxes as $mbox) - if (preg_match('/^'.preg_quote($oldname.$delimiter).'/', $mbox)) + if (preg_match('/^'.preg_quote($oldname . $delimiter, '/').'/', $mbox)) { - $c_rename = preg_replace('/^'.preg_quote($oldname).'/', $rename, $mbox); + $c_rename = preg_replace('/^'.preg_quote($oldname, '/').'/', $rename, $mbox); $foldersplit = explode($delimiter, $c_rename); $level = count($foldersplit) - 1; $display_rename = str_repeat('    ', $level) . rcube_charset_convert($foldersplit[$level], 'UTF-7'); @@ -119,8 +119,14 @@ else if ($_action=='delete-folder') { $OUTPUT->command('remove_folder_row', get_input_value('_mboxes', RCUBE_INPUT_POST)); foreach ($a_mboxes as $mbox) - if (preg_match('/^'.preg_quote(get_input_value('_mboxes', RCUBE_INPUT_POST).$delimiter).'/', $mbox)) + { + $regex = get_input_value('_mboxes', RCUBE_INPUT_POST) . $delimiter; + $regex = preg_quote($regex, '/'); + if (preg_match('/^'. $regex .'/', $mbox)) + { $OUTPUT->command('remove_folder_row', $mbox); + } + } $OUTPUT->show_message('folderdeleted', 'confirmation'); $OUTPUT->send(); } @@ -153,9 +159,9 @@ function rcube_subscription_form($attrib) // add table header $out .= "\n"; - $out .= sprintf(''. + $out .= sprintf(''. '', - rcube_label('foldername'), rcube_label('subscribed')); + rcube_label('foldername'), rcube_label('messagecount'), rcube_label('subscribed')); $out .= "\n\n\n"; @@ -190,25 +196,26 @@ function rcube_subscription_form($attrib) $foldersplit = explode($delimiter, $folder); $level = count($foldersplit) - 1; $display_folder = str_repeat('    ', $level) . rcube_charset_convert($foldersplit[$level], 'UTF-7'); - $folder_html = $CONFIG['protect_default_folders'] && in_array($folder, $CONFIG['default_imap_folders']) ? rcube_label(strtolower($folder)) : $display_folder; + $folder_html = $CONFIG['protect_default_folders'] && in_array($folder, $CONFIG['default_imap_folders']) ? rcmail_localize_foldername($folder) : $display_folder; if (!$protected) $a_js_folders['rcmrow'.($i+1)] = array($folder, rcube_charset_convert($folder, 'UTF-7')); - $out .= sprintf('', + $out .= sprintf('', $i+1, $zebra_class, - Q($folder_html)); + Q($folder_html), + $IMAP->messagecount($folder)); if ($protected) - $out .= ''; + $out .= ''; else - $out .= ''; + $out .= ''; // add rename and delete buttons if (!$protected) - $out .= sprintf('', + $out .= sprintf('', rcube_label('renamefolder'), $edit_button, rcube_label('deletefolder'), @@ -233,9 +240,13 @@ function rcube_subscription_form($attrib) function rcube_create_folder_form($attrib) { + global $OUTPUT; + list($form_start, $form_end) = get_form_tags($attrib, 'create-folder'); unset($attrib['form']); + if ($attrib['hintbox']) + $OUTPUT->add_gui_object('createfolderhint', $attrib['hintbox']); // return the complete edit form as table $out = "$form_start\n"; @@ -292,7 +303,7 @@ function rcube_rename_folder_form($attrib) } $out .= "\n$form_end"; - + return $out; } @@ -305,7 +316,7 @@ $OUTPUT->add_handlers(array( )); // add some labels to client -rcube_add_label('deletefolderconfirm'); +rcube_add_label('deletefolderconfirm','addsubfolderhint'); $OUTPUT->send('managefolders'); ?> diff --git a/program/steps/settings/save_identity.inc b/program/steps/settings/save_identity.inc index eeadd58..787c5d2 100644 --- a/program/steps/settings/save_identity.inc +++ b/program/steps/settings/save_identity.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: save_identity.inc 543 2007-04-28 18:07:12Z thomasb $ + $Id: save_identity.inc 938 2007-12-10 15:27:19Z thomasb $ */ @@ -33,123 +33,78 @@ if (empty($_POST['_name']) || empty($_POST['_email'])) } -// update an existing contact -if ($_POST['_iid']) - { - $a_write_sql = array(); +$save_data = array(); +foreach ($a_save_cols as $col) +{ + $fname = '_'.$col; + if (isset($_POST[$fname])) + $save_data[$col] = get_input_value($fname, RCUBE_INPUT_POST, in_array($col, $a_html_cols)); +} - foreach ($a_save_cols as $col) - { - $fname = '_'.$col; - if (isset($_POST[$fname])) - $a_write_sql[] = sprintf("%s=%s", - $DB->quoteIdentifier($col), - $DB->quote(get_input_value($fname, RCUBE_INPUT_POST, in_array($col, $a_html_cols)))); - } +// set "off" values for checkboxes that were not checked, and therefore +// not included in the POST body. +foreach ($a_boolean_cols as $col) +{ + $fname = '_' . $col; + if (!isset($_POST[$fname])) + $save_data[$col] = 0; +} - // set "off" values for checkboxes that were not checked, and therefore - // not included in the POST body. - foreach ($a_boolean_cols as $col) - { - $fname = '_' . $col; - if (!isset($_POST[$fname])) - $a_write_sql[] = sprintf("%s=0", $DB->quoteIdentifier($col)); - } - if (sizeof($a_write_sql)) - { - $DB->query( - "UPDATE ".get_table_name('identities')." - SET ".join(', ', $a_write_sql)." - WHERE identity_id=? - AND user_id=? - AND del<>1", - get_input_value('_iid', RCUBE_INPUT_POST), - $_SESSION['user_id']); - - $updated = $DB->affected_rows(); - } - - if ($updated) - { +// update an existing contact +if ($_POST['_iid']) +{ + if ($updated = $USER->update_identity(get_input_value('_iid', RCUBE_INPUT_POST), $save_data)) + { $OUTPUT->show_message('successfullysaved', 'confirmation'); if (!empty($_POST['_standard'])) $default_id = get_input_value('_iid', RCUBE_INPUT_POST); if ($_POST['_framed']) - { + { // update the changed col in list // ... - } } + } else if ($DB->is_error()) - { + { // show error message $OUTPUT->show_message('errorsaving', 'error'); rcmail_overwrite_action('edit-identitiy'); return; - } } +} // insert a new contact else +{ + if ($insert_id = $USER->insert_identity($save_data)) { - $a_insert_cols = $a_insert_values = array(); - - foreach ($a_save_cols as $col) - { - $fname = '_'.$col; - if (!isset($_POST[$fname])) - continue; - - $a_insert_cols[] = $DB->quoteIdentifier($col); - $a_insert_values[] = $DB->quote(get_input_value($fname, RCUBE_INPUT_POST, in_array($col, $a_html_cols))); - } - - if (sizeof($a_insert_cols)) - { - $DB->query("INSERT INTO ".get_table_name('identities')." - (user_id, ".join(', ', $a_insert_cols).") - VALUES (?, ".join(', ', $a_insert_values).")", - $_SESSION['user_id']); - - $insert_id = $DB->insert_id(get_sequence_name('identities')); - } - - if ($insert_id) - { $_GET['_iid'] = $insert_id; if (!empty($_POST['_standard'])) $default_id = $insert_id; if ($_POST['_framed']) - { + { // add contact row or jump to the page where it should appear // .... - } } + } else - { + { // show error message $OUTPUT->show_message('errorsaving', 'error'); rcmail_overwrite_action('edit-identity'); return; - } } +} // mark all other identities as 'not-default' if ($default_id) - $DB->query( - "UPDATE ".get_table_name('identities')." - SET ".$DB->quoteIdentifier('standard')."='0' - WHERE user_id=? - AND identity_id<>? - AND del<>1", - $_SESSION['user_id'], - $default_id); + $USER->set_default($default_id); // go to next step rcmail_overwrite_action($_framed ? 'edit-identity' : 'identities'); diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc index 9b65af0..a2894d8 100644 --- a/program/steps/settings/save_prefs.inc +++ b/program/steps/settings/save_prefs.inc @@ -15,7 +15,7 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: save_prefs.inc 768 2007-09-01 14:55:10Z till $ + $Id: save_prefs.inc 938 2007-12-10 15:27:19Z thomasb $ */ @@ -44,15 +44,12 @@ if (isset($_POST['_language'])) // force min size if ($a_user_prefs['pagesize'] < 1) - { $a_user_prefs['pagesize'] = 10; - } + if (isset($CONFIG['max_pagesize']) && ($a_user_prefs['pagesize'] > $CONFIG['max_pagesize'])) - { $a_user_prefs['pagesize'] = (int) $CONFIG['max_pagesize']; - } -if (rcmail_save_user_prefs($a_user_prefs)) +if ($USER->save_prefs($a_user_prefs)) $OUTPUT->show_message('successfullysaved', 'confirmation'); diff --git a/skins/default/common.css b/skins/default/common.css index c7743e8..82e1d40 100644 --- a/skins/default/common.css +++ b/skins/default/common.css @@ -10,6 +10,7 @@ body body.iframe { margin: 0px; + background-color: #FFF; } body.extwin @@ -106,6 +107,11 @@ img font-size: 11px; } +.hint +{ + color: #666; + font-size: 11px; +} /** common user interface objects */ diff --git a/skins/default/editor_content.css b/skins/default/editor_content.css index 182e791..e8b1c88 100644 --- a/skins/default/editor_content.css +++ b/skins/default/editor_content.css @@ -3,11 +3,14 @@ body, td, pre { font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; + font-size: 12px; } body { - background-color: #FFFFFF; + background-color: #FFFFFF; + margin-left: 4px; + margin-right: 4px; + margin-top: 2px; } .mceVisualAid { diff --git a/skins/default/images/buttons/markread_act.png b/skins/default/images/buttons/markread_act.png new file mode 100644 index 0000000000000000000000000000000000000000..32c051140f25ace4d16957b0307458cd58fb0180 GIT binary patch literal 1772 zcmV z@{lD6m)8aEll!~BzQ1#S_wK?)68eL)eShct&hK}=kI(mU&fx?>z<4$p#<`8V0t(k4 z=jT&`k47{2EB6E($b)jZe9)A|V#ez9bnb~X5Mw~3uMd4A3~g4s$vwW%aM(Q_;H|<) z?O^t|f{X8ekz%Mq`c4Bl83#G(f3$8hQX{uRt@OjO>W}fX|BLiZh12);VB4(Y#J~Z$ zVlayUKlRvL;A#V~Lc{scNDiaD2YV}*BPK8b4uQuHbs2cjUxg{YG0ZyxJ*_qq6r9R~ zgZlpkVUMj9AC@NI*!>;owRON`??pxDCHC!3_cinnbdzG;IDUU8cHEeYhvqtGtZ+{l zGmk^SL2!yqrugB97=`K&1=*OhzN*6 z^8fh`B^?*pT&Pb3d=&v~oEo(aOLc2;xcY5Wb^XQWZgk`#_u)}mrvOLrbKGDwN9O|4 zdS=i(?3t5~Ps@|hZh3$=r)MHSH4!K3b|RfD|E>85iras6FV?Dc*gN-kOpt|AKniYi z977P`IPNHQ!9;c`N{c83vxm6Afu_DY*jJgxgo~|Me-W`ki}2Z;^XRpA;!NZIL5#bs zt=LnZf+ka?SWw_HT;w&Rm5CWjG{ITA@P~H{&}xHKk3@ob!K5@cSJZY6H@hw)NHrN3 znzCWxjf1$((=Nv%?HkY=+R)c;gvn@h^BU4bpSBYD5?v*_>m36GTYTtZERWhunedc* z<>~rNmX23ie)RI6pInQiNgEO4zkpfo+E^XlL8vDZ1E-HDPyFSvX{a|h;@YFrSU7nV z9+?`@(03CX3#Sj_rt_JBDBszr>?uG}$a+jvM@h&!Mhe2~L>&?m-a+U}9Y19Vjx4+l ztJ#7B)oY=a`C_VHJZk%jFq15OV5%a^1FPh92fe6{o?@8E0AlMeWN-pYplWp{<9QwIW|1nV&NQ=-maq!!d?5bOlatZ?9B% zfVU#E7y@E?uMEpTxOxWrwjnB8vX+DjuJv%ofH2lNzU$>q<*q3cAD znLrtBKCXGe4LjT}aEzi7dLh8_nHS5N6Ijk;yW)rNbsH*351J6hjDX+_qWb!JRFs#Y zvr|vh37+R+Fc?^w4G0W`HaG-9K|y#nb~fVUpJQ8~D6p)o6m_*VFk4Khxm$yjloT^n zKpCxnKrvym+wBcRwe+4-SXg*_SQpssJPsYqa>JUHm4%p?7$}uWv7EB`_I5ooGxy>8 z^+KAHAtXeLj*bpzdg^r8zkffpS}jy6mB@r27#NsbQ&VHe$jFGNIg!U^;uTCi?^TLP zLnJ0HhS_XJ7%_{Bi(^Xl_4lKrvkP6_-SGAELuzU&j8ygJ%$_`^p{n;UK8Ny*8`Ir$SbzP_vwktP$n2RWAEL3{M9GV&($zmZoA_7ZZ zT0C4yWkNM{hwuzeo6Uyks0gfFu>v3M+KuwEvQNY-f@H10&by!!uLt}t7l=n--MzY6 zyuW3O*L}fLuynX^)8pNaN7ytr@iIC=f z`}Y06u%n0}yEm4B;pa4l_pk3Utl_`Lut|oWL0wLr0U&_DE@j1PCCo|Dt27{-cBYcklks^JMt{`Ew7D zH~Ihndu;#D&0zT7n&W*=nWW5*s#009IxK-0jBp)T2)Va4foi0Fe# zh8Ncu85ZqzWcb8o!BCN3jiC{w2Lu2D2pkLj#R>nve|h$Q&HViT|1U87f3Sx2e`|)@ z|5K+<{U?+{0Ro5tr0BqgW=PyUKKOro3&;QV9RL4EjvV<0v2+Jc1m1nI4eo%4#TT$)sjbm;Z)s42@wn9e4^Il%ZG zd~NQ>gC;f7kF+3h9u~#VCsq2*SUE-+st`9drH2q6ZN;{%OkkuGBG9 ztyzFa##y*$U24go)705|d182z#&Ms?$PGYJdKNHNhAHy^E>wYY1RnRyJpUr&yq^~g zM#r6)ot`v_{|#->Dp}h4km|}y$<*I_l4vB1rt3h)6!iEqiXD(K;X=hxe-DLDE|+Ts z0|s#+@IQ4>XXbeqbv!#k-SX?<8S|5+4uEkd0XXopjEINfd5B_Y=e`#$XDuMzav>HOiR`_j dkf@&m3;^o(4md@#11A6g002ovPDHLkV1lE9T5tdW literal 0 HcmV?d00001 diff --git a/skins/default/mail.css b/skins/default/mail.css index fb130ce..aa3f643 100644 --- a/skins/default/mail.css +++ b/skins/default/mail.css @@ -41,6 +41,49 @@ padding-left: 2px; } +#markmessagemenu +{ + position: absolute; + top: 32px; + left: 90px; + width: auto; + visibility: hidden; + background-color: #F9F9F9; + border: 1px solid #CCC; + padding: 1px; + opacity: 0.9; + z-index: 240; +} + +ul.toolbarmenu +{ + margin: 0; + padding: 0; + list-style: none; +} + +ul.toolbarmenu li +{ + font-size: 11px; + white-space: nowrap; + min-width: 130px; + width: auto !important; + width: 130px; +} + +ul.toolbarmenu li a +{ + display: block; + color: #a0a0a0; + padding: 2px 8px 3px 12px; + text-decoration: none; +} + +ul.toolbarmenu li a.active:hover +{ + background-color: #ddd; +} + #listcontrols { position: absolute; @@ -71,6 +114,9 @@ td.formlinks a:visited #mailboxcontrols a.active, #mailboxcontrols a.active:active, #mailboxcontrols a.active:visited, +ul.toolbarmenu li a.active, +ul.toolbarmenu li a.active:active, +ul.toolbarmenu li a.active:visited, td.formlinks a, td.formlinks a:visited { @@ -152,15 +198,12 @@ td.formlinks a:visited #messagepartframe { - position: absolute; - top: 0px; - left: 0px; - right: 0px; - bottom: 0px; - width: auto; - height: auto; + width: 100%; + height: 100%; border: 1px solid #999999; background-color: #F9F9F9; + /* css hack for IE */ + height: expression(parseInt(document.getElementById('messagepartcontainer').offsetHeight)+'px'); } @@ -193,6 +236,7 @@ td.formlinks a:visited { display: block; height: 12px; + margin: 0; padding: 3px 10px 4px 10px; background-color: #EBEBEB; background-image: url(images/listheader_aqua.gif); @@ -230,12 +274,10 @@ td.formlinks a:visited #mailboxlist li { - /* height: 18px; */ font-size: 11px; background: url(images/icons/folder-closed.png) no-repeat; background-position: 10px 1px; border-bottom: 1px solid #EBEBEB; -/* IE 5.5 margin-left: -16px; */ } #mailboxlist li.inbox @@ -272,11 +314,6 @@ td.formlinks a:visited text-decoration: none; } -#mailboxlist li, #mailboxlist li.unread -{ - /* background-image: url(images/mailbox_list.gif); */ -} - #mailboxlist li.unread { font-weight: bold; @@ -288,7 +325,8 @@ td.formlinks a:visited background-color: #929292; } -#mailboxlist li.selected a +#mailboxlist li.selected > a, +#mailboxlist li.droptarget li.selected a { color: #FFF; font-weight: bold; @@ -305,28 +343,10 @@ td.formlinks a:visited padding: 0; margin:0; border-top: 1px solid #EBEBEB; -} - -#mailboxlist ul li { padding-left: 15px; background-position: 25px 1px; -} - -#mailboxlist li.selected li, -#mailboxlist li.droptarget li { background-color: #F9F9F9; -} - -#mailboxlist li.unread li { - font-weight: normal; -} - -#mailboxlist li.unread li.unread { - font-weight: bold; -} - -#mailboxlist li.selected li a{ - color: black; + color: blue; font-weight: normal; } @@ -360,6 +380,10 @@ body.messagelist width: expression(parseInt(document.getElementById('mailcontframe').clientWidth)+'px'); } +/* safari hack \*/ +html>body*#messagelist[id$="messagelist"]:not([class="none"]) { table-layout: auto; } +/**/ + #messagelist thead tr td { height: 20px; @@ -632,16 +656,20 @@ table.headers-table tr td.subject { position:relative; min-height: 300px; - padding-top: 10px; padding-bottom: 10px; background-color: #FFFFFF; } div.message-part { - padding: 8px; - padding-top: 10px; - overflow: hidden; + padding: 10px 8px; + border-top: 1px solid #ccc; +/* overflow: hidden; */ +} + +#messagebody div:first-child +{ + border-top: 0; } div.message-part a diff --git a/skins/default/settings.css b/skins/default/settings.css index 53e948c..7ee50f5 100644 --- a/skins/default/settings.css +++ b/skins/default/settings.css @@ -69,11 +69,11 @@ span.tablink-selected a #folder-manager { - width: 500px; - bottom: 120px; + width: 540px; + bottom: 140px; overflow: auto; border: 1px solid #999999; - height: expression((parseInt(document.documentElement.clientHeight)-215)+'px'); + height: expression((parseInt(document.documentElement.clientHeight)-235)+'px'); } #folder-manager.droptarget @@ -104,7 +104,7 @@ span.tablink-selected a #identity-details { margin-top: 30px; - width: 500px; + width: 600px; border: 1px solid #999999; } @@ -119,8 +119,8 @@ span.tablink-selected a #bottomboxes { position: absolute; - width: 500px; - height: 100px; + width: 540px; + height: 120px; left: 20px; bottom: 20px; } @@ -142,7 +142,7 @@ div.boxtitle, div.settingsbox { - width: 500px; + width: 540px; margin-top: 20px; margin-bottom: 20px; border: 1px solid #999999; @@ -157,13 +157,13 @@ div.settingspart #subscription-table { width: 100%; - table-layout: fixed; } #subscription-table tbody td { + height: 16px; padding-left: 6px; - padding-right: 20px; + padding-right: 10px; white-space: nowrap; border-bottom: 1px solid #EBEBEB; background-color: #F9F9F9; @@ -183,12 +183,30 @@ div.settingspart background-color: #FFFFA6; } -#subscription-table td.name +#subscription-table thead td.name +{ + width: 240px; +} + +#subscription-table thead td.msgcount +{ + width: 70px; +} + +#subscription-table thead td.subscribed +{ + width: 60px; +} + +#subscription-table tbody td.msgcount, +#subscription-table tbody td.subscribed { - width: 280px; + padding-left: 18px; } -#subscription-table td.subscribed +#subscription-table thead td.rename, +#subscription-table thead td.delete { - width: 80px; + width: 20px; + text-align: center; } diff --git a/skins/default/splitter.js b/skins/default/splitter.js index 97965a2..0b02fb5 100644 --- a/skins/default/splitter.js +++ b/skins/default/splitter.js @@ -11,8 +11,8 @@ function rcube_splitter(attrib) this.id = attrib.id ? attrib.id : this.p1id + '_' + this.p2id + '_splitter'; this.orientation = attrib.orientation; this.horizontal = (this.orientation == 'horizontal' || this.orientation == 'h'); - this.offset_1 = bw.ie ? 0 : (bw.safari ? 2 : -1); - this.offset_2 = bw.ie ? -2 : (bw.safari ? -2 : 1); + this.offset_1 = bw.ie ? 0 : -1; + this.offset_2 = bw.ie ? -2 : 1; this.pos = 0; this.init = function() diff --git a/skins/default/templates/addidentity.html b/skins/default/templates/addidentity.html index d38d806..8162d1c 100644 --- a/skins/default/templates/addidentity.html +++ b/skins/default/templates/addidentity.html @@ -13,7 +13,7 @@
- +

diff --git a/skins/default/templates/compose.html b/skins/default/templates/compose.html index 7e02ff5..f45c63b 100644 --- a/skins/default/templates/compose.html +++ b/skins/default/templates/compose.html @@ -137,10 +137,8 @@ function rcmail_prev_sibling(elm)
%s%s[%s]
%s
%s%s%s%s%s  
%s
%s%d '.($subscribed ? '•' : '-').' '.($subscribed ? '•' : '-').''.$checkbox_subscribe->show($subscribed?$folder:'', array('value' => $folder)).''.$checkbox_subscribe->show($subscribed?$folder:'', array('value' => $folder)).'%s'. - '%s%s'. + '%s - - :  - - + :  +
diff --git a/skins/default/templates/editidentity.html b/skins/default/templates/editidentity.html index 4fb087d..04a3e8b 100644 --- a/skins/default/templates/editidentity.html +++ b/skins/default/templates/editidentity.html @@ -13,7 +13,7 @@
- +

diff --git a/skins/default/templates/identities.html b/skins/default/templates/identities.html index 7e311cc..f9f3436 100644 --- a/skins/default/templates/identities.html +++ b/skins/default/templates/identities.html @@ -12,7 +12,7 @@
- +

diff --git a/skins/default/templates/login.html b/skins/default/templates/login.html index 6f7999d..1950be2 100644 --- a/skins/default/templates/login.html +++ b/skins/default/templates/login.html @@ -28,7 +28,7 @@ -<roundcube:object name='productname' /> +<roundcube:object name='productname' /> diff --git a/skins/default/templates/mail.html b/skins/default/templates/mail.html index a38c06a..2c3846b 100644 --- a/skins/default/templates/mail.html +++ b/skins/default/templates/mail.html @@ -5,36 +5,50 @@ + -
- - - - - - - -
- -
- -
- -
- -  - - -
-
-
+

@@ -84,5 +98,42 @@
+
+ + + + + + + + + +
+
    +
  • +
  • +
+
+
+ +
+ +
+ +
+ +  + + +
+ + diff --git a/skins/default/templates/managefolders.html b/skins/default/templates/managefolders.html index d378619..1637972 100644 --- a/skins/default/templates/managefolders.html +++ b/skins/default/templates/managefolders.html @@ -17,7 +17,7 @@ + renameIcon="/images/icons/rename.png" />
@@ -26,8 +26,9 @@
:  - + +
diff --git a/skins/default/templates/messagepart.html b/skins/default/templates/messagepart.html index cf5803d..9da9d19 100644 --- a/skins/default/templates/messagepart.html +++ b/skins/default/templates/messagepart.html @@ -15,7 +15,7 @@
- +
-- 2.39.5